【问题标题】:Convert PCL XYZ cloud to XY (3D to 2D)将 PCL XYZ 云转换为 XY(3D 到 2D)
【发布时间】:2012-12-14 23:19:52
【问题描述】:

设置

我有一个PointXYZ 类型的 PCL 点云。我需要将其转换为vector<vector<bool> > 类型的网格图,其中map[x][y] 应该为真,前提是它至少有一个点。地图应该代表点云的某个区域(比如 20x30 单元格,覆盖 x=[-10,10],y=[-15,15] 的点云维度。

我现在拥有的

目前我有两种方法:

  1. 扫描所有点并将地图中的相应单元格设置为true。
  2. 将点投影到平面,创建 Kd-Tree,然后为地图中的每个单元格查询树中最近的点,如果落入单元格,则将单元格设置为 true。

现在,第一种方法适用于小点云:O(n),其中 n 是点云中的点数。

我认为第二种方法适用于大型云。最终查询只有 O(m),其中 m 是地图的大小。但是,构建 Kd-tree 和将云投影到平面上都应该是 O(n) 左右。

我认为第二种方法总是更糟糕,但我会运行测试看看。

问题

有没有更好的方法?也许是八叉树或体素网格(二维)?方法一的问题是,我不必要地查看感兴趣区域之外的点。

在我看来,我不可能是第一个遇到这个问题的人,对吧?

【问题讨论】:

    标签: c++ point-clouds point-cloud-library


    【解决方案1】:

    如果点云已经“组织好”(例如,如果它直接来自 RGBD 传感器,则会发生这种情况),您可以通过巧妙地遍历 2D 阵列在最佳情况下击败 O(N)。有关有组织的点云的信息,请参阅https://pcl.readthedocs.io/projects/tutorials/en/latest/basic_structures.html

    如果点云没有组织,那么除了点本身之外,点云中没有关于空间组织的信息,因此您几乎在每种情况下都必须触摸它们中的每一个。如果地图足够小,您可以在地图满时退出,但我猜这不太可能发生。

    如果您对概率结果感到满意,那么您可以通过随机采样点云来构建地图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2013-03-28
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多