1. 坐标系基础:理解世界坐标系、相机坐标系、图像坐标系、像素坐标系的概念与关系
做机器视觉的人,天天跟坐标系打交道。我刚开始接触HALCON时,就被这四个坐标系绕晕过——明明看着同一个点,怎么在不同坐标系下坐标值差那么多?后来踩了几个坑才明白,坐标系转换是整个视觉系统的地基。地基不稳,后面做标定、做定位全得翻车。
这一章,咱们就把这四个坐标系彻底捋清楚。
1.1 为什么需要四个坐标系?
你想想看,一个视觉系统里,有相机、有机器人、有工件。相机看到的是像素,机器人要的是物理坐标,工件有自己的摆放位置。没有一个统一的坐标系语言,这些设备根本没法对话。
四个坐标系的作用,说白了就是一层层做“翻译”:
- 世界坐标系:描述真实世界的位置,单位是mm
- 相机坐标系:以相机光心为原点,描述物体相对相机的位置
- 图像坐标系:在成像平面上,用物理单位描述投影位置
- 像素坐标系:图像在计算机里的存储方式,单位是像素
我在项目中遇到过一位同事,直接拿像素坐标去控制机器人抓取,结果偏了十几毫米。嗯,这就是没搞懂坐标系关系的典型翻车现场。
1.2 四个坐标系详解
1.2.1 世界坐标系 (World Coordinate System)
世界坐标系是咱们自己定义的“参考系”。你可以把原点放在工作台角落,也可以放在机器人基座中心。怎么方便怎么来。
- 通常用 (Xw, Yw, Zw) 表示
- 单位:毫米(mm)
- 作用:描述工件、相机、机器人在真实空间中的位置
1.2.2 相机坐标系 (Camera Coordinate System)
相机坐标系的原点在相机光心,Z轴沿着光轴方向指向物体。这个坐标系描述的是“物体相对于相机的位置”。
- 通常用 (Xc, Yc, Zc) 表示
- 单位:毫米(mm)
- Zc 就是物距
从世界坐标系到相机坐标系,靠的是外参矩阵(旋转 + 平移)。外参决定了相机在世界中的位姿。
1.2.3 图像坐标系 (Image Coordinate System)
光线通过镜头,在成像平面上形成倒立的像。图像坐标系就建在这个平面上,原点通常在图像中心(主点)。
- 通常用 (x, y) 表示
- 单位:毫米(mm)
- 原点:相机光轴与成像平面的交点
从相机坐标系到图像坐标系,靠的是透视投影——也就是小孔成像模型。这里用到了焦距 f。
1.2.4 像素坐标系 (Pixel Coordinate System)
图像最终要存成数字信号。像素坐标系就是图像在计算机里的“地址簿”。
- 通常用 (u, v) 表示
- 单位:像素(pixel)
- 原点:图像左上角
- u 轴向右,v 轴向下
从图像坐标系到像素坐标系,靠的是内参矩阵——包括像元尺寸 (dx, dy) 和主点偏移 (u0, v0)。
1.3 四个坐标系的关系图
下面这张图,把四个坐标系之间的转换关系画清楚了。我建议你把它存下来,做标定的时候对照着看。
1.4 坐标系转换的数学表达
搞清楚了概念,咱们来看看数学上怎么转。HALCON 里这些转换都是封装好的,但理解原理能帮你排查问题。
1.4.1 世界 → 相机
| Xc | | R11 R12 R13 Tx | | Xw |
| Yc | = | R21 R22 R23 Ty | | Yw |
| Zc | | R31 R32 R33 Tz | | Zw |
| 1 | | 0 0 0 1 | | 1 |
这个 4×4 矩阵就是外参矩阵。R 是旋转,T 是平移。
1.4.2 相机 → 图像
x = f * Xc / Zc
y = f * Yc / Zc
这就是小孔成像模型。注意这里 Zc 不能为 0,否则除零错误。
1.4.3 图像 → 像素
u = x / dx + u0
v = y / dy + v0
dx、dy 是每个像素的物理尺寸,u0、v0 是主点偏移。
关键点:整个转换链可以写成:
像素坐标 = 内参矩阵 × 透视投影 × 外参矩阵 × 世界坐标
HALCON 里用 cam_par 存内参,用 pose 存外参。标定就是求解这两个参数。
1.5 坐标系对比一览表
| 坐标系 | 符号 | 单位 | 原点位置 | 转换到下一级 |
|---|---|---|---|---|
| 世界坐标系 | (Xw, Yw, Zw) | mm | 用户自定义 | 外参矩阵 |
| 相机坐标系 | (Xc, Yc, Zc) | mm | 相机光心 | 透视投影 |
| 图像坐标系 | (x, y) | mm | 图像中心 | 内参矩阵 |
| 像素坐标系 | (u, v) | pixel | 图像左上角 | — |
1.6 避坑指南
做坐标系转换,有几个坑我几乎每个项目都会遇到新人踩一遍:
- 单位混用:世界坐标用 mm,像素坐标用 pixel,中间转换时千万别搞混。我见过有人把像素当毫米用,结果定位差了十万八千里。
- 原点方向搞反:像素坐标系 v 轴向下,图像坐标系 y 轴向上。这个符号变化很容易被忽略。
- Zc 为 0:透视投影时 Zc 不能为 0。如果标定板放得太近或太远,Zc 可能接近 0,导致计算不稳定。
- 外参顺序:HALCON 的 pose 是 [X, Y, Z, Rx, Ry, Rz, 类型],顺序不能乱。我刚开始用的时候,把旋转和平移写反了,标定结果完全不对。
这一章的内容就到这里。四个坐标系的关系是后续所有标定、定位、测量操作的基础。你花时间把它吃透,后面学手眼标定、九点标定会轻松很多。