1. 双目视觉系统基础认知
双目相机系统模仿人类双眼视觉原理,通过两个摄像头从不同角度采集同一场景的图像,利用视差计算物体深度信息。在工业检测、机器人导航、三维测量等领域具有广泛应用价值。Halcon作为机器视觉领域的标杆软件,提供了完整的双目视觉处理工具链。
典型的双目系统硬件构成包括:
- 两个工业相机(通常选用同型号保证参数一致)
- 精密机械支架(确保双相机相对位置固定)
- 标定板(常用棋盘格或圆点阵列图案)
- 计算主机(运行Halcon处理程序)
系统工作时需先进行相机标定,获取以下关键参数:
- 相机内参(焦距、主点坐标、畸变系数等)
- 相机外参(双相机间的旋转矩阵和平移向量)
- 立体校正参数(用于图像对的极线校正)
实际项目中我们发现,使用厂商提供的标定板尺寸参数不准确会导致标定误差放大。建议自行用游标卡尺精确测量标定板特征点物理间距,误差控制在±0.01mm内。
2. Halcon标定流程详解
2.1 标定准备阶段
在HDevelop中创建标定数据模型:
halcon复制create_calib_data ('calibration_object', 2, 1, CalibDataID)
参数说明:'calibration_object'表示标定对象类型,2代表相机数量,1代表标定板数量。实际项目中如果使用多块不同位置的标定板,需要调整第三个参数。
设置标定板参数(以7x7棋盘格为例):
halcon复制set_calib_data_calib_object (CalibDataID, 0, 'plate', [], [], [], [], [], 6, 6, 0.0125, 0.0125, [])
关键参数解析:
- 6,6 表示内部角点数量(实际格子数减一)
- 0.0125 是每个格子的物理尺寸(单位:米)
- 最后一个空数组保留用于圆点标定板的直径参数
2.2 图像采集与特征提取
采集15-20组不同位姿的标定板图像(建议覆盖整个视场):
halcon复制for Index := 1 to 15 by 1
grab_image (Image, AcqHandle)
find_calib_object (Image, CalibDataID, 0, 0, Index, [], [])
endfor
采集技巧:标定板应出现在图像的不同区域,倾斜角度建议在30°-60°之间。我们实践中发现,包含至少3组大角度倾斜(>45°)的图像能显著提升标定精度。
2.3 标定计算与验证
执行标定计算:
halcon复制calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CameraParam)
验证标定质量的关键指标:
- 重投影误差(建议<0.1像素)
- 参数协方差矩阵(反映参数估计的可靠性)
- 实际测量验证(使用已知尺寸的物体进行反测)
常见问题处理:
- 误差过大时检查标定板图像是否有模糊、过曝
- 外参不稳定通常是因为标定板位姿变化不够丰富
- 内参异常可能是镜头焦距设置错误导致
3. 三维点云生成技术实现
3.1 立体匹配算法选择
Halcon提供多种立体匹配方法:
halcon复制create_stereo_model ('surface_pairwise', [], [], StereoModelID)
set_stereo_model_param (StereoModelID, 'method', 'mgc')
方法对比:
- 'mgc'(Moravec-Gruen改进算法):适合高纹理场景
- 'sgbm'(半全局匹配):平衡精度与速度
- 'elas'(高效大尺度匹配):适合大视差场景
关键参数调优经验:
- 视差范围设置应略大于实际场景最大视差
- 纹理弱的区域可启用'interpolation'参数
- 工业场景建议开启'subpixel'提升精度
3.2 点云生成与后处理
生成视差图转点云:
halcon复制gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, 1, 'bilinear', [], [])
disparity_to_point_cloud (Disparity, RectImage1, StereoModelID, 3DModelID)
点云优化技巧:
- 离群点滤除(使用radius_outlier_removal)
- 平滑处理(建议双边滤波保留边缘)
- 法向量计算(用于后续曲面重建)
halcon复制select_points_object_model_3d (3DModelID, 'point_coord_z', 0, 0.5, ObjectModel3DOut)
smooth_object_model_3d (ObjectModel3DOut, 'mls', 0.005, SmoothedModel)
3.3 坐标交互获取实现
实现鼠标点击获取3D坐标:
halcon复制dev_set_part (0, 0, Height-1, Width-1)
dev_display (RectImage1)
set_mposition (WindowHandle, Row, Column, Button)
get_point_cloud_coordinates (3DModelID, Row, Column, X, Y, Z)
工程经验:
- 先进行图像坐标到校正后坐标的转换
- 对连续点击点可生成测量线距/面距
- 建议添加坐标显示UI提升交互体验
4. 工业场景应用案例
4.1 零件尺寸在线检测
某汽车零部件生产线采用以下流程:
- 双相机同步采集齿轮图像
- 实时生成齿面点云
- 拟合齿廓曲线计算模数
- 与CAD模型比对输出偏差报告
关键参数:
- 点云密度:200点/mm²
- 重复测量精度:±0.02mm
- 单件检测时间:<1.5s
4.2 机器人引导抓取
拆垛应用中的技术要点:
- 点云分割识别堆叠物体
- 计算最优抓取位姿
- 手眼标定转换坐标系
- 防碰撞路径规划
halcon复制create_surface_model ('object.sfm', SurfaceModelID)
find_surface_model (SurfaceModelID, 3DModelID, 0.05, 0.8, 0.1, 'true', [], [], Pose, Score)
4.3 三维缺陷检测
铸件表面缺陷检测流程:
- 生成高精度点云(0.01mm分辨率)
- 与标准模型配准(ICP算法)
- 距离场计算突出凹陷区域
- 形态学分析缺陷特征
我们发现点云法向量分析对微裂纹检测特别有效,配合0.5mm直径的球形卷积核能检出0.1mm深的表面缺陷。
5. 性能优化实战技巧
5.1 加速计算方案
- ROI区域处理:
halcon复制reduce_domain (Image, Region, ImageReduced)
- 多分辨率处理:
halcon复制zoom_image_factor (Image, ImageZoomed, 0.5, 0.5, 'constant')
- GPU加速:
halcon复制set_system ('use_gpu', 'true')
实测数据对比(处理640x480图像):
| 方法 | 标定时间 | 匹配时间 | 内存占用 |
|---|---|---|---|
| CPU全图 | 120ms | 280ms | 850MB |
| GPU+ROI | 45ms | 95ms | 320MB |
5.2 精度提升方法
- 温度补偿:每2小时重新标定一次
- 动态曝光控制:避免局部过曝
- 多帧融合:3-5帧平均降噪
- 环境光隔离:使用850nm红外光源
实验室条件下可达指标:
- 平面测量重复精度:±0.015mm
- 深度测量误差:<0.1%@1m
- 点云密度:500点/cm³
5.3 异常处理机制
建立健壮性检查流程:
- 图像质量检测(清晰度、亮度梯度)
- 标定状态监控(重投影误差阈值)
- 点云完整性验证(有效点比例)
- 结果合理性判断(尺寸范围约束)
典型错误处理代码:
halcon复制try
disparity_image_to_xyz (Disparity, RectImage1, StereoModelID, X, Y, Z)
catch (Exception)
send_alarm ('点云生成失败,检查视差图有效性')
return
endtry
在汽车门板检测项目中,这套机制将系统误检率从5.3%降低到0.8%,同时避免了90%以上的意外停机。
