2、坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系的关系与转换

做外参标定,说白了就是搞清楚相机在空间里到底是怎么摆的。你想想看,一个相机放在那里,它看到的画面和真实世界之间,差的就是几个坐标系之间的变换关系。我刚开始接触这个领域时,总觉得坐标系转换很抽象,直到亲手标定过几台工业相机后,才真正理解了这背后的几何逻辑。

嗯,咱们今天就把这四个坐标系彻底捋清楚。它们分别是:世界坐标系、相机坐标系、图像坐标系和像素坐标系。这四个坐标系串起来,就是一条从三维世界到二维像素的完整链路。

四个坐标系的关系与转换流程 世界坐标系 (Xw, Yw, Zw) 真实世界的绝对坐标 外参矩阵 (R|t) 相机坐标系 (Xc, Yc, Zc) 以相机光心为原点 透视投影 (内参) 图像坐标系 (x, y) 物理单位(mm) 离散化 (dx, dy) 像素 (u,v) 三维世界 → 相机视角 → 物理图像 → 数字像素 核心转换公式 ① 世界→相机: [Xc, Yc, Zc, 1]^T = [R|t] · [Xw, Yw, Zw, 1]^T ② 相机→图像: x = f · Xc / Zc, y = f · Yc / Zc ③ 图像→像素: u = x / dx + u0, v = y / dy + v0 最终:像素坐标 = 内参矩阵 × 外参矩阵 × 世界坐标

2.1 世界坐标系:一切测量的起点

世界坐标系,说白了就是你在真实世界中选的一个参考系。比如你在车间里放了一个棋盘格标定板,那你就可以把棋盘格的角点定义为世界坐标系的原点。我个人习惯把标定板平放在地面上,这样Z轴就垂直于地面,后续计算会方便很多。

世界坐标系是绝对坐标系,我们用 (Xw, Yw, Zw) 来表示。它的作用就是给所有物体一个统一的位置描述。你在标定板上画了多少个格子、每个格子多大,这些物理尺寸就是世界坐标系里的真实距离。

💡 我的经验: 标定板上的格子尺寸一定要量准。我曾经因为用卷尺量格子时手抖了一下,差了0.5mm,结果标定出来的外参误差直接导致机械臂抓取偏了2cm。后来我改用游标卡尺量,精度控制在0.1mm以内,问题就解决了。

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 四个坐标系的完整转换链路

把上面四个坐标系串起来,就是一条完整的链路:

  1. 世界坐标 → 相机坐标:乘以外参矩阵 [R|t]
  2. 相机坐标 → 图像坐标:透视投影,除以Zc再乘以f
  3. 图像坐标 → 像素坐标:缩放加平移,乘以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。

💡 我的习惯: 在实际标定中,我会先固定好相机和标定板,然后拍摄多张不同角度的照片。每张照片都能提供一组世界坐标到像素坐标的对应关系。用这些对应关系去解方程,就能得到外参。但要注意,至少需要3个不共线的点才能解出6个自由度(3个旋转+3个平移),实际中我一般用几十个点来做最小二乘优化,结果更稳定。

嗯,到这里四个坐标系的关系就讲清楚了。记住这个核心逻辑:外参描述的是相机在世界中的位置和朝向,内参描述的是相机自身的成像特性。搞懂了这些,后面的标定方法就水到渠成了。

可可精品资料库