影像區域性特徵點檢測演算法綜述
研究影像特徵檢測已經有一段時間了,影像特徵檢測的方法很多,又加上各種演算法的變形,所以難以在短時間內全面的瞭解,只是對主流的特徵檢測演算法的原理進行了學習。總體來說,影像特徵可以包括顏色特徵、紋理特等、形狀特徵以及區域性特徵點等。其中區域性特點具有很好的穩定性,不容易受外界環境的干擾,本篇文章也是對這方面知識的一個總結。
本篇文章現在(2015/1/30)只是以初稿的形式,列出了主體的框架,後面還有許多地方需要增加與修改,例如2013年新出現的基於非線性尺度空間的KAZE特徵提取方法以及它的改進AKATE等。在應用方面,後面會增一些具有實際程式碼的例子,尤其是基於特徵點的搜尋與運動目標跟蹤方面。
1. 區域性特徵點
影像特徵提取是影像分析與影像識別的前提,它是將高維的影像資料進行簡化表達最有效的方式,從一幅影像的\(M\times N\times3\)的資料矩陣中,我們看不出任何資訊,所以我們必須根據這些資料提取出影像中的關鍵資訊,一些基本元件以及它們的關係。
區域性特徵點是影像特徵的區域性表達,它只能反正影像上具有的區域性特殊性,所以它只適合於對影像進行匹配,檢索等應用。對於影像理解則不太適合。而後者更關心一些全域性特徵,如顏色分佈,紋理特徵,主要物體的形狀等。全域性特徵容易受到環境的干擾,光照,旋轉,噪聲等不利因素都會影響全域性特徵。相比而言,區域性特徵點,往往對應著影像中的一些線條交叉,明暗變化的結構中,受到的干擾也少。
而斑點與角點是兩類區域性特徵點。斑點通常是指與周圍有著顏色和灰度差別的區域,如草原上的一棵樹或一棟房子。它是一個區域,所以它比角點的噪能力要強,穩定性要好。而角點則是影像中一邊物體的拐角或者線條之間的交叉部分。
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個取樣點。
由於這種鄰域取樣模式在取樣時會產生影像灰度混疊的影響,所以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}$,則
那麼短距離取樣點對構成的集合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. 應用之影像匹配
影像匹配的研究目標是精確判斷兩幅影像之間的相似性。影像之間的相似性的定義又隨著不同的應用需求而改變。例如,在物體檢索系統中(找出含有亞伯拉罕·林肯的臉的影像),我們認為同一物體的不同影像是相近的。而在物體類別檢索系統中(找出含有人臉的影像),我們則認為相同類的物體之間是相近的。
這裡區域性特徵點的應用主要表現在第一種相似性上,也就是說我們需要設計某種影像匹配演算法來判斷兩幅影像是否是對同一物體或場景所成的影像。理想的影像匹配演算法應該認為兩幅同一物體的影像之間相似度很高,而兩幅不同物體的影像之間相似度很低,如下圖所示。
由於成像時光照,環境,角度的不一致,我們獲取的同一物體的影像是存在差異的,如同上圖中的兩輛小車的影像一樣,角度不同,成像就不同。我們直接利用影像進行比較是無法進行判斷小車是否為同一類的。必須進行特徵點的提取,再對特徵點進行匹配。
影像會存在哪些變換呢?一般來說包括了光照變化與幾何變化,光照變化表現是影像上是全域性或區域性顏色的變化,而幾何變化種類就比較多了,可以是平移、旋轉、尺度、仿射、投影變換等等。所以我們在研究區域性特徵點時才要求特徵點對這些變化具有穩定性,同時要有很強的獨特性,可以讓影像與其他類的影像區分性強,即類內距離小而類間距離大。
6. 參考文獻
[1] 基於角點的影像特徵提取與匹配演算法研究,薛金龍,2014.
[2] 基於區域性特徵的影像匹配與識別,宮明明,2014.
[3] 基於視覺資訊的影像特徵提取演算法研究,戴金波,2014.
[4] 影像區域性不變性特徵與描述,王永明,王貴錦編著。
相關文章
- 目標檢測綜述
- OpenCV計算機視覺學習(13)——影像特徵點檢測(Harris角點檢測,sift演算法)OpenCV計算機視覺特徵演算法
- 大盤點 | 2019年5篇影像分割演算法最佳綜述演算法
- 大盤點 | 2019年4篇目標檢測演算法最佳綜述演算法
- GAN生成影像綜述
- 入侵檢測系統綜述文獻研讀
- 影象檢索(一)--綜述
- 綜述:影像風格化演算法最全盤點 | 內附大量擴充套件應用演算法套件
- 影象處理入門:目標檢測和影象檢索綜述
- 2D目標檢測綜述 2020 CVPR ECCV
- Anchor-free目標檢測綜述 -- Dense Prediction篇
- 特徵檢測特徵
- 聚類演算法綜述聚類演算法
- PFLD:簡單、快速、超高精度人臉特徵點檢測演算法特徵演算法
- 收藏!機器學習演算法優缺點綜述機器學習演算法
- Anchor-free目標檢測綜述 -- Keypoint-based篇
- 文章綜述:基於結構法分析的故障檢測
- 重磅! flutter檢視區域性更新Flutter
- Math-Model演算法綜述演算法
- 系統學習NLP(十)--詞性標註演算法綜述詞性標註演算法
- 【阿菜讀論文】區塊鏈共識演算法綜述區塊鏈演算法
- 機器學習 – 特徵選擇演算法流程、分類、優化與發展綜述機器學習特徵演算法優化
- MTCNN人臉檢測與校準(5特徵點)CNN特徵
- 邁向完全可學習的物體檢測器:可學習區域特徵提取方法特徵
- 聯邦學習綜述性論文聯邦學習
- 7 papers | 華為、MIT韓松論文;DeepMind開源OpenSpiel;目標檢測演算法全面綜述MIT演算法
- Fast角點檢測演算法AST演算法
- 領域綜述 | 知識圖譜概論(一)
- Python 影像處理 OpenCV (3):影像屬性、影像感興趣 ROI 區域及通道處理PythonOpenCV
- 「技術綜述」一文道盡R-CNN系列目標檢測CNN
- 文字識別(五)--自然場景文字檢測技術綜述(CTPN, SegLink, EAST)AST
- 《基於深度學習的目標檢測綜述》論文獲發表深度學習
- Spring綜述Spring
- 如何結合文字特徵檢測仇恨和攻擊性語言特徵
- 深度學習演算法簡要綜述(下)深度學習演算法
- CNN 模型壓縮與加速演算法綜述CNN模型演算法
- 影像邊緣檢測
- WebShell流量特徵檢測_哥斯拉篇Webshell特徵
- 影像篡改被動檢測技術一覽:基於特徵提取和卷積神經網路的篡改檢測特徵卷積神經網路