张正友2000年在《A Flexible New Technique for Camera Calibration》一文中提出了一种灵活的新技术来方便地校准相机。它只需要相机观察在几个(至少两个)不同方向显示的平面图案。无论是相机还是平面图案都可以自由移动。运动是不需要知道的。对径向透镜畸变进行了建模。所提出的程序包括一个封闭形式的解决方案,然后是基于最大似然准则的非线性细化。通过计算机仿真和实测数据对该方法进行了验证,取得了良好的效果。与传统的使用两正交平面或三正交平面等昂贵设备的技术相比,该技术使用方便、灵活。它将3D计算机视觉从实验室环境向现实世界的使用又推进了一步。相应的软件可以在作者的网页上找到。
下面讲一下我对这篇文章的理解:
相机标定的问题本质上是通过输入已知大小的平面物体,一般来说是黑白格子的棋盘,然后通过摄像机的成像,可以转换成像素点。我们可以找到黑白线交点对应像素点在图像中的坐标。假设黑白线交点的世界坐标为 M ~ = ( X , Y , Z , 1 ) \widetilde{\textbf{M}}=(X,Y,Z,1) M =(X,Y,Z,1),对应的点在底片坐标系中的坐标为 m ~ = ( u , v , 1 ) \widetilde{\textbf{m}}=(u,v,1) m =(u,v,1),注意,波浪线~代表齐次坐标,我们可以通过针孔模型得到以下公式(我们姑且称为针孔公式): 其中,参数 s s s是一个缩放比例系数,其实就是深度Z。矩阵 [ R t ] [\textbf{R} \quad \textbf{t}] [Rt]其实就是相机的齐次转移矩阵(Homogeneous Transformation Matrix),本质上代表着代表摄像机的位姿,我们把它称为外参。
而 A \textbf{A} A则被称为内参矩阵,形式如下: 其中, α \alpha α为底片坐标系x方向的焦距像素数, β \beta β为底片坐标系y方向的焦距像素数, u 0 u_0 u0为底片坐标系x方向的零点像素偏置(bias), v 0 v_0 v0为底片坐标系y方向的零点像素偏置,这几个参数就是所谓的内参,而所谓的标定,就是求内参数值的过程。
我们假设棋盘平面为Z=0平面,可以将针孔模型公式转换成以下形式: 进一步,我们可以简化写成: 这里的 H \textbf{H} H就是大名鼎鼎的单应性矩阵,我们可以把单应性矩阵 H \textbf{H} H看成是内参和外参矩阵的乘积(不放称之为H参数矩阵)。
为了求解方程,我们要找到关系式,这里使用了外参矩阵的特殊正交性质,即: r 1 ⋅ r 2 = 0 \textbf{r}_1\cdot\textbf{r}_2=0 r1⋅r2=0 r 1 ⋅ r 1 = r 2 ⋅ r 2 = 1 \textbf{r}_1\cdot\textbf{r}_1=\textbf{r}_2\cdot\textbf{r}_2=1 r1⋅r1=r2⋅r2=1 因为 且, 我们可以很容易得到,我们把他们成为约束条件:
在这里作者天才地构造一个对称矩阵 B \textbf{B} B,因为 B \textbf{B} B中的参数都来自于内参矩阵 A \textbf{A} A,我们不妨把它认为是内参矩阵的变形矩阵。 注意到 B \textbf{B} B的对称性,我们可以取其中的六个元素来作为它的向量,我们不妨把这个向量成为内参特征向量(注意内参特征向量不同于特征向量) b \textbf{b} b 我们求出了 b \textbf{b} b,也就求出了 B \textbf{B} B,也就能顺水推船求出所有的内参。
这里,作者又天才地构造了一个新的6维向量 v \textbf{v} v如下,可以认为它是 H \textbf{H} H参数的特征向量。 然后使用这个量可以惊人地推出下式: 再利用第三章中的约束条件,又天才地得到了这个方程组: 我们可以得到2个方程,因此要求解所有6个未知量,我们至少需要6/2=3张照片。
我们看到,每一张照片(一张图片对应一个外参矩阵)我们测到 M ~ = ( X , Y , Z , 1 ) \widetilde{\textbf{M}}=(X,Y,Z,1) M =(X,Y,Z,1)关于,可以得到一个 H H H关于 m ~ = ( u , v , 1 ) \widetilde{\textbf{m}}=(u,v,1) m =(u,v,1)的约束,相当于我们可以通过观测把每张照片的H求出来。 理想情况下,我们测量其中的3个点,就可以得到: H = s m ~ M ~ − 1 \textbf{H}=s\widetilde{\textbf{m}}\widetilde{\textbf{M}}^{-1} H=sm M −1 当然实际情况我们会测量多个点增加鲁棒性,估计出最优的 H \textbf{H} H。
这样我们可以求得 b \textbf{b} b,从而求得 B \textbf{B} B,然后就可以根据以下式子求出所有的参数: 然后,反过来,每张图片的外参也可以容易求得: