2. 3D视觉基础
在进入四相机线扫系统实战之前,必须建立对3D视觉核心数据结构的统一认知。线扫3D相机输出的原始数据并非直接是三维坐标,而是经过一系列转换的中间产物。本章将厘清视差图、深度图与点云数据三者的定义、数学关系及工程应用场景。
2.1 三种数据结构的核心定义
| 数据类型 | 维度 | 存储内容 | 坐标系 | 典型文件格式 |
|---|---|---|---|---|
| 视差图 (Disparity Map) | 2D (H×W) | 左右图像对应像素的水平偏移量 (像素) | 图像像素坐标系 (u, v) | PNG, TIFF (单通道16bit) |
| 深度图 (Depth Map) | 2D (H×W) | 每个像素到相机光心平面的垂直距离 (mm) | 图像像素坐标系 (u, v) | PNG, TIFF, EXR |
| 点云 (Point Cloud) | 3D (N×3) | 三维空间坐标 (X, Y, Z) 及可选属性 (RGB, 强度) | 世界坐标系 / 相机坐标系 | PLY, PCD, LAS, XYZ |
工程要点:线扫3D相机通常直接输出深度图或点云,视差图多出现在双目立体视觉算法中间步骤。但在多相机标定与拼接场景中,理解视差到深度的转换原理有助于诊断Z轴精度问题。
2.2 三者的数学转换关系
三者的转换链路遵循严格的几何投影模型。以理想的双目线扫系统为例,转换流程如下:
- 视差 → 深度: 通过三角测量原理,深度 Z 与视差 d 成反比:
Z = (f × B) / d
其中 f 为焦距(像素单位),B 为基线长度(mm),d 为视差值(像素)。 - 深度 → 点云: 利用相机内参矩阵 K,将深度图反投影到三维空间:
X = (u - cx) × Z / fx
Y = (v - cy) × Z / fy
其中 (cx, cy) 为主点坐标,fx, fy 为焦距分量。 - 点云 → 深度图: 通过正向投影(栅格化),将三维点映射回图像平面,插值生成规则网格深度图。
常见误区:深度图存储的是“垂直距离”而非“欧氏距离”。对于线扫系统,深度图每个像素值代表物体表面到激光平面的垂直高度,而非到相机光心的直线距离。在计算抓取位姿时,必须使用点云的欧氏距离。
2.3 数据流与坐标系变换
下图展示了从原始激光条纹提取到最终点云生成的完整数据流,以及各阶段对应的坐标系:
2.4 工程应用场景对比
| 应用场景 | 推荐数据格式 | 原因 |
|---|---|---|
| 抓取位姿计算 | 点云 (PLY/PCD) | 直接提供三维坐标,支持ICP配准、平面拟合、抓取点计算 |
| 缺陷检测(高度测量) | 深度图 (TIFF/EXR) | 规则网格结构,便于卷积神经网络处理,内存占用小 |
| 多相机拼接 | 点云 + 深度图 | 点云用于全局配准,深度图用于重叠区域融合权重计算 |
| 实时可视化 | 深度图 | 可直接映射为伪彩色图,渲染帧率高 |
| 标定与校准 | 视差图 | 便于诊断立体匹配误差、亚像素精度分析 |
2.5 四相机线扫系统中的数据组织
在四相机线扫系统中,每个相机独立生成深度图,再通过标定参数统一变换到世界坐标系下拼接为完整点云。数据组织遵循以下原则:
- 独立采集: 四个相机各自采集激光条纹,生成独立的深度图(分辨率通常为 2048×4096 或更高)。
- 统一坐标系: 通过多相机标定,将四个深度图映射到同一个世界坐标系(通常以传送带平面为 Z=0)。
- 拼接融合: 在重叠区域使用加权平均或中值滤波,消除接缝处的Z轴跳变。
- 最终输出: 输出为一张完整的深度图或一个合并后的点云文件,供上位机视觉引导算法使用。
实战建议: 在四相机系统中,建议保留每个相机的原始深度图作为中间结果。当拼接点云出现异常时,可以单独检查每个相机的深度图质量,快速定位是哪个相机标定偏差或激光条纹提取异常。