使用Flann库实现KDtree半径查找时的参数SearchParams()参数设置记录

int neighbors_in_radius= kdtree.radiusSearch(seed_queue_points,radiusPointsIndex, radiusDists, radius2,SearchParams(-1,0.1, false))

本博客主要说明SearchParams的参数设置,试过SearchParams(128),同一个点云数据用时和使用PCL中的KDTREE时间基本一致。

补充影响速度较大的因素主要时排序
经过查看PCL和flann源码发现这个地方可设置三个参数,
三个参数,
第一个我使用默认参数,
第二个参数是判断精度,flann的默认参数是0 ,若不选择即为0,第三个参数是,找出的数据是否排序,默认未true,因为我使用的点云单位为mm,只有整数,故此处精度我选择0.1,SearchParams(-1,0.1, false)这样设置后,耗时少了一半

第三个true和false是选择输出搜索到的点是否排序,false不排序,时间直接大幅降低,
因为我使用此函数做欧氏距离聚类所用,所以我无需输出排序后的点,但搜索次数较多,因此我选择false为了缩短搜索时间,若搜索次数较少,且要求排序,则设为true即可。一般是距离从小到大排列,第一个值一般为搜索的数据本身。

第四个需要注意的是,设置半径时,flann::Index< L2 > 此处选择的时距离的平方,因此传入的半径应为半径平方,最开始调试时,未平方,导致找到的点已知对不上,
记录此博客,方便后续自己学习,希望高手能够详细讲解此flann库的用法,需要各种参数的设置和作用介绍,谢谢
在这里插入图片描述
在这里插入图片描述

实现该函数的调用如下:

#include "flann/flann.h"
struct MyEuclideanPoint
{
	float x;
	float y;
	float z;	
};
  std::vector<MyEuclideanPoint> data;
  for (size_t j = 0; j < inPointCloud.size(); j++)
  {
	  MyEuclideanPoint p;
	  p.x = inPointCloud[j].x;
	  p.y = inPointCloud[j].y;
	  p.z = inPointCloud[j].z;
	  data.push_back(p);
  }
	flann::Matrix<float> data_mat = flann::Matrix<float>(&data[0].x, data.size(), 3);
	//低维度数据参数:flann::KDTreeSingleIndexParams(15)
	flann::Index< L2<float> > kdtree(data_mat, flann::KDTreeSingleIndexParams(15));//此处的15,我再PCL使用KDTREE时,看到上面选择的15如下图
	kdtree.buildIndex();
		flann::Matrix<float> seed_queue_points(&data[seed_queue[sq_idx]].x,1,3);
			int neighbors_in_radius=  kdtree.radiusSearch(seed_queue_points,radiusPointsIndex, radiusDists, radius2,SearchParams(-1,0.1, false));//主要说明的即为此函数

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用\[2\]和引用\[3\]的信息,对于SURF算法,可以使用FLANN_INDEX_KDTREEFLANN_INDEX_LSH来设置参数。具体来说,可以使用FLANN_INDEX_KDTREE参数来构建索引,如下所示: index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) 同,也可以使用FLANN_INDEX_LSH参数来构建索引,具体的参数设置可以参考FLANN文档。因此,对于SURF算法,可以根据具体需求选择使用FLANN_INDEX_KDTREEFLANN_INDEX_LSH来设置参数。 #### 引用[.reference_title] - *1* [OpenCV-Python——第30章:特征匹配](https://blog.csdn.net/yukinoai/article/details/89055860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [cv2-特征点匹配(bf、FLANN)](https://blog.csdn.net/qq_51392112/article/details/128976592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python opencv特征点检测和匹配教程](https://blog.csdn.net/u013832707/article/details/96975203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值