分享好友 最新动态首页 最新动态分类 切换频道
PCL从理解到应用【03】KDTree 原理分析 | 案例分析 | 代码实现
2024-12-26 03:12

本文分析KDTree的原理,集合案例深入理解,同时提供源代码。

三个案例:K近邻搜索、半径内近邻搜索、近似最近邻搜索。方法对比,如下表所示

特性K近邻搜索半径内近邻搜索近似最近邻搜索描述查找K个最近邻点查找指定半径内的所有点查找近似最近邻点返回结果数量固定K个不固定,取决于半径内点的数量不固定,取决于近似效果适用场景需要固定数量最近邻点的应用需要查找固定范围内点的应用需要快速查询的应用精度高高低速度较慢(点云数据量大时)较慢(半径大时)中代码复杂度中中低

看一下示例效果

白色的是随机生成的原始点云,红色是查询点,绿色是找到的10个最近点。

KDTree(K-Dimensional Tree,K维树)是一种用于多维空间中数据点的快速点查找的数据结构。它是计算几何领域中的一种二叉树。 

  • 构建过程:

    • 将数据点递归地划分成两个子集,直到每个子集中的点数目小于等于一个。
    • 每次划分时,选择某个维度,将数据点按照该维度的中位数进行分割,这样一半的数据点在分割超平面的左侧,另一半在右侧。
    • 每个节点保存一个数据点及一个用于分割的维度。
  • 搜索过程:

    • 从根节点开始,递归地向下遍历树,根据查询点在当前分割维度上的值决定向左子树或右子树移动,直到达到叶节点。
    • 回溯过程中,检查是否需要跨越分割超平面搜索另一子树。
    • 使用一个优先级队列维护当前最优的 K 个最近邻点。

KDTree常用的方法,汇总如下所示

 

官网:Introduction — Point Cloud Library 0.0 documentation

对应函数:Point Cloud Library (PCL): Module kdtree

  • Point Cloud Library (PCL): pcl::KdTree< PointT > Class Template Reference

优点:

  • 高效邻近搜索: 在低维数据中,KDTree 提供了一种高效的 K 近邻和范围搜索方法。
  • 动态更新: KDTree 可以动态地插入和删除数据点,保持数据结构的有效性。
  • 适用多种距离度量: KDTree 可以使用多种距离度量,如欧氏距离、曼哈顿距离等,适应不同应用需求。

缺点:

  • 高维数据性能下降: 随着维度增加,KDTree 的性能会急剧下降,这是因为高维空间中的数据分布变得稀疏,导致分割效率降低。这种现象被称为“维度灾难”。
  • 构建和维护成本: 构建和维护 KDTree 的成本较高,尤其是在数据频繁变化的场景中。
  • 不适用于动态变化的场景: 如果数据频繁更新,KDTree 需要频繁重建,维护成本较高。

K近邻搜索(K-Nearest Neighbors Search)是一种用于查找给定点的K个最近邻点的搜索方法,KDTree提供了一种高效的实现方式。

看一个示例深入理解,在这个示例中

  1. 随机生成一个包含1000个点的点云。
  2. 随机选择一个查询点。
  3. 使用 进行近似最近邻搜索,查找10个距离最近的点。
  4. 使用 可视化原始点云、查询点和近似最近邻点。

代码示例

 

可视化K近邻搜索的效果,如下图所示

白色的是随机生成的原始点云,红色是查询点,绿色是找到的10个最近点。

K近邻搜索的思路流程

  • 初始化
    • 从根节点开始,根据查询点的坐标,决定向左子树还是右子树移动。
  • 递归搜索
    • 递归地向下遍历树,直至达到叶节点。
    • 在叶节点处,计算该叶节点数据点与查询点之间的距离,将其加入优先级队列(最大堆,用于存储当前最近的K个点。
  • 回溯
    • 回溯到父节点,检查当前节点的数据点与查询点之间的距离,并更新优先级队列。
    • 判断是否需要跨越分割超平面搜索另一子树:如果查询点到分割超平面的距离小于优先级队列中最远点的距离,则跨越分割超平面,进入另一子树进行搜索。
  • 重复搜索和回溯
    • 重复上述搜索和回溯过程,直至回溯到根节点,最终优先级队列中存储的就是查询点的K个最近邻点。
 

近似最近邻搜索的目标是找到查询点的近似K个最近邻点,允许一定的误差以提高搜索速度。

常见的做法是通过多次随机采样、设置较大的搜索半径或者在其他库中使用误差参数来实现近似搜索。

特点K近邻搜索近似最近邻搜索精度高中等性能速度较慢,计算量大速度快,计算量小应用场景需要精确结果的场景,如分类、回归等允许一定误差的快速检索,如大规模数据处理、实时应用等优点结果精确,找到的是最邻近的K个点搜索速度快,适用于大规模数据集缺点在高维数据中性能急剧下降,计算量大结果不够精确,存在一定误差

示例代码

 

结果可视化

结果分析

  • 白色的是随机生成的原始点云,红色是查询点,绿色是找到的2个最近点(本文需要找到10个点的)。
  • 允许一定误差,以提高搜索速度。
  • 在示例代码中,通过增加随机性和多次采样来实现近似搜索,最终合并和去重结果。

径内近邻搜索 (Radius Search),找到指定半径内的所有点。

思路流程

  1. 构建 KDTree:首先,构建包含所有数据点的KDTree。这一步骤将数据点按空间位置递归地分割成子区域。
  2. 查询节点搜索:从根节点开始,检查当前节点是否在查询点的半径内。如果是,则将其加入结果集中。
  3. 递归搜索:递归地检查当前节点的子节点
    • 如果查询球体与子节点对应的空间区域相交,则继续搜索该子节点。
    • 如果查询球体与子节点对应的空间区域不相交,则跳过该子节点。
  4. 合并结果:合并所有符合条件的节点,得到最终的近邻点集合。

看一个示例深入理解,在这个示例中

  1. 随机生成一个包含1000个点的点云。
  2. 随机选择一个查询点。
  3. 使用 radiusSearch 进行半径内近邻搜索,半径为116。
  4. 使用 可视化原始点云、查询点和近似最近邻点。

代码示例

 

可视化半径内近邻搜索的效果,如下图所示

白色的是随机生成的原始点云,红色是查询点,绿色是找到的3个最近点(半径范围内)。

半径内近邻搜索,查询点为 (200.242 73.3622 785.961),半径=116.108
    166.217 33.6048 783.911 (距离平方: 2742.57)
    164.154 125.101 776.535 (距离平方: 4068.13)
    239.646 7.50222 856.443 (距离平方: 10857.9)

分享完成

最新文章
银华基金科创板人工智能ETF获批
  中证网讯(记者 张舒琳)12月16日,银华基金科创板人工智能ETF首批获批,为投资者布局科技主题提供全新工具。  中证指数官网显示,(指数简称:科创AI,指数代码:950180)从科创板市场中选取30只市值较大且业务涉及为人工智能提供基
每日十题八股-2024年12月10日
1.syncronized锁升级的过程讲一下? 2.JVM对Synchornized的优化? 3.介绍一下AQS 4.Threadlocal作用,原理,具体里面存的key value是啥,会有什么问题,如何解决? 5.悲观锁和乐观锁的区别? 6.J
竞价关键词如何快速分组?(竞价关键词如何快速分组流程实操)
竞价关键词如何快速分组?竞价员每天要接触的关键词多如牛毛,即便是小账户,里面也至少有几百个次,预算大的账户,关键词多则上万个。如果要一个一个分组,那工作量简直太大了。且而每一个关键词的背后都代表着一个用户需求,在实际分词的
阿里云电脑无影云桌面价格及购买流程(3分钟攻略)
​​阿里云电脑名为无影云桌面,无影云桌面4核8G配置1元/月年付199元、8核16G配置899元一年,阿里云百科来详细说下阿里云电脑无影云桌面购买优惠价格及购买全流程: 无影云桌面4核8G配置/40G系统盘/50G数据盘/2M带宽优惠价199元/年无影云
揭秘 | 四大会计师事务所薪酬、晋升、岗位全对比!
今日主创晚上好,我是鹿先森。最近四大的暑期实习和春招都陆续开放了,来咨询小鹿的同学也增加了很多......四大各家的项目有什么差异呢?毕业以后去四大,发展好不好?我学审计的,去普华还是去安永?哪家薪酬福利待遇好?今天,小鹿职研社
百度相关搜索和下拉框如何刷排名的技术原理?
在当今信息爆炸的时代,搜索引擎已成为我们获取信息的主要渠道。百度,作为国内最大的搜索引擎,其相关搜索和下拉框功能不仅反映了用户的搜索习惯,更是企业提升品牌曝光和搜索排名的关键战场。作为一名长期活跃在SEO领域的实践者,我深感
重大.来袭“同乡游万能开挂器免费”必胜开挂神器
有 亲,根据资深记者爆料有没有微乐开挂成功的,确实有挂您好,微乐家乡麻将,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实
跨境数据流动:打造数字经济发展新优势的关键抓手
□ 中国宏观经济研究院 徐策 中国经济信息网 曹 樱 左登基□ 党的二十大报告提出,加快发展数字经济,促进数字经济和实体经济深度融合,打造具有国际竞争力的数字产业集群。党的二十届三中全会决定提出,建立高效便利安全的数据跨境流动机
置顶服务商快速创建的小程序如何开通云开发?精选热门
背景第三方服务商进行开发时,利用微信开放平台接口可以快速创建小程序,实现快速商业化。现在,服务商快速创建的小程序也可以开通云开发了,具体操作步骤如下:一、更新信息服务商需要告知小程序所有者,前往微信公众平台mp.weixin.qq.com
钛动科技闪耀量子位MEET2025与零一万物、商汤科技等共探AI新浪潮
12月11日,【智变千行,慧及百业】MEET 2025智能未来大会圆满落幕。MEET智能未来大会由量子位主办,凭借其高规格的参会阵容、前瞻性的议题设置以及丰富的成果展示,成为国内最具影响力的智能产业年度活动之一。大会现场人声鼎沸,云集超过5
相关文章
推荐文章
发表评论
0评