SLAM前端(里程計三):不同情況下的ORB特徵點匹配

ORBSLAM中對於特徵點的匹配在不同情況下有不同的匹配方式。分爲以下幾種:

1. 按照投影進行匹配

2. 按照bow向量節點進行匹配

3. 針對初始化地圖點的匹配

4. 針對單目三角化的匹配

5. 基於相似矩陣的匹配

6. 通過匹配來提出冗餘地圖點

一、首先看按照投影進行的匹配

按照投影方式的不同將其分爲上一幀投影到當前幀(tracking線程的按照運動模型進行位姿估計),關鍵幀投影到當前幀(tracking線程的重定位),地圖點投影到當前幀(tracking線程的局部地圖追蹤進行位姿估計),地圖點通過相似矩陣投影到關鍵幀(迴環檢測線程中)

1、地圖點投影到當前幀的方式匹配(tracking線程的局部地圖追蹤進行位姿估計)

總體思路是遍歷所有地圖點,分別向當前幀進行投影,在當前幀中找到一個描述子距離最相近的特徵點作爲其匹配點。

首先根據地圖點在金字塔中的層數確定該地圖點在當前幀的搜索半徑,然後以該地圖點在當前幀的投影(在tracking線程中調用Frame::isInFrustum(MapPoint *pMP, float viewingCosLimit)來確定地圖點在當前幀的投影像素座標)爲中心進一步確定地圖點在當前幀的投影區域。得到當前幀在投影位置搜索半徑內的所有特徵點。分別計算這些特徵點描述子與當前地圖點最優描述子的距離,找到最小距離對應的特徵點,作爲當前地圖點在該幀中的匹配。匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)這裏的匹配還計算了第二最優匹配點(描述子距離第二小),目的是計算第一匹配點/第二匹配點的比率(小於1),當比率大時說明第二匹配點和第一匹配點相當,第一匹配點描述子沒有特別的“優越性”,在這種情況下不妨捨棄這對匹配,防止發生誤匹配。將得到的匹配地圖點添加進當前幀的地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

2、上一幀投影到當前幀的匹配方式(tracking線程的按照運動模型進行位姿估計)

總體思路是遍歷上一幀中所有地圖點,分別向當前幀進行投影,在當前幀中找到一個描述子距離最相近的特徵點作爲其匹配點。

首先根據上一幀地圖點在上一幀圖像金字塔中的層數確定該地圖點在當前幀圖像金字塔中的層數,根據金字塔層數確定搜索半徑,然後將該地圖點的世界座標系下的座標根據相機內參數矩陣和旋轉平移矩陣(注意這裏的旋轉平移矩陣是根據上一幀的旋轉平移矩陣和上一幀的位姿變化速度推算的當前幀的初始位姿)投影到當前幀,得到上一幀地圖點在當前幀的像素座標(判斷投影后的像素座標的有效性),以投影結果爲中心以金字塔層數確定的搜索半徑爲半徑作爲搜索區域,從而得到當前幀在投影區域內的所有特徵點。分別計算這些特徵點描述子與上一幀待追蹤地圖點的最優描述子距離,找到最小距離對應的特徵點,作爲上一幀待追蹤地圖點在該幀中的匹配點。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)這裏的匹配還計算了第二最優匹配點(描述子距離第二小),目的是計算第一匹配點/第二匹配點的比率(小於1),當比率大時說明第二匹配點和第一匹配點相當,第一匹配點描述子沒有特別的“優越性”,在這種情況下不妨捨棄這對匹配,防止發生誤匹配。(3)如果需要判別匹配點的方向則通過梯度方向直方圖進行篩選。將得到的匹配地圖點添加進當前幀的地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

3、關鍵幀投影投影到當前幀的匹配方式(tracking線程的重定位)

總體思路是遍歷關鍵幀中所有地圖點,分別向當前幀進行投影,在當前幀中找到一個描述子距離最相近的特徵點作爲其匹配點。

首先根據當前幀的初始位姿(在重定位過程中PNP方式來計算位姿作爲當前幀的初始位姿)和相機內參數矩陣,將關鍵幀的地圖點映射到當前幀,從而得到關鍵幀的地圖點在當前幀的映射像素座標,將映射的像素座標作爲中心,然後根據地圖點到光心的距離推算該特徵點對應的高斯金字塔層數,從而確定搜索半徑並確定關鍵幀地圖點在當前幀匹配的搜索區域,從而得到當前幀在投影區域內的所有特徵點。分別計算這些特徵點描述子與上一幀待追蹤地圖點的最優描述子距離,找到最小距離對應的特徵點,作爲上一幀待追蹤地圖點在該幀中的匹配點。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)這裏的匹配還計算了第二最優匹配點(描述子距離第二小),目的是計算第一匹配點/第二匹配點的比率(小於1),當比率大時說明第二匹配點和第一匹配點相當,第一匹配點描述子沒有特別的“優越性”,在這種情況下不妨捨棄這對匹配,防止發生誤匹配。(3)如果需要判別匹配點的方向則通過梯度方向直方圖進行篩選。將得到的匹配地圖點添加進當前幀的地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

4、地圖點通過相似矩陣投影到關鍵幀(迴環檢測線程中計算得到相似矩陣之後匹配當前檢測關鍵幀(迴環末端)和迴環關鍵幀(迴環始幀)的局部地圖點進行匹配)

總體思路是遍歷迴環關鍵幀的所有共視圖地圖點,將這些地圖點利用求得的sim矩陣投影到當前檢測關鍵幀下,在當前關鍵幀中找到一個描述子距離最相近的特徵點作爲其匹配點。

首先根據當前幀的相似變換矩陣(在迴環檢測過程中通過sim求解器求解)和相機內參數矩陣,將回環關鍵幀的共視地圖點映射到當前檢測關鍵幀,從而得到共視地圖點在當前待檢測迴環關鍵幀的映射像素座標,將映射的像素座標作爲中心,然後根據地圖點到光心的距離推算該特徵點對應的高斯金字塔層數,從而確定搜索半徑並確定關鍵幀地圖點在當前幀匹配的搜索區域,從而得到當前幀在投影區域內的所有特徵點。分別計算這些特徵點描述子與上一幀待追蹤地圖點的最優描述子距離,找到最小距離對應的特徵點,作爲上一幀待追蹤地圖點在該幀中的匹配點。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。

二、按照bow向量節點進行匹配

按照BOW向量節點進行匹配有一個明顯的優勢是在此之前不需要知道任何關於兩個匹配對象的幾何關係,在第一節中講到的按照投影的方式進行的匹配,都是給定兩匹配對象的初步幾何關係,然後根據初步的幾何關係確定一個投影區域(投影中心和投影半徑),在投影區域內尋找匹配。而相對於投影的匹配方式,按照BOW節點向量進行搜索匹配就不需要預先的集合關係了,按照BOW向量進行的匹配直接根據之前維護的詞袋模型,在所有相同bow節點下的特徵點中進行搜索匹配,同樣更快速。這種方式往往在無法給定兩匹配對象之間的初步幾何關係時使用。根據匹配對象不同又分爲:(1)關鍵幀和當前幀通過詞袋進行快速匹配(1.用在tracking線程根據參考關鍵幀進行線程追蹤過程中2.重定位)(2)關鍵幀和當前幀通過詞袋進行快速匹配(迴環檢測)

具體如下:

1、關鍵幀和當前幀通過詞袋進行快速匹配(1.用在tracking線程根據參考關鍵幀進行線程追蹤過程中2.重定位)

總體思路是遍歷關鍵幀中所有特徵向量和當前幀中的所有特徵向量,計算在同一BOW節點下兩特徵向量的距離,找到一對描述子距離最相近的特徵點作爲匹配點。

首先取出關鍵幀和當前幀的特徵向量(注意這裏的特徵向量是根據節點id排序好的特徵向量(用DBOW庫中的特徵向量),便於我們進行搜索),然後遍歷關鍵幀的每一個特徵向量,在當前幀的同一節點下搜索其匹配點(計算同一節點特徵向量對應描述子的距離最小匹配作爲其匹配點)。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)這裏的匹配還計算了第二最優匹配點(描述子距離第二小),目的是計算第一匹配點/第二匹配點的比率(小於1),當比率大時說明第二匹配點和第一匹配點相當,第一匹配點描述子沒有特別的“優越性”,在這種情況下不妨捨棄這對匹配,防止發生誤匹配。(3)如果需要判別匹配點的方向則通過梯度方向直方圖進行篩選。將得到的匹配地圖點添加進匹配地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

2、關鍵幀和關鍵幀幀通過詞袋進行快速匹配(迴環檢測)

總體思路是遍歷關鍵幀1中所有特徵向量和關鍵幀2中的所有特徵向量,計算在同一BOW節點下兩特徵向量的距離,找到一對描述子距離最相近的特徵點作爲匹配點。

首先取出關鍵幀1和關鍵幀2的特徵向量(注意這裏的特徵向量是根據節點id排序好的特徵向量(用DBOW庫中的特徵向量),便於我們進行搜索),然後遍歷關鍵幀1的每一個特徵向量,在關鍵幀2的同一節點下搜索其匹配點(計算同一節點特徵向量對應描述子的距離最小匹配作爲其匹配點)。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)這裏的匹配還計算了第二最優匹配點(描述子距離第二小),目的是計算第一匹配點/第二匹配點的比率(小於1),當比率大時說明第二匹配點和第一匹配點相當,第一匹配點描述子沒有特別的“優越性”,在這種情況下不妨捨棄這對匹配,防止發生誤匹配。(3)如果需要判別匹配點的方向則通過梯度方向直方圖進行篩選。將得到的匹配地圖點添加進匹配地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

三、針對單目初始化的匹配(單目初始化中)

總體思路是針對單目初始化的匹配,由於在單目初始化之前並沒有深度信息即還沒有計算地圖點,因此不能和一般的匹配一樣通過遍歷地圖點進行匹配,只能通過遍歷圖像的特徵點。

首先取幀1中的所有特徵點,根據給定參數搜索窗口確定搜索半徑,根據該特徵點在幀1中的2D位置估計其在幀2中的搜索中心,從而根據搜索中心和半徑確定搜索範圍,在幀2中搜索當前特徵點的匹配點。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)這裏的匹配還計算了第二最優匹配點(描述子距離第二小),目的是計算第一匹配點/第二匹配點的比率(小於1),當比率大時說明第二匹配點和第一匹配點相當,第一匹配點描述子沒有特別的“優越性”,在這種情況下不妨捨棄這對匹配,防止發生誤匹配。(3)如果需要判別匹配點的方向則通過梯度方向直方圖進行篩選。將得到的匹配地圖點添加進匹配地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

四、針對單目三角化的匹配(在localmapping線程中新建地圖點時調用)

此匹配方式主要應用於localmapping線程中新建地圖點,此次新建地圖點是針對於tracking線程中沒有匹配到的地圖點。總體思路是針對單目的尺度不確定性,在計算地圖點深度時進行的匹配,利用三角測量篩選匹配點的正確性。匹配的是當前處理的關鍵幀及其相鄰關鍵幀。

首先循環所有關鍵幀1中的所有BOW節點,並在關鍵幀2中尋找與其具有相同BOW節點的特徵點索引,循環關鍵幀2中找到的相同BOW節點下特徵點索引,計算兩關鍵幀中特徵點的描述子距離,從而選擇最小的描述子距離的一對特徵點作爲一對匹配點。注意這裏在確定匹配之前需要進行對極約束(關鍵幀2中的匹配點距離根據關鍵幀1計算得到的極線的距離來判斷匹配點是否滿足對極幾何)。最後進行匹配篩選(剔除誤匹配):(1)匹配描述子距離小於閾值。(2)如果需要判別匹配點的方向則通過梯度方向直方圖進行篩選。將得到的匹配地圖點添加進匹配地圖點容器中,索引座標爲該地圖點對應的特徵點在當前幀的特徵索引。

五、基於相似矩陣的匹配(用於迴環檢測計算相似矩陣之後)

獲取關鍵幀1 2的相機位姿以及相機1->相機2的位姿變換相似矩陣

雙向匹配:

根據相似矩陣將關鍵幀1中的地圖點向關鍵幀2中投影,確定投影區域,並在投影區域內尋找關鍵幀1中地圖點的匹配

根據相似矩陣將關鍵幀2中的地圖點向關鍵幀1中投影,確定投影區域,並在投影區域內尋找關鍵幀2中地圖點的匹配

根據雙向匹配結果,如果兩次匹配都能成功,則確定該對匹配是有效的.將其存入vpMatches12容器  

最終返回匹配點對個數

六、通過匹配來提出冗餘地圖點

1、融合地圖點匹配(用於局部建圖線程的關鍵幀地圖點及其相鄰幀的融合)

將MapPoints投影到關鍵幀pKF中,並判斷是否有重複的MapPoints

1> 如果MapPoint能匹配關鍵幀的特徵點,並且該點有對應的MapPoint,那麼將兩個MapPoint合併(選擇觀測數多的)

2> 如果MapPoint能匹配關鍵幀的特徵點,並且該點沒有對應的MapPoint,那麼爲該點添加MapPoint

投影方式和剔除誤匹配的方式與上述方式類似,不再贅述。

2、融合地圖點(用於迴環檢查線程,根據相似矩陣融合當前關鍵幀和地圖點融合)

根據相似矩陣Scw映射地圖點到關鍵幀。

主要思路: 將回環地圖點根據當前關鍵幀的位姿(相似矩陣)映射到當前關鍵幀,在當前關鍵幀中尋找回環地圖點的代替點,存儲進vpReplacePoint

投影方式和剔除誤匹配的方式與上述方式類似,不再贅述。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章