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

news2024/11/18 5:28:28

一、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.coloradmin.cn/o/1485258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】string 类 ( 上)

标准库中的string类 注意: 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是:basic_string模板类的别名,typedef basi…

Python3零基础教程之数学运算专题初阶

大家好,我是千与编程,在上一节课程我们讲解了Python3基础课程中的变量与数据专题项目,本章节中涉及的Python3编程语言中的基础的四则运算、赋值运算符号,赋值运算符号,比较运算符号,位运算符号的计算方法。 这一章的内容算是比较基础的部分,最后需要学会使用即可。以下是…

飞天使-学以致用-devops知识点2-安装sonarqube

文章目录 安装sonarqube查看暴露出去的端口 生成服务token创建webhook服务创建项目 安装sonarqube apiVersion: apps/v1 kind: Deployment metadata:name: postgres-sonarnamespace: kube-devops spec:replicas: 1selector:matchLabels:app: postgres-sonartemplate:metadata:…

物联网与智慧城市:科技驱动下的城市智能化升级之路

一、引言 随着科技的不断进步和城市化进程的加速,物联网与智慧城市的结合已经成为推动城市智能化升级的关键力量。物联网技术以其强大的连接和数据处理能力,为智慧城市的建设提供了无限可能。本文旨在探讨物联网如何助力智慧城市的构建,以及…

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议(主机与主机)IP地址的分类…

朱维群将出席用碳不排碳碳中和顶层科技路线设计开发

演讲嘉宾:朱维群 演讲题目:“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名:朱维群 性别:男 出生日期:1961-09-09 职称:教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&…

【ArcGIS Pro二次开发】(83):ProWindow和WPF的一些技巧

在ArcGIS Pro二次开发中,SDK提供了一种工具界面【ArcGIS Pro ProWindow】。 关于ProWindow的用法,之前写过一篇基础的教程: 【ArcGIS Pro二次开发】(13):ProWindow的用法_arcgispro二次开发教程-CSDN博客 主要是对几个常用控件…

Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解

A. Shuffle Party Problem Statement You are given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​. Initially, a i i a_ii ai​i for each 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n. The operation swap ( k ) \texttt{swap}(k) swap(k) for an…

Java练习(第5天)【总结】在字符串中寻找特定的字符(5种方法)

问题描述:在字符串中寻找特定字符 1、第1次出现位置 实现函数原型: int indexOf(char c) Java代码: import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护)

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护) 边缘小站的主要功能是管理用户在线下部署的整机柜设施,一个边缘小站关联一个华为云指定的区域和一个用户指定的场地,相关的资源运行状况监控等。 边缘计算 迈入5G和AI时代,新…

【嵌入式实践】【芝麻】【设计篇-2】从0到1给电动车添加指纹锁:项目可行性分析

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹,电动车进入P档等待时计时,计时超过5min则自动锁车,计时过程中按刹车可中断P档状态,同时中断锁车计时。改项目我称之为“芝…

Arcgis重分类

对于一张土地分类图,有时需要改变他的类型对应的值,如何在Arcgis中完成这个操作? 有时候,需要对土地利用类型的水土保持因子P进行赋值,林地、草地赋值给1,水田0.15,旱地0.35,水域、…

FreeRTOS学习笔记——FreeRTOS中断管理

什么是中断? 简介:让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断 例: 中断执行机制,可简单概括为三步: 中断优先级分组设置 ARM Cortex-M 使用了 8 位…

抽象类及抽象方法、多态(类,接口)、对象转型(自动,强转)、内部类(成员,静态,接口,局部,匿名内部类)--学习JavaEE的day16

day16 Day16 抽象类及抽象方法 //抽象类 public abstract class 类名{//抽象方法public abstract void method(); }abstract 关键字,用来修饰类和方法 不能与final,static,private一起修饰,不能被重写 抽象类 1.概念&#xff…

2024最新AI系统ChatGPT网站源码, AI绘画系统

一、前言说明 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持…

C# aes加密解密byte数组

using System.Security.Cryptography; using System.Text;namespace AESStu01;public class AesHelper {// AES加密密钥和向量(需要保密) private static readonly string Key "";//16长度字符串数字混合private static readonly string IV …

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…

Kubernetes 学习总结(46)—— Pod 不停重启问题分析与解决

我们在做性能测试的时候,往往会发现我们的pod服务,频繁重启,通过kubectl get pods 命令,我们来逐步定位问题。 现象:running的pod,短时间内重启次数太多。 定位问题方法:查看pod日志 kubectl get event …

寻找峰值[中等]

优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…

解决:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

解决:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8 先点击 Project Structure 查看jdk是否为1.8版本 我这jdk版本为1.8版本的,但还是运行还是报错 据以上错误显示以及上述配置,我选择的编译器是jdk1.8的,但是在i…