PCL中IO模块和类的介绍

I/O模块中共有21个类

(1)class pcl::FIleReader:定义了PCD文件的读取接口,主要用作其他读取类的父类   pcl::FileReader有pcl::PCDReader和pcl::PLYReader子类

 (2)class pcl::FIleWrite : 与class pcl::FIleReader对应,是写入PCD文件类的接口定义,作为其他写入类的父类,pcl::Filewriter有pcl::PCDwriter和pcl::PLYWriter子类

(3) class pcl::Grabber:类Grabber为PCL1.X对应的设备驱动接口的基类定义

     父类                    子类

                          pcl::ONIGrabber

pcl::Grabber      pcl::OpenNIGrabber

                          pcl::PCDGrabberBase     ----------pcl::PCDGrabber<  PointT  >

(4)classopenni_wrapper::OpenNIDevice:定义OpenNI设备的基类,用于获取包括红外数据,RGB数据,深度图像数据

                      父类                                                                 子类

                                                                  openni_wrapper::DeviceONI

openni_wrapper::OpenNIDevice               openni_wrapper::DeviceKinect

                                                                 openni_wrapper::DevicePrimesense

                                                                openni_wrapper::DeviceXtionPro

PCD(点云数据)文件格式,以下几种格式

(1)PLY是一种多边形文件格式,

(2)STL是3D System公司创建的模型文件格式,主要应用于CAD,CAM领域

(3)OBJ是从几何学上定义的文件格式,

(4)X3D是符合ISO标准的基于XML的文件格式,表示3D计算机图形数据

PCD文件头格式

每个PCD文件包含一个文件头,确定和声明文件中存储这点云的数据的某种特性,PCD文件必须用ASCII码来编码,

   (1)VERSION---------指定PCD文件版本

   (2) FIELSS------------指定一个点恶意有的每一个维度和字段的名字例如

                                         FILEDS  x y z                                                  #XYZ data

                                        FILEDS x y z rgb                                              #XYZ + color

                            FILEDS x y z normal_x normal_y normal_z                  #XYZ +surface normal

                                FILEDS j1 j2 j3                                                         #moment invariants

                                   .....

     (3) SIZE-----------用字节数指定每一个维度的大小        例如

                   unsigned  char/char?      has  1 byte

                   unsigned  short/short?       has  2 byte

                     double         ?has  8 byte

       (4) TYPE------------用一个字符指定每一个维度的类型  被接受类型有

              I----------------表示有符号类型   int8(char)           int16 (short)     int32(int)

             U----------------表示无符号类型   ------------------

             F----------------表示浮点类型

        (5)COUNT----------指定每一维度包含的元数目(默认情况下,没有设置 的话,所有维度的数目被设置为1)

(6)WIDTH------用点的数量表示点云数据集的宽度,根据有序点云还是无序点云,WIDTH有两层解释:

                                                 1,它能确定无序数据集的点云中点的个数,

                                                 2,它能确定有序点云数据集的宽度

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

(7)HEIGHT---------------用点的数目表示点云数据集的高度。类似于WIDTH也有两层解释,

有序点云的例子:WIDTH    640            #像图像一样的有序结构,有640行480列,

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

无序点云例子:

                            WIDTH  307200

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

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

           视点信息被指为平移(tx ty tz) +四元数(qw qx qy qz)

(9 ) POINTS----------------指定点云中点的总数

(10) DATA---------------指定存储点云数据的数据结构,有两种形式:ASCII和二进制

(注意PCD文件的文件头部分必须是以上部分顺序的精确的指定)

4  数据存储类型:

              (1)如果易ASCII形式,每一点占据一个新行,

                (2)如果以二进制的形式,这里数据是数组向量的PCL

例子   PCD 文件的一个片段

#。PCD  v.7  --Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4 
TYPE F FFF
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.218e+06
0.90805   0.35641  0 4.2108e+06  

微信公众号号可扫描二维码一起共同学习交流

未完待续**************************

posted @ 2017-02-27 11:13  Being_young  阅读(4512)  评论(0编辑  收藏  举报