surf特征點檢測


不重復造輪子,但首先你得會造輪子。

一個笑話:

Theory is when you know everything but nothing works.
Practice is when everything works but no one knows why.
In our lab,theory and practice are combined:nothing works and no one knows why.


言歸正傳,還是先列出參考文獻,第一手資料還是看原論文的好。

參考文獻:Speeded-Up Robust Features.——Herbert Bay


簡單來說SURF是SIFT算法的加速版。



Hassian矩陣

SURF的興趣點檢測是基於Hessian矩陣的,它依靠Hessian矩陣行列式的局部最大值定位興趣點位置。當Hessian矩陣行列式局部最大時,所檢測出的實際上是斑狀結構(blob-like structures)。所謂斑狀結構是指:比周圍區域更亮或更暗的一個小區域。首先用Hassian矩陣提取關鍵點。

Hessian matrix主要運用於判斷一個雙變量函數在一點處的性質(極大值/極小值/駐點)。對於圖像I中某點X=(x,y),在x點的σ尺度上的Hessian矩陣定義為


其中,Lxx(X,σ)表示高斯二階偏導在X處與圖像I的卷積。Lxy(X,σ)、Lyy(X,σ)具有相似的含義。

當這個行列式在圖像鄰域內取得極值時,在圖像上檢測到的就是blob-like特征。這是后面的基礎。



box filter

在構建多尺度空間時,SURF算法使用盒子濾波(box filter)近似代替SIFT算法中的二階高斯函數,然后與原始圖像做卷積,並在這一過程中應用了積分圖像(這個積分圖就是計算Haar-Like特征時用到的積分圖)技巧,這是兩者最根本的區別。下圖給出了二階高斯濾波同盒子濾波的對比。


盒子濾波是經過加權重的。對於x、y方向上的濾波,黑色區域賦權重為-2,白色區域賦權重為l,其余區域不賦權重;對於xy方向的濾波,黑色區域賦權重為-1,白色區域賦權重為1。

這樣一來,Hessian矩陣的二階導數行列式就可以近似為


Dxx就是Lxx的近似,Dyy、Dxy類似。

論文里面計算得到w取0.9比較合理。


SURF特征檢測算法中,利用盒子濾波結合積分圖像求取尺度空間函數的方法非常巧妙,這也正是該算法比SIFT檢測算法更快速的主要原因。


尺度空間構建

SIFT特征檢測算法在構建多尺度空間時,后層圖像需要依賴前層圖像不斷降采樣調整大小,然后用相同尺寸不同σ的高斯內核在不同方向上迭代卷積,分別形成尺度空間函數。而在SURF特征檢測算法中,並不需要對圖像迭代下采樣。僅僅通過改變盒子濾波的大小,然后用不同大小的濾波同原始圖像在不同方向上做卷積,即可形成多尺度的空間函數。下面是在不同尺度上用到的box的示意圖。



金字塔圖像中分為很多層,每一層叫做一個octave,每一個octave中又有幾張尺度不同的圖片。在sift算法中,同一個octave層中的圖片尺寸(即大小)相同,但是尺度(即模糊程度)不同,而不同的octave層中的圖片尺寸大小也不相同,因為它是由上一層圖片降采樣得到的。在進行高斯模糊時,sift的高斯模板大小是始終不變的,只是在不同的octave之間改變圖片的大小。而在surf中,圖片的大小是一直不變的,不同的octave層得到的待檢測圖片是改變高斯模糊尺寸大小得到的,當然了,同一個octave中個的圖片用到的高斯模板尺度也不同。

在SURF特征檢測算法中,尺度空間金字塔的最底層由9x9的盒子濾波輸出得到,對應二階高斯濾波σ=1.2。為保證盒子濾波的結構不變,后續濾波器的大小最少要有6個像素值步長的變化.

每4個模板為一階(Octave)。第1階中,相鄰的模板尺寸相差6個像素,第2階中相差12個像素,第3階中相差24個像素,以此類推。每一階的第一個模板尺寸是上一階的第二個模板的尺寸。因為興趣點的數量在尺度的方向上退化很快,所以
一般情況下取4個Octave就足夠了




為了保證在高斯差分圖像中檢測到的局部極值更加穩定,樣本像素點需要在3x3x3的立體鄰域內進行非最大值抑制。其中,參與比較的像素包括同層相鄰的8個像素以及相鄰上下兩層圖像中對應的9x2個像素。如果樣本點為極大值或者極小值,則判定為候選極值點,同時記下該點的位置和對應尺度。



特征點描述

與SIFT等算法類似,SURF的興趣點描述算子所掐述依然是興趣點某個小鄰域內的灰度分布信息。SURF使用一階Haar小波在x、y兩個方向的響應作為構建特征向量的分布信息。


確定興趣點的方向特征

為使興趣點描述算子具有旋轉不變的性能,首先要賦予每一個興趣點方向特征。我們在以某個興趣點為圓心,以6S(S為該興趣點對應的尺度)為半徑的圓形鄰域里,用尺寸為4S的Haar小波模板對圖像進行處理,求x、y兩個方向的Haar小波響應。Haar小波的模板如下圖所示,其中左側模板計算x方向的響應,右側模板計算y方向的響應,黑色表示一1,白色表示+1。


用Haar小波濾波器對圓形鄰域進行處理后,就得到了該鄰域內每個點所對應的x、y方向的響應,然后用以興趣點為中心的高斯函數(σ=2s)對這些響應進行加權。用一個圓心角為PI/3扇形以興趣點為中心環繞一周,計算該扇形處於每個角度時,
它所包括的圖像點的Haar小波響應之和。由於每一點都有x、y兩個方向的響應,因此扇形區域中所有點的響應之和構成一個矢量。把扇形區域環繞一周所形成的矢量都記錄下來,取長度最大的矢量,其方向即為該興趣點所對應的方向。



構建描述子向量

為了構建描述子向量,首先要確定一個以興趣點為中心的正方形鄰域。該鄰域的邊長為20s(s為該興趣點對應的尺度),把上面所確定的興趣點方向作為該鄰域的y軸方向。在程序實現的過程中並不是通過旋轉圖像來實現下圖所展示的計算過程,因為旋轉圖像會降低計算效率。我們直接使用Haar小波濾波器直接對原始圖像進行處理,然后對所得響應進行插值處理,從而得到相對於興趣點方向的dx、dy。把該正方形區域分成4x4個子塊區域,在每一個子塊區域中用Haar小波濾波器進行處理(該處的Haar小波模板尺寸為2sx2s)。我們用dx表示水平方向的Haar小波響應,用dy表示豎直方向的Haar小波響應。這里的水平和豎直是相對於興趣點方向來說的。在構建描述子向量之前,對於所有的dx、dy都要用一個以興趣點為中心的高斯函數加權,該高斯函數的σ=3.3S。


在每個子塊區域中對dx、dy、|dx|、|dy|求和,從而得到一個4維向量。把4*4個子塊區域的向量連接起來就得到了一個64維的向量,此向量就是描述該興趣點的描述子(deseripror)特征向量。如果我們對dx、Idxl求和時分成dy<0,dy>=0兩種情況,相應的在對dy、|dy|求和時分成dx<0,dx>=兩種情況,我們就會得到128維的描述子向量。


至此,我們得到了SURF描述子。







版權聲明:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM