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) | 像素 | 你最终看到的图像,原点在左上角 |
转换流程是这样的:
- 世界 → 相机:刚体变换(旋转 + 平移),用外参矩阵搞定
- 相机 → 图像:透视投影,除以Z,把3D点压到2D平面
- 图像 → 像素:离散化,把物理尺寸变成像素坐标
我曾经踩过的坑:世界坐标系的定义方式会影响外参的数值。如果你把棋盘格放在地上,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 本章知识体系总览
下面这张图把本章的核心逻辑串起来了。我建议你多看几遍,把坐标系转换的"流水线"刻在脑子里。
1.8 本章小结
这一章我们打下了相机标定的理论基础。你只需要记住几个关键点:
- 标定是为了求解内参、外参和畸变系数
- 针孔模型是基础,但实际镜头有畸变需要修正
- 四个坐标系之间的转换是标定的数学骨架
- 内参是相机的固有属性,外参随场景变化