点云数据结构化与体素化理论学习

一、PCD点云数据存储格式的进一步认识

(一)PCD点云存储格式相较于其它存储格式(如PLY、STL、OBJ、X3D等)的优势[1]

        (1)具有存储和处理有组织的点云数据集的能力,这对于实时应用和增强现实及机器人等研究领域十分重要;

        (2)二进制的mmap/munmap可能是最快加载和存储数据至磁盘的方式(在实验中,我发现Linux系统下基于PCL/Open3D库读取数据较Windows系统快。后经查阅了解到,二进制格式的点云数据读取是基于pcl::PointCloud.points array/vector的完全临时复制。在Linux系统中,为了尽可能最快地读取数据而采用mmap/munmap操作);

        (3)能够存储不同的数据类型(支持所有基础类型,如char、short、int、float和double)以达到高效处理和存储复杂的点云数据。无效的点云维度通常被存储为NAN类型,但自从PCL 1.0.1开始,NAN类型字符被替换为nan表示;

        (4)支持n-D直方图特征描述符,这对三维感知和计算机视觉应用十分重要;

        (5)通过控制文件格式,PCD存储格式可以最好地匹配PCL库,从而在PCL应用中获得最高的性能表现。与此同时,PCL应用运行不需要将各类数据格式都作为PCL的基础格式且不需要耗费额外的时间在数据转换函数上,以提高时空效率。

(二)PCD文件格式头解析[1]

        PCD文件的格式头用于识别和表明存储点云数据的确定属性,格式头必须为ASCII编码且每一个属性实体被换行符(\n)分隔。值得注意的是,视点位置较为重要,视点将会被用于不同坐标系统之间的转换或者辅助特征计算(如局部表面法线需要一个不变的视线辅助计算保持一致性,即法线定向[8])。

        (1)VERSION             PCD格式文件的版本号

        (2)FIELDS                 每一维度的特定属性标识名字

        (3)SIZE                      每一维数据存储的字节数(unsigned char/char为1字节;unsigned short/short为2字节;unsigned int/int/float为4字节;double为8字节)

        (4)TYPE                     每一维度表示字符的数据类型(I-int8(char)/int16(short)/int32(int) U- uint8(unsigned char)/uint16(unsigned short)/uint32(unsigned int) F-float)

        (5)COUNT                  一个维度的表示元素数量。默认不表示COUNT情况,其为1

        (6)WIDTH                    一行记录的点的数量

        (7)HEIGHT                (有/无组织存储标记)若无组织存储为1,否则为点云数据存储的行数

        (8)VIEWPOINT            点云数据的视点(tx ty tz qw qx qy qz)

        (9)POINTS                   存储点云的总体数量(与WIDTH*HEIGHT一致)

        (10)DATA                     特定数据格式存储的点云数据

图一 PCD存储格式文件图示

二、基于KDTree的点云结构化组织

        在计算机科学里,k-d树(k-dimensional tree)是在k维欧几里德空间组织点的数据结构,是空间二叉树的一种特殊情况。k-d树可以使用在多种应用场合,如多维键值搜索(如范围搜索及最邻近搜索)。k-d树是每个叶子节点都为k维点的二叉树,所有非叶子节点可以视作用一个超平面把空间分割成两个半空间。节点左边的子树代表在超平面左边的点,节点右边的子树代表在超平面右边的点。选择超平面的方法如下:每个节点都与k维中垂直于超平面的那一维有关[2]。

        一个三维树。第一次划分(红色)把根节点(白色)划分成两个节点,然后它们分别再次被划分(绿色)为两个子节点。最后这四个子节点的每一个都被划分(蓝色)为两个子节点。因为没有更进一步的划分,最后得到的八个节点称为叶子节点,如图二所示。

图二 三维k-d树图示(图源wikipedia)

三、点云数据的三维格网化/体素化

        体素(Voxel)是体积像素的简称。概念上类似二维空间的最小单位—像素,像素用于二维图像。体积像素一如其名,是数字资料于三维空间分割上的最小单位[4]。点云数据三维格网化通常用于基于体素的深度学习数据预处理、局部相对特征计算以及投影。

图三 体素示意图(图源wikipedia)

四、基于的Octree的点云结构化组织

        八叉树(Octree)是一种树形数据结构,每个内部节点都正好有八个子节点。八叉树常用于分割三维空间,将其递归细分为八个卦限。八叉树是四叉树在三维空间中的对应,在三维图形、三维游戏引擎等领域有很多应用。八叉树的每个节点都可以代表一个空间,对应的八个子节点则将这个空间细分为八个卦限。点域(point region,简称PR)八叉树的节点中都存储着一个三维点,即该节点对应区域的“中心”,也是八个子节点对应区域中的一个角落。矩阵(matrix based,简称MX)八叉树中,节点只记录区域范围,对应的中心点坐标需要从区域范围推算。因此,PR八叉树的根节点可以表示无限大的空间;而MX八叉树的根节点只能表示有限空间,这样才可以得到隐含的中心点[6]。

图四 八叉树递归划分图示(图源wikipedia)

参考资料:

[1] The PCD (Point Cloud Data) file format — Point Cloud Library 1.14.0-dev documentation

[2] https://en.wikipedia.org/wiki/K-d_tree

[3] KDTree - Open3D 0.18.0 documentation

[4] https://en.wikipedia.org/wiki/Voxel

[5] Voxelization - Open3D 0.18.0 documentation

[6] https://en.wikipedia.org/wiki/Octree

[7] Octree - Open3D 0.18.0 documentation

[8] Open3D 法线估计(2)——法线定向_open3d法向量定向-CSDN博客

[9] Open3D KDTree的使用_open3d使用kdtree-CSDN博客

[10] Open3D 从点云中构建八叉树_根据空间点构造八叉树-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505661.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主网NFT的发布合约

1.什么是nft? NFT:Non-fungible-token 非同质化货币 2.新建suimove项目 使用sui move new 项目名命令新建sui move项目 sui move new nft_qyx项目结构如下: 3.写nft合约 module qyx123::nft{use sui::object::{Self, UID};use sui::transfer;use sui::tx_context::{Sel…

Elasticsearch搜索引擎

目录 初识elasticsearch 了解ES 什么是elasticsearch elasticsearch的发展 搜索引擎技术排名: 总结 倒排索引 正向索引和倒排索引 正向索引 倒排索引 总结 es的一些概念 文档 索引 概念对比 架构 总结 安装es,kibana 安装es 安装kiba…

Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析

3.2.3 原理分析 3.2.3.1 源码跟踪 前面我们讲解了在项目当中引入第三方依赖之后,如何加载第三方依赖中定义好的bean对象以及配置类,从而完成自动配置操作。那下面我们通过源码跟踪的形式来剖析下SpringBoot底层到底是如何完成自动配置的。 源码跟踪技巧…

技术阅读周刊第十四期:常用的 Git 配置

技术阅读周刊,每周更新。 历史更新 20231122:第十一期20231129:第十二期20240105:第十三期:一些提高生产力的终端命令20240112:第十四期:Golang 作者 Rob Pike 在 GopherConAU 上的分享 How I w…

第19章-IPv6基础

1. IPv4的缺陷 2. IPv6的优势 3. 地址格式 3.1 格式 3.2 长度 4. 地址书写压缩 4.1 段内前导0压缩 4.2 全0段压缩 4.3 例子1 4.4 例子 5. 网段划分 5.1 前缀 5.2 接口标识符 5.3 前缀长度 5.4 地址规模分类 6. 地址分类 6.1 单播地址 6.2 组播地址 6.3 任播地址 6.4 例子 …

计算机网络(4)----局域网与广域网

目录 1.局域网 (1)局域网拓扑结构 (2)局域网的传输介质 (3)局域网介质访问控制方法 (4)局域网的分类 (5)IEEE 802标准 (6)MAC子层与LLC子层 (7)常用的局域网技术---以太网 (8)以太网传输介质与拓扑结构的发展 (9)常用的以太网---10BASE-T以太网 (10)适配器与MAC地址…

SMBGhost漏洞技术分析与防御方案

事件分析 最近国内外各安全厂商都发布了SMBGhost(CVE-2020-0796)漏洞的预警报告和分析报告,笔者利用周末休息时间也研究了一下,就算是做一个笔记了,分享给大家一起学习下,目前外面研究的POC大部分是通过SMB压缩数据包长度整数溢出…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码,应导师的要求,需要再README中加入对实验视频的展示,但是github的README.md其实就是一个markdown文件,据我的理解这个文件里应该无法直接插入视频吧?(如果后续有办法直接…

BUGKU 网站被黑

打开环境,什么都没发现,使用蚁剑扫描一下,发现shell.php,打开 使用BP抓包,进行爆破 得到密码:hack 进去得到flag

嵌入式中汇编语言的基本实现

大家好,今天给大家分享,GNU汇编的语法。 第一:汇编简介 GNU 汇编语法适用于所有的架构,并不是 ARM 独享的,GNU 汇编由一系列的语句组成, 每行一条语句,每条语句有三个可选部分,如下…

Python爬虫Cookies 池的搭建

Cookies 池的搭建 很多时候,在爬取没有登录的情况下,我们也可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做 SEO,不会对所有页面都设置登录限制。 但是,不登录直接爬取会有一些弊端,弊端主要有…

【分布式websocket】RocketMQ发送消息保证消息最终一致性需要做哪些处理?【第15期】

前言 发送消息的逻辑在发给mq后消息链路就直接结束了。那么消息在mq收到后我们该如何保证后面消息一定能存储呢?执行业务逻辑出错了怎么办呢?当然这期只是IM特定场景下的一致性哈,不是分布式事务哈,有点小区别?使用MQ…