PCL点云库学习

2023-11-15

一、可用Point类型

  • PointXYZ–成员变量: float x, y, z;

        PointXYZ是使用最常见的一个点数据类型,因为它只包含三维xyz坐标信息,这三个浮点数附加一个浮点数来满足存储对齐,用户可利用points[i].data[0],或者points[i].x访问点的x坐标值。

  • PointXYZI–成员变量: float x, y, z, intensity;

        PointXYZI是一个简单的XYZ坐标加intensity的point类型,理想情况下,这四个变量将新建单独一个结构体,并且满足存储对齐,然而,由于point的大部分操作会把data[4]元素设置成0或1(用于变换),不能让intensity与xyz在同一个结构体中,如果这样的话其内容将会被覆盖。例如,两个点的点积会把他们的第四个元素设置成0,否则该点积没有意义,等等。因此,对于兼容存储对齐,用三个额外的浮点数来填补intensity,这样在存储方面效率较低,但是符合存储对齐要求,运行效率较高。

  • PointXYZRGBA–成员变量: float x, y, z; uint32_t rgba;

除了rgba信息被包含在一个整型变量中,其它的和PointXYZI类似。

  • PointXY-float x, y;

        简单的二维x-y point结构

  • InterestPoint-float x, y, z, strength;

        除了strength表示关键点的强度的测量值,其它的和PointXYZI类似。

  • Normal - float normal[3], curvature;

        另一个最常用的数据类型,Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值(通过曲面块特征值之间关系获得——查看NormalEstimation类API以便获得更多信息,后续章节有介绍),由于在PCL中对曲面法线的操作很普遍,还是用第四个元素来占位,这样就兼容SSE和高效计算,例如,用户访问法向量的第一个坐标,可以通过points[i].data_n[0]或者points[i].normal[0]或者points[i].normal_x,再一次强调,曲率不能被存储在同一个结构体中,因为它会被普通的数据操作覆盖掉。

  • PointNormal - float x, y, z; float normal[3], curvature;

        PointNormal是存储XYZ数据的point结构体,并且包括采样点对应法线和曲率。

  • PointXYZRGBNormal - float x, y, z, rgb, normal[3], curvature;

        PointXYZRGBNormal存储XYZ数据和RGB颜色的point结构体,并且包括曲面法线和曲率

  • PointXYZINormal - float x, y, z, intensity, normal[3], curvature;

        PointXYZINormal存储XYZ数据和强度值的point结构体,并且包括曲面法线和曲率。

  • PointWithRange - float x, y, z (union with float point[4]), range;

        PointWithRange除了range包含从所获得的视点到采样点的距离测量值之外,其它与PointXYZI类似。

  • PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z;

        PointWithViewpoint除了vp_x、vp_y和vp_z以三维点表示所获得的视点之外,其它与PointXYZI一样。

  • MomentInvariants - float j1, j2, j3;

        MomentInvariants是一个包含采样曲面上面片的三个不变矩的point类型,描述面片上质量的分布情况。查看MomentInvariantsEstimation以获得更多信息。

  • PrincipalRadiiRSD - float r_min, r_max;

        PrincipalRadiiRSD是一个包含曲面块上两个RSD半径的point类型,查看RSDEstimation以获得更多信息。

  • Boundary - uint8_t boundary_point;

        Boundary存储一个点是否位于曲面边界上的简单point类型,查看BoundaryEstimation以获得更多信息。

  • PrincipalCurvatures - float principal_curvature[3], pc1, pc2;

        PrincipalCurvatures包含给定点主曲率的简单point类型。查看PrincipalCurvaturesEstimation以获得更多信息。

  • PFHSignature125 - float pfh[125];

        PFHSignature125包含给定点的PFH(点特征直方图)的简单point类型,查看PFHEstimation以获得更多信息。

  • FPFHSignature33 - float fpfh[33];

        FPFHSignature33包含给定点的FPFH(快速点特征直方图)的简单point类型,查看FPFHEstimation以获得更多信息。

  • VFHSignature308 - float vfh[308];

        VFHSignature308包含给定点VFH(视点特征直方图)的简单point类型,查看VFHEstimation以获得更多信息。

  • Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36];

        Narf36包含给定点NARF(归一化对齐半径特征)的简单point类型,查看NARFEstimation以获得更多信息。

  • BorderDescription - int x, y; BorderTraits traits;

        BorderDescription包含给定点边界类型的简单point类型,看BorderEstimation以获得更多信息。

  • IntensityGradient - float gradient[3];

        IntensityGradient包含给定点强度的梯度point类型,查看IntensityGradientEstimation以获得更多信息。

  • Histogram - float histogram[N];

        Histogram用来存储一般用途的n维直方图。

  • PointWithScale - float x, y, z, scale;

        PointWithScale除了scale表示某点用于几何操作的尺度(例如,计算最近邻所用的球体半径,窗口尺寸等等),其它的和PointXYZI一样。

  • PointSurfel - float x, y, z, normal[3], rgba, radius, confidence, curvature;

        PointSurfel存储XYZ坐标、曲面法线、RGB信息、半径、可信度和曲面曲率的复杂point类型。

二、文件读取与保存(io模块)

Ⅰ:用点云读取对象reader来进行读取

	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>); //存放读取点云的对象
	pcl::PCDReader reader;	//定义点云读取对象
    reader.read("test.pcd", *cloud_in) < 0

        用内置函数方法来读取

pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud)

Ⅱ:保存为ASICC格式,可以直接用记事本打开

pcl::io::savePCDFileASCII("ASICC_1.pcd", *cloud_out);

        保存为Binary格式,不可用记事本打开,但更快速

pcl::io::savePCDFileBinary("Binary_1.pcd", *cloud_out);

三、点云链接   

        连接两个不同点云为一个点云,进行操作前要确保两个数据集中字段的类型相同和维度相等,同时了解如何连接两个不同点云的字段(例如颜色 法线)这种操作的强制约束条件是两个数据集中点的数目必须一样

        例如:点云A是N个点XYZ点,点云B是N个点的RGB点,则连接两个字段形成点云C是N个点xyzrgb类型

        连接分为两种:

  • 点云连接concatenate points :拼接列
        cloud_c = cloud_a;
        cloud_c += cloud_b;
  • 字段连接concatenate fields :拼接行
pcl::concatenateFields(cloud_a, n_cloud_b, p_n_cloud_c);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCL点云库学习 的相关文章

  • EXCEL 怎么用函数公式计数(Excel函数去重计数 / 去除重复项),不使用透视表

    起因 因领导层需要将电商平台利润核算自动化 原始数据不可以动 所以需要用到公式 PS 其实所谓自动化不是Python VBA办公自动化 就是嵌套一堆公式 然后每月更新电商后台基础数据 就可以出来利润结果 正文 普通方法1 直接使用 SUM
  • RHEL6 系统启动故障排错

    RHEL6 系统排错 系统故障了 机器无法正常工作 更别提正常提供服务 这个时候如果我们掌握了系统排错 那就大有用武之地了 我们在学习和实验阶段 可以通过系统排错帮助大家更深入了解系统启动过程 对系统进行如下破坏 1 破坏grub引导 dd
  • Docker 安装部署与基础操作

    Docker 是一个开源的商业产品 有两个版本 社区版 Community Edition 缩写为 CE 和企业版 Enterprise Edition 缩写为 EE 企业版包含了一些收费服务 个人开发者一般用不到 下面的介绍都针对社区版
  • SQL优化 之 百万数据真实案例教程0基础(小白必看)

    前提准备 本案例准备了100W的数据进行SQL性能测试 数据库采用的是MySQL 总共介绍了常见的14种SQL优化方式 每一种优化方式都进行了实打实的测试 逐行讲解 通俗易懂 一 前提准备 提前准备一张学生表数据和一张特殊学生表数据 用于后
  • LTE频段(band)划分

    1 TDD LTE 国内使用的TDD包括B38 B39 B40 B41 其中B38是B41的子集 国内运营商频段划分如下 其中移动B40 联通电信B41频段为室内补充频段 联通电信定制机均不支持B40频段 基本可以解读为该频段目前被联通电信
  • Java概述

    Java 简介 一个苦逼的建筑专业的Java小白 什么是 Java Java 是一门面向对象编程语言 不仅吸收了 C 语言的各种优点 还摒弃了 C 里难以理解的多继承 指针等概念 因此 Java 语言具有功能强大和简单易用两个特征 Java

随机推荐

  • Hive【Hive(一)DDL】

    前置准备 需要启动 Hadoop 集群 因为我们 Hive 是在 Hadoop 集群之上运行的 从DataGrip 或者其他外部终端连接 Hive 需要先打开 Hive 的 metastore 进程和 hiveserver2 进程 meta
  • 深度之眼Paper带读笔记NLP.10:DCNN

    文章目录 前言 第一课 论文导读 句子建模简介 词表征Word Representation 基于分布式相似性的表征Distributional Similarity based representations 基于窗口的共现矩阵Windo
  • 《汽车行业面向智能制造的BOM物料管理》拆书心得—第三章 企业级BOM架构探讨

    各企业对各种BOM形态叫法不一 为后续探讨方便 首先从业界较流行的叫法来定义各BOM形态 明确各形态BOM的内涵 服务对象及作用 这些BOM形态包括早期BOM Early BOM 工程BOM Engineering BOM EBOM CAD
  • 接口测试工具Apifox 基础篇:公共脚本

    一 公共脚本的使用背景 1 实现脚本复用 避免多处重复编写相同功能的脚本 2 相同功能的脚本或通用类 方法可放到公共脚本中供接口直接引用 二 使用方式 1 管理公共脚本 打开 项目设置 gt 公共脚本 在这里管理公共脚本 2 引用公共脚本
  • npm 升级

    更新到最新版本 npm install g npm 更新到指定版本 npm g install npm 8 0 0 清理 npm 缓存数据 npm cache clean force
  • 原生js 选择文件,获取 input type=file 时候的文件路径

    使用 URL createObjectURL 方法来获取文件的路径 div div
  • 【以太坊源码】以太坊黄皮书参数

    由于参数比较多 直接贴出来比较杂乱 我将其整理在百度脑图 按照黄皮书章节顺序进行分类 并调整了部分常数顺序 需要查阅特定的参数 可以使用ctrl F直接查询 由于百度脑图不支持下标 或者我不知道 所有参数统一没用下标 并在备注中说明是否有下
  • postman触发任务处理,长时间未响应时,自动retry,导致SFTP连接意外中断

    背景 今天写了一个数据处理任务 用于后端定时触发 并为这个定时任务提供了一个触发接口 用于手动触发 这个任务的处理逻辑 大概是从SFTP上拉取文件 并对文件进行解析 任务写完后 在测试时 数据量较少 并未发现问题 现象 今天在正式环境手动触
  • 复习之vsftp服务

    一 vsftp服务简介 文件传输协议 File Transfer Protocol FTP 是用于在网络上进行文件传输的一套标准协议 它工作在 OSI 模型的第七层 即应用层 使用 TCP 传输而不是 UDP 客户在和服务器建立连接前要经过
  • 统计学离散型变量和连续型变量有什么区别?

    离散变量是指其数值只能用自然数或整数单位计算的则为离散变量 例如 企业个数 职工人数 设备台数等 只能按计量单位数计数 这种变量的数值一般用计数方法取得 反之 在一定区间内可以任意取值的变量叫连续变量 其数值是连续不断的 相邻两个数值可作无
  • Opencv ORC——文字定位与切割

    字符切割步骤 要做文字识别 第一步要考虑的就是怎么将每一个字符从图片中切割下来 然后才可以送入我们设计好的模型进行字符识别 现在就以下面这张图片为例 说一说最一般的字符切割的步骤是哪些 我们实际上要识别的图片很可能没上面那张图片如此整洁 很
  • Python每日一练——第1天:水仙花数

    前言 Python每日一练来啦 本文已收录于 Python每日一练 专栏 此专栏目的在于 帮忙学习Python的小白提高编程能力 训练逻辑思维 每周持续更新中 欢迎免费订阅 文章目录 1 问题描述 2 问题分析 3 算法思路 4 代码实现
  • Java多线程4--线程池--Callable方法

    1 主要流程 例子如下 package chen thread demo2 import java util concurrent 线程创建方式三 实现callable接口 callable的好处 1 可以定义返回值 2 可以抛出异常 pu
  • 9. vue常用指令 v-bind 给属性绑定值

    文章目录 1 v bind 属性名 value 1 1 value的取值 1 2 v bind 可以简写成 1 3 v bind 为 style class 属性赋值 默认情况下v bind会去Vue对象中的data中去找对应数据 但是 s
  • 企业级安全架构

    安全架构是指企业综合业务需求和对未来变化因素的考虑 针对各种安全威胁 设计的一个布局合理 提高安全系数 降低风险 节约成本的系统 企业安全架构 Enterprise Security Architechture ESA 在企业的层面定义了需
  • QT按回车后自动切换到下一个行编辑

    界面图如下 方法一 通过信号与槽的方式 connect ui gt lineEdit 1 SIGNAL editingFinished ui gt lineEdit 2 SLOT setFocus connect ui gt lineEdi
  • java版本管理说明_Java JDK 版本管理工具jabba常用命令

    1 查询JDK 1 查看服务器上可下载安装的Jdk版本jabba ls remote 过滤查询的版本jabba ls remote zulu 1 8 60 jabba ls remote gt 1 6 45 lt 1 9 latest mi
  • 日志切割方法小结 [Logrotate、python、shell脚本实现 ]

    对于Linux系统安全来说 日志文件是极其重要的工具 不知为何 我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本 大家似乎遗忘了Logrotate 争相发明自己的轮子 这真是让人沮丧啊 就好比明明身边躺着
  • 良许Linux

    mv 也是 Linux 下一个使用频率非常高的命令 但除了一些基本用法 你还知道它的哪些高级用法呢 1 基本用法 移动一个 多个文件 移动一个 多个目录 重命名文件 目录 这些都是很基本的用法 无需赘述 下面介绍一些更高级的用法 2 打印操
  • PCL点云库学习

    一 可用Point类型 PointXYZ 成员变量 float x y z PointXYZ是使用最常见的一个点数据类型 因为它只包含三维xyz坐标信息 这三个浮点数附加一个浮点数来满足存储对齐 用户可利用points i data 0 或