PCL中Kd树理论

 k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。

01   Kd简介

K-D树是二进制空间分割树的特殊的情况。用来组织表示K维空间中点的几何,是一种带有其他约束的二分查找树,为了达到目的,通常只在三个维度中进行处理因此所有的kd_tree都将是三维的kd_tree,kd_tree的每一维在指定维度上分开所有的字节点,在树的根部所有子节点是以第一个指定的维度上被分开。

K-D树算法可以分为两大部分,一部分是有关k-d树本身这种数据结构建立的算法,另一部分是在建立的k-d树上如何进行最邻近查找的算法。

02   应用背景

比如SIFT算法中做特征点匹配的时候就会利用到k-d树。而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中一种。

  索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),另一种是K近邻查询(K-neighbor searches)。范围查询就是给定查询点和查询距离的阈值,从数据集中找出所有与查询点距离小于阈值的数据;K近邻查询是给定查询点及正整数K,从数据集中找到距离查询点最近的K个数据,当K=1时,就是最近邻查询(nearest neighbor searches)。

03   实例

先以一个简单直观的实例来介绍k-d树算法。假设有6个二维数据点{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},数据点位于二维空间内(如图1中黑点所示)。k-d树算法就是要确定图1中这些分割空间的分割线(多维空间即为分割平面,一般为超平面)。下面就要通过一步步展示k-d树是如何确定这些分割线的。

k-d树算法可以分为两大部分,一部分是有关k-d树本身这种数据结构建立的算法,另一部分是在建立的k-d树上如何进行最邻近查找的算法。

03   构建算法

 

k-d树是一个二叉树,每个节点表示一个空间范围。表1给出的是k-d树每个节点中主要包含的数据结构。

从上面对k-d树节点的数据类型的描述可以看出构建k-d树是一个逐级展开的递归过程。表2给出的是构建k-d树的伪码。

以上述举的实例来看,过程如下:

  由于此例简单,数据维度只有2维,所以可以简单地给x,y两个方向轴编号为0,1,也即split={0,1}。

  (1)确定split域的首先该取的值。分别计算x,y方向上数据的方差得知x方向上的方差最大,所以split域值首先取0,也就是x轴方向;

  (2)确定Node-data的域值。根据x轴方向的值2,5,9,4,8,7排序选出中值为7,所以Node-data = (7,2)。这样,该节点的分割超平面就是通过(7,2)并垂直于split = 0(x轴)的直线x = 7;

  (3)确定左子空间和右子空间。分割超平面x = 7将整个空间分为两部分,如图2所示。x < =  7的部分为左子空间,包含3个节点{(2,3),(5,4),(4,7)};另一部分为右子空间,包含2个节点{(9,6),(8,1)}。

如算法所述,k-d树的构建是一个递归的过程。然后对左子空间和右子空间内的数据重复根节点的过程就可以得到下一级子节点(5,4)和(9,6)(也就是左右子空间的'根'节点),同时将空间和数据集进一步细分。如此反复直到空间中只包含一个数据点,如图1所示。最后生成的k-d树如图3所示。

04   PCL中k-d树的最邻近查找

在k-d树中进行数据的查找也是特征匹配的重要环节,其目的是检索在k-d树中与查询点距离最近的数据点。这里先以一个简单的实例来描述最邻近查找的基本思路。

  星号表示要查询的点(2.1,3.1)。通过二叉搜索,顺着搜索路径很快就能找到最邻近的近似点,也就是叶子节点(2,3)。而找到的叶子节点并不一定就是最邻近的,最邻近肯定距离查询点更近,应该位于以查询点为圆心且通过叶子节点的圆域内。为了找到真正的最近邻,还需要进行'回溯'操作:算法沿搜索路径反向查找是否有距离查询点更近的数据点。此例中先从(7,2)点开始进行二叉查找,然后到达(5,4),最后到达(2,3),此时搜索路径中的节点为<(7,2),(5,4),(2,3)>,首先以(2,3)作为当前最近邻点,计算其到查询点(2.1,3.1)的距离为0.1414,然后回溯到其父节点(5,4),并判断在该父节点的其他子节点空间中是否有距离查询点更近的数据点。以(2.1,3.1)为圆心,以0.1414为半径画圆,如图4所示。发现该圆并不和超平面y = 4交割,因此不用进入(5,4)节点右子空间中去搜索。

再回溯到(7,2),以(2.1,3.1)为圆心,以0.1414为半径的圆更不会与x = 7超平面交割,因此不用进入(7,2)右子空间进行查找。至此,搜索路径中的节点已经全部回溯完,结束整个搜索,返回最近邻点(2,3),最近距离为0.1414。

  一个复杂点了例子如查找点为(2,4.5)。同样先进行二叉查找,先从(7,2)查找到(5,4)节点,在进行查找时是由y = 4为分割超平面的,由于查找点为y值为4.5,因此进入右子空间查找到(4,7),形成搜索路径<(7,2),(5,4),(4,7)>,取(4,7)为当前最近邻点,计算其与目标查找点的距离为3.202。然后回溯到(5,4),计算其与查找点之间的距离为3.041。以(2,4.5)为圆心,以3.041为半径作圆,如图5所示。可见该圆和y = 4超平面交割,所以需要进入(5,4)左子空间进行查找。此时需将(2,3)节点加入搜索路径中得<(7,2),(2,3)>。回溯至(2,3)叶子节点,(2,3)距离(2,4.5)比(5,4)要近,所以最近邻点更新为(2,3),最近距离更新为1.5。回溯至(7,2),以(2,4.5)为圆心1.5为半径作圆,并不和x = 7分割超平面交割,如图6所示。至此,搜索路径回溯完。返回最近邻点(2,3),最近距离1.5。k-d树查询算法的伪代码如表3所示。

那么各种编程语言实现Kd tree的代码网址:

https://rosettacode.org/wiki/K-d_tree

PCL中关于K-D树的算法已经实现,是实现其他算法的基础,比如在使用滤波算法,配准等算法都会使用该接口。既然有轮子,就不要自己造轮子了。

(0)

相关推荐

  • K近邻算法(KNN)原理小结

    目录 1. KNN算法原理 2. KNN算法三要素 3. KNN算法之暴力实现原理 4. KNN算法之KD树实现原理 5. KNN算法之训练样本不平衡情况 6. 算法优缺点 1. KNN算法原理 KN ...

  • 一文了解激光点云的组织形式

    文章导读 三维点云数据用于表征目标表面的海量点集合,但是各个离散点之间并没有拓扑关系,一般通过建立点云的空间索引来实现基于邻域关系的快速查找.在三维点云数据中用的较为广泛的两种结构分别是Kdtree和 ...

  • 【PCL入门系列之二】PCL模块介绍(一)

    第一期内容中我们了解到,PCL官网上将PCL分为十四个功能模块(滤波器.特征.关键点.配准.Kd树.八叉树.分割.采样一致性.表面.范围图像.输入输出.可视化.常用.搜索),本期我们将粗略介绍部分模块 ...

  • PCL中PFH、FPFH理论

    上周点云公众号开始分享群友们的反馈分享,由博主分配任务,半个月甚至一个月参与学习小伙伴的反馈给群主,并在微信交流群中进行学术交流,加强大家的阅读文献能力,并提高公众号的分享效果.已经有一些开始陆续反馈 ...

  • PCL中八叉树理论

    建立空间索引在点云数据处理中已被广泛的应用,常见的空间索引一般是自顶向下逐级划分空间的各种空间索引结构,比较有代表性的包括BSP树,KD树,R树,CELL树,八叉树等索引结构,其中就属KD树和八叉树在 ...

  • kd-tree理论以及在PCL 中的代码的实现

    通过雷达,激光扫描,立体摄像机等三维测量设备获取的点云数据,具有数据量大,分布不均匀等特点,作为三维领域中一个重要的数据来源,点云主要是表征目标表面的海量点的集合,并不具备传统网格数据的几何拓扑信息, ...

  • 国际象棋和数学,推动了博弈论的发展,数学革命中诞生新理论

    乍一看,这两个学科似乎毫无关联.然而,数学和国际象棋之间有着许多意想不到的联系. 将数学与游戏联系起来的一种常见方法是通过概率.像扑克和掷骰子这样的游戏可以通过概率概念进行非常彻底的分析.这是因为这些 ...

  • 浅析标量波水处理效应中晶格畸变的理论机制及应用意义

    浅析标量波水处理效应中晶格畸变的理论机制及应用意义

  • “缠中说禅” 理论

    一.为什么叫"缠中说禅"? 1.以股市为基础.缠者,价格重叠区间也,买卖双方阵地战之区域也:禅者,破解之道也.以阵地战为中心,比较前后两段之力度大小,大者,留之,小者,去之. 2. ...

  • 股市中的“皮球理论”,这是20年的交易总结,越简单越实用

    不论是人生还是股市,心理学和哲学都是修的两大学问,因为只有通心理学,才能了解别人,看清自我:只有通哲学,才能放眼世界,提升自我.也只有心态上真正达到心静如水,才能聆听到露珠滴落湖面的那一声清脆,看到掀 ...

  • 浅谈易经中的三才理论与命理学的关系

    什么是三才?三才.即老子所言"道生一.一生二.二生三.三生万物"之中的"三".指的是"天.地.人"对于人和事物的影响,是一个三维立体的思维模 ...

  • 渊回修行:在家如何修道?要从儒释道国学传统文化中寻找方法理论

    渊回修行:在家如何修道?要从儒释道国学传统文化中寻找方法理论 首先我们要知道什么是修行? 修行就是修正我们自己的行为. 我们自己的行为,包括两个方面,一个是心理上的行为,一个是身体上的行为. 心理上的 ...