OMSCS-CV课程笔记06-Camera Calibration

这个系列是Gatech OMSCS 计算机视觉课程(CS 6476: Computer Vision)的同步课程笔记。课程内容涉及图像处理以及传统计算机视觉的相关理论和方法,本节主要介绍相机标定的相关内容。

Geometric Camera Calibration

Camera Models一节中我们介绍了齐次坐标和相机的投影模型,从而将三维空间中的点投影到图像平面上。本节课中我们会把这个方法推广到更一般的情形中:我们不再假定世界坐标系的原点位于相机的投影中心,而是允许将任意坐标系下的点投影到图像平面上。我们把确定空间坐标与图像坐标之间关系的过程称为相机的几何标定(geometric camera calibration),简称相机标定。

相机标定包括2部分内容:

  1. 世界坐标到相机坐标的变换,这部分称为相机的外参数(extrinisic parameters)位姿(pose)
  2. 相机坐标到图像坐标的变换,这部分称为相机的内参数(intrinisic parameters)

Extrinsic Camera Calibration

世界坐标到相机坐标的变换是三维空间点的刚体变换,一共有6个外参数:3个平移+3个旋转。

Translation

空间点P在坐标系A中的坐标可以写成基矢量和的形式:

AP=(Ax,Ay,Az)=AxiA+AyjA+AzkA

假设空间中还存在另一个坐标系B,它与A只相差一个平移。根据矢量加法P点在坐标系B中的坐标为:

BP=B(OA)+AP

其中B(OA)表示A坐标系中的原点OAB坐标系中的坐标。

我们利用齐次坐标来重写上式可以得到平移变换的矩阵形式:

[BP1]=[I3×3B(OA)0T1][AP1]

Rotation

对于刚体旋转,我们分别取P点在两个坐标系下的表示为:

P=[iAjAkA][AxAyAz]=[iBjBkB][BxByBz]

因此我们可以得到刚体旋转的坐标变换公式:

BP=ABR AP ABR=[iAiBjAiBkAiBiAjBjAjBkAjBiAkBjAkBkAkB]=[BiABjABkA]=[AiBTAjBTAkBT]

其中BiA表示A坐标系的基矢量iAB坐标系中的坐标。我们称ABRA坐标系到B坐标系的旋转矩阵,它的第i行j列元素为B坐标系第j个基矢量与A坐标系第i个基矢量的内积。同时需要注意的是旋转矩阵是一个正交阵(orthogonal matrix)RTR=I,而且旋转矩阵不具有交换性R1R2R2R1

类似于平移变换,我们同样可以把刚体旋转用齐次坐标来表示,从而得到矩阵形式:

[BP1]=[ABR00T1][AP1]

Rigid Transformations

我们把平移和旋转组合到一起就得到了刚体变换公式:

BP=ABR AP+BOA

同样利用齐次坐标可以得到矩阵形式:

[BP1]=[I3×3BOA0T1][ABR00T1][AP1]=[ABRBOA0T1][AP1]

我们记矩阵ABT=[ABRB(OA)0T1]为坐标系A到坐标系B的刚体变换矩阵,它的逆阵BAT=ABT1为坐标系B到坐标系A的刚体变换矩阵。当我们取A为世界坐标系同时取B为相机坐标系时,ABT表示世界坐标到相机坐标的变换,因此也称其为相机的外参数矩阵(extrinsic parameter matrix)。显然外参数矩阵是一个4×4的可逆矩阵,它具有3个旋转自由度和3个平移自由度。

Instrinsic Camera Calibration

Real Intrinsic Parameters

接下来考虑相机坐标系投影到图像坐标系的过程。对于理想情况下的针孔相机模型,我们只需要知道相机的焦距就可以完成投影:

u=fxz v=fyz

然而现实中相机的投影并不会这样完美。首先图像上的像素坐标没有物理意义也不代表现实中的长度,同时uv两个方向上单位像素的长度也不一定严格相等。因此我们不能够直接使用焦距f来表示投影过程,而是需要引入2个方向上的待定参数αβ

u=αxz v=βyz

另一方面,按照上式进行投影后图像的原点会位于图像的中心。但在图像处理中图像的原点并不在图像中心,因此我们需要考虑将投影后相机的原点进行平移:

u=αxz+u0 v=βyz+v0

此外,如果uv两个方向不是严格垂直的话投影公式会变得更加复杂:

u=αxzαyzcot(θ)+u0 v=βsin(θ)yz+v0

我们将整个投影过程用齐次坐标来表达就得到了相机的内参数矩阵(intrinsic matrix) K

[zuzvz]=[ααcot(θ)u000βsin(θ)v010010][xyz1] p=KC

利用齐次坐标的另一个好处是我们可以去掉矩阵的最后一列,得到更常见的内参数矩阵形式:

K=[fscx0afcy001]

其中f为焦距;s表示坐标轴的倾斜程度,在理想情况下为0;cxcy为图像坐标系原点的偏移量;a为像素的长宽比,理想条件下为1.0。显然相机的内参数矩阵K一共有5个自由度。

Camera Parameters

我们把相机的外参数矩阵、投影矩阵以及内参数矩阵组合到一起就得到了相机矩阵M,它表示世界坐标系到图像坐标系的变换过程:

从前面的推导不难发现相机矩阵一共有11个自由度:其中6个来自于外参数矩阵(3个平移+3个旋转),另外5个来自于内参数矩阵。需要注意的是直接使用相机矩阵得到的坐标是图像平面上的齐次坐标,需要对最后一维进行归一化才能得到所需的像素坐标。

Calibrating Cameras

Direct Linear Calibration

本节最后我们来讨论如何对相机进行标定。如果不考虑相机矩阵M的结构,只把它当做是一般的3×4矩阵,则可以通过求解线性方程组来进行标定。具体地,假设空间中点坐标为(Xi,Yi,Zi),它在图像上的坐标为(ui,vi),利用相机矩阵可以构造出变换关系:

[uivi1][wuiwviw]=[m00m01m02m03m10m11m12m13m20m21m22m23][XiYiZi1] ui=m00Xi+m01Yi+m02Zi+m03m20Xi+m21Yi+m22Zi+m23 vi=m10Xi+m11Yi+m12Zi+m13m20Xi+m21Yi+m22Zi+m23

通过移项,我们可以把方程组改写成关于相机矩阵的方程:

ui(m20Xi+m21Yi+m22Zi+m23)=m00Xi+m01Yi+m02Zi+m03 vi(m20Xi+m21Yi+m22Zi+m23)=m10Xi+m11Yi+m12Zi+m13

对应的矩阵形式为:

[XiYiZi10000uiXiuiYiuiZiui0000XiYiZi1viXiviYiviZivi][m00m01m02m03m10m11m12m13m20m21m22m23]=[00]

Am=0

上式说明相机标定可以通过求解一个齐次线性方程组来实现。由于相机矩阵具有12个变量,我需要至少6对对应点才能求解这个方程组。

为了避免平凡解,一般可以设置一个额外的约束条件m=1。此时求解齐次方程等价于约束优化问题:

min  Ams.t.  m=1

利用奇异值分解(singular value decomposition, SVD)可以证明上述最优化问题的解为矩阵ATA的最小特征值对应的特征向量,这里简单进行一下推导。首先对矩阵A进行奇异值分解:

A=UDVT

其中UV为正交矩阵,D为对角矩阵且对角元素均为非负数。将奇异值分解带入优化目标得到:

Am=UDVTm=DVTm m=VTm=1

y=VTm,我们可以把原始的优化问题转为为一个新的优化问题:

min  Dys.t.  y=1

由于D为对角元素非负的对角矩阵,Dy的最小值为D中的最小对角元素。此时y仅在该元素位置为1,其余位置均为0。我们可以将D的对角元素按从大到小顺序重新排列,这样y=(0,0,...,0,1)T,即:

VTm=[001]

上式说明mV的最后一列,即A最小奇异值对应的右奇异向量,也就是ATA的最小特征值对应的特征向量。

另一种求解方程Am=0的方法是将相机矩阵的最后一个元素固定为1,此时的投影过程为:

[uivi1][wuiwviw]=[m00m01m02m03m10m11m12m13m20m21m221][XiYiZi1] ui=m00Xi+m01Yi+m02Zi+m03m20Xi+m21Yi+m22Zi+1 vi=m10Xi+m11Yi+m12Zi+m13m20Xi+m21Yi+m22Zi+1

不过需要注意的是相机矩阵本身对m23没有任何约束,因此假定m23=1的解法在m23接近0时会有严重的数值精度问题。

直接法进行相机标定的主要缺陷在于它没有使用正确的误差函数。优化目标Am没有任何的几何意义,我们称其为代数误差(algebraic error)。而理想的相机矩阵需要保证Xi经过投影后与图像上的对应点xi尽可能接近,因此我们把Xi再图像上的投影x^i与对应点xi之间的距离称为几何误差(geometric error)重投影误差(reprojection error),相应的优化问题可表示为:

minMid(x^i,xi)

由于投影过程是非线性的,我们无法像直接法那样显式地计算优化问题的解,一般情况下需要通过牛顿法(Newton method)等非线性优化算法来迭代求解。我们把直接法和非线性优化结合起来就得到了相机标定的Gold Standard算法

Finding Camera Center from M

通过相机标定得到相机矩阵M后可以反推出很多有用的性质,比如说我们可以得到投影中心在世界坐标系下的坐标C。对于空间中任意点P,假设x位于P和投影中心C连成的直线上:

x=λP+(1λ)C

将上式带入投影方程得到:

Mx=λMP+(1λ)MC

由于xPC直线上,投影后xP必然具有相同的图像坐标。因此MC=0,换句话说C位于M的零空间中。我们把M写成増广矩阵的形式M=[Q | b],可以得到C的齐次坐标为:

C=[Q1b1]

Multi-Plane Calibration

除了直接法和Gold Standard算法外,实际应用中更常见的是使用棋盘格标定板的相机标定方法。使用棋盘格进行标定时,我们只需要拍摄不同角度下棋盘格的照片即可完成相机的标定工作。和前面介绍的方法相比,棋盘格标定操作简单、无需事先知道棋盘格的位姿、而且还能对镜头畸变进行矫正,因此棋盘格标定在大多数计算机视觉库(如OpenCV、MATLAB Computer Vision Toolbox)中都有现成的实现。