将关键帧的地图点投影到当前帧,在投影位置附近搜索匹配特征点,通过描述子距离和旋转一致性筛选匹配。
分析代码流程:
获取当前帧位姿和光心位置。
初始化旋转直方图。
遍历关键帧的所有地图点:
跳过坏点或已找到的点。
将世界点变换到相机坐标系,投影到图像平面。
检查是否在图像边界内。
计算3D点与当前帧光心的距离,验证是否在地图点的尺度不变范围内。
预测在当前帧中的金字塔层级。
根据预测层级和阈值确定搜索窗口半径。
在图像中获取该窗口内的特征点索引。
对窗口内未匹配的特征点,计算描述子距离,找到最佳匹配。
如果距离小于阈值,建立匹配并记录旋转直方图。
如果启用方向检查,找出旋转直方图中最高的三个方向,剔除其他方向的匹配。
// 通过投影将关键帧的地图点匹配到当前帧 // 参数:CurrentFrame - 当前帧,pKF - 关键帧,sAlreadyFound - 已经匹配上的地图点集合(避免重复) // th - 搜索窗口系数(一般为尺度因子倍数),ORBdist - 描述子距离阈值(最大允许汉明