1. 2D与3D相机的本质差异:从成像原理说起
第一次接触3D相机时,我下意识认为它只是比普通相机多了一个"维度参数"。直到实际拆解了一台工业级3D相机后,才发现两者的差异远超想象。最根本的区别在于:2D相机记录的是光强信息(intensity),而3D相机获取的是空间坐标(point cloud)。
传统2D相机的成像链路可以简化为:
- 镜头聚焦光线到传感器
- 传感器将光信号转为电信号
- ISP芯片处理RAW数据输出RGB图像
而典型的结构光3D相机工作流程则是:
- 红外投影仪投射编码图案
- 相机捕捉物体表面的图案变形
- 通过三角测量计算深度值
- 生成包含XYZ坐标的点云数据
关键提示:3D相机输出的不是"图像",而是每个像素对应的三维坐标集合。这导致后续处理算法与2D完全不同,比如3D数据处理常用KD-Tree而非传统卷积神经网络。
2. 主流3D成像技术方案对比
2.1 结构光(Structured Light)
原理:通过投影特定图案(如格雷码),分析物体表面造成的图案畸变来计算深度。iPhone FaceID就是典型应用。
实测参数:
- 精度:0.1-1mm @1m
- 工作距离:0.3-3m
- 抗光干扰:弱(室外基本不可用)
2.2 双目视觉(Stereo Vision)
原理:模仿人眼视差,通过两个相机的图像匹配计算深度。大疆无人机常用此方案。
实测发现:
- 依赖纹理特征,纯色表面效果差
- 计算量大,需要专用ASIC芯片
- 基线距离越大精度越高(但体积也越大)
2.3 飞行时间(ToF)
原理:测量红外光脉冲的往返时间计算距离。微软Kinect v2采用此技术。
实验室数据:
- 帧率可达100fps
- 抗干扰能力优于结构光
- 存在多径干扰问题(边缘精度下降)
技术对比表:
| 特性 | 结构光 | 双目视觉 | ToF |
|---|---|---|---|
| 精度 | 亚毫米级 | 毫米级 | 厘米级 |
| 计算复杂度 | 中等 | 高 | 低 |
| 环境适应性 | 室内专用 | 依赖纹理 | 全天候 |
| 典型成本 | $200-$2000 | $100-$1000 | $500-$5000 |
3. 工业场景中的选型血泪史
去年为自动化产线选型3D相机时,我们踩过三个典型坑:
3.1 反光表面测量失效
尝试用结构光检测金属零件时,90%的点云数据丢失。解决方案:
- 改用蓝光激光(波长更短抗干扰)
- 表面喷哑光涂层(临时方案)
- 最终选用偏振ToF相机(成本x3但稳定)
3.2 动态物体鬼影
检测传送带上的包裹时,双目相机出现严重拖影。后发现:
- 全局快门是刚需(工业相机基本配置)
- 曝光时间需<1/1000s
- 补光亮度要足够(我们最终用了200W LED阵列)
3.3 点云拼接难题
大尺寸物体需要多相机联合扫描时,发现:
- 标定板尺寸要大于视野50%
- 需要至少15%重叠区域
- 最好用陶瓷标定板(热膨胀系数低)
4. 3D数据处理的核心技巧
4.1 点云滤波实战
原始数据包含大量噪声,我们的处理流水线:
- 统计离群值移除(移除离散点)
- 半径滤波(消除悬浮噪点)
- 体素网格下采样(平衡精度和计算量)
python复制import open3d as o3d
pcd = o3d.io.read_point_cloud("scan.ply")
# 移除统计离群点
cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)
# 半径滤波
cl = cl.remove_radius_outlier(nb_points=16, radius=0.05)
# 下采样
voxel = cl.voxel_down_sample(voxel_size=0.01)
4.2 坐标系转换陷阱
曾因忽略坐标系定义导致机械臂撞件:
- 相机坐标系:通常Z轴向前
- 机器人坐标系:Z轴向上
- 必须做齐次变换矩阵验证
建议流程:
- 用标定块验证原点位置
- 检查各轴方向定义
- 做虚拟碰撞检测再试运行
5. 未来技术演进观察
近期测试了某款毫米波雷达+视觉融合的3D相机,发现:
- 穿透能力显著提升(可检测包装内物体)
- 但点云密度只有结构光的1/10
- 适合物流体积测量等特定场景
另一个趋势是芯片级集成:
- 苹果LiDAR模组体积仅硬币大小
- 但测量距离限制在5米内
- 可能催生消费级3D扫描应用
在产线升级中,我们最终选择了模块化设计的3D相机系统,核心考量:
- 可更换投影模块(应对不同材料)
- 开放点云处理SDK
- 支持EtherCAT实时通信
