圖像局部特徵點檢測算法綜述

研究圖像特徵檢測已經有一段時間了,圖像特徵檢測的方法不少,又加上各類算法的變形,因此難以在短期內全面的瞭解,只是對主流的特徵檢測算法的原理進行了學習。整體來講,圖像特徵能夠包括顏色特徵、紋理特等、形狀特徵以及局部特徵點等。其中局部特色具備很好的穩定性,不容易受外界環境的干擾,本篇文章也是對這方面知識的一個總結。html

本篇文章如今(2015/1/30)只是以初稿的形式,列出了主體的框架,後面還有許多地方須要增長與修改,例如2013年新出現的基於非線性尺度空間的KAZE特徵提取方法以及它的改進AKATE等。在應用方面,後面會增一些具備實際代碼的例子,尤爲是基於特徵點的搜索與運動目標跟蹤方面。算法

1. 局部特徵點

圖像特徵提取是圖像分析與圖像識別的前提,它是將高維的圖像數據進行簡化表達最有效的方式,從一幅圖像的$M\times N\times3$的數據矩陣中,咱們看不出任何信息,因此咱們必須根據這些數據提取出圖像中的關鍵信息,一些基本元件以及它們的關係。app

局部特徵點是圖像特徵的局部表達,它只能反正圖像上具備的局部特殊性,因此它只適合於對圖像進行匹配,檢索等應用。對於圖像理解則不太適合。然後者更關心一些全局特徵,如顏色分佈,紋理特徵,主要物體的形狀等。全局特徵容易受到環境的干擾,光照,旋轉,噪聲等不利因素都會影響全局特徵。相比而言,局部特徵點,每每對應着圖像中的一些線條交叉,明暗變化的結構中,受到的干擾也少。框架

而斑點與角點是兩類局部特徵點。斑點一般是指與周圍有着顏色和灰度差異的區域,如草原上的一棵樹或一棟房子。它是一個區域,因此它比角點的噪能力要強,穩定性要好。而角點則是圖像中一邊物體的拐角或者線條之間的交叉部分。機器學習

2. 斑點檢測原理與舉例

2.1 LoG與DoH

斑點檢測的方法主要包括利用高斯拉普拉斯算子檢測的方法(LOG),以及利用像素點Hessian矩陣(二階微分)及其行列式值的方法(DOH)。函數

LoG的方法已經在斑點檢測這入篇文章裏做了詳細的描述。由於二維高斯函數的拉普拉斯核很像一個斑點,因此能夠利用卷積來求出圖像中的斑點狀的結構。源碼分析

DoH方法就是利用圖像點二階微分Hessian矩陣:學習

$$H(L) = \begin{bmatrix}L_{xx}&L_{xy}\\L_{xy}&L_{yy}\end{bmatrix}$$測試

以及它的行列式的值DoH(Determinant of Hessian):設計

$$det = \sigma^4(L_{xx}(x,y,\sigma)L_{yy}(x,y,\sigma)-L_{xy}^2(x,y,\sigma))$$

Hessian矩陣行列式的值,一樣也反映了圖像局部的結構信息。與LoG相比,DoH對圖像中的細長結構的斑點有較好的抑制做用。

不管是LoG仍是DoH,它們對圖像中的斑點進行檢測,其步驟均可以分爲如下兩步:

1)使用不一樣的$\sigma$生成$\left(\frac{\partial^2g}{\partial x^2}+\frac{\partial^2g}{\partial y^2}\right)$或$\frac{\partial^2g}{\partial x^2},\frac{\partial^2g}{\partial y^2},\frac{\partial^2g}{\partial x\partial y}$模板,並對圖像進行卷積運算;

2)在圖像的位置空間與尺度空間中搜索LoG與DoH響應的峯值。

2.2 SIFT

詳細的算法描述參考:SIFT定位算法關鍵步驟的說明

2004年,Lowe提升了高效的尺度不變特徵變換算法(SIFT),利用原始圖像與高斯核的卷積來創建尺度空間,並在高斯差分空間金字塔上提取出尺度不變性的特徵點。該算法具備必定的仿射不變性,視角不變性,旋轉不變性和光照不變性,因此在圖像特徵提升方面獲得了最普遍的應用。

該算法大概能夠概括爲三步:1)高斯差分金字塔的構建;2)特徵點的搜索;3)特徵描述。

在第一步中,它用組與層的結構構建了一個具備線性關係的金字塔結構,讓咱們能夠在連續的高斯核尺度上查找特徵點。它比LoG高明的地方在於,它用一階高斯差分來近似高斯的拉普拉斯核,大大減小了運算量。

在第二步的特徵點搜索中,主要的關鍵步驟是極值點的插值,由於在離散的空間中,局部極值點可能並非真正意義上的極值點,真正的極植點能夠落在了離散點的縫隙中。因此要對這些縫隙位置進行插值,而後再求極值點的座標位置。

第二步中另外一關鍵環節是刪除邊緣效應的點,由於只忽略那些DoG響應不夠的點是不夠的,DoG的值會受到邊緣的影響,那些邊緣上的點,雖然不是斑點,可是它的DoG響應也很強。因此咱們要把這部分點刪除。咱們利用橫跨邊緣的地方,在沿邊緣方向與垂直邊緣方向表現出極大與極小的主曲率這一特性。因此經過計算特徵點處主曲率的比值便可以區分其是否在邊緣上。這一點在理解上能夠參見Harris角點的求法。

最後一步,即爲特徵點的特徵描述。特徵點的方向的求法是須要對特徵點鄰域內的點的梯度方向進行直方圖統計,選取直方圖中比重最大的方向爲特徵點的主方向,還能夠選擇一個輔方向。在計算特徵矢量時,須要對局部圖像進行沿主方向旋轉,而後再進鄰域內的梯度直方圖統計(4x4x8)。

2.3 SURF

詳細的算法描述參考:1. SURF算法與源碼分析、上  2. SURF算法與源碼分析、下

2006年,Bay和Ess等人基於SIFT算法的思路,提出了加速魯棒特徵(SURF),該算法主要針對於SIFT算法速度太慢,計算量大的缺點,使用了近似Harr小波方法來提取特徵點,這種方法就是基於Hessian行列式(DoH)的斑點特徵檢測方法。經過在不一樣的尺度上利用積分圖像能夠有效地計算出近似Harr小波值,簡化了二階微分模板的構建,搞高了尺度空間的特徵檢測的效率。

SURF算法在積分圖像上使用了盒子濾波器對二階微分模板進行了簡化,從而構建了Hessian矩陣元素值,進而縮短了特徵提取的時間,提升了效率。其中SURF算法在每一個尺度上對每一個像素點進行檢測,其近似構建的Hessian矩陣及其行列式的值分另爲:

$$H_{approx} =\begin{bmatrix}D_{xx}(\sigma)&D_{xy}(\sigma)\\D_{xy}(\sigma)&D_{yy}(\sigma)\end{bmatrix} $$

$$c(x,y,\sigma) = D_{xx}D_{yy}-(0.9D_{xy})^2$$

其中$D_{xx},D_{xy}$和$D_{yy}$爲利用盒子濾波器得到的近似卷積值。若是$c(x,y,\sigma)$大於設置的門限值,則斷定該像素點爲關鍵字。而後與SIFT算法近似,在以關鍵點爲中心的$3\times3\times3$像素鄰域內進行非極大值抑制,最後經過對斑點特徵進行插值運算,完成了SURF特徵點的精肯定位。

而SURF特徵點的描述,則也是充分利用了積分圖,用兩個方向上的Harr小波模板來計算梯度,而後用一個扇形對鄰域內點的梯度方向進行統計,求得特徵點的主方向。

3. 角點檢測的原理與舉例

角點檢測的方法也是極多的,其中具備表明性的算法是Harris算法與FAST算法。

這兩個算法我都有專門寫過博文來描述其算法原理。Harris角點FAST特徵點檢測

3.1 Harris角點特徵提取

Harris角點檢測是一種基於圖像灰度的一階導數矩陣檢測方法。檢測器的主要思想是局部自類似性/自相關性,即在某個局部窗口內圖像塊與在各個方向微小移動後的窗口內圖像塊的類似性。

在像素點的鄰域內,導數矩陣描述了數據信號的變化狀況。假設在像素點鄰域內任意方向上移動塊區域,若強度發生了劇烈變化,則變化處的像素點爲角點。定義$2\times2$的Harris矩陣爲:

$$A(x) = \sum_{x,y}\omega(x,y)\begin{bmatrix}C_x^2(x)&C_xC_y(x)\\C_xC_y(x)&C_y^2(x) \end{bmatrix}= \begin{bmatrix}a&b\\b&c\end{bmatrix}$$

其中,$C_x$和$C_y$分別爲點$\mathbf{x} = (x,y)$在$x$和$y$方向上的強度信息的一階導數,$\omega(x,y)$爲對應位置的權重。經過計算Harris矩陣的角點響應值D來判斷是否爲角點。其計算公式爲:

$$D=detA-m(traceA)^2= (ac-b)^2-m(a+c)^2$$

其中,det和trace爲行列式和跡的操做符,$m$是取值爲0.04~0.06的常數。當角點響應值大於設置的門限,且爲該點鄰域內的局部最大值時,則把該點看成角點。

3.2 FAST角點特徵提取

基於加速分割測試的FAST算法能夠快速地提取出角點特徵。該算法判斷一個候選點$p$是否爲角點,依據的是在一個像素點$p$爲圓心,半徑爲3個像素的離散化Bresenllam圓周上,在給定閾值$t$的條件下,若是在圓周上有$n$個連續的像素灰度值大於$I(p)+t$或小於$I(p)-t$。

針對於上面的定義,咱們能夠用快速的方法來完成檢測,而不用把圓周上的全部點都比較一遍。首先比較上下左右四個點的像素值關係,至少要有3個點的像素灰度值大於$I(p)+t$或小於$I(p)-t$,則$p$爲候選點,而後再進一步進行完整的判斷。

爲了加快算法的檢測速度,可使用機器學習ID3貪心算法來構建決策樹。這裏須要說明的是,在2010年Elmar和Gregory等人提出了自適應通用加速分割檢測(AGAST)算法,經過把FAST算法中ID3決策樹改造爲二叉樹,並可以根據當前處理的圖像信息動態且高效地分配決策樹,提升了算法的運算速度。

4. 二進制字符串特徵描述子

能夠注意到在兩種角點檢測算法裏,咱們並無像SIFT或SURF那樣提到特徵點的描述問題。事實上,特徵點一旦檢測出來,不管是斑點仍是角點描述方法都是同樣的,能夠選用你認爲最有效的特徵描述子。

特徵描述是實現圖像匹配與圖像搜索必不可少的步驟。到目前爲止,人們研究了各類各樣的特徵描述子,比較有表明性的就是浮點型特徵描述子和二進帽字符串特徵描述子。

像SIFT與SURF算法裏的,用梯度統計直方圖來描述的描述子都屬於浮點型特徵描述子。但它們計算起來,算法複雜,效率較低,因此後來就出現了許多新型的特徵描述算法,如BRIEF。後來不少二進制串描述子ORB,BRISK,FREAK等都是在它上面的基礎上的改進。

4.1 BRIEF算法

BRJEF算法的主要思想是:在特徵點周圍鄰域內選取若干個像素點對,經過對這些點對的灰度值比較,將比較的結果組合成一個二進制串字符串用來描述特徵點。最後,使用漢明距離來計算在特徵描述子是否匹配。

BRIEF算法的詳細描述能夠參考:BRIEF特徵描述子

4.2 BRISK算法

BRISK算法在特徵點檢測部分沒有選用FAST特徵點檢測,而是選用了穩定性更強的AGAST算法。在特徵描述子的構建中,BRISK算法經過利用簡單的像素灰度值比較,進而獲得一個級聯的二進制比特串來描述每一個特徵點,這一點上原理與BRIEF是一致的。BRISK算法裏採用了鄰域採樣模式,即以特徵點爲圓心,構建多個不一樣半徑的離散化Bresenham同心圓,而後再每個同心圓上得到具備相同間距的N個採樣點。

image

因爲這種鄰域採樣模式在採樣時會產生圖像灰度混疊的影響,因此BRISK算法首先對圖像進行了高斯平滑圖像。而且使用的高斯函數標準差$\sigma_i$與各自同心圓上點間距成正比。

假設在$\dbinom{N}{2}$個採樣點中任意選取一對採樣點$(p_i,p_j)$,其平滑後的灰度值分別爲$I(p_i,\sigma_i)$和$I(p_j,\sigma_j)$,則兩點間的局部梯度爲:

$$g(p_i,p_j) = (p_j-p_i)\frac{I(p_j,\sigma_j)-I(p_i,\sigma_i)}{\left\|p_j-p_i\right\|^2}$$

假設把全部採樣點對構成的集合記爲$\boldsymbol{A}$,則

$$\boldsymbol{A} = \{(p_i,p_j)\in R^2\times R^2 | i < N且j<i且i,j\in N\}$$

那麼短距離採樣點對構成的集合S以及長距離採樣點構成的集合L分別爲:

$$S=\{(p_i,p_j)\in A | \left\|p_j-p_i\right\|<\delta_{max}\} \subseteq A$$

$$L=\{(p_i,p_j)\in A | \left\|p_j-p_i\right\|>\delta_{min}\} \subseteq A$$

其中,一般設置距離閾值爲$\delta_{max} = 9.75\delta,\delta_{min} = 13.67\delta$,其中$\delta$爲特徵點的尺度。

因爲長距離採樣點對含有更多的特徵點角度信息,且局部梯度相互抵消,因此能夠在集合L中計算出特徵點的特徵模式方向爲:

$$g = \begin{pmatrix}g_x\\g_y\end{pmatrix} = \frac{1}{L}\sum_{(p_i,p_j)\in L}g(p_i,p_j)$$

而後將採樣模式圍繞特徵點旋轉角度$\alpha = arctan2(g_y,g_x)$,進而特徵描述子具備了旋轉不變性。

最後,在旋轉後的短距離採樣點集合S內,對全部的特徵點對$(P_i^{\alpha},p_j^{\alpha})$行像素灰度值比較,最終造成512比特的二進制字符串描述子。

4.3 ORB算法

ORB算法使用FAST進行特徵點檢測,而後用BREIF進行特徵點的特徵描述,可是咱們知道BRIEF並無特徵點方向的概念,因此ORB在BRIEF基礎上引入了方向的計算方法,並在點對的挑選上使用貪婪搜索算法,挑出了一些區分性強的點對用來描述二進制串。ORB算法的詳細描述能夠參考:ORB特徵點檢測

4.4 FREAK算法

Fast Retina KeyPoint,即快速視網膜關鍵點。

根據視網膜原理進行點對採樣,中間密集一些,離中心越遠越稀疏。而且由粗到精構建描述子,窮舉貪婪搜索找相關性小的。42個感覺野,一千對點的組合,找前512個便可。這512個分紅4組,前128對相關性更小,能夠表明粗的信息,後面愈來愈精。匹配的時候能夠先看前16bytes,即表明精信息的部分,若是距離小於某個閾值,再繼續,不然就不用往下看了。

5. 應用之圖像匹配

圖像匹配的研究目標是精確判斷兩幅圖像之間的類似性。圖像之間的類似性的定義又隨着不一樣的應用需求而改變。例如,在物體檢索系統中(找出含有亞伯拉罕·林肯的臉的圖像),咱們認爲同一物體的不一樣圖像是相近的。而在物體類別檢索系統中(找出含有人臉的圖像),咱們則認爲相同類的物體之間是相近的。

這裏局部特徵點的應用主要表如今第一種類似性上,也就是說咱們須要設計某種圖像匹配算法來判斷兩幅圖像是不是對同一物體或場景所成的圖像。理想的圖像匹配算法應該認爲兩幅同一物體的圖像之間類似度很高,而兩幅不一樣物體的圖像之間類似度很低,以下圖所示。

image

因爲成像時光照,環境,角度的不一致,咱們獲取的同一物體的圖像是存在差別的,如同上圖中的兩輛小車的圖像同樣,角度不一樣,成像就不一樣。咱們直接利用圖像進行比較是沒法進行判斷小車是否爲同一類的。必須進行特徵點的提取,再對特徵點進行匹配。

圖像會存在哪些變換呢?通常來講包括了光照變化與幾何變化,光照變化表現是圖像上是全局或局部顏色的變化,而幾何變化種類就比較多了,能夠是平移、旋轉、尺度、仿射、投影變換等等。因此咱們在研究局部特徵點時纔要求特徵點對這些變化具備穩定性,同時要有很強的獨特性,可讓圖像與其餘類的圖像區分性強,即類內距離小而類間距離大。

6. 參考文獻

[1] 基於角點的圖像特徵提取與匹配算法研究,薛金龍,2014.

[2] 基於局部特徵的圖像匹配與識別,宮明明,2014.

[3] 基於視覺信息的圖像特徵提取算法研究,戴金波,2014.

[4] 圖像局部不變性特徵與描述,王永明,王貴錦編著。

相關文章
相關標籤/搜索