視覺 SLAM 主要分為視覺前端和優化后端。
前端也稱為視覺里程計(VO)。
VO 的實現方法,按是否需要提取特征,分為特征點法的前端以及不提特征的直接法前端。
基于特征點法的前端,長久以來被認為是視覺里程計的主流方法。
本文,我們將從特征點法入手,學習如何提取、匹配圖像特征點。
01
特征點
VO 的主要問題是如何根據圖像來估計相機運動。
我們習慣從圖像中選取比較有代表性的點,然后,在此基礎上,討論相機位姿估計問題,以及這些點的定位問題。
在經典 SLAM 模型中,把它們稱為路標,而在視覺 SLAM 中,路標則是指圖像特征(Features)。
特征是圖像信息的另一種數字表達形式。
特征點是圖像里一些特別的地方,我們可以把圖像中的角點、邊緣和區塊作為圖像特征的部分。
特征點由關鍵點(Key-point)和描述子(Descriptor)兩部分組成。
當我們談論 SIFT 特征時,是指 “提取 SIFT 關鍵點,并計算 SIFT 描述子” 兩件事情。
關鍵點是指該特征點在圖像里的位置,有些特征點還具有朝向、大小等信息。
描述子通常是一個向量,按照某種人為設計的方式,描述了該關鍵點周圍像素的信息。
描述子是按照 “外觀相似的特征應該有相似的描述子” 的原則設計的。
因此,只要兩個特征點的描述子在向量空間上的距離相近,就可以認為它們是同樣的特征點。
在目前的 SLAM 方案中,ORB(Oriented FAST and Rotated BRIEF)特征是非常具有代表性的實時圖像特征。
它在保持特征子具有旋轉,尺度不變性的同時,還會使整個圖像特征提取的環節大大加速,對于實時性要求很高的 SLAM 來說是一個很好的選擇。
因此,我們以 ORB 特征為代表,介紹提取特征的過程。
02
ORB 特征
ORB 特征亦由關鍵點和描述子兩部分組成。
它的關鍵點稱為 “Oriented FAST”,是一種改進的FAST 角點;它的描述子稱為 BRIEF。
因此,提取 ORB 特征分為兩個步驟:
1. FAST 角點提取:找出圖像中的 “角點”。相較于原版的 FAST,ORB 中計算了特征點的主方向,為后續的 BRIEF 描述子增加了旋轉不變特性。
2. BRIEF 描述子:對前一步提取出特征點的周圍圖像區域進行描述。
下面我們分別介紹FAST 和BRIEF。
FAST 關鍵點
FAST 是一種角點,主要檢測局部像素灰度變化明顯的地方,以速度快著稱。
它的思想是:如果一個像素與它鄰域的像素差別較大(過亮或過暗),那它更可能是角點。
相比于其他角點檢測算法,FAST 只需比較像素亮度的大小,十分快捷。
但它也有一些問題。
首先,FAST 特征點數量很大且不確定。
其次,FAST 角點不具有方向信息。
所以,在 ORB 中,我們對原始的 FAST 算法進行了改進。
我們指定最終要提取的角點數量 N,對原始 FAST 角點分別計算 Harris 響應值,然后選取前 N 個具有最大響應值的角點,作為最終的角點集合。
同時,針對 FAST 角點不具有方向性和尺度的弱點,ORB 添加了尺度和旋轉的描述。
我們把改進后的 FAST 稱為 Oriented FAST。
BRIEF 描述子
在提取 Oriented FAST 關鍵點后,我們對每個點計算其描述子。
ORB 使用的是改進的 BRIEF 特征描述。
BRIEF 是一種二進制描述子,它的描述向量由許多個 0 和 1 組成,這里的 0 和 1 編碼了關鍵點附近兩個像素(比如說 p 和 q)的大小關系:如果 p 比 q 大,則取 1,反之就取 0。
BRIEF 使用了隨機選點的比較,速度非常快,而且由于使用了二進制表達,存儲起來也十分方便,適用于實時的圖像匹配。
原始的 BRIEF 描述子不具有旋轉不變性,因此在圖像發生旋轉時容易丟失。
而 ORB 在 FAST 特征點提取階段計算了關鍵點的方向,所以可以利用方向信息,計算了旋轉之后的 “Steer BRIEF” 特征,使 ORB 的描述子具有較好的旋轉不變性。
由于考慮到了旋轉和縮放,ORB 在平移、旋轉、縮放的變換下仍有良好的表現。
同時,FAST 和 BRIEF 的組合也非常的高效,使得 ORB 特征在實時 SLAM 中非常受歡迎。
03
特征匹配
特征匹配是視覺 SLAM 中極為關鍵的一步,寬泛地說,特征匹配解決了 SLAM 中的數據關聯問題(data association),即確定當前看到的路標與之前看到的路標之間的對應關系。
通過對圖像與圖像,或者圖像與地圖之間的描述子進行準確的匹配,可以為后續的姿態估計,優化等操作減輕大量負擔。
然而,由于圖像特征的局部特性,誤匹配的情況廣泛存在,且長期以來沒有得到有效解決,目前已經成為視覺 SLAM 中制約性能提升的一大瓶頸。
部分原因是因為場景中經常存在大量的重復紋理,使得特征描述非常相似。
在這種情況下,僅利用局部特征解決誤匹配是非常困難的。
不過,現在我們先來看正確匹配的情況。
考慮兩個時刻的圖像。如果在圖像 It 中提取到特征點 xmt,m = 1,2,……,M,在圖像 It+1 中提取到特征點 xnt+1,n = 1,2,……,N,如何尋找這兩個集合元素的對應關系呢?
最簡單的特征匹配方法就是暴力匹配,即對每一個特征點 xmt,與所有的 xnt+1測量描述子的距離,然后排序,取最近的一個作為匹配點。
描述子距離表示了兩個特征之間的相似程度,不過在實際運用中還可以取不同的距離度量范數。
對于浮點類型的描述子,使用歐氏距離進行度量即可。
而對于二進制的描述子(比如 BRIEF 這樣的),我們往往使用漢明距離做為度量——兩個二進制串之間的漢明距離,指的是它們不同位數的個數。
然而,當特征點數量很大時,暴力匹配法的運算量將變得很大,特別是當我們想要匹配一個幀和一張地圖的時候。
這不符合我們在 SLAM 中的實時性需求。
此時快速近似最近鄰算法更加適合于匹配點數量極多的情況。
審核編輯:黃飛
-
算法
+關注
關注
23文章
4552瀏覽量
92021 -
SLAM
+關注
關注
23文章
405瀏覽量
31711
原文標題:圖像特征點提取、匹配大揭秘
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論