点云库(PCL)——基本结构

PCL1.x版本中的数据类型为: pcl:PointCloud<pcl::PointCloud>
PointCloud 是C++ 的一个类(class),包含了以下数据字段:

  • pcl:width<pcl::PointCloud::width>(int)
    以点数为单位指定点云数据集的宽度。宽度有两种含义:
    • 可以为无组织数据集指定云中的点的总数(等于点中元素的数量–见下文);
    • 可以指定有组织点云数据集(organized point cloud)的宽度(行中的点总数)。

NOTE:有组织的点云数据集(organized point cloud)是为类似于有组织的图像(或矩阵)结构的点云指定的名称,其中数据被拆分为行和列。这种点云的例子包括来自立体相机或Time-of-flight相机的数据。有组织的数据集的优点是,通过了解相邻点(如像素)之间的关系,最近邻操作更加有效,从而加快了计算速度,降低了PCL中某些算法的成本。

NOTE:可投影点云数据集(projectable point cloud)是指根据针孔摄影机模型在有组织点云中的点(u,v)索引与实际三维值之间具有相关性的点云的名称。这种相关性可以用最简单的形式表示:u=fx/z和v=fy/z
例如:

cloud.width = 640;//there are 640 points per line
  • pcl:height<pcl::PointCloud::height>(int)
    以点数为单位指定点云数据集的高度。高度有两种含义:
    • 可以指定有组织点云数据集(organized point cloud)的高度(行的总数)。
    • 对于无组织的数据集,它设置为1(因此用于检查数据集是否为有组织的)
      例如:
cloud.width = 640;//Image-like organized structure, with 480 rows and 640 colums
cloud.height = 480;//thus 640*480=307200 points total in the dataset

cloud.width = 307200;
cloud.heigth = 1;//unorganized point cloud dataset with 307200 points
  • pcl:points<pcl::PointCloud::points>(std::vector< PointT >)
    包含存储PointT类型的所有点的数据数组。例如,对于包含XYZ数据的点云,点包含pcl::PointXYZ元素的向量:
pcl::PointCloud<pcl::PointXYZ> cloud;
std::vector<pcl::PointXYZ> data = cloud.points;
  • pcl:is_dense<pcl::PointCloud::is_dense>(bool)
    指定点中的所有数据是有限的(true),或者指定某些点的XYZ值可能包含Inf/NaN值(false)。
  • pcl:sensor_origin<pcl::PointCloud::sensor_origin>(Eigen::vector4f)
    指定传感器采集姿势(原点/平移)。这个成员通常是可选的,PCL中的大多数算法都不使用它。
  • pcl:sensor_orientation<pcl::PointCloud::sensor_orientation>(Quaternionf)
    指定传感器采集姿势(方向)。这个成员通常是可选的,PCL中的大多数算法都不使用它。

为了简化开发,pcl:PointCloud<pcl::PointCloud>类钟包含许多辅助成员函数。例如,用户不必检查代码中的height是否等于1,以查看数据集是否为有组织,而是使用:pcl:PointCloud<pcl::PointCloud::isorgaid>

if (!cloud.isOrganized ())
  ...

Reference

Getting Started / Basic Structures

上一篇:Ubuntu16.04安装PCL


下一篇:ubuntu下安装Qt+pcl+QVTKWidget全过程