分享

PCL中IO模块和类的介绍

 Y忍冬草 2017-05-05

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 文件的一个片段



1
2
3
4
5
6
7
8
9
10
11
12
13
#。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  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多