- 博客(78)
- 问答 (1)
- 收藏
- 关注
原创 组合数学——排列与组合
事件A有m种可能,把A分成K类不相交的等量子集,则每类中有m/k种可能。事件A有m种可能,事件B有n种可能,则事件A和B一共有m+m种可能。事件A有m种可能,事件B有n种可能,则A发生后B发生的可能有mn种。将两种情况的数目相加,总共有。个符合条件的四位数。
2025-04-01 18:28:44
786
原创 数字图像分析——图像数字化
是描述像素空间关系的核心概念,直接影响图像分割、目标识别和区域分析等任务。,是连接和连通的基础。,指一组像素通过连接关系形成的整体。在数字图像处理中,像素间的。
2025-03-27 16:42:48
956
原创 C++进阶——auto
它的核心作用是根据初始化表达式的类型,由编译器自动推断变量的类型。以下结合代码逐步解释。的推导严格依赖初始化表达式的类型,确保类型正确性。变量必须初始化,且初始化表达式不能为。是 C++11 引入的关键字,用于。当初始化表达式已明确类型时(如。需警惕隐式类型转换(如推导出。若初始化表达式包含引用或。
2025-03-26 16:21:00
774
原创 C++进阶——智能指针
默认选择unique_ptr:明确所有权,高效安全。共享资源用shared_ptr:配合weak_ptr用于观察共享资源。避免手动newdelete:减少内存管理错误。
2025-03-26 16:17:43
915
原创 C++进阶——指针
操作符:取地址操作符(Address-of Operator)操作符:声明指针类型或解引用操作符(Dereference Operator)内存可视化第二部分:指针操作深度解析基本操作指针算术关键规则:指针加减以指向类型的大小为单位指针与数组的关系第三部分:多级指针与高级类型二级指针(Pointer to Pointer)2.结构体与指针3.函数指针第四部分:动态内存管理堆内存分配常见内存错误悬空指针(Dangling Pointe
2025-03-25 16:32:12
905
原创 C++进阶——类与对象
基本语法public: // 访问修饰符(后续详解)// 成员变量// 成员函数// 类外定义成员函数示例:汽车类public:// 成员变量int speed;// 成员函数// 创建对象Car myCar;// 调用方法// 输出: Toyota Red, Speed: 20 km/hreturn 0;
2025-03-22 20:05:57
361
原创 头方向细胞神经生物学原理及建模
头方向细胞是一类特殊的神经元,其放电活性与动物头部在水平面的朝向密切相关,而与位置、姿势或行为无关。当头部转向特定“最优方向”时,相应方向的神经元会高频放电,偏离该方向时放电率迅速降低,表现出极强的方向选择性。其核心功能是为大脑提供实时方位信息,支持空间记忆和路径整合。
2025-03-17 17:36:10
177
原创 组合数学——鸽巢原理
假设n个抽屉至多有1件物品,那么至多有n件物品,与有n+1件物品的条件矛盾,故鸽巢原理成立。个“物品”),根据鸽巢原理,至少有两个数属于同一余数类,即这两个数的余数相同。证明任意选取的 n + 1个整数中,必存在两个数,它们的差为n的倍数。如果把n+1件物品放进n个抽屉,必定存在至少一个抽屉里有超过两件物品。个整数中,必存在两个数,它们的差为。件物品,与题设矛盾,故原定理成立。个物品放进n个抽屉,则第。件物品,则n个抽屉最多有。
2025-03-13 17:29:31
471
原创 建图——单目地图重建
前面介绍的特征点的深度确定实际上已经建立了地图,不过是稀疏地图。对于实际导航、避障等的地图要求的是稠密地图。所以这篇文章先介绍单目相机进行稠密地图重建。此方法广泛应用于经典SLAM系统(如LSD-SLAM、ORB-SLAM的稠密模块),是单目稠密重建的数学基础。是经典多视图几何方法的核心技术。由块匹配的相似性计算(如 SSD 的曲率)。通过配方法合并指数项,可得更新后的均值和方差。(由块匹配得到),假设观测噪声为高斯分布。接下来介绍块匹配的方法。单目稠密地图重建中,(由极线搜索得到),)时,认为深度收敛。
2025-03-12 16:29:55
854
原创 回环检测——词袋模型
简单来说就是误差会随着机器人的运动逐渐积累。而回环检测可以检测是否回到了起点,或者曾经来过的位置。用这个信息来修正系统的误差,相当于每次回到原点都进行一次校准。从而避免误差的持续累积。是回环检测中最流行的方法之一,这篇文章将介绍SLAM回环检测中的词袋模型,以及用C++的BoW库(以DBoW3为例)在Linux环境下实现字典训练和相似度计算的完整流程。词袋模型(Bag of Words, BoW)是一种将图像特征编码为“视觉单词”的技术,常用于SLAM中的回环检测。
2025-03-09 16:54:12
609
原创 位姿图优化
实际上,经过若干次迭代之后,收敛的特征点位置变化很小,发散的外点则已被剔除。对收敛点再进行优化,似乎是有些费力不讨好的。因此,我们更倾向于在优化几次之后就把特征点固定住,而不再实际地优化它们的位置估计。形式过于复杂,我们通常取它们的近似。接下来就可以按照前面的最小二乘问题的方法进行求解。用高斯牛顿法等方法。这种把优化变量去除特征点,只剩下位姿的优化问题就构成了。由于存在噪声,这个式子不会严格相等,于是上式两边左乘。两个位姿构成了结点,过度位姿构成了位姿图的边。,但由于噪声等误差的存在而并不等于0。
2025-03-08 19:08:31
793
原创 滑动窗口法——实践中的BA
带有相机位姿和空间点的图优化称为BA,它能够有效地求解大规模的定位与建图问题。但是在SLAM过程中,往往需要控制BA的规模,以保持计算的实时性。最简单的控制BA规模的思路,是仅保留离当前时刻最近的N个关键帧。于是,我们的BA将被固定在一个时间窗口内,离开这个窗口的则被丢弃。这种方法称为滑动窗口法。目标:在计算资源受限的情况下,通过维护一个固定大小的状态窗口,持续优化最新的相机位姿和地图点,同时边缘化旧状态以保持计算效率。变量定义:优化目标:最小化窗口内所有观测的重投影误差:E(x)=∑i=1M∑j∈V
2025-03-04 21:12:58
557
原创 视觉SLAM中Bundle Adjustment(BA)问题
重投影误差:对于第iii个相机位姿(参数化为李代数ξi∈se3ξi∈se3)和第jjj个三维点Xj∈R3Xj∈R3,其投影到图像的观测像素坐标为uijuij。pijπexpξi∧Xjpijπexpξi∧Xj其中π⋅\pi(\cdot)π⋅eijuij−pijeijuij−pij目标函数:minξ。
2025-03-03 17:18:58
836
原创 直接法估计相机位姿
光度误差:基于灰度不变假设,直接比较像素亮度。李代数扰动模型:用于计算位姿变化对投影点的影响。雅可比矩阵:结合图像梯度和几何变换导数,指导优化方向。多尺度优化:还可以采用图像金字塔提高鲁棒性和收敛性。通过迭代优化,直接法能够有效估计相机的位姿变化,适用于特征缺失的场景,但对光照变化和初始值敏感。
2025-03-02 16:34:37
1241
原创 运动跟踪——Lucas-Kanade光流
前面的文章我们介绍了使用特征点估计相机运动的方法。尽管其在视觉里程计中占据主流地位,但它至少有以下缺点: 因此我们通过使用光流法跟踪特征点的运动,替代特征点的匹配。光流法的计算时间要优于特征点匹配。 计算部分像素运动的称为稀疏光流,计算所有像素的称为稠密光流。稀疏光流以Lucas-Kanade光流为代表,并可以在SLAM中用于跟踪特征点位置。稠密光流以Horn-Schunck光流为代表。文章以LK光流为例进行介绍。Lucas-Kanade(LK)光流法是一种基于亮度恒定假设和局部运动一致性假设的稀
2025-03-01 17:30:27
729
原创 ICP-通过一组匹配的3D点估计相机运动
通过最大化点对之间的协方差,使得变换后的源点云与目标点云在最小二乘意义下对齐。通过上述步骤,可高效求解已知匹配3D点对的刚体变换,适用于点云配准、物体位姿估计等场景。的奇异向量反映了点云之间的主要对齐方向。),其对角线元素绝对值不超过1。通过SVD分解,协方差矩阵。则通过质心差校正整体偏移。目标是求解刚体变换旋转矩阵。的对角线元素尽可能大。利用迹的循环置换性质。
2025-02-28 22:45:17
993
原创 与视觉SLAM相关的李代数知识
中,我们使用了李代数进行优化求解,以去除旋转矩阵本身的约束以简化优化问题。因此有必要对相关的李代数知识进行讲解。SO(n)和SE(n)在实数空间上是连续的。如果某种集合中的成员进行某种运算,得到的结果仍然属于这个集合,则这种运算是“良好的运算”,即对这个运算是。只有一个(良好的)运算的集合,称之为群。旋转矩阵和变换矩阵都是对乘法封闭的群。通过扰动模型和反对称矩阵的性质,可高效计算旋转矩阵李代数的导数,为非线性优化提供理论支持。,其中p为三维点,p’ 为观测值。导数的物理意义是:当李代数参数。
2025-02-26 18:55:28
730
原创 最小化重投影误差求解PnP
旋转矩阵本身带有约束,即正交且行列式为1。而有约束的优化问题比无约束的优化问题复杂的多。因为李代数的特点,李代数表示的天然满足旋转矩阵的约束,因此通常使用。因为这个误差是将3D点的理论投影位置与观测到的实际投影位置之间的误差,因此称为。求相机的位姿R,T。
2025-02-24 17:15:47
964
原创 非线性最小二乘拟合问题
高斯牛顿法中采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果,所以我们很自然地想到应该给∆x添加一个范围,称为。SLAM的目标是最小化运动方程和观测方程的误差,这就是一个最小二乘问题。而两个方程通常是非线性的,因此也是一个。的求解要求H可逆,当H不可逆时,求解会出现问题。是f(x)的一阶导数。这个范围限定了二阶近似的有效区域,这类方法也称为。2.对于第k次迭代,求出当前的雅可比矩阵。之后类似高斯牛顿法求解即可。(此时这个方程是关于。
2025-02-21 20:33:11
618
原创 三角测量——用相机运动估计特征点的空间位置
经过对极约束的求解,现在已知R,t,我们想求解两个特征点的深度z1,z2。(在单目相机模型中,深度被抹去了,因此若想建图需要求解‘z’),即,两条线在两个平行的平面中,而两个平面互相平行。因此我们会选择两条线最近的的近似为p点,也就是。当然,由于噪声的存在,我们估得的R,t不一定精确使式子成立,所以更常见的做法是求。使用对极约束估计了相机运动后,接下来利用相机运动估计特征点的空间位置,使用的方法就是。的一个方程,可以根据它直接求得。该式左侧为零,右侧可看成。的存在,两条线可能会出现。
2025-02-11 22:56:40
1330
原创 对极几何方法——2D图片特征点估计运动
E为3×3的矩阵,有9个未知数。为了便于计算只考虑它的尺度等价性(即矩阵同时除以其中一个未知数,可以使得这个未知数变成1,这样的E也是等价的,从而可以减少一个未知数),使用8对点来估计E——这就是经典的。由于E和F只相差了相机内参,而内参在SLAM中通常是已知的,所以实践中往往使用形式更简单的E。考虑一对匹配点,它们的归一化坐标为x1=[u1,v1,1]T,x2=[u2,v2,1]T。同理,对于其他点对也有相同的表示。如果这八个点互不相关,即系数满秩,那么E的各元素就可由上述方程解得。
2025-02-08 20:13:02
833
原创 图像特征点提取与匹配
有限性:数量较少局域性:特征信息只与较小的区域有关可重复性:相同的特征点可以在相邻帧图片中找到可区分性:不同的特征点易于区分图1可作为特征点的像素点图1 可作为特征点的像素点图1可作为特征点的像素点特征点由**关键点(Key-point)和描述子(Descriptor)**两部分组成。关键点:该特征点在图像里的位置,有些特征点还具有朝向、大小等信息描述子:描述关键点,用于与其他特征点进行区分。
2025-02-05 23:04:12
721
原创 传感器——针孔相机模型
针孔相机模型是一种描述相机成像原理的数学模型,模拟了相机将三维世界中的物体投影到二维图像平面上的过程。而像素坐标(u,v)通常经过一个平移。和缩放α,β(x和y轴上的缩放比例)针孔相机模型的建模及分析过程。
2025-02-05 15:21:35
1167
原创 滞后校正举例应用
是系统相角裕量不足的频率点的相角裕量。,可以绘制其 Bode 图并计算相角裕量。在 MATLAB 中,可以使用。运行以上代码后,可以得到相角裕量为。如果把滞后校正器的传递函数改为。根据滞后校正器的传递函数。根据校正后的闭环传递函数。,则相角裕量的补偿量为。
2023-05-15 09:32:19
745
1
原创 最速下降法
是步长(学习率),通常需要通过试错法进行选取,以确保迭代的稳定性和收敛性。是一个凸二次函数,因此最速下降法可以保证收敛,并得到全局最优解。可以看到,最速下降法迭代6次后收敛,得到的最小值为0,也就是函数。请您继续提问,我将尽快回答您的问题。然后,选择一个初始点。
2023-04-10 23:29:34
956
1
原创 MATLAB黄金分割法
并初始化了黄金分割法的参数。在迭代计算过程中,我们不断计算两个新的区间端点 x1 和 x2,并通过比较它们在目标函数上的取值来缩小区间。当区间长度小于指定的精度要求 tol 时,算法停止迭代,输出最小值和最优解。最后,我们通过绘图描述了优化过程,其中黄色圆点表示找到的最优解。从图中可以看出,在迭代过程中,算法不断收敛于最优解 -1,直至满足精度要求。上述代码中,我们使用 MATLAB 的匿名函数表达式定义了目标函数。以下是使用MATLAB编写黄金分割法的代码,以求解函数f(x)=x。
2023-04-10 17:49:02
5895
2
原创 MATLAB编写黄金分割法
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YICxmkN9-1681116905370)(https://cdn.nlark.com/yuque/0/2021/png/151482/1627456468342-061f1ade-72db-49c0-a54a-89e6c2b6ffdc.png)]从图像和输出结果中可以看出,使用黄金分割法可以在迭代次数不多的情况下快速得到。以下是使用MATLAB编写黄金分割法求解。请问有什么需要我帮忙继续的吗?
2023-04-10 17:29:15
2484
原创 每日读书-<自媒体营销与运营实战>
自媒体概述如何开始运营自媒体首先要考虑定位的问题,经营自媒体首先要明确定位,选择自己喜欢、擅长的领域去创作内容,并且一定要持续更新内容才能留住粉丝。前期先不要考虑收益问题,至少过3个月以后再开始关注营利问题。在运营前期,自媒体人的首要任务是将自己的内容做好、做到极致,之后盈利会变得更容易。运营自媒体的难点1) 做自媒体一定是辛苦的。找素材,创作,可能还没有回报。2) 符合用户的喜好难。在互联网时代,可供用户选择的自媒体太多了,你没有优质的内容,没有特点,无法把握用户的喜好,用户马上就会忘记你。但
2021-07-24 10:17:36
178
原创 每日读书-web前端开发-js
js基础1.基本语法变量:所有变量用var定义运算函数function 函数名 (参数1,参数2....) {...}如何在html中调用js1)写在<script><\script>中2)写在单独的js文件中用<script src="../js/index.js"></script>调用html调用js函数需要用到事件,在某个事件下调用某个函数。比如鼠标移入则字体颜色改变等。2.事件鼠标事件1) onclick:鼠标点击
2021-07-23 11:11:21
647
原创 每日读书-1-<副业赚钱之道:从0到1打造多元化收入>
第一章. 明确做副业的目的做副业的好处● 副业可以带给我们额外收入,重构我们的收入结构,可以更好地应对潜在风险。● 副业可以作为转型的稳妥策略,帮助我们顺利转换到新的领域、新的职位上。● 副业能够塑造新的价值点,让我们找到独立于工作角色和组织的新的立足点。● 副业可以丰富生活,给我们更多乐趣。● 我们可以因为副业接触不同的圈层,看到更多的未来可能性。● 副业让我们能够换一双鞋子走路,换一双眼睛看待世界,更好的认识和体验世界。你做副业的目的使什么呢?(不要太多,3个以内)请仔细考虑这个问题,
2021-07-22 18:07:03
3896
原创 最长上升子序列
还是要巩固基础知识,之前打最长上升子序列都是打的二分法,而忽略了dp版的。殊不知很多dp都是从这里面衍生出的。 详细分析一下代码; f[i] 表示到i为止的最长上升子序列。一开始初始化为1,自己本身算1个; 重点是判断,很多有限制条件的dp都是从中衍生的。 比如今天考试的 在草稿纸上写了 n 个数字(A1, A2, A3…Ai) 他想在 n 个数中间去除掉一些数,其他数是否能...
2018-09-09 17:12:58
155
原创 「大整数求逆元」
原理:若a,b互质,则有a的逆元,等于a%b的逆元; 所以可以在把大整数转为数字时取模。然后再求逆元例题P2613 【模板】有理数取余题目描述给出一个有理数c=abc=\frac{a}{b}c=ba,求c mod19260817c\ \bmod 19260817c mod19260817的值。 输入输出格式 输入格式:一共两行。第一行,一个整数aaa。 第二行...
2018-09-06 15:43:27
2323
原创 暴力求解总结
- 枚举除法(Division, UVa 725)输入正整数n,按从小到大的顺序输出所有形如abcde/fghij = n的表达式,其中a~j恰好为数字0~的一个排列(可以有前导0),2≤n≤79。 样例输入: 62 样例输出: 79546 / 01283 = 62 94736 / 01528 = 62 ·「分析」 分成两部分加一些细节处理。枚举数字(分母),至少...
2018-08-22 18:43:34
865
原创 子集生成算法
子集生成算法:给定一个集合,枚举所有可能的子集。为了简单起见,先讨论的集合中没有重复元素。增量构造法code:int ans[1000],n;bool vis[1000];void dfs(int x,int cs){ for (int i = 1;i <= cs ;i++) cout<<ans[i]<<" "; cou...
2018-08-13 20:39:34
696
原创 [欧拉回路]
define : 奇点——度数是奇数; 无向图: 1.是连通的, 2最多只有两个奇点, 则一定存在欧拉道路。 如果有两个奇点,则必须从其中一个奇点出发,另一个奇点终止; 如果无奇点,则可以从任意点出发,最终一定会回到该点(称为欧拉回路)。 有向图的结论: 1.最多两个点的入度不等于出度, 2.必须是其中一个点的出度恰好比入度大1(把它作为起点),另一个的入度比出度大1(把它作为终...
2018-08-12 16:54:06
527
1
原创 种子填充
dfs版; 要事先把不行的判掉? UVA572 Oil Deposits 【题目大意】输入多个m行n列的矩阵,用00表示输入结束。找出有多少块石油区域,用“@”代表石油,假如两个“@”在横,竖或对角线上相邻,就说它们位于同一区域,对于每个输入,输出一个数表示有几个石油区域。void dfs(int r, int c) { if(r < 0 || r >= n || ...
2018-08-11 12:10:49
288
空空如也
视频的currentTime无法修改,自动跳到0
2021-07-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人