有限相机投影模型

有限相机模型

相机是三维世界(物体空间)和二维图像之间的一种映射,这里所写的东西主要是认定是中心投影的. 其中具体的摄影模型主要分成两类------有限中心的摄像机模型和无穷远中心的相机模型. 其中仿射相机就是无穷远相机中的一种.

基本针孔相机模型

考虑空间点到一张平面上的中心投影.

令投影中心C位于一个欧式坐标的原点,平面\(\mathrm{Z}=f\)被称为图像平面或者聚焦平面. 针孔相机模型下空间坐标点\(\mathbf{X}=(\mathrm{X}, \mathrm{Y}, \mathrm{Z})^{\top}\) 被映射到图像平面上的一点,这个点就是链接点X与投影中心的直线和图像平面的交点,具体如下图所示

使用相似三角形可以很快得到图像平面上的点(二维)和三维空间点(三维)之间的关系,这也就是三维到二维的一个映射 \[ (\mathrm{X}, \mathrm{Y}, \mathrm{Z})^{\top} \mapsto(f \mathrm{X} / \mathrm{Z}, f \mathrm{Y} / \mathrm{Z})^{\top} \] 投影中心叫做相机中心,或者光心. 相机中心到图像平面的垂线称作相机的主轴, 主轴和图像平面的交点叫做主点, 过相机中心平行与图像平面的平面称为相机的主平面.

齐次坐标表示投影

使用齐次坐标可以获得如下所示的矩阵形式的乘积模式 \[ \left(\begin{array}{c} \mathrm{X} \\ \mathrm{Y} \\ \mathrm{Z} \\ 1 \end{array}\right) \mapsto\left(\begin{array}{c} f \mathrm{X} \\ f \mathrm{Y} \\ \mathrm{Z} \end{array}\right)=\left[\begin{array}{llll} f & & & 0 \\ & f & & 0 \\ & & 1 & 0 \end{array}\right]\left(\begin{array}{l} \mathrm{X} \\ \mathrm{Y} \\ \mathrm{Z} \\ 1 \end{array}\right) \] 老牛逼了,这就是上面那个映射, 中间那个矩阵可以简写为\(\operatorname{diag}(f, f, 1)[\mathrm{I} \mid \mathbf{0}]\), 前者表示一个对角阵,后者就是一个3x3单位阵加上一个零列矢量.

引入记号来表示:

\(\mathbf{X}\)就是三维点的四维向量表示\((\mathrm{X}, \mathrm{Y}, \mathrm{Z}, 1)^{\top}\), \(\mathbf{x}\)是图像二维点的三维向量表示, \(\mathbf{P}\)表示3x4齐次相机投影矩阵,那么楼上那个公式就是 \[ \mathbf{x}=\mathrm{PX} \] 这个\(\mathbf{P}\)定义了整个的投影模型 \[ \mathrm{P}=\operatorname{diag}(f, f, 1)[\mathrm{I} \mid \mathbf{0}] \text { . } \]

主点偏置

上面的那个式子是假定平面的坐标原点在主点上, 但是实际的情况可能并不是这样, 因为实际情况的主点会有一定的偏置存在. 所以更改之后的映射为: \[ (\mathrm{X}, \mathrm{Y}, \mathrm{Z})^{\top} \mapsto\left(f \mathrm{X} / \mathrm{Z}+p_{x}, f \mathrm{Y} / \mathrm{Z}+p_{y}\right)^{\top} \] 其中\(\left(p_{x}, p_{y}\right)^{\top}\)是主点的坐标, 就像下面这个图一样

齐次方程可以表示成为: \[ \left(\begin{array}{l} \mathrm{X} \\ \mathrm{Y} \\ \mathrm{Z} \\ 1 \end{array}\right) \mapsto\left(\begin{array}{c} f \mathrm{X}+\mathrm{Z} p_{x} \\ f \mathrm{Y}+\mathrm{Z} p_{y} \\ \mathrm{Z} \end{array}\right)=\left[\begin{array}{lll} f & & p_{x} & 0 \\ & f & p_{y} & 0 \\ & & 1 & 0 \end{array}\right]\left(\begin{array}{l} \mathrm{X} \\ \mathrm{Y} \\ \mathrm{Z} \\ 1 \end{array}\right) \] 这玩意简直就是熟悉的很啊,这不就是fx fy cx cy 嘛,所以以后看到投影矩阵也就跟看弟弟一样.

把中间那玩意写成K \[ \mathrm{K}=\left[\begin{array}{cc} f & p_{x} \\ & f & p_{y} \\ & & 1 \end{array}\right] \] 那就熟悉啊 \[ \mathbf{x}=\mathrm{K}[\mathrm{I} \mid \mathbf{0}] \mathbf{X}_{\mathrm{cam}} \] 所以矩阵\(\mathbf{K}\)就是所谓的相机标定矩阵, 这里的\(\mathbf{X}_{\text {cam }}\)是为了强调这个四维的齐次坐标是在相机固定着的那个欧式坐标系的坐标,也就是相机坐标系(所谓的)

相机旋转与平移

以上还只是世界坐标系和相机坐标系重合的时候,假如不重合了的话,就要考虑相机自身的一个旋转和平移了.

之前的情况就是,X三维点的坐标是在相机坐标系下的情况,但是实际情况下,三维点的坐标是在世界坐标系下. 所以这里存在一个世界坐标系到相机坐标系下的一个三维外参变换.

那么如果使用\(\tilde{\mathbf{X}}\)表示世界坐标系下的点的非齐次坐标,那么相机坐标系下的同一个点可以表示成\(\tilde{\mathbf{X}}_{\text {cam }}=\mathrm{R}(\tilde{\mathbf{X}}-\widetilde{\mathbf{C}})\), 这个\(\widetilde{\mathbf{C}}\)就是表示相机中心在世界坐标系下的一个坐标, R表示方位,所以在齐次坐标系下可以写成这样: \[ \mathbf{X}_{\text {cam }}=\left[\begin{array}{cc} \mathrm{R} & -\mathrm{R} \widetilde{\mathbf{C}} \\ 0 & 1 \end{array}\right]\left(\begin{array}{l} \mathrm{X} \\ \mathrm{Y} \\ \mathrm{Z} \\ 1 \end{array}\right)=\left[\begin{array}{cc} \mathrm{R} & -\mathrm{R} \widetilde{\mathbf{C}} \\ 0 & 1 \end{array}\right] \mathrm{X} \] 把这个\(\mathbf{X}_{\text {cam }}\)带到之前那个方程中就可以得到这个 \[ \mathbf{x}=\mathrm{KR}[\mathrm{I} \mid-\widetilde{\mathbf{C}}] \mathbf{X} \] 中间一整个可以写成\(\mathbf{P}\): \(\mathrm{P}=\mathrm{KR}[\mathrm{I} \mid-\tilde{\mathbf{C}}]\), 因为用的时候用R和t比较多,所以世界到图像的变换可以表示成\(\tilde{\mathbf{X}}_{\text {cam }}=\mathrm{R} \tilde{\mathbf{X}}+\mathbf{t}\),

那么这个相机矩阵就可以变成这样 \[ \mathrm{P}=\mathrm{K}[\mathrm{R} \mid \mathrm{t}] \] 其中\(\mathbf{t}=-\mathrm{R} \widetilde{\mathbf{C}}\), 这就是我们看的最爽的形式了,舒服得很

CCD相机的情况