别再混淆了!一文讲透Halcon中激光三角测量的‘视差图’与双目视觉的差异
2026/4/17 17:41:38 网站建设 项目流程

激光三角测量与双目视觉中的视差图:本质差异与Halcon实战解析

在工业3D视觉领域,激光三角测量和双目立体视觉是两种广泛应用的技术,它们都能生成被称为"视差图"的数据输出。然而,这两种技术产生的视差图在物理意义、数据结构和应用方式上存在根本性差异。本文将深入剖析这两种视差图的本质区别,并重点解读Halcon中Sheet-of-Light模块的视差数据特性。

1. 技术原理的本质分野

激光三角测量和双目立体视觉虽然都涉及三维信息获取,但其工作原理存在根本差异:

激光三角测量系统的核心组件通常包括:

  • 线激光发生器:发射特定波长的激光平面
  • 工业相机:以一定角度(通常30°-60°)拍摄激光条纹
  • 运动平台:实现被测物体的扫描移动

当激光平面投射到物体表面时,表面高度变化会导致激光条纹在相机成像平面发生位移。这个位移量与高度变化呈三角关系,通过标定参数可计算出精确的三维坐标。

双目立体视觉系统则采用双相机模拟人眼视差:

  • 两个同步相机从不同视角拍摄同一场景
  • 通过特征匹配计算对应点的水平位移(视差)
  • 根据基线距离和焦距换算深度信息

下表对比两种技术的关键特性:

特性激光三角测量双目立体视觉
工作原理主动式三角测距被动式立体匹配
数据维度单次获取一条轮廓线单次获取整个视场深度
测量精度亚微米级毫米级
适用场景高反光/复杂表面纹理丰富场景
视差图物理意义激光线中心的亚像素行坐标左右图像素匹配的灰度差异

2. Halcon中的视差图解析

Halcon的Sheet-of-Light模块通过get_sheet_of_light_result算子可输出多种数据类型,其中'disparity'结果常引起使用者困惑:

* 典型使用流程 create_sheet_of_light_model(ProfileRegion, ['min_gray'], [80], SheetOfLightHandle) measure_profile_sheet_of_light(ProfileImage, SheetOfLightHandle, Profile, GrayValues) get_sheet_of_light_result(Disparity, SheetOfLightHandle, 'disparity')

这里的Disparity图像存储的是激光条纹中心的亚像素行坐标,而非传统意义上的灰度差异。具体表现为:

  • 每个像素值表示对应列中激光线中心的精确行位置
  • 值为实数类型,可实现亚像素级测量精度
  • 未标定时仅表示相对位移,需配合image_points_to_world_plane转换为物理坐标
* 坐标转换关键代码 get_region_points(DisparityDomain, Rows, Columns) get_grayval(Disparity, Rows, Columns, Disparities) image_points_to_world_plane(CameraParameters, LocalCameraPose, Disparities, Columns+Column1, 1.0, X, Y)

3. 双目视觉视差图的本质

传统双目视觉的视差图反映的是左右图像素匹配的困难程度:

  • 每个像素值表示最佳匹配的搜索代价
  • 通常为整数类型,精度受限于图像分辨率
  • 需要额外的后处理转换为深度图

Halcon中双目视差的计算流程示例:

* 双目视差计算典型流程 create_stereo_model('least_squares', 0.3, 50, StereoModelID) find_stereo_correspondence(ImageLeft, ImageRight, Disparity, Score, StereoModelID)

这种视差图与激光三角测量的视差数据在以下方面存在差异:

  1. 数据内涵:匹配代价 vs 几何位置
  2. 精度等级:像素级 vs 亚像素级
  3. 应用方式:需代价聚合优化 vs 直接几何转换

4. 三维坐标计算的实现路径

激光三角测量通过视差数据计算三维坐标的过程涉及多个坐标系的转换:

  1. 图像坐标系:获取激光线的亚像素位置
  2. 相机坐标系:通过内参矩阵消除镜头畸变
  3. 世界坐标系:结合光平面位姿计算3D坐标

Halcon中的完整转换链:

* 完整的三维重建流程 create_sheet_of_light_model(ProfileRegion, ['min_gray','num_profiles'], [70,290], ModelID) set_sheet_of_light_param(ModelID, 'lightplane_pose', LightPlanePose) set_sheet_of_light_param(ModelID, 'movement_pose', MovementPose) apply_sheet_of_light_calibration(Disparity, ModelID) get_sheet_of_light_result(X, ModelID, 'x') get_sheet_of_light_result(Y, ModelID, 'y') get_sheet_of_light_result(Z, ModelID, 'z') xyz_to_object_model_3d(X, Y, Z, ObjectModel3D)

关键参数说明:

  • lightplane_pose:定义激光平面在世界坐标系中的位姿
  • movement_pose:描述物体运动引起的坐标变换
  • 校准模式:需选择'xyz'输出物理坐标而非像素位移

5. 工程实践中的常见误区

在实际项目应用中,开发者常遇到以下典型问题:

误区1:直接使用未标定的视差数据

注意:未经标定的视差图仅包含行坐标偏移量,不能直接反映物理尺寸。必须通过apply_sheet_of_light_calibration应用标定参数。

误区2:混淆视差图的数值范围

  • 激光三角视差:通常为100.0~300.0(浮点数,表示行坐标)
  • 双目视觉视差:通常为0~255(整数,表示匹配代价)

误区3:错误理解坐标系关系

  • 激光三角测量中的视差数据基于图像坐标系
  • 最终三维点云默认输出在世界坐标系
  • 运动平台引入的坐标变换需通过movement_pose补偿

优化建议

  1. 标定阶段使用高精度靶标,确保相机参数准确
  2. 光平面标定时采集多个位姿的数据点以提高拟合精度
  3. 实时应用中监控get_sheet_of_light_result返回的score值,过滤低质量测量点

通过深入理解两种视差图的本质差异,开发者可以更准确地选择适合特定应用场景的技术方案,并避免在数据处理流程中产生概念混淆。激光三角测量在工业检测领域的高精度优势,与双目视觉在大范围场景重建的灵活性,共同构成了现代3D视觉技术的丰富生态。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询