SLAM前端(里程計一):ORB特徵點提取

ORB特徵 = Fast+描述子,Fast判斷該點是不是特徵點,描述子計算該特徵點的方向信息。

1 Fast角點

(1)Fast規則

如下圖,遍歷每個像素點檢測在像素點附近的圓形窗口上的16個像素的灰度,如果有n個連續點都比中心像素的灰度大或者小的話,這樣的中心點就是FAST角點。n可以是12或者9。

(2)非極大值已知剔除接近點

算法很可能檢測出的角點彼此相鄰,所以提出了使用非極大值抑制算法來去除一部分的相鄰角點,思路是 爲每一個檢測到的角點計算它的響應大小(score function)。響應定義爲中心點和它周圍16個像素點的絕對偏差的和。比較兩個相鄰的角點響應值。值較低的角點將會被刪除。

2 特徵點描述子

(1)計算特徵點灰度質心

計算當前圖像塊內的灰度總和:

                                                                         M = \sum_{x,y} I(x,y)

計算x方向上像素加權和:

                                                                     M_x = \sum_{x,y}x\cdot I(x,y)

計算y方向上像素加權和:

                                                                     M_y = \sum_{x,y}y\cdot I(x,y)

灰度質心座標爲C(M_x,M_y)

定義方向:\theta = atan2(M_y,M_x),即質心與形心連線的矢量方向。

可以理解成密度不同的規則立體,灰度質心類似該立體的質心,方向類似該立體形心與質心連線矢量方向。

(2)生成描述子

BRIEF是在一個特徵點的鄰域選擇n對像素點(p,q),比較其灰度值大小,如果I(p)>I(q),則令其對應的值爲1,否則爲0,這樣對n對像素比較之後,就形成一個長度爲n的二進制向量。一般一般n取128、256或512,opencv默認爲256。

第(1)步計算出了該特徵點的方向,以該方向爲y軸,順時針垂直方向構建x軸,在該座標系下選取n對匹配點。

注意:BRIEF原文作者提出了五種方法選擇點對,但是ORBSLAM採用統計學習的方法選擇點對集合,並且實際應用過程中ORB_SLAM已經訓練好了。直接按照這種方法去計算獲得256個點對就好。直接可以計算256維的描述子了。

 

訓練方法如下:(只應用的話不用考慮)

首先建立300k個特徵點測試集。對於測試集中的每個點,考慮其31x31鄰域。這裏不同於原始BRIEF算法的地方是,這裏在對圖像進行高斯平滑之後,使用鄰域中的某個點的5x5鄰域灰度平均值來代替某個點對的值,進而比較點對的大小。這樣特徵值更加具備抗噪性。另外可以使用積分圖像加快求取5x5鄰域灰度平均值的速度。

從上面可知,在31x31的鄰域內共有(31-5+1)x(31-5+1)=729個這樣的子窗口,那麼取點對的方法共有M=265356種,我們就要在這M種方法中選取256種取法,選擇的原則是這256種取法之間的相關性最小。怎麼選取呢?

1)在300k特徵點的每個31x31鄰域內按M種方法取點對,比較點對大小,形成一個300kxM的二進制矩陣Q。矩陣的每一列代表300k個點按某種取法得到的二進制數。

2)對Q矩陣的每一列求取平均值,按照平均值到0.5的距離大小重新對Q矩陣的列向量排序,形成矩陣T。

3)將T的第一列向量放到R中。

4)取T的下一列向量和R中的所有列向量計算相關性,如果相關係數小於設定的閾值,則將T中的該列向量移至R中。

5)按照4)的方式不斷進行操作,直到R中的向量數量爲256。

通過這種方法就選取了這256種取點對的方法。這就是rBRIEF算法。

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