李興坤, 肖世德, 董慶豐
(西南交通大學 機械工程學院,四川 成都 610031)
機器人技術是一項綜合性的、交叉性的技術,涉及領域十分廣泛,其中導航技術是實現移動機器人智能化和自主化關鍵的一環。目前有適應各種不同環境的多種導航方式,常見的導航方式有激光導航、慣性導航、磁導航、視覺導航、全球定位系統(global positioning system,GPS)導航等[1]。當前GPS導航廣泛應用于城市規劃道路下車輛和行人的導航,具有很高的智能性和成熟度。但自主式移動機器人所面臨的環境具有較高的未知性、隨機性和復雜性。由于視覺傳感器獲取的圖像信息量大,特征豐富,安裝方便,是機器人自主導航的重要手段[2]。人眼觀察三維世界時,由于幾何光學的投影,同一物體在兩眼的視網膜上產生的影像之間存在生理視差,它反映了客觀景物的深度[3]。雙目立體視覺系統即是通過兩個視點觀察同一場景獲取兩幅圖像,根據三角測量原理計算左右視圖對應像素點間的視差(disparity),獲取深度信息,從而實現場景三維重建[4]。完整的立體視覺分為6個模塊:攝像機標定、圖像獲取、特征提取、立體匹配、空間信息恢復和后處理[5]。
本文采用區域匹配方法匹配左右視圖,利用視差圖求取場景內各點深度信息,構建三維環境,結合左視圖二維輪廓特征提取環境三維輪廓,并結合模板匹配算法獲取場景內主要物體的三維坐標信息,驗證三維重建的準確性,為機器人實現路徑修正及避障提供可參考的環境數據。
三維輪廓提取的整體實現框圖如圖1所示。包括6個部分,本文將按照該框圖分步實現三維場景的輪廓提取。

圖1 方案整體框圖
攝像機標定是得到攝像機成像模型參數的過程[6]。攝像機參數包括內部參數和外部參數兩部分。在MATLAB中可利用Stereo Camera Calibrator工具箱對雙目像機進行標定。為了保證標定結果的準確性,拍攝棋盤格時應適當增加樣本數量,經過工具箱篩選后,保留角度距離更為合適的圖片。標定的結果保存在.mat文件中,相機標定參數保存在變量stereoParams中,部分參數如表1所示。

表1 相機標定參數
雙目視覺中常用的左右視圖匹配方法有特征點匹配法和區域匹配法,主要的特征點匹配方法有SIFT,SURF,ORB,等。對于三維重建來說,特征點匹配算法得到的匹配點過于稀疏,不夠用于重建完整的三維場景,因此選擇區域匹配法來獲取視差圖。利用區域匹配求取視差圖的方法有基本塊匹配(SAD)和半全局塊匹配(SGM)。基本塊匹配即累計絕對灰度差區域匹配法獲取左右視圖匹配點的視差的定義[7]為
(1)
式中Iright,Ileft分別為左右視圖中對應點灰度,該算法常用于圖像匹配算法,思路簡單,但計算精度較低,一般用于粗糙處理。
半全局塊匹配的思路是通過選取每個像素點的視差,組成一個視差圖,設置一個和視差圖相關的全局能量函數,使這個全局能量最小化,以達到求解每個像素最優視差的目的。其能量函數形式[8]為
(2)
式中E(D)為視差圖D所對應的能量函數;p,q為圖中的某個像素;Np為像素p的相鄰像素點;c(p,Dp)為視差為Dp的像素點p的代價值cost;P1,P2分別為像素點p與相鄰像素q的視差值絕對值相差1和大于1的懲罰系數;I(·)為邏輯函數,“·”為真則返回1,為假則返回0。
在半全局塊匹配中,該方法強制對相鄰塊像素進行比較計算,這種附加約束使得視差估計比基本塊匹配更加全面,因此選擇SGM匹配方法。在計算視差之前,需要矯正左右視圖,使相應點具有相同的行坐標,降低視差計算的復雜度。用雙目相機拍攝的小場景左右視圖如圖2所示。

圖2 左右視圖
對應點間的視差與其深度有關,并隨深度的增大而減小,無窮遠處的視差可視為零。根據對象深度范圍設置一個較小的視差搜索范圍,以提高運算速度。除了視差搜索范圍外,該算法還有幾個重要的參數會對計算效率和視差圖效果產生較大影響,根據實際應用場景合理設計核心參數:DisparityRange為[0 ,192],BlockSize為13,ContrastThreshold為0.5,UniquenessThreshold為10,DistanceThres-hold為Disabled,TextureThreshold為0.0002。得到左右圖像之間的視差圖如圖3所示。

圖3 視差
得到視差圖后,可以根據雙目視覺的三角測距原理,計算場景中各點在世界坐標系中的X,Y,Z坐標值[9]為
X=xld0/D,Y=yld0/D,Z=fd0/D
(3)
式中xl,yl為特征點在左圖像中的坐標,f為攝像機焦距,d0為兩攝像機的基線距離,D為左右兩幅圖匹配點的視差。
三維點云的計算主要依據視差圖和標定的相機參數。返回的坐標保存在p3D中,由于噪聲和誤差的存在,會有一些無效的匹配點,將其標記為NAN。為了突出后續三維場景輪廓的提取效果,搭建了一個較小的近距離實驗場景,創建合理點云觀察窗口,設置顯示空間范圍為X∈[-0.4,0.4],Y∈[-0.4,0.4],Z∈[0,0.5],坐標原點為雙目相機基線中心位置,坐標軸單位為m,遍歷點云數組,將無效點(NAN)過濾掉,顯示重建后的三維場景如圖4所示。

圖4 重建的三維場景
根據實際需要,機器人視覺導航中往往并不需要構建出完整的三維場景,獲取主要的三維輪廓和空間劃分情況即可。本文據此提出了一種三維輪廓的提取方法。該方法是在左視圖二維輪廓的基礎上實現的,常用的邊緣檢測算子有Sobel,Prewitt,Robert,Log,Canny[10],等,其中,Canny算子以其好的信噪比、高的定位精度、單邊緣響應三個嚴格的邊緣檢測評價標準得到了廣泛的應用。針對原場景的左視圖采用Canny邊緣檢測[11]提出其二維輪廓。
1)利用一維高斯函數對左視圖的行和列進行低通平滑濾波
(4)
2)計算平滑后圖像的x,y方向的偏導數
(5)
3)利用二范數計算梯度幅值和梯度方向,設置邊緣閾值thresh,thresh包含高低閾值2個元素,閾值的設定決定了輪廓提取的嚴格程度,高閾值取值越大圖像越平滑,邊緣輪廓越稀疏,為了突出三維輪廓的提取效果,顯示較多輪廓,設定閾值為[0.04,0.1],選取邊緣點,得到二維輪廓圖如5所示。

圖5 左視圖的二維輪廓
二維輪廓表示為二值形式,高亮的邊緣由灰度值1表示,黑暗的區域由灰度值0表示。掃描視圖的像素坐標,篩選出灰度值為1的像素坐標。由圖5可以看出,二維輪廓視圖含有大量零值,存儲零值和存儲其他數值一樣,都要占用空間和計算時間,考慮到直接用普通圖像矩陣描述方式會造成存儲空間的浪費和后續運算效率的降低,采用Sparse函數來優化
S=sparse(outlinepic)
(6)
Sparse函數將全元素矩陣outlinepic轉換為稀疏矩陣S。S只存儲非零值的索引和相應的數值,其邏輯表達式為
S={(R(i),L(i))1}
(7)
式中i為輪廓線上像素點的序號,取值為從1到size(S)間的整數,R(i)和L(i)為像素點的行列坐標。
點云數據存儲在p3D中,p3D是一個MXNX3的三維數組,MXN表示左視圖的像素矩陣的行數和列數,第三維的3個數表示對應像素點的三維坐標值X,Y,Z。根據二維輪廓圖求得輪廓點的像素坐標并保存在S中,遍歷S中的坐標,并提取p3D中相應點的三維坐標并保存,便獲得了場景輪廓的三維坐標數組。在點云觀察窗口顯示出提取的三維輪廓如圖6所示。

圖6 三維輪廓
通過模板匹配算法可以獲取場景內主要物體中心點的三維坐標,驗證三維重建的精度。經典的NCC匹配算法是在目標圖像中按模板圖像尺寸逐步搜索子圖,計算互相關值,相關值最大的位置即模板圖像在搜索圖像中的位置[12]。以小金屬盒為例,模板圖像7在搜索圖像8中的匹配結果如圖所示,點“*”為物體中心點的位置。

圖7 模版圖像與搜索圖像
通過對場景內的物體進行多次模板匹配獲取其中心點的平均像素坐標,并利用p3D中像素—三維坐標的映射關系,獲取物體中心點的三維坐標,計算與實際測量的位置坐標間的三軸平均誤差,列于表2。
由實驗結果可以看出:通過對相機標定、視差匹配算法和三維重建技術的研究,實現了對小場景的三維重構;在此基礎上,考慮視覺導航的實際需要和后續處理過程簡潔性,提出了三維輪廓提取方法,仿真結果表明:該方法可以有效的提取出場景輪廓,且通過改變輪廓復雜度閾值能調整輪廓的精細程度;最后通過NCC模板匹配算法獲取的物體中心點的三維坐標驗證了重建場景的精度,誤差顯示所提方法可以為機器人的視覺導航提供簡潔而充足的環境數據。后續研究即可將雙目相機和機器人結合,利用雙目視覺傳感器采集的環境信息實現機器人移動過程中的視覺導航和軌跡修正功能。

表2 三維場景重建誤差