(五)IO库教程一--PCD(Point Cloud Data)文件格式

PCL中的3D特征

PCD(Point Cloud Data)文件格式

本文讲解了PCD(Point Cloud Data)的文件格式,还有在PCL中对它的用法

PCD出现的背景

PCD文件格式的出现,是为了弥补其他文件格式在PCL处理N维点云中的各种问题。
PCD不是第一种支持3D点云数据的格式:
- PLY - 一种多边形文件格式
- STL - CAD软件得到的格式
- OBJ - 从几何学上定义的文件
- X3D - ISO标准的基于XML的文件格式
- 其他
以上这些文件格式都有各自的缺点,因为他们是在不同时间根据不同的需求而提出来的,当时一些传感器技术和算法都还没有出现。

文件头

每个PCD文件都包含一个头部,声明了存于这个文件的点云的一些属性。PCD的文件头必须用ASCII码编码

在PCD文件中,文件头的主体和用ASCII码书写的点数据(下面会讲)都要用换行符(\n)来分开。
在0.7版本的PCD文件格式中,PCD头部包含下列字段:
- VESION - 说明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 - 说明每个字段的字节数大小。例如:
FIELDS x y z rgb
SIZE 4 4 4 4

这就说明了对于点云中的每个点,包含了它的X,y,z,rgb信息,并且每个字段都占4个字节
- TYPE - 用一个字符来说明每个字段的数据类型,这些数据类型包括:
- I - int8(char),int16(short),int32(int)
- U - uint8(Unsigned char),uint16(unsigned short),uint32(unsigned int)
- F - float
- COUNT - 说明了每个字段有多少个元素。举个例子,x字段通常只有一个元素,但是特征描述子,比如VFH就有308个元素。实际上,这是对每个点引入N维直方图描述子,并且将他们作为一个连续的内存块来看待。默认情况下,如果COUNT没有直接表示出来,所有字段的COUNT都是1。
- WIDTH - 用点的数量说明了点云数据集宽度。WIDTH有两层含义。
- 对于无序点云数据集而言,它就表示点云中点的数量(等价于下面的POINTS)。
- 对于有序点云数据集而言,它表示有序点云的宽度(一行点云的数目)。

有序点云数据集,意味着点云是类似于图像(或矩阵)的结构,它有行跟列。这种点云可以由立体视觉摄像机和TOF摄像机产生。它的优势在于,预先了解想邻点(和像素类似)的关系,邻域操作更加高效,加速了计算并降低了PCL中某些算法的成本。
- HEIGHT - 用点的数量说明了点云数据集高度。HEIGHT有两层含义。
- 对于有序点云数据集而言,它表示有序点云的高度(一列点云的数目)。
- 对于无序点云数据集而言,通常被设为1(用来区分是否为有序点云)。
举例:

WIDTH 640       # 有序类似于图像结构,640列,480行
HEIGHT 480      # 因此这个点云有640*480=307200个点

WIDTH 307200
HEIGHT 1        # 无序点云,有307200个点
  • VIEWPOINT - 说明了这个点云数据集的获取视点。在后续的处理中可能会用到,比如不同坐标系下的变换,或是帮助获取表面法线向量特征,在判断方向一致性时,需要知道视点的方位。
    视点由一组平移向量(tx,ty,tz)和一组四元数(qw,qx,qy,qz)组成。默认值如下:
VIEWPOINT 0 0 0 1 0 0 0
  • POINTS - 说明了点云中所有点的数量。从0.7版本的PCD开始这个字段就有些多余了,所以我们希望之后可以去除这个字段。举例:
POINTS 307200
  • DATA - 说明了点云数据存储的数据类型。对于0.7版本PCD来说,支持两种数据类型:ASCII码和二进制码。
    在文件头最后一行(DATA)的下一字节就被认为是点云数据了。
    PCD文件头部必须严格按照下面的方式排列:
VERSION
FIELDS
SIZE
TYPE
COUNT
WIDTH
HEIGHT
VIEWPOINT
POINTS
DATA

数据存储类型

对于0.7版本PCD,它使用两种模式存储数据: - ASCII码,一个点用一行ASCII码表示:
p_1
p_2
p_3
p_4
...
p_n

从1.0.1版本PCD开始用“nan”来表示NaN

  • 二进制码,此处的数据完全是pcl:: PointCloud.points(array/vector)的内存拷贝。在Linux系统中,我们用mmap/munmap操作符来以最快的速度进行读写数据。
    使用哪种存储方式依据我们的应用环境。用简单直白的ASCII码表示,一行表示一个点,中间用空格或者tab键分开,不插入其他字符。或者是,用简单又快速的二进制码。ASCII码形式的点云允许用户打开点云文件,并用标准软件工具比如gnuplot将点云画出来,或者用sed,awk等软件操作点云。

PCD点云格式的优势

前面提到的文件结构都不具备PCD的灵活度和速度。下面列出了PCD文件格式的几个明显优势:
- 存储和处理有序点云数据集的能力-这对于实时处理应用来说具有重要意义,并且在增强现实(AR),机器人等研究领域应用广泛。
- 二进制mmap/munmap数据类型是从硬盘读写点云数据最快的一种格式。
- 保存了不同的数据类型(支持char,short,int,float ,double)使得点云数据处理和存储都变得十分灵活高效。无效的点云维度通常被存储为NAN类型。
- 特征描述子的N维直方图-对于3D识别/计算机视觉的应用具有重要意义
另一个重要的优势在于,PCD数据格式是最适配于PCL库的,因此可以在PCL的应用上获得最好的性能,而不是先将其他类型转为PCL内置类型,这样会造成不必要的时间消耗。

虽然PCD是PCL的内置文件格式,但是pcl_io库也应该支持存储和加载其他提到的文件格式。

举例

下面是一个PCD文件的片段,可以将其导入CloudCompare软件中查看。

# .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 0.24109 0 4.2108e+06
0.83239 0.23398 0 4.2108e+06
0.99185 0.2116 0 4.2108e+06
0.89264 0.21174 0 4.2108e+06
0.85082 0.21212 0 4.2108e+06
0.81044 0.32222 0 4.2108e+06
0.74459 0.32192 0 4.2108e+06
0.69927 0.32278 0 4.2108e+06
0.8102 0.29315 0 4.2108e+06
0.75504 0.29765 0 4.2108e+06
0.8102 0.24399 0 4.2108e+06
0.74995 0.24723 0 4.2108e+06
0.68049 0.29768 0 4.2108e+06
0.66509 0.29002 0 4.2108e+06
0.69441 0.2526 0 4.2108e+06
0.62807 0.22187 0 4.2108e+06
0.58706 0.32199 0 4.2108e+06
0.52125 0.31955 0 4.2108e+06
0.49351 0.32282 0 4.2108e+06
0.44313 0.32169 0 4.2108e+06
0.58678 0.2929 0 4.2108e+06
0.53436 0.29164 0 4.2108e+06
0.59308 0.24134 0 4.2108e+06
0.5357 0.2444 0 4.2108e+06
0.50043 0.31235 0 4.2108e+06
0.44107 0.29711 0 4.2108e+06
0.50727 0.22193 0 4.2108e+06
0.43957 0.23976 0 4.2108e+06
0.8105 0.21112 0 4.2108e+06
0.73555 0.2114 0 4.2108e+06
0.69907 0.21082 0 4.2108e+06
0.63327 0.21154 0 4.2108e+06
0.59165 0.21201 0 4.2108e+06
0.52477 0.21491 0 4.2108e+06
0.49375 0.21006 0 4.2108e+06
0.4384 0.19632 0 4.2108e+06
0.43425 0.16052 0 4.2108e+06
0.3787 0.32173 0 4.2108e+06
0.33444 0.3216 0 4.2108e+06
0.23815 0.32199 0 4.808e+06
0.3788 0.29315 0 4.2108e+06
0.33058 0.31073 0 4.2108e+06
0.3788 0.24399 0 4.2108e+06
0.30249 0.29189 0 4.2108e+06
0.23492 0.29446 0 4.808e+06
0.29465 0.24399 0 4.2108e+06
0.23514 0.24172 0 4.808e+06
0.18836 0.32277 0 4.808e+06
0.15992 0.32176 0 4.808e+06
0.08642 0.32181 0 4.808e+06
0.039994 0.32283 0 4.808e+06
0.20039 0.31211 0 4.808e+06
0.1417 0.29506 0 4.808e+06
0.20921 0.22332 0 4.808e+06
0.13884 0.24227 0 4.808e+06
0.085123 0.29441 0 4.808e+06
0.048446 0.31279 0 4.808e+06
0.086957 0.24399 0 4.808e+06
0.3788 0.21189 0 4.2108e+06
0.29465 0.19323 0 4.2108e+06
0.23755 0.19348 0 4.808e+06
0.29463 0.16054 0 4.2108e+06
0.23776 0.16054 0 4.808e+06
0.19016 0.21038 0 4.808e+06
0.15704 0.21245 0 4.808e+06
0.08678 0.21169 0 4.808e+06
0.012746 0.32168 0 4.808e+06
-0.075715 0.32095 0 4.808e+06
-0.10622 0.32304 0 4.808e+06
-0.16391 0.32118 0 4.808e+06
0.00088411 0.29487 0 4.808e+06
-0.057568 0.29457 0 4.808e+06
-0.0034333 0.24399 0 4.808e+06
-0.055185 0.24185 0 4.808e+06
-0.10983 0.31352 0 4.808e+06
-0.15082 0.29453 0 4.808e+06
-0.11534 0.22049 0 4.808e+06
-0.15155 0.24381 0 4.808e+06
-0.1912 0.32173 0 4.808e+06
-0.281 0.3185 0 4.808e+06
-0.30791 0.32307 0 4.808e+06
-0.33854 0.32148 0 4.808e+06
-0.21248 0.29805 0 4.808e+06
-0.26372 0.29905 0 4.808e+06
-0.22562 0.24399 0 4.808e+06
-0.25035 0.2371 0 4.808e+06
-0.29941 0.31191 0 4.808e+06
-0.35845 0.2954 0 4.808e+06
-0.29231 0.22236 0 4.808e+06
-0.36101 0.24172 0 4.808e+06
-0.0034393 0.21129 0 4.808e+06
-0.07306 0.21304 0 4.808e+06
-0.10579 0.2099 0 4.808e+06
-0.13642 0.21411 0 4.808e+06
-0.22562 0.19323 0 4.808e+06
-0.24439 0.19799 0 4.808e+06
-0.22591 0.16041 0 4.808e+06
-0.23466 0.16082 0 4.808e+06
-0.3077 0.20998 0 4.808e+06
-0.3413 0.21239 0 4.808e+06
-0.40551 0.32178 0 4.2108e+06
-0.50568 0.3218 0 4.2108e+06
-0.41732 0.30844 0 4.2108e+06
-0.44237 0.28859 0 4.2108e+06
-0.41591 0.22004 0 4.2108e+06
-0.44803 0.24236 0 4.2108e+06
-0.50623 0.29315 0 4.2108e+06
-0.50916 0.24296 0 4.2108e+06
-0.57019 0.22334 0 4.2108e+06
-0.59611 0.32199 0 4.2108e+06
-0.65104 0.32199 0 4.2108e+06
-0.72566 0.32129 0 4.2108e+06
-0.75538 0.32301 0 4.2108e+06
-0.59653 0.29315 0 4.2108e+06
-0.65063 0.29315 0 4.2108e+06
-0.59478 0.24245 0 4.2108e+06
-0.65063 0.24399 0 4.2108e+06
-0.70618 0.29525 0 4.2108e+06
-0.76203 0.31284 0 4.2108e+06
-0.70302 0.24183 0 4.2108e+06
-0.77062 0.22133 0 4.2108e+06
-0.41545 0.21099 0 4.2108e+06
-0.45004 0.19812 0 4.2108e+06
-0.4475 0.1673 0 4.2108e+06
-0.52031 0.21236 0 4.2108e+06
-0.55182 0.21045 0 4.2108e+06
-0.5965 0.21131 0 4.2108e+06
-0.65064 0.2113 0 4.2108e+06
-0.72216 0.21286 0 4.2108e+06
-0.7556 0.20987 0 4.2108e+06
-0.78343 0.31973 0 4.2108e+06
-0.87572 0.32111 0 4.2108e+06
-0.90519 0.32263 0 4.2108e+06
-0.95526 0.34127 0 4.2108e+06
-0.79774 0.29271 0 4.2108e+06
-0.85618 0.29497 0 4.2108e+06
-0.79975 0.24326 0 4.2108e+06
-0.8521 0.24246 0 4.2108e+06
-0.91157 0.31224 0 4.2108e+06
-0.95031 0.29572 0 4.2108e+06
-0.92223 0.2213 0 4.2108e+06
-0.94979 0.24354 0 4.2108e+06
-0.78641 0.21505 0 4.2108e+06
-0.87094 0.21237 0 4.2108e+06
-0.90637 0.20934 0 4.2108e+06
-0.93777 0.21481 0 4.2108e+06
0.22244 -0.0296 0 4.808e+06
0.2704 -0.078167 0 4.808e+06
0.24416 -0.056883 0 4.808e+06
0.27311 -0.10653 0 4.808e+06
0.26172 -0.10653 0 4.808e+06
0.2704 -0.1349 0 4.808e+06
0.24428 -0.15599 0 4.808e+06
0.19017 -0.025297 0 4.808e+06
0.14248 -0.02428 0 4.808e+06
0.19815 -0.037432 0 4.808e+06
0.14248 -0.03515 0 4.808e+06
0.093313 -0.02428 0 4.808e+06
0.044144 -0.02428 0 4.808e+06
0.093313 -0.03515 0 4.808e+06
0.044144 -0.03515 0 4.808e+06
0.21156 -0.17357 0 4.808e+06
0.029114 -0.12594 0 4.2108e+06
0.036583 -0.15619 0 4.2108e+06
0.22446 -0.20514 0 4.808e+06
0.2208 -0.2369 0 4.808e+06
0.2129 -0.208 0 4.808e+06
0.19316 -0.25672 0 4.808e+06
0.14497 -0.27484 0 4.808e+06
0.030167 -0.18748 0 4.2108e+06
0.1021 -0.27453 0 4.808e+06
0.1689 -0.2831 0 4.808e+06
0.13875 -0.28647 0 4.808e+06
0.086993 -0.29568 0 4.808e+06
0.044924 -0.3154 0 4.808e+06
-0.0066125 -0.02428 0 4.808e+06
-0.057362 -0.02428 0 4.808e+06
-0.0066125 -0.03515 0 4.808e+06
-0.057362 -0.03515 0 4.808e+06
-0.10653 -0.02428 0 4.808e+06
-0.15266 -0.025282 0 4.808e+06
-0.10653 -0.03515 0 4.808e+06
-0.16036 -0.037257 0 4.808e+06
0.0083286 -0.1259 0 4.2108e+06
0.0007442 -0.15603 0 4.2108e+06
-0.1741 -0.17381 0 4.808e+06
-0.18502 -0.02954 0 4.808e+06
-0.20707 -0.056403 0 4.808e+06
-0.23348 -0.07764 0 4.808e+06
-0.2244 -0.10653 0 4.808e+06
-0.23604 -0.10652 0 4.808e+06
-0.20734 -0.15641 0 4.808e+06
-0.23348 -0.13542 0 4.808e+06
0.0061083 -0.18729 0 4.2108e+06
-0.066235 -0.27472 0 4.808e+06
-0.17577 -0.20789 0 4.808e+06
-0.10861 -0.27494 0 4.808e+06
-0.15584 -0.25716 0 4.808e+06
-0.0075775 -0.31546 0 4.808e+06
-0.050817 -0.29595 0 4.808e+06
-0.10306 -0.28653 0 4.808e+06
-0.1319 -0.2831 0 4.808e+06
-0.18716 -0.20571 0 4.808e+06
-0.18369 -0.23729 0 4.808e+06

猜你喜欢

转载自blog.csdn.net/jiaojialulu/article/details/69348874
今日推荐