给定体素的点索引

时间:2017-03-30 20:49:33

标签: point-cloud-library point-clouds voxel octree

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

  1. 我的第一个问题是关于八叉树的解决方案。我将分辨率定义如下: float resolution = 0.009f; pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);
  2. 据我所知,此分辨率参数定义了八度树最低级别的体素边长的尺寸。在这种情况下,最低水平的体素的边长等于0.009m,是否正确?

    1. 如何获得每个体素的点索引?让我们说第一个体素中有五个点,我需要这些点的索引。 我期待着您的回音 问候

1 个答案:

答案 0 :(得分:0)

  1. 分辨率实际上取决于您的数据,如果您的点云以米为单位,那么它将是正确的。 假设你有一个坐标为A =(1,0,0)的x,y,z点和B =(0,0,0)中的另一个点。如果A点沿着x轴远离B点1米,那么你是正确的。 PCL的惯例是点云应该以米为单位。
  2. 但只是为了说明:

    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获取相交体素中的点的索引。我知道这些文档具有误导性,但它实际上就是你所需要的。
    2. 例如:

      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