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

2021-10-04 16:51:57 字數 1695 閱讀 5345

orb特徵 = fast+描述子,fast判斷該點是不是特徵點,描述子計算該特徵點的方向資訊。

1 fast角點

(1)fast規則

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

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

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

2 特徵點描述子

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

計算當前影象塊內的灰度總和:

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

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

灰度質心座標為

定義方向:

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

(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演算法。

視覺里程計01 ORB特徵提取與跟蹤

概念網上描述的很詳細,這裡簡單說一下 總的來說該演算法比surf還要快,而且準確率也很不錯。主體部分來自高翔的視覺slam14講的 在開頭加入了攝像頭讀取的 替換掉固定的演示。這裡用雙目攝像頭來進行匹配,實際上視覺里程計採用單目即可。include include include include i...

ROS里程計的學習 odometry 一

什麼是里程計?為什麼需要里程計?里程計是衡量我們從初始位姿到終點位姿的乙個標準,通俗的說,我們要實現機械人的定位與導航,就需要知道機械人行進了多少距離,是往哪個方向行進的 hector建圖呢有個缺點,如果雷達不夠精確,那麼建出來的圖會導致定位不夠精確,這是我們不期望的,所以要實現精確的定位與導航,需...

視覺SLAM 視覺里程計解決方案分析(間接法)

目錄 基本問題 視覺里程計是視覺slam技術的起點,其核心問題同slam技術一樣,主要是定位與構圖,但視覺里程計解決的核心是定位問題,也就是相機的位姿。通俗地講就是利用多張影象資訊還原相機的運動。以兩幀影象為例。設空間點p pp為路標點,p1,p2p 1,p 2 p1 p2 為影象上的投影點。其中p...