VINS_MONO闭环检测中使用的特征点
闭环检测中每一个关键帧有两类特征点:
- goodFeatureToTrack检测到的点及光流track到的点,这些点在FeatureTracker类中得到
- KeyFrame类中提取的FAST特征点
两类特征点都计算了BRIEF描述子,但她们特点不同各有用处:
对于FAST点来说,其数量较多,主要用于DBOW2中的query,具体代码在PoseGraph::detectLoop()函数中。
detecLoop获得了可能存在闭环的之前的关键帧的index之后,就要用KeyFrame::findConnection()来确定是否是一个真正的闭环,这个时候就用到了第一类特征点。
具体来说,在old key的FAST特征点中找跟当前keyframe的第一类特征点匹配的点,使用的方法是计算BRIEF描述子的汉明距离,代码见KeyFrame::searchByBRIEFDes()函数。
第一类特征点有比较精确的深度信息,它在世界坐标系下的3维坐标是已知的,在old keyframe中找到它们的匹配点就可以用solvePnP的方法获得当前keyframe和old keyframe的相对位姿。如果两个关键帧之间的yaw和T小于某个阈值才认为是一个真正的闭环。
需要注意的是FAST点和第一类点是通过不同方式检测出来的点,它们往往是不重合的。所以searchByBRIEFDes的时候效果应该不会特别好吧。如果想优化这部分的,可以在这方面动动脑筋。