3. 3D数据采集原理与点云生成

3D视觉系统的第一步不是“得到点云”,而是把物理空间中的距离信息转换成可计算的数字量。不同测距原理决定了原始数据的形态:有的设备直接输出每个像素的距离值,有的输出相位差或视差,有的输出带强度信息的扫描角度序列。理解这些差异,才能正确完成从原始数据到点云或深度图的转换,并判断哪些参数会直接影响测量结果。

三种主流测距原理的物理基础

三角测量基于几何相似关系。激光器与相机之间保持固定基线 b,激光在被测表面形成光斑,相机从另一角度观察光斑位置。若光斑在相机像面上的偏移为 x,镜头焦距为 f,则距离 Z 可近似表示为 Z = b·f / x。三角测量在近距离(几十毫米到几米)内精度高,但对基线、焦距和光斑中心提取精度非常敏感;距离越远,同样的像面偏移对应的距离变化越大,精度随之下降。

飞行时间法(ToF)通过测量光脉冲或调制光往返时间计算距离。脉冲式ToF直接测量发射与接收的时间差 Δt,距离 Z = c·Δt / 2;连续波调制ToF则测量发射光与接收光之间的相位差 φ,距离 Z = c·φ / (4πfm),其中 fm 为调制频率。ToF适合中远距离测量,但相位法存在2π模糊问题,需要多频解模糊;同时环境光、反射率和多路径效应会引入误差。

结构光可视为主动三角测量的一种扩展:投影器投射已知图案(条纹、格雷码、散斑),相机拍摄被物体表面调制后的图案,通过解码图案的相位或编码值获得每个像素的对应关系,再结合标定参数计算三维坐标。结构光在近距离可获得高密度点云,但对高反光、深色或透明表面较敏感,且对环境光有一定要求。

三种测距原理与原始数据到点云的转换关系 三角测量 基线 b 激光束 相机视线 被测点 Z = b·f / x 近距离精度高,远距离下降 原始数据:光斑像面偏移 x 飞行时间 ToF 发射 接收 发射光 反射光 Z = c·Δt / 2 或 Z = c·φ / (4πf) 原始数据:时间差 Δt 或相位差 φ 结构光 投影器 相机 投射图案 变形图案 解码相位/编码 → 对应关系 原始数据:相位图/编码图 SICK设备原始数据 → 深度图 → 点云 的转换链 原始数据 距离值/相位/视差 + 强度 + 像素坐标 标定参数 内参 fx,fy,cx,cy 外参 R,t / 基线 b 深度图 Z(u,v) 逐像素距离 无效值/置信度标记 点云 X,Y,Z + 强度 有序/无序点集 反投影 X=(u-cx)Z/fx Y=(v-cy)Z/fy 关键参数影响:基线 b ↑ → 三角测量精度 ↑;调制频率 f ↑ → ToF 精度 ↑ 但量程 ↓;曝光/增益 → 影响强度与无效点比例 标定误差、温度漂移、表面反射率会直接传递到 Z 值,进而影响点云坐标

从原始数据到深度图:反投影与坐标计算

无论采用哪种原理,最终都要落到“每个像素对应一个距离值”的深度图。以针孔相机模型为例,已知像素坐标 (u, v)、深度 Z 和内参矩阵,反投影得到相机坐标系下的三维点:

X = (u - cx) * Z / fx
Y = (v - cy) * Z / fy
Z = Z

其中 fx、fy 为焦距(像素单位),cx、cy 为主点。对于SICK的3D相机或激光扫描仪,设备通常已经完成内部标定,输出的是经过校正的距离图或深度图;但若使用原始相位图或视差图,则需要先按设备文档完成相位展开、视差转深度,再执行上述反投影。若设备输出的是极坐标形式的扫描数据(角度 + 距离),则需先转换为笛卡尔坐标:X = r·cosθ,Y = r·sinθ,再结合扫描平面位置得到Z。

关键参数如何影响点云质量

参数影响可以从“测距环节”和“成像环节”两条线理解。测距环节中,三角测量的基线越长,相同距离下视差越大,精度越高,但遮挡和盲区也会增加;ToF的调制频率越高,相位分辨率越高,但2π模糊距离越短,量程受限;结构光的条纹周期越细,空间分辨率越高,但相位展开难度越大,容易在台阶或深孔处出错。

成像环节中,曝光时间决定接收光量:曝光不足会导致强度低、无效点增多;曝光过度则使高反光区域饱和,深度值丢失。增益类似,但会同时放大噪声。此外,SICK设备常提供“置信度”或“质量”通道,用于标记低反射、多路径或饱和像素,这些像素在生成点云时应被剔除或标记,而不是直接参与后续拟合。

实际工程中,建议先检查设备输出的深度图是否存在大面积无效区域,再检查点云中是否有明显的离群点或“飞点”。若无效点集中在高反光或深色区域,优先调整曝光和多帧融合;若点云整体出现周期性波纹,则可能是标定参数或相位解算问题。

一个可复现的转换示例

假设某SICK 3D相机输出一帧深度图,分辨率 640×480,内参 fx = fy = 600,cx = 320,cy = 240。取像素 (400, 300),深度 Z = 0.85 m。按反投影公式:

X = (400 - 320) * 0.85 / 600 = 0.1133 m
Y = (300 - 240) * 0.85 / 600 = 0.0850 m
Z = 0.85 m

该点即相机坐标系下的三维坐标。若设备同时输出强度值 120(8位),则点云中该点可携带 (0.1133, 0.0850, 0.85, 120)。对整幅深度图逐像素执行该计算,即可得到有序点云;若剔除无效值,则得到无序点云。注意:上述数值为教学示例,实际结果取决于设备标定和现场条件。

转换过程中的常见问题与判断依据

  • 深度图边缘出现“黑洞”:通常是遮挡或阴影导致,三角测量和结构光尤为明显。判断方法是观察无效区域是否沿物体轮廓分布。
  • 点云整体偏移或倾斜:优先检查外参标定(相机与机器人/世界坐标系的变换)是否正确,而非内参。
  • 同一平面出现波浪状起伏:可能是ToF多路径效应或结构光相位误差,可尝试改变测量距离或使用多频解算。
  • 高反光表面深度跳变:强度饱和导致,应降低曝光或使用偏振片,并在点云生成时剔除置信度低的点。

理解原始数据形态、转换公式和参数影响,是后续点云滤波、配准和测量的基础。只有先保证深度图与点云在坐标和尺度上正确,后续的3D定位与测量才有意义。