圖像處理——SURF算法

首先感謝以下3位的淵博知識,幫助我理解SURF算法:

(1)☆Ronny丶  https://www.cnblogs.com/ronny/p/4045979.html

 

 

 

(2)-牧野-   http://blog.csdn.net/dcrmg/article/details/52601010

 


(2)-牧野-  http://blog.csdn.net/dcrmg/article/details/52601010

(3)PeOS http://blog.csdn.net/cxp2205455256/article/details/41311013

 

Speeded Up Robust Features(SURF,加速穩健特徵),是一種穩健的局部特徵點檢測和描述算法。最初由Herbert Bay發表在2006年的歐洲計算機視覺國際會議(Europen Conference on Computer Vision,ECCV)上,並在2008年正式發表在Computer Vision and Image Understanding期刊上。

Surf是對David Lowe在1999年提出的Sift算法的改進,提升了算法的執行效率,爲算法在實時計算機視覺系統中應用提供了可能。與Sift算法一樣,Surf算法的基本路程可以分爲三大部分:局部特徵點的提取、特徵點的描述、特徵點的匹配。

但Surf在執行效率上有兩大制勝法寶——一個是積分圖在Hessian(黑塞矩陣)上的使用,一個是降維的特徵描述子的使用。瞭解這兩大法寶是如何出奇制勝前,先回顧一下傳統Sift算法的基本思路及其優缺點。

一、Sift算法回顧

 

Sift算法的三大工序爲,(1)提取關鍵點;(2)對關鍵點附加詳細的信息(局部特徵)也就是所謂的描述器;(3)通過兩方特徵點(附帶上特徵向量的關鍵點)的兩兩比較找出相互匹配的若干對特徵點,也就建立了景物間的對應關係。提取關鍵點和對關鍵點附加詳細的信息(局部特徵)也就是所謂的描述器可以稱做是Sift特徵的生成,即從多幅圖像中提取對尺度縮放、旋轉、亮度變化無關的特徵向量,Sift特徵的生成一般包括以下幾個步驟:

(1)、構建尺度空間,檢測極值點,獲得尺度不變性;

 

(2)、特徵點過濾並進行精確定位;

 

(3)、爲特徵點分配方向值;

 

(4)、生成特徵描述子。

以特徵點爲中心取16*16的鄰域作爲採樣窗口,將採樣點與特徵點的相對方向通過高斯加權後歸入包含8個bin的方向直方圖,最後獲得4*4*8的128維特徵描述子。示意圖如下:

 

當兩幅圖像的Sift特徵向量生成以後,下一步就可以採用關鍵點特徵向量的歐式距離來作爲兩幅圖像中關鍵點的相似性判定度量。取圖1的某個關鍵點,通過遍歷找到圖像2中的距離最近的兩個關鍵點。在這兩個關鍵點中,如果次近距離除以最近距離小於某個闕值,則判定爲一對匹配點。

二、SURF算法原理

(1)積分圖像

積分圖像的概念是由Viola和Jones提出的。積分圖像中任意一點(i,j)的值爲原圖像左上角到任意點(i,j)相應的對焦區域的灰度值的總和,其數學公式如圖1所示:

那麼,當我們想要計算圖片一個區域的積分,就只需計算這個區域的四個頂點在積分圖像裏的值,便可以通過2步加法和2步減法計算得出,其數學公式如下:

 

 

(2)斑點檢測

    斑點:與周圍有着顏色和灰度差別的區域。
    在一個一維信號中,讓它和高斯二階導數進行卷積,也就是拉普拉斯變換,那麼在信號的邊緣處就會出現過零點,如下圖所示:

    高斯拉普拉斯Log探測器的響應值就是在衡量圖像的相似性,如下圖是一個圖像的高斯拉普拉斯變換的三維圖和灰度圖顯示,在圖像中的斑點尺寸與高斯拉普拉斯函數
的形狀趨於一致時,圖像的拉普拉斯響應抵達最大。

    Hession矩陣就是利用二階微分來進行斑點檢測,其矩陣如下:

(3)hession矩陣行列式的簡化

 

給定圖像II中的一個點x(i,j)x(i,j),在點xx處,尺度爲σσ的Hessian矩陣H(x,σ)H(x,σ)定義如下:

 

H(x,σ)=[Lxx(x,σ)Lxy(x,σ)Lxy(x,σ)Lyy(x,σ)]H(x,σ)=[Lxx(x,σ)Lxy(x,σ)Lxy(x,σ)Lyy(x,σ)]

 

式中,Lxx(x,σ)Lxx(x,σ)是高斯二階微分∂2g(σ)∂x2∂2g(σ)∂x2在點xx處與圖像II的卷積,Lx,y(x,σ)Lx,y(x,σ)和Lyy(x,σ)Lyy(x,σ)具有類似的含義。

 

當Hessian矩陣的判別式取得局部極大值時,判定當前點是比周圍鄰域內其他點更亮或更暗的點,由此來定位關鍵點的位置。

我們知道在離散數字圖像中,一階導數是相鄰像素的灰度差:

 

 

二階導數是對一階導數的再次求導:

 

 

反過來看Hessian矩陣的判別式,其實就是當前點對瓶方向二階偏導乘以垂直方向的二階偏導再減去當前點水平、垂直二階偏導的二次方:

 

 

下面顯示的是上面三種高斯微分算子的圖形。

image

但是利用Hessian行列式進行圖像斑點檢測時,有一個缺點。由於二階高斯微分被離散化和裁剪的原因,導致了圖像在旋轉奇數倍的π/4π/4時,即轉換到模板的對角線方向時,特徵點檢測的重複性降低(也就是說,原來特徵點的地方,可能檢測不到特徵點了)。而在π/2π/2時,特徵點檢測的重現率真最高。但這一小小的不足不影響我們使用Hessian矩陣進行特徵點的檢測。

爲了將模板與圖產像的卷積轉換爲盒子濾波運算,我們需要對高斯二階微分模板進行簡化,使得簡化後的模板只是由幾個矩形區域組成,矩形區域內填充同一值,如下圖所示,在簡化模板中白色區域的值爲正數,黑色區域的值爲負數,灰度區域的值爲0。

image

對於σ=1.2σ=1.2的高斯二階微分濾波器,我們設定模板的尺寸爲9×99×9的大小,並用它作爲最小尺度空間值對圖像進行濾波和斑點檢測。我們使用Dxx、DxyDxx、Dxy和DyyDyy表示模板與圖像進行卷積的結果。這樣,便可以將Hessian矩陣的行列式作如下的簡化。

 

Det(H)=LxxLyy–LxyLxy=DxxLxxDxxDyyLyyDyy−DxyLxyDxyDxyLxyDxy≈DxxDyy–(wDxy)2Det(H)=LxxLyy–LxyLxy=DxxLxxDxxDyyLyyDyy−DxyLxyDxyDxyLxyDxy≈DxxDyy–(wDxy)2

 

濾波器響應的相關權重ww是爲了平衡Hessian行列式的表示式。這是爲了保持高斯核與近似高斯核的一致性。

 

w=|Lxy(σ)|F|Dxx(σ)F||Lxx(σ)|F|Dxy(σ)F|=0.912w=|Lxy(σ)|F|Dxx(σ)F||Lxx(σ)|F|Dxy(σ)F|=0.912

 

其中|X|F|X|F爲Frobenius範數。另外,響應值還要根據濾波器大小進行歸一化處理,以保證任意大小濾波器的F範數是統一的。0.9^2是濾波器響應的相關權重w是爲了平衡Hessian行列式的表示式。這是爲了保持高斯核與近似高斯核的一致性。理論上來說對於不同的σ的值和對應尺寸的模板尺寸,w值是不同的,但爲了簡化起見,可以認爲它是同一個常數。 使用近似的Hessian矩陣行列式來表示圖像中某一點x處的斑點響應值,遍歷圖像中所有的像元點,便形成了在某一尺度下琉璃點檢測的響應圖像。使用不同的模板尺寸,便形成了多尺度斑點響應的金字塔圖像,利用這一金字塔圖像,就可以進行斑點響應極值點的搜索。

使用近似的Hessian矩陣行列式來表示圖像中某一點xx處的斑點響應值,遍歷圖像中所有的像元點,便形成了在某一尺度下琉璃點檢測的響應圖像。使用不同的模板尺寸,便形成了多尺度斑點響應的金字塔圖像,利用這一金字塔圖像,就可以進行斑點響應極值點的搜索,其過程完全與SIFT算法類同。

 

(4)尺度金字塔構造

    相比於sift算法的高斯金字塔構造過程,sift算法速度有所提高。在sift算法中,每一組(octave)的圖像大小是不一樣的,下一組是上一組圖像的降採樣(1/4大小);在每一組裏面的幾幅圖像中,他們的大小是一樣的,不同的是他們採用的尺度σ不同。而且在模糊的過程中,他們的高斯模板大小總是不變的,只是尺度σ改變。對於surf算法,圖像的大小總是不變的,改變的只是高斯模糊模板的尺寸,當然,尺度σ也是在改變的。 

 

在SURF中,採用不斷增大盒子濾波器模板尺寸與積分圖像求取Hession矩陣響應,然後在響應圖像上採用3D非極大值抑制,求取各種不同尺度

的斑點,以下是兩種不同的金字塔,SURF的金字塔屬於第二種:

上圖中a爲高斯模板保持不變,圖像大小改變的情況,適用於sift算法,圖b是高斯模板改變,圖像大小保持不變的情況,適用於surf算法。因爲surf算法沒有了降採樣的過程,因此處理速度得到提高。 

 

    SURF中採用9X9尺寸的濾波器作爲起始濾波器,之後的濾波器尺寸可由以下公式計算得出:

 

octave、interval在公式中都是從1開始,也就是當第0組第0層時,在公式中octave = 1, interval = 1。

   

濾波器響應長度l(小寫L)、濾波器尺寸L、組索引O、層索引S、尺度sigma之間的關係如下:

通常想要獲取不同尺度的斑點,必須建立圖像的尺度空間金字塔。一般的方法是通過不同
σ的高斯函數,對圖像進行平滑濾波,然後重採樣圖像以獲得更高一層的金字塔圖像。SIFT特徵檢測算法中就是通過相鄰兩層圖像金字塔相減得到DoG圖像,然後再在DoG圖像上進行斑點和邊緣檢測工作的。

由於採用了盒子濾波和積分圖像,所以,我們並不需要像SIFT算法那樣去直接建立圖像金字塔,而是採用不斷增大盒子濾波模板的尺寸的間接方法。通過不同尺寸盒子濾波模板與積分圖像求取Hessian矩陣行列式的響應圖像。然後在響應圖像上採用3D非最大值抑制,求取各種不同尺度的斑點。

如前所述,我們使用
9×9的模板對圖像進行濾波,其結果作爲最初始的尺度空間層(此時,尺度值爲s=1.2,近似σ=1.2的高斯微分),後續的層將通過逐步放大濾波模板尺寸,以及放大後的模板不斷與圖像進行濾波得到。由於採用盒子濾波和積分圖像,濾波過程並不隨着濾波模板尺寸的增加而使運算工作量增加。

 

與SIFT算法類似,我們需要將尺度空間劃分爲若干組(Octaves)。一個組代表了逐步放大的濾波模板對同一輸入圖像進行濾波的一系列響應圖。每個組又由若干固定的層組成。由於積分圖像離散化的原因,兩個層之間的最小尺度變化量是由高斯二階微分濾波器在微分方向上對正負斑點響應長度l0l0決定的,它是盒子濾波器模板尺寸的1/31/3。對於9×99×9的模板,它的l0=3l0=3。一下層的響應長度至少應該在l0l0的基礎上增加2個像素,以保證一邊一個像素,即l0=5l0=5。這樣模板的尺寸就爲15×1515×15。以此類推,我們可以得到一個尺寸增大模板序列,它們的尺寸分別爲:9×9,15×15,21×21,27×279×9,15×15,21×21,27×27,黑色、白色區域的長度增加偶數個像素,以保證一箇中心像素的存在。

image        image

採用類似的方法來處理其他幾組的模板序列。其方法是將濾波器尺寸增加量翻倍(6,12,24,38)(這句話不太明白,不過將本段綠色數字代入公式推導,得出其意思是:第0組相鄰層之間像素增加2l0,兩邊各增加l0;第1組相鄰層之間像素增加4l0,兩邊各增加2l0;第2組相鄰層之間像素增加8l0,兩邊各增加4l0)。這樣,可以得到第二組的濾波器尺寸,它們分別爲15,27,39,51。第三組的濾波器尺寸爲27,51,75,99。如果原始圖像的尺寸仍然大於對應的濾波器尺寸,尺度空間的分析還可以進行第四組,其對應的模板尺寸分別爲51,99,147和195。下圖顯示了第一組至第三組的濾波器尺寸變化。

image

在通常尺度分析情況下,隨着尺度的增大,被檢測到的斑點數量迅速衰減。所以一般進行3-4組就可以了,與此同時,爲了減少運算量,提高計算的速度,可以考慮在濾波時,將採樣間隔設爲2。

對於尺寸爲L的模板,當用它與積分圖運算來近似二維高斯核的濾波時,對應的二維高斯核的參數σ=1.2×L9σ=1.2×L9,這一點至關重要,尤其是在後面計算描述子時,用於計算鄰域的半徑時。

(5)非最大值抑制

所有小於預設極值的取值都被丟棄,增加極值使檢測到的特徵點數量減少,最終只有幾個特徵最強點會被檢測出來。檢測過程中使用與該尺度層圖像解析度相對應大小的濾波器進行檢測,以3×3的濾波器爲例,該尺度層圖像中9個像素點之一圖2檢測特徵點與自身尺度層中其餘8個點和在其之上及之下的兩個尺度層9個點進行比較,共26個點,圖中標記‘x’的像素點的特徵值若大於周圍像素則可確定該點爲該區域的特徵點。

 

 (6)局部極大值精確定位

 

    跟sift算法類似,採用3維線性插值法得到亞像素級的特徵點,同時也去掉那些值小於一定閾值的點,增加極值使檢測到的特徵點數量減少,最終只有幾個特徵最強點會被檢測出來。

(7)特徵點主方向分配

Sift特徵點方向分配是採用在特徵點鄰域內統計其梯度直方圖,取直方圖bin值最大的以及超過最大bin值80%的那些方向作爲特徵點的主方向。而在Surf中,採用的是統計特徵點圓形鄰域內的harr小波特徵。

以特徵點爲中心,計算半徑爲6s(S爲特徵點所在的尺度值)的鄰域內的點在x、y方向的Haar小波(Haar小波邊長取4s)響應,Harr小波

模板如圖所示:(ps:關於Haar小波,要完全理解的話要看不少資料,我個人在這裏把它姑且視爲x、y方向的梯度變化,不知是否正確)

 

    計算出圖像在哈爾小波的x和y方向上的響應值之後,對兩個值進行因子爲2S的高斯加權,加權後的值分別表示在水平和垂直方向上的方向分量。

Harr特徵值反應了圖像灰度變化的情況,那麼這個主方向就是描述那些灰度變化特別劇烈的區域方向。

爲了保證特徵矢量具有旋轉不變性,與SIFT特徵一樣,需要對每個特徵點分配一個主方向。爲些,我們需要以特徵點爲中心,以6s6s(s=1.2∗L/9s=1.2∗L/9爲特徵點的尺度)爲半徑的圓形區域,對圖像進行Haar小波響應運算。這樣做實際就是對圖像進行梯度運算只不過是我們需要利用積分圖像,提高計算圖像梯度的效率。在SIFT特徵描述子中我們在求取特徵點主方向時,以是特徵點爲中心,在以4.5σσ爲半徑的鄰域內計算梯度方向直方圖。事實上,兩種方法在求取特徵點主方向時,考慮到Haar小波的模板帶寬,實際計算梯度的圖像區域是相同的。用於計算梯度的Harr小波的尺度爲4s。

與SIFT類似,使用σ=2sσ=2s的高斯加權函數對Harr小波的響應值進行高斯加權。爲了求取主方向值,需要設計一個以特徵點爲中心,張角爲π/3π/3的扇形滑動窗口。以步長爲0.2弧度左右,旋轉這個滑動窗口,並對滑動窗口內的圖像Harr小波響應值dx、dy進行累加,得到一個矢量(mw,θw)(mw,θw):

 

mw=∑wdx+∑wdymw=∑wdx+∑wdy

 

 

θw=arctan(∑wdx/∑wdy)θw=arctan(∑wdx/∑wdy)

 

主方向爲最大Harr響應累加值所對應的方向,也就是最長矢量所對應的方向,即

 

θ=θw|max{mw}θ=θw|max{mw}

 

可以依照SIFT求方方向時策略,當存在另一個相當於主峯值80%能量的峯值時,則將這個方向認爲是該特徵點的輔方向。一個特徵點可能會被指定具有多個方向(一個主方向,一個以上輔方向),這可以增強匹配的魯棒性。和SIFT的描述子類似,如果在mwmw中出現另一個大於主峯能量max{mw}80max{mw}80時的次峯,可以將該特徵點複製成兩個特徵點。一個主的方向爲最大響應能量所對應的方向,另一個主方向爲次大響應能量所對應的方向。

image

圖 1  求取主方向時扇形滑動窗口圍繞特徵點轉動,統計Haar小波響應值,並計算方向角

(8)特徵點特徵矢量生成

生成特徵點描述子與確定特徵點方向有些類似,它需要計算圖像的Haar小波響應。不過,與主方向的確定不同的是,這次我們不是使用一個圓形區域,而是在一個矩形區域來計算Haar小波響應。以特徵點爲中心,沿上一節討論得到的主方向,沿主方向將s20s×20ss20s×20s的圖像劃分爲4×44×4個子塊,每個子塊利用尺寸2s2s的Harr模板進行響應值進行響應值計算,然後對響應值進行統計∑dx∑dx、∑|dx|∑|dx|、∑dy∑dy、∑|dy|∑|dy|形成特徵矢量。如下圖2所示。圖中,以特徵點爲中心,以20s爲邊長的矩形窗口爲特徵描述子計算使用的窗口,特徵點到矩形邊框的線段表示特徵點的主方向。

image

圖2 特徵描述子表示

將20s20s的窗口劃分成4×44×4子窗口,每個子窗口有5s×5s5s×5s個像素。使用尺寸爲2s2s的Harr小波對子窗口圖像進行其響應值計算,共進行25次採樣,分別得到沿主方向的dy和垂直於主方向的dx。然後,以特徵點爲中心,對dy和dx進行高斯加權計算,高斯核的參數爲σ=3.3s(即20s/6)σ=3.3s(即20s/6)。最後,分別對每個子塊的響應值進行統計,得到每個子塊的矢量:

 

V子塊=[∑dx,∑|dx|,∑dy,∑|dy|]V子塊=[∑dx,∑|dx|,∑dy,∑|dy|]

 

由於共有4×44×4個子塊,因此,特徵描述子共由4×4×4=644×4×4=64維特徵矢量組成。SURF描述子不僅具有尺度和旋轉不變性,而且對光照的變化也具有不變性。使小波響應本身就具有亮度不變性,而對比度的不變性則是通過將特徵矢量進行歸一化來實現。圖3 給出了三種不同圖像模式的子塊得到的不同結果。對於實際圖像的描述子,我們可以認爲它們是由這三種不同模式圖像的描述子組合而成的。

image

圖3 不同的圖像密度模式得到的不同的描述子結果

爲了充分利用積分圖像進行Haar小波的響應計算,我們並不直接旋轉Haar小波模板求得其響應值,而是在積圖像上先使用水平和垂直的Haar模板求得響應值dy和dx,然後根據主方向旋轉dx和dy與主方向操持一致,如下圖4所示。爲了求得旋轉後Haar小波響應值,首先要得到旋轉前圖像的位置。旋轉前後圖偈的位置關係,可以通過點的旋轉公式得到:

 

x=x0–j×scale×sin(θ)+i×scale×cos(θ)x=x0–j×scale×sin(θ)+i×scale×cos(θ)

 

 

y=y0–j×scale×cos(θ)+i×scale×sin(θ)y=y0–j×scale×cos(θ)+i×scale×sin(θ)

 

在得到點(j,i)(j,i)在旋轉前對應積分圖像的位置(x,y)(x,y)後,利用積分圖像與水平、垂直Harr小波,求得水平與垂直兩個方向的響應值dx和dy。對dx和dy進行高斯加權處理,並根據主方向的角度,對dx和dy進行旋轉變換,從而,得到旋轉後的dx’和dy’。其計算公式如下:

 

dx′=w(−dx×sin(θ)+dy×cos(θ))dx′=w(−dx×sin(θ)+dy×cos(θ))

 

 

dy′=w(−dx×cos(θ)+dy×sin(θ))dy′=w(−dx×cos(θ)+dy×sin(θ))

 

image

圖4 利用積分圖像進行Haar小波響應計算示意圖,左邊爲旋轉後的圖像,右邊爲旋轉前的圖像

 

(9)匹配

一般而言,特徵矢量的長度越長,特徵矢量所承載的信息量就越大,特徵描述子的獨特性就越好,但匹配時所付出的時間代價就越大。對於SURF描述子,可以將它擴展到用128維矢量來表示。具體方法是在求∑dx∑dx、∑|dx|∑|dx|時區分dy<0dy<0和dy≥0dy≥0情況。同時,在求取∑dy∑dy、∑|dy|∑|dy|時區分dx<0dx<0和dx≥0dx≥0情況。這樣,每個子塊就產生了8個梯度統計值,從而使描述子特徵矢量的長度增加到8×4×4=1288×4×4=128維。

爲了實現快速匹配,SURF在特徵矢量中增加了一個新的變量,即特徵點的拉普拉斯響應正負號。在特徵點檢測時,將Hessian矩陣的跡的正負號記錄下來,作爲特徵矢量中的一個變量。這樣做並不增加運算量,因爲特徵點檢測進已經對Hessian矩陣的跡進行了計算。在特徵匹配時,這個變量可以有效地節省搜索的時間,因爲只有兩個具有相同正負號的特徵點纔有可能匹配,對於正負號不同的特徵點就不進行相似性計算。

簡單地說,我們可以根據特徵點的響應值符號,將特徵點分成兩組,一組是具有拉普拉斯正響應的特徵點,一組是具有拉普拉斯負響應的特徵點,匹配時,只有符號相同組中的特徵點才能進行相互匹配。顯然,這樣可以節省特徵點匹配的時間。如下圖5所示。

image

圖5 黑背景下的亮斑和白背景下的黑斑 因爲它們的拉普拉斯響應正負號不同,不會對它們進行匹配

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章