ORB-SLAM2特征点匹配的策略在不同的线程中方法是不一样的?
主要可以分为:
-
- 初始化时候的匹配策略
注意事项:
- 两个部分,第一个部分是在搜索窗口里计算描述子的距离。第二部分统计匹配的点,计算他们的角度差建立直方图,筛除非主流的匹配点。
- 只在第0层金字塔上进行匹配。
步骤:
- 构建旋转直方图
- 在半径窗口内搜索当前帧F2中所有的候选匹配特征点
- 遍历搜索窗口中的所有潜在的匹配候选点,找到最优的和次优的
- 对最优次优结果进行检查,满足阈值、最优/次优比例,删除重复匹配
- 计算匹配点旋转角度差所在的直方图
- 筛除旋转直方图中“非主流”部分
- 将最后通过筛选的匹配好的特征点保存
-
- 恒速跟踪模型中的匹配策略
- 步骤:
- 根据运动模型计算的位姿,将上一帧的像素点重投影到当前帧
- 看当前帧所在的网格里面有没有其他的特征点,如果有,则进行匹配
- 匹配上了,判断他们的金子塔层级是不是在±1之内
- 如果满足金字塔层级要求,判断他们之间的距离是不是满足阈值,每一个金字塔的搜索半径不同,根据特征点具体的金子塔层级选取对应的搜索半径,满足以后进入到下一步
- 将所有匹配点计算角度差直方图
- 去除非主流部分的特征点
- 最后将筛选好的地图点保存
-
- 关键帧跟踪的匹配策略
- Step 1:分别取出属于同一node的ORB特征点(只有属于同一node,才有可能是匹配点)
- Step 2:遍历KF中属于该node的特征点
- Step 3: 遍历F中属于该node的特征点,寻找最佳匹配点
- Step 4:根据阈值 和 角度投票剔除误匹配
– Step 4.1:第一关筛选:匹配距离必须小于设定阈值
– Step 4.2:第二关筛选:最佳匹配比次佳匹配明显要好,那么最佳匹配才真正靠谱
– Step 4.3:记录成功匹配特征点的对应的地图点(来自关键帧)
– Step 4.4:计算匹配点旋转角度差所在的直方图- Step 5 根据方向剔除误匹配的点
- Step 6 如果匹配的数量大于阈值,则跟踪成功,否则失败