相机图像标定
6.3.1 摄像机定标
假设你现在已经拍摄了脚的多张各个角度的2D照片,那么如何将这些照片转化成一个3D数字化形状呢?首先第一步,你要对摄像机进行定标,比如确定摄像机的焦距、摆放位置和角度等。
我们先来看看摄像机的成像模型[1]。摄像机的成像模型一般采用针孔模型(Pin-Hole Model),与我们中学时学的小孔成像是一个原理,如图6-21所示。
图6-21 两千多年前,墨子和学生进行了世界上第一个小孔成像实验 (图片来源:大科技)
提示:其实两千多年前我国古代的大思想家墨子就和学生进行了世界上第一个小孔成像实验,并记录到“景到(即,倒),在午(即,交叉)有端(即,小孔),与景长,说在端”。因此墨子被西方称为“摄影光学理论和实践的开创者,探索光影成像的第一人”。
如图6-22左边所示,为了把成像模型解释清楚,我们来仔细看看摄像机的成像几何关系。同时我们把成像平面放到了小孔的前面,这样成像就是正立着的而不像上图那样倒立了。
图6-22 左:针孔成像模型;右:图像坐标系
— O点称为摄像机的光心,由点O与Xc、Yc、Zc轴组成的直角坐标系称为摄像机坐标系。
转
http://www.sigvc.org/why/book/3dp/chap6.3.1.htm
— I是成像平面(图像平面),我们把镜头对焦后,物体就成像在这个平面。图像平面构成了一个图像坐标系,横坐标为x,纵坐标为y。
— Xc轴和Yc轴与图像的x轴与y轴平行,Zc轴为摄像机的光轴,它与图像平面垂直。光轴与图像平面的交点,即为图像坐标系的原点Oxy。
— OOxy的长度为摄像机焦距f。
一下子冒出这么多术语,我们中场休息一下,给出本节的第1个公式来醒醒脑子。我们先仔细研究一下图像坐标系。如图6-22右边所示,图像坐标系以Oxy为原点,由x、y轴组成,单位是mm。然而,在实际的相机中,并不是以物理单位(如mm)来表示某个成像点的位置的,而是用像素的索引。比如一台相机的像素是1600×1200,说明图像传感器(也就是以前的胶片)横向有1600个捕捉点,纵向有1200个,合计192万个。对于某个成像点,实际上都是这样表示的:横坐标第u个点,纵坐标第v个点(而不是横坐标x mm,纵坐标y mm)。假设Oxy在u、v坐标系中的坐标为(),每一个像素在x轴与y轴方向上的物理尺寸为宽dx mm,高dy mm,则图像中任意一个像素的索引坐标与物理坐标满足下面的换算关系:
上面的这个方程组,分成了单独两个公式来写,让人感觉关联不够紧密(“本是一家人却说两家话”),因为实际上是要同时满足的,因此我们把两行合并成一个公式来写:
(3)
上面的形式被称作为矩阵形式。形象地说,矩阵(Matrix,没错,电影《黑客帝国》的英文片名就是这个单词)就是将多个有关联的元素用个大括号括在一起成为一个整体,以便直接对整体进行运算以分析出各个元素之间的内在关系。一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列;当m=1或n=1时,则特称为向量。上式左边是个3×1的向量,右边表示了一个3×3矩阵和一个3×1向量之间的相乘。改成矩阵写法之后,将两个公式浓缩成了一个公式,整体感是不是提升了很多?从上面也可以看出,与普通代数(传统代数)不同,矩阵代数这种超凡代数描述的是多维而不仅是一维的代数;普通(一维)代数的乘法与乘子顺序无关,,而矩阵代数通常情况下,即一般不满足交换律;此外普通代数只有0没有逆(倒数),而矩阵代数中,很多矩阵都没有逆。
提示:有的读者可能会问,上面的矩阵为什么有3行呢?之前的公式不是只有2个吗?好问题!这是我偷偷塞了点料,把之前的坐标(u,v)和(x,y)都转成齐次坐标(u,v,1)和(x,y,1)了。齐次坐标(Homogeneous Coordinate)的好处是:即使乘个系数k(),仍对应于原来的同一个点,也即(u,v,1)与(k×u,k×v,k)对应于同一个点。同时,还便于几何变换(旋转、缩放、平移),只需用一个大一号的矩阵即可将变换矩阵的乘法(旋转、缩放)和加法(平移)合并到一块。此外,齐次坐标还可表示不同的无穷远点。
好,我们接着进行术语教学。之前我们定义了摄像机坐标系,但由于摄像机可安放在环境中的任何位置,所以我们还要定义一个世界坐标系来描述摄像机在环境中的位置,由Xw、Yw、Zw轴组成。摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵R与平移向量t来描述,即:
(4)
矩阵和向量用黑斜体表示,其中R为3×3的矩阵;t为3×1的向量;Mb为4×4的矩阵,其也被称为摄像机外部参数矩阵。
知识点:你在高中学习的初等数学是研究常量、研究静态的数学;而在大学里学的高等数学是研究变量、研究运动的数学。下面我们再解释一下空间、向量、矩阵的关系。
空间(Space)是高等数学的基础概念,可被通俗地解释为“存在一个集合,在这个集合上定义某某概念,然后满足某些性质”。从拓扑空间开始,一步步可往上“升级”成更高级的空间。线性空间(又名向量空间,Vector Space)其实还是比较初级的,如果在里面定义了范数(“长度”),就成了赋范(Normed)线性空间。赋范线性空间满足完备性,就成了巴那赫(Banach)空间;若定义了角度,则为内积(Inner Product)空间。内积空间若同时满足完备性,就得到希尔伯特(Hilbert)空间(见下面的6.4.2节)。
以我们日常生活在其中的三维欧几里得(Euclidean)空间为例:1)由无穷多个位置点组成,2)这些点之间存在相对的关系,3)可在空间中定义长度、角度,4)这个空间可以容纳运动。这里我们所说的运动是从一个点到另一个点的“跃迁”跳跃式地运动(变换,Transform),而不是微积分意义上的“连续”性的运动。实际上,不管什么空间,都必须容纳和支持在其中发生的符合规则的运动(变换)。比如拓扑空间中有拓扑变换,线性空间中有线性变换,仿射空间中有仿射变换,其实这些变换都只不过是对应空间中允许的运动形式而已。
在线性空间中选定基(坐标系)之后,向量刻画对象,矩阵刻画对象的运动,也即用矩阵与向量的乘法来施加运动。矩阵的本质是运动(变换)的描述,比如在一个线性空间中,只要我们选定一组基,那么对于任何一个线性变换,都能够用一个确定的矩阵来加以描述。
若矩阵与是同一个线性变换的两个不同的描述(之所以会不同,是因为选定了不同的基,也就是选定了不同的坐标系),则一定能找到一个非奇异矩阵,使得、之间满足这样的关系:。这就是相似矩阵的定义,即这两个相似矩阵与实际上描述的是同一个线性变换,因此特征值(Eigenvalue)相同。
从另一个角度来看,矩阵是由一组向量组成的,如果矩阵非奇异的话,那么这一组向量是线性无关的,于是它们组成了度量线性空间的一个坐标系。换言之,矩阵实际上描述了一个坐标系。之所以矩阵既是运动,又是坐标系,是因为对象的变换等价于坐标系的变换。
此外,n阶矩阵的行列式也有着明确的几何意义:为n个组成向量按照平行四边形法则所张成的一个n维立方体的体积(如果是2维,则为面积)。向量的线性相关性实际上表示了这些向量所张成的广义平行四边形面积(体积)为0,例如此时的向量共线(n=2情况下)或共面(n=3情况下)。反之,若线性无关,则体积(行列式)不为0。此外,我们也不难看出,行列式不为0的矩阵,是可逆的(非奇异),即可将一组线性无关的向量变换成另一组也保持无关性的向量。
如果一个n阶矩阵虽不能保持n个向量的线性无关性,但它能保持r <n个向量的线性无关性,r就被称作矩阵的秩,表示了能保持非0体积的几何体的最大维数。
外围的知识都介绍完了,好,我们现在正式开始介绍针孔模型。如图6-22左边所示,空间上任何一点P在图像上的投影位置p为光心O与P点的连线OP与图像平面的交点,这种关系也被称为中心射影或透视投影。由几何比例关系可轻易得出(先看下面公式的左边):
ó (5)
其中(x,y)为p的图像坐标,(Xc,Yc,Zc)为空间点P在摄像机坐标系下的坐标。同样,上式的箭头右边为左边的矩阵形式,左右两边是等价的。
我们将公式(3)和公式(4)代入公式(5),就可以得到P点在世界坐标系下的坐标(Xw,Yw,Zw)与其在图像平面的投影点p的坐标(u,v)的关系:
其中,,;M=MaMb为3×4矩阵,称为投影矩阵;Ma完全由、、、决定的摄像机内部结构(如焦距、光心)有关,称为摄像机内部参数;Mb完全由摄像机相对于世界坐标系的方位(如摆放位置和拍摄角度)决定,称为摄像机外部参数。确定某一摄像机的内部和外部参数,就被称为摄像机定标/标定(Calibration)。注意,很多情况下的摄像机定标仅指确定摄像机的内部参数。
由上式可以看出,如果已知摄像机的内参数Ma和外参数Mb(即定标好了),两者直接一相乘就可得到投影矩阵M。投影矩阵M有什么作用呢?对任意空间点P,如果已知它的世界坐标系坐标,根据M,就可求出它的图像点p的位置(u,v)。
单台摄像机的定标
下面介绍一下摄像机定标的过程,如图6-23左边所示,我们在摄像机前放一个标定块。所谓标定块,就是每个特征点的空间位置都被事先测定的基准块,比如两个点的距离都被精确做成了1.0000 cm(精确到小数点后若干位)。用相机拍摄标定块的图像,就可以根据特征点的图像坐标(u,v)与真实三维空间坐标(Xw,Yw,Zw)之间的关系,来计算摄像机的内外参数了。我们需要6个或以上特征点,就可求解出投影矩阵M。但在实际应用中,我们通常使用了几十个特征点以减少可能的误差。此外,我们常用图6-23右边的平面标定块来进行标定[71],标定时先平放着拍一张正面照片,然后再用个小物件轮流把每边往空间上翘起来一点(即改变标定板的空间位置姿态),依次拍摄3幅以上照片即可。(不要小看了小小的标定板,比如一块选材做工精良的大理石标定板定价需要几千元,以保证工业级高精度、完全平面、不变形。选购时,比如要实现±10 mm的3D重建精度,可选择1 mm精度的标定板。)
图6-23 左:三维标定块;右:二维标定板
提示:如果在定标时,环境不允许放置标定块或标定板,或者经常需要改变摄像机的内参数(如调焦),这时就只能通过自标定(Self-Calibration)技术来获取摄像机内参数,能利用到的信息只有图像的空间对应点,并用数学上的绝对二次曲线(AC,Absolute Conic)作为虚拟标定物。绝对二次曲线是在射影空间中无穷远平面上、全部由虚点构成的一条二次曲线,它的重要特性是它在图像平面的成像(IAC)不随摄像机的位置姿态变化,即投影成像只与摄像机的内参数有关。自标定至少需要拍摄3幅图像。另外对于平面场景的自标定,可通过提取平行线段进行求解。由于自标定求解的非线性,所以一般适用于精度要求不高的场合。
如果摄像机内参数Ma已知,仅需要确定外参数(R、t),即由N个3D空间点与图像点的对应关系来确定世界坐标系与摄像机坐标系之间的欧氏变换,这个问题被称为PNP问题(Perspective-N-Points)。当N≥6时,可线性唯一确定;但N=3,4,5时,一般情况下也可把解限定在有限的几个候选上。
以上我们假设的都是线性摄像机模型,但如果使用广角镜头(或全向摄像机),在远离图像中心处会有较大的畸变,因此可能还需要进行非线性修正或建模,如对径向畸变、离心修正、薄棱镜畸变等非线性畸变进行修正。
两台摄像机的定标
好了,我们刚才对一台摄像机的内外参数进行了标定。然而,对于从2D图像到3D形状的重建,一台摄像机(或仅拍一个角度的照片)是不够的。从图6-22中可以看出,已知图像点p的位置(u,v),即使知道摄像机的内外参数,空间坐标(Xw,Yw,Zw)也不是能唯一确定的,实际上任何位于射线OP上的空间点的图像点都是p点。怎么办?再加一台摄像机(或者用同一台摄像机拍两次)!用左右两个摄像机进行立体视觉重建。
我们分别对左右两台摄像机单独进行了定标,就得到了它们的内参数。我们在6.3.2节可以知道,在一般的立体视觉方法中,只需知道摄像机的内参数,以及用极线(Epipolar Line)描述的双摄像机相对位置就足够了。
下面我们对极线进行介绍。如图6-24所示,用两个摄像机同时获得两张图像I1与I2。如果p1和p2是空间同一点P在两张图像上的投影点,我们称p2为p1的对应点,反之亦然。我们指出,p1点的对应点p2不需要在I2整幅图像中搜索,它必然只位于I2的某一条直线上,该直线(图中的l2)称为图像I2上对应于p1点的极线。
图6-24 用两台摄像机拍摄空间点
那么如何找到极线呢?其实很简单,它满足一个几何约束。如图6-24所示,O1为左摄像机的光心,O2为右摄像机的光心,两者的连线O1O2经过左右两个图像平面时相交于两个极点e1和e2。可以证明,I1(或I2)图像上的所有极线都相交于同一点e1(或e2),也即极线必然经过e1(或e2)。经推导可知,给定投影矩阵M1与M2,对于左摄影机的一个图像投影点坐标p1,则它的对应点坐标p2所在的极线是完全确定的,满足如下方程:
(6)
其中,;反对称矩阵,其秩为2。注意F是一个仅为3×3的矩阵,具有7个自由度,由投影矩阵M1与M2组合运算得到,这是立体视觉很重要的一个矩阵,称为基本矩阵(Fundamental Matrix),其只与两个摄像机的内参数和空间相对位姿有关,与外参数无关。
通过上式(6)还可以看出,无须费劲地求解出两个摄像机的所有内外参数(即M1和M2),很多应用场合下这是不必要的,因为只需一个基本矩阵F就可以得到立体视觉的极线几何约束关系。为了求解出基本矩阵F,我们至少需要两幅图像中的7或8个对应点。
更广义地,我们介绍图像平面间的单应矩阵(Homography Matrix)H的概念,具有8个自由度(实际上,前面提到的F由平面单应矩阵与极点唯一确定,即)。所谓单应可理解为:空间平面在两个摄像机各自的射影变换(Projective Transformation,也被称为直射变换Collineatory Transformation)下所生成的图像点具有一一对应的关系,即。单应矩阵H的一个典型应用就是对射影变换导致的图像变形进行矫正:我们只需先从变形图像中指定共面的4个点,对其手工矫正后得到4个新的点,于是就可求解出单应矩阵H了,最后对变形图像的所有点应用单应变换H进行自动矫正,整个过程无需求解摄像机的任何参数。
提示:空间点P不仅可以通过在左右两张图像上的投影点p1和p2来重建(这称之为双视图几何),类似地,还可通过同时拍3张图像来重建点P,这就被称为三视图几何。其中三焦张量(Trifocal Tensor)等同于双视图几何中基本矩阵的地位,类推还有四视图几何的四焦张量。3视图及以上的几何重建统称为多视图立体重建(MVS,Multi-View Stereo)。