实用指南:计算机视觉——相机标定
计算机视觉——相机标定
一、像素坐标系、图像坐标系、相机坐标系、世界坐标系
- 像素坐标系:数字图像在计算机内为M × N M\times NM×N的数组,其中每个元素(称为像素)的数值即是图像点的亮度(或称为灰度,彩色图像对应的为RGB)。在图像上定义直角坐标系u , v u,vu,v,每一个像素的坐标( u , v ) (u,v)(u,v)分别是该像素在数组中的列数与行数。
- 图像坐标系:以图像内某一点O 1 O_1O1 为原点,x xx 轴与 y yy 轴分别与 u , v u,vu,v轴平行,该坐标系中,原点O 1 O_1O1定义在相机光轴与图像平面的交点,该点一般位于图像中心处。

- 相机坐标系:如图所示,其中O OO点称为相机光心,X c X_cXc 轴和 Y c Y_cYc 轴与图像的 x xx 轴与 y yy 轴平行,Z c Z_cZc轴为相机的光轴,它与图像平面垂直。光轴与图像平面的交点,即为图像物理坐标系的原点,由点O OO 与 X c , Y c , Z c X_c,Y_c,Z_cXc,Yc,Zc轴组成的直角坐标系称为相机坐标系。O O 1 OO_1OO1为相机焦距。
- 世界坐标系:由于相机可安放在环境中的任意位置,我们在环境中还需选择一个基准坐标系来描述相机的位置,并用它描述环境中任意物体的位置,该坐标系称为世界坐标系。它由X w , Y w , Z w X_w,Y_w,Z_wXw,Yw,Zw 轴组成。

二、坐标系变换
图像坐标系 → 像素坐标系
如图1所示,若O 1 O_1O1 在 u , v u,vu,v坐标系中的坐标为( u 0 , v 0 ) (u_0,v_0)(u0,v0),每个像素在x xx 轴与 y yy轴方向上的物理尺寸为d x , d y dx,dydx,dy,单位:毫米(mm),则图像中任意一个像素在两个坐标系下的坐标有如下关系:
u = x d x + u 0 v = y d y + v 0 (1)u=xdx+u0v=ydy+v0\tag{1}uv=dxx+u0=dyy+v0(1)
写成矩阵的形式:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] ⟺ [ x y 1 ] = [ d x 0 − u 0 d x 0 d y − v 0 d y 0 0 1 ] [ u v 1 ] (2) \left[uv1\right]= \left[1dx0u001dyv0001\right]\left[xy1\right] \quad\Longleftrightarrow\quad \left[xy1\right]= \left[dx0−u0dx0dy−v0dy001\right]\left[uv1\right]\tag{2}uv1=dx1000dy10u0v01xy1⟺xy1=dx000dy0−u0dx−v0dy1uv1(2)
相机坐标系 → 图像坐标系
如图2所示,相机坐标系中的点( X c , Y c , Z c ) (X_c,Y_c,Z_c)(Xc,Yc,Zc)投影到图像坐标系中的点为( x , y ) (x,y)(x,y)。根据相似三角形原理可以得到如下关系式:
x = f X c Z c , y = f Y c Z c (3)x=fXcZc,y=fYcZc\tag{3}x=ZcfXc,y=ZcfYc(3)
写成矩阵的形式:
Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] (4) Z_c\left[xy1\right]=\left[f0000f000010\right]\left[XcYcZc1\right]\tag{4}Zcxy1=f000f0001000XcYcZc1(4)
世界坐标系 → 相机坐标系
相机坐标系与世界坐标系之间的关系可以用旋转矩阵R \pmb RR 与平移向量 t \pmb tt来描述。因此,若空间中某一点P \pmb PP在世界坐标系与相机坐标系下的坐标分别为( X w , Y w , Z w , 1 ) T (X_w,Y_w,Z_w,1)^T(Xw,Yw,Zw,1)T 与 ( X c , Y c , Z c , 1 ) T (X_c,Y_c,Z_c,1)^T(Xc,Yc,Zc,1)T存在如下关系:就是,于
[ X c Y c Z c 1 ] = [ R t 0 T 1 ] [ X w Y w Z w 1 ] = M 1 [ X w Y w Z w 1 ] (5) \left[XcYcZc1\right]= \left[RRtt 00T1\right]\left[XwYwZw1\right]=\pmb M_1\left[XwYwZw1\right]\tag{5}XcYcZc1=[R 0Tt1]XwYwZw1=M1XwYwZw1(5)
其中,R \pmb RR 为 3 × 3 3\times 33×3单位正交矩阵,t \pmb tt为三维平移向量,0 = ( 0 , 0 , 0 ) T \pmb 0=(0,0,0)^T0=(0,0,0)T,M 1 \pmb M_1M1 为 4 × 4 4\times 44×4 矩阵。
⋆ \star⋆世界坐标系 → 像素坐标系
联立式 ( 2 ) , ( 4 ) , ( 5 ) (2),(4),(5)(2),(4),(5),消去 ( x , y , 1 ) T , ( X c , Y c , Z c , 1 ) T (x,y,1)^T,(X_c,Y_c,Z_c,1)^T(x,y,1)T,(Xc,Yc,Zc,1)T,有,
Z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = [ a x 0 u 0 0 0 a y v 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = M 1 M 2 [ X w Y w Z w 1 ] = M [ X w Y w Z w 1 ] (6)Zc[uv1]=[1dx0u001dyv0001][f0000f000010][RRtt 00T1][XwYwZw1]=[ax0u000ayv000010][RRtt 00T1][XwYwZw1]=MM1MM2[XwYwZw1]=MM[XwYwZw1]\tag{6}Zcuv1=dx1000dy10u0v01f000f0001000[R 0Tt1]XwYwZw1=ax000ay0u0v01000[R 0Tt1]XwYwZw1=M1M2XwYwZw1=MXwYwZw1(6)
其中,a x = f d x , a y = f d y a_x=\dfrac{f}{dx},a_y=\dfrac{f}{dy}ax=dxf,ay=dyf, 由于 a x , a y , u 0 , v 0 a_x,a_y,u_0,v_0ax,ay,u0,v0只与相机内部结构有关,因此称M 1 \pmb M_1M1 为相机的内参矩阵;而 M 2 \pmb M_2M2完全由相机相对于世界坐标系的方位决定,因此称为相机的外参矩阵;称 M \pmb MM 为投影矩阵。
三、相机标定
确定某一相机的内外参矩阵,称为相机标定。
将式 ( 6 ) (6)(6) 写成
Z c i [ u i v i 1 ] = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 ] [ X w i Y w i Z w i 1 ] (7) Z_{ci}\left[uivi1\right]=\left[m11m12m13m14m21m22m23m24m31m32m33m34\right]\left[XwiYwiZwi1\right]\tag{7}Zciuivi1=m11m21m31m12m22m32m13m23m33m14m24m34XwiYwiZwi1(7)
其中,( X w i , Y w i , Z w i , 1 ) (X_{wi},Y_{wi},Z_{wi},1)(Xwi,Ywi,Zwi,1) 为空间中第 i ii个点的世界坐标;( u i , v i , 1 ) (u_i,v_i,1)(ui,vi,1)为对应的像素坐标。式( 7 ) (7)(7)包含三个方程:
Z c i u i = m 11 X w i + m 12 Y w i + m 13 Z w i + m 14 Z c i v i = m 21 X w i + m 22 Y w i + m 23 Z w i + m 24 Z c i = m 31 X w i + m 32 Y w i + m 33 Z w i + m 34 (8)Zciui=m11Xwi+m12Ywi+m13Zwi+m14Zcivi=m21Xwi+m22Ywi+m23Zwi+m24Zci=m31Xwi+m32Ywi+m33Zwi+m34\tag{8}ZciuiZciviZci=m11Xwi+m12Ywi+m13Zwi+m14=m21Xwi+m22Ywi+m23Zwi+m24=m31Xwi+m32Ywi+m33Zwi+m34(8)
将式 ( 8 ) (8)(8)中的第一式减去u i u_iui乘第三式,第二式减去v i v_ivi乘第三式,分别消去Z c i Z_{ci}Zci后,可得如下线性方程:
X w i m 11 + Y w i m 12 + Z w i m 13 + m 14 − u i X w i m 31 − u i Y w i m 32 − u i Z w i m 33 − u i m 34 = 0 X w i m 21 + Y w i m 22 + Z w i m 23 + m 24 − v i X w i m 31 − v i Y w i m 32 − v i Z w i m 33 − v i m 34 = 0 (9)Xwim11+Ywim12+Zwim13+m14−uiXwim31−uiYwim32−uiZwim33−uim34=0Xwim21+Ywim22+Zwim23+m24−viXwim31−viYwim32−viZwim33−vim34=0\tag{9}Xwim11+Ywim12+Zwim13+m14−uiXwim31−uiYwim32−uiZwim33−uim34Xwim21+Ywim22+Zwim23+m24−viXwim31−viYwim32−viZwim33−vim34=0=0(9)
上式表示,若已知n nn个点的世界坐标( X w i , Y w i , Z w i ) (X_{wi},Y_{wi},Z_{wi})(Xwi,Ywi,Zwi),与它们的像素坐标( u i , v i ) (u_i,v_i)(ui,vi),则我们有 2 n 2n2n个关于投影矩阵M \pmb MM元素的线性方程。
由此可见,由空间6个以上点的世界坐标与对应的像素坐标,我们可求出投影矩阵M \pmb MM。在一般的标定中,大家都有数十个已知点,使方程的个数远超未知数的个数,从而用最小二乘法求解以降低误差造成的影响。