二维图像能提供丰富的环境信息或空间信息,这些信息涵盖(1)图像上每一点的亮度与物体某个表面点的反射光的强度的关系(2)图像点在图像平面上的位置与 a . a. a.相机与空间物体的相对方位的关系; b . b. b.相机的内部结构关系1。利用这些信息,可实现诸如测距,测量,识别,地图构建,定位,相机运动和姿态估计等方面的工作。
为了描述相机的几何成像关系,需要进行数学建模,这些几何模型参数就是相机参数,包括内参和外参,而求解参数的过程就称为相机标定。本文所介绍的相机模型是计算机视觉中广泛使用的针孔模型(The basic pinhole model)。这种模型在数学上是三维空间到二维平面(image plane or focal plane)的中心投影,由一个 3 × 4 3\times4 3×4投影矩阵 P = K [ R ∣ t ] P=K[R|t] P=K[R∣t]2来描述, K K K为相机内参(internal camera parameters), [ R ∣ t ] [R|t] [R∣t]为外参(external parameters)。
我们通过描述四个坐标系的相互转换关系,可以拆分和剖析投影矩阵 P P P。
刚体变换只改变物体的空间位置(平移)和朝向(旋转),而不改变其形状的变换,可用两个变量来描述:正交单位旋转矩阵 R R R,三维平移矢量 t t t。世界坐标系到相机坐标系的转换关系也是如此,如下图所示2。
平移比较好理解,世界坐标系原点移动到相机坐标系;旋转一共有三个自由度,即绕 x , y , z x,y,z x,y,z旋转,根据旋转角度可以分别得三个方向上的旋转矩阵 R x , R y , R z R_x,R_y,R_z Rx,Ry,Rz,而旋转矩阵即为他们的乘积4, R = R x × R y × R z R=R_x \times R_y \times R_z R=Rx×Ry×Rz。以绕 X X X轴旋转为例,我们可以得到 R x R_x Rx。
{ X C = X W Y C = Y W ∗ cos θ + Z W ∗ sin θ Z C = − Y W ∗ sin θ + Z W ∗ cos θ \left\{ \begin{aligned} X_C &= X_W \\ Y_C &= Y_W * \cos{\theta} + Z_W * \sin{\theta} \\ Z_C &= -Y_W * \sin{\theta} + Z_W * \cos{\theta} \end{aligned} \right. ⎩⎪⎨⎪⎧XCYCZC=XW=YW∗cosθ+ZW∗sinθ=−YW∗sinθ+ZW∗cosθ
写成矩阵形式如下,
[ X C Y C Z C ] = [ 1 0 0 0 cos θ sin θ 0 − sin θ cos θ ] [ X W Y W Z W ] = R x [ X W Y W Z W ] \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \end{array} \right ]= \left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos{\theta} & \sin{\theta} \\ 0 & -\sin{\theta}& \cos{\theta} \end{array} \right ] \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ]= R_x \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ] ⎣⎡XCYCZC⎦⎤=⎣⎡1000cosθ−sinθ0sinθcosθ⎦⎤⎣⎡XWYWZW⎦⎤=Rx⎣⎡XWYWZW⎦⎤
同理可得绕 y y y轴和 z z z轴旋转的关系。
[ X C Y C Z C ] = [ cos θ 0 − sin θ 0 1 0 sin θ 0 cos θ ] [ X W Y W Z W ] = R y [ X W Y W Z W ] \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \end{array} \right ]= \left[ \begin{array}{ccc} \cos{\theta} & 0 & -\sin{\theta} \\ 0 & 1 & 0 \\ \sin{\theta} & 0& \cos{\theta} \end{array} \right ] \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ]= R_y \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ] ⎣⎡XCYCZC⎦⎤=⎣⎡cosθ0sinθ010−sinθ0cosθ⎦⎤⎣⎡XWYWZW⎦⎤=Ry⎣⎡XWYWZW⎦⎤
[ X C Y C Z C ] = [ cos θ sin θ 0 − sin θ cos θ 0 0 0 1 ] [ X W Y W Z W ] = R z [ X W Y W Z W ] \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \end{array} \right ]= \left[ \begin{array}{ccc} \cos{\theta} & \sin{\theta} & 0 \\ -\sin{\theta} & \cos{\theta} & 0 \\ 0 & 0& 1 \end{array} \right ] \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ]= R_z \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ] ⎣⎡XCYCZC⎦⎤=⎣⎡cosθ−sinθ0sinθcosθ0001⎦⎤⎣⎡XWYWZW⎦⎤=Rz⎣⎡XWYWZW⎦⎤
于是可得旋转矩阵 R = R x R y R z R = R_x R_y R_z R=RxRyRz
[ X C Y C Z C ] = R [ X W Y W Z W ] + t \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \end{array} \right ]= R \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right ] + t ⎣⎡XCYCZC⎦⎤=R⎣⎡XWYWZW⎦⎤+t
写成齐次坐标系形式为,
[ X C Y C Z C 1 ] = [ R t 0 1 × 3 1 ] [ X W Y W Z W 1 ] (1) \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \\ 1 \end{array} \right ]= \left[ \begin{array}{cc} R & t\\ 0_{1 \times 3} & 1 \end{array} \right ] \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \\ 1 \end{array} \right ] \tag{1} ⎣⎢⎢⎡XCYCZC1⎦⎥⎥⎤=[R01×3t1]⎣⎢⎢⎡XWYWZW1⎦⎥⎥⎤(1)
相机坐标系到图像坐标系是透视关系,利用相似三角形进行计算2。
{ x f = X C Z C y f = Y C Z C \left\{ \begin{aligned} \frac{x}{f} = \frac{X_C}{Z_C} \\ \frac{y}{f} = \frac{Y_C}{Z_C} \end{aligned} \right. ⎩⎪⎪⎨⎪⎪⎧fx=ZCXCfy=ZCYC
写成齐次坐标形式的矩阵相乘为,
Z C [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X C Y C Z C 1 ] = [ K ∣ 0 ] [ X C Y C Z C 1 ] (2) Z_C\left[ \begin{array}{c} x \\ y \\ 1 \end{array} \right ]= \left[ \begin{array}{cccc} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array} \right ] \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \\ 1 \end{array} \right ] = [K|0]\left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \\ 1 \end{array} \right ] \tag{2} ZC⎣⎡xy1⎦⎤=⎣⎡f000f0001000⎦⎤⎣⎢⎢⎡XCYCZC1⎦⎥⎥⎤=[K∣0]⎣⎢⎢⎡XCYCZC1⎦⎥⎥⎤(2)
其中 K K K称为相机内参数矩阵。
主点偏离图像中心(principal point offset)1:在实际应用中,由于事先不知道主点的确切位置,通常都是以图像中心或者图像的左上角作为图像坐标系的原点来建立图像坐标系的。当主点不是坐标系原点时,相机内参数矩阵形式如下。 [ f 0 x 0 0 f y 0 0 0 1 ] \left[ \begin{array}{ccc} f & 0 & x_0 \\ 0 & f & y_0 \\ 0 & 0 & 1 \end{array} \right ] ⎣⎡f000f0x0y01⎦⎤
这种说法可能不太好理解,我们这里仅作参考,感兴趣的可以阅读Reference1和2中的相关章节。
像素坐标系是图像坐标系的离散化表示,实际CCD相机每个像素对应一个感光点,是个矩形,假设其物理尺寸为 d x dx dx宽, d y dy dy高。以CCD传感器的左上角为坐标原点建立的坐标系与以成像平面中心建立的坐标系的转换关系如下。
{ u = x d x + u 0 v = y d y + v 0 \left\{ \begin{aligned} u = \frac{x}{d_x} + u_0 \\ v = \frac{y}{d_y} + v_0 \end{aligned} \right. ⎩⎪⎨⎪⎧u=dxx+u0v=dyy+v0
齐次坐标矩阵形式为,
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] (3) \left[ \begin{array}{c} u \\ v \\ 1 \end{array} \right ]= \left[ \begin{array}{ccc} \frac{1}{d_x} & 0 & u_0 \\ 0 & \frac{1}{d_y} & v_0 \\ 0 & 0 & 1 \end{array} \right ] \left[ \begin{array}{c} x \\ y \\ 1 \end{array} \right ] \tag{3} ⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤⎣⎡xy1⎦⎤(3)
由于制造工艺的限制,一般情况下,CCD 摄像机数字离散化后的像素不是一个矩形而是一个平行四边形,四边形的一边平行于 u u u轴,而另一边与 u u u轴形成一个 θ \theta θ角。则内参矩阵中会出现一个扭曲因子 s s s。感兴趣可进一步阅读Reference1中相关章节。
根据公式 ( 1 ) ( 2 ) ( 3 ) (1)(2)(3) (1)(2)(3)可得,
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 1 × 3 1 ] [ X W Y W Z W 1 ] = [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] [ R t 0 1 × 3 1 ] [ X W Y W Z W 1 ] Z_C\left[ \begin{array}{c} u \\ v \\ 1 \end{array} \right ]= \left[ \begin{array}{ccc} \frac{1}{d_x} & 0 & u_0 \\ 0 & \frac{1}{d_y} & v_0 \\ 0 & 0 & 1 \end{array} \right ] \left[ \begin{array}{cccc} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array} \right ] \left[ \begin{array}{cc} R & t\\ \bf{0}_{1 \times 3} & 1 \end{array} \right ] \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \\ 1 \end{array} \right ] \\ = \left[ \begin{array}{cccc} f_x & 0 & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{array} \right ] \left[ \begin{array}{cc} R & t\\ \bf{0}_{1 \times 3} & 1 \end{array} \right ] \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \\ 1 \end{array} \right ] ZC⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤⎣⎡f000f0001000⎦⎤[R01×3t1]⎣⎢⎢⎡XWYWZW1⎦⎥⎥⎤=⎣⎡fx000fy0u0v01000⎦⎤[R01×3t1]⎣⎢⎢⎡XWYWZW1⎦⎥⎥⎤
其中,
[ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] \left[ \begin{array}{cccc} f_x & 0 & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{array} \right ] ⎣⎡fx000fy0u0v01000⎦⎤为相机内参矩阵, [ R t 0 1 × 3 1 ] \left[ \begin{array}{cc} R & t\\ \bf{0}_{1 \times 3} & 1 \end{array} \right ] [R01×3t1]为外参矩阵。相机标定就是为了求解这两个矩阵的参数。
吴福朝. 计算机视觉中的数学方法[M]. 科学出版社, 2008 ↩︎ ↩︎
Hartley, R., & Zisserman, A. (2004). Multiple View Geometry in Computer Vision (2nd ed.). Cambridge: Cambridge University Press. doi:10.1017/CBO9780511811685 ↩︎ ↩︎ ↩︎
Corke P. Robotics, vision and control: fundamental algorithms in MATLAB® second, completely revised[M]. Springer, 2017. ↩︎ ↩︎
Rotation of Axes ↩︎