2D标定没那么神秘:仿射变换帮你搭建像素↔毫米的桥梁

一台相机、一个平面、几个点,就能把“图像坐标”变成“真实尺寸”

在机器视觉项目里,最常遇到的一个需求就是:知道图像上一个点,它在真实世界里到底在哪儿?有多远?

这个问题就是“2D标定”。而解决它最简单实用的数学工具之一,就是仿射变换

今天我们就来聊聊,如何用仿射变换把“像素”和“毫米”连接起来。

为什么仿射变换可以用来标定?

想象一下理想情况:

  • 相机光轴完全垂直于被测平面
  • 镜头没有畸变

那么,图像平面和物理平面之间,就只差一个线性关系:缩放、旋转、平移。这不就是仿射变换吗?

当然,现实中没有绝对完美的垂直和零畸变。但在很多实际场景中:

  • 视场不大
  • 精度要求不是“微米级”
  • 或者你已经提前做了畸变校正

用仿射变换来近似这个映射,完全够用,而且非常简单。

于是,2D标定的核心任务就变成了:
👉 求出一个仿射变换矩阵,能把像素坐标 (row, col) 映射到世界坐标 (Xw, Yw)

三个最典型的应用场景

1️⃣ 像素当量标定(最简单)

  • 放一个已知实际尺寸的标准圆(或方格)在视野里
  • 测量它的像素直径
  • 就能算出 1 像素 = 多少毫米
  • 很适合测量长度、间距、直径

2️⃣ 机器人手眼标定(平面抓取)

  • 相机固定在机器人的上方,拍摄平面上的工件
  • 通过标定板建立图像 ↔ 机器人坐标系的映射
  • 机器人就能根据视觉定位,精准抓取

3️⃣ 多相机拼接或位置补偿

  • 两个相机拍摄同一平面,需要统一坐标系
  • 用仿射变换做图像配准或坐标对齐

Halcon 里的实现:四步搞定

第1步:拍标定板,提取点的像素坐标

你可以用圆点阵或棋盘格标定板,物理间距是已知的。
通过 Halcon 的 find_calib_object 或者手动提取圆心,得到一组 (row, col)

第2步:定义这些点的世界坐标

以标定板左上角为原点,单位 mm,给每个点分配 (Xw, Yw)

第3步:一句话计算变换矩阵

vector_to_hom_mat2d (PixelRows, PixelCols, WorldY, WorldX, HomMat2D)

⚠️ 注意:Halcon 中 Row 对应 Y,Col 对应 X,所以传入顺序是 像素Y, 像素X, 世界Y, 世界X

第4步:应用矩阵,完成转换

* 单个点转换
affine_trans_point_2d (HomMat2D, row, col, worldY, worldX)

* 整张图像矫正到世界坐标系(拉正)
affine_trans_image (Image, ImageRectified, HomMat2D, 'constant', 'false')

就这么简单,你已经完成了从像素到真实世界的映射。

小贴士:如果手里的矩阵是反的怎么办?

有时候你已有的矩阵是从世界坐标 → 像素坐标的,没关系,求个逆矩阵就行:

hom_mat2d_invert (HomMat2D_WorldToPixel, HomMat2D_PixelToWorld)
affine_trans_point_2d (HomMat2D_PixelToWorld, Row, Col, WorldY, WorldX)

这些坑,你最好提前知道

问题 影响 怎么办
镜头畸变明显 映射不准,边缘尤其严重 先做畸变校正,再用仿射标定
标定物体不是严格平面 仿射变换不适用 需要用透视或3D标定
只用了3个点,而且共线 解不唯一或矩阵不稳定 至少用4个不共线的点,越多越好(vector_to_hom_mat2d 会自动用最小二乘)
标定点集中在局部区域 外推精度很差 让标定点均匀铺满整个工作区域

什么时候该用仿射变换,什么时候不该?

场景 推荐
小视场、低精度、快速标定 ✅ 仿射变换足够
镜头畸变大(如广角、鱼眼) ❌ 先畸变校正,再用仿射
物体有高度变化(不是平面) ❌ 需要透视或3D标定
微米级精度要求 ⚠️ 建议做完整的相机标定(含畸变模型)
光轴明显不垂直(斜拍) ⚠️ 仿射还能凑合,但透视模型更好

一句话总结

在2D平面标定中,仿射变换就是连接“像素坐标”和“物理坐标”的最简单桥梁。
它特别适合:快速现场标定、精度要求不高的测量、或作为复杂标定前的粗校准。

下次你再需要把“图像里的像素”变成“机器能懂的毫米”,不妨从仿射变换开始。三个点,一行代码,世界坐标就出来了。

如果想要了解原理,这里还有一篇文章:玩转Halcon中的2D仿射变换:从原理到实战

你用过仿射变换做过哪些有趣的应用?欢迎留言分享~ 😊

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐