octree与kd-tree对比

octree与kd-tree对比

  • 问题1:哪个速度更快
  • 问题2;octree可以在建立完成之后再增长规模吗

1. Comparison of nearest-neighbor-search strategies and implementations for efficient shape registration

最近邻搜索nn问题有很多中方法,nns问题最差的时间复杂是O(nm);平均复杂度是O(nlogm);在点云领域常用的是kd-tree octree;其他的方法有R-tree、range-tree、vp-tree

原则上,八叉树应该允许NNS的极其有效的实现。 由于它们对搜索空间的规则划分和较高的分支因子,因此坐标查询非常快[25]。 但是,大多数NN库都基于k-d树。

octree复杂性是由于以下事实:在NNS期间,必须访问查询点附近的节点。 因此,必须找到有效的遍历顺序,因为遍历的顺序访问的节点数不超过必需的数量,并且易于计算。 有效遍历的关键是访问子节点的顺序,最好通过最接近子节点的优先标准来减少需要访问的节点数,即遍历的顺序由到查询点的距离确定。 对于二叉树k-d树,这是微不足道的,但是对于八叉树来说,则涉及更多.

对于任意一个有8个子节点的节点来说,有96个顺序去访问子节点。
八叉树中的NNS必须对3个分割平面进行邻近度计算,对距离进行排序,并为每个经过的节点选择合适的遍历顺序。 与此相比,k-d树中的遍历顺序可通过一次邻近度检查立即确定,从而避免了不必要访问节点时的不必要计算。
在这里插入图片描述
对比图octree更慢

Octree即为八叉树,它的特性为树中的任一节点的子节点恰好只会有八个或零个。经常应用于3D场景管理,它可以迅速搜索物体在3D场景中的位置,或侦测到与其他物体是否有碰撞以及判断是否在可视范围内。

博客https://www.cnblogs.com/ZuDame/p/11193179.html介绍如下,可知,无法累加改变尺寸,因为无法获得最大尺寸

“算法原理简介”
八叉树是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所表示的体积元素加在一起就等于父节点的体积。
“算法流程”
(1). 设定最大递归深度
(2). 找出场景的最大尺寸,并以此尺寸建立第一个立方体
(3). 依序将单位元元素丢入能被包含且没有子节点的立方体
(4). 若没有达到最大递归深度,就进行细分八等份,再将该立方体所装的单位元元素全部分担给八个子立方体
(5). 若发现子立方体所分配到的单位元元素数量不为零且跟父立方体是一样的,则该子立方体停止细分,因为跟据空间分割理论,细分的空间所得到的分配必定较少,若是一样数目,则再怎么切数目还是一样,会造成无穷切割的情形。
(6). 重复3,直到达到最大递归深度。

2.octree.addPointToCloud(testpoint,cloud);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值