2. Halcon三维测量基础
三维视觉测量技术的工程落地,首先取决于对数据获取原理与数据组织形式的深刻理解。Halcon作为工业机器视觉领域的专业算法库,其三维测量模块(SurfaceModel、XYZAttrib、Disparity等)并不直接产生原始三维数据,而是对上游传感器输出的点云、深度图或视差图进行高效处理与精密测量。本章将系统梳理结构光、激光三角、立体视觉三种主流3D数据获取方式的技术本质,并深入解析点云、深度图、三角网格三种模型表示的数据结构与Halcon中的对应算子,为后续精度验证方法建立坚实的知识基座。
上图清晰展示了三种获取方式与三种模型表示之间的映射关系。在实际工程中,结构光与立体视觉通常直接生成深度图或视差图,再通过相机标定参数转换为点云;激光三角则直接输出轮廓点云或深度图。Halcon通过统一的3D对象模型(Object3D)封装这些数据,使得后续的测量、配准、比较操作与具体传感器解耦。
2.1 结构光三维测量:编码光场与相位解算
核心原理
结构光技术通过投影仪向被测物体表面投射已知编码图案(正弦光栅、格雷码、散斑等),相机从另一角度拍摄被物体表面调制后的变形图案。由于投影仪与相机之间存在固定的几何基线,物体表面的高度变化会引起图案相位或位置的偏移,通过解算相位偏移量并结合三角测量原理,即可恢复物体表面的三维坐标。Halcon中,结构光测量通常借助多视图立体匹配(Multi-View Stereo)或专用结构光标定流程实现。
判断方法与操作流程
- 系统标定:使用Halcon的
calibrate_cameras算子对投影仪和相机进行联合标定,获取内外参数与畸变系数。标定板通常采用非对称圆点或棋盘格,需在不同高度和姿态下采集10-15组图像。 - 光栅投影与采集:依次投射N步相移光栅(通常3步或4步),同步触发相机采集。Halcon通过
grab_image系列算子控制采集时序。 - 相位解算:利用多幅相移图像计算包裹相位(
phase_shift),再通过时间相位展开(多频外差法)获得绝对相位。 - 三维重建:将绝对相位映射到投影仪像素坐标,结合标定参数,通过
reconstruct_surface_stereo或xyz_to_object_model_3d生成点云。
| 关键参数 | 典型值 | 对精度影响 |
|---|---|---|
| 光栅频率 | 16/32/64周期 | 频率越高,相位解算越精确,但噪声敏感度增加 |
| 相移步数 | 3/4/8步 | 步数越多,抗噪性越好,但采集时间增加 |
| 投影仪-相机基线 | 100-300mm | 基线越长,高度分辨率越高,但遮挡越严重 |
| 标定重投影误差 | <0.1像素 | 直接决定三维坐标的绝对精度 |
实战场景:精密PCB焊点高度测量
某电子制造企业需对BGA封装芯片的焊点高度进行100%在线检测,要求高度测量重复性≤±5μm。采用DLP投影仪(分辨率1280×720)与500万像素工业相机组成结构光系统,基线距离150mm,工作距离200mm。使用Halcon标定流程后,重投影误差为0.08像素。投影4步相移光栅(频率分别为16、32、64周期),采集时间约120ms。通过多频外差法展开相位,重建焊点表面点云。实际测试表明,对标准陶瓷量块(高度1.000mm)的测量误差为+3.2μm,重复性(3σ)为4.1μm,满足产线要求。但发现当焊点表面反光强烈时,局部相位解算出现跳变,通过增加偏振片和调整投影亮度后,缺陷率从2.3%降至0.4%。
set_framegrabber_param设置相机曝光时间与增益,但更有效的方式是使用窄带滤光片匹配投影仪波长。此外,投影仪散焦会导致相位误差,需在标定时将投影仪光圈调至最佳焦深。
2.2 激光三角测量:光条中心提取与轮廓重建
核心原理
激光三角法利用激光器发射一条或多条激光线(或点)照射物体表面,激光在物体表面发生漫反射,相机以一定角度(通常30°-60°)拍摄激光光条。物体高度变化导致光条在相机图像中的位置发生横向位移,位移量与高度变化呈几何三角关系。Halcon中,核心步骤是精确提取光条中心线(亚像素精度),再通过标定矩阵将像素坐标转换为世界坐标。
操作流程与关键算子
* 光条图像采集
grab_image (LaserImage, AcqHandle)
* 提取光条中心(亚像素)
lines_gauss (LaserImage, Lines, 1.5, 5, 'dark', 'true')
* 将光条点转换为世界坐标(需预先标定)
contour_to_world_plane (Lines, WorldContours, CameraParam, Pose, 'ml')
* 生成轮廓点云
get_contour_xld (WorldContours, X, Y)
* 创建3D对象模型
gen_object_model_3d_from_points (X, Y, Z, ObjectModel3D)
光条中心提取的精度直接决定测量分辨率。Halcon的lines_gauss算子基于高斯核的尺度空间方法,能够抑制噪声并实现亚像素定位。对于强反光表面(如金属拉丝),可结合threshold预处理或使用多线激光融合。
案例拆解:锂电池极片涂布厚度在线测量
锂电池极片涂布厚度一致性直接影响电池容量与安全。某厂商采用激光三角传感器(点激光,采样频率10kHz)配合振镜扫描,对宽度500mm的极片进行横向扫描。Halcon负责光条中心提取与坐标转换。初始测量数据显示厚度波动达±8μm,超出工艺规格(±5μm)。分析发现,极片边缘存在毛刺导致激光散射,光条中心提取偏移。解决方案:在lines_gauss前增加形态学开运算去除毛刺干扰,并将高斯尺度参数从1.5调整至2.0。优化后,测量波动降至±3μm,且与离线接触式千分尺对比,偏差≤2μm。该案例表明,激光三角测量的精度不仅取决于硬件,更依赖于图像处理算法的鲁棒性。
2.3 立体视觉:视差计算与深度恢复
核心原理
立体视觉模拟人眼双目感知,通过两个(或多个)相机从不同视角拍摄同一场景,利用图像匹配算法找到对应点,计算视差(disparity),再根据三角测量原理恢复深度。Halcon提供完整的双目立体视觉流程,包括极线校正、视差计算、深度图生成与点云重建。该方法无需主动光源,适合室外或大视野场景,但对纹理贫乏区域(如白色墙面)匹配困难。
判断方法与参数选择
- 极线校正:使用
calibrate_cameras和gen_binocular_rectification_map生成校正映射,使左右图像极线水平对齐,将二维搜索降为一维。 - 视差范围设定:根据工作距离与基线长度估算最小/最大视差。Halcon的
binocular_disparity算子支持设置MinDisparity和MaxDisparity,范围过大会增加计算量并引入误匹配。 - 匹配代价与聚合:选择SAD、NCC或Census变换作为匹配代价,Halcon默认使用改进的Semi-Global Matching (SGM)算法,在精度与速度间取得平衡。
- 后处理:通过
disparity_to_point_cloud将视差图转换为点云,并使用中值滤波或一致性检查剔除误匹配点。
| 参数名称 | 推荐范围 | 说明 |
|---|---|---|
| 相机基线 | 50-500mm | 基线越大,深度分辨率越高,但遮挡区域增大 |
| 视差搜索范围 | 10-200像素 | 需根据实际场景标定后确定 |
| SGM惩罚项P1/P2 | P1=8, P2=32 | P2越大,深度图越平滑,但细节丢失 |
| 纹理阈值 | 5-20 | 低于阈值的区域视为弱纹理,不参与匹配 |
实战场景:大型铸件毛坯尺寸检测
某铸造厂需对尺寸约1m×0.8m的发动机缸体毛坯进行快速三维扫描,精度要求±0.5mm。采用两台1200万像素工业相机,基线400mm,工作距离1.5m。Halcon标定后重投影误差0.12像素。由于铸件表面为灰色喷砂状态,纹理适中,SGM算法匹配效果良好。但铸件内腔区域光照不足,视差图出现空洞。解决方案:增加辅助LED光源,并采用多视角扫描(4个视角)后通过object_model_3d_to_mesh进行拼接。最终测量结果与三坐标测量机对比,最大偏差0.38mm,满足出厂检验要求。该案例验证了立体视觉在中大尺寸、中等精度场景下的工程可行性。
preprocess_image进行直方图均衡化或对比度归一化,以增强匹配鲁棒性。此外,对于反光表面(如未加工金属),可喷涂显影剂或使用偏振光源。
2.4 3D模型表示:点云、深度图与三角网格
核心原理与数据结构
Halcon通过统一的ObjectModel3D句柄管理三维数据,但底层数据组织方式不同,直接影响处理效率与算法选择。
- 点云(Point Cloud):无序的XYZ坐标集合,可附加法向量、颜色、灰度等属性。Halcon中通过
gen_object_model_3d_from_points创建,适合散乱点处理(如ICP配准、表面拟合)。 - 深度图(Depth Map):规则网格存储的Z值图像,每个像素对应一个空间点的深度。深度图与2D图像共享坐标系,可直接使用图像处理算子(如滤波、边缘提取)加速处理。Halcon通过
xyz_to_depth_map或disparity_to_depth生成。 - 三角网格(Triangular Mesh):由顶点和面片(三角形)构成,包含拓扑连接关系。Halcon通过
object_model_3d_to_mesh或triangulate_object_model_3d生成,适合表面测量、体积计算和3D打印。
数据转换与选择策略
* 点云转深度图(需指定相机参数)
xyz_to_depth_map (ObjectModel3D, CameraParam, Width, Height, DepthMap)
* 深度图转点云
depth_map_to_xyz (DepthMap, CameraParam, X, Y, Z)
* 点云三角化
triangulate_object_model_3d (ObjectModel3D, 'greedy', MeshModel)
* 网格简化
reduce_object_model_3d (MeshModel, 'preserve_structure', 0.5, ReducedMesh)
| 表示方式 | 内存占用 | 处理速度 | 适用场景 |
|---|---|---|---|
| 点云 | 高(每点12-24字节) | 慢(需邻域搜索) | 配准、自由曲面测量 |
| 深度图 | 低(每像素2-4字节) | 快(图像算子直接处理) | 实时检测、表面缺陷分析 |
| 三角网格 | 中(顶点+索引) | 中(拓扑遍历) | 体积计算、CAD比较 |
案例拆解:汽车冲压件回弹检测中的模型选择
某汽车零部件厂需检测冲压件回弹量,精度要求±0.1mm。初始方案采用结构光获取点云(约200万点),直接与CAD数模进行ICP配准。但点云数据量大,配准耗时达8秒,无法满足节拍(5秒/件)。优化方案:先将点云转换为深度图(分辨率1024×768),利用Halcon的xyz_to_depth_map将Z值映射为灰度,然后通过surface_normals计算法向量,最后使用compare_variation_model与标准深度图进行逐像素比较。处理时间降至1.2秒,且回弹量检测精度达到±0.08mm。该案例说明,在满足精度要求的前提下,深度图的数据结构更适合高速在线检测。