特徵提取(三)SURF算法詳解

轉自:https://www.cnblogs.com/jinjidexuetu/p/90ace4e8de574e3d5f4e6ac16a0dc157.html 

另外加了些自己的理解


一、原理:

Sift算法的優點是特徵穩定,對旋轉、尺度變換、亮度保持不變性,對視角變換、噪聲也有一定程度的穩定性;缺點是實時性不高,並且對於邊緣光滑目標的特徵點提取能力較弱。 
Surf(Speeded Up Robust Features)改進了特徵的提取和描述方式,用一種更爲高效的方式完成特徵的提取和描述。

二、Surf實現流程如下:

1. 構建Hessian(黑塞矩陣),生成所有的興趣點,用於特徵的提取

黑塞矩陣(Hessian Matrix)是一個多元函數的二階偏導數構成的方陣,描述了函數的局部曲率。由德國數學家Ludwin Otto Hessian於19世紀提出。 
surf構造的金字塔圖像與sift有很大不同,SIFT對原圖像不斷地進行Gauss平滑+降採樣,採用的是DOG圖像,而surf採用的是Hessian矩陣行列式近似值圖像。 
Hessian矩陣是Surf算法的核心,構建Hessian矩陣的目的是爲了獲取圖像穩定的邊緣點(突變點),爲下文的特徵提取做好基礎。 SIFT算法使用DOG圖像可以較好的獲得圖像特徵點,但是對邊緣點反應遲緩。
每一個像素點都可以求出一個Hessian矩陣。

SURF使用了斑點偵測的海森矩陣來偵測特徵點,其行列式值代表相素點周圍的變化量,因此特徵點需取行列式值爲極大、極小值。除此之外,爲了達到尺度上的不變,SURF還使用了尺度σ的行列式值作特徵點的偵測,給定圖形中的一點x=(x, y),在尺度σ的海森矩陣爲H(x, σ): 

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

在SURF算法中,圖像像素l(x,y)即爲函數值f(x,y)。但是由於我們的特徵點需要具備尺度無關性,所以在進行Hessian矩陣構造前,需要對其進行高斯濾波,選用二階標準高斯函數作爲濾波器。 
L(x,t)=G(t)⋅I(x,t) 
通過特定核間的卷積計算二階偏導數。通過特定核間的卷積計算二階偏導數,這樣便能計算出H矩陣的三個矩陣元素L_xx, L_xy, L_yy從而計算出H矩陣: 
H(x,σ)=[Lxx(x,σ)Lxy(x,σ)Lxy(x,σ)Lyy(x,σ)] 
由於高斯核是服從正態分佈的,從中心點往外,係數越來越低,爲了提高運算速度,Surf使用了盒式濾波器來近似替代高斯濾波器,提高運算速度。 盒式濾波器(Boxfilter)對圖像的濾波轉化成計算圖像上不同區域間像素和的加減運算問題,只需要簡單幾次查找積分圖就可以完成。 
每個像素的Hessian矩陣行列式的近似值: 
det(H)=Dxx∗Dyy−(0.9∗Dxy)2 
在Dxy上乘了一個加權係數0.9,目的是爲了平衡因使用盒式濾波器近似所帶來的誤差:

2. 構建尺度空間

同Sift一樣,Surf的尺度空間也是由O組L層組成,不同的是,Sift中下一組圖像的尺寸是上一組的一半,同一組間圖像尺寸一樣,但是所使用的高斯模糊係數逐漸增大;而在Surf中,不同組間圖像的尺寸都是一致的,但不同組間使用的盒式濾波器的模板尺寸逐漸增大, 在通常尺度分析情況下,隨着尺度的增大,被檢測到的斑點數量迅速衰減。所以一般進行3-4組就可以了。同一組間不同層間使用相同尺寸的濾波器,但是濾波器的模糊係數逐漸增大。

3. 特徵點定位

特徵點的定位過程Surf和Sift保持一致,將經過Hessian矩陣處理的每個像素點與二維圖像空間和尺度空間鄰域內的26個點進行比較,初步定位出關鍵點,再經過濾除能量比較弱的關鍵點以及錯誤定位的關鍵點,篩選出最終的穩定的特徵點。 

4. 特徵點主方向分配

Sift特徵點方向分配是採用在特徵點鄰域內統計其梯度直方圖,而在Surf中,採用的是統計特徵點圓形鄰域內的harr小波特徵。
以特徵點爲中心,計算半徑爲6s(S爲特徵點所在的尺度值)的圓形鄰域內的點在x、y方向的Haar小波(Haar小波邊長取4s)響應,Harr小波模板如圖所示:

 
分別爲X,Y方向響應 
計算出圖像在哈爾小波的x和y方向上的響應值之後,對兩個值進行因子爲2S的高斯加權,加權後的值分別表示在水平和垂直方向上的方向分量。Harr特徵值反應了圖像灰度變化的情況,那麼這個主方向就是描述那些灰度變化特別劇烈的區域方向。接着,以特徵點爲中心,張角爲60°的扇形滑動,計算窗口內的Harr小波響應值dx、dy的累加: 
 


 
在所有的向量當中最長的(即x、y分量最大的)即爲此特徵點的方向。

 

5. 生成特徵點描述子

在Sift中,是取特徵點周圍44個區域塊,統計每小塊內8個梯度方向,用着448=128維向量作爲Sift特徵的描述子。 
Surf算法中,也是在特徵點周圍取一個4
4的矩形區域塊,但是所取得矩形區域方向是沿着特徵點的主方向。每個子區域統計25個像素的水平方向和垂直方向的haar小波特徵,這裏的水平和垂直方向都是相對主方向而言的。該haar小波特徵爲水平方向值之後、垂直方向值之後、水平方向絕對值之後以及垂直方向絕對值之和4個方向。 

把這4個值作爲每個子塊區域的特徵向量,所以一共有444=64維向量作爲Surf特徵的描述子,比Sift特徵的描述子減少了一半。

6. 特徵點匹配

與Sift特徵點匹配類似,Surf也是通過計算兩個特徵點間的歐式距離來確定匹配度,歐氏距離越短,代表兩個特徵點的匹配度越好。 
不同的是Surf還加入了Hessian矩陣跡的判斷,如果兩個特徵點的矩陣跡正負號相同,代表這兩個特徵具有相同方向上的對比度變化,如果不同,說明這兩個特徵點的對比度變化方向是相反的,即使歐氏距離爲0,也直接予以排除。

另外,還可以加RANSAC算法做直線擬合方法對其進行錯配點剔除。


另有部分來自:https://blog.csdn.net/YJThuicheng/article/details/83472163

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