十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RealSense D455 点云生成实用教程:从原始深度图到三维点云

RealSense D455 点云生成实用教程:从原始深度图到三维点云 RealSense D455 点云生成实用教程从原始深度图到三维点云【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsenselibrealsense 是 Intel 的 RealSense 深度相机 SDK负责把相机吐出的原始数据一路加工成点云。读完整篇文章你能用几行代码让 D455 工作起来并给自己的工作产出一份稳定可用的三维点云。连接相机拉取深度数据第一件事是把设备的数据拉出来。Linux 上用 apt 装好 SDK就能直接跑 Viewer 验证sudo apt install librealsense2-utils librealsense2-dev realsense-viewer # 装完运行确认设备和数据流装好后打开 Viewer确认设备列表里能看到 D455深度和彩色两路数据都能出。数据流稳定后把参数固定下来新手推荐这么配参数取值为什么这么选深度分辨率1280×720覆盖范围和噪声平衡帧率30 fps兼顾动态与带宽深度单位毫米原始值SDK 默认输出深度模组D455 深度模块基线更长精度更高上图是 Viewer 里的 3D 视图点云连续、没有大块空洞就可以进入下一步。把深度图变成干净数据深度帧拿到手不能直接用做深度图转点云之前先走三道清洗工序。提取深度值。问题在于帧给到你的是一整块 16 位整数缓冲不是一组现成的坐标。动作取出深度帧逐像素读出数值每个像素的值就是相机到物体的距离毫米。效果你得到一张每像素一个距离的图后面所有换算都基于它。单位换算。问题在于下游的坐标、单位和渲染都习惯用米毫米混进来会把点云缩小到看不见或者撑爆视野。动作把毫米值除以 1000 转成米整条流水线统一只用米。效果单位一致后面做坐标变换不会再冒出离奇的缩放问题。剔除无效值。问题在于相机看不到的地方超出量程、被遮挡、强反光深度是 0 或者乱码。动作先把零值像素过滤掉再按需加降采样或时序滤波压掉孤立噪点。效果点云里不再飘着幽灵点边缘更干净。把深度像素换算成三维坐标这是整条流水线里最核心的一步。打个比方就像你已经量好了照片上每个像素到物体的距离现在只是把这个距离贴回像素所在的射线方向把二维图拉回三维空间。核心公式就三行x (u - px) * z / fx y (v - py) * z / fy z depth # 已换算成米变量都有出处fx、fy是焦距像素单位px、py是主点也就是光轴在成像平面上的像素位置这四个数就是相机内参SDK 里直接从深度流的 profile 里读不用自己标。u、v是像素坐标z是该像素的深度值。上图是深度像素和相机光轴的几何关系斜边是实际距离沿光轴方向的是深度值深度图给的就是后者所以公式才能写得这么简单。还有一点容易踩坑RealSense 深度相机坐标系是 X 右、Y 下、Z 前如果你的应用用更常见的 Y 上、Z 向后的世界坐标系做一次深度相机坐标系变换就行import numpy as np T np.diag([1, -1, -1, 1]) # X右 Y上 Z后点云示例 做的事就是这个调用 SDK 自带的 pointcloud 模块完成深度到三维的映射再渲染出来效果和 Viewer 一致。改善三种场景下的点云质量 点云的质量问题多半出在环境上先把这三个场景处理掉。弱光场景。现象暗处点云稀疏、窟窿成片。对策打开红外投影器明暗对比大的场景试试 D455 的 HDR 模式多张不同曝光融合成一张深度帧环境红外干扰强时调低投影功率。预期效果暗区缺失明显减少点云密度更均匀。动态物体。现象运动目标在点云上拖着残影边缘撕裂。对策D455 全局快门本身能压掉运动模糊曝光调低一点连续运动的目标把时序滤波放宽或关掉要干净单帧就先让目标停住再采。预期效果运动目标不再拖影轮廓完整。反光表面。现象玻璃、金属、光面白墙上是成片黑洞。对策调整相机角度避开镜面反射调低红外功率防止传感器饱和残留的孔洞用补洞滤波或空间滤波修一下。预期效果大洞变小坑轮廓基本保住。点云出问题时查这张表 结果不对的时候先别改代码查一遍这张表问题多半就在这几类看到什么多半是怎么改点云稀疏分辨率设低了提高分辨率重采点云抖动有噪点环境光干扰开红外投影器并遮光平面缺块表面反光调整相机角度距离不准内参不对或镜头脏擦镜头、重查内参整片点云歪斜坐标系方向没对套一次坐标变换多机与实时点云的组合玩法场景大于一台相机能覆盖的范围或者你要把点云跑成实时服务关键前提只有这几条不用重新推原理多机点云先让多台相机时钟对齐SDK 支持同步再标定相机之间的相对位姿最后把各机点云配准到同一坐标系再融合而不是各看各的。实时点云预分配帧缓冲别每帧新建内存点云映射这种重计算交给 GPU 或 OpenGL显示环节直接用 Viewer 或自带渲染管线。更多可直接跑的例子在 Python 示例 里。走完这五步一张深度图就成了你手里可用的三维点云。建议从 hello-realsense 示例改起来先跑通再调参数点云在 3D 视图里动起来的那一刻这条流水线你就掌握了。【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表