zoukankan      html  css  js  c++  java
  • 点云格式-pcd

    每一个pcd文件包含一个文件头,它声明文件中存储的点云数据的特性(元数据)。pcd文件头必须用ASCII码来编码。头文件属性字段都以一个新行( )分开。从0.7版本开始,pcd文件头包含下面的字段:

    .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 has 1 byte

    unsigned short/short has 2 bytes

    unsignedint/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有两层解释:

    1)它能确定无序数据集的点云中点的个数(和下面的POINTS一样);

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

    注意:有序点云数据集,意味着点云是类似于图像(或者矩阵)的结构,数据分为行和列。这种点云的实例包括立体摄像机和时间飞行摄像机生成的数据。有序数据集的优势在于,预先了解相邻点(和像素点类似)的关系,邻域操作更加高效,这样就加速了计算并降低了PCL中某些算法的成本。

    例如:

    WIDTH 640       # 每行有640个点

    ·HEIGHT –用点的数目表示点云数据集的高度。类似于WIDTH ,HEIGHT也有两层解释:

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

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

    有序点云例子:

    WIDTH 640       # 像图像一样的有序结构,有640行和480列,

    HEIGHT 480      # 这样该数据集中共有640*480=307200个点

    无序点云例子:

    WIDTH 307200

    HEIGHT 1        # 有307200个点的无序点云数据集

    ·VIEWPOINT–指定数据集中点云的获取视点。VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时也比较有用,例如曲面法线,在判断方向一致性时,需要知道视点的方位,

    视点信息被指定为平移(txtytz)+四元数(qwqxqyqz)。默认值是:

    VIEWPOINT 0 0 0 1 0 0 0

    ·POINTS–指定点云中点的总数。从0.7版本开始,该字段就有点多余了,因此有可能在将来的版本中将它移除。

    例子:

    POINTS 307200   #点云中点的总数为307200

    ·DATA –指定存储点云数据的数据类型。从0.7版本开始,支持两种数据类型:ascii和二进制。查看下一节可以获得更多细节。

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

    警告:PCD文件的文件头部分必须以上面的顺序精确指定,也就是如下顺序:

    VERSION、FIELDS、SIZE、TYPE、COUNT、WIDTH、HEIGHT、VIEWPOINT、POINTS、DATA

    之间用换行隔开。

    数据存储类型

    在0.7版本中,.pcd文件格式用两种模式存储数据:

    ASCII形式

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

    p_1

    p_2

    ...

    p_n

    注意:从PCL 1.0.1版本开始,用字符串“nan”表示NaN,此字符表示该点的值不存在或非法等。

    二进制形式

    如果以二进制形式,这里数据是数组(向量)pcl::PointCloud.points的一份完整拷贝,在Linux系统上,我们用mmap/munmap操作来尽可能快的读写数据,存储点云数据可以用简单的ascii形式,每点占据一行,用空格键或Tab键分开,没有其他任何字符。也可以用二进制存储格式,它既简单又快速,当然这依赖于用户应用。ascii格式允许用户打开点云文件,使用例如gunplot这样的标准软件工具更改点云文件数据,或者用sed、awk等工具来对它们进行操作。

    示例:

    # .PCD v.7 - Point Cloud Data file format
    VERSION .7
    FIELDS x y z
    SIZE 8 8 8
    TYPE F F F
    COUNT 1 1 1
    WIDTH 55061
    HEIGHT 1
    VIEWPOINT 0 0 0 1 0 0 0
    POINTS 55061
    DATA ascii
    165.910849 111.848930 855.473457
    232.670594 148.455302 1272.738956
    232.670594 148.455302 1272.738956
    411.064056 234.325784 1998.515717

  • 相关阅读:
    IOS中图片拉伸技巧与方法总结
    iOS xcode8提交 iOS10 “此构建版本无效”
    ios 通过代码调节屏幕亮度
    修改UIBarButtonItem字体大小、颜色等相关属性
    iOS tableView编辑添加多个按钮
    iOS开发 适配iOS10
    iOS开发系列--并行开发其实很容易
    CATransform3D 特效详解
    iOS 图片切圆角的另外两种方式
    获取UILabel宽度的方法
  • 原文地址:https://www.cnblogs.com/yif1991/p/9815943.html
Copyright © 2011-2022 走看看