1、相机坐标系
图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机(摄像机)坐标系、图像坐标系、像素坐标系:
通过如下图的转换,可以将世界坐标中点的坐标(Xw, Yw, Zw),同二维图像中的像素坐标(u,v)对应起来。
- 像素坐标系
摄像机采集的数字图像在计算机内可以存储为数组,数组中的每一个元素(象素,pixel)的值即是图像点的亮度(灰度)。在图像上定义直角坐标系u-v,每一象素的坐标(u,v)分别是该象素在数组中的列数和行数。故(u,v)是以象素为单位的图像坐标系坐标。
- 图像坐标系
由于(u,v)只代表像素的列数与行数,而像素在图像中的位置并没有用物理单位表示出来,所以,我们还要建立以物理单位(如毫米)表示的图像坐标系x-y。用(x,y)表示以物理单位度量的成像平面坐标系的坐标。在x-y坐标系中,原点定义在摄像机光轴和图像平面的交点处,称为图像的主点(principal point),该点一般位于图像中心处。
假设(u0,v0)代表O1在u-v坐标系下的坐标,dx与dy分别表示每个像素在横轴x和纵轴y上的物理尺寸,则图像中的每个像素在u-v坐标系中的坐标和在x-y坐标系中的坐标之间都存在如下的关系: $$ \begin{cases} u = \dfrac{x}{d_x} + u_0 \ v = \dfrac{y}{d{y}} + v_0 \end{cases}\tag{1} $$ 用齐次坐标与矩阵形式表示为: $$ \begin{bmatrix} u \ v \ 1 \end{bmatrix} = \begin{bmatrix} \dfrac{1}{d_x} & 0 & {u_0} \ 0 & \dfrac{1}{d_y} & {v_0} \ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \ y \ 1 \end{bmatrix}\tag{2} $$ 这样,就建立了图像中,像素坐标和物理尺寸坐标之间的对应关系。
- 相机坐标系
相机坐标系 (Xc,Yc,Zc)中,原点 为相机透镜的中心,坐标轴 Xc 轴与 x 轴平行,Yc 轴与 y 轴平行,Zc 轴与相机光轴重合。从相机坐标系到图像坐标系,属于透视投影关系,从3D转换到2D。
设相机的焦距为 f,则根据小孔成像模型,可知相机坐标系下空间点 (Xc,Yc,Zc),与物理尺寸坐标 (x,y) 的关系如下: $$ \begin{cases} \dfrac{x}{f} = \dfrac{X_c}{Z_c} \ \dfrac{y}{f} = \dfrac{Y_c}{Z_c} \end{cases}\tag{3} $$
$$ \begin{cases} Z_c \cdot x = f \cdot {X_c} \ Z_c \cdot y = f \cdot {Y_c} \end{cases}\tag{4} $$
$$ Z_c \begin{bmatrix} x \ y \ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \ 0 & f & 0 & 0 \ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \ Y_c \ Z_c \ 1 \end{bmatrix}\tag{5} $$
由(2)和(5),可以得到像素坐标 (u,v) 与相机坐标点 (Xc,Yc,Zc) 的关系为: $$ Z_c \begin{bmatrix} u \ v \ 1 \end{bmatrix} = \begin{bmatrix} \dfrac{1}{d_x} & 0 & u_0 \ 0 & \dfrac{1}{d_y} & v_0 \ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0 \ 0 & f & 0 & 0 \ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \ Y_c \ Z_c \ 1 \end{bmatrix} = \begin{bmatrix} \dfrac{f}{d_x} & 0 & u_0 & 0 \ 0 & \dfrac{f}{d_y} & v_0 & 0 \ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \ Y_c \ Z_c \ 1 \end{bmatrix}\tag{6} $$
- 世界坐标系
在环境中还选择一个参考坐标系来描述摄像机和物体的位置,该坐标系称为世界坐标系。摄像机坐标系和世界坐标系之间的关系可用旋转矩阵R与平移向量t来描述。由此,空间中一点P在世界坐标系和摄像机坐标系下的齐次坐标分别为和且存在如下关系: $$ \begin{bmatrix} X_c \ Y_c \ Z_c \ 1\end{bmatrix} = \begin{bmatrix} R & T \ 0^{T} & 1 \end{bmatrix} \begin{bmatrix} X_w \ Y_w \ Z_w \ 1 \end{bmatrix}\tag{7} $$ 其中,R是3×3的正交单位矩阵(也成为旋转矩阵),T是三维的平移向量
所以,由(6)和(7)可以得到像素点(u,v)到世界坐标点的转换关系: $$ Z_c \begin{bmatrix} u \ v \ 1 \end{bmatrix} = \begin{bmatrix} \dfrac{f}{d_x} & 0 & u_0 & 0 \ 0 & \dfrac{f}{d_y} & v_0 & 0 \ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} R & T \ 0^{T} & 1 \end{bmatrix} \begin{bmatrix} X_w \ Y_w \ Z_w \ 1 \end{bmatrix}\tag{8} $$ 其中: $$ \begin{bmatrix} \dfrac{f}{d_x} & 0 & u_0 & 0 \ 0 & \dfrac{f}{d_y} & v_0 & 0 \ 0 & 0 & 1 & 0 \end{bmatrix} 是相机的内参 $$
$$ \begin{bmatrix} R & T \ 0^{T} & 1 \end{bmatrix} 是相机的外参 $$
相机的内参和外参数可以通过张正友标定获得,OpenCV摄像相投标定教程。如果已知一个点的世界坐标,可以在图像中找到与其对应的像素点,但反之,则不能通过图像中的一个点找到它在世界坐标中对应的点,因为(8)中Zc未知。
2、相机内参数
相机内参数,由相机本身决定,只和相机本身有关。摄像头由于光学透镜的特性使得成像存在着径向畸变,可由三个参数k1,k2,k3确定。由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数p1,p2确定。
单个摄像头的定标主要是计算出摄像头的内参(焦距f和成像原点cx,cy、五个畸变参数(一般只需要计算出k1,k2,p1,p2,对于鱼眼镜头等径向畸变特别大的才需要计算k3))以及外参(标定物的世界坐标)。
3、相机外参数
相机外参数,相机在世界坐标系中的位姿,由相机与世界坐标系的相对位姿关系决定。其参数有:旋转向量R(大小为1x3的矢量或旋转矩阵3x3)和平移向量T(Tx,Ty,Tz)。