author@jason_ql(lql0716)
在圖像測量過程以及機器視覺應(yīng)用中,為確定空間物體表面某點的三維幾何位置與其在圖像中對應(yīng)點之間的相互關(guān)系,必須建立相機成像的幾何模型,這些幾何模型參數(shù)就是相機參數(shù)。在大多數(shù)條件下這些參數(shù)必須通過實驗與計算才能得到,這個求解參數(shù)的過程就稱之為相機標(biāo)定(或攝像機標(biāo)定)。無論是在圖像測量或者機器視覺應(yīng)用中,相機參數(shù)的標(biāo)定都是非常關(guān)鍵的環(huán)節(jié),其標(biāo)定結(jié)果的精度及算法的穩(wěn)定性直接影響相機工作產(chǎn)生結(jié)果的準(zhǔn)確性。因此,做好相機標(biāo)定是做好后續(xù)工作的前提,提高標(biāo)定精度是科研工作的重點所在。 常用術(shù)語 內(nèi)參矩陣: Intrinsic Matrix 焦距: Focal Length 主點: Principal Point 徑向畸變: Radial Distortion 切向畸變: Tangential Distortion 旋轉(zhuǎn)矩陣: Rotation Matrices 平移向量: Translation Vectors 平均重投影誤差: Mean Reprojection Error 重投影誤差: Reprojection Errors 重投影點: Reprojected Points
1、坐標(biāo)系的轉(zhuǎn)換1.1 世界坐標(biāo)系世界坐標(biāo)系(world coordinate)(xw,yw,zw)(xw,yw,zw),也稱為測量坐標(biāo)系,是一個三維直角坐標(biāo)系,以其為基準(zhǔn)可以描述相機和待測物體的空間位置。世界坐標(biāo)系的位置可以根據(jù)實際情況自由確定。
1.2 相機坐標(biāo)系相機坐標(biāo)系(camera coordinate)(xc,yc,zc)(xc,yc,zc),也是一個三維直角坐標(biāo)系,原點位于鏡頭光心處,x、y軸分別與相面的兩邊平行,z軸為鏡頭光軸,與像平面垂直。
1.3 世界坐標(biāo)系轉(zhuǎn)換為相機坐標(biāo)系?????xcyczc1?????=[R0t1]?????xwywzw1?????[xcyczc1]=[Rt01][xwywzw1] 其中RR為3*3的旋轉(zhuǎn)矩陣,tt為3*1的平移矢量,(xc,yc,zc,1)T(xc,yc,zc,1)T為相機坐標(biāo)系的齊次坐標(biāo),(xw,yw,zw,1)T(xw,yw,zw,1)T為世界坐標(biāo)系的齊次坐標(biāo)。 1.4 像素坐標(biāo)系、圖像坐標(biāo)系圖1:
 像素坐標(biāo)系(pixel coordinate) 如圖1,像素坐標(biāo)系uovuov是一個二維直角坐標(biāo)系,反映了相機CCD/CMOS芯片中像素的排列情況。原點oo位于圖像的左上角,uu軸、vv軸分別于像面的兩邊平行。像素坐標(biāo)系中坐標(biāo)軸的單位是像素(整數(shù)) 。 像素坐標(biāo)系不利于坐標(biāo)變換,因此需要建立圖像坐標(biāo)系XOYXOY,其坐標(biāo)軸的單位通常為毫米(mm) ,原點是相機光軸與相面的交點(稱為主點),即圖像的中心點,XX軸、YY軸分別與uu軸、vv軸平行。故兩個坐標(biāo)系實際是平移關(guān)系,即可以通過平移就可得到。 圖像坐標(biāo)系轉(zhuǎn)換為像素坐標(biāo)系
???uv1???=???1/dX0001/dY0u0v01??????XY1???[uv1]=[1/dX0u001/dYv0001][XY1] 其中,dXdX、dYdY分別為像素在XX、YY軸方向上的物理尺寸,u0,v0u0,v0為主點(圖像原點)坐標(biāo)。 1.5 針孔成像原理圖2:
 如圖,空間任意一點PP與其圖像點pp之間的關(guān)系,PP與相機光心oo的連線為oPoP,oPoP與像面的交點pp即為空間點PP在圖像平面上的投影。 該過程為透視投影,如下矩陣表示: s???XY1???=???f000f0001000????????xyz1?????s[XY1]=[f0000f000010][xyz1] 其中,ss為比例因子(ss不為0),ff為有效焦距(光心到圖像平面的距離),(x,y,z,1)T(x,y,z,1)T是空間點PP在相機坐標(biāo)系oxyzoxyz中的齊次坐標(biāo),(X,Y,1)T(X,Y,1)T是像點pp在圖像坐標(biāo)系OXYOXY中的齊次坐標(biāo)。 1.6 世界坐標(biāo)系轉(zhuǎn)換為像素坐標(biāo)系s???uv1???=???1/dX0001/dY0u0v01??????f000f0001000???[R0t1]?????xwywzw1?????=???αx000αy0u0v01000???[R0t1]?????xwywzw1?????=M1M2Xw=MXws[uv1]=[1/dX0u001/dYv0001][f0000f000010][Rt01][xwywzw1]=[αx0u000αyv000010][Rt01][xwywzw1]=M1M2Xw=MXw 其中,αx=f/dXαx=f/dX、αy=f/dYαy=f/dY,稱為uu、vv軸的尺度因子,M1M1稱為相機的內(nèi)部參數(shù)矩陣,M2M2稱為相機的外部參數(shù)矩陣,MM稱為投影矩陣。
2 相機內(nèi)參與畸變參數(shù)2.1 相機內(nèi)參2.2 畸變參數(shù)2.2.1 opencv中的畸變模型以下公式由泰勒展式得出,在opencv中K=1K=1,r2=x2+y2r2=x2+y2, (x,y)(x,y)為真實坐標(biāo)(發(fā)生畸變),(x′,y′)(x′,y′)為理想坐標(biāo)。 δxr=x(k1r2+k2r4+k3r6+K)δxr=x(k1r2+k2r4+k3r6+K) δyr=y(k1r2+k2r4+k3r6+K)δyr=y(k1r2+k2r4+k3r6+K) δxd=2p1xy+p2(r2+2x2)+Kδxd=2p1xy+p2(r2+2x2)+K δyd=2p1(r2+2y2)+2p2xy+Kδyd=2p1(r2+2y2)+2p2xy+K 理想坐標(biāo)(x′,y′)(x′,y′)與真實坐標(biāo)(x,y)(x,y):
x′=x+δxr+δxdx′=x+δxr+δxd y′=y+δyr+δydy′=y+δyr+δyd 也即: [x′y′]=(1+k1r2+k2r4+k3r6)[xy]+[2p1xy+p2(r2+2x2)2p1(r2+2y2)+2p2xy][x′y′]=(1+k1r2+k2r4+k3r6)[xy]+[2p1xy+p2(r2+2x2)2p1(r2+2y2)+2p2xy] 實際計算過程中,如果考慮太多高階的畸變參數(shù),會導(dǎo)致標(biāo)定求解的不穩(wěn)定。 2.2.2 張氏標(biāo)定中的畸變模型張正友的方法只考慮了徑向畸變,沒有考慮切向畸變 模型: yˉ=y+y[k1(x2+y2)+k2(x2+y2)2]yˉ=y+y[k1(x2+y2)+k2(x2+y2)2] 其中k1k1,k2k2是徑向畸變系數(shù)(coefficients of the radial distortion)。 像素坐標(biāo)表示為:
uˉ=u+(u?u0)[k1(x2+y2)+k2(x2+y2)2]uˉ=u+(u?u0)[k1(x2+y2)+k2(x2+y2)2] vˉ=v+(v?v0)[k1(x2+y2)+k2(x2+y2)2]vˉ=v+(v?v0)[k1(x2+y2)+k2(x2+y2)2] 即:
[(u?u0)(x2+y2)(v?v0)(x2+y2)(u?u0)(x2+y2)2(v?v0)(x2+y2)][k1k2]=[uˉ?uvˉ?v][(u?u0)(x2+y2)(u?u0)(x2+y2)2(v?v0)(x2+y2)(v?v0)(x2+y2)][k1k2]=[uˉ?uvˉ?v]
理想情況下(沒有畸變)圖片的像素坐標(biāo)為: (u,v)(u,v) 真實的像素坐標(biāo)為: (uˉ,vˉ)(uˉ,vˉ) 真實坐標(biāo)與理想坐標(biāo)的關(guān)系式(泰勒展開):
(x,y)(x,y) and (xˉ,yˉ)(xˉ,yˉ) are the ideal (distortion-free) and real (distorted) normalized image coordinates.
xˉ=x+x[k1(x2+y2)+k2(x2+y2)2]xˉ=x+x[k1(x2+y2)+k2(x2+y2)2]
2.2.3 Tasi畸變模型2.3 相機標(biāo)定相機標(biāo)定步驟:
1、打印一張棋盤格,把它貼在一個平面上,作為標(biāo)定物。
2、通過調(diào)整標(biāo)定物或攝像機的方向,為標(biāo)定物拍攝一些不同方向的照片。
3、從照片中提取棋盤格角點。
4、估算理想無畸變的情況下,五個內(nèi)參和六個外參。
5、應(yīng)用最小二乘法估算實際存在徑向畸變下的畸變系數(shù)。
6、極大似然法,優(yōu)化估計,提升估計精度。
3 Matlab相機標(biāo)定






cameraParams =
cameraParameters (具有屬性):
Camera Intrinsics
IntrinsicMatrix: [3x3 double]
FocalLength: [510.6720 511.9534]
PrincipalPoint: [332.3800 238.4849]
Skew: 0
Lens Distortion
RadialDistortion: [0.0618 -0.4877]
TangentialDistortion: [0 0]
Camera Extrinsics
RotationMatrices: [3x3x50 double]
TranslationVectors: [50x3 double]
Accuracy of Estimation
MeanReprojectionError: 0.1923
ReprojectionErrors: [77x2x50 double]
ReprojectedPoints: [77x2x50 double]
Calibration Settings
NumPatterns: 50
WorldPoints: [77x2 double]
WorldUnits: 'mm'
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0
estimationErrors =
cameraCalibrationErrors (具有屬性):
IntrinsicsErrors: [1x1 intrinsicsEstimationErrors]
ExtrinsicsErrors: [1x1 extrinsicsEstimationErrors]
>> cameraParams.IntrinsicMatrix
ans =
510.6720 0 0
0 511.9534 0
332.3800 238.4849 1.0000
>> cameraParams.RadialDistortion
ans =
0.0618 -0.4877
參考資料
|