1. 程式人生 > >影象匹配演算法研究之surf演算法

影象匹配演算法研究之surf演算法

今天碰巧和朋友討論這個,才想起來好久沒碰,都生疏了,趁著暑假還有點閒時,先寫寫再說。有錯誤的地方希望大家指正。

?
SURF (Speeded Up Robust Feature) is a robust local feature detector, first presented by Herbert Bay et al. in 2006, that can be used in computer vision tasks like object recognition or 3D reconstruction. It is partly inspired by the SIFT descriptor. The standard version of SURF is several times faster than SIFT and claimed by its authors to be more robust against different image transformations than SIFT. SURF is based on sums of 2D Haar wavelet responses and makes an efficient use of integral images.

上面這段文字的大體意思就是說:

SURF意指 加速的具有魯棒性的特徵,由Bay在2006年首次提出,這項技術可以應用於計算機視覺的物體識別以及3D重構中。SURF運算元由SIFT運算元改進而來,一般來說,標準的SURF運算元比SIFT運算元快好幾倍,並且在多幅圖片下具有更好的魯棒性。SURF最大的特徵在於採用了harr特徵以及積分影象integral image的概念,這大大加快了程式的執行時間。

1、提取特徵點

2、提取特徵描述符

  • 1.  特徵點的提取

   1)利用Hessian矩陣,計算特徵值α

        Hessian矩陣

其中Lxx(x, σ)是高斯濾波後圖像g(σ)的在x方向的二階導數,其他的Lyy(x, σ)、Lxy(x, σ)都是g(σ)的二階導數。

為了減小計算量,原文使用了一個簡單的方法,並利用了積分影象的優勢(大大的減少計算量),方法其實很簡單就是在模糊的基礎上將原本的模組近似下。

總所周知,一般計算影象的二階導時,利用下面的公式d2f(x)/dx2=(f(x+1)-f(x))-(f(x)-f(x-1))=-2*f(x)+f(x+1)+f(x-1)。但是f(x)=g(h(x))【h(x)為影象的灰度值,f(x)

是將h(x)高斯濾波處理的灰度函式 】

         

                                                                              圖一  模板近似

以9X9濾波器為例,如上圖所示,左邊兩幅圖分別為灰度影象在中心點(黑色點)處的二階導數d2f(x)/dx2和d2f(x)/dxdy的模板對應的值, 近似後變成右邊的兩幅圖,圖中灰色部分畫素值為0。可是這樣計算特徵值不是也很複雜麼?當然,所以作者提供了一種新思路--使用積分影象。

積分影象,顧名思義,即指當前畫素點所在位置距原點(0,0)所包圍面的所有灰度之和。

綠色的部分為當前畫素點,紅色為積分割槽域。

這樣計算影象中任意一塊矩形區域的灰度之和Sx只需要利用矩形4個頂點(Xi,Yi)(i=1,2,3,4  順序為從上之下,先左後右)的積分值S(x,y)即可。

Sx=S(X1,Y1)+S(X4,Y4)-S(X2,Y2)-S(X3,Y3)

至此,大家應該知道近似二階導數的高斯模板並引入積分影象的好處了吧,只需要在函式定義之前計算各個座標點的積分影象,然後就能方便的求出hessian的特徵值。

不過由於函式模板的近似,這裡需要修正下特徵值α的求解公式:

這裡Dxx和Dxy就是根據圖一得到的,而Dyy和Dxx類似,只需要導致一下模板即可。

   2)根據是否為領域極大值判斷特徵點

       這裡要引入影象堆的概念,說簡單點,就是一組大小相同的影象,這些影象都是根據不同大小高斯濾波二階導模板,如圖一所示 得到的平滑後圖像Pi 。

       按照模板大小從小到大將Pi沿z軸方向排布,這樣中間層的每個畫素點的領域就為3X3X3(包括上下兩層)。若該點的特徵值α為這27個點中的最大值,那麼可以認為該點為Feature points--特徵點(影象依據這些特徵點的匹配進行更多的操作,比如拼接,比較相似性等等)。

  • 2.特徵點的匹配


     1)尋找特徵向量

        欲進行特徵點的匹配,必須提取出特徵點的特徵向量再利用兩個向量的相似程度認為兩個點是否為兩幅影象相互對應的點。

        第一步.計算特徵點的主方向

             以特徵點為圓心半徑為6畫素建立圓領域,計算得出裡面有109個畫素點。計算這些點的harr特徵harrx和harry.

             那麼該怎樣計算任意一點的harr特徵值?

 
                         

                  

                       圖二  harr-like特徵

             選取edge features前兩個作為harrx和harry值,這個方向有些類似與梯度方向,不過這裡的領域顯然更廣。至於計算麼,依舊是利用積分影象。

             對這109個畫素點分別求出各自的向量的方向angle=acrtan(harry/harrx) ,根據最近鄰原則將這些 angle劃分到60,120,...,300,360等6個值上。劃分在同一範圍上的畫素點分別將他們的harrx和harry相加即可。不過為了體現相鄰畫素點的更大影響,還需要考慮高斯權重係數。這樣得到最大的harrx和最大的harry,組成了主方向向量。

            第二步.提取特徵描述符

                         圖3.選取特徵區域

            圖中紅色箭頭為上面計算出來的主方向,按上圖所示選取該紅色特徵點的8X8鄰域(紫色邊框內部)

            計算得到4X4個畫素塊的梯度大小和方向(可以利用上面已經計算的harrx和harry),將8X8區域分割為2X2個區域T1,2,3,4,這樣每個區域就包括了4個更小的由4個畫素點組成的區域,

x1 x2
x3 x4

harrx和harry就是利用白色部分畫素灰度值減去黑色部分畫素灰度值即可得到(harrx,harry)方向向量。這樣的向量一共有16個,將這些方向向量的方向角歸併到上下左右斜上下8個方向上,並在T1,2,3,4中計算這8個方向的值。

那麼這個4X8=32維向量即為所求的特徵描述符。

     3)特徵點的匹配

       採用最簡單的兩向量內積最大值為最匹配的點,設定一閾值,只有當這個最大值大於該閾值方可認為兩特徵點匹配。


至此,surf演算法結束。