徐 杰
(北京城市學院3D打印研究院,北京100083)
在現代機器視覺和工業測量中,人們通常用張正友方法[1]對攝像機的內外參數進行標定。其好處是,使用一塊帶有特征點的平面標定板即可(平面板容易生產),且標定精度高。但該方法需要拍攝至少3幅不同角度的標定板圖像(通常要拍攝10幅左右的圖像),才能完成標定,標定工作時間長、容易出錯,給實際應用帶來一定的麻煩。此外,當多個相機需要同時標定時,不容易找到對所有相機都合適的標定板角度和位置,容易漏拍、錯拍,需要仔細調整角度位置,否則會產生算法錯誤,使標定成為一個繁瑣的工作。
針對上述情況,本文提出一種標定方法(是作者對已發表論文[2]的改進),使用平面標定板,只拍一幅圖像即可完成標定,操作簡單方便,且標定精度高。
攝像機的標定,就是要確定相機內、外參數。外參包括相機的空間位置和姿態,內參包括相機的焦距、畸變等。計算相機的空間位置和姿態,涉及到世界坐標系、攝像機坐標系和焦平面坐標系等,以及各坐標系之間的變換關系。
(1)世界坐標系(Owxwywzw)。 世界坐標系(Owxwywzw)是在環境中選擇一個基準坐標系,描述攝像機和物體的位置。一般以標定板為基準建立世界坐標系。標定板中心為世界坐標系原點,標定板法向上方向為世界坐標系Z軸方向。
(2)攝像機坐標系(Ocxcyczc)。 原點在攝像機光心,zc軸為攝像機光軸,與攝像機焦平面垂直,xc、yc軸分別平行于焦平面坐標系的xu軸和yu軸,且方向相同,如圖1所示。

圖1 世界坐標系、攝像機坐標系和焦平面坐標系及其變換關系Fig.1 World Coordinate,Camera Coordinate,Focal plane Coordinate and relations
(3)焦平面坐標系(Ouxuyu)。 物體在攝像機焦平面上成像,該坐標系以實際物理長度為單位,原點為攝像機光軸與焦平面的交點,xu軸、yu軸分別平行于圖像坐標系的u軸和v軸,且方向相同。
(4)圖像坐標系(Ofuv)。CCD傳感器陣列在焦平面上,將物像轉換為像素圖像,圖像坐標系以像素為單位。圖像的橫向為u軸,縱向為v軸,如圖2所示。

圖2 焦平面上的圖像坐標系(Of uv)與焦平面坐標系(Ou xu yu)的變換關系Fig.2 Image Coordinate(Of uv)and Focal plane Coordinate(Ou xuyu)relation
坐標系之間具有一定的轉換關系。其中包括:世界坐標系與相機坐標系、相機坐標系與焦平面坐標系、焦平面坐標系與圖像坐標系等。
(1)世界坐標系與攝像機坐標系的轉換關系
設世界坐標系中物體點的坐標為(xw,yw,zw),物體點在攝像機坐標系中的坐標為(xc,yc,zc),則有:

(2)攝像機坐標系與焦平面坐標系的轉換關系
設物體點在攝像機焦平面成像的坐標為(xu,yu),則有:

其中,s為比例系數;fx、fy分別為鏡頭焦距在x、y軸方向的值;γ為成像平面與光軸不垂直造成的偏差系數;(Δu,Δv)為像平面中心與光軸穿過像平面位置的偏差值。理想情況下:

則有:

其中,f是攝像機鏡頭焦距。
由于攝像機鏡頭有畸變,實際物體點在焦平面的成像坐標為(xd,yd),其數學模型可以用下面公式描述[2]:
(3)焦平面坐標系與圖像坐標系的轉換關系

設物體點在圖像上的像素坐標為(u,v),則有:

其中,Nx、Ny分別是焦平面上橫向、縱向單位長度的像素數,(u0,v0)是焦平面坐標系的原點Ou在圖像坐標系中的像素坐標,一般在圖像中心(通過實驗發現,u0,v0值對總的標定精度影響不大[4])。
對于面陣CCD攝像機來說,Nx、Ny值是固定的(廠家已給出)。如果廠家給出的Nx、Ny參數不準確,或者CCD傳感器陣面排列有畸變,導致由像素坐標(u,v)和公式(3)推算出來的物體在焦平面的成像位置與實際位置不一致,則可以把這種由CCD陣面排列畸變引起的偏差歸并于攝像機鏡頭,而認為CCD陣面是整齊排列的,且Nx、Ny參數值是精確的。這時,攝像機鏡頭畸變模型由公式(2)改為:

其中,xd、yd是由像素坐標(u、v)和公式(3)計算出來的,并不一定是實際成像位置,Fx、fy是關于xd、yd的某種函數,反映的是攝像機鏡頭和CCD面陣的綜合畸變。
假設,已知攝像機鏡頭和CCD面陣的綜合畸變模型(例如,函數fx、fy為關于xd、yd的某種多項式),以及單平面靶標上n個點的世界坐標(xw,yw,zw)和二者在圖像上對應點的圖像坐標(u,v)。計算攝像機的內外參數(包括外參數R、T,和內參數A、鏡頭綜合畸變參數等)的步驟如下:
第一步:設相機理想模型和鏡頭綜合畸變模型。
若已知鏡頭綜合畸變模型函數fx、fy分別為:

設其中各畸變參數的初始值分別為:k1=0,k2=0,p1=0,p2=0。且設式(1)中的初始值為:fx=fy=f,γ=0,Δu=0,Δv=0。
第二步:計算R、T、f初值。
因

由于平面靶標上的點是共面的,則設zw=0,所以有:

設靶平面上n個點的世界坐標為(xwi,ywi,zwi),其對應的一幅圖像坐標為(ui,vi),(i=1,2,…,,n),根據公式(3)可以計算出(xdi,ydi)、根據公式(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個待求的未知數,向量b=(fx1,fy1,...,fxn,fyn)'為已知。只要知道平面靶標上4個以上點的世界坐標和對應的圖像坐標,就可以用最小二乘法求解,即對于線性方程組Ax=b,解為x=(A'A)-1(A'b)。
因為R是正交矩陣,所以存在關系式:

由此,可解出f/Tz,從而算出r1、r2、r4、r5、Tx、Ty。
同樣因R是正交矩陣,則有關系式:

所以有如下方程:

從而可解出f、算出Tz,同時可算出r7、r8(r7=x7*Tz、r8=x8*Tz)。可由R前兩列向量叉乘算出第三列向量(r3、r6、r9),即:

這樣,可求得R、T、f初值。為A的初值。
第三步:計算優化標定解。
假定平面標定板上有n個標記點,相機拍攝一幅標定板圖像,則制定評價函數[5]如式(11):

其中,mi為第i個點的圖像坐標;Mi為第i個點的空間坐標;m(A,R,T,k1,k2,p1,p2,Mi)是通過這些已知量,根據式(1)、(2)、(3)求得的圖像坐標。使評價函數最小的A,R,T,k1,k2,p1,p2就是問題的最優解,即標定結果。利用Levenberg-Marquarat來求解非線性最小二乘問題,初始估值為上面求得的R、T、A矩陣初值,k1,k2,p1,p2初值為0。這里是優化一幅圖像的標定,為了提高景深標定的精度,也可以增加圖像數量。如果是多幅圖像,則是多個位姿Rk、Tk,和多幅拍攝點mki(k=1,2,...)同樣可以用(11)式求優化解。
實驗中采用平面標定塊,如圖3所示。靶標上各圓心的世界坐標見表1,其對應的圖像像素坐標見表2;實驗使用sony面陣CCD攝像機,分辨率為1024*1280,Nx=1/0.005 2(像素/mm),Ny=1/0.005 2(像素/mm);設(u0,v0)=(640,512)。

圖3 實驗使用的平面標定塊Fig.3 Testing calibrate board

表1 平面標定板的圓心世界坐標(zwi=0,63個點,單位mm)Tab.1 The world coordinates of centers of circles on the calibrate board(zwi=0,63 points)

表2 平面標定板的圓心圖像坐標(63個點,單位:像素)Tab.2 The image coordinates of centers of circles on the calibrate board(63 points,unit:pixel)
根據攝像機特性,設該攝像機鏡頭綜合畸變模型為式(5),由上述方法求出R、T、A、k1、k2、p1、p2的值,見表3。
實驗結果:

其中(ui,vi)為圓心實際圖像坐標,(ui′,vi′)為由參數R、T、A、k1、k2、p1、p2計算出來的圓心圖像坐標。在普通Intel_i7處理器的電腦上算法運行時間小于1 s。
通過實驗可以發現,攝像機鏡頭綜合畸變模型函數fx(xd,yd)、fy(xd,yd)設為上述式(5)函數,或者Tsai方法[6]提到的畸變模型函數時,標定結果都是穩定的。采用本標定方法,標定板不能正對相機,否則標定誤差較大。標定板法向與相機光軸之間的夾角應大于10°,一般取30°~45°比較合適。這也表明畸變參數的標定計算需要在一定景深范圍內進行。本方法的優點是:只使用平面靶標,一幅圖像,操作簡捷快速,而且適用于任何種類的鏡頭畸變模型。與張正友方法相比,本方法只要拍攝一幅圖像,就能計算相機初始參數,再利用Levenberg-Marquarat方法求優化解,具有更大的靈活性。