pcd文件介绍
- 一、PCD文件格式
- 二、为什么要使用新的文件格式?
- 三、PCD 版本
- 四、文件格式头
- 五、数据存储类型
- 六、优于其他文件格式
- 七、结果展示
- 八、相关链接
一、PCD文件格式
本文档描述PCD(点云数据)文件格式,以及它在点云库(PCL)中的使用方式。
二、为什么要使用新的文件格式?
PCD 文件格式并不是要重新发明轮子,而是为了补充由于某种原因不支持/不支持 PCL 为 nD 点云处理带来的某些扩展的现有文件格式。
PCD 不是第一种支持 3D 点云数据的文件类型。尤其是计算机图形学和计算几何学社区,已经创建了多种格式来描述使用激光扫描仪获取的任意多边形和点云。其中一些格式包括:
- PLY - 一种多边形文件格式,由 Turk 等人在斯坦福大学开发
- STL - 3D Systems 创建的立体光刻 CAD 软件的原生文件格式
- OBJ - 一种由 Wavefront Technologies 首次开发的几何定义文件格式
- X3D - 用于表示 3D 计算机图形数据的 ISO 标准基于 XML 的文件格式
- 其他格式
所有上述文件格式都有几个缺点,如下一节所述——这是很自然的,因为它们是在今天的传感技术和算法发明之前,为不同的目的在不同的时间创建的,。
三、PCD 版本
在点云库 (PCL) 1.0 版发布之前,PCD 文件格式可能具有不同的修订号。它们用 PCD_Vx 编号(例如,PCD_V5、PCD_V6、PCD_V7 等)并代表 PCD 文件的版本号 0.x。
然而,PCL 中 PCD 文件格式的官方入口点应该是版本0.7 (PCD_V7)。
四、文件格式头
每个 PCD 文件都包含一个标头,用于标识和声明存储在文件中的点云数据的某些属性。PCD 的标头必须以 ASCII 编码。
note:
PCD 文件中指定的每个标题条目以及 ascii 点数据(见下文)使用新行 (\n) 分隔。
从 0.7 版开始,PCD 标头包含以下条目:
-
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 - 以字节为单位指定每个维度的大小。例子:
- 无符号字符/字符有 1 个字节
- unsigned short / short有 2 个字节
- unsigned int / int / float有 4 个字节
- double有 8 个字节
-
TYPE - 将每个维度的类型指定为字符。当前接受的类型是:
- I - 表示有符号类型 int8 ( char )、int16 ( short ) 和 int32 ( int )
- U - 代表无符号类型 uint8 ( unsigned char ), uint16 ( unsigned short ), uint32 ( unsigned int )
- F - 代表浮点类型
-
COUNT - 指定每个维度有多少个元素。例如,x数据通常有 1 个元素,但像VFH这样的特征描述符 有 308 个。基本上这是一种在每个点引入 nD 直方图描述符并将它们视为单个连续内存块的方法。默认情况下,如果COUNT不存在,则所有维度的计数都设置为 1。
-
WIDTH - 以点数指定点云数据集的宽度。宽度有两个含义:
- 它可以为无组织的数据集指定云中的总点数(等于**POINTS,**见下文);
- 它可以指定有组织的点云数据集的宽度(一行中的总点数)。
另见HEIGHT。
note:
一个有组织的点云数据集是赋予类似于一个有组织的图像(或矩阵)状的结构,其中,数据被划分为行和列的点云的名称。此类点云的示例包括来自立体相机或飞行时间相机的数据。有组织的数据集的优点在于,通过了解相邻点(例如像素)之间的关系,最近邻操作的效率要高得多,从而加快了计算速度并降低了 PCL 中某些算法的成本。
例子:
WIDTH 640 # there are 640 points per line
-
HEIGHT - 以点数指定点云数据集的高度。高度有两个含义:
- 它可以指定一个有组织的点云数据集的高度(总行数);
- 对于无组织的数据集,它设置为1(因此用于检查数据集是否有组织)。
例子:
WIDTH 640 # Image-like organized structure, with 480 rows and 640 columns, HEIGHT 480 # thus 640*480=307200 points total in the dataset
例子:
WIDTH 307200 HEIGHT 1 # unorganized point cloud dataset with 307200 points
-
VIEWPOINT - 指定数据集中点的采集视点。这可能会在以后用于构建不同坐标系之间的变换,或用于帮助需要一致方向的表面法线等特征。
视点信息被指定为平移(tx ty tz)+四元数(qw qx qy qz)。默认值为:
VIEWPOINT 0 0 0 1 0 0 0
-
POINTS - 指定云中的总点数。从 0.7 版本开始,它的用途有点多余,因此我们希望在未来的版本中将其删除。
例子:
POINTS 307200 # the total number of points in the cloud
-
DATA - 指定存储点云数据的数据类型。从 0.7 版本开始,支持两种数据类型:ascii和binary。有关更多详细信息,请参阅下一节。
note:
标题最后一行 ( DATA )之后的下一个字节被视为点云数据的一部分,并将被解释为这样。
警告:
必须按照上述顺序精确指定标题条目,即:
VERSION FIELDS SIZE TYPE COUNT WIDTH HEIGHT VIEWPOINT POINTS DATA
五、数据存储类型
从 0.7 版本开始,.PCD文件格式使用两种不同的数据存储模式:
-
以ASCII格式,每个点都在一个新行上:
p_1 p_2 p_3 p_4 ...p_n
注意:从 PCL 1.0.1 版开始,NaN 的字符串表示为“nan”。
- 以二进制形式,其中数据是pcl::PointCloud.points数组/向量的完整内存副本 。在 Linux 系统上,我们使用mmap / munmap 操作来实现对数据的最快读/写访问。
以简单的 ascii 格式存储点云数据,其中每个点在一行、空格或制表符上分开,上面没有任何其他字符,以及以二进制转储格式存储,使我们能够两全其美:简单性和速度,取决于底层应用程序。ascii 格式允许用户打开点云文件并使用gnuplot等标准软件工具绘制它们 或使用sed、awk等工具操作它们。
六、优于其他文件格式
将 PCD 作为(另一种)文件格式可以看作是 PCL 遭受了未发明在这里综合症。实际上,情况并非如此,因为上述文件格式都没有提供 PCD 文件的灵活性和速度。一些明确说明的优势包括:
- 存储和处理有组织的点云数据集的能力——这对于实时应用和研究领域(如增强现实、机器人技术等)极为重要;
- 二进制mmap / munmap数据类型是将数据加载和保存到磁盘的最快方法。
- 存储不同的数据类型(支持的所有原始类型:char、short、int、float、double)允许点云数据在存储和处理方面灵活高效。无效的点维度通常存储为 NAN 类型。
- 特征描述符的 nD 直方图——对于 3D 感知/计算机视觉应用非常重要
另一个优点是,通过控制文件格式,我们可以最好地将其适应 PCL,从而获得相对于 PCL 应用程序的最高性能,而不是将不同的文件格式适应 PCL 作为本机类型并通过转换引入额外的延迟职能。
注意:
尽管 PCD(点云数据)是PCL 中的原生文件格式,但 pcl_io库也应该提供以上述所有其他文件格式保存和加载数据的可能性。
七、结果展示
八、相关链接
pcd介绍
测试数据下载链接:https://pan.baidu.com/s/1a6QM3TnzDXV_LrmESHsHEw
提取码:2ngf