跳到主要内容

6.2 射影相机

来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 6 章 Camera Models,6.2 小节 The projective camera。

这篇笔记承接 6.1 有限相机模型。6.1 主要从针孔相机和有限相机出发,得到

P=K[RRC]P = K[R \mid -R\mathbf{C}]

6.2 则进一步把 PP 当作一个一般的射影相机矩阵,分析它内部编码了哪些几何对象。

核心观点

一般射影相机把三维空间点 X\mathbf{X} 映射到图像点 x\mathbf{x}

x=PX\mathbf{x} = P\mathbf{X}

其中 PP 是秩为 3 的 3×43 \times 4 齐次矩阵。秩为 3 很关键,因为如果秩更低,映射结果只能覆盖图像中的一条线或一个点,而不是整个二维图像平面。

PP 写成分块形式:

P=[Mp4]P = \begin{bmatrix} M & \mathbf{p}_4 \end{bmatrix}

其中:

  • MM 是左侧 3×33 \times 3 子矩阵。
  • p4\mathbf{p}_4 是第 4 列。

如果 MM 非奇异,那么它对应有限相机;如果 MM 奇异,相机中心可能在无穷远处。

相机中心:右零空间

相机中心 C\mathbf{C}PP 的一维右零空间:

PC=0P\mathbf{C} = \mathbf{0}

直观解释:

  • 相机中心本身无法被成像为一个普通图像点。
  • 任意经过相机中心的空间直线都会投影成同一个图像点。
  • 因此相机中心是投影映射中“未定义”的那个空间点。

对于有限相机:

C=[M1p41]\mathbf{C} = \begin{bmatrix} -M^{-1}\mathbf{p}_4 \\ 1 \end{bmatrix}

对于相机中心在无穷远处的情况:

C=[d0],Md=0\mathbf{C} = \begin{bmatrix} \mathbf{d} \\ 0 \end{bmatrix}, \qquad M\mathbf{d}=\mathbf{0}
提示

实际计算中,如果只给了一个 PP,可以通过 SVD 找 PP 的右零向量来得到相机中心。

列向量的几何意义

设相机矩阵的列为:

P=[p1p2p3p4]P = \begin{bmatrix} \mathbf{p}_1 & \mathbf{p}_2 & \mathbf{p}_3 & \mathbf{p}_4 \end{bmatrix}

这些列向量可以解释为一些特殊图像点:

几何意义
p1\mathbf{p}_1世界 XX 轴方向的消失点
p2\mathbf{p}_2世界 YY 轴方向的消失点
p3\mathbf{p}_3世界 ZZ 轴方向的消失点
p4\mathbf{p}_4世界坐标原点的图像

例如,世界 XX 轴方向可以表示成无穷远点:

Dx=(1,0,0,0)T\mathbf{D}_x = (1,0,0,0)^T

它的图像是:

PDx=p1P\mathbf{D}_x = \mathbf{p}_1

这就是为什么 p1\mathbf{p}_1 可以看作 XX 轴方向的消失点。

行向量的几何意义

PP 按行写成:

P=[P1TP2TP3T]P = \begin{bmatrix} \mathbf{P}_1^T \\ \mathbf{P}_2^T \\ \mathbf{P}_3^T \end{bmatrix}

每一行 Pi\mathbf{P}_i 都可以看作三维空间中的一个平面。

主平面

第三行 P3\mathbf{P}_3 表示相机的主平面:

P3TX=0\mathbf{P}_3^T\mathbf{X}=0

主平面是通过相机中心、并且平行于图像平面的空间平面。落在主平面上的点会被映射到图像的无穷远线。

由于 PC=0P\mathbf{C}=0,所以:

P3TC=0\mathbf{P}_3^T\mathbf{C}=0

这说明相机中心 C\mathbf{C} 位于主平面上。

轴平面

第一行和第二行也分别对应空间中的平面:

P1TX=0\mathbf{P}_1^T\mathbf{X}=0 P2TX=0\mathbf{P}_2^T\mathbf{X}=0

它们分别对应会投影到图像 yy 轴、xx 轴相关位置的空间点集合。和主平面相比,轴平面更依赖图像坐标系的选择。

主点和主轴

主轴是通过相机中心,并且垂直于主平面的射线。它与图像平面的交点就是主点。

设:

P=[Mp4]P = \begin{bmatrix} M & \mathbf{p}_4 \end{bmatrix}

m3T\mathbf{m}_3^T 表示 MM 的第三行,则主点可以写成:

x0=Mm3\mathbf{x}_0 = M\mathbf{m}_3

主轴方向需要注意正负号,因为 PP 是齐次矩阵,整体乘以非零尺度并不改变投影。书中用下面的方向向量解决正负号问题:

v=det(M)m3\mathbf{v} = \det(M)\mathbf{m}_3

它指向相机前方的主轴方向。

前投影:空间点到图像点

射影相机的前投影很直接:

x=PX\mathbf{x} = P\mathbf{X}

如果 D=(dT,0)T\mathbf{D}=(\mathbf{d}^T,0)^T 是无穷远平面上的方向点,那么:

x=PD=[Mp4][d0]=Md\mathbf{x} = P\mathbf{D} = \begin{bmatrix} M & \mathbf{p}_4 \end{bmatrix} \begin{bmatrix} \mathbf{d}\\ 0 \end{bmatrix} = M\mathbf{d}

所以方向点的成像只受 MM 影响,与 p4\mathbf{p}_4 无关。

反投影:图像点到空间射线

给定图像点 x\mathbf{x},所有能投影到它的空间点构成一条经过相机中心的射线。

这条射线可以用两个点表示:

  • 相机中心 C\mathbf{C}
  • 一个可投影回 x\mathbf{x} 的空间点 P+xP^+\mathbf{x}

其中 P+P^+PP 的伪逆:

P+=PT(PPT)1P^+ = P^T(PP^T)^{-1}

因此反投影射线可以写成:

X(λ)=P+x+λC\mathbf{X}(\lambda) = P^+\mathbf{x} + \lambda \mathbf{C}

对于有限相机,还可以写成另一种形式:

X(μ)=[M1(μxp4)1]\mathbf{X}(\mu) = \begin{bmatrix} M^{-1}(\mu\mathbf{x}-\mathbf{p}_4) \\ 1 \end{bmatrix}
信息

反投影不是从一个图像点恢复唯一三维点,而是恢复一条空间射线。要得到具体三维点,通常需要第二个视角或额外约束。

点的深度

判断一个点在相机前方还是后方,需要定义深度。

设:

P=[Mp4]P = \begin{bmatrix} M & \mathbf{p}_4 \end{bmatrix}

空间点:

X=(X,Y,Z,T)T\mathbf{X}=(X,Y,Z,T)^T

投影结果:

PX=w(x,y,1)TP\mathbf{X} = w(x,y,1)^T

则有限相机下的深度为:

depth(X;P)=sign(detM)wTm3\operatorname{depth}(\mathbf{X};P) = \frac{\operatorname{sign}(\det M)\,w}{T\lVert \mathbf{m}_3\rVert}

其中 m3T\mathbf{m}_3^TMM 的第三行。

这个公式的意义:

  • 深度为正,通常表示点在相机前方。
  • 深度为负,通常表示点在相机后方。
  • 它不依赖于 X\mathbf{X}PP 的具体齐次尺度。
注意

如果图像坐标系采用左手系,例如 y 轴向下,深度符号和相机朝向解释可能会发生变化。实现时要确认坐标系约定。

从 P 分解相机参数

在实际应用中,我们通常可以通过给定的三维空间点和对应的二维图像点,估算出一个 3×43 \times 4 的投影矩阵 PP.对于这个未知相机矩阵 PP,通常希望分解出:

  • 相机中心 C\mathbf{C}
  • 内参矩阵 KK
  • 相机姿态 RR

有限相机满足:

P=[MMC]=K[RRC]P = \begin{bmatrix} M & -M\mathbf{C} \end{bmatrix} = K \begin{bmatrix} R & -R\mathbf{C} \end{bmatrix}

所以关键是分解:

M=KRM = KR

这里用的是 RQ 分解:

  • KK 是上三角矩阵,对应内参。
  • RR 是正交旋转矩阵,对应相机姿态。
  • 通常要求 KK 的对角线元素为正,以消除符号歧义。

内参矩阵的一般形式:

K=[αxsx00αyy0001]K = \begin{bmatrix} \alpha_x & s & x_0 \\ 0 & \alpha_y & y_0 \\ 0 & 0 & 1 \end{bmatrix}

其中:

  • αx,αy\alpha_x, \alpha_y:两个方向上的焦距尺度。
  • ss:skew,表示像素轴偏斜。
  • (x0,y0)(x_0,y_0):主点。
  • αy/αx\alpha_y/\alpha_x:aspect ratio。

skew 参数什么时候不为 0?

真实 CCD 相机中,像素轴通常近似垂直,所以 s=0s=0 很常见。

非零 skew 可能出现在“图像再拍图像”的过程中。例如把照片再次拍摄、底片放大、或者图像经过平面单应变换后,新的等效相机矩阵可能有非零 skew。

如果原相机是 PP,对图像再施加一个平面单应 HH,得到的新相机可以写成:

P=HPP' = HP

由于 HH 非奇异,相机中心不变:

HPC=0PC=0HP\mathbf{C}=0 \quad \Longleftrightarrow \quad P\mathbf{C}=0

但此时分解得到的 KKRR 不一定还代表原始物理相机的内参和姿态。

欧氏空间 vs 射影空间

6.2 最后强调一个重要边界:虽然我们用射影几何和齐次坐标表示相机,但真实相机仍然是欧氏设备。

有些解释在射影坐标系下仍然成立,有些则需要欧氏结构:

解释所需几何结构
PP 的零向量是相机中心射影结构即可
P3\mathbf{P}_3 是主平面至少需要仿射结构
m3\mathbf{m}_3 是主轴方向需要欧氏世界坐标,因为涉及垂直性
K,RK,R 的物理意义需要合适的欧氏图像和空间坐标系

也就是说,数学上可以分解一个 3×43 \times 4 矩阵,但分解出来的 KKRR 是否有真实物理意义,取决于坐标系是否符合欧氏解释。

本节记忆点

  • 一般射影相机是秩为 3 的 3×43 \times 4 齐次矩阵。
  • 相机中心是 PP 的右零空间:PC=0P\mathbf{C}=0
  • PP 的列向量对应世界坐标轴方向的消失点和原点图像。
  • PP 的行向量对应空间中的平面,第三行是主平面。
  • 反投影一个图像点得到的是空间射线,不是唯一三维点。
  • 深度公式可以判断点在相机前方还是后方。
  • 分解 M=KRM=KR 可以从相机矩阵中恢复内参和姿态。

后续问题

读完 6.2 后,可以继续追问:

  • 如何用世界点和图像点对应关系估计 PP
  • RQ 分解在数值实现中如何保证 KK 对角线为正?
  • 图像坐标 y 轴向下时,深度和旋转矩阵应该如何解释?
  • 为什么相机中心的解释只需要射影几何,而主轴方向需要欧氏几何?