0

我需要使用 PCL 的八叉树数据结构将我的数据划分为体素。我想我设法创建了八叉树和体素。但是,我有两个关于 PCL 八叉树结构的问题。

  1. 我的第一个问题是关于八叉树的分辨率。我定义了如下所示的分辨率: float resolution = 0.009f; pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);

据我了解,此分辨率参数定义了八叉树最低级别的体素边长的尺寸。在这种情况下,最低级别的体素边长等于0.009m,是否正确?

  1. 如何获取每个体素的点索引?假设第一个体素中有五个点,我需要这些点的索引。我期待着收到您的来信
4

1 回答 1

0
  1. 分辨率实际上取决于您的数据,如果您的点云以米为单位,那么它将是正确的。假设您有一个坐标 A=(1,0,0) 的 x,y,z 点和 B=(0,0,0) 中的另一个点。如果A点沿x轴距离B点1m,那么你是对的。PCL 的约定是点云应该以米为单位。

但只是为了说明:

pcl::PointCloud<pcl::PointXYZ> cloud_in_meters;
resolution = 1.0f; 
pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);

pcl::PointCloud<pcl::PointXYZ> cloud_in_meters;
cloud_in_millimeters = cloud_in_meters*1000;
resolution = 1.0f/1000.f; 
pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);

该程序将基本相同。

  1. 您可以通过 getIntersectedVoxelIndices 获取相交体素中点的索引。我知道这些文档具有误导性,但实际上这正是您所需要的。

例如:

std::vector< int > k_indices;
octree.getIntersectedVoxelIndices(origin, direction, k_indices, 1);

k_indices 是与射线相交的体积中具有点索引的向量。

你可以检查这个函数在做什么: https ://github.com/PointCloudLibrary/pcl/blob/46cb8fe5589e88e36d79f9b8b8e5f4ff4fceb5de/octree/include/pcl/octree/impl/octree_search.hpp#L613

于 2017-04-04T12:14:00.357 回答