为了了解相机校准实际上是什么,让我们从图像的形成方式开始。
相机基本上是一种将点从 3D 空间转换(称为投影)到 2D 空间(图像空间)的设备。在分析图像形成时,我们经常使用所谓的pinhole camera 模型,其中图像形成如下:
更形象一点,我们可以看到这样的图像形成:
,其中Y1是图像平面,x3是相机到物体的距离(我们称之为z,深度),x1是3D点P在X1轴上距离光轴的位移相机 X3。 O为焦距为f的相机,y1为图像中心与点P对应的像素点Q之间的距离。
最简单的投影模型称为正交投影。该模型只是简单地删除 3D 点的深度坐标(并可能对其进行缩放)。所以,如果我们从 3D 世界中的点 P 开始
,我们可以把投影写成:
,其中 s 为实数比例因子,矩阵 pi 为投影矩阵。
该模型近似于长焦镜头(长焦距)和浅物体到相机的距离。它仅适用于远心镜头。我们使用的相机更准确的模型是透视投影。直观地说,如果 3D 对象更靠近相机,则图像平面中的对象看起来更大。从数学上讲,由于三角形相似性,y1 与 x1 成正比。比例因子为 f/x3 或 f/z。暂且设 f 为 1,得到如下投影函数:
如您所见,投影不能表示为矩阵乘法,因为它不再是线性变换。这并不理想 - 矩阵乘法具有非常好的特性。因此,我们引入了一种称为齐次坐标的技巧。对于每个点,我们添加另一个坐标(因此 2D 点现在使用 3 个坐标表示,3D 点使用 4 个坐标表示),并且我们将第四个坐标归一化为 1(考虑隐式除以最后一个坐标)。
现在,我们的点 P 变为:
我们可以将透视投影矩阵写成:
,由于我们使用齐次坐标,最后一次划分“隐式”发生,波浪号表示齐次坐标中的向量。
你有它!那就是透视投影矩阵。请注意,这是一个不可逆的变换。
但是,相机不仅将 3D 点投射到 2D 图像平面上。投影后,他们对离散图像空间进行转换。这由一个称为 intrisinc 相机矩阵 K:
的矩阵表示
,其中 fx 和 fy 是 x 和 y 轴上的独立焦距(通常可以合理地假设它们相等),s 是一个歪斜,它说明像轴不垂直于光轴(在现代camera 接近于 0),cx, cy 代表图像的原点(通常是图像的中心)。
相机通常会给图像添加一些失真,并且它们有不同的数学模型。
相机校准过程是指确定固有相机矩阵和失真模型的参数。
这可以通过以下粗略的过程来完成:
- 从已知布局和大小的模型的不同角度的多张图片开始
- 对于每个图像,确定一些已知对应点。这些通常是角落,因为它们可以轻松可靠地相互匹配。
- 每个点都有一个关联的单应矩阵 H = l * K * (R|T),其中 l 是实数比例因子,K 是固有相机矩阵,(R|T) 是表示3D 空间中的相机旋转和平移(这称为外部相机矩阵)。
- 基于点对应关系并使用单应性,存在确定相机内在参数的封闭形式解决方案。如果没有失真,则至少需要 3 张图像。假设 skew 为 0,则至少需要 2 张图像。在实践中,更多的图像会产生更准确的结果。
- 一旦知道内在参数,就可以计算每个视图的外在参数(旋转和平移)
- 也可以估计失真。
- 一些程序对所有图像进行优化,以进一步细化封闭形式解决方案的结果。
要查看实际的封闭式方程,请查看 W. Burger 撰写的非常不错的 paper(Burger,2016 年)。
该领域的“圣经”是计算机视觉中的多视图几何,作者 A. Zisserman。