【问题标题】:Point indices for a given voxel给定体素的点索引
【发布时间】:2017-03-30 20:49:32
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:
    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

    【讨论】:

    • 亲爱的君,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2015-01-03
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多