Speeded Up Robust Features(SURF,加速穩健特征)
一.積分圖像
- 什么是積分圖像
積分圖像是輸入的灰度圖像經過一種像素間的累加運算得到種新的圖像媒介。對於一幅灰度的圖像,積分圖像中的任意一點(x,y)的值是指從圖像的左上角到這個點的所構成的矩形區域內所有的點的灰度值之和
- 積分圖像的作用
積分圖像是SURF算法減小計算量的關鍵,從SIFT到SURF算法的性能提升很大程度歸功於積分圖像的使用
- 積分圖像與原始圖像的關系
a.相同點:
積分圖像與原始圖像的尺寸相同,積分圖像中每個位置坐標與原始灰度圖像的像素坐標相對應。
b.不同點:
不同的是,在原始圖像采用灰度圖像的情況下,灰度圖像每個像素使用8bit表示,而積分圖像由於像素的累加運算,或者由於圖像尺度的變化,積分圖像中每個像素位寬將會需要積分的像素尾款來表示
- 如何得到積分圖像
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.