HALCON点云深度图测量与相机标定脚本实战 - 第1节
1.1 从2D到3D:为什么我们需要第三维?
做机器视觉这些年,我经常被问到同一个问题:2D视觉都这么成熟了,为什么还要折腾3D?
说实话,十年前我也这么想。那时候做手机屏幕检测,一个2000万像素的相机加几个条形光源,就能把划痕、脏污看得清清楚楚。直到我遇到一个项目——检测汽车刹车片表面的平面度。
2D图像里,刹车片看起来平整光滑。但用千分尺一量,中间凸起了0.3毫米。客户说:这不行,装上去刹车会抖。那一刻我才意识到,2D视觉只能看到「有没有」,看不到「有多高」。
你想想看,一个苹果在2D图像里是个红色圆形,但3D点云里它是个球体。圆形和球体,信息量差了多少?
具体来说,3D视觉带来了三个关键能力:
- 高度/深度测量——平面度、段差、共面性,这些2D搞不定
- 体积/轮廓计算——料斗里还剩多少物料?焊缝余高多少?
- 位姿估计——工件在空间里怎么摆的?抓取点在哪?
我个人的习惯是,接到一个新项目先问自己:这个检测任务,2D能解决吗?如果答案是否定的,那就果断上3D。
1.2 三大主流3D视觉技术
目前工业界主流的3D视觉方案,说白了就三种:结构光、双目立体视觉、ToF(飞行时间)。
它们各有各的脾气,选错了方案,项目还没开始就输了一半。
1.2.1 结构光
原理很简单:投影仪打出特定图案(条纹、编码点阵),相机拍下图案在物体表面的变形,通过三角法算出深度。
我在项目中遇到过最典型的案例——手机中框的平面度检测。结构光方案,0.02mm的重复精度,一条中框检测只要1.5秒。
1.2.2 双目立体视觉
模仿人眼,两个相机从不同角度拍同一物体,通过视差计算深度。
优势是硬件成本低,两个工业相机加个支架就能干活。但缺点也很明显——对纹理敏感。纯色表面、重复纹理,双目基本歇菜。
我记得有个项目要做纸箱堆垛的3D定位,纸箱表面就是牛皮纸色,啥纹理都没有。双目死活匹配不上,最后换了结构光才解决。
1.2.3 ToF(飞行时间)
发射光脉冲,测量反射回来的时间差,直接算出距离。
ToF最大的优点是快——一秒钟能拍几十帧。适合做动态场景,比如AGV避障、人机协作。
但精度嘛……目前工业级ToF也就做到毫米级,跟结构光的微米级没法比。
| 技术类型 | 精度范围 | 测量距离 | 速度 | 典型场景 |
|---|---|---|---|---|
| 结构光 | 0.01~0.1 mm | 0.1~5 m | 中 | 精密测量、3C检测 |
| 双目立体 | 0.1~1 mm | 0.5~10 m | 中 | 物流分拣、大尺寸定位 |
| ToF | 1~10 mm | 0.3~20 m | 快 | 避障、人机交互 |
1.3 Halcon在3D领域的定位与优势
说到3D视觉软件,市面上选择不少。OpenCV免费但门槛高,PCL开源但工程化差,各家相机厂商的SDK又太封闭。
Halcon在这中间,找到了一个很舒服的位置。
1.3.1 完整的3D算子库
从点云读取、滤波、分割,到拟合、测量、匹配,Halcon提供了超过200个3D专用算子。你不需要自己造轮子。
我印象最深的是 xyz_to_world_plane 这个算子。做深度图测量时,把点云投影到参考平面,一步到位。换做OpenCV,你得自己写旋转矩阵、投影变换,至少50行代码。
1.3.2 2D+3D融合能力
这是Halcon最让我服气的地方。很多场景下,你需要同时用2D图像找特征,用3D点云量高度。
举个例子:检测芯片引脚共面性。先用2D图像定位引脚位置,再用3D点云测量每个引脚的高度。Halcon里,2D和3D数据共享同一个坐标系,无缝切换。
1.3.3 标定体系成熟
3D视觉的精度,一半靠硬件,一半靠标定。Halcon提供了从相机标定、手眼标定到多传感器标定的完整工具链。
我个人习惯用 calibrate_cameras 做多相机标定,配合 hand_eye_calibration 做机器人手眼标定。一套流程走下来,重投影误差能控制在0.1像素以内。
1.3.4 性能优化
3D点云动辄几百万个点,处理速度是个大问题。Halcon用了多核并行和GPU加速,同样的算法,比OpenCV快3~5倍。
我之前做过一个项目,100万个点的点云做平面拟合,Halcon跑了0.8秒,PCL跑了3.2秒。产线节拍要求1秒以内,只有Halcon能过。
1.4 本章知识体系
下面这张图,是我自己梳理的3D视觉知识框架。每次带新人,我都会先让他们看这张图。
这张图把本章的核心逻辑串起来了。从上往下看:先了解三大技术,再理解它们能解决什么问题,最后看Halcon如何帮我们落地。
嗯,这就是第一章的全部内容。记住一句话:3D视觉不是2D的替代品,而是2D的补充。什么时候用2D,什么时候上3D,心里有数就行。