黃 剛 蔡 浩 鄧 超 何 志 許寧波
(1.武漢科技大學汽車與交通工程學院 武漢 430081;2.武漢紡織大學計算機與人工智能學院 武漢 430200)
隨著對位置信息服務(wù)(location-based services,LBS)的需求增加,室內(nèi)環(huán)境下的高精度定位[1]成為研究熱點。例如盲人室內(nèi)無障礙導航[2]、室內(nèi)服務(wù)機器人自主巡航[3]以及室內(nèi)停車場中的智能汽車自動泊車[4]等室內(nèi)交通場景,都需要獲取目標的高精度位置信息。室內(nèi)場景屏蔽了GNSS(global navigation satellite system)信號,傳統(tǒng)的基于GNSS的定位方法無法在室內(nèi)環(huán)境有效應(yīng)用。對此,國內(nèi)外學者提出諸多室內(nèi)定位系統(tǒng)(indoor positioning system,IPS),但是在定位效率和精度及實用性方面仍然存在很多問題。
目前在室內(nèi)定位中常用的傳感器包括無線傳感器、測量傳感器和視覺傳感器等,其中使用的無線傳感器包括Wi-Fi[5-6]、藍牙[7]和超寬帶(UWB,Ultra Wide Band)[8]等,利用室內(nèi)場景中廣泛存在的Wi-Fi資源進行定位是最常見的室內(nèi)定位方法,王博遠等[9]提出1種改進的加權(quán)k近鄰Wi-Fi指紋定位方法,該方法通過引入加權(quán)系數(shù)和設(shè)計信號加權(quán)歐氏距離,對加權(quán)k近鄰算法進行改進,利用信號加權(quán)歐氏距離進行指紋匹配和位置估計,實驗中平均定位誤差為1.82 m。楊保等[10]提出1種基于藍牙的室內(nèi)定位方法,該方法利用不同無線接入點(access point,AP)對位置的影響差異,實現(xiàn)空間分割以自動構(gòu)建指紋數(shù)據(jù)庫,結(jié)合用戶的運動狀態(tài)實現(xiàn)室內(nèi)定位,定位誤差小于2 m。在室內(nèi)場景中,由于無線信號受到非視距傳播的影響,且單個信號錨點的信號值隨時間變化也會發(fā)生變化,因此基于Wi-Fi或藍牙的室內(nèi)定位算法定位精度較低,且基于指紋的定位方法需要時常對指紋進行更新。而基于UWB的室內(nèi)定位方法,由于成本高昂,難以進行大規(guī)模推廣應(yīng)用?;跍y量傳感器的室內(nèi)定位方法主要使用的傳感器包括激光測距儀和陀螺儀等[11],通過測量與周圍物體的相對距離,以及自身的加速度和角加速度等信息,實現(xiàn)自身位置的計算。然而,測量傳感器的成本較高,陀螺儀在無GPS環(huán)境漂移誤差較大,同樣難以進行大規(guī)模推廣應(yīng)用。
視覺傳感器由于其感知數(shù)據(jù)豐富、直觀,價格低廉,且易于集成,基于視覺傳感器的室內(nèi)定位算法更容易進行推廣應(yīng)用?,F(xiàn)有的視覺定位算法按照其過程,可以分為SLAM(simultaneous localization and mapping)方法和“離線制圖-在線定位”方法。ORB-SLAM3[12]是基于圖像ORB(oriented fast and rotated brief)[13]特征提取和匹配的視覺SLAM方法,是ORB-SLAM[14]上的改進版本,該方法使用效率較高的ORB特征進行特征點的計算和匹配,然而該方法在構(gòu)建即時地圖時,特征點比較稀疏,在特征點較少的場景中,計算誤差較大?!半x線制圖-在線定位”方法的核心是通過提取和匹配當前圖像和地圖圖像的特征進而找出最近圖像,并在圖像匹配結(jié)果的基礎(chǔ)上進行定位計算。在計算最近圖像中,胡月志等[15]提出利用ORB特征進行交通標志的快速識別,從構(gòu)建的交通標志圖像庫中找出最近圖像。在定位計算中,陶倩文等[16]提出利用SURF(speeded up robust features)[17]特征進行場景特征的提取和計算,然而SURF特征的計算比較耗時,導致算法整體的耗時較大。Wael Elloumi等[18]提出基于Harris特征和ZNCC(zero-normalized cross-correlation)匹配算法的室內(nèi)定位方法,該方法需要人工選取室內(nèi)場景中的關(guān)鍵幀,進行預先地圖構(gòu)建,在定位時,通過安裝在人體上固定機位的攝像機拍攝場景圖像,并與地圖進行匹配,進而獲取位置信息。
筆者針對目前文獻中方法的不足,特別是針對文獻中方法計算耗時較大的問題,以及人工選擇關(guān)鍵幀時取點工作量大的問題,以室內(nèi)場景中已有的各類標志為視覺目標,引入局部BEBLID(boosted effective binary local image descriptor)[19]特征提取算法,并對該算法進行改進,提出全局BEBLID特征提取算法,并以此面向室內(nèi)場景中的機器人或智能汽車提出1種視覺定位方法。該方法分為離線階段和在線階段,離線階段中,采集各個標志點的場景圖像和標志的坐標信息,構(gòu)建場景標志地圖。在線階段中,通過當前圖像與場景視覺地圖中圖像的全局和局部BEBLID特征匹配,以及利用存儲的標志坐標信息,計算拍攝當前圖像時的攝像機在場景中的位姿,以實現(xiàn)機器人或智能汽車位置信息的計算。
本文算法以室內(nèi)各類標志為視覺目標,算法包括離線階段和在線階段,見圖1。在離線階段中,采集各類標志所在的場景圖像,在對圖像進行預處理后,提取其全局BEBLID特征和局部BEBLID特征,并提取標志在場景中的坐標信息,構(gòu)建場景標志地圖。在線階段中,車輛/機器人獲取包含標志的場景圖像后,對圖像進行處理,并與標志地圖進行匹配,計算獲得當前的位置信息。其中,定位階段的計算分為3個步驟:①通過基于KNN算法的全局BEBLID特征匹配,獲取最近圖像;②通過局部BEBLID特征匹配獲取當前圖像與場景標志地圖中圖像的特征點對應(yīng)關(guān)系;③利用特征點對應(yīng)關(guān)系和場景標志地圖中存儲的標志坐標,進行度量計算,獲取當前的位置信息。
圖1 方法流程圖Fig.1 Flow of the proposed method
在離線階段,場景標志地圖構(gòu)建步驟如下。
步驟1。選取場景中已存在的標志點,并對場景中的標志點進行編號。
步驟2。采集每個標志點的場景圖像,為了適應(yīng)在定位過程中拍攝的圖像可能來自于不同的距離和角度的攝像機,在采集標志點圖像時,每個標志點采集3張不同角度和距離的場景圖像。
步驟3。在獲取原始場景圖像后,對場景圖像進行預處理,將圖像尺寸統(tǒng)一縮放至640×480 pixels,并對縮放后的圖像進行灰度化和直方圖均衡化處理。對經(jīng)過圖像預處理后的場景圖像進行全局特征點設(shè)定和全局BEBLID特征提取,以及局部特征點檢測和局部特征提取。BEBLID是1種局部特征點描述算法,是Iago Suárez等[19]提出1種基于Ada-Boost的二值化特征,能夠?qū)D像中局部點的特征進行計算,但不具備對圖像整體進行表征的能力。在本文中,對文獻[19]中的BEBLID算法改進,提出全局BEBLID特征計算方法,首先,將圖像縮放成標準的圖像塊;然后,將圖像塊的中心點作為特征點所在的位置,即設(shè)定中心特征點,直接略過特征點檢測步驟,極大減少特征點計算耗時;最后,提取中心特征點的BEBLID特征。BEBLID特征通過對圖像塊中的區(qū)域進行灰度值比較計算獲得,對于圖像中的圖像塊A和B,利用AdaBoost最小化損失[19]。
式中:λ為弱學習器的權(quán)重;ri∈{-1;1};h(A)為圖像A中u個弱學習器組成的向量,特征值通過對圖像塊的平均灰度值進行比較獲得。
式中:f為特征值提取器;T為設(shè)定的閾值。f的具體計算方法見式(3)。
式中:I(p)和I(q)分別為圖像塊A和B在p和q處的灰度值;s為A和B的尺寸,通過f計算可以獲得圖像塊A和B的平均灰度值差異。通過式(2)~(3)計算后,可以獲得由+1和-1組成的一組特征值向量,為了獲得二值化描述符,將+1變換為1,-1變換為0,則生成的新向量為BEBLID特征描述符。所提取的BEBLID特征能夠?qū)D像整體進行特征表征,區(qū)分于局部BEBLID特征,該特征為圖像整體的全局BEBLID特征。在局部特征點檢測和局部特征提取中,采用文獻[19]的方法進行。為了方便位姿計算,同時提取圖像的局部特征點及其局部BEBLID特征。圖2為場景中隨機標志圖像所提取的全局和局部BEBLID特征。
圖2 BEBLID全局與局部描述符示例Fig.2 Examples of holistic and local BEBLID features
步驟4。通過人工測量,采集室內(nèi)標志在場景中的坐標,并計算標志坐標系和場景坐標系的轉(zhuǎn)換關(guān)系(R0t0)。
通過以上4個步驟,完成對場景標志地圖的構(gòu)建。對于場景標志地圖中的每1個節(jié)點i,其數(shù)值化表示為
式中:Fi為每個節(jié)點的數(shù)值化表示;gi為節(jié)點i中圖像提取的全局BEBLID特征;oi為節(jié)點i中圖像提取的局部特征點和局部BEBLID特征;ci為節(jié)點所對應(yīng)的標志的坐標信息以及坐標轉(zhuǎn)換信息。
在線階段中,將采集的當前圖像與場景特征地圖進行匹配,獲取當前的位置信息。包含3個步驟:①基于KNN算法的全局BEBLID特征匹配;②局部BEBLID特征匹配;③度量計算。以上3個步驟分別利用全局特征信息、局部特征信息和坐標信息,通過設(shè)計層次化的定位過程,能夠有效提升定位效率。
1.2.1 基于KNN算法的全局BEBLID特征匹配
全局BEBLID特征的數(shù)值化形式是256位二進制數(shù)據(jù),通過對2幅圖像提取的2個全局BEBLID特征的異或匹配計算其Hamming距離。
式中:L1和L2分別為2個待匹配圖像的全局BEBLID特征描述符;和分別為2個全局描述符中的第i個數(shù);XOR表示異或匹配。通過公式,即可計算出2幅圖像的Hamming距離,Hamming距離代表了圖像的相似程度。在構(gòu)建場景標志圖像時,每個標志點采集了3張圖像,為了計算出最近圖像,引入KNN算法[15],選出其中Hamming距離最小的K張圖像作為候選結(jié)果。通過基于KNN算法的全局BEBLID特征匹配,不僅可以計算出距離當前位置最近的標志點,還可以從該標志點的3張地圖圖像中獲取最近圖像。
1.2.2 局部BEBLID特征匹配
在獲取最近標志點以及最近標志點圖像后,利用局部BEBLID特征匹配獲取圖像中特征點的對應(yīng)關(guān)系。局部特征匹配計算較為成熟,選擇文獻[19]中的方法進行局部BEBLID特征匹配計算。通過以上方法,可以計算出當前圖像與場景標志地圖中最近圖像特征點的一一對應(yīng)關(guān)系,該對應(yīng)關(guān)系用于在下一步的度量計算中,對當前位置進行計算。
1.2.3 度量計算
度量計算是通過局部BEBLID特征匹配獲取的二維特征點對應(yīng)關(guān)系,以及場景標志地圖中存儲的標志坐標,獲取當前三維位姿以及位置信息的計算過程。通過局部BEBLID特征匹配,可以獲取當前圖像與場景標志地圖中最近圖像的單應(yīng)關(guān)系Hcm。
式中:[uc vc1]T和[um vm1]T分別為通過局部BEBLID特征匹配確定的特征點對在當前圖像與場景標志地圖中最近圖像中的坐標。同時,場景標志地圖中的圖像與場景坐標系存在關(guān)系,見式(7)。
在本文中近似認為標志處于1個平面上,因此場景標志地圖中的圖像與場景坐標系之間的關(guān)系退化為單應(yīng)關(guān)系Hm。
通過式(6)和式(8)可以獲取當前圖像與場景坐標系之間的單應(yīng)關(guān)系
對于小孔成像模型,單應(yīng)矩陣與攝像機內(nèi)參數(shù)、旋轉(zhuǎn)矩陣和平移向量相關(guān)。
式中:K為攝像機內(nèi)參數(shù),通過張正友標定法[20]獲得。通過對Hc進行分解計算,可以獲取當前圖像拍攝的位姿。
通過當前圖像拍攝的位姿(R,t),其中R為旋轉(zhuǎn)矩陣,t為平移向量??梢酝ㄟ^以下公式獲取相機在地圖中的位置。
式中:(R0t0)為旋轉(zhuǎn)和偏移矩陣,是標志坐標系和整個場景坐標系的轉(zhuǎn)換關(guān)系;為正交投影矩陣。
根據(jù)本文所提出的方法,進行算法設(shè)計,并在實際場景中進行驗證。選擇的實驗場景是武漢科技大學黃家湖校區(qū)9號樓、恒大樓以及恒大樓停車場,分別是典型的辦公樓、教學樓和室內(nèi)停車場。在場景1的9號樓中,選取標志點10個,共采集30張地圖圖像,利用1.1中的方法構(gòu)建場景標志地圖。同理,在場景2和場景3中,分別選取標志點10個,分別采集30張地圖圖像。圖3為場景1、場景2和場景3中采集的部分場景標志圖像。
圖3 實驗場景中部分標志圖像Fig.3 Sign images from experiment scenes
其中場景19號樓和場景2恒大樓的實驗面向室內(nèi)服務(wù)機器人應(yīng)用場景,定義為第一類場景;場景3恒大樓停車場面向智能汽車應(yīng)用場景,定義為第二類場景。每個標志點拍攝10張圖像作為測試圖像,即場景1、場景2和場景3的測試集圖像數(shù)量均為100。由于2類場景針對的應(yīng)用對象不同,對第一類場景和第二類場景分別進行實驗,在第一類場景中,對本文提出的基于KNN算法的全局BEBLID特征匹配算法性能進行驗證,與文獻[15]的方法進行對比,并對整體定位算法的定位誤差和耗時進行驗證。并在第二類場景中,同樣進行實驗驗證。
2.1.1 基于KNN算法的全局BEBLID特征匹配實驗
利用本文所提出的基于KNN算法的全局BEBLID特征匹配算法對測試集圖像進行處理,對輸出的結(jié)果進行判定和統(tǒng)計。算法運行的硬件環(huán)境為Intel Core i7。由于事先對場景內(nèi)的標志進行編號,當算法識別的結(jié)果與當前圖像對應(yīng)的標志編號相同時,則說明計算結(jié)果正確,反之計算結(jié)果錯誤。圖4為第一類場景的標志識別實驗結(jié)果。
從圖4可以看出,在場景1中,本文算法的正確識別的數(shù)量為91,正確識別率為91%。文獻[15]正確識別的數(shù)量為82,正確識別率為82%。在場景2中,本文算法的正確識別的數(shù)量為90,正確識別率為90%。文獻[15]正確識別的數(shù)為83,正確識別率為83%。
圖4 第一類場景標志識別結(jié)果Fig.4 Recognition results of the signs in the class-1 scene
計算效率也是對算法進行評估的重要指標,實驗中,對算法的計算耗時進行統(tǒng)計,見表1。
表1 計算效率對比實驗結(jié)果Tab.1 Comparison experiments of calculation efficacy
從表1可以看出,在相同地圖圖像以及相同測試圖像的情況下,場景1中,本文方法的平均計算耗時為92.0 ms,文獻[15]中方法的平均計算耗時為92.7 ms;在場景2中,本文方法的平均計算耗時為95.3 ms,文獻[15]中方法的平均計算耗時為96.4 ms。在計算效率方面,本文方法與文獻中的方法均能達到較快的速度,其原因在于本文方法與文獻[15]中的方法類似,都是基于灰度值比較的二值化描述符對全局圖像進行特征描述。結(jié)合圖4和表1中展示的實驗結(jié)果可以表明,本文所提出的基于全局BEBLID特征的場景最近圖像計算方法在識別成功率和計算耗時方面可以獲得較好的效果。
2.1.2 本文算法的定位誤差
基于KNN算法的全局BEBLID特征匹配獲得最近圖像后,進行局部特征匹配和度量計算。圖5為BEBLID局部特征匹配效果,其中圖5(a)為場景標志地圖中的圖像,圖5(b)為測試集圖像。通過度量計算,可以獲得當前的位置信息,將該位置信息與測量真值進行對比,即可獲得本文算法的定位誤差,實驗中測量真值通過人工測量獲得。對計算獲得的定位誤差進行統(tǒng)計分析,見圖6,為本文方法在場景1和場景2中的定位誤差,以累計分布函數(shù)CDF(Cumulative Distribution Function)進行展示,反映了在不同定位誤差下的累計概率。
圖5 局部BEBLID特征匹配效果Fig.5 Matching performance of local BEBLID features
圖6 第一類場景定位誤差Fig.6 Localization error in the class-1 scene
從圖6可見:在場景1中定位誤差小于0.5 m的次數(shù)超過60次,定位誤差小于2 m的次數(shù)達到89次;在場景2中,定位誤差小于0.5 m的次數(shù)同樣超過60次,定位誤差小于2 m的次數(shù)接近90次。
第一類場景的實驗結(jié)果見表2。從表2可以看出,場景1中,本文算法的平均定位誤差為0.80 m,標準偏差為1.38 m;場景2中,平均定位誤差為0.82 m,標準偏差為1.41 m,定位誤差小于1 m的次數(shù)均達到87%。導致標準偏差較高的原因在于當識別錯誤時,定位誤差定義為標志點之間的距離,實驗中測定該誤差距離的均值約為5 m。本文方法的整體計算耗時包括3個部分,分別對應(yīng)定位方法中的3個步驟,包括基于KNN算法的全局BEBLID特征匹配、局部BEBLID特征匹配和度量計算。從表2可以看出,本文方法的平均計算耗時為152.0 ms。通過以上實驗可以表明,本文方法可以在保證計算效率基礎(chǔ)上獲得較好的定位結(jié)果。
表2 第一類場景定位誤差Tab.2 Localization error in the class-1 scene
圖7為本文方法在第二類場景中的實驗結(jié)果。從圖7可以看出,在停車場場景中,測試樣本總量為100時,本文方法對標志的正確識別次數(shù)為90次,文獻[15]中方法正確識別次數(shù)為84次。由此可見,本文方法比文獻[15]方法正確率高出6%。
圖7 第二類場景標志識別結(jié)果Fig.7 Recognition results of the signs in the class-2 scene
圖8為本文方法在第二類場景中的最終定位誤差,從圖8中可以看出,在室內(nèi)停車場中,本文方法定位誤差小于1 m的概率達到86%,定位誤差小于0.5的概率達到51%,平均定位誤差小于1 m。
圖8 第二類場景定位誤差Fig.8 Localization error in the class-2 scene
通過以上2部分實驗,可以看出:①本文方法在教學樓、辦公樓及室內(nèi)停車場場景中,利用場景中的標志,能夠進行有效的場景識別和定位計算;②通過改進特征提取方法,與傳統(tǒng)方法相比,本文方法在識別精度方面有一定的提升,相對提升率約為10%。
本文利用室內(nèi)場景中的標志,提出1種基于全局和局部BEBLID特征的視覺定位算法。本文方法的創(chuàng)新之處主要在于:①對BEBLID算法改進,使其具備描述全局特征的能力,并且通過設(shè)置中心特征點的方式,大大提高算法效率;②基于所提出的全局BEBLID特征,引入KNN算法,不僅能夠快速確定最近圖像所屬的標志點,還能夠確定與當前拍攝位姿最相近的場景標志地圖圖像,避免由于視場重疊過小而導致的特征點匹配數(shù)量降低的問題。本文方法在典型的教學樓、辦公樓和室內(nèi)停車場場景進行實地驗證,實驗結(jié)果表明,算法在場景中對標志點的正確識別率達到90%,平均定位誤差在1 m內(nèi)。
本文所提出的方法能夠應(yīng)用于各類室內(nèi)交通場景下的機器人/智能汽車定位,例如地下停車場中的智能汽車定位以及室內(nèi)服務(wù)機器人導航等。同時,本文方法也存在不足之處,擬在后續(xù)的研究中進行完善和拓展:①在特征單一且相似的場景中定位誤差較大,后續(xù)擬通過引入其他的定位方式進行融合,以提升算法的魯棒性;②由于僅針對標志進行定位,可以與其他定位算法結(jié)合,例如在面向智能汽車定位時,可以與ORB-SLAM3等算法進行結(jié)合,以完成整個場景中的定位計算,并提高定位精度。