2、成像几何基础:小孔成像模型、针孔相机模型、世界坐标系、相机坐标系、图像坐标系、像素坐标系

好,咱们正式开始聊成像几何。这部分是相机标定的地基,地基不牢,后面全白搭。我个人习惯把这一章叫做「坐标系串讲」,因为说白了,整个标定过程就是不同坐标系之间来回倒腾。

2.1 小孔成像模型:最朴素的相机

先说说小孔成像。你拿一个黑盒子,前面戳个小孔,后面放块感光板。光线穿过小孔,在板上投下一个倒立的像。这就是最原始的相机。

嗯,这里要注意:小孔越小,像越清晰,但进光量也越少。我在项目中遇到过用针孔相机做工业检测的案例,结果因为小孔太小,曝光时间要好几秒,生产线根本跑不起来。后来还是换成了透镜。

核心公式:

小孔成像的几何关系其实就一句话:
像的大小 / 物体的大小 = 像距 / 物距

用数学表达就是:
-x / X = f / Z
其中负号表示像是倒立的。

2.2 针孔相机模型:数学化的相机

针孔相机模型,说白了就是把小孔成像数学化。它假设光线是直线传播的,没有畸变,没有模糊。当然,现实中没有这么完美的相机,但作为数学模型,它足够好用。

我刚开始做标定时,总觉得针孔模型太理想化,后来发现:你先用理想模型把问题理清楚,再考虑畸变修正,这是最稳妥的路径。 你想想看,如果连理想情况都搞不定,加上畸变只会更乱。

我的经验: 针孔模型中有四个关键参数——焦距 f、主点偏移 (cx, cy)。这些参数合起来叫内参矩阵。我曾经在标定一个广角镜头时,发现主点偏移特别大,一开始以为是标定错了,后来查资料才知道广角镜头的主点偏移本来就大。嗯,别慌,这是正常的。

2.3 四个坐标系:从世界到像素

接下来是重头戏。四个坐标系,一个链条,把三维世界映射到二维像素。我建议你把这个链条背下来:

  1. 世界坐标系 (World Coordinate System) — 你说了算的坐标系
  2. 相机坐标系 (Camera Coordinate System) — 以相机为中心
  3. 图像坐标系 (Image Coordinate System) — 物理单位(毫米)
  4. 像素坐标系 (Pixel Coordinate System) — 像素单位

2.3.1 世界坐标系 → 相机坐标系

世界坐标系是你自己定义的。比如你放一个棋盘格在地上,棋盘格的角点就是世界坐标。相机坐标系呢?以相机光心为原点,Z轴指向镜头前方。

从世界到相机,其实就是一次刚体变换:旋转 + 平移。用数学表达就是:

X_cam = R * X_world + T

其中 R 是 3x3 旋转矩阵,T 是 3x1 平移向量。这六个参数(三个旋转角 + 三个平移量)就是传说中的外参

避坑指南: 我曾经在标定时把世界坐标系的原点放在了棋盘格中心,结果旋转矩阵算出来总是怪怪的。后来发现,原点放在棋盘格左上角更稳定。为什么?因为角点检测时,左上角的角点最容易被准确识别。

2.3.2 相机坐标系 → 图像坐标系

这一步是透视投影。相机坐标系中的点 (X, Y, Z) 投影到成像平面上,得到图像坐标 (x, y)。公式很简单:

x = f * X / Z
y = f * Y / Z

注意这里 Z 是深度。Z 越大,物体看起来越小。这就是近大远小的数学本质。

我习惯用齐次坐标来写这个变换,因为可以统一成矩阵乘法:

[x']   [f  0  0  0] [X]
[y'] = [0  f  0  0] [Y]
[z']   [0  0  1  0] [Z]
                      [1]

然后 x = x'/z', y = y'/z'。嗯,齐次坐标的好处就是能把除法变成乘法,方便后续计算。

2.3.3 图像坐标系 → 像素坐标系

图像坐标是物理单位(毫米),像素坐标是像素单位。转换需要两个参数:

  • dx, dy:每个像素的物理尺寸(毫米/像素)
  • cx, cy:主点偏移(像素)

公式:

u = x / dx + cx
v = y / dy + cy

写成矩阵形式:

[u]   [1/dx  0    cx] [x]
[v] = [0     1/dy cy] [y]
[1]   [0     0    1 ] [1]

2.4 完整的投影公式

把上面三步串起来,就得到了从世界坐标到像素坐标的完整映射:

s * [u]   [fx  0   cx] [R | T] [X_w]
    [v] = [0   fy cy] [      ] [Y_w]
    [1]   [0   0   1] [      ] [Z_w]
                       [      ] [1 ]

其中:

  • fx = f/dx, fy = f/dy — 以像素为单位的焦距
  • cx, cy — 主点偏移
  • R, T — 外参
  • s — 缩放因子(因为齐次坐标的尺度不确定性)

一句话总结: 相机标定就是求解内参矩阵 K 和外参 [R|T] 的过程。内参是相机自己的属性,外参是相机在世界中的位置和朝向。

2.5 我的实战建议

最后分享几个我在项目中踩过的坑:

  • 坐标系方向要统一: 我习惯用右手系,Z轴朝前。但有些库用左手系,不注意的话旋转矩阵会算反。
  • 主点不一定是图像中心: 很多初学者以为 cx = width/2, cy = height/2。实际上因为镜头安装误差,主点往往偏离中心几个像素甚至几十个像素。
  • fx 和 fy 可能不相等: 如果传感器像素不是正方形,fx 和 fy 就不一样。这在手机相机上很常见。

好了,成像几何基础就聊到这里。下一章我们开始讲畸变模型——为什么直线拍出来会变弯,以及怎么把它掰直。