坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系及其转换关系
各位同学好,我是老张。今天咱们聊聊坐标系,这是传感器标定里最基础、也最绕不开的一块内容。
说实话,我刚开始做标定那会儿,也被这四个坐标系搞得晕头转向。什么世界坐标、相机坐标、图像坐标、像素坐标……听着就头大。但后来我发现,只要理清了它们之间的转换关系,这事儿其实没那么复杂。
咱们先看一张整体框架图,心里有个谱:
1. 世界坐标系——我们生活的真实世界
世界坐标系,说白了就是描述物体在真实世界中位置的参考系。你可以把它想象成一个巨大的三维网格,每个物体都有一个唯一的坐标 (Xw, Yw, Zw)。
我个人习惯把世界坐标系的原点选在场景中某个明显的参考点上,比如标定板的角点、房间的墙角,或者某个固定支架的底座。为什么这么选?因为这样后续计算方便,不容易出错。
2. 相机坐标系——以相机为中心的视角
相机坐标系,就是以相机光心为原点建立的坐标系。它的 Z 轴通常指向相机正前方,X 轴向右,Y 轴向下(这个跟图像坐标系的方向有关,后面会讲)。
嗯,这里要注意:相机坐标系和世界坐标系之间,存在一个旋转和平移的关系。这个关系用一个 4x4 的矩阵来表示,我们叫它外参矩阵。
我在项目中遇到过一个问题:标定板放歪了,导致外参矩阵算出来不对。后来发现是旋转矩阵的符号搞反了。你想想看,旋转方向搞反了,整个坐标系就拧巴了,后面的标定全白做。
3. 图像坐标系——从三维到二维的投影
图像坐标系,是相机成像平面上的二维坐标系。它的原点在相机光轴与成像平面的交点(也就是主点),单位是毫米。
从相机坐标系到图像坐标系,靠的是透视投影。说白了,就是小孔成像原理。公式很简单:
x = f * Xc / Zc
y = f * Yc / Zc
其中 f 是焦距。这个公式看着简单,但实际用起来有个坑:Zc 不能为 0。你想想看,如果物体正好在相机光心位置,那投影到图像上就是无穷远,这显然不合理。
4. 像素坐标系——计算机眼中的图像
像素坐标系,就是计算机存储图像时用的坐标系。它的原点在图像左上角,u 轴向右,v 轴向下,单位是像素。
从图像坐标系到像素坐标系,是一个仿射变换:
u = x / dx + u0
v = y / dy + v0
其中 dx、dy 是每个像素的物理尺寸(毫米/像素),(u0, v0) 是主点的像素坐标。
我记得有一次,一个学生问我:为什么像素坐标系的 v 轴是向下的?我说,你想想看,计算机显示图像时,第一行在最上面,第二行在下面,所以 v 轴自然向下。这个方向跟相机坐标系的 Y 轴是反的,所以计算时要注意符号。
5. 四个坐标系的转换关系——一张图说清楚
好了,四个坐标系都讲完了。咱们把它们串起来,看看完整的转换流程:
| 步骤 | 从 | 到 | 变换类型 | 关键参数 |
|---|---|---|---|---|
| 1 | 世界坐标系 | 相机坐标系 | 刚体变换(旋转+平移) | 外参矩阵 [R | t] |
| 2 | 相机坐标系 | 图像坐标系 | 透视投影 | 焦距 f |
| 3 | 图像坐标系 | 像素坐标系 | 仿射变换 | 内参 (fx, fy, u0, v0) |
完整的转换公式可以写成:
s * [u, v, 1]^T = K * [R | t] * [Xw, Yw, Zw, 1]^T
其中:
- s 是尺度因子(其实就是 Zc)
- K 是内参矩阵(包含焦距、主点、畸变参数)
- [R | t] 是外参矩阵(旋转和平移)
- [Xw, Yw, Zw] 是世界坐标
- [u, v] 是像素坐标
6. 实际应用中的注意事项
讲完了理论,咱们聊聊实际中容易踩的坑。
第一个坑:坐标系方向搞反。 我见过有人把相机坐标系的 Z 轴指向相机后方,结果投影出来的点全在图像外面。记住:Z 轴指向场景方向,不是指向相机后面。
第二个坑:单位不统一。 世界坐标用米,图像坐标用毫米,像素坐标用像素。计算时一定要统一单位,不然结果差好几个数量级。
第三个坑:畸变没考虑。 实际相机都有畸变(径向畸变、切向畸变),如果不做畸变校正,投影精度会大打折扣。这个咱们后面章节会详细讲。
好了,坐标系基础就讲到这里。这四个坐标系的关系,说白了就是:从三维世界到二维图像,再到计算机像素。理解了这个流程,后面的标定原理就水到渠成了。
记住我这句话:坐标系转换是标定的灵魂,搞懂了它,你就掌握了标定的一半。
公众号:蓝海资料掘金营,微信deep3321