SURF算法詳解

Speeded Up Robust Features(SURF,加速穩健特徵)

一.積分圖像

  1. 什麼是積分圖像

積分圖像是輸入的灰度圖像經過一種像素間的累加運算得到種新的圖像媒介。對於一幅灰度的圖像,積分圖像中的任意一點(x,y)的值是指從圖像的左上角到這個點的所構成的矩形區域內所有的點的灰度值之和

  1. 積分圖像的作用

積分圖像是SURF算法減小計算量的關鍵,從SIFT到SURF算法的性能提升很大程度歸功於積分圖像的使用

  1. 積分圖像與原始圖像的關係

a.相同點:

積分圖像與原始圖像的尺寸相同,積分圖像中每個位置座標與原始灰度圖像的像素座標相對應。

b.不同點:

不同的是,在原始圖像採用灰度圖像的情況下,灰度圖像每個像素使用8bit表示,而積分圖像由於像素的累加運算,或者由於圖像尺度的變化,積分圖像中每個像素位寬將會需要積分的像素尾款來表示

  1. 如何得到積分圖像

a.積分像素值

1.座標系的建立

對於一幅原始的灰度圖像,以圖像中的第一個像素位置作爲座標原點,向右爲軸正向,向下爲軸正向建立座標系。

2.積分像素值的確定

將任意像素與座標原點之間圍成的矩形區域內所有像素值相加得到一個新的值,在這裏我們把它定義爲積分像素值。

 

b.積分圖像的確定

原始圖像中每個像素經過運算都會得到新的積分像素值,最終構成一幅新的積分圖像。

 

c.積分圖像的作用

有了積分圖像的概念,在原始圖像中我們可以計算任意矩形區域內的像素之和。這種運算方式有效的減少了運算量,因爲矩形的面積大小不會影響到運算量。任意矩形內的像素累加只需要使用矩形四個頂角位置的積分像素值進行加減運算即可得到。

如果要計算矩形內的所有像素的累加值只需要再積分圖像中找到對應四個位置的積分像素的值進行加減運算:

 

二.Hessian矩陣

0.與SIFT算法對比

a. SIFT算法採用的是DoG圖像,而SURF採用的是Hessian矩陣行列式近似值圖像

b. SIFT算法中使用高斯差分對進行近似估計,使用函數代替高斯拉普拉斯函數,即

Hessian矩陣通過高斯差分後得到近似估計的Hessian矩陣

高斯函數的高階微分與離散的圖像函數做卷積運算時相當於使用高斯濾波模板對圖像做濾波處理

其行列式爲

 

1.定義

a.圖像中某個像素點Hessian矩陣

即每一個像素點都可以求出一個Hessian矩陣。

其行列式爲:

 

b.圖像的Hessian矩陣

由於我們的特徵點需要具備尺度無關性,所以在進行Hessian矩陣構造前,需要對其進行高斯濾波。這樣,經過濾波後在進行Hessian的計算

其中表示圖像函數與高斯函數二階微分()在像素點處的卷積。也類似這麼定義

 

 

c.盒子濾波器

高斯函數的高階微分與離散的圖像函數做卷積運算時相當於使用高斯濾波模板對圖像做濾波處理。在實際運用中,高斯二階微分進行離散化和裁剪處理得到盒子濾波器近似代替高斯濾波板進行卷積計算

 

網格中漸變的顏色深度代表高斯濾波模板中不同的權重係數。某一尺寸的高斯濾波模板經過離散化和裁剪生成的盒子濾波器包括三個方向。

對高斯高階微分函數進行離散化處理的同時也將濾波模板的各部分的濾波權重進行簡化,所以係數都是集合中的元素

 

三.尺度空間的構造

上述工作是通過模板卷積求二階偏導數得到H矩陣,接下來要通過H矩陣構建尺度空間。

a.SIFT尺度空間

在SIFT中,尺度空間是用金字塔模型對圖像濾波縮放得到的。SIFT算法首先對一幅圖片進行下采樣得到若干圖像,每次下采樣得到的圖片作爲每一組的原始圖像。爲了保證圖像金字塔的連續性,對每組的原始圖像以不同的進行高斯濾波,金字塔每組中又得到若干濾波後的圖像。

這樣得到的圖像金字塔分爲若干組(Octave),同時每組又有若干層(Layer)圖片組成。顯然,圖像金字塔的計算量會隨着金字塔組數和層數的增加而變大。

b.SURF尺度空間

1.相同點

SURF算法的尺度空間同樣由若干組(Octave)構成,每一組中包含若干層(Level)。

2.不同點

組:

SURF算法中不會對圖片進行下采樣。SURF算法先從尺寸的盒子濾波器開始,對盒子濾波器的尺寸進行擴展,尺寸的盒子濾波器是爲1.2時的高斯二階微分函數經過離散和減裁後的濾波模板。在SURF中,我們保持圖像不變,僅僅改變高斯濾波窗口的大小來獲得不同尺度的圖像,即構成了尺度空間。

層:

每一層對應的與濾波模板尺寸之間的關係式爲。Bay建議將尺度空間分爲四組,每組中包括四層。

爲了保持尺度空間的連續性,SURF算法尺度空間相鄰組中有部分層重疊,同時每組中的盒子濾波器的尺寸都是逐漸增大的。

c.Hessian行列式圖像的產生過程

在SURF算法的尺度空間中,每一組中任意一層包括三種盒子濾波器。對一幅輸入圖像進行濾波後通過Hessian行列式計算公式可以得到對於尺度座標下的Hessian行列式的值,所有Hessian行列式值構成一幅Hessian行列式圖像。

一幅灰度圖像經過尺度空間中不同尺寸盒子濾波器的濾波處理,可以生成多幅Hessian行列式圖像,從而構成了圖像金字塔。

 

四.特徵點精確定位

a.非極大值抑制過程

在每一組中選取相鄰的三層Hessian行列式圖像,對於中間層的每一個Hessian行列式值都可以做爲待比較的點,在空間中選取該點周圍的26個點進行比較大小,若該點大於其他26個點,則該點爲特徵點。從上訴過程可以知道,當尺度空間每組由四層構成時,非極大值抑制只會在中間兩層進行,相鄰的組之間不進行比較。

 

b.設定Hessian行列式的閥值

低於Hessian行列式閥值的點不能作爲最終的特徵點。在實際選擇閥值時,根據實際應用中對特徵點數量和精確度的要求改變閥值。閥值越大,得到的特徵點的魯棒性越好。在處理場景簡單的圖像時,其閥值可以適當的調低。在複雜的圖像中,圖像經旋轉或者模糊後特徵點變化的數量較大,測試需要適當提高閥值。

 

五.主方向計算

爲了使特徵具備較好的旋轉不變性,需分配給每個特徵點一個主方向。在SURF中,主方向是對以特徵點爲中心的6倍特徵尺度爲半徑的圓形區域內的Haar小波響應做統計運算得到的。

a.興趣點方向的確定

首先賦予每一個興趣點方向特徵。我們以某個興趣點爲圓心,以6S(S爲該興趣點對應的尺度)爲半徑的圓形領域裏,用尺寸爲4S的Haar小波模板對圖像進行處理,求x,y兩個方向的Haar小波響應。

Haar小波的模板如圖所示,

其中左側模板計算X方向的響應,右側模板計算y方向的響應,黑色表示-1,白色表示+1。用其對圓形領域進行處理後,就得到了該領域內每個點對應的x,y方向的響應,然後用以興趣點爲中心的高斯函數()對這些響應進行加權

在這個圓形領域內做一個60度的扇形區域,統計這個扇形區域內的haar小波特徵總和,然後轉動扇形區域,再統計小波特徵總和。小波特徵總和最大的方向爲主方向。

b. 構建描述子向量

1. SIFT算法

在SIFT中關鍵點描述是選取了關鍵點周圍的領域,又將其劃分爲的區域,每個區域統計8個方向梯度,最後得到維度的描述向量。

2.SURF算法

在SURF中,我們在關鍵點周圍選取一個正方形框,方向爲關鍵點的主方向,邊長爲20S。將其劃分爲16個區域(邊長爲5S),每個區域統計25個像素的水平方向和垂直方向的Haar小波特性(均相對於正方形框的主方向確定的)

 

該小波特徵包括水平方向值之和,水平方向絕對值之和,垂直方向值之和和垂直方向絕對值之和(爲了把強度變化的極性信息也包括描述符中,所以對絕對值進行累加)。這樣每個區域有4個值,則每個正方形框有維,即每個關鍵點描述是64維,比SIFT描述少了一半

 

六.SURF算法與SIFT算法總結對比

(1)在生成尺度空間方面,SIFT算法利用的是差分高斯金字塔與不同層級的空間圖像相互卷積生成。SURF算法採用的是不同尺度的box filters與原圖像卷積

(2)在特徵點檢驗時,SIFT算子是先對圖像進行非極大值抑制,再去除對比度較低的點。然後通過Hessian矩陣去除邊緣的點。

而SURF算法是先通過Hessian矩陣來檢測候選特徵點,然後再對非極大值的點進行抑制

(3)在特徵向量的方向確定上,SIFT算法是在正方形區域內統計梯度的幅值的直方圖,找到最大梯度幅值所對應的方向。SIFT算子確定的特徵點可以有一個或一個以上方向,其中包括一個主方向與多個輔方向。

SURF算法則是在圓形鄰域內,檢測各個扇形範圍內水平、垂直方向上的Haar小波響應,找到模值最大的扇形指向,且該算法的方向只有一個。

(4)SIFT算法生成描述子時,是將的採樣點劃分爲的區域,從而計算每個分區種子點的幅值並確定其方向,共計維。

SURF算法在生成特徵描述子時將的正方形分割成的小方格,每個子區域25個採樣點,計算小波haar響應,一共維。

綜上,SURF算法在各個步驟上都簡化了一些繁瑣的工作,僅僅計算了特徵點的一個主方向,生成的特徵描述子也與前者相比降低了維數。

 

七.參考與致謝

1.小林的CV視覺工坊

2.多篇哈工大碩士論文

3. Bay H, Ess A, Tuytelaars T, et al. Speeded-up robust features (SURF)[J]. Computer vision and image understanding, 2008, 110(3): 346-359.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章