相机的成像结果可以抽象为一个小孔和一个平面,用小孔成像模型描述。
三维世界的光线经过小孔即光心到达成像平面,形成二维投影。以相机的光心O为原点, X c X_c Xc 、 Y c Y_c Yc 、 Z c Z_c Zc 为坐标轴组成相机坐标系;以成像平面的中心 O ′ O' O′为原点, x ′ x' x′ 、 y ′ y' y′ 为坐标轴组成图像坐标系。成像过程即为相机坐标系下的三维点变换为图像坐标系下的二维点的过程。
假设P为三维空间中一点。在相机坐标系下,其坐标为 P = [ X , Y , Z ] T P = [ X,Y,Z]^T P=[X,Y,Z]T;在图像坐标系下为点 p p p,其坐标为 p = [ x , y ] T p = [x,y]^T p=[x,y]T。
连接O 、O’ 与光轴重合,且与成像平面垂直,则p在相机坐标系下 p = [ x , y , z ] T p = [x,y,z]^T p=[x,y,z]T,其中 z = f z = f z=f, f f f表示相机的焦距。仅考虑水平和光轴方向,模型抽象为一组相似三角形。
由几何关系:
Z f = X x = Y y \frac{Z}{f} = \frac{X}{x} = \frac{Y}{y} fZ=xX=yY
整理得:
x = f ⋅ X Z y = f ⋅ Y Z z = f (1) x = f \cdot \frac{X}{Z}\\ y = f \cdot \frac{Y}{Z}\\ z = f \\ \tag1 x=f⋅ZXy=f⋅ZYz=f(1)
扩展坐标的维度,将 Z Z Z线性化:
[ x ^ y ^ z ^ ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X Y Z 1 ] \left[ \begin{matrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{matrix} \right] = \left[ \begin{matrix} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \end{matrix} \right] \left[ \begin{matrix} X \\ Y \\ Z \\ 1 \end{matrix} \right] ⎣⎡x^y^z^⎦⎤=⎣⎡f000f0001000⎦⎤⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
则坐标 ( x ^ , y ^ , z ^ ) (\hat{x} ,\hat{y} ,\hat{z}) (x^,y^,z^) 就是 p = ( x , y ) p = (x,y) p=(x,y)的齐次坐标。
相机的像素信息的计算机中占据一段连续的磁盘或内存空间,为了从存储信息的首地址开始读写,以成像平面的左上角为原点,水平向右作为 u u u轴正向,竖直向下作为 v v v轴正向,建立像素坐标系,其基本单位为像素。
两个坐标系的对应关系如下:
由此可知,图像坐标系和像素坐标系虽然在同一平面,但是相差了一个缩放和一个原点的平移。由于像素块是一个矩形,设其水平长度为 α \alpha α,竖直长度为 β \beta β。将图像坐标系下的点 ( x , y ) (x,y) (x,y)在水平方向上缩放 α \alpha α倍、平移 c x c_{x} cx,竖直方向上缩放 β \beta β倍、平移 c y c_{y} cy,得到像素坐标系下坐标 ( u , v ) (u,v) (u,v)
u = α ⋅ x + c x v = β ⋅ y + c y u = \alpha \cdot x + c_{x} \\ v = \beta \cdot y + c_{y} u=α⋅x+cxv=β⋅y+cy
式(1)带入:
f x = α ⋅ f f y = β ⋅ f f_{x} = \alpha \cdot f \\ f_{y} = \beta \cdot f fx=α⋅ffy=β⋅f
写成齐次坐标的形式:
[ u v 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] \left[ \begin{matrix} u \\ v \\ 1 \end{matrix} \right] = \frac{1}{Z} \left[ \begin{matrix} f_{x}&0&c_{x} \\ 0&f_{y}&c_{y} \\ 0&0&1 \end{matrix} \right] ⎣⎡uv1⎦⎤=Z1⎣⎡fx000fy0cxcy1⎦⎤
得相机得内参数矩阵:
K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \left[ \begin{matrix} f_{x}&0&c_{x} \\ 0&f_{y}&c_{y} \\ 0&0&1 \end{matrix} \right] K=⎣⎡fx000fy0cxcy1⎦⎤
其中 K K K称为相机的内参数矩阵,有四个未知数,这与相机的构造有关。根据以上推导可知, f x f_{x} fx 、 f y f_{y} fy 与相机的焦距、像素的长宽有关; c x c_x cx、 c y c_y cy 与相机的成像平面大小有关。
综上所述,相机的成像过程为:
p = K ⋅ P p = K \cdot P p=K⋅P
当相机移动时,相机坐标系的原点和坐标轴的方向也会随之变化,所以需要将其变换到系统的绝对坐标系下,即世界坐标系。
相机的运动可以用一个旋转和一个平移描述。设某一点在相机坐标系下坐标为 P c P_c Pc,在世界坐标系下坐标为 P w P_w Pw,旋转矩阵为 R R R,平移向量为 t t t,则其转换关系为: P c = R ⋅ P w + t P_c = R \cdot P_w +t Pc=R⋅Pw+t
写成齐次坐标形式为
[ X c Y c Z c 1 ] = [ R 11 R 12 R 13 t 1 R 21 R 22 R 23 t 2 R 31 R 32 R 33 t 3 0 0 0 1 ] [ X w Y w Z w 1 ] \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ 1 \end{matrix} \right] = \left[ \begin{matrix} R_{11} & R_{12} &R_{13}&t_1 \\ R_{21}&R_{22}&R_{23}&t_2 \\ R_{31}&R_{32}&R_{33}&t_3 \\ 0&0&0&1 \end{matrix} \right] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \end{matrix} \right] ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=⎣⎢⎢⎡R11R21R310R12R22R320R13R23R330t1t2t31⎦⎥⎥⎤⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
即
[ X c Y c Z c 1 ] = [ R t 0 1 ] [ X w Y w Z w 1 ] \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ 1 \end{matrix} \right] = \left[ \begin{matrix} R & t \\ 0&1 \end{matrix} \right] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \end{matrix} \right] ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=[R0t1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
得到相机的外参数矩阵
T = [ R t 0 1 ] T = \left[ \begin{matrix} R & t \\ 0&1 \end{matrix} \right] T=[R0t1]
综上所述,就得到了一个相机的矩阵:
[ u v 1 ] = [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 1 ] [ X w Y w Z w 1 ] \left[ \begin{matrix} u \\ v \\ 1 \end{matrix} \right] = \left[ \begin{matrix} \frac{1}{dx} & 0 & c_x \\ 0& \frac{1}{dy} & c_y \\ 0 & 0 &1 \end{matrix} \right] \left[ \begin{matrix} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \end{matrix} \right] \left[ \begin{matrix} R & t \\ 0&1 \end{matrix} \right] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \end{matrix} \right] ⎣⎡uv1⎦⎤=⎣⎡dx1000dy10cxcy1⎦⎤⎣⎡f000f0001000⎦⎤[R0t1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
其中:
- ( u , v , 1 ) (u,v,1) (u,v,1)表示像素坐标系下点的齐次坐标形式;
- d x , d y dx,dy dx,dy表示相机像素的长和宽,承前, α = 1 d x , β = 1 d y \alpha = \frac{1}{dx},\beta = \frac{1}{dy} α=dx1,β=dy1;
- c x , c y c_x , c_y cx,cy表示图像坐标系原点和像素坐标系原点的偏移值;
- f f f表示相机的焦距;
- R R R表示相机的旋转矩阵
- t t t表示相机的平移矩阵
- ( X w , Y w , Z w , 1 ) (X_w , Y_w , Z_w , 1) (Xw,Yw,Zw,1)表示点在世界坐标系下坐标的的齐次坐标形式
这就推得了相机矩阵。相机矩阵的参数由内参数和外参数组成。相机在制造的过程中,难免会出现偏差,仅仅使用出厂参数是不够的,另外还要考虑镜头畸变引起的误差。相机标定是一个获取相机内参数和外参数以及矫正镜头畸变的过程。相机标定的结果的精度将直接影响相机工作时所得结果的准确度。
标定方法使用张定友教授提出的张氏标定法。
参考:高翔《视觉SLAM十四讲》