詳解計算機視覺中的特徵點檢測:Harris / SIFT / SURF / ORB

作者丨[email protected]知乎

來源丨https://zhuanlan.zhihu.com/p/36382429

編輯丨極市平臺

本文僅用於學術分享,若侵權,聯繫後臺作刪文處理。極市導讀

Harris角點檢測

Def. [角點(corner point)]
在鄰域內的各個方向上灰度變化值足夠高的點,是圖像邊緣曲線上曲率極大值的點。

  • [基於灰度圖像的角點檢測] 包括基於梯度的方法(通過計算邊緣的曲率判斷角點),基於模板的方法(考慮像素鄰域點的灰度變化, 將與鄰點亮度對比足夠大的點定義爲角點),基於模板梯度組合的方法

  • [基於二值圖像的角點檢測] 將二值圖像作爲單獨的檢測目標,可使用各種基於灰度圖像的角點檢測方法

  • [基於輪廓曲線的角點檢測] 通過角點強度或曲線曲率提取角點

角點檢測的基本思想是:使用角點檢測算子,對圖像的每個像素計算角點響應函數(Corner Response Function ),閾值化角點響應函數,根據實際情況選擇閾值,對閾值化的角點響應函數進行非極大值抑制,並獲取非零點作爲角點。通過一個小的滑動窗口在鄰域檢測角點
在任意方向上移動窗口,若窗口內的灰度值都有劇烈的變化,則窗口的中心就是角點。定義角點響應函數

其中w爲窗函數(window function),I爲圖像梯度,那麼E就表示了灰度變化的劇烈程度。1977年,Moravec最先提出瞭如下的角點檢測方法:

  1. 對於原始圖像,取偏移量(Δx,Δy)爲(1,0),(1,1),(0,1),(-1,1),分別計算每一像素點(xi,yi)的灰度變化

  2. 對於每一像素點(xi,yi),計算角點響應函數R(xi,yi)=min E

  3. 設定閾值T,將角點響應函數R(xi,yi)中低於T的值設爲0

  4. 在窗口範圍內進行非極大值抑制:遍歷角點響應函數,若某個像素的角點響應函數在窗口內不是最大,該像素置0

  5. 選擇非零點作爲角點檢測結果

Moravec角點檢測的缺點

  • 二值的窗口函數導致角點響應函數不夠光滑

  • 只在四個方向上計算灰度值變化,導致角點響應函數在多處都有較大響應

  • 對於每個點只考慮E的最小值,導致算法對邊緣有很強的反應

1988年,Harris和Plessey對Moravec的方法進行了改進,提出了經典的Harris角點檢測算法。Harris首先將Moravec算法中的窗口函數由階躍函數改爲二維高斯函數,並通過泰勒展開考察微小移動,也就是說,如果要求E的最大值以明確角點,就可以令 ,對E做泰勒展開,得

記  ,則上式可以寫成  的形式,這表示了一個橢圓,自相關矩陣M描述了圖像局部區域的灰度變化趨勢,可以通過橢圓的形狀來判定角點。

Proposition. 對於橢圓  ,設其半長軸和半短軸分別爲a,b,那麼  是矩陣M的特徵值。

Proof. 橢圓上任意一點到原點(也就是橢圓的中心)的距離平方  ,條件爲  ,那麼拉格朗日函數

於是


 
又可以改寫爲

由於(x,y)不是零向量,所以  ,即1/λ是矩陣  的特徵值,所以

這樣λ1,λ2就分別對應d^2的兩個最值,也就是a^2和b^2,所以,  是矩陣M的特徵值。由此我們還可以得到,橢圓面積 
q.e.d.

得到M的特徵值有什麼用呢?若用奇異值分解的觀點看這個問題。由於Jacobian矩陣  ,故M=JJ^T,這樣M的特徵值開根號後就是J的奇異值,因此M的特徵值就可以體現I_X和I_Y的相對大小。

現在我們需要定義角點響應函數,進一步進行區分,令(一般k=0.04 ~ 0.06)
 
其中

則定性判斷方法爲

  • [邊緣] 

  • [角點]  都很大,E在各個方向顯著變化

  • [平滑區域]  都很小, 在各個方向基本不變

定量判斷方法爲

  • [邊緣] R<<0

  • [角點] R>>0

  • [平滑區域] |R|很小

一般增大k的值,將減小角點響應值R,降低角點檢測的靈性,減少被檢測角點的數量;減小k值,將增大角點響應值R,增加角點檢測的靈敏性,增加被檢測角點的數量。

下面我們介紹如何利用Harris角點特徵進行特徵點匹配。

對兩幅圖像進行特徵匹配的過程是:

  1. 建立圖像的特徵點數據庫每個特徵點的數據結構,包括:位置座標、尺度、方向、特徵向量,

  2. 爲新圖像的每個特徵點在數據庫中逐個匹配,根據特徵向量的歐氏距離在數據庫中尋找其最近鄰和次近鄰特徵點,若(最近鄰距離/次近鄰距離)大於某一闕值,則特徵匹配成功。

Harris 角點檢測器僅僅能夠檢測出圖像中的興趣點,但是沒有給出通過比較圖像間的興趣點來尋找匹配角點的方法。我們需要在每個點上加入描述子信息,並給出一個比較這些描述子的方法。

興趣點描述子是分配給興趣點的一個向量,描述該點附近的圖像的表觀信息。描述子越好,尋找到的對應點越好。我們用對應點或者點的對應來描述相同物體和場景點在不同圖像上形成的像素點。Harris 角點的描述子通常是由周圍圖像像素塊的灰度值,以及用於比較的歸一化互相關矩陣構成的。圖像的像素塊由以該像素點爲中心的周圍矩形部分圖像構成。通常,兩個(相同大小)像素塊 I1(x) 和 I2(x) 的歸一化互相關矩陣定義爲:

Harris角點的優點

  • 計算簡單

  • 提取的點特徵均勻且合理

  • 穩定:Harris算子對圖像旋轉、亮度變化、噪聲影響和視點變換不敏感

Harris 算子的侷限性

  • 對尺度很敏感,不具有尺度不變性

  • 提取的角點精度是像素級的

  • 需要設計角點匹配算法

1994年,Shi和Tomasi對Harris角點檢測進行了改進,即定義角點響應函數R=min⁡ (λ1,λ2),該改進是計算適合跟蹤的優質特徵(good features to track),使得特徵分佈更均勻,其檢測精度是亞像素級別的。

SIFT算法預備知識:尺度空間與圖像金字塔

1999年Lowe提出了SIFT(Scale-invariant feature transform,尺度不變性特徵變換)特徵檢測算法,並於2003年對其完善總結;2006年,Bay等人對SIFT算法進行了改進,提升其效率,提出了SURF(Speeded Up Robust Features,加速魯棒性特徵)算法。

SIFT特徵檢測算法的特點:

  • SIFT特徵是圖像的局部特徵,對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性

  • 信息量豐富,適用於在海量特徵數據庫中進行匹配

  • 多量性,少數物體也可以產生大量SIFT特徵

  • 高速性,經優化的SIFT匹配算法甚至可以達到實時性

SIFT特徵檢測的步驟:

  • 檢測尺度空間的極值點

  • 精確定位特徵點(Keypoint)

  • 設定特徵點的方向參數

  • 生成特徵點的描述子(128維向量)

如果一張照片的像素數目被不斷壓縮,或者觀察者距離照片越來越遠,它將逐漸變得模糊,而這個導致照片的呈現內容發生變化的連續的自變量就可以稱爲尺度。對物體觀察的尺度不同,物體呈現的方式也不同。對計算機視覺而言,無法預知某種尺度的物體結構是否有意義,因此有必要將所有尺度的結構表示出來。以下關於尺度空間理論的部分,也可以參考:

http://www.cnblogs.com/ronny/p/3886013.html

利用圖像金字塔的方法,我們可以得到一系列大小不一的圖像,由大到小,從下到上構成的塔狀模型。假設高斯金字塔的第l 層圖像爲G_l,則有:

式中,N爲高斯金字塔層數;R_l和G_l分別爲高斯金字塔第l層的行數和列數;ω(m,n)是一個二維可分離的5× 5窗口函數,表達式爲:

寫成上面的形式是爲了說明,二維窗口的卷積算子,可以寫成兩個方向上的1維卷積核(二項核)的乘積。 上面卷積形式的公式實際上完成了2個步驟:1)高斯模糊;2)降維。按上述步驟生成的G_0,G_1,...,G_N就構成了圖像的高斯金字塔,其中 爲金字塔的底層(與原圖像相同), 爲金字塔的頂層。可見高斯金字塔的當前層圖像是對其前一層圖像先進行高斯低通濾波,然後做隔行和隔列的降採樣(去除偶數行與偶數列)而生成的。

將G_l進行內插(這裏內插用的不是雙線性而是用的與降維時相同的濾波核)得到放大圖像  ,使  的尺寸與  的尺寸相同,表示爲:

其中

,上面的係數4,是因爲每次能參與加權的項,權值和爲4/256,這個與我們用的ω的值有關。式中,

式中,N爲拉普拉斯金字塔頂層號,LP_l是拉普拉斯金字塔分解的第 層圖像。由LP_0,LP_1,\cdots,LP_l,...,LP_N構成的金字塔即爲拉普拉斯金字塔。它的每一層圖像是高斯金字塔本層圖像與其高一級的圖像經內插放大後圖像的差,此過程相當於帶通濾波,因此拉普拉斯金字塔又稱爲帶通金字塔分解。

圖像的金字塔化能高效地(計算效率也較高)對圖像進行多尺度的表達,但它缺乏堅實的理論基礎,不能分析圖像中物體的各種尺度。

我們知道,信號的尺度空間剛提出是就是通過一系列單參數、寬度遞增的高斯濾波器將原始信號濾波得到到組低頻信號。那麼一個很明顯的疑問是:除了高斯濾波之外,其他帶有參數t的低通濾波器是否也可以用來生成一個尺度空間。後來Koenerink、Lindeberg、Florack等人用精確的數學形式通過不同的途徑都證明了高斯核是實現尺度變換的唯一變換核。

雖然很多研究者從可分性、旋轉不變性、因果性等特性推出高斯濾波器是建立線性尺度空間的最優濾波器。然後在數字圖像處理中,需要對核函數進行採樣,離散的高斯函數並不滿足連續高斯函數的的一些優良的性質。所以後來出現了一些非線性的濾波器組來建立尺度空間,如B樣條核函數。

使用高斯濾波器對圖像進行尺度空間金塔塔圖的構建,讓這個尺度空間具有下面的性質:

  • 加權平均和有限孔徑效應

    • 信號在尺度t上的表達可以看成是原信號在空間上的一系列加權平均,權重就是具有不同尺度參數的高斯核。

    • 信號在尺度t上的表達也對應於用一個無方向性的孔徑函數(特徵長度爲  )來觀測信號的結果。這時候信號中特徵長度小於σ的精細結構會被抑制,理解爲一維信號上小於σ的波動會被平滑掉。

  • 層疊平滑,也叫高斯核族的半羣(Semi-Group)性質:兩個高斯核的卷積等同於另外一個不同核參數的高斯核卷積。  這個性質的意思就是說不同的高斯覈對圖像的平滑是連續的。

  • 局部極值遞性

    • 這個特徵可以從人眼的視覺原理去理解,人在看一件物體時,離得越遠,物體的細節看到的越少,細節特徵是在減少的。對生理學的研究中發現,哺乳動物的視網膜和視覺皮層的感受區域可以很好地用4階以內的高斯微分來建模。

    • 高斯覈對圖像進行濾波具有壓制局部細節的性質。

  • 尺度伸縮不變性,對原來的信號加一個變換函數,對變換後的信號再進行高斯核的尺度空間生成,新的信號的極值點等特徵是不變的。

SIFT算法

令原圖像爲金字塔的第一層,每次降採樣所得到的新圖像爲金字塔的一層(每層一張圖像),每個金字塔共n層。金字塔的層數根據圖像的原始大小和塔頂圖像的大小共同決定,其計算公式如下:
 

其中M,N爲原圖像的長和寬,t爲塔頂圖像的最小維數的對數值。接下來,我們通過尺度空間理論模擬圖像數據的多尺度特徵 ,以高斯函數爲實現尺度變換的唯一線性核,則二維圖像I(x, y)的尺度空間

根據高斯函數的性質,我們知道高斯窗的寬度約爲6σ,即在[-3σ,3σ]外的區間外,信號通過高斯濾波器的響應爲0,因此,高斯函數不同的標準差就可以作爲不同尺度的量度,事實上對高斯函數進行傅里葉變換後有

即一維高斯核是線性核,二維高斯核使得_  ,所以仍是線性的。這樣就可以定義高斯差分(difference of Gaussian, DoG)算子

其中  表示高斯拉普拉斯算子(LoG),正則化的高斯-拉普拉斯變換

圖像與某一個二維函數進行卷積運算實際就是求取圖像與這一函數的相似性。同理,圖像與高斯拉普拉斯函數的卷積實際就是求取圖像與高斯拉普拉斯函數的相似性。當圖像中的斑點尺寸與高斯拉普拉斯函數的形狀趨近一致時,圖像的拉普拉斯響應達到最大。

從概率的角度解釋爲:假設原圖像是一個與位置有關的隨機變量X的密度函數,而LOG爲隨機變量Y的密度函數,則隨機變量X+Y的密度分佈函數即爲兩個函數的卷積形式。如果想讓X+Y能取到最大值,則X與Y能保持步調一致最好,即X上升時,Y也上升,X最大時,Y也最大。實際上

每一次採樣返回的結果,就像音樂上的一個八度(octave),爲了讓尺度體現其連續性,高斯金字塔在簡單降採樣的基礎上加上了高斯濾波。將圖像金字塔每層的一張圖像使用不同參數做高斯模糊,使得金字塔的每層含有多張高斯模糊圖像,將金字塔每層多張圖像合稱爲八度(Octave),金字塔每層只有一組圖像,組數和金字塔層數相等,每組含有多張(也叫層,Interval)圖像。另外,降採樣時,高斯金字塔上一組圖像的初始圖像(底層圖像)是由前一組圖像的倒數第三張圖像隔點採樣得到的。在下一個八度,高斯算子的標準差擴大一倍。

在高斯差分尺度空間檢測局部極大或極小值,檢測點與其同尺度的8個相鄰點、上下相鄰尺度對應的9 × 2個點進行比較,以確保在尺度空間和二維圖像空間都檢測到極值點,極值點的位置可以通過對高斯差分算子求一階導數得到。離散空間的極值點並不是真正的極值點,利用已知的離散空間點插值得到的連續空間極值點的方法叫做亞像素插值(Sub-pixel Interpolation)。爲了提高關鍵點的穩定性,需要對尺度空間DoG函數進行曲線擬合。利用DoG函數在尺度空間的Taylor展開式(擬合函數)爲:

求導並讓方程等於零,可以得到極值點的偏移量爲:

對於這樣得到的極值點,首先要捨去高斯差分算子絕對值很小(一般指|D(\hat X)|<0.03)的點,通過主曲率分析去除邊緣響應過大的極值點,即計算差分圖像D的Hessian矩陣:

保留滿足如下條件的極值點(一般r=10)

現在對L(x,y,σ)進行差分,得到鄰域梯度方向直方圖(這裏常用Roberts算子計算),即

進而確定特徵的方向參數:

  • 梯度方向直方圖的範圍:[0, 360];

  • 特徵點的主方向:直方圖的峯值 ;

  • 特徵點的輔方向:直方圖的次峯值,能量超過主峯值能量的80\%;

當圖像發生旋轉時,特徵點的主方向相對於像素的梯度方向不變;將多幅待匹配的圖像都旋轉到令特徵點方向爲0的位置再匹配,使特徵具有旋轉不變性。

現在我們將座標軸方向旋轉爲特徵點的方向,以特徵點爲中心取窗口,通過高斯加權增強特徵點附近像素梯度方向信息的貢獻,即在4 × 4的小塊上計算梯度方向直方圖( 取8個方向),計算梯度方向累加值,形成種子點,構成4× 4 × 8= 128維特徵向量。SIFT特徵對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性。

對描述子的進一步處理

  • [去除光照影響] 將特徵向量的長度歸一化

  • [減弱扭曲影響] 仿射變換

關於SIFT算法的幾個問題

本小節主要參考:

http://www.cnblogs.com/ronny/p/4028776.html#3962356

第一個問題:第一組第一層圖像的生成

這裏要分兩種情況:其一是把第一組的索引定爲0;其二是把第一組的索引定爲-1;我們先考慮第一組索引爲0的情況,我們知道第一組第一層的圖像是由原圖像與 
(一般設置爲1.6)的高斯濾波器卷積生成,爲了圖像反走樣的需要,通常假設輸入圖像是經過高斯平滑處理的,其值爲  ,即半個像元。

也就是說我們採集到的圖像I(x,y),已經被  的高斯濾波器平滑過了。所以我們不能直接對I(x,y)用  的高斯濾波器平滑,而應該用  的高斯濾波器去平滑I(x,y),即

其中FirstLayer(x,y)表示整個尺度空間爲第1組第1層的圖像。

現在我們來考慮把第一組的索引定爲-1的情況。那麼首先第一個問題便是爲什麼要把索引定爲-1;如果索引爲0,整個尺度空間的第1組的第1層圖像已經是由原圖像模糊生成的了,那麼也就是說已經丟失了細節信息,那麼原圖像我們完全沒有利用上。基於這種考慮,我們先將圖像放大2倍,這樣原圖像的細節就隱藏在了其中。

由上面一種情況分析,我們已經知識了I(x,y)看成是已經被  模糊過的圖像,那麼將I(x,y)放大2倍後得到Is(x,y),則可以看爲是被  的高斯核模糊過的圖像。那麼由Is生成第1組第1層的圖像用的高斯濾波器的  ,即

第二個問題:尺度空間生成了多少幅圖像

我們知道S是我們最終構建出來的用來尋找特徵點的高斯差分圖像,而特徵點的尋找需要查找的是空間局部極小值,即在某一層上查找局部極值點的時候需要用到上一層與下一層的高斯差分圖像,所以如果我們需要查找S層的特徵點,需要S+2層高斯差分圖像,然後查找其中的第2層到第S+1層。

而每一個高斯差分圖像G(x,y,σ )都需要兩幅尺度空間的圖像L(x,y,kσ )與L(x,y,σ )進行差分生成,這裏假設S =3,則我們需要的高斯差分圖像有S+2 = 5張,分別爲

其中的

這三張圖像是我們用來查找局部極值點的圖像。那麼我們則需要S+3 = 6張尺度空間圖像來生成上面那些高斯差分圖像,它們分別爲:

從上面的分析,我們知道對於尺度空間來說,我們一共需要S+3層圖像來構建出來S+2層高斯差分圖像。所以,如果整個尺度空間一共有n組,每組有S+3層圖像,就共有n(S+3)張尺度圖像。

第三個問題:爲什麼取上一張的倒數第3張圖像隔行採樣後作爲下一組的第一張圖像?

對於尺度空間第o組,第s層的圖像,它的尺度爲

那麼我們從第0組開始,看它各層的尺度。

第0組

第1組

……

可以看出,第1組的第0層圖像恰好與第0組的倒數第三幅圖像一致,尺度都爲  ,所以我們不需要再根據原圖來重新卷積生成每組的第0張圖像,只需採用上一層的倒數第3張來降採樣即可。

我們也可以繼續分析,第0組尺度空間得到的高斯差分圖像的尺度爲:

而第1組尺度空間得到的高斯差分圖像的尺度爲

如果我們把它們的中間三項取出來拼在一起,則尺度爲:

正好連續。這一效果帶來的直接的好處是 在尺度空間的極值點確定過程中,我們不會漏掉任何一個尺度上的極值點,而是能夠綜合考慮量化的尺度因子。

第四個問題:如何用第i-1層的圖像生成第i層的圖像?

尺度空間裏的每一層的圖像(除了第1層)都是由其前面一層的圖像和一個相對σ的高斯濾波器卷積生成,而不是由原圖和對應尺度的高斯濾波器生成的,這一方面是因爲我前面提到的不存在所謂意思上的「原圖」,我們的輸入圖像I(x,y)已經是尺度爲σ=0.5的圖像了。另一方面是由於如果用原圖計算,那麼相鄰兩層之間相差的尺度實際上非常小,這樣會造成在做高斯差分圖像的時候,大部分值都趨近於0,以致於後面我們很難檢測到特徵點。

基於上面兩點原因,所以對於每一組的第i+1層的圖像,都是由第i層的圖像和一個相對尺度的高斯濾波器卷積生成。

我們首先考慮第0組,它們的第i+1層圖像與第i層圖像之間的相對尺度爲

爲了保持尺度的連續性,後面的每一組都用這樣一樣相對尺度(SIFT實際代碼裏是這樣做的)。這裏有一個猜測,比如說尺度爲2σ0的這一組,第i層與第i+1層之間的相對尺度計算的結果應該爲

可是,依然可以用

,是因爲這一層被降維了。

第五個問題:離散空間得到的極值點與連續空間的極值點之間的差別

爲了尋找尺度空間的極值點,每一個採樣點要和它所有的相鄰點進行比較,看其是否比它的圖像域和尺度域的相鄰點大或小。對於其中的任意一個檢測點都要和它同尺度的8個相鄰點和上下相鄰尺度對應的9× 2個點共26個點比較,以確保在尺度空間和二維圖像位置空間都檢測到極值點。也就是,比較是在一個3× 3× 3的立方體內進行。

搜索過程從每組的第二層開始,以第二層爲當前層,對第二層的DoG圖像中的每個點取一個3× 3× 3的立方體,立方體上下層爲第一層與第三層。這樣,搜索得到的極值點既有位置座標(DoG的圖像座標),又有空間尺度座標(層座標)。當第二層搜索完成後,再以第三層作爲當前層,其過程與第二層的搜索類似。當S=3時,每組裏面要搜索3層。

極值點的搜索是在離散空間中進行的,檢測到的極值點並不是真正意義上的極值點。利用已知的離散空間點插值到連續空間極值點的方法,就是子像元插值方法。

SURF算法

SURF特徵(Speeded Up Robust Features,加速魯棒性特徵)是對SIFT特徵的進一步優化,基於Hessian矩陣構造金字塔尺度空間,利用箱式濾波器(box filter)簡化二維高斯濾波,不需要再進行降採樣;通過Haar小波特徵設定特徵點主方向,這樣構建的特徵描述子就是64維的;surf構造的金字塔圖像與sift有很大不同,就是因爲這些不同才加快了其檢測的速度。Sift採用的是DOG圖像,而surf採用的是Hessian矩陣行列式近似值圖像,也寫作DOH算子。

由於求Hessian時要先高斯平滑,然後求二階導數,這在離散的像素點是用模板卷積形成的,這2種操作合在一起用一個模板代替就可以了。相比於sift算法的高斯金字塔構造過程,surf算法速度有所提高。在sift算法中,每一組(octave)的圖像大小是不一樣的,下一組是上一組圖像的降採樣(1/4大小);在每一組裏面的幾幅圖像中,他們的大小是一樣的,不同的是他們採用的尺度 不同。而且在模糊的過程中,他們的高斯模板大小總是不變的,只是尺度 改變。對於surf算法,圖像的大小總是不變的,改變的只是高斯模糊模板的尺寸,當然,尺度也是在改變的,但不需要降採樣過程,節省時間。

爲了保證旋轉不變性,在SURF中,不統計其梯度直方圖,而是統計特徵點領域內的Harr小波特徵。即以特徵點爲中心,計算半徑爲6s(S爲特徵點所在的尺度值)的鄰域內,統計60度扇形內所有點在x(水平)和y(垂直)方向的Haar小波響應總和(Haar小波邊長取4s),並給這些響應值賦高斯權重係數,使得靠近特徵點的響應貢獻大,而遠離特徵點的響應貢獻小,然後60度範圍內的響應相加以形成新的矢量,遍歷整個圓形區域,選擇最長矢量的方向爲該特徵點的主方向。在特徵點周圍取正方形框,方框的方向爲特徵點主方向,把方框分爲16個子區域,在每個子區域統計水平方向和垂直方向的haar小波特徵,在每個子區域計算haar小波特徵的水平方向值之和,水平方向絕對值之和、垂直方向值之和、垂直方向絕對值之和,構成16× 4=64維特徵向量

在完成採集後,還需要建立圖像的特徵點數據庫,每個特徵點的數據結構包括:位置座標、尺度、方向、特徵向量(128或64維);爲新圖像的每個特徵點在數據庫中逐個匹配,即根據特徵向量的歐氏距離在數據庫中尋找其最近鄰和次近鄰特徵點,若最近鄰距離或次近鄰距離大於某一闕值,則特徵匹配成功。

綜上所述,可知SURF採用Henssian矩陣獲取圖像局部最值還是十分穩定的,但是在求主方向階段太過於依賴局部區域像素的梯度方向,有可能使得找到的主方向不準確,後面的特徵向量提取以及匹配都嚴重依賴於主方向,即使不大偏差角度也可以造成後面特徵匹配的放大誤差,從而匹配不成功;另外圖像金字塔的層取得不足夠緊密也會使得尺度有誤差,後面的特徵向量提取同樣依賴相應的尺度,在這個問題上我們只能採用折中解決方法:取適量的層然後進行插值。

SIFT特徵與SURF特徵的比較:

  • [構建圖像金字塔] SIFT特徵利用不同尺寸的圖像與高斯差分濾波器卷積;SURF特徵利用原圖片與不同尺寸的方框濾波器卷積。

  • [特徵描述子] SIFT特徵有4×4×8=128維描述子,SURF特徵有4×4×4=64維描述子

  • [特徵點檢測方法] SIFT特徵先進行非極大抑制,再去除低對比度的點,再通過Hessian矩陣去除邊緣響應過大的點;SURF特徵先利用Hessian矩陣確定候選點,然後進行非極大抑制

  • [特徵點主方向] SIFT特徵在正方形區域內統計梯度幅值的直方圖,直方圖最大值對應主方向,可以有多個主方向;SURF特徵在圓形區域內計算各個扇形範圍內x、y方向的haar小波響應,模最大的扇形方向作爲主方向

ORB特徵

本節主要參考了:

https://blog.csdn.net/zouzoupaopao229/article/details/52625678

ORB特徵是將FAST特徵點的檢測方法與BRIEF特徵描述子結合起來,並在它們原來的基礎上做了改進與優化。ORB算法的速度大約是SIFT的100倍,是SURF的10倍。

ORB(Oriented FAST and Rotated BRIEF)是一種快速特徵點提取和描述的算法。這個算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名爲「ORB:An Efficient Alternative to SIFT or SURF」的文章中提出。ORB算法分爲兩部分,分別是特徵點提取和特徵點描述。特徵提取是由FAST(Features from Accelerated Segment Test)算法發展來的,特徵點描述是根據BRIEF(Binary Robust IndependentElementary Features)特徵描述算法改進的。

ORB使用ID3算法訓練一個決策樹,將特徵點圓周上的16個像素輸入決策樹中,以此來篩選出最優的FAST特徵點。

接着,非極大值抑制去除局部較密集特徵點。使用非極大值抑制算法去除臨近位置多個特徵點的問題。爲每一個特徵點計算出其響應大小。計算方式是特徵點P和其周圍16個特徵點偏差的絕對值和。在比較臨近的特徵點中,保留響應值較大的特徵點,刪除其餘的特徵點。

現在我們可以建立金字塔,來實現特徵點的多尺度不變性。設置一個比例因子scaleFactor(opencv默認爲1.2)和金字塔的層數nlevels(opencv默認爲8)。將原圖像按比例因子縮小成nlevels幅圖像。縮放後的圖像爲:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的圖像提取特徵點總和作爲這幅圖像的oFAST特徵點。

ORB算法提出使用矩(moment)法來確定FAST特徵點的方向。也就是說通過矩來計算特徵點以r爲半徑範圍內的質心,特徵點座標到質心形成一個向量作爲該特徵點的方向。矩定義如下: 

相關文章
相關標籤/搜索