《Halcon三维测量与缺陷检测教程》

三维视觉基础:三维坐标系、相机模型、深度图、点云、视差图的基本概念与数据格式

三维视觉是Halcon在精密测量、机器人引导、缺陷检测等工业场景中发挥核心价值的基础。与传统的二维图像处理不同,三维视觉处理的对象是带有深度信息的空间数据。理解三维坐标系、相机成像模型以及深度图、点云、视差图等数据形式,是后续进行三维标定、点云配准、尺寸测量和缺陷检测的前提。本章将系统梳理这些基础概念,并重点解析它们在Halcon中的具体数据格式与转换逻辑。

三维视觉数据体系与坐标系关系 世界坐标系 (Xw, Yw, Zw) 描述物体在物理空间 的绝对位置 单位:mm / m 外参 相机坐标系 (Xc, Yc, Zc) 光心为原点 Z轴指向物体方向 单位:mm 内参 图像坐标系 (u, v) 像素坐标 原点在左上角 单位:pixel 深度图 (Depth Map) 单通道灰度图,像素值=距离 Halcon类型:real / uint2 访问:get_grayval 特点:与2D图像同分辨率 适合快速阈值分割 点云 (Point Cloud) 三维坐标点集合 (X,Y,Z) Halcon类型:3D Object Model 访问:get_object_model_3d_params 特点:无序点集,可含法向量 适合精确测量与配准 视差图 (Disparity Map) 双目匹配的像素偏移量 Halcon类型:real / int1 访问:binocular_disparity 特点:通过视差计算深度 Z = f·B / d

三维坐标系与相机成像模型

在三维视觉中,坐标系是描述空间点位置的基准。Halcon中涉及四个核心坐标系:世界坐标系(描述物体在物理空间中的绝对位置)、相机坐标系(以相机光心为原点,Z轴垂直于成像平面指向场景)、图像坐标系(以像素为单位的二维坐标,原点在图像左上角)以及归一化平面坐标系(焦距归一化后的理想成像平面)。这四个坐标系通过刚体变换(外参)和透视投影(内参)相互关联。

相机成像模型通常采用针孔模型。空间点P(Xw, Yw, Zw)首先通过外参矩阵(旋转矩阵R和平移向量t)变换到相机坐标系,再通过内参矩阵(焦距fx、fy,主点cx、cy)投影到像素平面。Halcon中,标定算子camera_calibration可以同时求解内参和外参,标定结果存储在CalibData句柄中。对于畸变镜头,Halcon还支持多项式畸变模型和除法畸变模型,常用算子change_radial_distortion_cam_par进行畸变校正。

核心公式:像素坐标(u,v)与相机坐标(Xc,Yc,Zc)的关系为:
u = fx * Xc / Zc + cx
v = fy * Yc / Zc + cy
其中fx、fy为归一化焦距(单位:像素),cx、cy为主点坐标。Halcon中通过cam_par_to_cam_mat将相机参数转换为3x3内参矩阵。

深度图、点云与视差图的数据格式

深度图、点云和视差图是三维数据的三种主要载体,它们在Halcon中的存储方式和处理逻辑差异显著。

数据形式Halcon类型数据内容获取方式典型应用
深度图image (real/uint2)每个像素存储该点到相机的距离Z3D传感器直接输出或视差图转换背景分割、快速高度测量
点云3D Object Model无序三维点集,含X,Y,Z坐标及可选法向量、灰度深度图反投影或激光扫描精确测量、表面缺陷检测、配准
视差图image (real/int1)左右相机对应像素的水平偏移量d双目立体匹配算法深度计算、障碍物检测

深度图与点云的转换是Halcon中的高频操作。深度图通过相机内参反投影即可生成点云,算子xyz_to_object_model_3d接受三个等尺寸的X、Y、Z图像(或单张深度图加相机参数)生成3D模型。反之,点云也可以通过object_model_3d_to_xyz投影为深度图。视差图与深度图的转换关系为:Z = f·B/d,其中f为焦距(像素),B为基线距离(mm),d为视差值。Halcon中binocular_disparity系列算子(如binocular_disparity_msgr)可直接输出视差图,再通过disparity_to_depth转换为深度图。

案例拆解:从深度图到点云的缺陷检测流程

以手机中框平面度检测为例,说明三种数据形式的实际配合。项目约束:产线节拍2秒/件,检测精度要求±0.05mm,传感器为结构光3D相机,输出深度图(分辨率1280×1024,uint2格式,单位0.01mm)。

  1. 数据读取与预处理:使用read_image读取深度图,通过scale_image将灰度值转换为实际毫米值(乘以0.01)。此时深度图存在噪声和缺失点,使用median_image进行中值滤波,interpolate_missing_area填补空洞。
  2. 生成点云:调用xyz_to_object_model_3d,输入深度图和相机内参(通过read_cam_par读取标定文件),生成3D对象模型。使用connection_object_model_3d分割连通域,去除背景点云。
  3. 平面拟合与测量:使用fit_primitives_object_model_3d拟合中框主平面,获取平面方程。计算每个点到拟合平面的距离,得到平面度偏差图。通过threshold提取偏差超过±0.05mm的区域,即为缺陷候选区。
  4. 结果输出:将缺陷区域映射回2D图像坐标,通过get_object_model_3d_params获取缺陷点的三维坐标,用于机器人引导打磨。
经验提醒:深度图转点云时,务必确认深度图的单位。Halcon中xyz_to_object_model_3d默认输入为米,若深度图单位为毫米,需先除以1000。否则生成的模型尺度错误,导致测量结果偏差巨大。

常见误区与总结复盘

初学者在处理三维数据时容易陷入以下误区:误区一:混淆深度图与点云。深度图是规则网格,每个像素必有值(可能为0表示无效),适合快速图像处理;点云是无序点集,适合几何计算。Halcon中两者转换频繁,但需注意深度图丢失了X、Y方向的空间分辨率信息,仅保留Z值。误区二:忽视坐标系变换。点云处理时,必须明确当前点云处于相机坐标系还是世界坐标系。Halcon中trans_object_model_3d可进行刚体变换,但需先通过get_object_model_3d_params检查模型的参考坐标系。误区三:视差图直接当深度图用。视差图与深度呈反比关系,且存在无效视差区域(遮挡、低纹理),需通过disparity_to_depth转换并设置有效掩码。

风险提示:在Halcon中,深度图通常以real类型存储以保留亚像素精度,但输出为uint2时可能丢失小数部分。若测量精度要求高于0.1mm,建议全程使用real类型,并在写入文件时使用write_image指定格式为'tiff'或'hobj',避免精度损失。