【转】PCL基本数据类型

PointCloud

在PCL 1.x中最基本的数据类型就是PointCloud了。它是一个C++类,包含了如下的数据成员(括号中是这个数据的数据类型): 
- width(int) 
==指定了点云数据中的宽度==。width有两层含义: 
- 可以指定点云的数量,但是只是对于无序点云而言。 
- 指定有序点云中,一行点云的数量。

有序点云(organized point cloud ):有序点云中的点排列情况类似图片(或矩阵),是按照行和列的结构排列的。这样的点云数据通常来自立体相机或TOF相机。有序点云的优势在于,通过知道两个相邻点的关系,最近邻点操作会变得更加有效,因此可以加速计算,并且降低PCL中一些算法的开销。

投影点云(projectable point cloud):投影点云首先属于有序点云,并且投影点云中点的下标表示–(u,v)类似图片中像素的坐标,与这个点的3D坐标(x,y,z)有一定的关系。这个关系可以由针孔相机模型导出: 
$u = \frac{fx}{z}$ 和 $v = \frac{fy}{z}$

例如:

cloud.width = 640; // 每行有640个点
  • 1
  • height(int) 
    ==指定了点云数据中的高度==。height有两层含义: 
    • 指定有序点云中,点云行的数量。
    • 对于无序点云,将height设为1(它的width即为点云的大小),以此来区分点云是否有序。 
      例如:
// 有序点云--类似图片中像素的组织结构,拥有640行,480列,总共有640*480 = 307200个点
cloud.width = 640; 
cloud.height = 480;
  • 1
  • 2
  • 3
// 无序点云--高度为1,宽度与点云大小相同为307200
cloud.width = 307200;
cloud.height = 1;
  • 1
  • 2
  • 3
  • points(std::vector) 
    points是存储类型为PointT的点的向量。举例来说,对于一个包含XYZ数据的点云,points成员就是由pcl::PointXYZ类型的点构成的向量:
pcl::PointCloud<pcl::PointXYZ> cloud;
std::vector<pcl::PointXYZ> data = cloud.points;
  • 1
  • 2
  • is_dense(bool) 
    指定点云中的所有数据都是有限的(true),还是其中的一些点不是有限的,它们的XYZ值可能包含inf/NaN 这样的值(false)。
  • sensor_origin_(Eigen::Vector4f) 
    指定传感器的采集位姿(==origin/translation==)这个成员通常是可选的,并且在PCL的主流算法中用不到。
  • sensor_orientaion_(Eigen::Quaternionf) 
    指定传感器的采集位姿(方向)。这个成员通常是可选的,并且在PCL的主流算法中用不到。 
    为了简化开发,PointCloud类包含许多帮助成员函数。举个例子,如果你想判断一个点云是否有序,不用检查height是否等于1,而可以使用isOrganized()函数来判断:
if (!cloud.isOrganized ())
  ...
  • 1
  • 2

PointT代表了点云中的单元-点的类型。


转载自:https://blog.csdn.net/jiaojialulu/article/details/69346038

猜你喜欢

转载自blog.csdn.net/liukunrs/article/details/80310178