王 浩,許志聞,謝 坤,李 杰,宋成璐
(吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,長春130012)
基于OpenCV 的雙目測距系統(tǒng)
王 浩,許志聞,謝 坤,李 杰,宋成璐
(吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,長春130012)
為解決利用雙目設(shè)備實(shí)現(xiàn)測距并使測距時(shí)間控制在毫秒級的問題,研究了攝像機(jī)標(biāo)定、立體校正、極線約束下的塊匹配和三維重建等關(guān)鍵技術(shù)。使用立體相機(jī)將拍攝多個(gè)角度的棋盤照片保存到計(jì)算機(jī)中進(jìn)行角點(diǎn)檢測和標(biāo)定,以獲得攝像機(jī)參數(shù)。使用Bouguet標(biāo)定立體校正算法、立體匹配使用塊匹配方法。得到視差圖后求出三維點(diǎn)云,進(jìn)行三維重建,根據(jù)三角相似原理計(jì)算目標(biāo)物體的距離。使用OpenCV2.4.3,在VS2010編譯環(huán)境下,用VC++編程實(shí)現(xiàn)。該系統(tǒng)只需普通立體相機(jī)采集圖像,成本低,與其他立體匹配方法相比,塊匹配方案測距速度快且準(zhǔn)確度滿足應(yīng)用的要求。
開源計(jì)算機(jī)視覺庫;塊匹配;立體視覺;三維重建;測距
人眼的立體感知能力雖然很強(qiáng),能很輕松地正確判斷出兩個(gè)物體的深度順序,但卻無法得到物體精確的距離信息。利用計(jì)算機(jī)立體視覺,通過精確的標(biāo)定,在匹配正確的情況下可以得到非常精確的深度等信息。隨著社會的發(fā)展和科技的進(jìn)步,立體測距的應(yīng)用領(lǐng)域越來越廣泛。目前具有代表性的測距方法有以下3種:1)單攝像頭配合一個(gè)激光筆[1]。該方法簡單精確,但通過一次計(jì)算只能得到一個(gè)點(diǎn)的距離。2)單攝像頭配合紅外線。該方法應(yīng)用前景廣泛但實(shí)現(xiàn)難度大,且成本較高。3)利用雙攝像頭進(jìn)行立體測距。該方法能同時(shí)得到圖像上多個(gè)物體的距離,但沒匹配到的物體的距離無法得到。
雙目立體視覺研究的關(guān)鍵在于標(biāo)定攝像機(jī)和立體匹配兩個(gè)方向。其使用單目成像設(shè)備從不同的位置獲取被測目標(biāo)物體的多個(gè)圖像,或利用雙目成像設(shè)備(如立體攝像機(jī)、立體相機(jī))的左右攝像頭獲取被測目標(biāo)物體的同一時(shí)刻左右圖像;利用得到的圖像對,基于已經(jīng)建立的立體視覺模型通過計(jì)算左右圖像對應(yīng)點(diǎn)間的位移偏差[2-4];再結(jié)合攝像機(jī)焦距等參數(shù),使用三角相似等數(shù)學(xué)方法計(jì)算被測目標(biāo)物體離攝像機(jī)的距離。筆者基于PC機(jī)與立體相機(jī)利用該方法實(shí)現(xiàn)測距。
開源計(jì)算機(jī)視覺庫(OpenCV:Open Source Computer Vision Library)實(shí)現(xiàn)了計(jì)算機(jī)視覺相關(guān)的許多算法,同時(shí)也實(shí)現(xiàn)了圖像處理很多常見的通用算法。實(shí)現(xiàn)代碼由C函數(shù)和C++類構(gòu)成,運(yùn)行十分高效。該系統(tǒng)的核心功能使用OpenCV實(shí)現(xiàn)。
為實(shí)現(xiàn)雙目立體測距,筆者使用一個(gè)立體相機(jī)(見圖1),用來同時(shí)獲取目標(biāo)物體兩個(gè)不同角度的圖像。
圖1 實(shí)驗(yàn)中所用的立體相機(jī)Fig.1 The 3D camera used in our experiment
計(jì)算機(jī)負(fù)責(zé)處理來自立體相機(jī)的圖像,計(jì)算并輸出目標(biāo)物體的距離。雙目立體測距系統(tǒng)的主要框架如圖2所示。
圖2 雙目測距系統(tǒng)框架Fig.2 Frame of the binocular measuring system
在最簡單的針孔模型中[2,5],光線從目標(biāo)物體發(fā)射出,然后通過針孔到達(dá)成像平面。針孔模型如圖3所示,其中f為焦距,X是目標(biāo)物體的長度,x是攝像機(jī)成像平面上形成的物體圖像,Z為目標(biāo)物體與攝像機(jī)之間的距離。根據(jù)相似三角形原理有
圖3 針孔攝像機(jī)模型Fig.3 Pinhole camera model
在實(shí)際使用的攝像機(jī)中,因?yàn)橹圃旃に嚨南拗浦鼽c(diǎn)不能保證在成像設(shè)備的正中心位置,所以引入兩個(gè)參數(shù)cx和cy表示真實(shí)主點(diǎn)與理想主點(diǎn)間的偏移。因?yàn)橄袼攸c(diǎn)在一個(gè)普通攝像機(jī)上不能保證是正方形,所以使用兩個(gè)不同的焦距 fx和 fy。假設(shè)成像平面上的點(diǎn)為 q=[x y 1]T,目標(biāo)物體點(diǎn)為 Q=[X Y Z 1],引入?yún)?shù)s(比例因子)和單應(yīng)性矩陣H,其定義如下
其中H由兩個(gè)矩陣表示[6]:H=MW。且
為攝像機(jī)內(nèi)參數(shù)矩陣。
用于目標(biāo)物體平面與攝像機(jī)平面的旋轉(zhuǎn)平移變換,即攝像機(jī)外參數(shù)矩陣。
考慮到透鏡畸變,假設(shè)qp(xp,yp)為校正后的點(diǎn),qd(xd,yd)為畸變后的點(diǎn),則有
其中(k1,k2,p1,p2,k3)構(gòu)成一個(gè)5×1的矩陣,該矩陣就是攝像機(jī)的畸變矩陣。
標(biāo)定是為得到攝像機(jī)的上述參數(shù)。OpenCV使用平面物體(例如平面黑白棋盤)標(biāo)定攝像機(jī)。使用立體相機(jī)從不同角度不同距離拍攝16對左右棋盤圖像進(jìn)行標(biāo)定[4],左右棋盤圖對如圖4所示。在黑白棋盤中,黑白方塊是交替排列的,以便測量時(shí)不會造成任何一邊的偏移。在OpenCV中調(diào)用findChessboardCorners()函數(shù)可找到棋盤角點(diǎn)信息的近似值,再使用cornerSubPix()[7]函數(shù)得到棋盤角點(diǎn)的亞像素坐標(biāo)。使用drawChessboardCorners()函數(shù)繪制出檢測到的棋盤角點(diǎn)(見圖5),以便在實(shí)驗(yàn)中觀察結(jié)果,然后使用stereoCalibrate()函數(shù)完成雙目標(biāo)定。
圖4 棋盤圖Fig.4 Chessboard pattern
圖5 檢測所有的角點(diǎn)Fig.5 Detect every corners
有了旋轉(zhuǎn)矩陣R和平移向量T,立體校正Bouguet算法就能簡單地使左右圖像中的每幅重投影次數(shù)最小且重投影畸變最大,所以使立體匹配更加準(zhǔn)確和快速,并使左右圖像的觀測面積最大。
通過投影矩陣P把三維點(diǎn)變換成可以在平面上顯示的二維點(diǎn)
投影平面上的點(diǎn)坐標(biāo)為(x/w,y/w)。同理,二維點(diǎn)也可通過重投影矩陣Q重投影為三維點(diǎn)[8]其中(cx,cy)為主點(diǎn)在左圖像上的坐標(biāo),f為焦距,Tx為雙目間距,c'x為主點(diǎn)在右圖像的x坐標(biāo)。根據(jù)式(8)得到三維坐標(biāo)為:(X/W,Y/W,Z/W)。在OpenCV中可通過stereoRectify()函數(shù)完成以上校正功能,該函數(shù)輸入?yún)?shù)是前面標(biāo)定返回的結(jié)果[2]:攝像機(jī)矩陣,畸變向量,左右旋轉(zhuǎn)矩陣R和平移向量T。輸出參數(shù)有式(7)中投影矩陣 P,分別為 Pleft和 Pright,以及重投影矩陣 Q。可調(diào)用函數(shù)InitUndistortRectifyMap()生成圖像校正所需的映射矩陣。
立體匹配完成匹配左右攝像機(jī)視圖的相同特征,并得到視差圖,視差值是匹配時(shí)相同特征點(diǎn)在x坐標(biāo)軸上的差值xl-xr。得到視差圖后可通過三角相似的原理得到目標(biāo)物體的距離。
假設(shè)攝像機(jī)沒有畸變,左右攝像機(jī)的成像平面已經(jīng)嚴(yán)格對準(zhǔn),左右主點(diǎn)已經(jīng)校準(zhǔn),主光線也是平行的。理想立體攝像機(jī)模型如圖6[8]所示。
圖6 立體攝像機(jī)模型Fig.6 The model of 3D camera
設(shè)圖 6 中點(diǎn) Pleft坐標(biāo)為(xl,yl),Pright坐標(biāo)為(xr,yr),則視差的定義為d=xl-xr。根據(jù)相似三角形原理有
由式(10)易知視差d和距離Z成反比,當(dāng)視差很小時(shí),視差的變化對距離Z的影響較大;當(dāng)視差較大時(shí),視差的變化對距離Z的影響較小,因此,測距系統(tǒng)僅當(dāng)距離較近時(shí)精度較高。左右攝像機(jī)的旋轉(zhuǎn)是為了實(shí)現(xiàn)左右攝像機(jī)的數(shù)學(xué)對準(zhǔn)。
OpenCV中使用函數(shù)StereoBM()實(shí)現(xiàn)了快速而有效的塊匹配算法(BM:Block Matching),它使用絕對誤差累計(jì)[2]的小窗口(SAD:Sum of Absolute Differences)查找左右兩幅校正的圖像之間的最優(yōu)匹配點(diǎn)。該算法對圖像中的弱匹配點(diǎn)即弱紋理點(diǎn)的匹配效果一般,但并不影響其總體匹配效果。塊匹配立體匹配算法主要有歸一化預(yù)過濾、沿極線使用小窗口查找匹配點(diǎn)和挑選高質(zhì)量匹配點(diǎn)等重要過程。
歸一化處理可減小弱匹配點(diǎn)的低匹配率,增強(qiáng)圖像紋理強(qiáng)度并減少亮度差異。經(jīng)過圖像預(yù)處理后,通過SAD窗口滑動查找完成匹配點(diǎn)的搜索。因?yàn)樾U笥覉D像后,每行都是極線,因此左右匹配位置肯定在同一行上;對于左圖像上的點(diǎn),最佳匹配點(diǎn)肯定在右圖像上的對應(yīng)行上。由于搜索過程復(fù)雜度不高,且匹配效果較好,因此,塊匹配算法是一種很優(yōu)秀的匹配算法[8]。最優(yōu)匹配點(diǎn)的查找需要使用匹配代價(jià)
其中E表示匹配窗口灰度均值,D為匹配窗口,d為窗口的位移量。代價(jià)越小,匹配度越高。通過規(guī)定視差的搜索范圍構(gòu)成一個(gè)雙目視界,具體的數(shù)值根據(jù)實(shí)驗(yàn)環(huán)境和工具的實(shí)際情況進(jìn)行設(shè)置。本系統(tǒng)設(shè)置的搜索范圍值是144像素。找到匹配點(diǎn),也就得到了視差,根據(jù)式(10)即可得到目標(biāo)物體與攝像機(jī)的距離,這與物體的橫向平移位置無關(guān)。只要得到視差就可由三角相似原理求得距離,這是因?yàn)橐粋€(gè)固定的視差可表示為目標(biāo)物體離攝像機(jī)距離恒定的平面(見圖7)。
圖7 視差為3時(shí)形成的固定平面Fig.7 The formed plane when disparity is 3
最后進(jìn)行過濾處理,過濾處理就是在兩個(gè)視圖的待選匹配點(diǎn)中過濾虛假匹配。與雙目立體視覺匹配的預(yù)處理技術(shù)[9,10]相比,在函數(shù)StereoBM()中設(shè)置參數(shù) uniquenessRatio實(shí)現(xiàn)過濾功能更加快速。當(dāng)uniquenessRatio>(match_value-min_match)/min_match時(shí),把它作為假匹配點(diǎn)并過濾,反之,則保存為真匹配點(diǎn),通過該功能大部分虛假匹配點(diǎn)能被過濾掉。
textureThresshold參數(shù)的使用可減少噪聲對匹配的影響,當(dāng)匹配響應(yīng)小于textureThresshold值時(shí),不予考慮。設(shè)置合理的textureThresshold參數(shù)值對匹配效果至關(guān)重要,該值太大會使左右圖像的匹配點(diǎn)很少,導(dǎo)致匹配失真,當(dāng)然也不能太小,否則,會出現(xiàn)大量的誤匹配區(qū)域?;趬K的匹配在物體邊界匹配時(shí),可能會同時(shí)產(chǎn)生大小視差的局部區(qū)域,若不做處理將導(dǎo)致匹配失真。因此,設(shè)置散斑探測器在散斑窗口探測,窗口大小由參數(shù)speckleWindowSize設(shè)置,只有探測到的最大最小視差在規(guī)定范圍內(nèi)的匹配才被保留,這個(gè)范圍由參數(shù)speckleRange設(shè)置。
在獲得視差映射后,利用式(8),式(9),通過簡單的矩陣相乘就可提取深度信息。三維坐標(biāo)就是(X/W,Y/W,Z/W)。OpenCV中使用reprojectImageTo3D()函數(shù)實(shí)現(xiàn)該功能,該函數(shù)輸入上面得到的視差數(shù)據(jù),輸出所需的三維點(diǎn)陣,然后提取深度信息。
雙目立體測距系統(tǒng)的界面利用VS2010環(huán)境的MFC(Microsoft Foundation Classes)設(shè)計(jì)(見圖8)。測試環(huán)境是在實(shí)驗(yàn)室內(nèi),可獲得鼠標(biāo)點(diǎn)擊處目標(biāo)物體的距離。
圖8 測距系統(tǒng)界面Fig.8 The interface of the measuring system
使用該系統(tǒng)測量多個(gè)目標(biāo)物體的距離并用直尺進(jìn)行實(shí)際測量,把物體擺放到合適的位置,使用直尺測量的值為整數(shù),以保證結(jié)果的準(zhǔn)確性。圖9為目標(biāo)物體圖像,因?yàn)槭褂昧溯喞獧z測相關(guān)的技術(shù),系統(tǒng)用矩形標(biāo)記出了明顯的物體。圖10為進(jìn)行立體匹配后系統(tǒng)輸出的左右圖像對視差圖,這并不是深度圖,需要利用式(13)得到物體的真正深度信息。圖11為筆者用鼠標(biāo)點(diǎn)擊圖像上杯子時(shí)系統(tǒng)輸出杯子的距離。更多實(shí)驗(yàn)結(jié)果如表1所示。
圖9 目標(biāo)圖像Fig.9 The targets
圖10 偽彩色視差圖Fig.10 The pseudo-color disparitymap
圖11 結(jié)果Fig.11 Output
表1 實(shí)驗(yàn)結(jié)果Tab.1 Experiment result
考慮到標(biāo)定誤差和實(shí)際測量誤差,近距測距結(jié)果達(dá)到了預(yù)期要求。使用BM算法測距速度很快,可以達(dá)到實(shí)時(shí)應(yīng)用的要求,而SGBM(Semi-Global Block Mathing)算法和GC(Graph Cuts)算法的測距速度較慢(見表2)。
表2 3種算法對比Tab.2 Comparison of the three algorithm
由表2可知,BM算法測距速度比SGBM算法和GC算法測距速度快很多,而誤差只比SGBM算法稍大,這也正是該系統(tǒng)采用BM算法測距的主要原因。
筆者基于OpenCV,實(shí)現(xiàn)了對立體相機(jī)拍攝的圖片中的物體測距。為實(shí)現(xiàn)測距的功能,對攝像機(jī)的標(biāo)定、立體校正、圖像去噪、極線約束下的塊匹配、從視差圖中提取深度信息等關(guān)鍵技術(shù)進(jìn)行了研究。并使用C++語言編程實(shí)現(xiàn),使用MFC設(shè)計(jì)界面,使用文中的塊匹配算法進(jìn)行匹配,可得到圖片上所有匹配到的物體的距離信息。通過鼠標(biāo)點(diǎn)擊得到圖片上每個(gè)點(diǎn)位置的距離,對近距離物體測距速度快且精度高。但對圖片上的不明顯的小物體不敏感,若需要檢測小物體還需要手動調(diào)整相應(yīng)參數(shù),且對于遠(yuǎn)距離物體的測距誤差較大,這需要在今后的研究工作中加以改進(jìn)。
[1]宋立明,李秀華,李萬龍.基于計(jì)算機(jī)視覺的儲備糧智能稽核方法[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2013,31(1):107-112.SONG Liming,LI Xiuhua,LI Wanlong.Survey on Reserved Grain Intelligent Audit Methods Based on Computer Vision[J].Journal of Jilin University:Information Science Edition,2013,31(1):107-112.
[2]布拉德斯基,克勒.學(xué)習(xí)OpenCV[M].于仕琪,劉瑞禎,譯.北京:清華大學(xué)出版社,2009:1-16,406-437,441-493.GARY BRADSKI,ADRIAN KAEHLER.Learning OpenCV[M].Beijing:Tsinghua University,2009:1-16,406-437,441-493.
[3]井建輝.業(yè)視覺系統(tǒng)中攝像機(jī)定標(biāo)策略問題[J].河北工業(yè)大學(xué)學(xué)報(bào),2003,32(6):93-98.JING Jianhui.The Camera Calibration Strategy in Industrial Vision System [J].Journal of Hebei University of Technology,2003,32(6):93-98.
[4]羅丹,廖志賢.基于OpenCV的雙目立體視覺測距[J].大眾科技,2011(4):52-53,71.LUO Dan,LIAO Zhixian.The Binocular Stereo Vision Measuring System Based on Opencv[J].Popular Science &Technology,2011(4):52-53,71.
[5]羅桂娥.雙目立體視覺深度感知與三維重建若干問題研究[D].長沙:中南大學(xué)信息科學(xué)與工程學(xué)院,2012.LUO Guie.Some Issues of Depth Perception and Three-Dimention Reconstruction from Binocular Stereo Vision[D].Changsha:School of Information Science and Engineering,Central South University,2012.
[6]夏茂盛,孟祥磊,宋占偉,等.基于雙目視覺的嵌入式三維坐標(biāo)提取系統(tǒng)[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2011,29(1):61-66.XIA Maosheng,MENG Xianglei,SONG Zhanwei,et al.Embedded 3D-Coordinate Extraction System Based on Binocular Vision[J].Journal of Jilin University:Information Science Edition,2011,29(1):61-66.
[7]CHEN Dazhi,ZHANG Guangjun.A New Sub-Pixel Detector for X-Corners in Camera Calibration Targets[J].WSCG(Short Papers),2005(5):97-100.
[8]劉盼,王金海.基于平行雙目立體視覺的測距系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2013,32(S2):162-164.LIU Pan,WANG Jinhai.Distance Measurement System Based on Parallel Binocular Stereo Vision[J].Journal of Computer Applications,2013,32(S2):162-164.
[9]汪珍珍,趙連玉,劉振忠.基于MATLAB與OpenCV相結(jié)合的雙目立體視覺測距系統(tǒng)[J].天津理工大學(xué)學(xué)報(bào),2013,1:45-48.WANG Zhenzhen,ZHAO Lianyu,LIU Zhenzhong.Binocular Stereo Vision Distance Measurement System Based on a Combination of Matlab and OpenCV[J].Journal of Tianjin University of Technology,2013(1):45-48.
[10]常淑華,宋艷秋,楊永敏.雙目立體視覺匹配的預(yù)處理技術(shù)[J].吉林大學(xué)學(xué)報(bào):理學(xué)版,2012,50(1):95-100.CHANG Shuhua,SONG Yanqiu,YANG Yongmin.Matching Preprocessing Technology of Binocular Stereo Vision [J].Journal of Jilin University:Science Edition,2012,50(1):95-100.
(責(zé)任編輯:劉俏亮)
Binocular Measuring System Based on OpenCV
WANG Hao,XU Zhiwen,XIE Kun,LI Jie,SONG Chenglu
(College of Computer Science and Technology,Jilin University,Changchun 130012,China)
The main research is to get the distance by use of 3D-camera.This article will explain some key technologies,such as camera calibration,stereo rectification,SAD(Sum of Absolute Differences),threedimensional reconstruction and so on.The chessboard pictures are taken by the 3D camera from different angles,then saved to computer,and used to corner detection and camera calibration in order to get the parameters of the camera.Bouguet algorithm is selected as the stereo rectification algorithm.Stereo matching use SAD method.When we get the disparity map and the points clouds we start three-dimensional reconstruction work,then the distance between the target and camera is calculated based on similar triangles principle.The experiment is finished by OpenCV2.4.3(C++)and VS2010.This system only need an ordinary 3D-camera,which is not expensive.This system is time-saving and accurate when it is used.
OpenCV;sum of absolute differences(SAD);stereo vision;three-dimensional reconstruction;distance measurement
TP317.4
A
1671-5896(2014)02-0188-07
2013-10-24
國家自然科學(xué)基金資助項(xiàng)目(60973091);吉林省科技發(fā)展基金資助項(xiàng)目(20130101166JC)
王浩(1989— ),男,河北邢臺人,吉林大學(xué)碩士研究生,主要從事圖像處理和機(jī)器視覺研究,(Tel)86-15143088608(E-mail)wunhao@foxmail.com;通訊作者:許志聞(1965— ),男,長春人,吉林大學(xué)教授,博士生導(dǎo)師,主要從事網(wǎng)絡(luò)流媒體、計(jì)算機(jī)圖形學(xué)與圖像處理和生物信息學(xué)研究(Tel)86-13904310477(E-mail)xuzw@jlu.edu.cn。