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