袁 寧,范有情,何 濤
(1湖北工業(yè)大學(xué)現(xiàn)代制造質(zhì)量工程重點實驗室,湖北 武漢430068;2湖北工業(yè)大學(xué)機械工程學(xué)院,湖北 武漢430068)
隨著計算機視覺技術(shù)的發(fā)展,對三維重建的開發(fā)效率、軟件產(chǎn)品質(zhì)量以及重建速度的要求越來越突出[1].在數(shù)值化計算程度高的雙目視覺三維重建的應(yīng)用程序開發(fā)中,利用Matlab實現(xiàn)矩陣計算和數(shù)值計算較多的相機標定部分以及三維繪圖部分,利用VC++實現(xiàn)程序界面、圖像采集以及立體匹配等部分.而Matlab語言和C語言相比較,它具有語言簡單、內(nèi)涵豐富、易學(xué)易用等優(yōu)點,尤其是它提供了豐富的繪圖函數(shù)和命令,可方便地繪制一維、二維和三維圖形,如線性圖、極坐標圖、直方圖、等高線圖、落差圖等[2].針對傳統(tǒng)的利用單一環(huán)境實現(xiàn)三維重建的軟件開發(fā)效率和重建速度受局限等問題,本文提出了一種基于VC++與Matlab混合編程的雙目視覺三維重建方法.
Matlab可以通過引擎的方式與其他編程環(huán)境下的程序?qū)崿F(xiàn)通信,將Matlab作為一個計算引擎使用,讓其在后臺運行,完成復(fù)雜的矩陣計算,簡化前臺用戶程序設(shè)計的任務(wù).與其他各種接口相比,引擎所提供的Matlab功能支持是最全面的.通過引擎方式,應(yīng)用程序會打開一個新的Matlab進程,可以控制它完成任何Matlab所支持的計算和繪圖等操作.在數(shù)據(jù)交流方面,可以對幾乎所有的基本數(shù)據(jù)類型提供支持.同時以引擎方式打開的Matlab進程以非常友好的界面方式支持Matlab的各種操作[2].
在編程環(huán)境中使用Matlab引擎擴展編程的基本操作步驟為:1)對開發(fā)環(huán)境進行必要的設(shè)置;2)創(chuàng)建Matlab引擎對象;3)向引擎空間寫入數(shù)據(jù);4)調(diào)用Matlab命令處理數(shù)據(jù);5)從引擎空間讀取數(shù)據(jù);6)釋放Matlab引擎對象.如果在VC集成環(huán)境下利用Matlab引擎實現(xiàn)VC和Matlab的混合編程,一般需要對VC++與Matlab混合編程的編譯環(huán)境進行設(shè)置,在完成了若干基本步驟后即可利用Matlab引擎庫函數(shù)engEvalString來調(diào)用Matlab的內(nèi)建函數(shù)[3].
雙目視覺的三維重建系統(tǒng)包括兩個computar的16mm鏡頭和2個西安方誠科技的VDC-FD 130M型CCD相機(圖1).
圖1 雙目視覺示意圖
該三維重建系統(tǒng)的軟件部分是以VC++為基本框架,調(diào)用 Matlab engine來實現(xiàn)三維重建的工作.開發(fā)環(huán)境:Win2000、VC++6.0和 Matlab7.0.該系統(tǒng)采用的具體流程如圖2所示.
圖2 三維重建基本流程
為了從圖像中獲取世界坐標系中三維物點與像點的對應(yīng)關(guān)系(圖3),計算物體的形狀位置等信息,必須建立相機成像的集合模型并獲得其參數(shù).在大多數(shù)條件下,這些參數(shù)必須通過計算與實驗才能得到,這種求解參數(shù)的過程稱為相機標定[5].
圖3 相機標定模型
設(shè)(Xw,Yw,Zw)是三維世界坐標系中某目標點p的三維坐標,(x,y,z)是該點在相機坐標系(定義如下圖所示)中的坐標.相機坐標系定義為:中心在O點(光學(xué)中心),Z軸與光軸重合,(X,Y)是中心在Oi點(光軸z與圖像平面的交點)且平行于x,y軸的圖像坐標系,有效焦距f是圖像平面和光心的距離.(xu,yu)是在理想Pin-h(huán)ole模型下P點的圖像坐標,(xd,yd)是由透鏡畸變引起的(dxu,dyu)偏離的實際圖像坐標[11].
相機標定部分涉及到了大量的矩陣運算,而Matlab具有強大的數(shù)學(xué)運算功能,并且有專業(yè)的相機標定工具箱.
利用Matlab相機標定工具箱對一個基于15張平面西洋跳棋盤圖片的全面標定.具體步驟:1)裝入標定圖片;2)提取圖像角點;3)運行主標定程序;4)顯示結(jié)果;5)控制精度;6)添加或減少圖片;7)糾正圖片畸變;8)以不同格式輸出標定數(shù)據(jù).標定板圖集如圖4所示.
標定的結(jié)果被保存在Matlab的二進制文件(mat文件)里以便于數(shù)據(jù)傳遞.圖5所示為左右兩個相機與標定板之間的位置關(guān)系.圖6所示為相機標定工具箱獲得標定結(jié)果的誤差分析.從圖中可以看出每個標定板圖像的誤差范圍,便于添加或減少圖片,通過進一步標定獲得誤差更小的標定結(jié)果.
通過Matlab相機標定工具箱可以簡便快速地完成相機的標定以及標定結(jié)果數(shù)據(jù)的存儲與傳遞,避免了利用VC++標定的復(fù)雜過程,有效提高了相機標定的效率.
通過CCD工業(yè)相機獲取圖像后,考慮到光照、噪聲以及相機性能等條件的影響,需要對獲取的圖像做進一步處理,以提高圖像清晰度,改善視覺效果,將圖像轉(zhuǎn)換成更適合人或計算機分析處理的形式[4].該過程包括兩個部分:1)圖像的濾波、增強及平滑;2)目標物體與背景的分離.在VC++環(huán)境中有圖像預(yù)處理算法集,能夠完全滿足三維重建中原始圖像的預(yù)處理要求.因此,圖像預(yù)處理部分在VC++環(huán)境中實現(xiàn).
特征點提取是通過 Harris[6]算法實現(xiàn).Harris特征提取算法的思想是:在圖像中設(shè)計一個局部檢測窗口,當(dāng)該窗口沿任一方向做微小移動時,檢測窗口平均能量的變化.當(dāng)能量變化值超過了設(shè)定閾值時,則將窗口中心像素點設(shè)為角點.圖像亮度
Harris算法的角點響應(yīng)函數(shù)
式中,det(M)=λ1λ2=AB-C2;trace(M)=λ1+λ2=A+B;k為經(jīng)驗值,取0.04.角點對應(yīng)于函數(shù)R的局部極大值點.當(dāng)圖像上某點像素的R值大于給定的閾值T時,就把該點作為特征點.
立體匹配是三維重建的核心問題.立體匹配是指將在不同視點下拍攝到的同一空間場景的投影圖像中的映像點對應(yīng)起來,并生成相應(yīng)的視差圖的過程[7].對于實際的立體圖像對,求解其對應(yīng)問題極具挑戰(zhàn)性,可以說是立體視覺中最困難的一步.Barnard[8]回顧了立體重構(gòu)的基本原理,對主要的匹配方法做了綜述,并且給出了算法新能的評價標準.Dhond[9]總結(jié)了大量的立體匹配算法,并介紹了分級處理思想,提出了使用三目約束減少立體匹配的不確定性.Koschan[10]對動態(tài)立體和主動立體、早期的遮擋和無紋理問題以及實時立體視覺實現(xiàn)進行了探討與總結(jié).
本文設(shè)計了一種基于置信度傳播的立體匹配算法模型,在Harris角點提取算法的基礎(chǔ)上實現(xiàn)立體匹配.圖7為本文立體匹配流程圖.
在VC++的編譯環(huán)境中編寫程序的主界面(圖8).在程序主界面中,點擊按鍵可以有效調(diào)用Matlab內(nèi)置函數(shù).基于雙目視覺的三維重建中包含相機標定、立體匹配、三維重構(gòu)等三部分.
三維重構(gòu)部分在matlab環(huán)境中實現(xiàn),因其有著強大的繪圖功能,在前期工作的數(shù)據(jù)結(jié)果基礎(chǔ)上,可以快速獲得需要的三維圖.圖8中的“顯示三維圖”按鍵調(diào)用Matlab engine來繪制三維圖.圖9a為左相機拍攝軸承圖片,圖9b為右相機拍攝軸承圖片,圖9c為三維重建以后獲得的軸承三維圖.
本文的三維重建是VC++和Matlab混合編程的一個應(yīng)用,即以VC++環(huán)境為程序主框架,并且利用其完成每個界面,同時利用Matlab強大的數(shù)學(xué)計算和繪圖功能,完成整個工作.在實際的數(shù)值計算、控制系統(tǒng)開發(fā)等工程應(yīng)用中,可以很好地利用二者混合編程技術(shù),從而簡化應(yīng)用程序的開發(fā).
三維重建技術(shù)是計算機視覺、人工智能、虛擬現(xiàn)實、醫(yī)學(xué)圖像等前沿領(lǐng)域的熱點和難點,也是在基礎(chǔ)研究和應(yīng)用研究中面臨的重大挑戰(zhàn)之一.本文通過對VC++和Matlab的集成開發(fā),以精練的代碼和較高的運行效率實現(xiàn)對二維圖像的三維重建.該系統(tǒng)不僅穩(wěn)定,而且操作簡單,提高了自動化的程度.
[1]史利民,郭復(fù)勝,高 偉,等.基于語義交互的三維重建[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2011(5):731-734.
[2]王素立,高 潔,孫新德.MATLAB混合編程與工程應(yīng)用[M].北京:清華大學(xué)出版社,2008.
[3]景征駿,許家民.VC++與 MATLAB混合編程及其應(yīng)用[J].計算機與信息技術(shù),2006(12):70-71.
[4]馮 宇.基于計算機立體視覺的三維重建系統(tǒng)研究[D].青島:青島科技大學(xué)圖書館,2009.
[5]趙 娟,曾 強,魏林媛,等.基于立體視覺的三維模型重建系統(tǒng)設(shè)計[J].光電系統(tǒng),2011(2):12-14,30.
[6]Harris C,Stephens M.A Co mbined C0rner and Edge Detector[C]∥Fourth Alvey Vision Conference,1988:147-151.
[7]魏 沖.基于數(shù)碼相機圖像的三維重建技術(shù)研究[D].太原:中北大學(xué)圖書館,2009.
[8]Barnard S T,F(xiàn)ischler M A.Computational stereo[J].ACM Computing Surverys,1982.
[9]Dhond U R,Aggarwal J K.Structure from stereo-Areview[J].IEEE Trans on Systems,Man and Cybernetics,1989,19(6):1 489-1 510.
[10]Koschan A.What is new in computational stereo since 1989:A survey of current stereo papers[R].Berlin:Technical University of Berlin,1993.
[11]張 楠.雙目立體視覺的攝像機標定方法研究[D].武漢:湖北工業(yè)大學(xué)圖書館,2008.