来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 6 章 Camera Models,6.1 小节 Finite cameras。
这篇是学习笔记,不是原文翻译。目标是把小节里的概念整理成之后做三维重建时能快速查阅的形式。
本节解决的问题
有限相机模型描述的是一个具有有限相机中心的中心投影相机。它把三维空间点映射到二维图像点。
核心问题可以概括为:
三维世界点 X -> 相机坐标系 -> 归一化成像平面 -> 像素坐标
在齐次坐标下,这个过程最终可以写成一个 3×4 的相机矩阵:
x=PX
其中:
- X 是三维世界点的齐次坐标,形如 (X,Y,Z,1)T。
- x 是二维图像点的齐次坐标,形如 (x,y,1)T,只在比例意义下确定。
- P 是相机投影矩阵。
针孔相机的基本投影
最基础的针孔相机假设相机中心在坐标原点,主轴沿 Z 方向,焦距为 f。
三维点 (X,Y,Z)T 投影到图像平面:
(X,Y,Z)T↦(ZfX,ZfY)T
直观理解:
- 点越远,Z 越大,成像越靠近主点。
- 点的横纵坐标会被深度 Z 缩放。
- 这就是透视投影产生“近大远小”的原因。
主点偏移
上面的公式默认图像坐标原点刚好在主点,也就是相机主轴与图像平面的交点。
实际图像中,像素坐标原点通常在左上角,所以需要加入主点偏移:
(X,Y,Z)T↦(ZfX+px, ZfY+py)T
其中:
- (px,py) 是主点在图像坐标系中的位置。
- 它反映“光学中心投影到图像平面的位置”。
内参矩阵 K
把焦距和主点偏移写成矩阵形式,可以得到相机内参矩阵 K:
K=f000f0pxpy1
更接近真实 CCD/CMOS 相机时,x 和 y 两个方向的像素尺度可能不同,因此写成:
K=αx000αy0x0y01
含义:
- αx:以 x 方向像素为单位的焦距。
- αy:以 y 方向像素为单位的焦距。
- (x0,y0):像素坐标下的主点。
如果考虑像素轴不垂直,还会出现 skew 参数 s:
K=αx00sαy0x0y01
很多实际相机可以近似认为 s=0,也就是像素坐标的 x 轴和 y 轴互相垂直。
外参:世界坐标到相机坐标
实际三维点通常先在世界坐标系中表示。相机有自己的坐标系,所以需要一个刚体变换把世界坐标变到相机坐标。
这个变换由旋转 R 和相机中心 C 决定:
Xcam=R(Xworld−C)
齐次坐标下可以写成:
Xcam=[R−RC]Xworld
这里:
- R 是 3×3 旋转矩阵,表示相机坐标系相对世界坐标系的姿态。
- C 是相机中心在世界坐标系中的位置。
- −RC 是平移项。
很多资料把外参写成 [R∣t]。在这本书的表达中,t=−RC。
有限相机矩阵
把内参和外参合起来,得到有限相机的投影矩阵:
P=K[R−RC]
也常写成:
P=K[Rt]
其中 t=−RC。
这条公式非常重要,因为三维重建中的很多计算都围绕它展开:
- 已知 P 和三维点 X,可以投影得到图像点 x。
- 已知多张图像中的对应点,可以反过来估计相机矩阵或三维点。
- 标定相机,本质上就是估计内参 K 和外参 R,t。
参数怎么理解
| 符号 | 类型 | 含义 |
|---|
| K | 内参 | 焦距、主点、像素尺度、skew |
| R | 外参 | 相机姿态,也就是旋转 |
| C | 外参 | 相机中心在世界坐标中的位置 |
| t | 外参 | 平移项,满足 t=−RC |
| P | 投影矩阵 | 从三维世界点到二维图像点的整体映射 |
自由度
一个一般的 3×4 投影矩阵有 12 个元素,但齐次矩阵整体乘一个非零尺度不改变投影结果,因此一般 projective camera 有 11 个自由度。
有限相机如果进一步分解成真实相机模型:
P=K[Rt]
可以理解为:
- 内参:通常 5 个自由度,若 s=0 则更少。
- 旋转 R:3 个自由度。
- 平移或相机中心:3 个自由度。
和三维重建的关系
三维重建要从图像恢复空间结构,而图像是由相机投影产生的。理解有限相机模型后,后面的主题会更容易串起来:
- 相机标定:估计 K。
- 位姿估计:估计 R 和 t。
- 三角化:用多个视角的投影射线恢复三维点。
- Bundle Adjustment:同时优化相机参数和三维点。
- 多视图几何:围绕不同相机之间的投影关系展开。
一个计算流程
实际使用 P=K[R∣t] 时,可以按下面流程理解:
1. 世界点 X_world
2. 通过 R 和 t 变到相机坐标 X_cam
3. 透视除法:除以深度 Z
4. 通过 K 转成像素坐标
5. 得到图像点 x
对应的公式形式:
Xcam=RXworld+t
xnorm=(ZcamXcam,ZcamYcam,1)T
xpixel=Kxnorm
实现时要特别注意坐标系约定。不同库可能使用不同的相机坐标方向、图像 y 轴方向和外参定义。
本节记忆点
- 有限相机的中心在有限位置,不在无穷远处。
- 针孔相机的核心是透视除法:x=fX/Z,y=fY/Z。
- 主点偏移把理想成像平面坐标转成实际图像坐标。
- 内参矩阵 K 管相机内部成像参数。
- 外参 R,t 管世界坐标和相机坐标之间的关系。
- 最重要的公式是:
P=K[R−RC]=K[Rt]
后续问题
读完 6.1 后,可以继续追问:
- 如果只知道 P,如何分解出 K、R 和 C?
- 如何从二维-三维对应点估计 P?
- 内参矩阵中 skew 参数什么时候不能忽略?
- 世界点在相机前方还是后方,如何判断?
这些问题会在后续小节和第 7 章继续出现。