視覺SLAM中ORB特徵點演算法 關鍵點 描述子

2021-09-24 12:39:04 字數 1903 閱讀 2914

slam需要根據路標來計算當前相機的位置和姿態。而視覺slam的路標就是影象中的特徵點了。注意:只要談到影象中的特徵點你就得記得它包含兩個內容關鍵點描述子關鍵點指的特徵點在影象中的位置,而描述子是指的是關鍵點的朝向和周圍畫素資訊。相同特徵點他們的描述子相似。

現在已有很多特徵點提取演算法。其中既能兼顧效能又能兼顧精度的一種特徵點提取演算法那就是:orb特徵點。前面我們提到了只要提到特徵點那就意味著包含兩個東西:關鍵點和描述子。

orb它的關鍵點叫做oriented fast,就是有方向的fast關鍵點。orb的描述子是brief描述子

我們現在先解釋下什麼是fast關鍵點

它的思想是任何物體的邊緣一定是灰度值變化較大,那麼我只用比較哪些地方灰度值變化較大。然後把這個地方作為關鍵點。然後它怎麼做的呢?遍歷整個的畫素。為了判斷乙個畫素是不是關鍵點,它在周圍以3畫素為半徑畫乙個圈。這個圈上有16個畫素點。比較當前畫素點與這16個畫素點的差異。當然我們需要設定乙個閾值,差異度超過多少算高差異。然後統計高差異的畫素點個數fast-12認為》=12個大差異的畫素點那就把當前畫素點設定為關鍵點,fast-11是認為11個,fast-9是認為9個。

orb對fast關鍵點的改進

原始的fast關鍵點存在缺點:

fast關鍵點數量很大,而我們往往只想找固定數量的特徵點。於是orb對fast演算法進行改進:fast選定的那些點的原始畫素計算harris響應值,然後選取前n個最大的。fast-12就選12個最大的。fast關鍵點沒有方向。然後orb的改進就是說找到整個影象塊的質點,關鍵點與質點的連線就是方向。

講完關鍵點了接下來需要講orb使用的brief(binary robust independent elementary feature)描述子

描述子的作用是用來匹配兩個特徵點是否是同乙個特徵點。一般描述子的構造都是在關鍵點周圍畫個圈,對圈內的畫素點進行計算得到乙個向量。這個向量能反映這個關鍵點周圍畫素的特點。即它可以描述當前這個特徵點的周圍特性。因為相同的特徵點周圍肯定是相似的,所以可以用描述子來判斷兩個特徵點是不是同乙個。

而brief描述子它是怎麼提取周圍畫素的特徵的呢

它做法非常簡單。就是從周圍選n對畫素點。比如說其中第i對畫素點是(p,q)如果p比q大,描述子向量第i個值就是1,反之則是0. 描述子向量的維度是n。選n對畫素點就是brief-n。一般是隨機選的。當然你也可以自己設計選取畫素點的規則。

當然orb對brief也進行了改進,改進的方法是利用之前得到的關鍵點與質點的連線方向對進行旋轉然後獲取描述子。為什麼要旋轉?因為兩個特徵雖然長的一樣,但是如果他們發生了旋轉那麼他們提取到的周圍的特徵那就很不一樣的。這樣會使得程式認為他們兩個為不一樣的特徵點。

現在我們已經講好了orb特徵點是什麼,以及怎麼獲得。我怎麼知道哪些是相同的特徵點呢?(因為我們要根據相同特徵點他們之間位置關係來計算出相機的位置和姿態關係),接下來介紹下如何判斷兩張圖提取的特徵點是否為同乙個

我們已經知道orb使用的描述子是乙個二進位制向量長得像這樣:[1,0,1,0,0,1…]。那麼怎麼比較兩個特徵點相似度呢?最簡單方法是暴力比較。如何度量相似度?我們直接比較數字相同的個數。由於都是二進位制,進行xor運算就很快計算出數字不同的個數。當特徵點很多的時候暴力匹配很耗費時間,所以一般是用快速最近鄰演算法flann找相同特徵點。

opencv已經整合了orb特徵點的提取演算法

視覺SLAM 視覺SLAM相關開源演算法總結

第乙個實時 單目slam系統,基於ekf優化。單目,只有tracking,進行了有效的特徵點對的匹配。之後有enft slam.適用於各種各樣的相機,除了常見的單目,雙目,rgb d的分類,還適用於透視 魚眼甚至自己設計的相機。通過使用apriltag基準標記實現slam 76 提出了一種基於李代數...

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

orb特徵 fast 描述子,fast判斷該點是不是特徵點,描述子計算該特徵點的方向資訊。1 fast角點 1 fast規則 如下圖,遍歷每個畫素點,檢測在畫素點附近的圓形視窗上的16個畫素的灰度,如果有n個連續點都比中心畫素的灰度大或者小的話,這樣的中心點就是fast角點。n可以是12或者9。2 ...

視覺slam 精簡入門(中)

代表演算法有kinectfusion kintinuous voxel hashing dynamicfusion vslam 的代表演算法有 orb slam svo dso 代表演算法有 ekf msckf preintegration okvis 等 效能上大致可以認為 sift surf o...