王連增
(中國空空導彈研究院,洛陽471009)
視覺導航技術是一種依靠光學成像技術進行導航的方法,它具有測量速度快、測量精度高、自主性強、隱蔽性好、低成本等優點。近30 年,伴隨著光學成像技術及視覺導航技術新概念、新方法、新理論發展,視覺導航技術在飛機、無人飛行(Unmanned Air Vehicles,UAV)、火星探測車、航天器、巡航導彈以及自動駕駛等方面得到普遍的應用,同時,視覺導航技術與其他導航手段相結合成為近些年發展的新趨勢,其能夠在衛星拒止條件下實現對INS 誤差的有效補償,使其成為SINS/GPS 傳統導航手段外的新的組合導航形式,并成功實現在國外空地導彈上的應用。
雙目視覺是通過左右兩個相機模擬人眼采集圖像信息的過程,用專業的圖像處理器替代人腦對圖像的處理過程,通過對不同視角對同一圖像拍攝兩張二維圖像來恢復圖像三維信息的一種方法。雙目視覺技術具有計算精度高、系統簡單易于實現、操作過程簡便、不過分依賴于硬件產品易于工程化實現等特點,是機器視覺重要研究方向。對于雙目視覺成像過程,涉及到4 個坐標系,分別為:像素坐標系、圖像坐標系、相機坐標系和世界坐標系。許威在基于MATLAB 和Open CV 的雙目視覺測距系統的實現一文中完成了測距系統的搭建工作,并從實時性及測距精度方面完成了SGBM(Semi-Global Block Matching)算法與BM 算法的對比驗證工作。汪珍珍在基于MATLAB 與OpenCV 相結合的雙目立體視覺測距系統一文中完成了測距系統的搭建工作,并通過SAD 算法完成了圖像匹配工作。
本文在Win10 操作環境下,用MATLAB 標定工具箱完成雙目攝像頭標定,采用VS2017 與OpenCV3.1 相結合的方法開發一種雙目視覺定位測距系統,以PC 為中心,由雙目攝像頭、圖像采集、處理等模塊構成,實現雙目圖像的獲取、矯正、匹配以及目標深度信息獲取等功能。在系統實現過程中,通過Canny 邊緣檢測算法對匹配進行約束,以解決SGBM 算法匹配算法慢等問題。

圖1 雙目視覺定位測距系統及雙目攝像頭
由圖2 可知,Ol和Or為雙目攝像頭左、右光學中心,其光軸與成像平面如圖2 所示。 f 表示攝像機焦距,T 表示左、右攝像頭光學中心之間的間隔。通過式(1)和(2)可以求得Z,也就獲得了距離信息。

圖2 平行雙目視覺模型
根據相似三角形原理,有:

可得:

式(2)中:xl、xr分別為空間點P 在雙目攝像頭成像上平面的投影點Pl、Pr橫坐標值。
由式(2)能夠定量計算目標點P 在空間中的深度信息Z。式(2)中,焦距f 和基線T 可通過相機標定得到,在確定的雙目視覺測距系統中,通常焦距f 和基線T 是固定不變的,因此,只要獲得了視差d=xl-xr即可獲得距離信息。上述三角測量法只是定量的描述雙目立體測距的模型,在實際的算法實現中,為提高測距信息的精度,通常采用最小二乘法進行深度信息的精確求解。
如圖1 平行雙目視覺模型所示,空間中點P 在左右相機坐標系下的投影點為Pl和Pr,可以利用矩陣形式描述上述成像模型,其中左、右相機的投影矩陣可以由雙目相機標定的過程獲取,包括雙目相機的內參數、旋轉矩陣、畸變參數、平移向量等,記為M1、M2,此時有:


式中,( u1,v1,1) 和( u2,v2,1) 分別為Pl和Pr在雙目相機各自圖像坐標系下的齊次坐標表示,( X,Y,Z,1) 為其對應的點P 在世界坐標下的齊次坐標,則式(3)和(4)中的Zc1和Zc2可以得到:

將式(5)和(6)寫成矩陣的形式有:

此時可以將式(7)寫成:

式中,K 和U 已知,此時根據最小二乘法即可求解得到:

式(9)中的X 即為未知數向量的值,此時,可以得到Z 的精確值。
相機標定是視覺定位技術中的必要過程,是一種通過構建相機像素點和空間物體位置間的聯系,最終求得相機成像模型并完成數學表達對三維位置確定。成像模型中所要求得的參數為像機的內、外參數。通過矩陣能夠表征相機與放置環境位置和方向之間聯系的參數稱為相機外參數;相機焦距、鏡頭畸變系數等由幾何光學特性影響的相機自身參數稱為內參數,如果已經得知兩個圖片特征點立體匹配關系,那么通過簡單的三角測量,通過上述的標定參數即可完成目標點的空間坐標重建過程。因此,標定是雙目立體視覺的基礎和必要過程,其結果好壞將決定對目標物體實現三維測量的精度值。
雙目相機的標定工作,主要分為以下兩個過程:先通過MATLAB 標定工具箱分別對左、右兩個相機單目標定,求得其內部參數,其次再通過雙目標定工作求解兩個相機之間相對的位置關系。上述的求解過程均能夠通過MATLAB 標定工具箱求解實現。在本標定實驗中,選取8×12 格,15mm×15mm 組成的標準棋盤格,通過雙目攝像頭分別完成不同拍攝角度、不同拍攝距離20 張棋盤格照片的拍攝,且拍攝過程中應確保黑白棋盤格盡量處于圖像的中心,且無遮擋。
具體標定流程如圖3 所示。

圖3 標定實現流程圖

圖4 雙目攝像頭標定結果
在雙目視覺匹配中,為提高SGBM 算法匹配的精度及快速性,并減少系統的誤匹配操作,在系統中通過Canny 邊緣檢測算法對匹配過程進行約束。Canny 提出高斯函數的一階導數是受白噪聲影響的階躍邊緣的最優逼近。通對稱二維高斯函數對圖像與做卷積處理后,再沿著梯度方向做微分處理,就可以形成一個方向算子。因此,Canny 邊緣檢測過程可以簡單由兩個過程實現,先設計高斯濾波器完成平滑處理,然后再進行梯度計算。其具體實現如下:
(1)通過建立高斯濾波器完成圖像預處理工作,消除圖像信息中的噪聲干擾;圖像f( x,y )與二維高斯函數G( x,y )做卷積運算。

(2)通過高斯算子一階微分過程完成圖像濾波工作,獲得圖像單點像素的梯度模值 ||G 以及方向θ;邊緣強度為可描述,邊緣方向描述為
(3)對圖像單點像素梯度進行非極大抑制,完成其邊緣細化處理工作;判斷梯度值是否是圖像局部極大值,把邊緣細化為單像素。
(4)閾值化和圖像邊緣連接,提高檢測準確度。

圖5 Canny算法流程圖

圖6 Canny邊緣檢測算法結果
SGBM 匹配算法的核心是由雙目圖像的信息閾H1和H2及其聯合信息閾H1,2來進行互信息MI1,2的定義,并以MI1,2作為基礎,其定義如下:

圖像信息閾H 用直方圖描繪的概率分布計算。聯合圖像的信息閾H1,2可以通過對互匹配影像灰度的聯合概率分布求解獲得。
該算法的基本流程為:
(1)逐像素匹配計算。函數d( xi,yi,IL,IR)表征左、右雙目圖像中某兩個點為同名像點的可能性。

式(12)中,xi和yi表示左、右雙目圖像中處于同一掃描線上的兩個像點。將掃描線上左圖像點x 的灰度信息表示為IL( x );掃描線上右圖像點y 的灰度信息IR可以通過采樣點線性內插差值獲取。
(2)基于Canny 算法的圖像邊緣約束。對左目圖像掃描線上的檢測到邊緣信息點,通過SGBM 算法在右圖像掃描線上獲取,將二維匹配運算通過目標點圖像邊緣約束實現掃描線上一維相關計算。
(3)視差計算。用迭代運算完成視差計算,首先,通過隨機視差影像糾正右影像,然后進行左右圖像對匹配,產成新的視差影像;也可通過分等級計算的方法進行視差計算,先在半分辨率情況下計算視差影像作為初值,然后對視差影像進行遞歸計算。
(4)誤匹配的剔除。左、右視覺圖像同名點匹配完成后,通過右視覺圖像中的同名點反向匹配左視覺圖像中的匹配點,與由左圖像和右圖像進行匹配得到的視差不同,則視之為誤匹配,重復上述計算過程,從新進行匹配。

圖7 SGBM算法雙目匹配結果
Step1:圖像讀取。讀取拍攝好的同一時刻左目、右目圖像各一張;

圖8
Step2:圖像校正。運用Remap 函數進行圖像校正。圖像校正完成后,輸出雙目行對齊圖像(雙目圖像能夠自動行對齊說明雙目標定結果基本正確);

圖9
Step3:SGBM 算法雙目圖像匹配;
Step4:坐標系映射計算三維坐標。坐標系映射是運用ReprojectImageTo3D 功能將雙目匹配得到的像素視差數據轉化為世界坐標系的三維坐標;
Step5:像素視差圖顯示。像素視差值是以像素為單位的“距離值”,像素視差值與世界坐標系的三維坐標值直接相關;

圖10
Step6:像素視差圖上選定點的xyz 三維坐標值顯示。運行程序后,鼠標點擊上圖所示像素視差圖上的任意一點,則會從xyz 這個矩陣中自動讀取被點擊像素點對應的三維坐標值,并將結果顯示在命令提示符界面窗口。

圖11
三維坐標原點為左目圖像光心點(即左目的ccpoint,該點可標定后獲取)三維坐標單位:mm,像素視差圖與校正后輸出的左目圖像一一對應。
本文主要設計了一種在Win10 操作系統的PC上,實現VS2017 與OpenCV3.1 相結合的雙目視覺定位測距系統。基于雙目測距基本原理,通過MATLAB標定工具箱完成雙目攝像頭標定,并將結果導入程序中。利用Canny 邊緣檢測算法實現對SGBM 算法中的匹配進行約束,完成平行雙目測距功能,并以為左目圖像光心點為三維坐標原點,輸出目標點的三維坐標信息。通過雙目測距實驗可知,基于Win10+VS2017+OpenCV3.1 的雙目視覺定位測距系統能夠較好完成雙目圖像的立體匹配以及視差圖獲取工作,并能夠獲得圖像中被選擇點的三維位置信息,完成目標點的定位功能。