2. 相机成像原理:针孔相机模型、坐标系转换、相机内参与外参
做深度估计,第一个绕不开的就是相机成像原理。说白了,你得知道一张照片是怎么来的,才能从照片里反推出深度信息。
我记得刚入行那会儿,有个项目需要从单目图像里恢复三维结构。我拿着相机标定板拍了一整天,结果重建出来的点云全是扭曲的。后来才发现,是我对坐标系转换的理解出了偏差。嗯,这节课我们就把这个基础打扎实。
2.1 针孔相机模型
针孔相机模型,是所有成像模型里最基础、最经典的一个。你想想看,一个暗箱,前面戳个小孔,光线穿过小孔在后面的感光面上成像——就这么简单。
但实际相机不是这么做的。真实相机用的是透镜,透镜会引入畸变。不过没关系,针孔模型是理想化的起点,所有复杂模型都是在这个基础上加修正项。
核心公式:
三维空间点 P(X, Y, Z) 投影到成像平面上的点 p(x, y):
x = f * X / Z
y = f * Y / Z
其中 f 是焦距,Z 是物体到相机的深度。
这里有个关键点:深度 Z 在分母上。这意味着什么?意味着近处的物体在图像上大,远处的物体小。这就是透视效应的数学本质。
我的经验:在实际项目中,我习惯把针孔模型当作「第一性原理」来理解。不管后面用多复杂的网络,最终输出的深度图,本质上都是在求解这个公式里的 Z。
2.2 四大坐标系转换
做深度估计,你会在四个坐标系之间反复横跳。我刚开始学的时候,被这四个坐标系绕晕过好几次。后来我画了一张图,一下子就清楚了。
这张图我建议你保存下来。每次做坐标系转换的时候,对着这张图走一遍流程,基本不会出错。
2.2.1 世界坐标系 → 相机坐标系
这一步靠的是外参。外参包括旋转矩阵 R 和平移向量 t。说白了,就是把世界坐标系下的点,挪到相机坐标系下来表示。
P_c = R * P_w + t
其中 P_w 是世界坐标,P_c 是相机坐标。R 是 3×3 的旋转矩阵,t 是 3×1 的平移向量。
注意:我曾经在项目里犯过一个低级错误——把 R 和 t 的顺序搞反了。有些库用的是 P_c = R * (P_w - t),有些用的是 P_c = R * P_w + t。一定要看清楚你用的库的约定。
2.2.2 相机坐标系 → 图像坐标系
这一步就是针孔模型的投影。从三维到二维,丢失了深度信息。
x = f * Xc / Zc
y = f * Yc / Zc
这里 f 是焦距,单位是毫米。Zc 是物体在相机坐标系下的深度。
2.2.3 图像坐标系 → 像素坐标系
图像坐标系是物理单位(毫米),像素坐标系是离散的像素点。转换公式:
u = x / dx + u0
v = y / dy + v0
其中 dx、dy 是每个像素的物理尺寸,u0、v0 是图像中心(主点)的像素坐标。
2.3 相机内参
内参矩阵 K 把上面两步合并了。它描述了从相机坐标系到像素坐标系的映射。
K = [fx 0 u0
0 fy v0
0 0 1]
其中 fx = f / dx,fy = f / dy。注意,fx 和 fy 不一定相等,因为像素可能不是正方形。
内参矩阵的完整投影公式:
s * [u, v, 1]^T = K * [Xc, Yc, Zc]^T
其中 s 是尺度因子,等于 Zc。
内参是相机的固有属性。同一个相机,内参是固定的。但不同相机之间,内参差异很大。我建议你拿到一个新相机,第一件事就是标定内参。
2.4 相机外参
外参描述的是相机在世界坐标系下的位姿。说白了,就是相机在哪儿、朝哪儿看。
外参矩阵是一个 3×4 的矩阵 [R | t]。R 是旋转,t 是平移。
我的习惯:在项目中,我通常把外参理解为「相机坐标系到世界坐标系的变换」。这样想,很多公式推导会顺很多。你试试看。
2.5 完整投影公式
把上面所有步骤串起来,就是完整的投影过程:
s * [u, v, 1]^T = K * [R | t] * [Xw, Yw, Zw, 1]^T
这个公式,是深度估计的基石。你后面学到的单目深度估计、双目立体匹配、结构光三维重建,本质上都是在求解这个公式的逆过程。
| 参数 | 含义 | 维度 | 是否随相机变化 |
|---|---|---|---|
| K | 内参矩阵 | 3×3 | 是(不同相机不同) |
| R | 旋转矩阵 | 3×3 | 是(不同位姿不同) |
| t | 平移向量 | 3×1 | 是(不同位姿不同) |
| s | 尺度因子(深度) | 标量 | 是(每个点不同) |
避坑指南:我曾经在标定相机时,把棋盘格放得太靠近图像边缘。结果标定出来的内参,边缘畸变参数完全不对。后来我学乖了:标定板要覆盖整个视野,至少拍 20 张不同角度的照片。
嗯,这一节的内容就到这里。相机成像原理是深度估计的「第一性原理」。你把这个搞懂了,后面学什么网络结构、损失函数,都会觉得有根有底。
公众号:蓝海资料掘金营,微信deep3321