【发布时间】:2012-12-14 23:19:52
【问题描述】:
设置
我有一个PointXYZ 类型的 PCL 点云。我需要将其转换为vector<vector<bool> > 类型的网格图,其中map[x][y] 应该为真,前提是它至少有一个点。地图应该代表点云的某个区域(比如 20x30 单元格,覆盖 x=[-10,10],y=[-15,15] 的点云维度。
我现在拥有的
目前我有两种方法:
- 扫描所有点并将地图中的相应单元格设置为true。
- 将点投影到平面,创建 Kd-Tree,然后为地图中的每个单元格查询树中最近的点,如果落入单元格,则将单元格设置为 true。
现在,第一种方法适用于小点云:O(n),其中 n 是点云中的点数。
我认为第二种方法适用于大型云。最终查询只有 O(m),其中 m 是地图的大小。但是,构建 Kd-tree 和将云投影到平面上都应该是 O(n) 左右。
我认为第二种方法总是更糟糕,但我会运行测试看看。
问题
有没有更好的方法?也许是八叉树或体素网格(二维)?方法一的问题是,我不必要地查看感兴趣区域之外的点。
在我看来,我不可能是第一个遇到这个问题的人,对吧?
【问题讨论】:
标签: c++ point-clouds point-cloud-library