kd-tree 或者 k 维树是计算机科学中使用的一种数据结构 , 用来组织表示 k 维空间中点集合。它是一种带有其他约束条件的二分查找树。一共有两种搜索方式:radiusSearch和nearestKSearch,
pcl::KdTreeFLANN对象radiusSearch和nearestKSearch接口的性能分析:
1.当原点云与目标点云重叠区域较大时,优先选择nearestKSearch接口来寻找
最近邻,如果点云稀疏,并且搜索半径较小,也可以使用radiusSearch接口
来寻找最近邻
2.当原点云与目标点云重叠区域较小时,优先选择radiusSearch接口来寻找最近邻
避免退化问题
具体使用方法: K近邻搜索
1.定义Kdtree对象 pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
2.设置搜索空间kdTree.setInputCloud(cloud_in)
3.定义查询起点pcl::pointxyz searchpoint,searchpoint.x = 0,同理定义yz坐标
4.设置邻近点个数int K=9
5.创建对象存储查询点近邻索引vector<int>
6.创建对象存储近邻点对应平方距离vector<float>pointNKNSquaredDistance(K)
7.进行K近邻搜索kdTree.nearestKSearch(searchpoint, K, pointIdxNKNSearch, pointNKNSquaredDistance)
演示代码如下