相机标定
本节将探讨相机标定,主要探讨以下三个问题
- 相机标定原理
- 实现过程
- 棋盘格的好处
相机标定
1. 基本概念
图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数。求解参数的过程称为相机标定。
目的:求出相机的内、外参数,以及畸变参数。
标定相机后做的两件事:
- 通过相机标定校正这种镜头畸变,生成矫正后的图像;
- 是根据获得的图像重构三维场景。
2. 标定原理
先定义以下涉及概念:
世界坐标系:用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入。单位为m。
相机坐标系:在相机上建立的坐标系,为了从相机的角度描述物体位置而定义,作为沟通世界坐标系和图像/像素坐标系的中间一环。单位为m。
图像坐标系:为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。 单位为m。
像素坐标系:为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,即从相机内读取到的信息所在的坐标系。单位为像素。
下图可以清晰地表达四个坐标系之间的关系:
世界坐标系:Xw
、Yw
、Zw
。相机坐标系: Xc
、Yc
、Zc
。图像坐标系:x
、y
。像素坐标系:u
、v
。
其中,相机坐标系的Zc
轴与光轴重合,且垂直于图像坐标系平面并通过图像坐标系的原点,相机坐标系与图像坐标系之间的距离为焦距f(也即图像坐标系原点与焦点重合)。像素坐标系平面u-v
和图像坐标系平面x-y
重合,但像素坐标系原点位于图中左上角(之所以这么定义,目的是从存储信息的首地址开始读写)。
下面将依次对刚体进行一系列变换,使之从世界坐标系进行仿射变换、投影透射,最终得到像素坐标系下的离散图像点,过程中会逐步引入各参数矩阵。
A. 从世界坐标系到相机坐标系
刚体从世界坐标系转换到相机坐标系的过程,可以通过旋转和平移来得到,我们将其变换矩阵由一个旋转矩阵和平移向量组合成的齐次坐标矩阵(为什么要引入齐次坐标可见后续文章)来表示:
其中,R为旋转矩阵,t为平移向量,因为假定在世界坐标系中物点所在平面过世界坐标系原点且与Zw轴垂直(也即棋盘平面与Xw-Yw平面重合,目的在于方便后续计算),所以zw=0
,可直接转换成式1的形式。其中变换矩阵
$$
\left[
\begin{matrix}
R&t\
0_3^T&1
\end{matrix}
\right]
$$
即为前文提到的外参矩阵,之所称之为外参矩阵可以理解为只与相机外部参数有关,且外参矩阵随刚体位置的变化而变化。
B. 从相机坐标系到理想图像坐标系(不考虑畸变)
该过程进行了从三维坐标到二维坐标的转换,也即投影透视过程(用中心投影法将物体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图,也就是使我们人眼看到景物近大远小的一种成像方式)。以针孔成像为例(除了成像亮度低外,成像效果和透镜成像是一样的,但是光路更简单)。成像过程如图二所示:
针孔面(相机坐标系)在图像平面(图像坐标系)和物点平面(棋盘平面)之间,所成图像为倒立实像。
为了在数学上更方便描述,我们将相机坐标系和图像坐标系位置对调,变成图三所示的布置方式(没有实际的物理意义,只是方便计算):
此时,假设相机坐标系中有一点M,则在理想图像坐标系下(无畸变)的成像点P的坐标为(可由相似三角形原则得出):
$$
x_p=f\frac{x_M}{z_M},y_p=f\frac{y_M}{z_M}
$$
将上式化为齐次坐标表示形式为:
$$
z_M
\left[\begin{matrix}f&0&0&0\0&f&0&0\0&0&1&0\\end{matrix}\right]
\left[\begin{matrix}x_M\y_M\z_M\1\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_M\y_M\z_M\1\end{matrix}\right]
$$
C. 从理想图像坐标系到实际图像坐标系(考虑畸变)
透镜的畸变主要分为径向畸变和切向畸变,还有薄透镜畸变等等,但都没有径向和切向畸变影响显著,所以我们在这里只考虑径向和切向畸变。
径向畸变
由于透镜形状的制造工艺导致。且越向透镜边缘移动径向畸变越严重。下图所示是径向畸变的两种类型:桶形畸变和枕形畸变。
实际情况中我们常用r=0处的泰勒级数展开的前几项来近似描述径向畸变。矫正径向畸变前后的坐标关系为:
$$
\left{
\begin
\end
\right
$$
由此可知对于径向畸变,我们有3个畸变参数需要求解。
切向畸变
由于透镜和CMOS或者CCD的安装位置误差导致。因此,如果存在切向畸变,一个矩形被投影到成像平面上时,很可能会变成一个梯形。切向畸变需要两个额外的畸变参数来描述,矫正前后的坐标关系为:
由此可知对于切向畸变,我们有2个畸变参数需要求解。
综上,我们一共需要5个畸变参数(k1
、k2
、k3
、p1
和p2
)来描述透镜畸变。
下图表示了用R
,t
将上述世界坐标系转换到相机坐标系的过程。
D. 从图像坐标系到像素坐标系
像素坐标系原点与图像坐标系原点不重合。假设像素坐标系原点在图像坐标系下的坐标为(u0,v0)
,每个像素点在图像坐标系x轴、y轴方向的尺寸为:dx
、dy
,且像点在实际图像坐标系下的坐标为(xc,yc)
,可得到像点在像素坐标系下的坐标为:
$$
u=\frac{x_t}{d_x}+u_0,v=\frac{y_c}{dy}+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_c\y_c\1\end{matrix}\right]
$$
公式2中1(xp, yp)
与公式5中(xc, yc)
相同,都是图像坐标系下的坐标。
若暂不考虑透镜畸变,则将式2与式5的转换矩阵相乘即为内参矩阵M:
之所以称之为内参矩阵可以理解为矩阵内各值只与相机内部参数有关,且不随物体位置变化而变化。
最后用一幅图来总结从世界坐标系到像素坐标系(不考虑畸变)的转换关系:
总结:从世界坐标系到像素坐标系(不考虑畸变)的转换关系
3. 标定方法
传统相机标定法
传统相机标定法需要使用尺寸已知的标定物,通过建立标定物上坐标已知的点与其图像点之间的对应,利用一定的算法获得相机模型的内外参数。根据标定物的不同可分为三维标定物和平面型标定物。三维标定物可由单幅图像进行标定,标定精度较高,但高精密三维标定物的加工和维护较困难。平面型标定物比三维标定物制作简单,精度易保证,但标定时必须采用两幅或两幅以上的图像。
缺点:传统相机标定法在标定过程中始终需要标定物,且标定物的制作精度会影响标定结果。同时有些场合不适合放置标定物也限制了传统相机标定法的应用。
相机自标定法
目前出现的自标定算法中主要是利用相机运动的约束。相机的运动约束条件太强,因此使得其在实际中并不实用。利用场景约束主要是利用场景中的一些平行或者正交的信息。其中空间平行线在相机图像平面上的交点被称为消失点,它是射影几何中一个非常重要的特征,所以很多学者研究了基于消失点的相机自标定方法。
优点:自标定方法灵活性强,可对相机进行在线定标。
缺点:但由于它是基于绝对二次曲线或曲面的方法,其算法鲁棒性差。
主动视觉相机标定方法
基于主动视觉的相机标定法是指已知相机的某些运动信息对相机进行标定。该方法不需要标定物,但需要控制相机做某些特殊运动,利用这种运动的特殊性可以计算出相机内部参数。
优点:是算法简单,往往能够获得线性解,故鲁棒性较高;
缺点:是系统的成本高、实验设备昂贵、实验条件要求高,而且不适合于运动参数未知或无法控制的场合。
4. 棋盘格
棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。如下图所示,是相机在不同方向下拍摄的同一个棋盘图像。