PCL库学习笔记(基础)
文件格式详解
1、PCD
PCD(Point Cloud Date,点云数据) 对应的文件格式为**(.pcd)** ,是PCL官方指定的存储格式,具有ASCII和Binary两种数据存储类型,pcd格式具有文件头,用于描述点云的整体信息。
2、文件格式说明
代码
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z
SIZE 4 4 4
TYPE F F F
COUNT 1 1 1
WIDTH 278
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 278
DATA acsii
VERSION ------PCD文件版本
FIELDS------指定一个点可以有每一个维度和字段的名字,例如:
FIELDS x y z // XYZ data
FIELDS x y z rgb // XYZ + colors
FIELDS x y z normal_xnormal_y normal_z // XYZ + surface normals
FIELDS j1 j2 j3 // moment invariants
SIZE-------用字节指定每个维度的大小,例如:
unsigned char/char // 1 byte
unsigned short/short // 2 bytes
unsigned int/int/float // 4 bytes
double // 8 bytes
TYPE------用一个字符指定每一维度的类型,现在被接受的类型有:
I – 表示有符号类型 int8(char)、int16(short)和int32(int);
U – 表示无符号类型 uint8(unsigned char)、uint16(unsigned short)和uint32(unsigned int);
F – 表示浮点类型。
COUNT------指定每一个维度包含的元素数目
默认情况下,如果没有 COUNT, 所有维度的数目被设置成 1 。
WIDHT------用点的数量表示点云数据集的宽度
1)它能确定无序数据集的点云中点的个数;
2)它能确定有序点云数据集的宽度(一行中点的数目)。
例如:
WIDTH 640 // 每行有640个点
HIGHT------用点的数量表示点云数据集的高度
1)它表示有序点云数据集的高度(行的总数);
2)对于无序数据集它被设置成1(被用来检查一个数据集是有序还是无序)。
//有序点云例子:
WIDTH 640 //像图像一样的有序结构,有640行和480列,
HEIGHT 480 // 这样该数据集中共有640*480=307200个点
//无序点云:
WIDTH 307200
HEIGHT 1 //有307200个点的无序点云数据集
VIEWPOINT------指定数据集中点云的获取视点
VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时也比较有用,例如曲面法线,在判断方向一致性时,需要知道视点的方位,
视点信息被指定为平移(tx, ty, tz)+ 四元数(qw, qx, qy, qz)。
默认值是:VIEWPOINT 0 0 0 1 0 0 0
POINTS------指定点云中点的总数,例如:
POINTS 307200 //点云中点的总数为307200
DATA------指定存储点云数据的数据类型
从0.7版本开始,支持两种数据类型::ASCII形式和binary形式
注意:
1、文件头DATA的下一字节就被看成是点云的数据部分,它会被解释成点云数据;
2、PCD文件的文件头部分必须以上面介绍的顺序精确指定。
示例
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z
SIZE 4 4 4
TYPE F F F
COUNT 1 1 1
WIDTH 89
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 89
DATA ascii
-21.368 -137.98199 -23
-21.301001 -137.745 -23
-21.257 -137.52699 -23
-21.219999 -137.34801 -23
-21.153 -137.12399 -23
-21.117001 -136.967 -23
-21.066999 -136.71001 -23
-20.999001 -136.47301 -23
-20.954 -136.23599 -23
-20.882 -135.97501 -23
...
3、数据存储类型
在0.7版本中,.PCD文件格式用两种模式存储数据:
1>ASCII形式:每一点放在一个新行上
p_1
p_2
p_3
p_4
...
p_n
注意: 从PCL 1.0.1版本开始,用字符串“nan”表示NaN,此字符表示该点的值不存在或非法等。
2>binary格式:数据是pcl::PointCloud::points数组或者vector的完整内存复制。Linux系统中,使用mmap/munmap操作使得数据读/写尽可能快
下面附上一个PCD文件的代码,读者可以保存并用于代码复现:
# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
0.97192 0.278 0 4.2108e+06
0.944 0.29474 0 4.2108e+06
0.98111 0.24247 0 4.2108e+06
0.93655 0.26143 0 4.2108e+06
0.91631 0.27442 0 4.2108e+06
0.81921 0.29315 0 4.2108e+06
0.90701