【ZED】从零开始使用ZED相机(三):深度图与点云数据的实战应用

张开发
2026/4/18 13:48:51 15 分钟阅读

分享文章

【ZED】从零开始使用ZED相机(三):深度图与点云数据的实战应用
1. 深度图与点云的基础原理第一次拿到ZED相机生成的深度图时我盯着那些五彩斑斓的色块发愣——这堆像抽象画一样的东西到底怎么用后来才发现理解深度图和点云的关系就像学做菜要先认识食材。深度图本质上是个二维矩阵每个像素值代表该点到相机的距离单位毫米。而点云则是把这些距离信息转换成三维坐标系中的点集合相当于给每个像素点装上了GPS定位。ZED相机通过双目视差原理计算深度。就像人类用两只眼睛判断距离相机的两个镜头会捕捉微小视角差异。我在测试时特意用手在镜头前左右移动发现当物体距离相机30cm时深度图对应区域会显示约300的数值超过4米则显示为最大测量值。这个过程中有几个关键参数需要注意深度范围ZED 2i默认0.3-15米可通过depth_minimum_distance调整精度衰减实测距离越远误差越大3米内误差±1%10米时约±5%填充模式建议开启SENSING_MODE.FILL减少黑洞区域# 深度图参数设置示例 init_params sl.InitParameters() init_params.depth_mode sl.DEPTH_MODE.ULTRA # 质量优先模式 init_params.coordinate_units sl.UNIT.MILLIMETER # 使用毫米单位2. 深度图采集与优化技巧去年做室内导航项目时我花了整整两周才摸清深度图的最佳采集姿势。很多人直接套用官方示例代码结果发现深度图全是噪点。这里分享几个实测有效的技巧环境适配是关键。在强光环境下我会给相机加装偏振滤镜弱光时则开启相机自带的低光增强模式。有次在阳光直射的窗边测试发现深度图出现大面积断裂后来发现是窗帘反光干扰换成哑光材质后立即改善。采集流程建议分三步走预热校准相机开机后静置1分钟让温度稳定动态调参根据场景实时调整置信度阈值后处理用retrieve_image获取深度图后建议做中值滤波# 动态置信度阈值设置 runtime_params sl.RuntimeParameters() runtime_params.confidence_threshold 95 # 默认100值越小填充越多但精度降低 # 获取优化后的深度图 zed.retrieve_image(processed_depth, sl.VIEW.DEPTH, sl.MEM.CPU) depth_data processed_depth.get_data() # 获取numpy数组实测发现将相机固定在三角架上能提升30%以上的稳定性。有次用手持方式采集书架数据后期处理时发现多帧对齐误差导致点云出现重影改用固定支架后问题消失。3. 点云数据实战处理第一次导出点云数据时我被那个包含50万个点的PLY文件吓到了。后来发现处理点云就像玩乐高——要学会分类整理。ZED相机的点云每个点都包含XYZ坐标和RGBA颜色信息这让我们能重建出彩色3D模型。在机器人避障项目中我总结出点云处理的三个必备步骤降采样用体素网格过滤减少数据量去噪统计离群值移除飞点平面分割提取地面等参考平面# 点云处理代码示例 point_cloud sl.Mat() zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA) cloud_array point_cloud.get_data() # 形状为(H,W,4) # 转换为Open3D点云对象 import open3d as o3d pcd o3d.geometry.PointCloud() pcd.points o3d.utility.Vector3dVector(cloud_array[:,:,:3].reshape(-1,3)) pcd.colors o3d.utility.Vector3dVector(cloud_array[:,:,3:].reshape(-1,3)/255)有个容易踩的坑是坐标系统。ZED默认使用右手坐标系Y轴向上。有次我把数据导入Unity时发现模型倒置查了半天才发现是坐标系转换问题。现在我会在采集时就做好坐标统一# 坐标系转换示例 transformation sl.Transform() transformation.set_rotation(sl.Rotation(0,1,0), np.pi) # 绕Y轴旋转180度 zed.set_positional_tracking_parameters(transformation)4. 典型应用场景实现上个月帮朋友工作室搭建3D扫描系统时我们只用ZED相机就实现了文物数字化。整个过程就像用单反拍全景照片——需要多角度拍摄然后拼接。具体操作流程固定物体在转台上相机视角保持45度俯角每旋转10度采集一帧共36个角度用ICP算法对齐点云泊松重建生成完整模型# 多帧点云对齐示例 aligned_clouds [] for i in range(36): zed.grab() zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA) current_cloud convert_to_open3d(point_cloud) if i0: # 使用ICP配准 transformation o3d.pipelines.registration.registration_icp( current_cloud, aligned_clouds[-1], 0.05).transformation current_cloud.transform(transformation) aligned_clouds.append(current_cloud)在智能货架项目中我们结合深度图和YOLO实现了体积测量。当摄像头检测到货品被拿起时会对比拿取前后的点云差异区域自动计算物品尺寸。这里有个小技巧把深度图转为点云后用DBSCAN聚类比直接处理2D图像更准确。有次调试时发现测量误差很大后来发现是货架反光导致深度异常。解决方案是在代码中加入材质检测逻辑当某区域深度值突然变为最大测量值时自动标记为反光区域并忽略。这个改进让系统准确率从72%提升到89%。

更多文章