#入门/基本结构
PCL 1.x中的基本数据类型是PointCloud。
PointCloud是一个包含以下数据字段的C ++类:
宽度width (int
)
在点数中指定点云数据集的宽度。宽度有两个含义:
它可以指定点的云中的总数(equal with the number of elements in points - 见下文),用于无组织的数据集;
它可以指定有组织的点云数据集的宽度(连续点的总数)。
注意:
一个有组织的点云数据集是赋予点云类似于一个有组织的图像(或矩阵)状的结构,其中,数据被划分为行和列的名称。这种点云的例子包括来自立体相机或飞行时间相机(TOF相机)的数据。有组织的数据集的优点在于,通过了解相邻点(例如像素)之间的关系,最近邻的操作效率更高,从而加快了计算速度,降低了PCL中某些算法的成本。
注意:
可投影的点云数据集是给予点云的名称,其根据针孔相机模型在有组织的点云中的点(u,v)
的索引与实际的3D值之间具有相关性。这种相关性可以用最简单的形式表示为:u = f * x / z
和v = 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。