葛雯斐,牛小驥,蔣郡祥,吳宜斌
(武漢大學(xué)衛(wèi)星導(dǎo)航定位技術(shù)研究中心,武漢 430079)
隨著城市的發(fā)展和建設(shè),建筑物越來越多,建筑物的室內(nèi)環(huán)境也越來越復(fù)雜。由于人們的工作和生活的大部分時間是在室內(nèi)環(huán)境中度過,因此人們對室內(nèi)位置服務(wù)有著非常迫切的需求。目前主流的室內(nèi)定位技術(shù)主要是基于藍(lán)牙[1]、WiFi[2]、UWB[3]、地磁[4]、Zigbee[5]、和視覺[6]等方式。每種定位技術(shù)都有各自的優(yōu)缺點,加之成本、技術(shù)復(fù)雜性等因素,室內(nèi)定位技術(shù)并沒有在國內(nèi)得到廣泛應(yīng)用[7]。
受益于智能手機(jī)的普及,相機(jī)作為智能手機(jī)的基礎(chǔ)傳感器,為視覺定位的發(fā)展提供了硬件基礎(chǔ)。同時,由于用二維碼作為視覺標(biāo)志物具有成本低、易于布設(shè)、可靠性高等特點,在目前的技術(shù)條件下,采用二維碼作為視覺標(biāo)志物進(jìn)行室內(nèi)定位成為了研究的熱點。
在應(yīng)用二維碼作為視覺標(biāo)志物的研究中,文獻(xiàn)[8-10]在QR Code內(nèi)儲存位置等信息,用戶通過移動設(shè)備掃碼得到QR Code的位置等信息之后直接用于導(dǎo)航、規(guī)劃等,沒有進(jìn)一步解算拍攝設(shè)備的位置和姿態(tài)。文獻(xiàn)[11]將QR Code作為視覺標(biāo)志物應(yīng)用于機(jī)器人的室內(nèi)定位中,文獻(xiàn)[12]將2D Bar Codes應(yīng)用在機(jī)器人室內(nèi)定位中。QR Code和2D Bar Codes均為日常生活中廣泛使用的二維碼類型,在機(jī)器人應(yīng)用場景中,干擾二維碼較少;但是在行人通過智能手機(jī)進(jìn)行室內(nèi)定位的場景中,如地下車庫,大型商場等,環(huán)境中存在較多QR Code和2D Bar Codes等類型的二維碼,將會對定位造成干擾。文獻(xiàn)[13]使用AR tag標(biāo)記碼輔助機(jī)器人進(jìn)行視覺SLAM定位,文獻(xiàn)[14]設(shè)計了一種張貼在天花板上的二維碼標(biāo)志物用于機(jī)器人的室內(nèi)定位,但是這兩種碼都只有一種編碼模式,其數(shù)據(jù)儲存單元的大小固定,無法應(yīng)對拍攝距離差異大的場景。
行人通過智能手機(jī)相機(jī)拍攝得到的包含二維碼路標(biāo)在內(nèi)的圖像由于受到距離、角度、光線、雜亂背景等情況的干擾,如何確定圖像中二維碼的位置是后續(xù)解碼和定位定姿解算的關(guān)鍵。文獻(xiàn)[15]根據(jù)二維碼中符合深色-淺色-深色-淺色-深色相應(yīng)元素所占的比例為1∶1∶3∶1∶1的規(guī)律檢測出二維碼定位符點的位置,從而確定二維碼在圖像中的位置。但是當(dāng)拍攝到的二維碼圖像有較大的形變時,該比例關(guān)系被破壞,檢測失誤率較高。文獻(xiàn)[16]提出一種基于邊緣增強(qiáng)的二維碼區(qū)域快速檢測定位算法,對工業(yè)中的二維碼區(qū)域能夠快速檢測。文獻(xiàn)[17]利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行二維碼的檢測,該方法可以應(yīng)對復(fù)雜的環(huán)境,但是由于神經(jīng)網(wǎng)絡(luò)參數(shù)多,計算量大,不適合智能手機(jī)平臺。文獻(xiàn)[18-19]在研究中使用Zxing庫實現(xiàn)二維碼的生成和檢測,Zxing是由Google開源并持續(xù)維護(hù)的1D/2D條碼處理庫,是目前應(yīng)用最廣泛的二維碼開源類庫之一,在很多研究中被作為工具進(jìn)行擴(kuò)展和使用。由于Zxing庫主要是在產(chǎn)品識別、工業(yè)生產(chǎn)等領(lǐng)域用來讀取信息,它的主要應(yīng)用場景具有拍攝距離較近,拍攝角度變化范圍較小等特點,因此并不適用于手機(jī)用戶進(jìn)行室內(nèi)定位這種拍攝距離和角度變化都較大的場景。
據(jù)此,本文設(shè)計一種專門用于定位定姿的二維碼路標(biāo),該二維碼路標(biāo)具有粗碼、細(xì)碼兩種編碼結(jié)構(gòu),與現(xiàn)有的二維碼具有很強(qiáng)的區(qū)分度,且具有易于識別、工作距離遠(yuǎn)、范圍廣等特點。同時針對該二維碼路標(biāo)提出一種檢測算法,能夠穩(wěn)健、準(zhǔn)確地從圖像中檢測到二維碼路標(biāo)。檢測到二維碼路標(biāo)后,提取二維碼頂點的圖像坐標(biāo)并解碼獲得頂點對應(yīng)的世界坐標(biāo),利用EPnP算法[20]解算手機(jī)相機(jī)中心的位置和姿態(tài)。
本文設(shè)計一種專門用于定位定姿的二維碼路標(biāo),如圖1所示,二維碼路標(biāo)為正方形,由隔離區(qū)、標(biāo)志區(qū)、數(shù)據(jù)區(qū)三部分組成,其中,數(shù)據(jù)區(qū)由粗碼和細(xì)碼兩種編碼結(jié)構(gòu)組成。
圖1 二維碼路標(biāo)
隔離區(qū):由于二維碼多布設(shè)在淺色墻面等環(huán)境中,因此設(shè)置黑色隔離區(qū)用于將二維碼路標(biāo)與環(huán)境區(qū)分開,便于二維碼的檢測。
標(biāo)志區(qū):標(biāo)志區(qū)由圖1中所示左上角標(biāo)志區(qū)、右上角標(biāo)志區(qū)、右下角標(biāo)志區(qū)、左下角標(biāo)志區(qū)四個正方形區(qū)域組成,用來區(qū)分二維碼路標(biāo)的上下左右方向,便于在環(huán)境中檢測到二維碼之后將二維碼旋轉(zhuǎn)到正確的方向進(jìn)行解碼。
粗碼:在數(shù)據(jù)區(qū)內(nèi),有一些較大的黑白格,如圖1中綠色格網(wǎng)框出的12個區(qū)域。黑色方塊表示二進(jìn)制0,白色方塊表示二進(jìn)制1,圖1中所示二維碼路標(biāo)的粗碼的編碼內(nèi)容用二進(jìn)制表示為010011010010,即10進(jìn)制數(shù)字1234。粗碼用于儲存該二維碼路標(biāo)在編碼庫中對應(yīng)的編號。在實際使用時,算法先根據(jù)用戶的粗略位置查找對應(yīng)的編碼庫,在每一個編碼庫中,粗碼的編號對應(yīng)此二維碼路標(biāo)的四個頂點的實際位置等信息。
細(xì)碼:在每一個粗碼方塊內(nèi),有5×5共25個小的黑白方塊,12個粗碼格子內(nèi)一共300個小方格。黑色小方格表示二進(jìn)制0,白色表示1,細(xì)碼內(nèi)直接儲存該二維碼路標(biāo)中心點的位置、姿態(tài)以及該正方形二維碼路標(biāo)的實際寬度,單位為m。
該二維碼路標(biāo)作為專門用于定位定姿的視覺標(biāo)志物具有以下優(yōu)勢:①具有獨立的編碼和解碼機(jī)制,與生活中其他功能的二維碼具有很強(qiáng)的區(qū)分性,用戶能夠輕松從環(huán)境中辨識出該二維碼路標(biāo),并用于定位定姿。②具有粗碼和細(xì)碼兩種編碼結(jié)構(gòu),細(xì)碼儲存定位定姿所需的所有信息,包括二維碼路標(biāo)中心點的位置、二維碼路標(biāo)的姿態(tài)及其實際寬度。當(dāng)用戶的拍攝距離不是很遠(yuǎn)的情況下,可以直接正確解碼細(xì)碼得到這些定位信息。而當(dāng)拍攝距離較遠(yuǎn)時,如圖2所示,由于攝像頭的分辨率有限,此時細(xì)碼已經(jīng)無法正確解碼。因此,在細(xì)碼工作的基礎(chǔ)上,本文設(shè)計的二維碼路標(biāo)中引入粗碼的設(shè)計:粗碼對應(yīng)較大的黑白格,當(dāng)拍攝距離較遠(yuǎn)時,依然能夠?qū)Υ执a進(jìn)行正確解碼,進(jìn)一步從編碼庫中獲取二維碼路標(biāo)對應(yīng)的位置信息,為后續(xù)的定位服務(wù)。
拍攝設(shè)備:三星S6;二維碼路標(biāo)尺寸:20 cm×20 cm圖2 拍攝距離為10 m時依然能夠依靠粗碼進(jìn)行正確解碼
對于布設(shè)了二維碼路標(biāo)的室內(nèi)場景,為了保障用戶體驗,不應(yīng)該對用戶的拍攝行為有過多要求,如走過去近距離掃一掃或者必須端正手機(jī)拍攝等。理想的情況下,用戶在任意距離、以任意角度拍攝一張包含二維碼路標(biāo)的環(huán)境圖像,均可以獲取到定位定姿結(jié)果。
圖3 二維碼路標(biāo)正常拍攝角度范圍
經(jīng)過分析,在室內(nèi)環(huán)境中,受空間大小、相機(jī)分辨率等因素限制,對于張貼在墻面上的二維碼路標(biāo),用戶拍攝二維碼的距離一般在8 m以內(nèi)。記垂直拍攝角度為0°,用戶拍攝二維碼的角度范圍一般在[-75°,75°]內(nèi),如圖3所示。本文實驗采用的二維碼路標(biāo)的尺寸為20 cm×20 cm,當(dāng)拍攝距離超過8 m或者拍攝角度超出[-75°,75°]時得到的二維碼路標(biāo)在圖像中過小或者形變過于劇烈,不再適合用于定位定姿解算,予以舍棄。
由于非垂直拍攝的情況下拍攝得到的二維碼路標(biāo)不再是正方形,同時由于拍攝者的高度差異、拍攝時相機(jī)的旋轉(zhuǎn)、相機(jī)畸變等問題,智能手機(jī)拍攝得到的二維碼路標(biāo)在圖像中對應(yīng)的區(qū)域會發(fā)生拉伸、扭曲等變化,如圖4所示。
圖4 拍攝得到的二維碼路標(biāo)發(fā)生了拉伸和扭曲
針對用二維碼路標(biāo)進(jìn)行智能手機(jī)定位定姿的應(yīng)用,成功從圖像中檢測到二維碼路標(biāo)是實現(xiàn)定位定姿的前提。上述分析表明,在不同的拍攝條件下二維碼路標(biāo)在圖像中的大小、形狀、位置等會發(fā)生較大的變化,增加了在圖像中檢測二維碼路標(biāo)的位置的難度。本文結(jié)合所設(shè)計的二維碼路標(biāo)的特點以及拍攝范圍的限制,提出一種穩(wěn)健的二維碼路標(biāo)檢測算法,以滿足智能手機(jī)定位定姿需求。算法主要包括以下兩個步驟:①對獲取的圖像進(jìn)行預(yù)處理,簡化并保留圖像中的有效信息,降低后續(xù)處理復(fù)雜度;②通過輪廓檢測將圖像劃分為不同的候選區(qū),結(jié)合二維碼路標(biāo)的特點以及拍攝范圍的限制對候選區(qū)進(jìn)行篩選,保留二維碼路標(biāo)所在的候選區(qū)并提取其頂點的圖像坐標(biāo),確定二維碼路標(biāo)在圖像中的精確位置。
二維碼路標(biāo)檢測算法的算法流程如圖5所示。
圖5 二維碼路標(biāo)檢測算法流程圖
首先對輸入的含有二維碼路標(biāo)的圖像進(jìn)行預(yù)處理,依次對圖像進(jìn)行灰度化、直方圖均衡化、 圖像二值化、Canny算子[21]邊緣檢測、圖像形態(tài)學(xué)運算,預(yù)處理在簡化圖像的同時改善圖像的質(zhì)量,使圖像更有利于后續(xù)二維碼路標(biāo)的檢測。預(yù)處理前后圖像對比如圖6所示。
圖6 圖像預(yù)處理前后對比
確定二維碼路標(biāo)在圖像中精確位置就是獲得圖像中每一個二維碼路標(biāo)的四個頂點的圖像坐標(biāo)。由于拍攝距離和角度等的變化使得二維碼路標(biāo)在圖像中的大小、位置、形狀都會發(fā)生變化,同時,圖像中的一些環(huán)境物體也會對二維碼路標(biāo)的搜索造成干擾。由于二維碼路標(biāo)的外形設(shè)計為正方形,其內(nèi)部是由黑白結(jié)構(gòu)編碼組成且編碼規(guī)則已知,因此在圖3所示的拍攝距離小于8 m、拍攝角度范圍[-75°,75°]的情況下,利用二維碼路標(biāo)在圖像中可能呈現(xiàn)的大小、形狀等信息對二維碼路標(biāo)所在的區(qū)域與其他干擾進(jìn)行區(qū)分,最終確定二維碼路標(biāo)在圖像中的位置。基于上述條件,獲取每一個二維碼路標(biāo)的四個頂點的圖像坐標(biāo)主要步驟為:
(1)劃分候選區(qū):首先對預(yù)處理之后的圖像進(jìn)行輪廓檢測,輪廓檢測利用OpenCV中的FindContours函數(shù)完成,將不同連通域的外輪廓提取出來,從而將圖像中的連通域劃分為不同的候選區(qū)。此時獲得的候選區(qū)集合表示為L_all,二維碼所在候選區(qū)的集合表示為L_code,L_code?L_all,同時可能會得到很多干擾候選區(qū),其集合表示為L_other,L_other?L_all,且L_all=L_code∪L_other。
相機(jī)的內(nèi)參矩陣為:
(1)
基于以上條件,得到二維碼路標(biāo)在圖像中的大致寬度width和高度height范圍,單位為像素:
(2)
寬高比的范圍:
(3)
由于二維碼拍攝不全時無法進(jìn)行解碼,因此,當(dāng)某一候選區(qū)與圖像邊緣相交時,認(rèn)為該候選區(qū)內(nèi)即使包含二維碼路標(biāo),也無法用于后續(xù)處理,予以剔除。
將大小不符合要求、寬高比不符合要求、與圖像邊緣有交點的候選區(qū)剔除,完成第一輪篩選。將該輪篩選留下的候選區(qū)集合記為L_(round_1),如圖7所示。
圖7 第一輪篩選前后對比
雖然智能手機(jī)拍攝得到的二維碼路標(biāo)在圖像中對應(yīng)的區(qū)域會發(fā)生拉伸、扭曲等變化,但是其形狀依然近似四邊形,利用這一特征可以進(jìn)一步剔除一些干擾區(qū)域。具體的做法為:計算每個候選區(qū)的最小面積外接矩形(Minimum Area Bounding Rectangle,MABR)。在正常拍攝角度范圍內(nèi),二維碼路標(biāo)所在的候選區(qū)的面積與其最小面積外接矩形的面積的比值大于0.5,因此剔除候選區(qū)面積和它的MABR的面積的比值小于0.5的候選區(qū),完成第二輪篩選。將該輪篩選留下的候選區(qū)集合記為L_(round_2)。圖8為圖7(b)中的四個候選區(qū)的MABR,其中(a)、(c)、(d)為三個干擾候選區(qū)及其MABR,(b)為二維碼路標(biāo)所在的候選區(qū)及其MABR。
圖8 4個不同候選區(qū)的MABR
(3)確定二維碼路標(biāo)的精確位置:通過上一步的兩輪篩選,僅留下少量候選區(qū),從候選區(qū)集合L_(round_2)中取出一個候選區(qū),假設(shè)該候選區(qū)是二維碼所在的候選區(qū),尋找該區(qū)域的四個頂點。具體的做法為:
依次計算該候選區(qū)外輪廓上距離下面四條直線最近的點:①過圖像左上角點(0,0)且斜率為-1的直線;②過圖像右上角點(m,0)且斜率為1的直線;③過圖像右下角點(m,n)且斜率為-1的直線;④過圖像左下角點(0,n)且斜率為1的直線。
1.4 統(tǒng)計學(xué)方法 采用SPSS 22.0統(tǒng)計學(xué)軟件對數(shù)據(jù)進(jìn)行處理。計量資料以均數(shù)±標(biāo)準(zhǔn)差表示,組間比較采用t檢驗;計數(shù)資料以例(百分率)表示,組間比較采用χ2檢驗。以P<0.05為差異有統(tǒng)計學(xué)意義。
一般情況下,依次得到的四個點就是該候選區(qū)的四個頂點,如圖9(a)所示。但是一些特殊情況下,如候選區(qū)的外輪廓的某條邊平行于上述四條直線之一時,此時并不能得到候選區(qū)真正的頂點,如圖9(b)所示。
判斷得到的四個點是否為候選區(qū)真實頂點的原則為:當(dāng)計算得到的四個點是候選區(qū)真正頂點的情況下,由該四個點為頂點構(gòu)成的四邊形的面積與候選區(qū)的面積的比值接近于1;當(dāng)計算得到的四個點不是候選區(qū)真正頂點時,由該四個點為頂點構(gòu)成的四邊形的面積與候選區(qū)的面積的比值顯著小于1,以此判斷頂點提取失敗。此時繼續(xù)分別計算候選區(qū)外輪廓上距離圖像上邊沿、右邊沿、下邊沿、左邊沿最近的四個點作為候選區(qū)的頂點,如圖9中(c)。
圖9 提取候選區(qū)頂點
圖10 將候選區(qū)投影變換為正方形
得到候選區(qū)的四個頂點之后,將其進(jìn)行投影變換轉(zhuǎn)為正方形,如圖10所示。由于二維碼路標(biāo)內(nèi)部的編碼規(guī)則已知,根據(jù)轉(zhuǎn)換為正方形的區(qū)域內(nèi)部的像素分布是否符合二維碼路標(biāo)編碼規(guī)則判斷該區(qū)域是否為二維碼路標(biāo)區(qū)域,將不是二維碼路標(biāo)的候選區(qū)剔除。
經(jīng)過該輪篩選得到的候選區(qū)集合為L_(round_3),由于拍攝得到的照片中可能不止一個二維碼路標(biāo),此時獲得了L_(round_3)中每一個二維碼路標(biāo)所在的候選區(qū)的頂點的圖像坐標(biāo),即確定了每一個二維碼路標(biāo)在圖像中的精確位置。
根據(jù)二維碼路標(biāo)粗碼、細(xì)碼的編碼規(guī)則,對上一步驟獲得的每一個二維碼路標(biāo)進(jìn)行解碼獲得該二維碼路標(biāo)四個頂點在世界坐標(biāo)系下的三維坐標(biāo),與其在圖像坐標(biāo)系的像素坐標(biāo)形成4對3D-2D坐標(biāo)點對。當(dāng)檢測到N個二維碼路標(biāo)時,一共可以獲得4N個3D-2D坐標(biāo)點對。
對于三維物點和二維圖像點之間的對應(yīng)關(guān)系已知的情況,位姿估計經(jīng)常被稱為n點透視(PnP)問題[23]。PnP問題有很多種求解方法,如用三對點估計位姿的P3P[24]、直接線性變換(DLT)、EPnP(Efficient PnP)、UPnP[25]等。其中EPnP作為目前公認(rèn)的最高效的解析算法,得到了廣泛的應(yīng)用。同時,當(dāng)圖像點被精確提取時,EPnP的計算精度很高。因此本文采用EPnP算法進(jìn)行相機(jī)位姿的解算。
由于二維碼的設(shè)計與其檢測算法緊密相關(guān),無法用其他算法檢測本文設(shè)計的二維碼路標(biāo),也無法用本文的檢測算法檢測其他類型的二維碼,因此,為了驗證本文設(shè)計的二維碼路標(biāo)及其檢測算法的性能,將其與Zxing庫檢測QR Code的性能進(jìn)行對比。實驗中使用的Zxing庫版本為3.4.0。
設(shè)計并實施以下實驗:
實驗平臺:Inter? CoreTMi5-7200 CPU,主頻:2.50 GHz,內(nèi)存:8.00 GB;
圖11 實驗環(huán)境
圖像采集設(shè)備:三星s6智能手機(jī)(分辨率5 312×2 988像素,相機(jī)內(nèi)參由張正友標(biāo)定法標(biāo)定);
其他設(shè)備:全站儀(GEOMAX ZT20Pro系列無棱鏡型全站儀)、激光測距儀、量角器、皮尺、三腳架等。
二維碼尺寸:20 cm×20 cm,張貼于白色泡沫板上并固定在三腳架上;
實驗環(huán)境:由于室內(nèi)場地限制,實驗現(xiàn)場環(huán)境如圖11所示,實驗前將手機(jī)、二維碼、全站儀均用三腳架固定。為了更加直觀,將世界坐標(biāo)系原點建立在二維碼路標(biāo)中心點,世界坐標(biāo)系W系,相機(jī)坐標(biāo)系C系如圖12所示。
圖12 世界坐標(biāo)系(W系)和相機(jī)坐標(biāo)系(C系)示意圖
實驗1 如圖13所示,借助激光測距儀和量角器,使手機(jī)相機(jī)大致在0°、30°、45°、60°、75°方向上依次在距離二維碼中心1,2,3,…,8 m位置處采集圖像,每個位置采集5張圖像,二維碼路標(biāo)和QR Code分別采集200張圖像。在每個位置用全站儀測量出手機(jī)相機(jī)在世界坐標(biāo)系下的真實位置和姿態(tài)。
圖13 實驗一示意圖
圖14 實驗二示意圖
實驗2 如圖14所示,將手機(jī)相機(jī)放置在0°方向上,手機(jī)繞Z軸依次逆時針旋轉(zhuǎn)0°、15°、30°、45°,在距離二維碼中心1,2,3,…,8 m位置處采集圖像,
每個位置采集5張圖像,二維碼路標(biāo)和QR Code分別采集160張圖像,在每個位置用全站儀測量出手機(jī)相機(jī)在世界坐標(biāo)系下的真實位置和姿態(tài)。
實驗一模擬實際應(yīng)用中在不同距離、不同角度拍攝對算法性能的影響;實驗二模擬在實際使用中由于相機(jī)繞Z軸旋轉(zhuǎn)對算法性能的影響。用本文算法處理采集到的二維碼路標(biāo)圖像,用Zxing庫處理得到的QR Code圖像,統(tǒng)計兩種算法在不同拍攝條件下對二維碼的檢測準(zhǔn)確率情況,實驗結(jié)果如表1所示。
表1 Zxing庫和本文算法在不同拍攝條件下對二維碼的檢測準(zhǔn)確率情況對比
該結(jié)果表明,在拍攝距離小于8 m、拍攝角度范圍[-75°,75°]、拍攝時相機(jī)發(fā)生旋轉(zhuǎn)的情況下,本文設(shè)計的二維碼路標(biāo)都能夠正常工作,二維碼路標(biāo)檢測算法能夠準(zhǔn)確地檢測到二維碼路標(biāo),檢測準(zhǔn)確率100%。而Zxing庫對QR Code的檢測在拍攝距離大于5 m時檢測成功率為0;當(dāng)拍攝時發(fā)生傾斜或者旋轉(zhuǎn)時,也會大幅度降低解碼成功率。實驗一和實驗二中Zxing庫對QR Code的檢測準(zhǔn)確率為48.5%。因此,相比于Zxing解碼庫,本文設(shè)計的二維碼路標(biāo)以及檢測算法的工作范圍更廣、識別的準(zhǔn)確率更高,滿足手機(jī)用戶室內(nèi)定位的需求。
PnP問題的解算精度與點對個數(shù)、特征點的圖像坐標(biāo)精度、特征點之間的幾何條件、PnP算法的性能等因素有關(guān)。對于實驗中采用的20 cm×20 cm的單個二維碼,共得到4對3D-2D點對,圖15顯示不同拍攝條件下由該位置拍攝得到的圖像用EPnP算法解算得到的相機(jī)位置和姿態(tài)與真實位置和姿態(tài)的差值的絕對值。實驗結(jié)果表明,拍攝距離小于6 m、拍攝角度小于60°的情況下,利用該方法可以得到 1 m 以內(nèi)的位置誤差,10°以內(nèi)的姿態(tài)誤差;當(dāng)拍攝角度大于60°,拍攝距離大于6 m時,位置誤差和姿態(tài)誤差明顯增大。同時,手機(jī)繞Z軸旋轉(zhuǎn)對定位定姿性能幾乎沒有影響。
圖15 不同拍攝條件下利用單張二維碼進(jìn)行智能手機(jī)定位定姿的精度
本文設(shè)計了一種專門用于定位定姿的二維碼路標(biāo),該二維碼路標(biāo)具有粗碼、細(xì)碼兩種編碼結(jié)構(gòu),具有易于識別、工作距離遠(yuǎn)、范圍廣等特點。同時,提出一種二維碼路標(biāo)檢測算法,能夠穩(wěn)健、準(zhǔn)確地從圖像中檢測到二維碼路標(biāo)。最后,利用二維碼頂點的圖像坐標(biāo)及其世界坐標(biāo),使用EPnP算法解算手機(jī)相機(jī)中心的位置和姿態(tài)。實驗結(jié)果表明,對于張貼在淺色背景中且無遮擋的二維碼路標(biāo),在拍攝距離小于8 m、拍攝角度范圍[-75°,75°]以內(nèi)且拍攝時相機(jī)發(fā)生一定程度旋轉(zhuǎn)的情況下,本文設(shè)計的二維碼路標(biāo)都能夠正常工作,二維碼路標(biāo)檢測算法能夠準(zhǔn)確地檢測到二維碼路標(biāo)。因此該方法符合手機(jī)用戶室內(nèi)定位的需求,具有很高的實用價值。