馮 鈞,黃多輝
(河海大學(xué)計(jì)算機(jī)與信息學(xué)院,江蘇 南京 211100)
視覺里程計(jì)(VO)通過一部或者多部相機(jī)拍攝的連續(xù)幀的場景圖像來估計(jì)相機(jī)載體的運(yùn)動(dòng)軌跡[1]。視覺里程計(jì)與傳統(tǒng)里程計(jì)相比,消除了由側(cè)滑而導(dǎo)致的漂移誤差。當(dāng)前視覺里程計(jì)在智能機(jī)器人和無人駕駛汽車上都得到了廣泛的應(yīng)用。視覺里程計(jì)根據(jù)研究方法,通??梢苑譃榛谔卣鼽c(diǎn)的間接法和基于光流的直接法[2-7]?;谔卣鼽c(diǎn)的間接法通過相鄰幀圖像的特征點(diǎn)匹配來建立數(shù)據(jù)關(guān)聯(lián),然后用一系列方法恢復(fù)相機(jī)運(yùn)動(dòng)軌跡[8-10];而基于光流的直接法則是在場景圖像灰度不變的情況下,通過判別場景圖像中的像素信息來確定相機(jī)的運(yùn)動(dòng)軌跡。隨著學(xué)術(shù)界在特征點(diǎn)檢測、描述與匹配方面的研究取得了很大的進(jìn)展,基于特征點(diǎn)的間接法成為研究視覺里程計(jì)的主流方法。
獲取場景圖像中的特征點(diǎn)信息通常包括特征點(diǎn)檢測與特征點(diǎn)描述2個(gè)步驟。首先特征點(diǎn)檢測算子檢測出場景圖像中的那些包含豐富結(jié)構(gòu)信息的特征點(diǎn)。然后使用描述子對檢測到的特征點(diǎn)進(jìn)行描述,對特征點(diǎn)的描述主要是對特征點(diǎn)周圍像素信息的描述,最終將產(chǎn)生一個(gè)和特征點(diǎn)一一對應(yīng)的描述符。
在基于特征點(diǎn)方法的視覺里程計(jì)中,SIFT和SURF是主流的特征點(diǎn)提取、描述與匹配算法,SIFT和SURF具有良好的尺度和旋轉(zhuǎn)不變特性,可以進(jìn)行很好的位姿估計(jì)[11-14]。但是SIFT和SURF運(yùn)算效率不高,所以很難滿足視覺里程計(jì)的實(shí)時(shí)性要求。BRISK算法使用快速的FAST特征檢測算子在圖像的多個(gè)尺度上提取特征點(diǎn),并使用二進(jìn)制描述符對特征點(diǎn)進(jìn)行描述,速度比SIFT和SURF快很多[15],然而BRISK不具有較好的匹配精確性[16]。
為了提高BRISK算法的匹配精確率,本文對傳統(tǒng)的BRISK算法進(jìn)行改進(jìn),提出一種精確性更高的BRISK算法。該方法將具有匹配精確性高的SURF算法與BRISK相結(jié)合,使用BRISK中的特征點(diǎn)提取算子進(jìn)行特征提取,然后使用SURF中的描述子對特征點(diǎn)進(jìn)行描述,最后使用基于歐氏距離的方法進(jìn)行特征點(diǎn)匹配。經(jīng)過多次實(shí)驗(yàn)后發(fā)現(xiàn)改進(jìn)的BRISK在匹配準(zhǔn)確率上有很大提高,同時(shí)具有很好的抗噪聲干擾性能,實(shí)驗(yàn)也表明改進(jìn)后的BRISK在整體執(zhí)行速度上有小幅度下降。
BRISK算法包括特征點(diǎn)檢測、描述與匹配3個(gè)步驟。首先使用AGAST在尺度空間上檢測圖像特征點(diǎn),然后使用自定義的抽樣模式來描述檢測到的特征點(diǎn),從而形成二進(jìn)制的描述符,最后使用基于漢明距離的方法進(jìn)行特征點(diǎn)匹配。
BRISK算法中的特征點(diǎn)檢測部分使用的是AGAST, AGAST算子是對FAST算子的改進(jìn)[17-18]。BRISK算法是在尺度空間上檢測特征點(diǎn),其尺度空間是由n個(gè)內(nèi)層octave(用ci表示)和n個(gè)外層intra-octave(用di表示)組成,通常n=4, i=0,1,…,n-1。首先,將原始圖像作為c0層即第1層內(nèi)層,ci層由ci-1層的0.5倍下采樣得到。第1層外層d0層是對原圖c0層的1.5倍下采樣,d1層是對d0層的0.5倍下采樣,d2層是d1層的0.5倍下采樣,以此類推。如圖1所示。
圖1 尺度空間特征點(diǎn)檢測
BRISIK進(jìn)行特征點(diǎn)檢測包括2個(gè)階段:
1)首先在構(gòu)建的尺度空間中對每一層用FAST9-16算子進(jìn)行關(guān)鍵點(diǎn)檢測,對檢測出的各個(gè)關(guān)鍵點(diǎn)進(jìn)行非極大值抑制(抑制那些不是極大值的關(guān)鍵點(diǎn),找到是極大值的關(guān)鍵點(diǎn)):特征點(diǎn)的FAST得分值要高于同一層領(lǐng)域(8個(gè)像素點(diǎn))的FAST得分值,并且也要高于上下相鄰層的剩余點(diǎn)(上下層2×9個(gè)像素點(diǎn))FAST得分值。然后使用FAST5-8算子檢測原圖像的特征點(diǎn)[19]。
2)實(shí)現(xiàn)特征點(diǎn)的精確定位。首先需要對已經(jīng)檢測到的極值點(diǎn)進(jìn)行函數(shù)插值,這種插值是對x、 y方向的二維二次插值,以得到準(zhǔn)確的極值點(diǎn)坐標(biāo)位置,用這個(gè)位置作為特征點(diǎn)的位置。然后在尺度方向上進(jìn)行一維插值,以得到極值點(diǎn)所在尺度,用這個(gè)尺度作為特征點(diǎn)的尺度。最后在連續(xù)尺度空間里得到的穩(wěn)點(diǎn)極值點(diǎn)作為特征點(diǎn)。
BRISK使用基于二進(jìn)制的描述符[17],這種描述符采用自定義領(lǐng)域抽樣模式,如圖2所示。在以特征點(diǎn)為中心的40×40的領(lǐng)域內(nèi)構(gòu)建4個(gè)同心圓,分別在每個(gè)圓上的像素點(diǎn)上取60個(gè)等間距的采樣點(diǎn)。最后使用高斯函數(shù)消除圖像混疊產(chǎn)生的干擾。
圖2 BRISK抽樣模型
設(shè)把N個(gè)采樣點(diǎn)兩兩組合成一對,將所有組合方式的集合稱作采樣點(diǎn)對集,用A表示:
A={(pi,pj)∈R2×R2|i≤N,j
(1)
其中(pi,pj)表示采樣點(diǎn)對,將經(jīng)過高斯濾波后的采樣點(diǎn)pi、pj分別記為I(pi,σi)與I(pj,σj),用g(pi,pj)表示采樣點(diǎn)對間的局部梯度集合,則有:
(2)
根據(jù)采樣點(diǎn)對間的距離,定義短距離點(diǎn)對子集S、長距離點(diǎn)對子集L:
S={(pi,pj)∈A|‖pi-pj‖<σS}?A
(3)
L={(pi,pj)∈A|‖pi-pj‖>σL}?A
(4)
其中:σS為短距離閾值,通常取9.75t; σL為長距離閾值,通常取13.67t; t是特征點(diǎn)所在的尺度。
根據(jù)長距離子集計(jì)算特征點(diǎn)的方向:
(5)
其中:g為特征點(diǎn)主方向;l是長距離點(diǎn)對子集L中所有采集點(diǎn)對間距之和;g(pi,pj)為(pi,pj)的梯度;gx與gy分別為L各采集點(diǎn)對在x方向和y方向梯度和。
在生成描述符之前,需要將模板沿中心順時(shí)針旋轉(zhuǎn)θ, θ=tan-1(gy,gx)。按照式(6)在短距離點(diǎn)對子集S中對比采樣點(diǎn)對灰度值,最終生成二進(jìn)制描述子:
(6)
BRISK算法根據(jù)檢測到的特征點(diǎn)生成一系列基于二進(jìn)制的描述子,然后使用漢明距離來度量描述子的相似度。這種相似度度量方式根據(jù)每個(gè)描述子的漢明距離值的大小來確定2個(gè)特征點(diǎn)是否匹配,最終得到圖像的全局估計(jì)。
通過BRISK算法與SIFT和SURF算法相比較可知,BRISK不具有較好的旋轉(zhuǎn)不變性,在特征匹配精確性上也遠(yuǎn)不如SIFT和SURF。由于SURF計(jì)算速度遠(yuǎn)高于SIFT,而且同樣具有很高的匹配準(zhǔn)確率,因此,本文提出把SURF算法與BRISK算法相結(jié)合。首先BRISK在多尺度空間上檢測特征點(diǎn),然后使用SURF描述符對特征點(diǎn)進(jìn)行描述,最后使用基于歐氏距離的度量方法進(jìn)行特征匹配。
2.1.1 確定主方向
首先,為確保旋轉(zhuǎn)不變性,對于提取到的特征點(diǎn),需要統(tǒng)計(jì)其領(lǐng)域內(nèi)像素點(diǎn)的一階Haar小波響應(yīng)值。即以特征點(diǎn)為中心,在半徑為6t(t為特征點(diǎn)所在尺度)的領(lǐng)域內(nèi),使用尺度為4t的Haar小波模板對圖像進(jìn)行處理,計(jì)算x、 y方向的Haar小波響應(yīng)。Haar小波模板如圖3所示,黑色表示權(quán)值為-1,白色為1。
圖3 Haar小波
經(jīng)過計(jì)算特征點(diǎn)的小波響應(yīng)之后,在以特征點(diǎn)為圓心的圓形領(lǐng)域內(nèi),以60°為單位扇形,統(tǒng)計(jì)扇形領(lǐng)域內(nèi)各個(gè)點(diǎn)的水平和垂直Haar小波特征總和。對于每個(gè)扇形領(lǐng)域以0.2 rad大小的間隔進(jìn)行旋轉(zhuǎn),同時(shí)再次統(tǒng)計(jì)該區(qū)域內(nèi)Haar小波特征值,最后將值最大的那個(gè)扇形的方向作為該特征點(diǎn)的主方向。
2.1.2 產(chǎn)生SURF描述子
以每個(gè)特征點(diǎn)為中心,沿著主方向選取20t的正方形窗口。然后繼續(xù)將這個(gè)正方形窗口劃分為4×4的子窗口,并且統(tǒng)計(jì)每個(gè)子窗口區(qū)域25個(gè)像素的水平和垂直方向Haar小波特征dx和dy,如圖4所示。對dx和dy進(jìn)行加權(quán)計(jì)算,然后統(tǒng)計(jì)每個(gè)子區(qū)域的響應(yīng)值。如式(7)所示,最終得到包含4×4×4=64維向量的描述子。
V=(∑dx,∑|dx|,∑dy,∑|dy|)
(7)
圖4 SURF描述算子
SURF算法中使用歐氏距離來度量特征點(diǎn)與特征點(diǎn)間的匹配程度,2個(gè)特征點(diǎn)間的歐氏距離越短,表明這2個(gè)特征點(diǎn)的匹配程度越高。SURF中還引入了Hessian矩陣判別機(jī)制,即計(jì)算出2個(gè)特征點(diǎn)的Hessian矩陣跡,如果2個(gè)特征點(diǎn)的矩陣跡同號,則表示這2個(gè)特征點(diǎn)對比度變化方向是相同的,如果不同,則表明這2個(gè)特征點(diǎn)的對比度方向相反,即歐氏距離為0。
本文提出了一種改進(jìn)的BRISK算法,該算法利用SURF描述符對BRISK在尺度空間上檢測到的特征點(diǎn)進(jìn)行描述。與BRISK中使用基于抽樣模式形成的二進(jìn)制的描述符相比,SURF描述符能夠準(zhǔn)確地描述特征點(diǎn),從而提高特征點(diǎn)匹配的準(zhǔn)確率。該方法繼承了BRISK的快速檢測特征點(diǎn)的優(yōu)越性,同時(shí)又具有SURF匹配準(zhǔn)確性高的優(yōu)點(diǎn)。
本文提出的算法步驟如下:
輸入:一幅灰度圖像。
輸出:特征點(diǎn)和描述符。
1)對圖像使用高斯濾波和畸變校正。
2)建立BRISK尺度空間,同時(shí)提取興趣點(diǎn)。
3)使用非極大值抑制和亞像素插值精確定位特征點(diǎn)。
4)使用SURF算法確定特征點(diǎn)主方向。
5)計(jì)算特征點(diǎn)的SURF描述符。
6)使用歐氏距離進(jìn)行特征點(diǎn)匹配。
實(shí)驗(yàn)數(shù)據(jù)是從安裝在無人車上的攝像機(jī)采集的圖像序列,該圖像序列由分辨率為1234×1624的單通道灰度圖像組成。此外,所使用計(jì)算機(jī)的CPU為2.60 GHz的Intel Core i5-7300U,操作系統(tǒng)為Microsoft Windows 7旗艦版(64 b),內(nèi)存為8 GB。
特征點(diǎn)檢測、描述與匹配實(shí)驗(yàn)使用的數(shù)據(jù)集為一組通過安裝在無人車上的攝像頭拍攝的21張1234×1624像素的單通道灰度圖像序列,部分實(shí)驗(yàn)數(shù)據(jù)如圖5所示。選取的數(shù)據(jù)隨機(jī)調(diào)整比例,對于每個(gè)特征點(diǎn)檢測、描述與匹配算法重復(fù)實(shí)驗(yàn)過程10次。分別使用當(dāng)前主流的特征點(diǎn)檢測、描述與匹配算法SIFT、SURF、BRISK、KAZE以及本文方法對每組圖像進(jìn)行亮度不變性、尺度不變性、噪聲不變性和旋轉(zhuǎn)不變性實(shí)驗(yàn)。即分別對實(shí)驗(yàn)圖像施加不同大小的高斯噪聲、對圖像進(jìn)行旋轉(zhuǎn)變換、對圖像進(jìn)行尺寸變換以及改變圖像亮度,然后使用SIFT、SURF、BRISK、KAZE以及本文方法進(jìn)行特征點(diǎn)檢測、描述與匹配實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如圖6所示。在圖像亮度、尺寸、噪聲、旋轉(zhuǎn)角度一定的情況下分別測試SIFT、SURF、BRISK、KAZE以及本文方法的計(jì)算時(shí)間,實(shí)驗(yàn)結(jié)果如圖7所示。
圖5 實(shí)驗(yàn)數(shù)據(jù)集
(a) 噪聲變化
(b) 角度變化
(c) 尺度變化
(d) 亮度變化圖6 不變性對比圖
圖7 計(jì)算時(shí)間對比圖
實(shí)驗(yàn)結(jié)果表明,改進(jìn)后的算法在匹配準(zhǔn)確率上有很大提高,與BRISK相比計(jì)算速度有一定的下降,與SURF相比仍然具有較快的計(jì)算速度。當(dāng)在圖像中逐漸增加高斯噪聲時(shí),本文方法的平均匹配準(zhǔn)確率達(dá)到了83.18%,與BRISK相比,匹配準(zhǔn)確率提高了約30.51%;當(dāng)圖像旋轉(zhuǎn)角度逐漸增大時(shí),本文方法的平均匹配準(zhǔn)確率達(dá)到了75.52%,與BRISK相比,匹配準(zhǔn)確率提高了約23.12%;當(dāng)圖像發(fā)生亮度變化時(shí),匹配準(zhǔn)確率也有一定的提高,本文方法的平均匹配準(zhǔn)確率達(dá)到了85.07%,與BRISK相比,匹配準(zhǔn)確率提高了約19.93%;當(dāng)圖像發(fā)生尺度變化時(shí),改進(jìn)后的算法匹配準(zhǔn)確率沒有明顯改變。如圖7所示,計(jì)算匹配花費(fèi)的時(shí)間,可以發(fā)現(xiàn)SURF具有很高的計(jì)算成本。本文方法的平均計(jì)算時(shí)間為272.03 ms, BRISK計(jì)算時(shí)間為89.41 ms, SURF計(jì)算時(shí)間為426.78 ms,本文方法計(jì)算時(shí)間高于BRISK,但是低于SURF。
改進(jìn)的BRISK的匹配準(zhǔn)確率有很大提升,經(jīng)分析可知,BRISK描述符是對特征點(diǎn)領(lǐng)域內(nèi)像素點(diǎn)采樣信息的描述,這容易導(dǎo)致描述信息的丟失,并且容易受到噪聲的干擾。而SURF描述符是對特征點(diǎn)領(lǐng)域內(nèi)的所有像素點(diǎn)的灰度信息的描述,因此這種描述符更加準(zhǔn)確,不容易受到噪聲的干擾。實(shí)驗(yàn)結(jié)果也表明,改進(jìn)的BRISK算法在整體執(zhí)行速度上有小幅度下降,這是因?yàn)樵贐RSIK中產(chǎn)生的是較為簡單的基于二進(jìn)制的描述符,而改進(jìn)的BRISK將產(chǎn)生較為復(fù)雜的基于多維向量的描述符。對于這2種描述符采用不同的匹配方法,基于漢明距離的匹配方法要比基于歐氏距離的匹配方法速度快。改進(jìn)的BRISK仍然使用原有的尺度空間,因此實(shí)驗(yàn)結(jié)果表明當(dāng)尺度變化時(shí),改進(jìn)的BRISK的匹配準(zhǔn)確率沒有明顯改變。
在本文中,單目(Monocular)視覺計(jì)系統(tǒng)用于評估BRISK算法和改進(jìn)的BRISK算法,具體過程如圖8所示。
圖8 本文中視覺里程計(jì)結(jié)構(gòu)圖
視覺里程計(jì)的性能可以通過將視覺里程計(jì)的軌跡與實(shí)際軌跡進(jìn)行比較來直接顯現(xiàn),位置的誤差定義如下:
(8)
位置累計(jì)誤差定義如下:
(9)
其中Li來自GPS的地面真實(shí)位置,li是視覺里程計(jì)估計(jì)的位置。視覺里程計(jì)中使用的數(shù)據(jù)是通過無人車上的攝像頭在校園環(huán)境中拍攝獲取,在獲取圖像時(shí),天氣晴朗,道路上有少量的車輛和行人,如圖9所示。其中第1組實(shí)驗(yàn)使用的數(shù)據(jù)包括1000幅1234×1624像素單通道灰度圖像,車輛沿平直道路行駛416.8 m;第2組實(shí)驗(yàn)包含2000幅1234×1624像素單通道灰度圖像,車輛沿環(huán)形路行駛814 m。
(a) 在直路采集的數(shù)據(jù)集1
(b) 在環(huán)形路采集的數(shù)據(jù)集2圖9 通過無人車獲取的圖像序列
對于每組數(shù)據(jù)集,使用視覺里程計(jì)重復(fù)10次實(shí)驗(yàn),使用這2個(gè)數(shù)據(jù)集進(jìn)行測試的實(shí)驗(yàn)結(jié)果如圖10~圖13所示。
圖10 不同方法下使用數(shù)據(jù)集1的視覺里程計(jì)中的軌跡對比
(a) 平移誤差
(b) 旋轉(zhuǎn)誤差圖11 不同方法下使用數(shù)據(jù)集1的平移誤差和旋轉(zhuǎn)誤差對比
圖12 不同方法下使用數(shù)據(jù)集2的視覺里程計(jì)中的軌跡對比
(a) 平移誤差
(b) 旋轉(zhuǎn)誤差圖13 不同方法下使用數(shù)據(jù)集2的平移誤差和旋轉(zhuǎn)誤差對比
從圖10和圖12中可以直觀地看出,使用本文所提算法的視覺里程計(jì)計(jì)算的位置精度比使用BRISK算法計(jì)算的精度要好得多。
將序列的長度劃分為10個(gè)等間隔的分塊,如圖11和圖13所示。這表明,在平移分量中,所提出的算法分別在約350幅(圖11)與700幅(圖13)圖像之后表現(xiàn)比BRISK好;在旋轉(zhuǎn)分量方面,本文提出的算法的誤差也遠(yuǎn)遠(yuǎn)小于BRISK的誤差。
本文所提出算法與BRISK算法的位置誤差的詳細(xì)比較如表1所示。
表1 不同算法的位置誤差比較
場景位置的RMS/%最大誤差/m地點(diǎn)累計(jì)漂移/m本文方法BRISK本文方法BRISK本文方法BRISK數(shù)據(jù)集11.842.710.0120.0230.952.11數(shù)據(jù)集22.663.700.0150.0274.469.39
本文將BRISK算法與SURF算法相結(jié)合,提出了一種改進(jìn)的BRISK算法,有效地解決了BRISK對特征點(diǎn)匹配準(zhǔn)確率低的缺點(diǎn),同時(shí)繼承了BRISK的快速檢測的特性。此外,使用自適應(yīng)非最大抑制適用于提取穩(wěn)定特征點(diǎn),有效地減少了匹配過程中的計(jì)算時(shí)間。
實(shí)驗(yàn)結(jié)果表明,本文所提方法大大提高了BRISK的特征點(diǎn)匹配性能。與使用BRISK方法的視覺里程計(jì)相比,使用本文方法能有效改善視覺里程計(jì)的位置估計(jì)和方向估計(jì)。此外,本文所提算法在特征點(diǎn)匹配精度和計(jì)算時(shí)間方面表現(xiàn)良好,可以實(shí)際應(yīng)用于實(shí)時(shí)單目視覺里程計(jì)。