三维视觉基础:三维坐标系、相机模型、深度图、点云、视差图的基本概念与数据格式
三维视觉是Halcon在精密测量、机器人引导、缺陷检测等工业场景中发挥核心价值的基础。与传统的二维图像处理不同,三维视觉处理的对象是带有深度信息的空间数据。理解三维坐标系、相机成像模型以及深度图、点云、视差图等数据形式,是后续进行三维标定、点云配准、尺寸测量和缺陷检测的前提。本章将系统梳理这些基础概念,并重点解析它们在Halcon中的具体数据格式与转换逻辑。
三维坐标系与相机成像模型
在三维视觉中,坐标系是描述空间点位置的基准。Halcon中涉及四个核心坐标系:世界坐标系(描述物体在物理空间中的绝对位置)、相机坐标系(以相机光心为原点,Z轴垂直于成像平面指向场景)、图像坐标系(以像素为单位的二维坐标,原点在图像左上角)以及归一化平面坐标系(焦距归一化后的理想成像平面)。这四个坐标系通过刚体变换(外参)和透视投影(内参)相互关联。
相机成像模型通常采用针孔模型。空间点P(Xw, Yw, Zw)首先通过外参矩阵(旋转矩阵R和平移向量t)变换到相机坐标系,再通过内参矩阵(焦距fx、fy,主点cx、cy)投影到像素平面。Halcon中,标定算子camera_calibration可以同时求解内参和外参,标定结果存储在CalibData句柄中。对于畸变镜头,Halcon还支持多项式畸变模型和除法畸变模型,常用算子change_radial_distortion_cam_par进行畸变校正。
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) | 每个像素存储该点到相机的距离Z | 3D传感器直接输出或视差图转换 | 背景分割、快速高度测量 |
| 点云 | 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)。
- 数据读取与预处理:使用
read_image读取深度图,通过scale_image将灰度值转换为实际毫米值(乘以0.01)。此时深度图存在噪声和缺失点,使用median_image进行中值滤波,interpolate_missing_area填补空洞。 - 生成点云:调用
xyz_to_object_model_3d,输入深度图和相机内参(通过read_cam_par读取标定文件),生成3D对象模型。使用connection_object_model_3d分割连通域,去除背景点云。 - 平面拟合与测量:使用
fit_primitives_object_model_3d拟合中框主平面,获取平面方程。计算每个点到拟合平面的距离,得到平面度偏差图。通过threshold提取偏差超过±0.05mm的区域,即为缺陷候选区。 - 结果输出:将缺陷区域映射回2D图像坐标,通过
get_object_model_3d_params获取缺陷点的三维坐标,用于机器人引导打磨。
xyz_to_object_model_3d默认输入为米,若深度图单位为毫米,需先除以1000。否则生成的模型尺度错误,导致测量结果偏差巨大。
常见误区与总结复盘
初学者在处理三维数据时容易陷入以下误区:误区一:混淆深度图与点云。深度图是规则网格,每个像素必有值(可能为0表示无效),适合快速图像处理;点云是无序点集,适合几何计算。Halcon中两者转换频繁,但需注意深度图丢失了X、Y方向的空间分辨率信息,仅保留Z值。误区二:忽视坐标系变换。点云处理时,必须明确当前点云处于相机坐标系还是世界坐标系。Halcon中trans_object_model_3d可进行刚体变换,但需先通过get_object_model_3d_params检查模型的参考坐标系。误区三:视差图直接当深度图用。视差图与深度呈反比关系,且存在无效视差区域(遮挡、低纹理),需通过disparity_to_depth转换并设置有效掩码。
write_image指定格式为'tiff'或'hobj',避免精度损失。