来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 6 章 Camera Models,6.2 小节 The projective camera。
这篇笔记承接 6.1 有限相机模型。6.1 主要从针孔相机和有限相机出发,得到
P=K[R∣−RC]
6.2 则进一步把 P 当作一个一般的射影相机矩阵,分析它内部编码了哪些几何对象。
核心观点
一般射影相机把三维空间点 X 映射到图像点 x:
x=PX
其中 P 是秩为 3 的 3×4 齐次矩阵。秩为 3 很关键,因为如果秩更低,映射结果只能覆盖图像中的一条线或一个点,而不是整个二维图像平面。
把 P 写成分块形式:
P=[Mp4]
其中:
- M 是左侧 3×3 子矩阵。
- p4 是第 4 列。
如果 M 非奇异,那么它对应有限相机;如果 M 奇异,相机中心可能在无穷远处。
相机中心:右零空间
相机中心 C 是 P 的一维右零空间:
PC=0
直观解释:
- 相机中心本身无法被成像为一个普通图像点。
- 任意经过相机中心的空间直线都会投影成同一个图像点。
- 因此相机中心是投影映射中“未定义”的那个空间点。
对于有限相机:
C=[−M−1p41]
对于相机中心在无穷远处的情况:
C=[d0],Md=0
实际计算中,如果只给了一个 P,可以通过 SVD 找 P 的右零向量来得到相机中心。
列向量的几何意义
设相机矩阵的列为:
P=[p1p2p3p4]
这些列向量可以解释为一些特殊图像点:
| 列 | 几何意义 |
|---|
| p1 | 世界 X 轴方向的消失点 |
| p2 | 世界 Y 轴方向的消失点 |
| p3 | 世界 Z 轴方向的消失点 |
| p4 | 世界坐标原点的图像 |
例如,世界 X 轴方向可以表示成无穷远点:
Dx=(1,0,0,0)T
它的图像是:
PDx=p1
这就是为什么 p1 可以看作 X 轴方向的消失点。
行向量的几何意义
把 P 按行写成:
P=P1TP2TP3T
每一行 Pi 都可以看作三维空间中的一个平面。
主平面
第三行 P3 表示相机的主平面:
P3TX=0
主平面是通过相机中心、并且平行于图像平面的空间平面。落在主平面上的点会被映射到图像的无穷远线。
由于 PC=0,所以:
P3TC=0
这说明相机中心 C 位于主平面上。
轴平面
第一行和第二行也分别对应空间中的平面:
P1TX=0
P2TX=0
它们分别对应会投影到图像 y 轴、x 轴相关位置的空间点集合。和主平面相比,轴平面更依赖图像坐标系的选择。
主点和主轴
主轴是通过相机中心,并且垂直于主平面的射线。它与图像平面的交点就是主点。
设:
P=[Mp4]
令 m3T 表示 M 的第三行,则主点可以写成:
x0=Mm3
主轴方向需要注意正负号,因为 P 是齐次矩阵,整体乘以非零尺度并不改变投影。书中用下面的方向向量解决正负号问题:
v=det(M)m3
它指向相机前方的主轴方向。
前投影:空间点到图像点
射影相机的前投影很直接:
x=PX
如果 D=(dT,0)T 是无穷远平面上的方向点,那么:
x=PD=[Mp4][d0]=Md
所以方向点的成像只受 M 影响,与 p4 无关。
反投影:图像点到空间射线
给定图像点 x,所有能投影到它的空间点构成一条经过相机中心的射线。
这条射线可以用两个点表示:
- 相机中心 C
- 一个可投影回 x 的空间点 P+x
其中 P+ 是 P 的伪逆:
P+=PT(PPT)−1
因此反投影射线可以写成:
X(λ)=P+x+λC
对于有限相机,还可以写成另一种形式:
X(μ)=[M−1(μx−p4)1]
反投影不是从一个图像点恢复唯一三维点,而是恢复一条空间射线。要得到具体三维点,通常需要第二个视角或额外约束。
点的深度
判断一个点在相机前方还是后方,需要定义深度。
设:
P=[Mp4]
空间点:
X=(X,Y,Z,T)T
投影结果:
PX=w(x,y,1)T
则有限相机下的深度为:
depth(X;P)=T∥m3∥sign(detM)w
其中 m3T 是 M 的第三行。
这个公式的意义:
- 深度为正,通常表示点在相机前方。
- 深度为负,通常表示点在相机后方。
- 它不依赖于 X 或 P 的具体齐次尺度。
如果图像坐标系采用左手系,例如 y 轴向下,深度符号和相机朝向解释可能会发生变化。实现时要确认坐标系约定。
从 P 分解相机参数
在实际应用中,我们通常可以通过给定的三维空间点和对应的二维图像点,估算出一个 3×4 的投影矩阵 P.对于这个未知相机矩阵 P,通常希望分解出:
- 相机中心 C
- 内参矩阵 K
- 相机姿态 R
有限相机满足:
P=[M−MC]=K[R−RC]
所以关键是分解:
M=KR
这里用的是 RQ 分解:
- K 是上三角矩阵,对应内参。
- R 是正交旋转矩阵,对应相机姿态。
- 通常要求 K 的对角线元素为正,以消除符号歧义。
内参矩阵的一般形式:
K=αx00sαy0x0y01
其中:
- αx,αy:两个方向上的焦距尺度。
- s:skew,表示像素轴偏斜。
- (x0,y0):主点。
- αy/αx:aspect ratio。
skew 参数什么时候不为 0?
真实 CCD 相机中,像素轴通常近似垂直,所以 s=0 很常见。
非零 skew 可能出现在“图像再拍图像”的过程中。例如把照片再次拍摄、底片放大、或者图像经过平面单应变换后,新的等效相机矩阵可能有非零 skew。
如果原相机是 P,对图像再施加一个平面单应 H,得到的新相机可以写成:
P′=HP
由于 H 非奇异,相机中心不变:
HPC=0⟺PC=0
但此时分解得到的 K 和 R 不一定还代表原始物理相机的内参和姿态。
欧氏空间 vs 射影空间
6.2 最后强调一个重要边界:虽然我们用射影几何和齐次坐标表示相机,但真实相机仍然是欧氏设备。
有些解释在射影坐标系下仍然成立,有些则需要欧氏结构:
| 解释 | 所需几何结构 |
|---|
| P 的零向量是相机中心 | 射影结构即可 |
| P3 是主平面 | 至少需要仿射结构 |
| m3 是主轴方向 | 需要欧氏世界坐标,因为涉及垂直性 |
| K,R 的物理意义 | 需要合适的欧氏图像和空间坐标系 |
也就是说,数学上可以分解一个 3×4 矩阵,但分解出来的 K 和 R 是否有真实物理意义,取决于坐标系是否符合欧氏解释。
本节记忆点
- 一般射影相机是秩为 3 的 3×4 齐次矩阵。
- 相机中心是 P 的右零空间:PC=0。
- P 的列向量对应世界坐标轴方向的消失点和原点图像。
- P 的行向量对应空间中的平面,第三行是主平面。
- 反投影一个图像点得到的是空间射线,不是唯一三维点。
- 深度公式可以判断点在相机前方还是后方。
- 分解 M=KR 可以从相机矩阵中恢复内参和姿态。
后续问题
读完 6.2 后,可以继续追问:
- 如何用世界点和图像点对应关系估计 P?
- RQ 分解在数值实现中如何保证 K 对角线为正?
- 图像坐标 y 轴向下时,深度和旋转矩阵应该如何解释?
- 为什么相机中心的解释只需要射影几何,而主轴方向需要欧氏几何?