羅珍茜,薛 雷,孫峰杰,陸士清,李長(zhǎng)遠(yuǎn)
(上海大學(xué) 通信與信息工程學(xué)院,上海 200072)
近年來(lái),主動(dòng)視覺(jué)在動(dòng)態(tài)目標(biāo)監(jiān)控與跟蹤、合作目標(biāo)與非合作目標(biāo)位置測(cè)量,以及工業(yè)生產(chǎn)線監(jiān)測(cè)中有著廣泛的應(yīng)用。在主動(dòng)視覺(jué)中,攝像機(jī)焦距、光學(xué)中心以及外參數(shù)是可變的,這些參數(shù)的動(dòng)態(tài)在線標(biāo)定在主動(dòng)視覺(jué)中有重要作用。要利用攝像機(jī)進(jìn)行視覺(jué)感知獲取目標(biāo)的三維信息,就必須進(jìn)行攝像機(jī)標(biāo)定,以確定攝像機(jī)的參數(shù)[1]。攝像機(jī)標(biāo)定是指建立攝像機(jī)圖像像素位置和場(chǎng)景點(diǎn)位置之間的關(guān)系,其途徑是根據(jù)攝像機(jī)模型,由已知特征點(diǎn)的圖像坐標(biāo)和世界坐標(biāo)求解攝像機(jī)的模型參數(shù)[2]。精確標(biāo)定攝像機(jī)內(nèi)外參數(shù)不僅可以直接提高測(cè)量精度,而且可以為后續(xù)的立體圖像匹配與三維重建奠定良好的基礎(chǔ)。
國(guó)內(nèi)外許多學(xué)者提出了攝像機(jī)標(biāo)定的方法,并得到廣泛應(yīng)用。傳統(tǒng)的攝像機(jī)標(biāo)定方法采用的是基于3D立體靶標(biāo)的攝像機(jī)標(biāo)定,但是3D立體靶標(biāo)制作成本高,制作方法復(fù)雜。Roger Tsai[3]提出基于徑向約束的兩步法,該方法計(jì)算量適中,精度較高。張正友提出基于2D平面靶標(biāo)的攝像機(jī)標(biāo)定法,該方法克服了3D靶標(biāo)的缺點(diǎn),且標(biāo)定過(guò)程中攝像機(jī)拍攝角度改變對(duì)標(biāo)定結(jié)果無(wú)影響。HALCON是德國(guó)MVtec公司開(kāi)發(fā)的圖像處理軟件,它具有完善的綜合標(biāo)準(zhǔn)軟件庫(kù)和機(jī)器視覺(jué)集成開(kāi)發(fā)環(huán)境。HALCON提供了豐富的函數(shù)庫(kù),包括blob分析、形態(tài)學(xué)、模式匹配、測(cè)量、三維目標(biāo)識(shí)別和立體視覺(jué)等。它支持Windows,Linux和Solaris操作環(huán)境,整個(gè)函數(shù)庫(kù)可以用C,C++,C#,Visual Basic 和 Delphi等多種普通編程語(yǔ)言開(kāi)發(fā),有效提高了開(kāi)發(fā)效率,并且執(zhí)行速度快,具有良好的跨平臺(tái)移植性。
為了標(biāo)定攝像機(jī),首先需要建立一個(gè)模型將世界坐標(biāo)系中三維空間點(diǎn)投影到二維圖像中,該模型由攝像機(jī)和鏡頭組成。在機(jī)器視覺(jué)應(yīng)用中常用到的兩種攝像機(jī)模型為面陣攝像機(jī)模型和線陣攝像機(jī)模型。線陣攝像機(jī)模型相對(duì)面陣攝像機(jī)模型要復(fù)雜許多,筆者介紹的是常用的面陣攝像機(jī)模型。在實(shí)際應(yīng)用中,通常使用針孔攝像機(jī),它的面陣攝像機(jī)模型如圖1所示。其中,圖像坐標(biāo)系(r,c),成像平面坐標(biāo)系(u,v),攝像機(jī)坐標(biāo)系(xc,yc,zc),世界坐標(biāo)系(xw,yw,zw),Sx和 Sy是縮放比例因子,它們表示圖像傳感器上水平和垂直方向上相鄰像素之間的距離。f表示的并不是鏡頭的焦距,而是攝像機(jī)主距。點(diǎn)P是世界坐標(biāo)系中點(diǎn)Pw在成像平面上的投影。
世界坐標(biāo)系中的點(diǎn) Pw=(xw,yw,zw)T變換到它在成像平面坐標(biāo)系上的投影點(diǎn)P,需要經(jīng)歷以下4個(gè)步驟:
1)點(diǎn) Pw=(xw,yw,變換到攝像機(jī)坐標(biāo)系中的點(diǎn)Pc=(xc,yc,, 關(guān)系為 Pc=RPw+T。 T=(tx,ty,是一個(gè)平移向量,R=R(α,β,γ)是一個(gè)旋轉(zhuǎn)矩陣,α,β,γ 是分別繞攝像機(jī)坐標(biāo)系 x,y,z軸的旋轉(zhuǎn)角度。在R和T中6個(gè)參數(shù)(α,β,γ,tx,ty,tz)稱為攝像機(jī)外參、外方位參數(shù)或攝像機(jī)位置,它們決定了攝像機(jī)坐標(biāo)系與世界坐標(biāo)系之間的相對(duì)位置。
2)攝像機(jī)坐標(biāo)系中點(diǎn)Pc變換到成像平面坐標(biāo)系,它們之間是透視投影關(guān)系
圖1 針孔攝像機(jī)模型
圖2 鏡頭畸變
3)在不考慮鏡頭畸變的情況下,世界坐標(biāo)系中的點(diǎn)Pw與成像平面中的投影點(diǎn)P之間的直線過(guò)攝像機(jī)光學(xué)中心,如圖2所示。
大部分情況下,鏡頭的畸變可以近似為徑向畸變,即
其中,參數(shù)k決定了徑向畸變的程度,如圖3所示。
圖3 3種情況下的鏡頭畸變
式中:(Cx,Cy)T是光心在成像坐標(biāo)系中的投影點(diǎn)。
由以上可知,攝像機(jī)標(biāo)定的實(shí)質(zhì)就是確定內(nèi)部參數(shù)(f,k,Cx,Cy,Sx,Sy)和外部參數(shù)(α,β,γ,tx,ty,tz)的過(guò)程。
為了進(jìn)行攝像機(jī)標(biāo)定,必須已知世界坐標(biāo)系中足夠多的三維空間點(diǎn)的坐標(biāo),找到這些空間點(diǎn)在圖像中的投影點(diǎn)的二維圖像坐標(biāo),并建立對(duì)應(yīng)關(guān)系[4]。這就要求標(biāo)定過(guò)程必須滿足兩個(gè)要求:1)放置在已知位置上的容易提取特征的目標(biāo)物體或標(biāo)志(標(biāo)定板);2)確定世界坐標(biāo)系中已知點(diǎn)與它們?cè)谕队皥D像中的對(duì)應(yīng)關(guān)系。
標(biāo)定板的選擇決定了標(biāo)定的精度,為了達(dá)到較高精度,可以從以下方面考慮標(biāo)定板的選擇:
1)標(biāo)定板的材質(zhì):光源在標(biāo)定板前方,選擇陶瓷標(biāo)定板;光源在后方,選擇玻璃標(biāo)定板。
2)標(biāo)定板的尺寸:標(biāo)定板的形狀通常為正方形,寬度應(yīng)接近圖像寬度的1/3。例如,圖像大小為100 mm×80 mm,標(biāo)定板尺寸選擇30 mm×30 mm較為合適。
HALCON提供了標(biāo)準(zhǔn)的標(biāo)定板模板,如圖3b所示,該標(biāo)定板的特點(diǎn)是:標(biāo)定板周圍的黑色矩形框使得標(biāo)定對(duì)象的中心容易被提?。痪匦芜吔缈蚪锹涞姆较驑?biāo)記使得標(biāo)定板的方向唯一。每塊標(biāo)定板都應(yīng)該有一個(gè)對(duì)應(yīng)的描述文件CalTabDescrFile,它描述了標(biāo)定板的行數(shù)和列數(shù)、標(biāo)定板外框的幾何尺寸、方向標(biāo)記、標(biāo)定板圓形標(biāo)志的半徑等信息。選擇到合適的標(biāo)定板后,用gen_caltab函數(shù)生成對(duì)應(yīng)的標(biāo)定板描述文件。
利用標(biāo)定板的特點(diǎn),提取目標(biāo)板特征,其過(guò)程如下:攝像機(jī)提取標(biāo)定板的一幀圖像后,首先通過(guò)簡(jiǎn)單的閾值分割算法就能將標(biāo)定板的內(nèi)部區(qū)域與背景分離;其次利用Canny濾波器提取標(biāo)定板各圓形標(biāo)志的邊緣;再次采用Fitzgibbon[5]提出的通過(guò)線性方法來(lái)最小化代數(shù)誤差以得到擬合橢圓,該算法具有很好的穩(wěn)健性,可以抑制邊緣中孤立點(diǎn)對(duì)邊緣擬合的影響;最后提取出橢圓的最小外接四邊形,可以很容易確定標(biāo)志點(diǎn)及其與圖像中的投影之間的關(guān)系。
進(jìn)行攝像機(jī)標(biāo)定時(shí),標(biāo)定精度與圖像數(shù)量有關(guān),至少選擇10~15幅。所選圖像中標(biāo)定板的位置應(yīng)該能覆蓋圖像的4個(gè)角,因?yàn)榻锹涮幍溺R頭畸變最大,這樣能得到較準(zhǔn)確的畸變系數(shù)k。
標(biāo)定過(guò)程中,由于使用的是平面標(biāo)定對(duì)象,還會(huì)存在這樣的問(wèn)題:如果標(biāo)定對(duì)象平行于成像平面,f和tz的解不唯一。解決方法是在最優(yōu)化過(guò)程中保持Sy不變。
基于HALCON的標(biāo)定過(guò)程如圖4所示,read_image(∶Image∶FileName∶)讀取名稱為 FileName 的圖像 Image;find_caltab(Image∶Caltab∶CalTabDescrFile,SizeGauss,Mark Thresh,MinDiamMarks∶)通過(guò) 3.2節(jié)介紹的算法提取圖像Images中標(biāo)定板上的圓形標(biāo)志來(lái)確定標(biāo)定板的有效區(qū)域, 效果如圖 5a所示;find_marks_and_pose(Image,CalTabRegion∶∶CalTabDescrFile,StartCamParam,StartTh resh,DeltaThresh,MinThresh,Alpha,MinContLength,Max DiamMarks∶Rcoord,Ccoord,StartPose)確定標(biāo)定板上圓形標(biāo)志點(diǎn)的二維坐標(biāo),并得到攝像機(jī)外部參數(shù)的初始值,效果如圖 5b 所示;camera_calibration(∶∶NX,NY,NZ,Nrow,Ncol,StartCamParam,NstartPose,EstimateParams∶CamParam,Nfinal Pose,Errors)計(jì)算出攝像機(jī)的所有參數(shù),它是通過(guò)提供的初始參數(shù)為初始值,進(jìn)行優(yōu)化搜索獲得誤差最小化的過(guò)程;write_cam_par( ∶∶CamParam,CamParFile∶)將標(biāo)定結(jié)果寫入CamParFile文件。
圖4 程序流程圖
圖5 標(biāo)定效果
HALCON強(qiáng)大的圖像處理能力,為攝像機(jī)自主標(biāo)定提供了簡(jiǎn)單有效的方法。
根據(jù)上述標(biāo)定原理和開(kāi)發(fā)步驟,在Windows XP平臺(tái)下利用VC++6.0開(kāi)發(fā)了一個(gè)基于HALCON8.2的攝像頭標(biāo)定程序,程序經(jīng)過(guò)嚴(yán)格測(cè)試,運(yùn)行穩(wěn)定,在黑背景下截取3組數(shù)量不同的320×240的標(biāo)定板圖像用于標(biāo)定,并通過(guò)重投影法分析標(biāo)定結(jié)果的平均誤差。
式中:e表示均方誤差;Io(i)表示原始圖像上第i點(diǎn)的向量,Ip(i)表示重投影圖像上第 i點(diǎn)的向量,i∈(0,N);N 表示標(biāo)志點(diǎn)總數(shù),例如利用10幅標(biāo)定板圖像進(jìn)行標(biāo)定,則N=10×7×7;平均均方誤差Err等于均方誤差與標(biāo)志點(diǎn)總數(shù)的比值。
結(jié)果如表1所示,效果較好,可以達(dá)到使用要求。
表1 標(biāo)定結(jié)果比較
基于HALCON開(kāi)發(fā)的攝像機(jī)標(biāo)定程序在實(shí)際運(yùn)用中取得了很好的效果,標(biāo)定結(jié)果精確、運(yùn)算效率高、跨平臺(tái)移植性好,操作簡(jiǎn)單,縮減了開(kāi)發(fā)周期,可以有效地應(yīng)用于各種計(jì)算機(jī)視覺(jué)系統(tǒng)中。
[1]李良福,陳衛(wèi)東,馮祖仁,等.目標(biāo)跟蹤與定位中的視覺(jué)標(biāo)定算法研究[J].應(yīng)用光學(xué),2008,29(4):481-486.
[2]張廣軍.機(jī)器視覺(jué)[M].北京∶科學(xué)出版社,2005.
[3]TSAI R Y.An efficient and accurate camera calibration technique for 3D machine vision[EB/OL].[2009-12-20].http∶//research.microsoft.com/apps/pubs/default.aspx?id=66690.
[4]STEGER C,ULRICH M,WIEDEMANN C.Machine vision algorithms and applications[EB/OL].[2009-12-20].http∶//www.amazon.com/Machine-Vision-Algorithms-Applications-Carsten/dp/3527407340#noop.
[5]FITZGIBBON A,PILU M,F(xiàn)ISHER R B.Direct least square fitting of ellipses[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1999,21(5):475-480.