点云库基本数据结构
kelvin 发布于 2021-05-12

pcl1.x中的基本数据类型是:PCL:PointCloud<PCL::PointCloud>。PoxTo云是一个C++类,包含以下数据字段:

:pcl:width<pcl::PointCloud::width>(int)

以点数为单位指定点云数据集的宽度。宽度有两种含义:

它可以为无组织的数据集指定云中的点的总数(等于点中元素的数量–见下文);

它可以指定有组织的点云数据集的宽度(一行中的点总数)。

备注
有组织的点云数据集是为类似于有组织的图像(或矩阵)结构的点云指定的名称,其中数据被拆分为行和列。这种点云的例子包括来自立体相机或飞行时间相机的数据。有组织的数据集的优点是,通过了解相邻点(如像素)之间的关系,最近邻操作更加有效,从而加快了计算速度,降低了PCL中某些算法的成本。
可投影点云数据集是指根据针孔相机模型在有组织的点云中点的(u,v)索引和实际三维值之间具有相关性的点云的名称。这种相关性可以用最简单的形式表示为:u=fx/z和v=fy/z

Examples:

cloud.width = 640; // 每行有 640 个 点

:pcl:height<pcl::PointCloud::height>(int)
以点数为单位指定点云数据集的高度。高度有两种含义:
它可以指定有组织的点云数据集的高度(总行数);
对于无组织的数据集,它设置为1(因此用于检查数据集是否有组织)。

Examples:

cloud.width = 640; // Image-like organized structure, with 480 rows and 640 columns,
cloud.height = 480; // thus 640*480=307200 points total in the dataset

Examples:

cloud.width = 307200;
cloud.height = 1; // unorganized point cloud dataset with 307200 points

:pcl:points<pcl::PointCloud::points>(std::vector

包含存储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_>(特征::Vector4f)

指定传感器采集姿势(原点/平移)。这个成员通常是可选的,并且在PCL中大多数算法都不使用。

:pcl:sensor_Orientization_u<pcl::PointCloud::sensor_>(特征::四元数F)

指定传感器采集姿势(方向)。这个成员通常是可选的,并且在PCL中大多数算法都不使用。

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

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

PointT类型是主要的点数据类型,它描述了:pcl:points<pcl::PointCloud::points>的每个元素所包含的内容。PCL附带了大量不同的点类型,大多数在添加自定义点类型教程中进行了解释。

kelvin
关注 私信
文章
92
关注
0
粉丝
0