2、坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系的关系与转换
做外参标定,说白了就是搞清楚相机在空间里到底是怎么摆的。你想想看,一个相机放在那里,它看到的画面和真实世界之间,差的就是几个坐标系之间的变换关系。我刚开始接触这个领域时,总觉得坐标系转换很抽象,直到亲手标定过几台工业相机后,才真正理解了这背后的几何逻辑。
嗯,咱们今天就把这四个坐标系彻底捋清楚。它们分别是:世界坐标系、相机坐标系、图像坐标系和像素坐标系。这四个坐标系串起来,就是一条从三维世界到二维像素的完整链路。
2.1 世界坐标系:一切测量的起点
世界坐标系,说白了就是你在真实世界中选的一个参考系。比如你在车间里放了一个棋盘格标定板,那你就可以把棋盘格的角点定义为世界坐标系的原点。我个人习惯把标定板平放在地面上,这样Z轴就垂直于地面,后续计算会方便很多。
世界坐标系是绝对坐标系,我们用 (Xw, Yw, Zw) 来表示。它的作用就是给所有物体一个统一的位置描述。你在标定板上画了多少个格子、每个格子多大,这些物理尺寸就是世界坐标系里的真实距离。
2.2 相机坐标系:以相机为中心的视角
相机坐标系的原点在哪里?在相机的光心(也就是镜头的光学中心)。Zc轴沿着相机的主光轴方向,指向相机正前方。Xc轴向右,Yc轴向下——嗯,这是计算机视觉里的惯例,和OpenCV保持一致。
从世界坐标系到相机坐标系,靠的就是外参矩阵。外参矩阵包含两部分:旋转矩阵R和平移向量t。R描述的是相机相对于世界坐标系的朝向,t描述的是相机光心在世界坐标系中的位置。
外参矩阵的数学形式:
[Xc] [R11 R12 R13 tx] [Xw]
[Yc] = [R21 R22 R23 ty] [Yw]
[Zc] [R31 R32 R33 tz] [Zw]
[1 ] [0 0 0 1 ] [1 ]
说白了,这就是一个刚体变换。你想想看,把世界坐标系旋转一下、平移一下,就和相机坐标系重合了。
2.3 图像坐标系:从三维到二维的投影
相机坐标系里的点,怎么变成图像上的点?靠的是透视投影。图像坐标系的原点在相机的主光轴与成像平面的交点(也就是主点),单位是毫米。
投影公式其实很简单:
x = f * Xc / Zc
y = f * Yc / Zc
这里f是焦距,单位也是毫米。你会发现,Zc越大,投影后的x和y越小——这就是近大远小的原理。我在做双目视觉项目时,经常需要手动验证这个投影关系,确保内参标定没有出问题。
2.4 像素坐标系:计算机眼中的图像
图像坐标系是物理单位(毫米),但计算机只认像素。所以我们需要把毫米坐标转换成像素坐标。像素坐标系的原点通常在图像的左上角,u轴向右,v轴向下。
转换公式:
u = x / dx + u0
v = y / dy + v0
其中dx和dy是每个像素在x和y方向上的物理尺寸(毫米/像素),(u0, v0)是主点的像素坐标。这些参数都属于内参,在相机出厂时就已经固定了,但实际使用中最好重新标定一遍。
| 坐标系 | 表示方式 | 单位 | 原点位置 |
|---|---|---|---|
| 世界坐标系 | (Xw, Yw, Zw) | 毫米 | 自定义(如标定板角点) |
| 相机坐标系 | (Xc, Yc, Zc) | 毫米 | 相机光心 |
| 图像坐标系 | (x, y) | 毫米 | 主点(光轴与成像平面交点) |
| 像素坐标系 | (u, v) | 像素 | 图像左上角 |
2.5 四个坐标系的完整转换链路
把上面四个坐标系串起来,就是一条完整的链路:
- 世界坐标 → 相机坐标:乘以外参矩阵 [R|t]
- 相机坐标 → 图像坐标:透视投影,除以Zc再乘以f
- 图像坐标 → 像素坐标:缩放加平移,乘以1/dx、1/dy,再加上主点偏移
写成矩阵形式,就是大家熟悉的:
s * [u] [fx 0 u0 0] [R11 R12 R13 tx] [Xw]
[v] = [0 fy v0 0] [R21 R22 R23 ty] [Yw]
[1] [0 0 1 0] [R31 R32 R33 tz] [Zw]
[0 0 0 1 ] [1 ]
其中s是尺度因子,fx = f/dx,fy = f/dy。这个公式就是相机模型的完整数学表达。你想想看,左边是像素坐标,右边是世界坐标,中间夹着内参矩阵和外参矩阵——外参标定要做的,就是根据已知的像素坐标和世界坐标,反推出外参矩阵里的R和t。
嗯,到这里四个坐标系的关系就讲清楚了。记住这个核心逻辑:外参描述的是相机在世界中的位置和朝向,内参描述的是相机自身的成像特性。搞懂了这些,后面的标定方法就水到渠成了。