1. 深度图基础与标定概述
各位同学好,我是老张。做机器视觉十几年了,从2D做到3D,踩过的坑比走过的路还多。今天咱们聊聊深度图标定这件事。
说实话,我刚接触3D视觉那会儿,觉得深度图挺神奇的——一张图里居然能存每个点的距离信息。但后来发现,光有深度图远远不够,标定才是真正让数据变准的关键。嗯,咱们一步步来。
1.1 深度图到底是什么?
深度图,说白了就是一张灰度图。每个像素点的灰度值,代表物体到相机之间的距离。你想想看,普通RGB图存的是颜色,深度图存的是距离。
举个例子:
- 像素值 0 → 距离无限远(或无效点)
- 像素值 255 → 距离最近(比如 100mm)
- 中间值 → 按比例映射实际距离
我在项目里遇到过一种情况:客户拿来的深度图,看着挺清楚,但一量尺寸全偏。后来发现是标定参数不对,深度值映射关系完全错了。所以理解深度图的本质,是第一步。
核心概念:深度图 = 距离矩阵。每个像素的灰度值,代表该点到相机参考平面的垂直距离,而不是斜线距离。
1.2 为什么要做深度图标定?
你可能会问:相机买回来不就能用吗?为什么还要标定?
我刚开始也这么想。直到有一次,我用一台标称精度0.1mm的3D相机,测一个标准量块,结果偏差了0.5mm。查了两天,最后发现是相机出厂参数和实际安装环境不匹配。
标定的目的,说白了就三个:
- 消除畸变——镜头不是完美的,边缘会有扭曲
- 建立映射——把像素坐标和世界坐标对应起来
- 统一基准——多台相机、多个视角的数据能拼到一起
| 标定类型 | 解决什么问题 | 我踩过的坑 |
|---|---|---|
| 内参标定 | 镜头畸变、焦距偏差 | 用错标定板尺寸,白忙一天 |
| 外参标定 | 相机位置、姿态 | 安装后没固定好,震动导致偏移 |
| 深度映射标定 | 灰度值→实际距离 | 环境温度变化,映射曲线漂移 |
注意:千万不要跳过标定直接做测量。我曾经图省事,结果项目验收时数据全废,返工成本是标定成本的十倍。
1.3 Halcon 标定流程概览
Halcon 的标定流程,我总结为五个步骤。你跟着走一遍,基本不会出大问题。
- 准备标定板——Halcon 推荐用圆点标定板,精度高
- 采集图像——至少拍 10-15 张不同角度
- 提取特征点——用
find_caltab或find_marks_and_pose - 计算参数——
camera_calibration算子搞定 - 验证精度——重投影误差小于 0.1 像素才算合格
我个人习惯,每次标定完都会保存一份标定日志。这样出了问题,还能回溯是哪一步不对。
小技巧:标定板不要用手拿着拍,容易抖动。用支架固定,或者贴在平板上移动,效果会好很多。
1.4 深度图标定的特殊之处
和2D标定不同,深度图标定多了一个维度——Z轴。这意味着:
- 不仅要标定XY平面的映射关系
- 还要标定深度方向的线性度
- 环境光、物体表面材质都会影响深度值
我记得有一次,标定完发现深度值在边缘区域偏差特别大。排查了半天,原来是标定板表面反光太强,导致深度传感器误判。后来换了哑光材质的标定板,问题就解决了。
所以做深度图标定,选对工具和方法,比盲目追求算法更重要。
1.5 本章小结
这一章咱们把深度图标定的基础捋了一遍。记住几个关键点:
- 深度图存的是距离,不是颜色
- 标定解决畸变、映射、基准统一三个问题
- Halcon 标定流程清晰,但细节决定成败
- 深度图标定比2D多了一个Z轴维度,要格外小心