资讯动态

三步把 RealSense 深度相机跑出干净三维点云

发布时间:2026/9/19 13:09:23 来源:尧图企业网站定制
三步把 RealSense 深度相机跑出干净三维点云【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsenselibrealsense 是 Intel 官方的 RealSense SDK。这篇文章解决一个问题怎么把 D455 深度相机接上5 分钟看到第一帧再一路处理到能导出的彩色三维点云。跑完全文你会拿到一套可复用的采集、滤波、导出管线产物是一个带颜色的 PLY 点云文件。能跑起来5 分钟看到第一帧深度项目最低要求硬件RealSense D455带 USB 3.0 接口系统Ubuntu 20.04 LTS语言Python 3.8 / C11关键依赖Python 侧只需 pyrealsense2 NumPy OpenCVgit clone https://gitcode.com/GitHub_Trending/li/librealsense.git cd librealsense ./scripts/setup_udev_rules.sh cmake -S . -B build -DCMAKE_BUILD_TYPERelease -DBUILD_EXAMPLEStrue cmake --build build --config Release -j sudo cmake --install build pip install ./build/wrappers/python/pyrealsense2-*.whl这五条命令干三件事给相机配 udev 权限、编译 SDK 和示例、装上 Python 封装。Linux 上深度相机还需要打过补丁的内核驱动参考 安装文档。装完先跑 深度入门示例它不需要显示器直接在终端里用字符画出深度图第一帧深度数据就这样出来了。管线拆解深度帧变成三维点云整条数据流走三步原始深度帧 → 滤掉坏像素 → 反投影成带颜色的点。每步一个 H3照着搬就行。配置深度流取回第一帧距离数据输入 Z16 深度帧 → 用get_distance()读像素 → 得到米级距离。import numpy as np import pyrealsense2 as rs pipe rs.pipeline() cfg rs.config() cfg.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) pipe.start(cfg) frames pipe.wait_for_frames() depth frames.get_depth_frame() dist depth.get_distance(320, 240) # 画面中心单位米 print(dist)这段在做的事按 640x48030fps 打开深度流取一帧读画面中心那个像素离相机多远。SDK 替你处理好了 16 位原始值到米的换算。⚠️ D455 的 Z16 帧里 0 表示这像素没测出来不是零距离。用裸数组判断有效性时先判 0再往下算别把 0 当成 0 米。滤掉无效像素与噪点输入带噪深度帧 → 串四个滤波器 → 得到干净深度帧。decim rs.decimation_filter(); decim.set_option(rs.option.decimation, 2) thr rs.threshold_filter() spat rs.spatial_filter() temp rs.temporal_filter() depth decim.process(depth) depth thr.process(depth) depth spat.process(depth) depth temp.process(depth)这段在做的事先降采样把 48 万个像素砍到 12 万、顺手压掉大片孤点再砍掉超出量程的值最后空间滤波平滑边缘、时间滤波吃掉抖动。官方完整调参面板在 后处理示例每个滤波器支持哪些选项都能在线试。⚠️ 空间、时间滤波强度别一上来拉满平滑过头桌边、人这些边缘会整体糊掉点云看着干净细节全没了。反投影成三维点并导出输入干净深度帧 → 逐像素反投影 → 得到彩色点云 PLY。pc rs.pointcloud() pc.map_to(color_frame) # 颜色帧当纹理也可用 colorizer 上色 ply rs.save_to_ply(out.ply) ply.process(pipe.wait_for_frames())这段在做的事pc.calculate内部对每个有效像素执行一次反投影x (u - ppx) * z / fx回答的就是第 (u, v) 个像素、深度 z 的点在三维空间哪里用的是这帧深度流自己的内参D455 640x480 下 fx≈392.5、ppx≈323.6不必手写。map_to给每个点附上颜色帧上的纹理坐标导出的 PLY 因此是彩色的完整脚本看 导出 PLY 示例。排错速查点云翻车对一下症状 现象处理办法深度全黑或大片 0重跑 udev 脚本并拔插相机查lsusb是否识别到 D455点云像撒了盐上空间时间滤波亮面、玻璃、黑绒布属于先天丢点换测试物暗光下点云变稀打开激光投射器depth.set_option(laser_power, 2)别指望环境光帧率掉到 15 以下深度流降到 480p 或 15fpsCPU 不够就先开 2× 降采样点云边缘抖动加时间滤波相机与桌面没固定稳先解决物理抖动帧和滤波的同步关系别猜直接看 帧生命周期文档验收与调优用数字说话三个可以拿尺子量、拿计数器量的指标Z 轴误差对着 0.3–2 米外的平整墙面测用 depth-quality 工具看 Z Accuracy应低于 0.5%填充率目标 ROI 内有效像素占比 ≥ 90%明显偏低先怀疑表面材质和光照再怀疑参数帧率640×480 深度流 2× 降采样稳定 30fpsPly 导出耗时单帧 1s调参顺序按这条走先动降采样幅度把点云密度和帧率平衡好再看阈值范围确认近处、远处没被误砍最后才碰空间和时间滤波的强度因为这两个一碰就影响边缘留着当精修手段。上线前过一遍坐标系与下游 SLAM、配准约定一致PLY 能打开且颜色正确暗光环境红外亮度已测帧率稳定、无规律掉帧从第一帧深度到能导出的彩色点云 PLY这条链路你已经走通了。下一步接两到三台相机拍同一个场景用 ICP 配准融合出完整模型。【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价