C++ 将PCL XYZ云转换为XY(三维到二维) 背景
我有一个类型为C++ 将PCL XYZ云转换为XY(三维到二维) 背景,c++,point-clouds,point-cloud-library,C++,Point Clouds,Point Cloud Library,我有一个类型为PointXYZ的PCL点云。我需要将其转换为vector类型的栅格地图,其中map[x][y]应该为true,前提是至少有一个点。地图应表示点云的特定区域(例如,覆盖点云维度x=[-10,10],y=[-15,15]的20x30单元格) 我现在有什么 目前我有两种方法: 扫描所有点,并将地图中相应的单元格设置为true 将点投影到平面,创建Kd树,然后为地图中的每个单元查询树中最近的点,如果该点落在单元中,则将单元设置为true 现在,第一种方法适用于小型点云:O(n),n是点云
PointXYZ
的PCL点云。我需要将其转换为vector
类型的栅格地图,其中map[x][y]
应该为true,前提是至少有一个点。地图应表示点云的特定区域(例如,覆盖点云维度x=[-10,10],y=[-15,15]的20x30单元格)
我现在有什么
目前我有两种方法:
在我看来,我不可能是第一个遇到这个问题的人,对吗?如果点云已经“有组织”(例如,如果它直接来自RGBD传感器),那么在最好的情况下,通过巧妙地遍历2D阵列,您可能能够击败O(N)。有关有组织点云的信息,请参阅 如果点云没有组织,那么除了点本身之外,点云中没有关于空间组织的信息,因此在几乎所有情况下,你都必须触摸它们中的每一个。如果地图足够小,你可以在地图满时退出,但我想这不太可能发生 如果您对概率结果感到满意,则可以通过随机采样点云来构建地图