相机型号说明
相机模型是任何校准程序的核心。因此,为了更好地了解影响良好相机校准的因素,值得深入研究相机模型。
针孔模型
相机模型将 3D 中的点与它们在相机图像上的投影关联起来。迄今为止最常见的模型是针孔相机模型,该模型的基本假设是光线通过无限小的孔径(针孔)进入相机,如下所示。
通过针孔投影。(c)Wikimedia。用户 Pbroks13。
在数学和计算机视觉领域,三维空间中的点通常表示为 $$Q=[X,Y,Z] 。$$它们在相机图像上的对应投影为 $$q=[u,v,1] 。$$ 由于我们正在使用齐次坐标,因此 $q$ 中的“1”是必需的。有关解释,请单击此处。两者可以通过针孔模型联系起来:
$$q = \begin{bmatrix} f & 0 & c_x \\ 0 & f & c_y \\ 0 & 0 & 1 \end{bmatrix} \cdot Q$$
针孔相机模型。根据 OpenCV 在线文档修改。(c)Itseez。
这种投影本质上做了两件事:它将坐标缩放 $f$,并平移它们,使得坐标不相对于相机中心,而是具有位于图像左上角的坐标系。这是在数字图像中索引像素位置的自然方式。
参数 $c_x, c_y$ 被称为主点坐标,因为它们也可以解释为主点的图像坐标,即光轴与图像平面的相交点。在 m 个相机中,可以合理地假设 $c_x, c_y$ 位于图像的正中心。但是,镜头可能并不完全位于图像传感器的中心,尤其是在智能手机等低成本相机中。而在专用相机和镜头(例如 Scheimpflug 镜头或离轴投影镜头)中,光轴故意不与图像中心相交。在这些情况下,需要通过校准确定 $c_x, c_y$。
参数 $f$ 是焦距,它取决于所使用的相机镜头和传感器。大/长焦距会按较大的数字缩放,可以解释为较大的“变焦”,而微距镜头的焦距会较小/较短。$f$ 的单位必须与 $q$ 和 $Q$ 的单位兼容。因此,如果 3d 点 $Q$ 以米为单位,$q$ 以像素(或 px)为单位,则 $f$ 的单位为 [px/m]。请注意,在实际应用中,$Q$ 通常以 [m] 或 [mm] 表示,而 $q$ 几乎总是以 [px] 表示。然而,重要的是要记住原点的位置。
扩展针孔模型
通过实验,为了适应不能用简单的针孔模型很好描述的相机和镜头,常见的扩展具有以下参数:
$$q = \begin{bmatrix} f_x & \alpha f_x & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \cdot Q$$
确切的表述在不同作者之间略有不同。然而,需要注意的重要一点是,通过引入 $f_x$ 和 $f_y$ 而不是仅仅一个公共的 $f$,我们允许相机在 $x$ 和 $y$ 方向上进行不同的缩放。比率 $f_x/f_y$ 有时称为纵横比。这可能是由于非正方形像素(在某些模拟相机的数字化标准中看到,例如 480i 或 576i)或一些奇特的各向异性相机镜头。根据正在校准的相机的质量,包括 $f_x$ 和 $f_y$ 可能仍然是合理的。幸运的是,这两个参数都可以在相机校准中非常稳健且重复地确定,因此,同时校准这两个参数通常不会造成太大的损害。
另一方面,$\alpha$ 模拟相机的倾斜,这在现代设备中很少得到实践证明。它允许传感器的 x 轴和 y 轴不完全垂直。在几乎所有现代应用中,除非有充分理由将其包括在内,否则应将此参数排除在相机模型和校准之外,否则,它会使校准变得不那么稳健。
镜头失真
针孔模型仅对具有无限小入射光瞳(或光圈)的相机才完全有效。实际上,这种相机当然不存在,因为它们不允许任何光线进入。因此,通常需要一套镜头系统将入射光线聚焦到图像传感器上。这样做会产生一定程度的镜头失真。这在广角微距镜头(有时称为鱼眼镜头)中通常比在长焦距镜头中更为明显,因为制造低失真的广角镜头更困难,尽管制造商尽了最大努力避免这种情况。
径向扭曲效果
一组镜头畸变效果具有径向对称性,这意味着在与主点的给定距离处,畸变量是恒定的。当镜头向内畸变时,这被称为桶形畸变。相反,当镜头向外畸变时,这被称为枕形畸变。两者的混合称为车把畸变。
桶形失真(左)、枕形失真(中)和胡须失真(右)。(c)Wikimedia。用户 WolfWings。
由于是径向对称的,单个变量 $r$ 函数就足以描述失真效果。使用 $(x,y) = (X/Z, Y/Z)$ 作为标准化相机坐标,我们可以定义 $r$:
$$r(x,y) = \sqrt{x^2 + y^2},$$
即$r(x,y)$表示距离图像中心的距离。
文献中提出了适合径向透镜畸变效应的不同参数函数。一个被广泛接受的模型是 Brown 的偶序径向模型 [1]:
$$q_{\text{已校正}} = (1 + k_1 r^2 + k_2 r^4 + k_5 r^6) \cdot q.$$
在这个模型中,使用了三个参数(k_1、k_2、k_5)。它们是多项式系数,允许出现平滑变化的失真,可以是严格负的(桶形失真)、严格正的(枕形失真)或两者兼而有之(胡须失真)。请注意,只需要包括偶数多项式阶数,因为函数的定义域始终为正(r \in [0; r_{\text{max}} ])。
切向扭曲效果
用径向畸变模型无法轻易解释的一种效应是切向畸变或薄棱镜畸变,这可能是由于偏心造成的,即不同的镜头元件没有完全对齐,或者光轴与传感器平面不完全垂直。Brown [1] 还提出了一个有用的模型,该模型已被证明可以很好地拟合像素畸变:
$$q_{\text{已校正}} = \begin{bmatrix} 2 k_3 xy + k_4 (r^2+2x^2) \\ k_3 (r^2 + 2*y^2) + 2 k_4 xy \end{bmatrix} \cdot q .$$
上述径向模型和切向模型的组合有时被称为铅垂线模型或Brown-Conrady 模型。
对于质量好的镜头和相机,通常不需要在相机模型中包含切向失真参数。就像中心点坐标和径向失真参数一样,通常需要大量分布良好的校准图像才能精确且重复性良好地确定这些参数。因此,通常最好不要包含它们,特别是如果相机和镜头的质量足够好的话。
透视投影中心
有人提出,畸变中心可能并不完全与透视投影中心重合。在“扩展的 Brown-Conrady”模型中,为光学畸变中心添加了偏移量 $(d_x, d_y)$,而 $(c_x, c_y)$ 仍为针孔模型的主点偏移量。
利用这些额外的参数,径向像素坐标如下:
$$r(x,y) = \sqrt{(x-d_x)^2 + (y-d_y)^2}$$
我们的校准器软件实现了这个扩展的 Brown-Conrady 模型,事实证明,它仅增加了两个附加参数,就显著提高了准确性。
附录:关于齐次坐标
在三维空间或二维平面上表示点的常用方法是分别使用 3 向量和 2 向量。然而,对于某些目的,使用齐次坐标非常有用,因为会引入一个额外的坐标。
例如,二维图像点可以表示为 $q_{\text{inhom}} =[u,v]$。在齐次坐标中,我们写为$q_{\text{hom}} =s \cdot [u,v,1]$,并以 $s$ 作为自由尺度参数。任何 $s$ 的选择都代表同一个二维点。但是,我们不能允许 $s$ 为 0 或无穷大。
现在想象一个坐标变换,它由一个因子 $\alpha$ 缩放和一个向量 $[t_x, t_y]$ 平移组成。它可以应用于 $q_{\text{inhom}} $,如下所示:
$$\hat{q}_{\text{inhom}} = \begin{bmatrix} u \\ v \end{bmatrix} = \begin{bmatrix} \alpha & 0 \\ 0 & \alpha \end{bmatrix} q_{\text{inhom}} + \begin{bmatrix} t_x \\ t_y \end{bmatrix}$$
这确实很有效,但是,变换不是线性的(它不能表示为单个矩阵向量乘积)。然而,对于许多推导来说,如果这种变换确实可以表示为单个矩阵向量运算,它将大大简化数学。使用 $q$ 的同质版本,我们可以执行以下操作:
$$ \hat{q}_{\text{hom}} = s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \alpha & 0 & t_x \\ 0 & \alpha & t_y \\ 0 & 0 & 1 \end{bmatrix} q_{\text{hom}} $$
也就是说:现在变换(在这种情况下是投影)表示为线性变换。为了将 $\hat{q}_{\text{hom}} $ 转换为 $\hat{q}_{\text{inhom}} $(我们可以很容易地解释),我们只需将 $\hat{q} _{\text{inhom}} $ 的前两个分量除以第三个分量(即任意比例因子 $s$)。
这个技巧允许以更简单的方式表达许多几何公式。此外,齐次二维坐标还有一个有用的解释:我们知道相机图像中的任何点都对应于三维空间中特定线上的某个点。二维线的齐次坐标正是空间中这条线的参数化。改变 $s$,我们沿着那条线移动。设置 $s = 1$,我们与图像平面相交并得到我们通常感兴趣的二维点坐标。
齐次坐标还有其他优良特性。维基百科提供了出色的概述。
参考
[1]: 近距离相机校准,DC Brown,摄影测量工程,第 855-866 页,第 37 卷,第 8 期,1971 年。