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