PCL入门/基本结构(Getting Started / Basic Structures)

#入门/基本结构
PCL 1.x中的基本数据类型是PointCloud
PointCloud是一个包含以下数据字段的C ++类:

宽度width (int)
在点数中指定点云数据集的宽度。宽度有两个含义:

它可以指定点的云中的总数(equal with the number of elements in points - 见下文),用于无组织的数据集;
它可以指定有组织的点云数据集的宽度(连续点的总数)。

注意:
一个有组织的点云数据集是赋予点云类似于一个有组织的图像(或矩阵)状的结构,其中,数据被划分为行和列的名称。这种点云的例子包括来自立体相机或飞行时间相机(TOF相机)的数据。有组织的数据集的优点在于,通过了解相邻点(例如像素)之间的关系,最近邻的操作效率更高,从而加快了计算速度,降低了PCL中某些算法的成本。

注意:
可投影的点云数据集是给予点云的名称,其根据针孔相机模型在有组织的点云中的点(u,v)的索引与实际的3D值之间具有相关性。这种相关性可以用最简单的形式表示为:u = f * x / zv = f * y / z

例子:

cloud.width = 640; // there are 640 points per line

高度height (int)
在点数中指定点云数据集的高度。高度有两层含义:
它可以指定有组织的点云数据集的高度(总行数)
对于未组织的数据集它被设置为1(因此用于检查数据集是否被组织)。
例:

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

例:

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

points (std::vector<PointT>)

包含存储所有PointT类型的点的数据数组。例如,对于包含XYZ数据的云,点包含pcl :: PointXYZ元素的向量:

pcl::PointCloud<pcl::PointXYZ> cloud;
std::vector<pcl::PointXYZ> data = cloud.points;

is_dense (bool)

指定点中的所有数据是有限的(true)还是某些点的XYZ值可能包含Inf / NaN值(false)。

sensor_origin_ (Eigen::Vector4f)

指定传感器采集姿态(原点origin/转换translation)。这个成员通常是可选的,并且不被PCL中的大多数算法使用。

sensor_orientation_ (Eigen::Quaternionf)

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

为了简化开发,PointCloud类包含一些辅助成员函数。例如,用户不必检查代码中的高度(height)是否等于1,以查看是否组织数据集,代替使用PointCloud()

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

所述PointT类型是主点数据类型并描述了点的每个元素都包含着什么。PCL带有大量不同的点类型,大部分在添加自定义的PointT类型教程中进行了解释。

#编译你的第一个代码示例
在找到合适的最小代码示例之前,请查看在你自己的项目中使用PCL编写新的PCL类教程,以了解如何编译和编写代码或使用PCL。

Getting Started / Basic Structures

猜你喜欢

转载自blog.csdn.net/RuoQiQingCheDi/article/details/83959177
今日推荐