SURF:Speed Up Robust Features是繼SIFT算法後有H Bay提出的一特徵點提取算法,其靈感來自於SIFT,因此該算法的幾個步驟和SIFT算法類似,但其速度是SIFT算法的多倍之多(基於hessian的快速計算方法),下面咱們就來看看該算法實現的過程:(ps:本文純屬我的理解,若有錯誤望指正)算法
一、初始化圖像:將圖像轉變成32位單精度單通道圖像spa
二、獲得圖像積分圖:積分圖是爲下面計算fast-hessian作準備設計
三、hessian矩陣計算:採用近似計算,加快計算速度code
四、構建尺度空間:保持圖片不變,增大高斯核的尺度圖片
五、找出關鍵點:利用hessian矩陣發現關鍵點,同時關鍵點還需是臨近26個像素中最大或最小值unicode
六、肯定描述因子方向:爲了保持特徵點的旋轉不變性,肯定描述因子主方向io
七、計算描述因子:利用harr小波變換計算描述因子ast
接下來介紹幾個主要知識點:模板
一、積分圖像:效率
X表明點(x,y),即輸入圖像的原點和點X所組成的矩陣內全部像素的和。將圖像全部像素點計算便可
二、hessian matrix
點X的hessian matrix 可由下式定義:
其中Lxx爲高斯二階導數和圖像在X點的卷積,Lxy、Lyy 相似
算法提出一種hessian matrix 的近似求解方法:即box filters
下圖爲二階高斯導數的近似圖像:
左邊爲二階高斯導數圖像,右邊爲二階高斯近似圖像
採用近似方法的好處是,hessian matrix的求解速度能夠獲得很大的提升,而後採用此方法也會形成結果出現必定的偏差,所以咱們在計算det(H)時加上一個係數w
w取0.9,具體是由下面式子計算而來:
三、構建尺度空間
爲了知足尺度不變性,特徵點必須在不一樣的尺度空間下提取。SIFT採用的是高斯圖像金字塔。因爲使用了box filters 和積分圖像,因此沒有必要重複的計算採樣層,不須要像SIFT算法那樣去直接創建金字塔圖像,不一樣尺度的採樣層只需計算一次便可,採用不斷增大的盒子濾波模板的尺寸的間接方法。經過不一樣尺寸盒子濾波模板和積分圖像求取Hessian矩陣行列式的響應圖像,而後,在響應圖像上採用3D非最大值抑制,求取各類不一樣尺度的斑點。
與SIFT相相似,SURF也將尺度空間劃分紅若干組(Octaves)。一個組表明了逐步放大的濾波模板對同一個輸入圖像進行濾波的一系列響應圖像。每一組又有若干固定的層組成
尺度空間被分紅5組(five ostavls),每組4層(four intervals),高斯核的尺度空間以下:
// Oct1: 9, 15, 21, 27
// Oct2: 15, 27, 39, 51
// Oct3: 27, 51, 75, 99
// Oct4: 51, 99, 147,195
// Oct5: 99, 195,291,387
四、找出關鍵點
爲了在目標影像上肯定SURF特徵點,咱們使用了3*3*3的模板在3維尺度空間進行非最大化抑制,根據預設的Hessian閾值H,當h大於H,並且比臨近的26個點的響應值都大的點才被選爲興趣點。最後進行插值精確。
五、特徵點主方向肯定
爲了保證特徵矢量具備旋轉不變形,須要對每個特徵點分配一個主要方向。須要以特徵點爲中心,以6s(s爲特正點的尺度)爲半徑的圓形區域內,對圖像進行Haar小波響應運算。這樣作實際就是對圖像進行了梯度運算,可是利用積分圖像,能夠提升計算圖像梯度的效率。爲了求取主方向值,須要設計一個以方向爲中心,張角爲PI/3的扇形滑動窗口,以步長爲0.2弧度左右,旋轉這個滑動窗口,並對窗口內的圖像Haar小波的響應值進行累加。 主方向爲最大的Haar響應累加值對應的方向 。
六、描述因子造成
生成特徵點的特徵矢量須要計算圖像的Haar小波響應。在一個矩形的區域內,以特徵點爲中心,沿主方向將20s*20s的圖像劃分紅4*4個子塊,每一個子塊利用尺寸2s的Haar小波模板進行響應計算,而後對響應值進行統計造成的特徵矢量
到此,SURF的描述因子就已經造成,咱們就能夠利用該描述因子去作咱們想作的事情了!