特徵點匹配——ORB算法介紹

《ORB: an efficient alternative to SIFT or SURF》是Rublee等人在2011年的ICCV上發表的一篇有關於特徵點提取和匹配的論文,這篇論文介紹的方法跳出了SIFT和SURF算法的專利框架,同時以極快的運行速度贏得了衆多青睞。下面我簡單介紹一下ORB算法的流程。

ORB算法的主要貢獻如下:

(1)爲FAST算法提取的特徵點加上了一個特徵點方向;

(2)使用帶方向的BRIEF算法高效的對特徵點描述符進行計算;

(3)分析了BRIEF算法得到的特徵點描述符的方差和關聯性;

(4)介紹了一種基於學習的去特徵點關聯性的BRIEF算法,優化了特徵點求得的最近鄰點。

下面我按照論文的結構對ORB算法進行介紹。

1、oFAST: FAST Keypoint Orientation

1.1 FAST Detector

ORB算法使用的是FAST算法提取的特徵點(FAST算法的詳細介紹會在以後的博文中提出),在作者的實驗中使用的FAST-9的算法,得到了很好的結果。

由於邊緣位置對FAST算法得到的特徵點有很大的影響,因此作者使用了Harris 角點檢測方法對於得到的特徵點進行排序,取前N個較好的角點作爲特徵點。

FAST算法是一種非常快的提取特徵點的方法,但是對於這裏來說,有兩點不足:

(1)提取到的特徵點沒有方向;

(2)提取到的特徵點不滿足尺度變化。

針對特徵點不滿足尺度變化,作者像SIFT算法中那樣,建立尺度圖像金字塔,通過在不同尺度下的圖像中提取特徵點以達到滿足尺度變化的效果。

針對提取到的特徵點沒有方向的問題,作者採用了Rosin提出的一種稱爲“intensity centroid”的方法確定了特徵點的方向。

那麼,就來看一下確定特徵點方向的方法。

1.2 Orientation by Intensity Centroid

這種方法的主要思想就是,首先把特徵點的鄰域範圍看成一個patch,然後求取這個patch的質心,最後把該質心與特徵點進行連線,求出該直線與橫座標軸的夾角,即爲該特徵點的方向。

那麼,怎麼求取這個鄰域的質心呢?

論文中提到Rosin定義瞭如下公式:mpq=∑x,yxpyqI(x,y)然後質心定義爲:C=(m10m00,m01m00)然後求取向量OC的方向,同時如果把x,y的範圍保持在[?r,r]之間(r爲該特徵點鄰域的半徑),以特徵點爲座標原點,則得到的方向角爲θ=atan2(m01,m10)

作者在論文中提到,這種算法比BIN和MAX這兩種求取特徵點方向的方法都要好。

2、rBRIEF: Rotation-Aware Brief

2.1 Efficient Rotation of the BRIEF Operator Brief overview of BRIEF

下面我們隊BRIEF算法進行一個簡單的回顧:

BRIEF算法提取得到的特徵點描述符是一個二進制的字符串,建設當前的一個特徵點的鄰域空間patch,設爲p,那麼對該面片p定義的一個二進制測試τ(p;x,y):={1:p(x)<p(y)2:p(x)≥p(y)}< nobr="">其中p(x)表示的是在點x處的圖像灰度值,那麼這樣我們就可以得到一個n位的二進制串fn(p):=∑1≤i≤n2i?1τ(p;xi,yi)對於x和y的座標分佈在本文中使用的是以特徵點爲中心的高斯分佈,這種分佈情況在Brief的論文原文中被證明是最好的。同樣,本文中選擇的n=256。

考慮到圖像中有噪聲的干擾,在實際的求取特徵點描述符的過程中,需要對圖像進行平滑操作。論文中使用的方法是,在對比操作τ進行的時候,不是對比的一個點,而是對比的在31?31的patch中的若干個5?5的子窗口。

上面就是BRIEF算法的一個簡單回顧,BRIEF算法形成的描述符對於旋轉操作非常敏感,當旋轉的角度增大時,利用BRIEF算法的描述符進行匹配的結果極大的降低。如下圖所示:不同的算法隨着旋轉的程度的增大匹配結果趨勢

圖中x軸表示的是旋轉的角度,y軸表示匹配結果中正確匹配所佔的百分比。可以看出,隨着旋轉角度的增大,BRIEF算法的匹配效果迅速的降低,旋轉角度在45度以上時,正確率幾乎爲0。那麼這就引出了我們接下來要介紹的Steered BRIEF算法。

Steered BRIEF算法介紹

想要讓BRIEF算法具有旋轉不變性,那麼我們需要使特徵點的鄰域旋轉一個角度,該角度就是我們上面求得的特徵點的方向角θ。但是這樣整體旋轉一個鄰域的開銷是比較大的,一個更加高效的做法就是旋轉我們前面得到的那些鄰域中的匹配點xi、yi。

設生成特徵點描述符的n個測試點對爲(xi,yi),定義一個2×n的矩陣S=(x1,y1,......,xn,yn)利用角度θ形成的旋轉矩陣爲Rθ,那麼旋轉後匹配點的座標爲Sθ=RθS這樣,在求取特徵點描述符的時候,就使用Sθ中的像素點即可。

2.2 Variance and Correlation

作者提到,BRIEF的一個比較好的特性是,對於所有的特徵點上的每一位(bit)上的值的平均值都非常接近0.5(這裏的平均值比較難理解,舉個例子,比如說n個特徵點中的所有的第i位的平均值),同時平均值的分佈的方差較大。這樣很顯然有一個好處,就是方差越大說明數據的差異性越大,也就是說更能很好的區分不同的點。下圖爲作者取100k個特徵點中的256位中各位的平均值分佈,其中橫座標爲平均值與0.5的差值,縱座標是位的個數:

這裏寫圖片描述

可以看出BRIEF的所有特徵點各個位上的平均值分佈爲以0.5爲均值,方差很大的一個高斯分佈。

同樣看上面這個圖,我們發現steered BRIEF算法的結果中,所有特徵點在各個位上的平均的分佈則比較平均,這是因爲進行旋轉角度θ以後,均值就漂移到更加均衡的模式。

作者同時對BRIEF、Steered BRIEF和rBRIEF(後面會講到)提取的100k個特徵點的描述符進行PCA提取主成份,根據得到的特徵值進行分析,如下圖所示:

這裏寫圖片描述

可以看出BRIEF和Steered BRIEF中前幾個特徵值比較大,那麼基本上所有的信息都集中在這這面的若干維中,而Steered BRIEF算法得到的特徵值比BRIEF的特徵值小很多,因此Steered BRIEF得到的描述符的方差分佈小,也就意味的區分能力比較差。

我們從另一個角度也可以證實這一點,如下圖所示,實線表示的是匹配成功的點的距離的分佈,虛線表示的是匹配失敗的點的距離的分佈,橫座標是距離,縱座標是頻率:

這裏寫圖片描述

可以看出相比BRIEF和rBRIEF,steered BRIEF得到的匹配結果中,匹配失敗的點的距離分佈的平均值推左(論文中的push left,其實就是平均值偏小)了,這也就造成了成功和失敗的點的距離中有更多的交集。同時也就意味着匹配結果的不理想。

2.3 Learning Good Binary Features

爲了彌補Steered BRIEF算法造成的方差變小的缺陷,同時降低各個特徵點的鄰域內的匹配點對的相關性,作者使用了一種學習的方法來從鄰域的所有可能的匹配點對中選出一個表現較好的子集用來生成特徵點描述符。

作者首先從PASCAL 2006的圖像庫中提取了300k個特徵點作爲訓練集,然後從每個特徵點的31×31大小的鄰域中窮舉出所有可能的5×5的匹配子窗口。假設wp爲總鄰域的邊長,wt作爲子窗口的邊長,那麼再這個鄰域中一共有N=(wp?wt)2個子窗口存在,從其中任意挑選2個子窗口,則有(N2)種可能的選擇,然後去掉其中重疊的子窗口的匹配可能,對於作者的實驗中,總共有205590種可能的匹配子窗口。

然後算法運行如下:

(1)對於每個特徵點的鄰域中所有可能的子窗口進行匹配,則得到205590個匹配結果,這作爲一行,由於一共有300k個特徵點,因此能夠形成一個300000×205590的矩陣;

(2)對於這個矩陣,求各列的平均值,並按照離0.5的大小從小到大進行排序,並記錄每列是由哪一對位置x和y的比較構成的,每隊看做一個元素,構成向量T;

(3)貪婪搜索:

*(a)取出距離0.5最近的兩個位置放到R,並在T中刪除;

(b)在去除T中距離0.5最近的兩個位置,判斷該位置與R中已經存在的關聯性是否達到閾值,如果達到則拋棄當前的位置,如果沒有達到則把它加入到R中;

(c)反覆執行(a)、(b)中的操作,直到R中有256對,如果執行一遍沒有達到256,那麼提高(b)中的閾值,再次進行此操作,直到選出256對爲止。*

利用這樣搜索出來的256對位置生成特徵點描述符的方法就是我們前面提到的rBRIEF。

至此我們講的oFAST + rBRIEF即爲ORB算法。

 

FAST算法簡單介紹

FAST算法是ECCV 2006上發表的Machine learning for high-speed corner detection上提出的,從論文名字中就可以看出,這是一種檢測特徵點的方法。

具體內容如下:

判別特徵點p是否是一個特徵點,可以通過判斷以該點爲中心畫圓,該圓過16個像素點。設在圓周上的16個像素點中是否最少有n個連續的像素點滿足都比Ip+t大,或者都比Ip?t小。(這裏Ip指的點p的灰度值,t是一個閾值)如果滿足這樣的要求,則判斷p是一個特徵點,否則p不是。在原論文中n的值一般設爲12。

如下圖所示:

這裏寫圖片描述

由於在檢測特徵點時是需要對圖像中所有的像素點進行檢測,然而圖像中的絕大多數點都不是特徵點,如果對每個像素點都進行上述的檢測過程,那顯然會浪費許多時間,因此論文中採用了一種進行非特徵點判別的方法。如上圖中,對於每個點都檢測第1、5、9、13號像素點,如果這4個點中至少有3個滿足都比Ip+t大或者都比Ip?t小,則繼續對該點進行16個鄰域像素點都檢測的方法,否則則判定該點是非特徵點,直接剔除即可。

另外,對每個特徵點設一個bool變量Kp,用來表示是否爲角點,Kp=true爲角點。

階段2對上面得到的特徵點集進行訓練,使用ID3算法建立一棵決策樹,假設通過使用第x個像素點進行決策樹的劃分,那麼對集合P得到的熵K是H(P)=(c+cˉ)log2(c+cˉ)?clog2c?cˉlog2cˉ其中c爲角點的數目,cˉ爲非角點的數目。

由此得到的信息增益爲H(P)?H(Pd)?H(Ps)?H(Pb)然後選擇使信息增益最大位置進行分割,最終得到這棵決策樹。以後再有類似的場景進行特徵點檢測時,則使用該決策樹進行檢測。

發佈了87 篇原創文章 · 獲贊 59 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章