点云中的kd树和八叉树

kd树

  • 简介
    kd-tree简称k维树,是一种空间划分的数据结构。常被用于高维空间中的搜索,比如范围搜索和最近邻搜索。kd-tree是二进制空间划分树的一种特殊情况 。
    由于三维点云的数目一般都比较大,所以,使用kd-tree来进行检索,可以减少很多的时间消耗,可以确保点云的关联点寻找和配准处于实时的状态。
    kd-tree的构建就是按照某种顺序将无序化的点云进行有序化排列,方便进行快捷高效的检索。
  • 原理
    Input: 无序化的点云,维度k
    Output:点云对应的kd-tree
    Algorithm:
    1、初始化分割轴:对每个维度的数据进行方差的计算,取最大方差的维度作为分割轴,标记为r;
    2、确定节点:对当前数据按分割轴维度进行检索,找到中位数数据,并将其放入到当前节点上;
    3、划分双支:
    划分左支:在当前分割轴维度,所有小于中位数的值划分到左支中;
    划分右支:在当前分割轴维度,所有大于等于中位数的值划分到右支中。
    4、更新分割轴:r = (r + 1) % k;(就是按顺序循环)
    5、确定子节点:
    确定左节点:在左支的数据中进行步骤2;
    确定右节点:在右支的数据中进行步骤2;

最近邻检索

  • 一个最近邻
    一个最近邻其实很简单,我们只需要定位到对应的分支上,找到最接近的点就可以了。
    举个例子:查找(2.1,3.1)的最近邻。
    计算当前节点(7,2)的距离,为6.23,并且暂定为(7,2),根据当前分割轴的维度(2.1 < 7),选取左支。
    计算当前节点(5,4)的距离,为3.03,由于3.03 < 6.23,暂定为(5,4),根据当前分割轴维度(3.1 < 4),选取左支。
    计算当前节点(2,3)的距离,为0.14,由于0.14 < 3.03,暂定为(2,3),根据当前分割轴维度(2.1 > 2),选取右支,而右支为空,回溯上一个节点。
    计算(2.1,3.1)与(5,4)的分割轴{y = 4}的距离,如果0.14小于距离值,说明就是最近值。如果大于距离值,说明,还有可能存在值与(2.1,3.1)最近,需要往右支检索。
    由于0.14 < 0.9,我们找到了最近邻的值为(2,3),最近距离为0.14。

八叉树

在这里插入图片描述

知识点补充

算法复杂度

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
点云八叉树(Point Cloud Octree)是一种用于空间分割的数据结构,适用于点云数据的存储和处理。在MATLAB,可以使用一些库和工具来实现点云八叉树的构建和应用。 首先,使用MATLAB提供的点云处理库(PointCloud Processing Toolbox)或第三方库,可以将点云数据导入到MATLAB环境,并进行预处理,如滤波、去噪等。然后,可以利用这些点云数据构建点云八叉树。 在MATLAB,可以使用io对象来导入和导出点云数据,使用pcread函数从文件读取点云数据,并使用pcwrite函数将点云数据写入文件。接着,使用pcshow函数可视化点云数据,并可以对点云进行旋转、缩放等操作。 为了构建点云八叉树,在MATLAB可以使用pcdownsample函数对点云进行降采样,减少点云的密度,从而提高后续处理和建模的效率。而后,可以使用pcsegdist函数对点云进行分割,将点云分为不同的区域,并可以利用这些区域来构建点云八叉树。 在点云八叉树构建完成后,可以使用octreeSearch函数来搜索八叉树的点,并进行查询、统计等操作。例如,可以利用该函数找到八叉树的子树、叶子节点或指定深度的节点。 综上所述,使用MATLAB点云处理库和相关函数,可以方便地实现点云八叉树的构建和应用。这种数据结构可以用于点云数据的空间分割和查询,对于点云的处理和分析具有重要的作用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值