意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

第四章输入/输出(I/O)4.2PCL中I/O模块及类介绍(out是输出还是输入)

来源:恒创科技 编辑:恒创科技编辑部
2024-02-02 16:19:59

PCL中I/O库提供了点云文件输入输出相关的操作类,并封装了OpenNI兼容的设备源数据获取接口,可直接从众多感知设备获取点云图像等数据。I/O模块利用21个类和28个函数实现了对点云的获取、读入、存储等相关操作,其依赖于pcl_common和pcl_octree模块以及OpenNI外部开发包。

1、PCD(点云数据)文件格式

PCL中正式发布的PCD文件格式是0.7版本(PCD_V7)


第四章输入/输出(I/O)4.2PCL中I/O模块及类介绍(out是输出还是输入)

文件头格式

每一个PCD文件都包含一个文件头,它确定和声明文件中存储的点云数据的某种特性。PCD文件头必须用ASCII码来编码。PCD文件中指定的每一个文件头字段以及ASCII点数据都用一个新行(\n)分开了,PCD文件头包含下面的这些字段:

VERSION:指定PCD文件版本

FIELDS:指定一个点可以有的每一个维度和字段的名字。例如

FIELDS x y z # XYZ data

FIELDS x y z rgb #XYZ + colors

SIZE:用字节数指定每一个维度的大小。例如

unsigned char/char has 1 byte

unsigned short/short has 2 bytes

unsigned int /int hs 4 bytes

double has 8 bytes

TYPE:用一个字符指定每一个维度的类型。

I表示有符号类型,U表示无符号类型,F表示浮点类型

COUNT:指定每一个维度包含的元素数目。

WIDTH:用点的数量表示点云数据集的宽度。根据是有序点云还是无序点云,WIDTH有两层解释:

1)它能确定无序数据集的点云中点的个数.

2)它能确定有序点云数据集的宽度(一行中点的数目)。

注意:有序点云数据集,意味着点云类似于图像(或者矩阵)的结构,数据分为行和列。例如WIDTH 640,每行都有640个点。

HEIGHT:用点的数目表示点云数据集的高度。

1)它表示有序点云数据集的高度(行的总数)。

2)对于无序数据集,它被设置成1(被用来检查一个数据集是有序还是无序)

VIEWPOINT:指定数据集中点云的获取视点。VIEWPOINT可能在不同坐标系之间转换的时候应用;

POINTS:指定点云中点的总数。

DATA:指定存储点云数据的数据类型。支持两种数据类型:ASCII和二进制。

注意:文件头最后一行(DATA)的下一个字节就被看成是点云的数据部分了,它会被解释为点云数据。

警告:PCD文件的文件头部分必须以上面的顺序精确指定,且彼此之间用换行隔开。

数据存储类型:

如果以ASCII形式,每一点占据一个新行:

p_1

p_2

...

p_n

从版本1.0.1开始,用字符串"nan"表示NaN,此字符表示该点的值不存在或非法。

如果以二进制形式,这里数据是数组(向量)pcl::PointCloud.points的一份完整拷贝。存储点云数据可以用简单的ASCII形式,没点占据一行,用空格或Tab键分开,没有其他任何字符。ASCII格式允许用户打开点云文件,用sed,awk等工具来对他们进行操作。

上一篇: 02---控制移动底座3(为什么要进行爬移控制) 下一篇: 手机怎么远程登录云服务器?