1. 3D视觉测量概述

1.1 从2D到3D:为什么我们非做不可?

做机器视觉这些年,我越来越觉得——2D视觉就像用一只眼睛看世界。你想想看,一张平面图像能告诉你什么?位置、角度、有没有缺陷,这些确实够用。但一旦遇到高度、深度、立体形状,2D就彻底没辙了。

我记得刚入行那会儿,有个项目要测量手机中框的平面度。客户拿来的样品,用2D相机拍出来全是平的——因为从正上方看,所有点都在一个焦平面上。可实际上呢?中框边缘翘起了0.15mm。用千分表打点测,一个产品要花3分钟。后来换成3D线激光,3秒搞定。这就是从2D到3D最直接的驱动力。

核心差异一句话:2D测量的是“像素坐标”,3D测量的是“真实空间中的三维坐标”。

从技术演进来看,3D视觉大致经历了三个阶段:

阶段 代表技术 典型应用 我的评价
1.0 接触式 三坐标测量机(CMM) 精密模具检测 精度高,但慢,还怕划伤工件
2.0 结构光/双目 光栅投影、双目立体视觉 电子元件高度测量 速度快了,但对环境光敏感
3.0 线激光/ToF 线激光轮廓仪、飞行时间相机 在线全检、AGV避障 现在的主流,Halcon支持得最好

说白了,3D视觉不是要取代2D,而是补上2D缺的那一维。我现在的习惯是:能2D解决的问题绝不用3D,但一旦涉及高度、平面度、体积、间隙面差——直接上3D,别犹豫。

1.2 3D测量的三个核心概念

刚接触3D视觉的人,经常被一堆术语搞晕。其实你只要抓住三个东西:点云、深度图、视差。这三者就是3D数据的三种“长相”。

1.2.1 点云(Point Cloud)

点云是什么?就是一堆三维点的集合。每个点有X、Y、Z三个坐标,有时候还带灰度值或RGB颜色。你可以把它想象成用激光扫描仪给物体“打点”,打出来的点密密麻麻,就构成了物体的表面形状。

我在项目中遇到过最头疼的事:点云数据量太大。一个手机中框扫下来,轻松上百万个点。直接处理?Halcon都能卡死。所以后来我养成了习惯——先降采样,再处理。

我的经验:Halcon里用 sample_object_model_3d 做均匀降采样,一般保留10%~20%的点就够了。别贪多,精度损失几乎看不出来。

1.2.2 深度图(Depth Map)

深度图本质上还是一张图像,但每个像素的值不再是灰度或RGB,而是该点到相机的距离(Z值)。你可以把它理解成一张“海拔图”——越亮的地方离相机越近,越暗的地方越远。

深度图的好处是:处理速度快,因为它是2D结构。坏处是:丢失了X、Y方向的精确信息。所以深度图适合做快速检测,比如有没有缺料、有没有凸起。但要做高精度测量,还是得回到点云。

1.2.3 视差(Disparity)

视差是双目立体视觉的核心概念。简单说:同一个物体点,在左右两个相机里成像位置不一样,这个位置的差值就是视差。视差越大,物体离相机越近;视差越小,物体越远。

为什么提这个?因为Halcon的3D重建算法,底层就是靠视差图来生成深度图,再转成点云的。你如果做双目立体视觉项目,视差图的质量直接决定了最终测量精度。

避坑指南:我曾经在一条产线上用双目做电池极片高度测量,结果视差图全是噪点。查了两天才发现——左右相机曝光时间不一致。记住:双目系统必须保证左右相机硬件参数、曝光参数完全一致,否则视差图就是废的。

1.3 Halcon 3D模块:到底能干什么?

Halcon的3D模块,我用了快十年。说实话,它是我见过最完整的商业3D视觉库。别的工具要么只能读点云,要么只能做标定,Halcon是从采集到测量到输出,一条龙全包。

下面这张图是我自己整理的Halcon 3D模块知识体系,你一看就明白:

Halcon 3D模块知识体系 数据获取 点云 (ObjectModel3D) 深度图 (Image) 视差图 (Image) 标定 (Calibration) 重建 (Reconstruction) 配准 (Registration) 几何测量 缺陷检测 体积/间隙面差 结果输出 (Pose / 数值 / 报表) 本课程重点:标定 → 重建 → 几何测量 → 标定验证,形成完整闭环

从这张图你能看到,Halcon 3D模块不是零散的几个算子,而是一套完整的数据处理流水线。我个人最常用的几个算子:

  • 标定相关:calibrate_cameras、set_calib_data_cam_param——这是3D测量的地基,地基不稳,后面全白搭
  • 重建相关:disparity_to_point_3d、xyz_to_object_model_3d——把视差图转成点云,核心中的核心
  • 测量相关:distance_from_plane、fit_primitive_object_model_3d——拟合平面、测量距离,实战最常用
一个小建议:刚开始学Halcon 3D,别急着写代码。先把 hdevelop 里的3D示例跑一遍,尤其是 calibrate_hand_eye_stationary_model_3d.hdev 和 measure_plane_distance.hdev。跑通了,你就有感觉了。

1.4 本章小结:你该带走什么?

这一章我们聊了三个东西:

  1. 从2D到3D的演进——不是替代,是互补。遇到高度、平面度、体积问题,果断上3D。
  2. 三个核心概念——点云是“真3D”,深度图是“伪3D”,视差是“桥梁”。三者的关系要理清。
  3. Halcon 3D模块——从数据获取到结果输出,一条龙。标定是地基,重建是核心,测量是目的。