您的位置:首页 > 移动开发 > Objective-C

圖像匹配算法研究之surf算法

2012-09-29 17:48 239 查看
http://www.cnblogs.com/blue-lg/archive/2012/07/17/2385755.html

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

 

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

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

 

surf提出算法參見http://www.vision.ee.ethz.ch/~surf/papers.html  有paper下載地址。

 

1、提取特征點

2、提取特征描述符

 

 

1.  特征點的提取

   1)利用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個像素點組成的區域,
x1x2
x3x4


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



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

 

     3)特征點的匹配

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

至此,surf算法結束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息