1. 程式人生 > >VINS_MONO閉環檢測中使用的特徵點

VINS_MONO閉環檢測中使用的特徵點

閉環檢測中每一個關鍵幀有兩類特徵點:

  1. goodFeatureToTrack檢測到的點及光流track到的點,這些點在FeatureTracker類中得到
  2. 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的時候效果應該不會特別好吧。如果想優化這部分的,可以在這方面動動腦筋。