kd-tree基本思想及PCL中的kd-tree数据结构

kd-tree基本概念

  • kd-tree(k-dimensional tree)是一种用于组织表示 k 维空间中点集合的数据结构

  • kd-tree是扩展的二叉排序树,K为空间的维度,通过一定规律将点云数据按树状分类。假设分类节点 A 用第 i 维作划分标准,则在第 i 维的值小于 A 的归到左边,大于 A 的归到右边。

  • kd-tree建立的关键在于确定怎样划分左子树和右子树,即一个K维数据是依据什么被划分到左子树或右子树的。
    例:2-D(K=2)树的建立过程
    对于由点A(51,56)、B(31,54)、C(61,41)、D(26,81)、E(91,11)、F(86,71)组成的集合:在这里插入图片描述
    B点的 X 值(31)< A(51),归到左边;C点的 X 值(61)>A(51),归到右边。

  • 对于点云数据,树的每一级都在在一个维度上分开,所有维度用完后便回到第一个维度,直到最后一个分支上只有一个元素。

kd-tree对点云数据的应用

  • 根据点云数据生成k-d树,建立点云的拓扑关系,实现基于邻域关系的快速查找。最近邻搜索是使用点云数据时的核心操作,可用于查找点组或特征描述符之间的对应关系或定义一个或多个点周围的局部邻域。
pcl中的kd-tree模块

pcl库中提供了kd-tree数据结构,基于FLANN进行快速最近邻检索。

  • 类 class pcl ::KdTree< PointT > 为kd-tree数据结构的实现。
  • 类 class pcl ::KdTreeFLANN< PointT, Dist > 具有近邻搜索实现功能。

基本函数

  • void pcl::getApproximateIndices (const typename pcl::PointCloud< PointT >::ConstPtr &cloud_in, const typename pcl::PointCloud< PointT >::ConstPtr &cloud_ref, std::vector< int > &indices) 获取给定点云到参考点云的一组近似索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值