轉自: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算法中,也是在特徵點周圍取一個44的矩形區域塊,但是所取得矩形區域方向是沿着特徵點的主方向。每個子區域統計25個像素的水平方向和垂直方向的haar小波特徵,這裏的水平和垂直方向都是相對主方向而言的。該haar小波特徵爲水平方向值之後、垂直方向值之後、水平方向絕對值之後以及垂直方向絕對值之和4個方向。
把這4個值作爲每個子塊區域的特徵向量,所以一共有444=64維向量作爲Surf特徵的描述子,比Sift特徵的描述子減少了一半。
6. 特徵點匹配
與Sift特徵點匹配類似,Surf也是通過計算兩個特徵點間的歐式距離來確定匹配度,歐氏距離越短,代表兩個特徵點的匹配度越好。
不同的是Surf還加入了Hessian矩陣跡的判斷,如果兩個特徵點的矩陣跡正負號相同,代表這兩個特徵具有相同方向上的對比度變化,如果不同,說明這兩個特徵點的對比度變化方向是相反的,即使歐氏距離爲0,也直接予以排除。
另外,還可以加RANSAC算法做直線擬合方法對其進行錯配點剔除。
另有部分來自:https://blog.csdn.net/YJThuicheng/article/details/83472163