一、跟踪线程
跟踪线程:线程输入数据为单帧图像,其功能主要包括:
(1)从输入系统的图像帧中提取特征点,进行特征匹配和误匹配消除。使用正确的匹配点对来估计图像之间的相机运动;同时利用双目测距原理计算匹配特征点的深度数据,并将其转换为3D地图点;
(2)判断该帧是否满足成为关键帧的条件。如果满足条件,该帧将被转换为关键帧,并准备输出到后续线程。
二、局部映射线程
局部映射线程:这个线程的输入是前一个线程输出的过滤后的关键帧。它的主要作用是维持一定数量的关键帧,以最高的效率表现周围的环境。该线程的具体计算步骤如下:
(1)在插入关键帧之后更新公共视图和最小生成树,并且添加从正确匹配的特征中恢复的3D地图点;
(2)在普通视图中选择连续三帧检查生成的标测点。如果有三帧不能同时观察到的图点,则认为该图点不稳定,会将其删除;
(3)为了保证局部地图点数量的动态平衡,需要恢复一些新的地图点。为了在关键帧中插入尚未映射的地图点的2D要素,在历史帧中为其找到正确的匹配关系并恢复其3D坐标。如果恢复的地图点能够被相邻的三帧观察到,则表明该地图点处于稳定状态,是新的地图点;
(4)以前一个线程得到的姿态估计为初始值,用光束法平差(BA)优化局部地图中所有的姿态和地图点坐标;
(5)过滤过滤掉多余的关键帧,完成优化。
三、地图
地图由关键帧、地图点、公共视图和最小生成树组成。
(a)关键帧:提取的特征及其描述符、左眼图像的单词包向量和相机姿态;
(b)地图点:特征点的世界坐标;
(c)共视:由点和连接各点的多条边组成。点代表相机位置,边代表两个相机观察到的相同地图点,边的权重是相同地图点的个数;
(d)最小生成树:共同视图的最小子集。所有关键帧(节点)都会保留,每两个节点仅通过权重最高的边连接。最大限度地简化了公共视图,便于闭环检测和计算
四、第一轮粗略筛选
第一轮粗略筛选的目标是初步去除明显错误的匹配点对,为后续 RANSAC 迭代提供更加可靠的初始匹配点集。
该筛选过程主要包含以下两个核心步骤:
- 基于比值测试(Ratio Test)筛选高质量匹配点
- 基于双向投影误差(Bidirectional Projection Error)剔除错误匹配点
第一步:比值测试(Ratio Test)—— 选择高质量匹配点
比值测试是一种常用于特征匹配的筛选方法,由 D. Lowe 在 SIFT 论文中提出,目的是过滤掉错误的匹配点对,提高匹配的准确性。
1. 计算匹配点对的置信评分
假设当前有两个匹配帧 KFA 和 KFB:
- 在 KFA 中选取一个特征点 pAp_A。
- 在 KFB 中寻找与 pAp_A 最相似的两个特征点 pB1p_B^1 和 pB2p_B^2:
- 计算它们的汉明距离(Hamming Distance),记作:
- 最近匹配点的距离: distancem1distance_{m1}
- 次近匹配点的距离: distancem2distance_{m2}
- 计算它们的汉明距离(Hamming Distance),记作:
- 计算比值 mm 作为置信评分: m=distancem1distancem2m = \frac{distance_{m1}}{distance_{m2}}
- mm 值越小,匹配的可靠性越高。
2. 选取最优匹配点
- 设定阈值 TrT_r(一般取 0.7 或 0.8),如果 m<Trm < T_r,则认为是可靠匹配点,否则剔除该点对。
- 从剩余匹配点中,选取四对 mm 值最小的点对,用于计算单应性矩阵 HH,即: {(x1,y1),(x2,y2),(x3,y3),(x4,y4)}\{(x_1, y_1), (x_2, y_2), (x_3, y_3), (x_4, y_4)\}
第二步:双向投影误差(Bidirectional Projection Error)剔除错误匹配点
通过第一步,我们得到了四对可靠的匹配点,并计算了单应性矩阵 HH。
但由于 HH 由少量点计算得到,可能仍然存在一些错误匹配点。
因此,我们使用双向投影误差机制进行二次筛选。
1. 计算正向投影误差
- 对于点集 X 中的每个点 xix_i,通过单应性矩阵 HH 计算其投影变换后在 Y 中的点: yxi=Hxiy_{x_i} = H x_i
- 这里 yxiy_{x_i} 是 xix_i 按照变换矩阵 HH 计算出的理论匹配点。
2. 计算反向投影误差
- 对于点集 Y 中的每个点 yiy_i,同样计算投影变换后在 X 中的点: xyi=H−1yix_{y_i} = H^{-1} y_i
- 这里 xyix_{y_i} 是 yiy_i 按照变换矩阵 H−1H^{-1} 计算出的理论匹配点。
3. 计算匹配误差并剔除错误点
- 设定一个阈值 DdD_d(通常设为 3~5 像素),如果: ∣∣xi−xyi∣∣<Dd且∣∣yi−yxi∣∣<Dd|| x_i - x_{y_i} || < D_d \quad \text{且} \quad || y_i - y_{x_i} || < D_d
- 则认为 xix_i 和 yiy_i 是正确匹配点,保留该匹配对;
- 否则,将该匹配对剔除。
第一轮粗略筛选的效果
经过比值测试和双向投影误差筛选:
- 大部分错误匹配点被剔除;
- 初步获得一组较为稳定的匹配点,用于后续的第二轮筛选和 RANSAC 迭代。
第一轮筛选的主要贡献是提高了 RANSAC 迭代的输入数据质量,减少了错误匹配带来的影响,从而提升 SLAM 或目标识别任务的稳定性和精度。
五、第二轮粗略筛选
在第一轮粗略筛选后,我们已经通过比值测试(Ratio Test)和双向投影误差(Bidirectional Projection Error)剔除了大部分明显的错误匹配点对。然而,由于第一轮仅使用了四对点来计算单应性矩阵 HHH,它可能并不是最优的,因此仍然会存在一些错误匹配点。
第二轮粗略筛选的目标是进一步剔除可能的错误匹配点,特别是那些高不确定性的匹配点,以提高最终 RANSAC 迭代的稳定性和准确性。
第二轮粗略筛选的主要方法
第二轮筛选采用了一种基于汉明距离(Hamming Distance)排序的方法,其核心思想是:
- 计算匹配点对的汉明距离
- 对汉明距离进行排序
- 剔除排名前 10%(即误差最大)的匹配点
第一步:计算匹配点对的汉明距离
汉明距离是计算二进制特征描述子(如 ORB、BRIEF、BRISK)相似性的常用指标。
给定一对匹配点 (xi,yi)(x_i, y_i)(xi,yi):
- 设 D(xi)D(x_i)D(xi) 和 D(yi)D(y_i)D(yi) 分别为点 xix_ixi 和 yiy_iyi 的二进制特征描述子。
- 计算两者之间的汉明距离: di=Hamming(D(xi),D(yi))d_i = Hamming(D(x_i), D(y_i))di=Hamming(D(xi),D(yi))
- 这个值表示两个特征点描述子的相似程度,值越小,匹配越可靠。
第二步:对汉明距离进行排序
- 计算所有匹配点对的汉明距离集合: {d1,d2,...,dn}\{ d_1, d_2, ..., d_n \}{d1,d2,...,dn}
- 按照汉明距离从小到大排序: d(1)≤d(2)≤...≤d(n)d_{(1)} \leq d_{(2)} \leq ... \leq d_{(n)}d(1)≤d(2)≤...≤d(n)
- 排序后,前面的点对匹配质量较高,而后面的点对可能是错误匹配点。
第三步:剔除误差最大的 10% 匹配点
为了进一步消除可能的错误匹配点:
- 设定一个比例阈值 TelimT_{elim}Telim(通常为 10%)。
- 选择汉明距离最高的前 10% 匹配点对
- 直接剔除这些匹配点对,认为它们是误匹配点。
第二轮粗略筛选的效果
- 进一步减少了误匹配点,避免高误差点进入 RANSAC 迭代。
- 提高了 RANSAC 计算的收敛速度,因为输入数据质量更高,减少了不稳定性。
- 提升了 SLAM 过程中特征匹配的稳定性,使得相机位姿估计更加可靠。
六、RANSAC算法(随机抽样一致算法)
最小二乘方法存在缺陷。最小二乘法即通过最小化误差的平方和寻找数据的最佳函数匹配,广泛应用于数据辨识领域,但是其对于某些数据的拟合有一定的缺陷,最小二乘得到的是针对所有数据的全局最优,但是并不是所有数据都是适合去拟合的,也就是说数据可能存在较大的误差甚至差错,而这种差错的识别是需要一定的代价的
RANSAC(随机采样一致性)是一种鲁棒性强的参数估计算法,常用于处理包含大量噪声点的数据,比如特征点匹配、直线拟合、平面拟合等任务。RANSAC 的主要优势是即使数据中存在较多错误匹配点(outliers),它仍然能找到正确的模型参数。
1. RANSAC 的核心思想
随机采样 + 迭代优化
- RANSAC 通过随机采样数据子集,拟合模型,并找到最大一致的点集(称为内点)。
- 经过多轮迭代后,选出最优模型,用于后续任务(如位姿估计)。
2. RANSAC 主要步骤
假设我们要从一组点对{(x1,y1),(x2,y2),...,(xn,yn)} 中找到一个最优的变换模型(如单应性矩阵 H),RANSAC 的主要流程如下:
Step 1:随机采样(Random Sampling)
- 从数据集中随机选取最小数量的样本点(通常是 4~8 个),用于计算模型参数。
- 例如,在单应性矩阵 H 估计中,需要 4 对匹配点才能解出 8 个自由度。
Step 2:拟合模型(Model Fitting)
- 根据随机采样点计算模型参数(例如,计算单应性矩阵 H)。
- 不同任务中,模型可能不同:
- 直线拟合:最少 2 个点确定直线方程。
- 平面拟合:最少 3 个点确定一个平面。
- 单应性矩阵:最少 4 对点求解 H。
Step 3:计算内点(Inliers)
- 使用计算出的模型对所有数据点进行验证:
- 计算所有点的投影误差或几何误差。
- 设定一个阈值 T,如果某个点的误差 di小于 T,则认为该点是内点(Inlier)。
- 否则,该点是外点(Outlier),即错误匹配点。
Step 4:迭代优化(Iteration)
- 重复 Step 1 ~ Step 3 多次(通常 100~1000 次)。
- 记录每次拟合得到的内点数量最多的模型,作为当前最优模型。
Step 5:最终模型优化(Final Refinement)
5. RANSAC 的优缺点
优点
✔ 鲁棒性强:能在大量错误匹配点(outliers)中找到正确模型。
✔ 计算高效:随机采样减少了计算复杂度。
✔ 适用于多种任务:直线拟合、平面拟合、单应性矩阵估计、位姿估计等。
缺点
❌ 参数依赖性:迭代次数、阈值等参数需要调优。
❌ 对内点比例要求较高:如果内点比例过低,可能无法收敛到正确解。
❌ 无法处理非参数化数据:RANSAC 仅适用于可以被数学模型描述的数据。
6. 总结
- 使用所有内点重新拟合模型,得到更精确的最终参数。
-
4. RANSAC 在 SLAM 中的应用
在 SLAM(同时定位与地图构建)中,RANSAC 主要用于:
- 特征匹配中的误匹配点剔除
- 在估计单应性矩阵 H 或 基础矩阵 F 时,RANSAC 用于去除错误匹配点,提高位姿估计的准确性。
- 相机位姿估计
- RANSAC 结合 PnP(Perspective-n-Point)算法估计相机位姿,减少外点影响。
- 平面拟合
- 在点云数据中,RANSAC 可用于平面或曲面拟合,如地面检测、障碍物识别。
- RANSAC 是一种迭代优化算法,能够在大量噪声数据中找到最佳模型参数。
- 核心思想是随机采样 + 迭代优化,寻找最大内点集合,剔除外点。
- 在 SLAM 中主要用于特征匹配误差剔除和相机位姿估计,提升系统鲁棒性。