SLAM前端(里程計二):ORB特徵點匹配

(1)構建圖像高斯金字塔

將圖像進行降採樣8次,每次尺度縮小1/1.2,如下圖所示:

採用高斯金字塔的目的是解決特徵點尺度不變性,並且可以提取更多的關鍵點。高斯金字塔每個尺度代表了不同的距離,即低分辨率的圖像可以看做從遠處拍攝圖像的一部分,這樣提取8個尺度的圖片就可以保證特徵點尺度不變性。想像一下,如果第二幀圖像相對於第一幀圖像走遠了,那麼根據Fast角點的定義,這兩幀圖像共有的圖像中,很多對應的特徵點都難以匹配,如果第一幀圖像提特徵點使就降採樣並提取特徵點,則第二幀圖像上的特徵點與第一幀降採樣後尺度是相近的,很容易匹配到。因此採用高斯金字塔將這8張圖像的特徵點共同當做當前幀的特徵點,當下一幀圖像走遠或走進場景,確保不會因爲尺度不同而無法匹配。

圖像金字塔效果參照圖像金字塔在ORB-SLAM中的應用詳解,如何解決特徵點尺度不變性

(2)在不同尺度的圖像上檢測Fast角點並根據柵格剔除

提取Fast角點,每一層圖像特徵點有個上限值:nfeatures,分辨率越低即金字塔層數越高,數量越少。

對每一層圖像劃分30*30的柵格,在每個柵格內,根據nfeatures選取該區域內提取的Fast角點,保證一層圖像上特徵點分佈均勻。ORB-SLAM中通過函數DistributeOctTree()實現特徵點的柵格剔除,具體思路是:因爲當特徵點都集中在圖像的某個局部時,計算出來的描述子不理想,所以爲了讓角點分佈更加均勻,運用四叉樹算法對角點進行均勻分佈。具體方式就是根據圖像的大小,設置圖像的根節點個數,之後將根節點四等分,再檢測並且記錄每個分節點裏面關鍵點的個數,當節點裏面特徵點的個數等於0,就刪除這個節點,如果特徵點個數大於1就繼續分割。當節點數目大於這一層所需要特徵點數目或者每個節點下特徵點數目都是1的時候停止。對已經創建好的節點根據特徵點的數量從小到大排序,,優先對特徵點較少的節點進行分割,倘若還沒有遍歷完所有的節點,節點數滿足每層特徵點的數量要求,就可以不用對包含特徵點多的節點進行分割。最終的結果就儘可能將特徵點均勻的分佈在圖像中。

參考鏈接:ORBextractor.cc

(3)使用質心法計算每個特徵點的主方向,計算特徵點的描述子

(4)候選關鍵點

在當前柵格內,找到以x、y爲中心,邊長爲2r的方形內,且圖像層在[minLevel, maxLevel]的所有特徵點

(5)計算帶匹配點與候選關鍵點之間的漢明距離

描述子利用描述子計算帶匹配點之間的漢明距離。

(6)比例閾值篩選

首先最優匹配點的漢明距離要小於某一閾值,其次最優匹配點比次優匹配點明顯要好,那麼最佳匹配才真正靠譜,避免出現模棱兩可的情況。(最優匹配點漢明距離<閾值) &&(最優的匹配點韓明距離<2*次優匹配點的韓明距離*係數)係數一般0.9。

(7)角度投票(旋轉一致性)進行剔除誤匹配

每個特徵點在提取描述子時的旋轉主方向角度,如果圖像旋轉了,這個角度將發生改變,所有的特徵點的角度變化應該是一致的,通過直方圖統計得到最準確的角度變化值。

統計方向偏差直方圖 頻率最高的三個bin保留,其他範圍內的匹配點剔除。

另外,若最高的比第二高的高10倍以上,則只保留最高的bin中的匹配點。

若最高的比第 三高的高10倍以上,則 保留最高的和第二高bin中的匹配點。

代碼參考鏈接:ORB特徵匹配 投影匹配 極線搜索匹配 方向一致性過濾 尺度過濾

 

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