【PCL自学:Range Images】深度图与点云数据的转换及其应用(持续更新)

点云库PCL学习5——点云转深度图 一、定义 通过相机拍摄得到的点云是将深度图经过坐标转换成点云数据。深度图像上的每个像素点的值表达是场景物体离相机的距离。那么如果已知点云,如何转成深度图像呢! 二、使用的函数 头文件: #include <pcl/visualization/range_image_visualizer.h> 函数:range_image.createFromPointCloud(....... 阅读详情

一、什么是深度图

  目前深度图像的获取方法有激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等等,针对深度图像的研究重点主要集中在以下几个方面,深度图像的分割技术 ,深度图像的边缘检测技术 ,基于不同视点的多幅深度图像的配准技术,基于深度数据的三维重建技术,基于三维深度图像的三维目标识别技术,深度图像的多分辨率建模和几何压缩技术等等,在PCL 中深度图像与点云最主要的区别在于 其近邻的检索方式的不同,并且可以互相转换。
  深度图像(Depth Images)也被称为距离影像(Range Image),是指将从图像采集器到场景中各点的距离值作为像素值的图像,它直接反应了景物可见表面的几何形状,利用它可以很方便的解决3D目标描述中的许多问题,深度图像经过点云变换可以计算为点云数据,有规则及有必要信息的点云数据可以反算为深度图像数据。

二、点云转深度图 PointCloud->Range Image

  本节演示了如何从点云和一个给定的传感器位姿创建一个深度图像。以下代码创建了一个矩形点云的示例,它浮动在观察者的前面。具体注释非常详细。

#include <pcl/range_image/range_image.h> // 深度图头文件
int main () {
   
   
  pcl::PointCloud<pcl::PointXYZ> pointCloud; // 点云
  
  // 创造矩形点云数据,0.01分辨率
  for (float y=-0.5f; y<=0.5f; y+=0.01f) {
   
   
    for (float z=-0.5f; z<=0.5f; z+=0.01f) {
   
   
      pcl::PointXYZ point;
      point.x = 2.0f - y;
      point.y = y;
      point.z = z;
      pointCloud.push_back(point);
    }
  }
  pointCloud.width = pointCloud.size();
  pointCloud.height = 1;
  
  // 利用以上创造的矩形体点云,创造一个1度角分辨率的深度图像
  float angularResolution = (float) (  1.0f * (M_PI/180.0f));  //  1角度转弧度
  float maxAngleWidth     = (float) (360.0f * (M_PI/180.0f));  // 360角度转弧度
  float maxAngleHeight    = (float) (180.0f * (M_PI/180.0f));  // 180角度转弧度
  Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f); // 传感器位姿roll = pitch = yaw = 0(6DOF视角位姿)
  // 深度图所使用的坐标系
  pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
  float noiseLevel=0.00; 
  float minRange = 0.0f; 
  int borderSize = 1;   
  
  pcl::RangeImage rangeImage; // 深度图对象
  // 从以上的点云和设置的参数来创建深度图
  // ================================下面函数参数解释如下======================================
  // [in] 点云、角分辨率1°、
  // [in]maxAngleWidth = 360和maxAngleHeight = 180表示我们正在模拟的深度传感器具有完整的360度周围视图。(注:深度图像将仅裁剪为自动观察到某些内容的区域)。也可以通过减少值来节省一些计算。例如,对于180度视图朝前的激光扫描仪,可以观察到传感器后面没有点,maxAngleWidth = 180就足够了。
  // [in]sensorPose将虚拟深度传感器的6DOF位置定义为roll = pitch = yaw = 0的原点。
  // [in]coordinate_frame = CAMERA_FRAME告诉系统x面向右,y向下,z轴向前。另一种选择是LASER_FRAME,x面向前方,y位于左侧,z位于上方。
  // [in]对于noiseLevel = 0,沿Z轴剖分创建深度图像。然而,想平均落在同一个单元格中的点数,可以使用更高的值。比如0.05表示所有与最近点的最大距离为5cm的点用于计算深度。
  // [in]minRange 如果minRange大于0,所有靠近虚拟深度传感器的点将被忽略。
  // [in]borderSize,当裁剪图像时,如果borderSize大于0将在图像四周留下未观察到的点的边界。
  // [return]rangeImage 深度图
  //=========================================================================================
  rangeImage.createFromPointCloud(pointCloud, angularResolution, maxAngleWidth, maxAngleHeight,
                                  sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
  std::cout << rangeImage << "\n";
}

  以上代码执行结果如下:

header:
seq: 0 stamp: 0 frame_id:
points[]: 1360
width: 40
height: 34
sensor_origin_: 0 0 0
sensor_orientation_: 0 0 0 1
is_dense: 0
angular resolution: 1deg/pixel in x and 1deg/pixel in y.

  深度图像是从PointCloud类派生出来的,它的点类有成员x,y,z和range。有三种可能形式,被观测点有一个大于零的实际深度range。未观测到的点有x=y=z=NAN和range=-INFINITY。远距离点有x=y=z=NAN和range=INFINITY。

三、利用深度图提取点云边缘

  本节演示了如何从深度图像中提取边界(即从前景到背景的分割)。我们感兴趣的是三种不同的点集:
物体边界点,即仍

深度图像转化为点云         首先我们先知道什么是相机的焦距。摄影机或放映机的金属筒容纳了一组两边或一边有弧度(凸或凹)的透镜,组成一个综合镜头。从物体不同部分射出的光线,通过镜头之后,聚焦在底片的一个点上,使影像具有清晰的轮廓与真实的质感,这个点就叫焦点(focus)。所谓焦距(focal length),正是从镜头之镜片中间点到光线能清晰聚焦的那一点之间的距离 。         现在我们看看深度图像是如何转换为点云的: 图1 :( 阅读详情

相关推荐

使用OpenCV4和PCL1.9实现深度图像转点云图像

一、参考高翔博士的一起做RGB-D SLAM (2),针对在高版本环境下编译出现错误,做以下两点修改 1、读入图像路径 rgb =cv::imread("./data/rgb.png"); depth =cv::imread("./data/depth.png", -1); 修改为 rgb =cv::imread("../data/rgb.png"); depth =cv::imread("../data/depth.png", -1); 2、针对在gcc 5.4.0版本下编辑不通过,

qq_41721951的博客 7724

Range_Image深度图-1 PCL学习记录-9 Range_Image深度图原理,以及如何通过点云生成深度图

一.深度图简介 目前深度图像的获取方法有激光雷达深度成像法,计算机立体视觉成像,坐标测量机法,莫尔条纹法,结构光法等等,针对深度图像的研究重点主要集中在以下几个方面, 深度图像的分割技术 深度图像的边缘检测技术 基于不同视点的多幅深度图像的配准技术 基于深度数据的三维重建技术 基于三维深度图像的三维目标识别技术 深度图像的多分辨率建模和几何压缩技术等等 在PCL 中深度图像与点云最主要的区别在于其近邻的检索方式的不同,并且可以互相转换。 深度图像(Depth Images)也被称为距离影像.

HarwardWu的博客 3708

点云PCL库学习-RGBD图像转化为点云PCD并显示

本文基于TUM数据集中一对时间戳最近的彩色图和深度图,通过相机模型转换和像素匹配生成了一帧点云数据。

weixin_41957687的博客 7102

从点云数据生成深度图像

总结而言,通过透视投影方法,我们可以从点云数据生成深度图像,提取场景中物体与相机之间的距离信息。需要注意的是,上述代码中的参数设置和算法实现都是简化的示例,实际应用中可能需要根据具体情况进行调整和改进。另外,由于点云数据的大小和分布可能会影响生成的深度图像的精度和质量,因此在实际应用中可能需要进行额外的处理和优化。接下来,我们创建一个空白的深度图像,并对每个点进行透视投影,将深度信息保存到深度图像中。点云数据则是由离散的三维点构成的集合,每个点都包含了位置和其他属性信息。

UtiExamples的博客 1973

点云转深度图(C++详细版)

深度图像是将三维点云数据映射到二维图像平面上,其中每个像素的值表示该像素对应的深度信息。为了将点云转换为深度图像,需要将每个点云点的三维坐标转换为图像的像素坐标。

twnkie的博客 1184

三维点云数据投影到xoy平面上转换为深度图像(附 matlab 代码)

然后,代码通过将点云投影到xoy平面上,并将z值的高度差作为深度值进行转换。通过将x和y坐标映射到图像的行和列索引,将每个点的深度值减去最小高度的差值 存储在图像数组(实现了将三维点云数据转换为深度图像的功能,通过将点云投影到 xoy 平面上,并将高度差作为深度值,最终生成深度图像并保存为PNG格式的图像文件。接下来,代码计算了点云数据的坐标范围(x、y、z的最小值和最大值),以及图像的大小(最后,代码将深度值映射到0到255的范围,并将图像数组保存为PNG格式的图像文件(),并显示深度图像。

三维点云技术探索 1774

计组实验5:cache大小测量与 cache line 大小测量

前言 今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要一个 fcyc2 头文件,可以在 https://github.com/fabiensanglard/CpuCacheMountainViewer 这里找到。 ⚠ 我没有在 Linux 下试过课本上面的代码。。。 我是在 win10 下测试的。。。 所以 。。。 我并不确定我的代码是否正确。

AKGWSB 's blog 1万+

proteus仿真51单片机操作指南:串口通信仿真配置详解

深入讲解如何在proteus仿真51单片机中实现串口通信,涵盖虚拟串口设置、电路连接与调试技巧,帮助开发者高效完成通信仿真验证。

weixin_36197669的博客 567

用Quartus II和LPM_ROM手把手复现西电计组课设:从微指令到五条指令的完整流程

本文详细介绍了使用Quartus II和LPM_ROM复现西电计组课设的完整流程,从微指令编写到五条指令的实现。通过环境搭建、LPM_ROM配置、微程序设计及调试技巧,帮助读者高效完成课程设计,避开常见问题。适合计组课程设计的学习者和实践者参考。

weixin_29288313的博客 446

[NoC]Outstanding和Credit的概念详解

摘要:本文详细解析了计算机体系结构中outstanding和credit两个核心概念。outstanding指已发出但未完成的请求数量,通过跟踪未决事务实现并发和乱序执行,常见于AXI总线等场景;credit则是基于信用令牌的流控机制,通过控制发送速率防止接收端缓冲溢出,多用于NoC网络。二者在目的、机制上存在差异:outstanding侧重提升并发度,credit关注流控保护。文章通过AXI协议实例和SystemC代码示例展示了二者的应用与结合方式,并探讨了在SoC设计中参数优化的方法,包括性能/资源权衡

元直的博客 2258

国科大学习资料--人工智能原理与算法-2020年期末考试题解析(学长整理)

国科大学习资料–人工智能原理与算法-2020年期末考试题解析 张文生老师主讲 试卷共有6道题,题目不难,希望大家能取得好的成绩。 3.9 传教士和野人问题。三个传教士和三个野人在河的一岸,有一条能载一个人或者两个人的船。请设法使所有人都渡到河的另一岸,要求在任何地方野人数都不能多于传教士的人数。这个问题在AI领域中很有名,是因为它是第一个从分析的观点探讨问题形式化的论文的主题(Amarel,1968)。 a. 请对该问题进行详细形式化,只描述确保该问题求解所必需的特性。画出完整的状态空间图。 b. 应用合适

无名何许人的博客 4777

多图详解VSCode搭建Python开发环境

本文通过多图的方式详细介绍了VSCode搭建Python开发环境,希望能对学习Python的同学们有所帮助。 文章目录 1. VSCode的介绍和安装 2. 安装插件 2.1 安装中文插件 2.2 安装Python插件 2.3 安装远程插件 3. 远程连接服务器 3.1 配置ssh 3.2 运行代码 3.3 调试代码

weixin_43178406的博客 8万+

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1341

Slow waitForAckedSeqno took 64873ms (threshold=30000ms). File being written

Slow waitForAckedSeqno took 64873ms (threshold=30000ms). File being written

zhengzaifeidelushang的博客 2007

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 【PCL自学:ocTree】八叉树(octree)的原理及应用案例(点云压缩,搜索,空间变化)
下一篇: 【PCL自学:Recognition 1】基于对应分组算法的三维物体识别
斯坦福的兔子
博客等级 码龄9年 519粉丝 31原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值