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π模糊问题,需要多频解模糊;同时环境光、反射率和多路径效应会引入误差。
结构光可视为主动三角测量的一种扩展:投影器投射已知图案(条纹、格雷码、散斑),相机拍摄被物体表面调制后的图案,通过解码图案的相位或编码值获得每个像素的对应关系,再结合标定参数计算三维坐标。结构光在近距离可获得高密度点云,但对高反光、深色或透明表面较敏感,且对环境光有一定要求。
从原始数据到深度图:反投影与坐标计算
无论采用哪种原理,最终都要落到“每个像素对应一个距离值”的深度图。以针孔相机模型为例,已知像素坐标 (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定位与测量才有意义。