徐 杰
(北京城市學(xué)院3D打印研究院,北京100083)
在現(xiàn)代機器視覺和工業(yè)測量中,人們通常用張正友方法[1]對攝像機的內(nèi)外參數(shù)進行標(biāo)定。其好處是,使用一塊帶有特征點的平面標(biāo)定板即可(平面板容易生產(chǎn)),且標(biāo)定精度高。但該方法需要拍攝至少3幅不同角度的標(biāo)定板圖像(通常要拍攝10幅左右的圖像),才能完成標(biāo)定,標(biāo)定工作時間長、容易出錯,給實際應(yīng)用帶來一定的麻煩。此外,當(dāng)多個相機需要同時標(biāo)定時,不容易找到對所有相機都合適的標(biāo)定板角度和位置,容易漏拍、錯拍,需要仔細(xì)調(diào)整角度位置,否則會產(chǎn)生算法錯誤,使標(biāo)定成為一個繁瑣的工作。
針對上述情況,本文提出一種標(biāo)定方法(是作者對已發(fā)表論文[2]的改進),使用平面標(biāo)定板,只拍一幅圖像即可完成標(biāo)定,操作簡單方便,且標(biāo)定精度高。
攝像機的標(biāo)定,就是要確定相機內(nèi)、外參數(shù)。外參包括相機的空間位置和姿態(tài),內(nèi)參包括相機的焦距、畸變等。計算相機的空間位置和姿態(tài),涉及到世界坐標(biāo)系、攝像機坐標(biāo)系和焦平面坐標(biāo)系等,以及各坐標(biāo)系之間的變換關(guān)系。
(1)世界坐標(biāo)系(Owxwywzw)。 世界坐標(biāo)系(Owxwywzw)是在環(huán)境中選擇一個基準(zhǔn)坐標(biāo)系,描述攝像機和物體的位置。一般以標(biāo)定板為基準(zhǔn)建立世界坐標(biāo)系。標(biāo)定板中心為世界坐標(biāo)系原點,標(biāo)定板法向上方向為世界坐標(biāo)系Z軸方向。
(2)攝像機坐標(biāo)系(Ocxcyczc)。 原點在攝像機光心,zc軸為攝像機光軸,與攝像機焦平面垂直,xc、yc軸分別平行于焦平面坐標(biāo)系的xu軸和yu軸,且方向相同,如圖1所示。
圖1 世界坐標(biāo)系、攝像機坐標(biāo)系和焦平面坐標(biāo)系及其變換關(guān)系Fig.1 World Coordinate,Camera Coordinate,F(xiàn)ocal plane Coordinate and relations
(3)焦平面坐標(biāo)系(Ouxuyu)。 物體在攝像機焦平面上成像,該坐標(biāo)系以實際物理長度為單位,原點為攝像機光軸與焦平面的交點,xu軸、yu軸分別平行于圖像坐標(biāo)系的u軸和v軸,且方向相同。
(4)圖像坐標(biāo)系(Ofuv)。CCD傳感器陣列在焦平面上,將物像轉(zhuǎn)換為像素圖像,圖像坐標(biāo)系以像素為單位。圖像的橫向為u軸,縱向為v軸,如圖2所示。
圖2 焦平面上的圖像坐標(biāo)系(Of uv)與焦平面坐標(biāo)系(Ou xu yu)的變換關(guān)系Fig.2 Image Coordinate(Of uv)and Focal plane Coordinate(Ou xuyu)relation
坐標(biāo)系之間具有一定的轉(zhuǎn)換關(guān)系。其中包括:世界坐標(biāo)系與相機坐標(biāo)系、相機坐標(biāo)系與焦平面坐標(biāo)系、焦平面坐標(biāo)系與圖像坐標(biāo)系等。
(1)世界坐標(biāo)系與攝像機坐標(biāo)系的轉(zhuǎn)換關(guān)系
設(shè)世界坐標(biāo)系中物體點的坐標(biāo)為(xw,yw,zw),物體點在攝像機坐標(biāo)系中的坐標(biāo)為(xc,yc,zc),則有:
(2)攝像機坐標(biāo)系與焦平面坐標(biāo)系的轉(zhuǎn)換關(guān)系
設(shè)物體點在攝像機焦平面成像的坐標(biāo)為(xu,yu),則有:
其中,s為比例系數(shù);fx、fy分別為鏡頭焦距在x、y軸方向的值;γ為成像平面與光軸不垂直造成的偏差系數(shù);(Δu,Δv)為像平面中心與光軸穿過像平面位置的偏差值。理想情況下:
則有:
其中,f是攝像機鏡頭焦距。
由于攝像機鏡頭有畸變,實際物體點在焦平面的成像坐標(biāo)為(xd,yd),其數(shù)學(xué)模型可以用下面公式描述[2]:
(3)焦平面坐標(biāo)系與圖像坐標(biāo)系的轉(zhuǎn)換關(guān)系
設(shè)物體點在圖像上的像素坐標(biāo)為(u,v),則有:
其中,Nx、Ny分別是焦平面上橫向、縱向單位長度的像素數(shù),(u0,v0)是焦平面坐標(biāo)系的原點Ou在圖像坐標(biāo)系中的像素坐標(biāo),一般在圖像中心(通過實驗發(fā)現(xiàn),u0,v0值對總的標(biāo)定精度影響不大[4])。
對于面陣CCD攝像機來說,Nx、Ny值是固定的(廠家已給出)。如果廠家給出的Nx、Ny參數(shù)不準(zhǔn)確,或者CCD傳感器陣面排列有畸變,導(dǎo)致由像素坐標(biāo)(u,v)和公式(3)推算出來的物體在焦平面的成像位置與實際位置不一致,則可以把這種由CCD陣面排列畸變引起的偏差歸并于攝像機鏡頭,而認(rèn)為CCD陣面是整齊排列的,且Nx、Ny參數(shù)值是精確的。這時,攝像機鏡頭畸變模型由公式(2)改為:
其中,xd、yd是由像素坐標(biāo)(u、v)和公式(3)計算出來的,并不一定是實際成像位置,F(xiàn)x、fy是關(guān)于xd、yd的某種函數(shù),反映的是攝像機鏡頭和CCD面陣的綜合畸變。
假設(shè),已知攝像機鏡頭和CCD面陣的綜合畸變模型(例如,函數(shù)fx、fy為關(guān)于xd、yd的某種多項式),以及單平面靶標(biāo)上n個點的世界坐標(biāo)(xw,yw,zw)和二者在圖像上對應(yīng)點的圖像坐標(biāo)(u,v)。計算攝像機的內(nèi)外參數(shù)(包括外參數(shù)R、T,和內(nèi)參數(shù)A、鏡頭綜合畸變參數(shù)等)的步驟如下:
第一步:設(shè)相機理想模型和鏡頭綜合畸變模型。
若已知鏡頭綜合畸變模型函數(shù)fx、fy分別為:
設(shè)其中各畸變參數(shù)的初始值分別為:k1=0,k2=0,p1=0,p2=0。且設(shè)式(1)中的初始值為:fx=fy=f,γ=0,Δu=0,Δv=0。
第二步:計算R、T、f初值。
因
由于平面靶標(biāo)上的點是共面的,則設(shè)zw=0,所以有:
設(shè)靶平面上n個點的世界坐標(biāo)為(xwi,ywi,zwi),其對應(yīng)的一幅圖像坐標(biāo)為(ui,vi),(i=1,2,…,,n),根據(jù)公式(3)可以計算出(xdi,ydi)、根據(jù)公式(5)可以計算出fxi=fx(xdi,ydi)和fyi=fy(xdi,ydi),所以有:
整理可得線性方程組:
式(6)可以寫為Ax=b。其中A矩陣共有8列2n行,向 量x=(x1,x2,x3,x4,x5,x6,x7,x8)'=(f*r1/Tz,f*r2/Tz,f*Tx/Tz,f*r4/Tz,f*r5/Tz,f*Ty/Tz,r7/Tz,r8/Tz)'的元素是8個待求的未知數(shù),向量b=(fx1,fy1,...,fxn,fyn)'為已知。只要知道平面靶標(biāo)上4個以上點的世界坐標(biāo)和對應(yīng)的圖像坐標(biāo),就可以用最小二乘法求解,即對于線性方程組Ax=b,解為x=(A'A)-1(A'b)。
因為R是正交矩陣,所以存在關(guān)系式:
由此,可解出f/Tz,從而算出r1、r2、r4、r5、Tx、Ty。
同樣因R是正交矩陣,則有關(guān)系式:
所以有如下方程:
從而可解出f、算出Tz,同時可算出r7、r8(r7=x7*Tz、r8=x8*Tz)。可由R前兩列向量叉乘算出第三列向量(r3、r6、r9),即:
這樣,可求得R、T、f初值。為A的初值。
第三步:計算優(yōu)化標(biāo)定解。
假定平面標(biāo)定板上有n個標(biāo)記點,相機拍攝一幅標(biāo)定板圖像,則制定評價函數(shù)[5]如式(11):
其中,mi為第i個點的圖像坐標(biāo);Mi為第i個點的空間坐標(biāo);m(A,R,T,k1,k2,p1,p2,Mi)是通過這些已知量,根據(jù)式(1)、(2)、(3)求得的圖像坐標(biāo)。使評價函數(shù)最小的A,R,T,k1,k2,p1,p2就是問題的最優(yōu)解,即標(biāo)定結(jié)果。利用Levenberg-Marquarat來求解非線性最小二乘問題,初始估值為上面求得的R、T、A矩陣初值,k1,k2,p1,p2初值為0。這里是優(yōu)化一幅圖像的標(biāo)定,為了提高景深標(biāo)定的精度,也可以增加圖像數(shù)量。如果是多幅圖像,則是多個位姿Rk、Tk,和多幅拍攝點mki(k=1,2,...)同樣可以用(11)式求優(yōu)化解。
實驗中采用平面標(biāo)定塊,如圖3所示。靶標(biāo)上各圓心的世界坐標(biāo)見表1,其對應(yīng)的圖像像素坐標(biāo)見表2;實驗使用sony面陣CCD攝像機,分辨率為1024*1280,Nx=1/0.005 2(像素/mm),Ny=1/0.005 2(像素/mm);設(shè)(u0,v0)=(640,512)。
圖3 實驗使用的平面標(biāo)定塊Fig.3 Testing calibrate board
表1 平面標(biāo)定板的圓心世界坐標(biāo)(zwi=0,63個點,單位mm)Tab.1 The world coordinates of centers of circles on the calibrate board(zwi=0,63 points)
表2 平面標(biāo)定板的圓心圖像坐標(biāo)(63個點,單位:像素)Tab.2 The image coordinates of centers of circles on the calibrate board(63 points,unit:pixel)
根據(jù)攝像機特性,設(shè)該攝像機鏡頭綜合畸變模型為式(5),由上述方法求出R、T、A、k1、k2、p1、p2的值,見表3。
實驗結(jié)果:
其中(ui,vi)為圓心實際圖像坐標(biāo),(ui′,vi′)為由參數(shù)R、T、A、k1、k2、p1、p2計算出來的圓心圖像坐標(biāo)。在普通Intel_i7處理器的電腦上算法運行時間小于1 s。
通過實驗可以發(fā)現(xiàn),攝像機鏡頭綜合畸變模型函數(shù)fx(xd,yd)、fy(xd,yd)設(shè)為上述式(5)函數(shù),或者Tsai方法[6]提到的畸變模型函數(shù)時,標(biāo)定結(jié)果都是穩(wěn)定的。采用本標(biāo)定方法,標(biāo)定板不能正對相機,否則標(biāo)定誤差較大。標(biāo)定板法向與相機光軸之間的夾角應(yīng)大于10°,一般取30°~45°比較合適。這也表明畸變參數(shù)的標(biāo)定計算需要在一定景深范圍內(nèi)進行。本方法的優(yōu)點是:只使用平面靶標(biāo),一幅圖像,操作簡捷快速,而且適用于任何種類的鏡頭畸變模型。與張正友方法相比,本方法只要拍攝一幅圖像,就能計算相機初始參數(shù),再利用Levenberg-Marquarat方法求優(yōu)化解,具有更大的靈活性。