杜 軍
(1.湖北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,湖北武漢430068;2.十堰職業(yè)技術(shù)學(xué)院經(jīng)濟(jì)貿(mào)易系湖北十堰442000)
人類獲取的信息75%來源于視覺,人眼所能感知外界物體的形狀、顏色、大小位置等信息,這些信息匯總成為圖像。當(dāng)人類對(duì)同一場(chǎng)景獲取兩幅或多幅圖像時(shí),為得到該場(chǎng)景的更多信息,就需要采用圖像配準(zhǔn)方法對(duì)圖像進(jìn)行處理。圖像配準(zhǔn)是尋找在不同時(shí)間點(diǎn)、不同的視角下或由不同傳感器拍攝的關(guān)于同一場(chǎng)景的兩幅圖像或多幅圖像之間的空間變換關(guān)系,并對(duì)其中的一幅或多幅進(jìn)行匹配和疊加的過程。
BRISK算子是一種新的具有尺度不變和旋轉(zhuǎn)不變的特征檢測(cè)與描述算子,與其他的特征檢測(cè)與描述算子如SIFT和SURF相比,在具有較高性能的同時(shí),計(jì)算量顯著減少。與其他局部不變描述子類似,BRISK算子可以分為尺度空間關(guān)鍵點(diǎn)檢測(cè)與描述兩個(gè)步驟。關(guān)鍵點(diǎn)檢測(cè)算法思想源自AGAST算法,而AGAST算法則是對(duì)FAST特征點(diǎn)檢測(cè)算法性能的擴(kuò)展。本文將首先介紹FAST算法,然后再對(duì)BRISK算法進(jìn)行詳細(xì)介紹。
角點(diǎn)(corner)通常是指小的幾何不連續(xù)的二維興趣點(diǎn)。角點(diǎn)檢測(cè)算法通常都由以下幾步來實(shí)現(xiàn):(1)在圖像上每一個(gè)點(diǎn)計(jì)算角點(diǎn)強(qiáng)度函數(shù),生成角點(diǎn)強(qiáng)度圖像;(2)設(shè)置強(qiáng)度閾值T,角點(diǎn)強(qiáng)度超過門限T的點(diǎn)將被保留;(3)最大值抑制[1]。
Mohannah和Mokhtarian。提出了度量角點(diǎn)檢測(cè)器性能的方法:CCN和ACU。
其中,no是原始圖像中檢測(cè)出的角點(diǎn)個(gè)數(shù),nw是在對(duì)原始圖像利用參數(shù)已知的仿射變換模型變換后的圖像中檢測(cè)出的角點(diǎn)個(gè)數(shù),ng是人工選取的角點(diǎn)個(gè)數(shù),na是檢測(cè)出的角點(diǎn)中與人工選取的角點(diǎn)匹配上的個(gè)數(shù)。CCN(consistency of corner numbers)表示該檢測(cè)算子能穩(wěn)定檢測(cè)出角點(diǎn)的性能,CCN越高,檢測(cè)算子穩(wěn)定性越高。當(dāng)變換前后檢測(cè)出的角點(diǎn)個(gè)數(shù)不變時(shí),CCN趨向于100;ACU代表了檢測(cè)精度,然而由于有人員參與,因此主觀性變強(qiáng)。
1.1 Segment-test角點(diǎn)檢測(cè)算子
Segment-test[1]角點(diǎn)檢測(cè)算子基本思想是如果在一個(gè)點(diǎn)周圍有足夠數(shù)量的點(diǎn)在一個(gè)不同的區(qū)域,那么這個(gè)點(diǎn)是角點(diǎn)。假設(shè)候選點(diǎn)為p,存在一個(gè)以該點(diǎn)為中心的圓弧R。若
則該點(diǎn)為角點(diǎn)。其中θ為灰度值全部大于或全部小于p點(diǎn)灰度值的點(diǎn)組成的最長(zhǎng)連續(xù)圓弧的角度,θt為門限。若θt=2π或θ=2π,則中心點(diǎn)p為亮點(diǎn)或暗點(diǎn)。
在離散情況下,圓形區(qū)域半徑r通常取為3,圓弧上的像素點(diǎn)分別標(biāo)記為x(x=1,2,3…16),如圖1所示。中心點(diǎn)p周圍圓弧上的每一個(gè)點(diǎn)相對(duì)于中心點(diǎn)有3種狀態(tài):darker,similar,brighter。
其中t為閾值,x=1,2,3…16。
式(3)可以重新寫為:
其中S為灰度值全部大于或全部小于p點(diǎn)灰度值的點(diǎn)組成的最長(zhǎng)連續(xù)圓弧的像素個(gè)數(shù),n為門限。若連續(xù)處于darker或brighter狀態(tài)的像素點(diǎn)數(shù)目大于等于n,則該中心點(diǎn)為角點(diǎn)。
該算子具有運(yùn)算簡(jiǎn)單直觀的優(yōu)點(diǎn),大大提高了計(jì)算速度。然而,該算法存在多個(gè)相鄰的點(diǎn)可能被檢測(cè)到以及快速檢測(cè)的優(yōu)勢(shì)在門限時(shí)不明顯的缺點(diǎn)[2]。
圖1 segment-test算子
1.2 FAST角點(diǎn)提取算法
FAST算子[1]是針對(duì)segment-test算子缺點(diǎn)的改進(jìn)。segment-test算子有可能會(huì)檢測(cè)到多個(gè)相鄰的特征點(diǎn),因此必須通過度量局部最大性來去除這些不是局部極值的點(diǎn)。定義得分函數(shù)V:
其中
假設(shè)P點(diǎn)滿足P∈C,其中C為通過segmenttest算法檢測(cè)出的點(diǎn)集,其得分函數(shù)響應(yīng)值為Vp。若在點(diǎn)P的3*3鄰域內(nèi)還存在一點(diǎn)∈C,且滿足則P不是角點(diǎn),否則,P是角點(diǎn)。
文獻(xiàn)[1][3]引入了機(jī)器學(xué)習(xí),文獻(xiàn)[4]引入ID3決策樹對(duì)FAST角點(diǎn)檢測(cè)算子進(jìn)行了改進(jìn),進(jìn)一步提高了算法速度。
圖2 FAST算法檢測(cè)結(jié)果圖
尺度不變性是衡量特征點(diǎn)檢測(cè)算法質(zhì)量的關(guān)鍵指標(biāo)之一。BRISK算法將FAST算法擴(kuò)展到圖像平面和尺度空間,而且給出了連續(xù)尺度空間下得的尺度最優(yōu)解。
在BRISK算法框架下,尺度空間金字塔由n層ci以及n個(gè)中間層di(i=0,1,2…n-1),并且一般情況下n=4。每一層從原始圖像(對(duì)應(yīng)于c0)開始由上一層下采樣得到,每一個(gè)中間層di位于層ci和層ci+1之間,如圖3所示。第一個(gè)中間層d0通過對(duì)原始圖像c0進(jìn)行1.5倍下采樣,其他的中間層則是對(duì)上一個(gè)中間層進(jìn)行下采樣得到。需要說明的是,F(xiàn)AST和AGAST算子都提供了不同的模板進(jìn)行關(guān)鍵點(diǎn)檢測(cè),但BRISK算子主要采用9-16的模板進(jìn)行特征點(diǎn)檢測(cè),也就是說要求16個(gè)像素中至少有9個(gè)連續(xù)的像素與中心像素相比或者充分亮或者充分暗。
關(guān)鍵點(diǎn)檢測(cè)主要通過以下兩步來實(shí)現(xiàn)。首先,具有相同閾值T的FAST算子應(yīng)用于每一層以及每一中間層,用于識(shí)別潛在的感興趣區(qū)域。第二步,對(duì)這些潛在區(qū)域中的點(diǎn)在尺度空間進(jìn)行非極大值抑制:(1)在同一層待檢測(cè)點(diǎn)FAST積分s必須大于與它相鄰的其他八個(gè)點(diǎn);(2)上一層和下一層的其他所有點(diǎn)的積分都必須要低于該點(diǎn)的積分。滿足這兩個(gè)條件的點(diǎn)稱為關(guān)鍵點(diǎn)。對(duì)于c0層的關(guān)鍵點(diǎn)檢測(cè),采用5-8FAST關(guān)鍵點(diǎn)檢測(cè)算法。
考慮到圖像顯著性不僅對(duì)于圖像是連續(xù)的,而且對(duì)于尺度維而言也是連續(xù)的。因此,對(duì)每一個(gè)檢測(cè)出的極大值進(jìn)行亞像素和連續(xù)尺度校正。為了減少計(jì)算復(fù)雜度,首先對(duì)每個(gè)極值對(duì)應(yīng)的三個(gè)層的積分分別進(jìn)行最小二乘意義上的2D二次函數(shù)擬合,這樣就能得到三個(gè)亞像素級(jí)的極大值,為了避免重采樣,每一層采用3*3大小的塊;下一步,對(duì)這些校正后的積分沿尺度坐標(biāo)擬合1D拋物線以便得到最終的積分估計(jì)值和最優(yōu)尺度估計(jì)值。最后一步,對(duì)圖像坐標(biāo)進(jìn)行重插值。
圖3 BRISK算子關(guān)鍵點(diǎn)檢測(cè)
關(guān)鍵點(diǎn)的描述對(duì)后續(xù)的關(guān)鍵點(diǎn)匹配的效率具有十分重要的作用,也對(duì)整個(gè)特征檢測(cè)算子的性能產(chǎn)生重大影響。SIFT算子每個(gè)特征點(diǎn)具有128位的描述符,SURF算子每個(gè)特征點(diǎn)也有64位描述符,在特征匹配階段,通常只能采用歐氏距離等方法來進(jìn)行匹配,效率很低。BRISK算子采用的二進(jìn)制字符串的方法來描述每個(gè)特征點(diǎn),采用二進(jìn)制位間的異或(XOR)運(yùn)算來實(shí)現(xiàn)特征匹配。采用二進(jìn)制字符串來進(jìn)行特征描述的方法已經(jīng)被證明是十分有效[5]??紤]到旋轉(zhuǎn)不變性,BRISK算子識(shí)別出每一個(gè)關(guān)鍵點(diǎn)的典型方向以得到歸一化的方向描述。
BRISK描述符采用了如圖4所示的鄰域采樣模式即在以關(guān)鍵點(diǎn)為中心構(gòu)建的多個(gè)同心圓上取相同間距的N個(gè)點(diǎn)。為了避免采樣時(shí)圖像灰度混疊的影響,利用高斯函數(shù)進(jìn)行平滑濾波,高斯函數(shù)的標(biāo)準(zhǔn)差σ正比于每個(gè)同心圓上點(diǎn)之間的距離??紤]所有采樣點(diǎn)構(gòu)成的點(diǎn)對(duì)中的一對(duì),記為(Pi,Pj),平滑后的灰度值分別為I(Pi,σi)和I(Pj,σj)則兩點(diǎn)之間的梯度g(Pi,Pj)為
考慮所有的采樣點(diǎn)對(duì)構(gòu)成的集合,記為A
定義短距離采樣點(diǎn)對(duì)構(gòu)成的集合S以及長(zhǎng)距離采樣點(diǎn)對(duì)構(gòu)成的集合L
通常距離門限δmax=9.75t,距離門限δmin= 13.67t,t為關(guān)鍵點(diǎn)的尺度。
假設(shè)局部的梯度互相抵消,可以通過在集合L估計(jì)出關(guān)鍵點(diǎn)的總體模式方向?yàn)?/p>
圖4 BRISK算子60個(gè)點(diǎn)的采樣模式
為了實(shí)現(xiàn)旋轉(zhuǎn)不變和尺度不變,將采樣模式圍繞關(guān)鍵點(diǎn)旋轉(zhuǎn)角度?=arctan2(gy,gx)。通過對(duì)短距離采樣點(diǎn)對(duì)集合S內(nèi)的所有點(diǎn)對(duì)進(jìn)行以下運(yùn)算就可以構(gòu)成二進(jìn)制描述符。
BRISK算法可以進(jìn)行灰度比較的理由,(1)BRISK算子采用的是確定的采樣模式,在以關(guān)鍵點(diǎn)為中心的給定半徑上具有統(tǒng)一的采樣密度,因此定制的高斯平滑不會(huì)影響到灰度比較;(2)BRISK使用很少的采樣點(diǎn)參與比較,減少了尋找像素點(diǎn)灰度值的復(fù)雜度;(3)對(duì)參與比較的像素點(diǎn)進(jìn)行了空間上的限制,只要求灰度變化的局部一致性。
通過給定采樣模式和距離門限,BRISK算子獲得了512位的字符串。特征點(diǎn)之間的匹配可以按位進(jìn)行異或運(yùn)算實(shí)現(xiàn)。算法基本流圖如下:
圖5 BRISK算法基本流程圖
圖6給出了存在視覺變化的兩幅圖,圖7給出了兩幅圖BRISK算子的特征檢測(cè)與匹配結(jié)果。圓表示在兩幅圖像上檢測(cè)出的特征點(diǎn),其中綠色圓表示兩幅圖像匹配上的特征點(diǎn),紅色圓表示檢測(cè)出但未在另一幅圖像上找到匹配點(diǎn)的特征。圓上半徑所指的方向?yàn)樘卣鼽c(diǎn)的典型方向,綠色直線連接起來的兩個(gè)圓則為匹配上的特征點(diǎn)對(duì)。
本文介紹了BRISK算法,分析了BRISK算子具有旋轉(zhuǎn)和尺度不變形的原因。給出了算法實(shí)現(xiàn)的基本流程圖以及典型的實(shí)驗(yàn)結(jié)果,證明了算法的有效性。
[1]Edward Rosten.High performance rigid body tracking[D].Churchill College University of Cambridge,2006.
[2]汪漢云.異類遙感圖像配準(zhǔn)技術(shù)研究[D].國(guó)防科技大學(xué),2010:18-21.
[3]E Rosten,T Drummond.Machine learning for highspeed corner detection[C]//Proceedings of the European Conference on Computer Vision,2006.
[4]J R quinlan.Introduction of decision trees[M].Mach Learn,1986:81-106.
[5]M Calonder,V Lepetit,C Strecha,P Fua.BRIEF:Binary Robust Independent Elementary Features[C]//In Proceedings of the European Conference on Computer Vision(ECCV),2010.