我有PointXYZ
类型的PCL点云。我需要将其转换为vector<vector<bool> >
类型的网格地图,其中map[x][y]
应该是true,如果至少有一个点它。地图应代表点云的特定区域(比如20×细胞覆盖的点云维度x = [ - 10,10],Y = [ - 15,15]转换PCL XYZ云到XY(3D到2D)
我现在有什么
。目前我有两个途径:
- 扫描通过所有点,在地图的相应单元格设置为true
- 项目点,以平面,创建一个KD树,然后在每个单元格。该地图查询树的最近点,并将单元格设置为真,如果它落入单元格中。
现在,第一种方法适用于小点云:O(n),其中n是点云中的点数。
第二种方法对大型云有好处,我认为。最后的查询只有O(m),其中m是地图的大小。但是,构建Kd树并将云投影到飞机上应该都是O(n)左右。
我在想第二种方法总是更糟糕,但我会运行测试看看。
问题
有没有更好的方法?也许是八叉树或Voxel-Grid(二维)的东西?方法一的问题是,我不必要地查看感兴趣区域之外的点。
在我看来,我不能成为第一个有这个问题的人吧?