简述张氏标定法,以及深度相机标定原理。

RGB相机标定

矩阵变换关系

相机标定涉及到以下坐标系,其最终目的是建立世界坐标系像素坐标系之间的关系

  • 世界坐标系$$(x_w,y_w,z_w)$$:用户定义的三维世界坐标系
  • 相机坐标系$$(x_c,y_c,z_c)$$:相机坐标系z轴和光轴重合,且垂直于图像坐标系
  • 图像坐标系$$(x,y,z)$$:成像平面坐标
  • 像素坐标系$$(u,v)$$:和图像坐标系同平面,但是原点在左上角,单位为像素

上述坐标系有如下变换:

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]=
\left[\begin{matrix}r_1 & r_2 & r_3 & t\end{matrix}\right]
\left[\begin{matrix}x_w \y_w \0 \ 1\end{matrix}\right]=
\left[\begin{matrix}r_1 & r_2 & t\end{matrix}\right]
\left[\begin{matrix}x_w \y_w \1\end{matrix}\right] \tag{1}
$$
上面的公式假定,物体的$$z_w=0$$,即可以认为标定时棋盘平面和$$X_wOY_w$$重合。

2. 相机坐标到图像坐标系

这一过程进行了从三维坐标到二维坐标的转换,即寻找相机坐标系中点(三维坐标)在图像坐标系中的成像点(二维坐标)。

根据上述图中的变换关系,即可推到出以下公式($$f$$为相机焦距)。

$$
z_c\left[\begin{matrix}x \y \ 1\end{matrix}\right]=
\left[\begin{matrix} f&0&0\0&f&0\0&0&1 \end{matrix}\right]
\left[\begin{matrix}x_c \y_c \z_c\end{matrix}\right]=
\left[\begin{matrix} f&0&0\0&f&0\0&0&1 \end{matrix}\right]
\left[\begin{matrix} 1&0&0&0\0&1&0&0\0&0&1&0 \end{matrix}\right]
\left[\begin{matrix}x_c \y_c \z_c \1\end{matrix}\right]
\tag{2}
$$

*3. *图像坐标系考虑畸变

畸变是相机内部的固有性质,主要包括:径向畸变、切向畸变、薄透镜畸变。

$$[x,y,1]^T$$如何矫正畸变转换为实际图像坐标系暂时不介绍。

4. (实际)图像坐标系到像素坐标系

由于定义的像素坐标系原点与图像坐标系原点不重合,假设像素坐标系原点在图像坐标系下的坐标为$$(u0,v0)$$,每个像素点在图像坐标系x轴、y轴方向的尺寸为:dx、dy(每个像素点代表的实际尺寸),且像点在实际图像坐标系下的坐标为$$(x,y)$$,于是可得到像点在像素坐标系下的坐标为:

$$u=x/d_x+u_0, v=v/d_y+v_0$$,矩阵形式为:
$$
\left[\begin{matrix}u \v \1\end{matrix}\right] =
\left[\begin{matrix} 1/d_x&0&u_0\0&1/d_y&v_0\0&0&1 \end{matrix}\right]
\left[\begin{matrix}x \y \1\end{matrix}\right] \tag3
$$

将上面的三个公式合并,得到世界坐标系——相机坐标系——图像坐标系——像素坐标系的转换公式:
$$
\left[\begin{matrix}u \v \1\end{matrix}\right] =
\left[\begin{matrix} 1/d_x&0&u_0\0&1/d_y&v_0\0&0&1 \end{matrix}\right]1/z_c
\left[\begin{matrix} f&0&0\0&f&0\0&0&1 \end{matrix}\right]
\left[\begin{matrix} 1&0&0&0\0&1&0&0\0&0&1&0 \end{matrix}\right]
\left[\begin{matrix}r_1 & r_2 & r_3 & t\end{matrix}\right]
\left[\begin{matrix}x_w \y_w \0 \ 1\end{matrix}\right]
$$
根据上面的公式化简,得到:
$$
M=\left[\begin{matrix} 1/d_x&0&u_0\0&1/d_y&v_0\0&0&1 \end{matrix}\right]
\left[\begin{matrix} f&0&0\0&f&0\0&0&1 \end{matrix}\right]=
\left[\begin{matrix} f/d_x=f_x&0&u_0\0&f/d_y=f_y&v_0\0&0&1 \end{matrix}\right]
$$

$$
\left[\begin{matrix} R & t \ 0 & 1 \end{matrix}\right]=
\left[\begin{matrix} 1&0&0&0\0&1&0&0\0&0&1&0 \end{matrix}\right]
\left[\begin{matrix}r_1 & r_2 & r_3 & t\end{matrix}\right]
$$

上面两矩阵即是标定时的相机内参矩阵外参矩阵,根据两者的含义可以知道:

  • 内参矩阵是固定不变的

  • 外参矩阵由于相机相对于世界坐标系的位置不同,会发生变化。

PS:外参矩阵通常表示成棋盘格到相机坐标系的变换,相机到棋盘格有多少个视角,就有多少个外参矩阵。此处实际上是假设:棋盘平面和$$X_wOY_w$$重合,即$$Z_w=0$$

如果按照以下方式标定:

  • 将机械臂基座作为世界坐标系

  • 相机位置固定

  • 棋盘格固定在TCP上,通过移动TCP点获取相机到棋盘格的不同视角,然后进行标定

    按上述方式,世界坐标系到相机的变换是固定的,外参实际上是机械器末端执行器的一个坐标系到相机坐标系的变换。

张氏相机标定

由像素坐标系到世界坐标系的成像关系如下:
$$
\left[\begin{matrix}u \ v \ 1\end{matrix}\right]=
s\left[\begin{matrix} f_x&\gamma&u_0\0&f_y&v_0\0&0&1 \end{matrix}\right]
\left[\begin{matrix}r_1 & r_2 & t\end{matrix}\right]
\left[\begin{matrix}x_w \ y_w \ 1\end{matrix}\right]=
sM\left[\begin{matrix}r_1 & r_2 & t\end{matrix}\right]
\left[\begin{matrix}x_w \ y_w \ 1\end{matrix}\right]
$$
上面公式中s是尺度因子,$$fx、fy、u0、v0、γ$$(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,$$R,t$$表示相机外参。

上述变换实际上是一个单应性变换,对应变换矩阵为单应性矩阵,它同时包含了相机内参和外参

所以相机标定的目标即根据标定图得到单应矩阵,具体的过程如下:

  • 打印一张棋盘格标定图纸,将其贴在平面物体的表面
  • 拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现
  • 对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点)。可以定义打印的棋盘图纸位于世界坐标系Zw=0的平面上,世界坐标系的原点位于棋盘图纸的固定一角,像素坐标系原点位于图片左上角。
  • 棋盘标定图纸中所有角点的空间坐标是已知的角点对应在拍摄的标定图片中的角点的像素坐标也是已知的
  • 使用OpenCV中的现成函数求解单应矩阵

深度相机标定

深度相机同样需要标定相机内参和外参,并且当深度相机和RGB相机的安装位置有区别时,还需将深度相机的信息转换到RGB相机中,这个过程称为配准

  • 深度相机标定:求解深度相机的内参和外参
  • 深度相机配准:求解深度相机到RGB相机的变换矩阵

不同于RGB相机,深度相机的标定有很多方法,这里不介绍原理。

相机标定工具

1. GML

GML C++ Camera Calibration Toolbox是基于OpenCV的一款开源相机标定工具,具有图形界面,能够对RGB相机进行标定,并返回相机内参矩阵畸变函数

2. camera_calibration

Camera Calibration是ROS上的一个标定工具,该工具使用棋盘格的方式可以标定深度和彩色相机。

其他知识

1. 齐次坐标

齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。

基本内容:

  • 对于向量$$\vec v$$及其基$$( \boldsymbol a, \boldsymbol b, \boldsymbol c)$$存在一组坐标$$(v_1,v_2,v_3)$$,使得$$\vec v=v_1a+v_2b+v_3*c$$

  • 对于空间中的点$$p$$则存在坐标$$(p_1,p_2,p_3)$$,使得$$p-p_0=p_1a+p_2b+p_3*c$$,其中$$p_0$$是坐标系的原点

考虑以上两个公式,在三维坐标系中,统一表示向量和点可以使用四维向量$$(v_1,v_2,v_3,w)$$,当$$w=0$$时该四维向量表示三维空间的一个向量,当$$w=1$$时该四维向量表示三维空间的一个点。

2. 单应性变换

单应性变换是一种图像变换方式,常见图像变换包括以下几种。

  • 线性变换:旋转、镜像、缩放、推移

  • 仿射变换:线性变换 + 平移

  • 透视变换:图片投影到一个新的视平面

  • 单应性变换:一个平面到另外一个平面的投影映射。如,二维平面上的点映射到摄像机成像仪上的映射。

单应性变换会涉及到单应性矩阵,有以下公式:

$$b = Ha^T$$,其中$$a=[x,y,1]^T$$,$$a=[x_1,y_1,1]^T$$为同一个点在原图像和映射图像上的坐标,$$H$$为$$3*3$$的单应性矩阵。

要求解上述公式中的H,只需获得四个点对即可,在OpenCV等视觉算法库中通常都有相应函数。

参考

齐次坐标

单应性变换求解

张氏相机标定1

张氏相机标定2