PCL点云库学习笔记(输入输出)
输入输出(I\O)
一、概述
IO库包含用于读写点云数据(PCD)文件的类和函数,以及从各种传感设备捕获点云。
二、PCD 点云格式
1.为什么用一种新的文件格式?
PCD文件格式的出现,是因为现有的文件结构不支持由PCL库引进n维点类型机制处理过程中的某些扩展。PCD不是第一个支持3D点云数据的文件类型,尤其是计算机图形学和计算几何学领域,已经创建了很多格式来描述任意多边形和激光扫描仪获取的点云。
2.文件头
每个PCD文件都包含一个头,用于标识和声明文件中存储的点云数据的某些属性。PCD的头必须用ASCII编码。
·VERSION –指定PCD文件版本
·FIELDS –指定一个点可以有的每一个维度和字段的名字。
FIELDS x y z # XYZ data
FIELDS x y z rgb # XYZ + colors
FIELDS x y z normal_x normal_y normal_z # XYZ + surface normals
FIELDS j1 j2 j3 # moment invariants
·SIZE –用字节数指定每一个维度的大小。
unsigned char/char has 1 byte
unsigned short/short has 2 bytes
unsigned int/int/float has 4 bytes
double has 8 bytes
·TYPE –用一个字符指定每一个维度的类型。
I –表示有符号类型int8(char)、int16(short)和int32(int);
U – 表示无符号类型uint8(unsigned char)、uint16(unsigned short)和uint32(unsigned int);
F –表示浮点类型。
·COUNT –指定每一个维度包含的元素数目。
例如,x这个数据通常有一个元素,但是像VFH这样的特征描述子就有308个。实际上这是在给每一点引入n维直方图描述符的方法,把它们当做单个的连续存储块。默认情况下,如果没有COUNT,所有维度的数目被设置成1。
·WIDTH –用点的数量表示点云数据集的宽度。
它能确定无序的点云中点的个数;也能确定有序点云一行中点的数目。有序点云数据集,意味着点云是类似于图像(或者矩阵)的结构,数据分为行和列。
WIDTH 640 # 每行有640个点
·HEIGHT –用点的数目表示点云数据集的高度。
它表示有序点云数据集的高度(行的总数);对于无序数据集它被设置成1(被用来检查一个数据集是有序还是无序)。
有序点云例子:
WIDTH 640 # 像图像一样的有序结构,有640行和480列,
HEIGHT 480 # 这样该数据集中共有640*480=307200个点
无序点云例子:
WIDTH 307200
HEIGHT 1 # 有307200个点的无序点云数据集
·VIEWPOINT–指定数据集中点云的获取视点。
VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时也比较有用,例如曲面法线,在判断方向一致性时,需要知道视点的方位,
视点信息被指定为平移(tx ty tz)+四元数(qw qx qy q