1.理论:
k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。
详细介绍见【量化课堂】kd 树算法之详细篇 - JoinQuant量化课堂 - JoinQuant(侵删)
例如:特征点匹配中通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中一种。
索引结构中相似性查询有两种基本的方式:一种是范围查询,另一种是K近邻查询:
kdtree的结构:kd树是一个二叉树结构,它的每一个节点记载了【特征坐标,切分轴,左指针,右枝指针】。
kd 树的构造以及 kd 树上的 kNN 算法见上方连接。
2.PCL中对于kdtree的支持:
PCL中类pcl::KdTree是kd-tree数据结构的实现。并且提供基于FLANN进行快速搜索的一些相关子类与包装类。具体可以参考相应的API。下面给出2个类的具体用法。
pcl::search::KdTree < PointT >
pcl::search::KdTree是pcl::search::Search< PointT >的子类,是pcl::KdTree的包装类。包含(1) k 近邻搜索;(2) 邻域半径搜索。
- #pragma once
- #include
- #include
- #include
- #include
- void kdtreeTest1()
- {
- pcl::PointCloud
::Ptr cloud(new pcl::PointCloud) ; - pcl::io::loadPCDFile("do1.pcd", *cloud);
-
- pcl::search::KdTree
tree; - tree.setInputCloud(cloud);
-
- std::vector<int>indices;//存放查询到的索引
- std::vector<float>distance;//存放对应距离的平方
- //设一个查询点
- pcl::PointXYZ pointq = cloud->points[0];
- //查询离pointq最近的K个点
- int k = 3;
- int size = tree.nearestKSearch(pointq, k, indices, distance);
-
- std::cout << "k search result size is " << size<
- //查询pointq半径r范围领域内的点
- double r = 2.0;
- size = tree.radiusSearch(pointq, r, indices, distance);
- std::cout << "r search result size is " << size;
-
- }

搜索结果默认是按照距离point点的距离从近到远排序;如果InputCloud中含有point点,搜索结果的的第一个点是point本身。
pcl::KdTreeFLANN < PointT >
pcl::KdTreeFLANN是pcl::KdTree的子类,可以实现同样的功能。
- #pragma once
- #include
- #include
- #include
- #include
- void kdtreeTest2()
- {
- pcl::PointCloud
::Ptr cloud(new pcl::PointCloud) ; - pcl::io::loadPCDFile("do1.pcd", *cloud);
-
- //pcl::search::KdTree
tree; - pcl::KdTreeFLANN
tree; - tree.setInputCloud(cloud);
-
- std::vector<int>indices;
- std::vector<float>distance;
- //设一个查询点
- pcl::PointXYZ pointq = cloud->points[0];
- //查询离pointq最近的K个点
- int k = 3;
- int size = tree.nearestKSearch(pointq, k, indices, distance);
-
- std::cout << "k search result size is " << size<
- //查询pointq半径r范围领域内的点
- double r = 2.0;
- size = tree.radiusSearch(pointq, r, indices, distance);
- std::cout << "r search result size is " << size;
-
- }
结果一样,略。
-
相关阅读:
vs2022无法选择.net framwork4.0问题的解决
Mybatis-Plus开发提速器mybatis-plus-generator-ui
5. Spring Boot配置绑定
【中秋福利】大数据告诉你:今年中秋礼品这样选
车载ECU嵌入式设备的诊断测试 – 读和写
三十、《大数据项目实战之用户行为分析》Spark SQL实现单词计数
如何判断一个对象占用多少字节?
9-AJAX-下-axios
用vue实现pdf预览
HTML核心(3)-文本元素
-
原文地址:https://blog.csdn.net/m0_57747965/article/details/126236945