KD树的使用
博客长期更新,本文最近一次更新时间为:2024年12月9日。① 优化代码结构和原理介绍;② 代码在PCL1.14.1上运行成功。
一、原理介绍
1、建立KD树
kd-tree 数据结构是计算机科学中用来组织具有k维空间中若干点的数据结构。它是一个具有其他约束的二进位搜索树。K-d树对于范围搜索和最近邻搜索是非常有用的。为了我们的目的,我们通常只处理三维点云,所以我们所有的k-d树都是三维的。K-d树的每一层都使用垂直于相应轴的超平面,沿着特定的维度分割所有的子级。在树的根部,所有的子节点都将根据第一维(即,如果第一维坐标小于根,它将在左子树中,如果它大于根,那么它将明显地在右子树中)分割。树中的每一层都在下一个维度上划分,一旦所有其他维度都被耗尽,就返回到第一个维度。构建k-d树最有效的方法是使用一个分区方法:将中间点放置在根部,所有的东西都有一个更小的一维值,左边更小,右边更大。然后,在左树和右子树上重复此过程,直到要分区的最后一棵树仅由一个元素组成。
如图 1是 k=2 的二维数据搜索示意图,kd-tree 的每一层为