1. 课程导论与预备知识:相机标定的目的与意义、针孔相机模型、坐标系转换(世界、相机、图像、像素)、内参与外参矩阵、畸变模型(径向与切向)

1.1 我们为什么要做相机标定?

说实话,我刚入行那会儿,觉得相机标定挺无聊的。不就是拍几张棋盘格嘛?后来做第一个3D重建项目,发现恢复出来的点云全是歪的——嗯,从那以后我再也不敢小看标定了。

相机标定的核心目的,说白了就两个:

  • 把图像里的像素位置,和现实世界的物理位置对应起来
  • 消除镜头带来的畸变,让图像更接近真实投影

你想想看,如果标定参数不准,后续的测距、定位、三维重建全是空中楼阁。我在做自动驾驶感知项目时遇到过,标定误差0.1个像素,在50米外就变成了10厘米的位置偏差——这对障碍物检测来说,可能就是撞与不撞的区别。

标定的本质:求解从"世界坐标系中的3D点"到"图像坐标系中的2D像素"的映射关系,同时修正镜头带来的畸变。

1.2 针孔相机模型——最朴素的成像原理

相机成像,本质上就是小孔成像。只不过我们用透镜代替了小孔,让更多光线进来,成像更亮更清晰。

针孔模型假设光线沿直线传播,穿过光心后投影到成像平面。这里有几个关键概念:

  • 光心(O):相机坐标系的原点,光线汇聚的点
  • 主光轴:过光心且垂直于成像平面的直线
  • 焦距(f):光心到成像平面的距离
  • 成像平面:传感器所在的位置,接收光线形成图像

我记得第一次推导投影公式时,被符号搞晕了——成像其实是倒立的。不过没关系,数学上我们通常把成像平面"虚拟"到光心前方,这样就不用处理倒立问题了。

我的习惯:做标定推导时,永远先画一张针孔模型示意图,把坐标系标清楚。坐标系一乱,后面全白费。

1.3 坐标系转换——四个世界之间的桥梁

相机标定涉及四个坐标系。我刚开始学的时候,总觉得它们之间隔着一堵墙。后来发现,其实就是一连串的矩阵乘法。

坐标系 符号 单位 说明
世界坐标系 (Xw, Yw, Zw) 米/mm 你定义的全局参考系,棋盘格角点就在这里定义
相机坐标系 (Xc, Yc, Zc) 米/mm 以光心为原点,Z轴沿主光轴指向场景
图像坐标系 (x, y) 米/mm 成像平面上的物理坐标,原点在光轴与平面交点
像素坐标系 (u, v) 像素 你最终看到的图像,原点在左上角

转换流程是这样的:

  1. 世界 → 相机:刚体变换(旋转 + 平移),用外参矩阵搞定
  2. 相机 → 图像:透视投影,除以Z,把3D点压到2D平面
  3. 图像 → 像素:离散化,把物理尺寸变成像素坐标

我曾经踩过的坑:世界坐标系的定义方式会影响外参的数值。如果你把棋盘格放在地上,Z轴朝上,和把棋盘格贴在墙上,Z轴朝前,得到的旋转矩阵和平移向量完全不同。标定前一定要统一约定!

1.4 内参矩阵——相机自己的"身份证"

内参矩阵描述的是相机内部的几何特性。它只和相机本身有关,换了场景也不用重新标定(除非你动了镜头)。

内参矩阵 K 长这样:

K = [fx   0   cx
     0   fy   cy
     0    0    1 ]

其中:

  • fx, fy:焦距在像素单位下的表示,fx = f / dx,fy = f / dy
  • cx, cy:主点坐标,理论上在图像中心,实际会有偏移

我见过很多初学者以为 cx, cy 就是图像宽高的一半。其实不是的,镜头安装时会有微小的偏心,cx, cy 就是用来补偿这个偏差的。

1.5 外参矩阵——相机在哪儿?朝哪儿看?

外参描述的是相机在世界坐标系中的位置和朝向。它由旋转矩阵 R 和平移向量 t 组成:

[R | t]   (3×4 矩阵)

外参是"场景相关"的。你把相机从三脚架挪到手持,外参就变了。标定的时候,我们通常固定相机,移动标定板,每张图片的外参都不一样。

一句话总结:内参是"相机长什么样",外参是"相机在哪儿"。

1.6 畸变模型——镜头不是完美的

现实中的镜头不是完美的针孔。光线经过透镜时会发生弯曲,这就是畸变。畸变主要分两类:

径向畸变

光线离主光轴越远,弯曲越严重。表现为:

  • 桶形畸变:图像向外膨胀,广角镜头常见
  • 枕形畸变:图像向内收缩,长焦镜头常见

数学模型用泰勒展开近似:

x_corrected = x * (1 + k1*r² + k2*r⁴ + k3*r⁶)
y_corrected = y * (1 + k1*r² + k2*r⁴ + k3*r⁶)

其中 r 是像素到主点的距离,k1, k2, k3 是径向畸变系数。

切向畸变

镜头和成像平面不平行导致的。表现为图像倾斜:

x_corrected = x + [2*p1*x*y + p2*(r² + 2*x²)]
y_corrected = y + [p1*(r² + 2*y²) + 2*p2*x*y]

p1, p2 是切向畸变系数。

我的经验:对于普通工业相机,标定 k1, k2 就够了。k3 通常用于鱼眼镜头。切向畸变 p1, p2 一般很小,但如果你的镜头安装座有加工误差,它就会比较明显。

1.7 本章知识体系总览

下面这张图把本章的核心逻辑串起来了。我建议你多看几遍,把坐标系转换的"流水线"刻在脑子里。

相机标定知识体系总览 相机标定知识体系总览 世界坐标系 (Xw, Yw, Zw) 相机坐标系 (Xc, Yc, Zc) 图像坐标系 (x, y) 像素坐标系 (u, v) 外参 投影 内参 畸变模型(镜头不完美) 径向畸变:k₁, k₂, k₃(桶形/枕形) 切向畸变:p₁, p₂(镜头倾斜) 标定输出 内参矩阵 K + 畸变系数 (k₁, k₂, p₁, p₂, k₃) + 每帧外参 💡 标定 = 求解从 3D 世界到 2D 像素的映射参数 + 畸变修正参数 有了这些参数,你就能从图像反推真实世界的几何信息

1.8 本章小结

这一章我们打下了相机标定的理论基础。你只需要记住几个关键点:

  • 标定是为了求解内参、外参和畸变系数
  • 针孔模型是基础,但实际镜头有畸变需要修正
  • 四个坐标系之间的转换是标定的数学骨架
  • 内参是相机的固有属性,外参随场景变化