一、原理:
Sift算法的優點是特征穩定,對旋轉、尺度變換、亮度保持不變性,對視角變換、噪聲也有一定程度的穩定性;缺點是實時性不高,並且對於邊緣光滑目標的特征點提取能力較弱。
Surf(Speeded Up Robust Features)改進了特征的提取和描述方式,用一種更為高效的方式完成特征的提取和描述。
二、Surf實現流程如下:
1. 構建Hessian(黑塞矩陣),生成所有的興趣點,用於特征的提取
黑塞矩陣(Hessian Matrix)是一個多元函數的二階偏導數構成的方陣,描述了函數的局部曲率。由德國數學家Ludwin Otto Hessian於19世紀提出。
surf構造的金字塔圖像與sift有很大不同,Sift采用的是DOG圖像,而surf采用的是Hessian矩陣行列式近似值圖像。
Hessian矩陣是Surf算法的核心,構建Hessian矩陣的目的是為了生成圖像穩定的邊緣點(突變點),為下文的特征提取做好基礎。
每一個像素點都可以求出一個Hessian矩陣。
Hessian矩陣的判別式為:
當Hessian矩陣的判別式取得局部極大值時,判定當前點是比周圍鄰域內其他點更亮或更暗的點,由此來定位關鍵點的位置。
在SURF算法中,圖像像素l(x,y)即為函數值f(x,y)。但是由於我們的特征點需要具備尺度無關性,所以在進行Hessian矩陣構造前,需要對其進行高斯濾波,選用二階標准高斯函數作為濾波器。
通過特定核間的卷積計算二階偏導數。通過特定核間的卷積計算二階偏導數,這樣便能計算出H矩陣的三個矩陣元素L_xx, L_xy, L_yy從而計算出H矩陣:
由於高斯核是服從正態分布的,從中心點往外,系數越來越低,為了提高運算速度,Surf使用了盒式濾波器來近似替代高斯濾波器,提高運算速度。
盒式濾波器(Boxfilter)對圖像的濾波轉化成計算圖像上不同區域間像素和的加減運算問題,只需要簡單幾次查找積分圖就可以完成。
每個像素的Hessian矩陣行列式的近似值:
在Dxy上乘了一個加權系數0.9,目的是為了平衡因使用盒式濾波器近似所帶來的誤差:
2. 構建尺度空間
同Sift一樣,Surf的尺度空間也是由O組L層組成,不同的是,Sift中下一組圖像的尺寸是上一組的一半,同一組間圖像尺寸一樣,但是所使用的高斯模糊系數逐漸增大;而在Surf中,不同組間圖像的尺寸都是一致的,但不同組間使用的盒式濾波器的模板尺寸逐漸增大,同一組間不同層間使用相同尺寸的濾波器,但是濾波器的模糊系數逐漸增大。
3. 特征點定位
特征點的定位過程Surf和Sift保持一致,將經過Hessian矩陣處理的每個像素點與二維圖像空間和尺度空間鄰域內的26個點進行比較,初步定位出關鍵點,再經過濾除能量比較弱的關鍵點以及錯誤定位的關鍵點,篩選出最終的穩定的特征點。
4. 特征點主方向分配
Sift特征點方向分配是采用在特征點鄰域內統計其梯度直方圖,而在Surf中,采用的是統計特征點圓形鄰域內的harr小波特征。
在特征點的圓形鄰域內,統計60度扇形內所有點的水平、垂直harr小波特征總和,然后扇形以一定間隔進行旋轉並再次統計該區域內harr小波特征值之后,最后將值最大的那個扇形的方向作為該特征點的主方向。
5. 生成特征點描述子
在Sift中,是取特征點周圍44個區域塊,統計每小塊內8個梯度方向,用着448=128維向量作為Sift特征的描述子。
Surf算法中,也是在特征點周圍取一個44的矩形區域塊,但是所取得矩形區域方向是沿着特征點的主方向。每個子區域統計25個像素的水平方向和垂直方向的haar小波特征,這里的水平和垂直方向都是相對主方向而言的。該haar小波特征為水平方向值之后、垂直方向值之后、水平方向絕對值之后以及垂直方向絕對值之和4個方向。
把這4個值作為每個子塊區域的特征向量,所以一共有444=64維向量作為Surf特征的描述子,比Sift特征的描述子減少了一半。
6. 特征點匹配
與Sift特征點匹配類似,Surf也是通過計算兩個特征點間的歐式距離來確定匹配度,歐氏距離越短,代表兩個特征點的匹配度越好。
不同的是Surf還加入了Hessian矩陣跡的判斷,如果兩個特征點的矩陣跡正負號相同,代表這兩個特征具有相同方向上的對比度變化,如果不同,說明這兩個特征點的對比度變化方向是相反的,即使歐氏距離為0,也直接予以排除。