基于有界k_d树的最近点搜索算法_刘宇

合集下载

KNN算法之KD树

KNN算法之KD树

KNN算法之KD树KD树算法是先对数据集进⾏建模,然后搜索最近邻,最后⼀步是预测。

KD树中的K指的是样本特征的维数。

⼀、KD树的建⽴m个样本n维特征,计算n个特征的⽅差,取⽅差最⼤的第k维特征作为根节点。

选择第k维特征的中位数作为切分点,⼩于中位数的放左⼦树,⼤于中位数的放右⼦树,递归⽣成。

举例有⼆维样本6个,{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}:1、找根节点,6个数据点在x、y维度上的⽅差分别是6.97,5.37,x维度⽅差最⼤,因此选择x维进⾏键树;2、找切分点,x维中位数是(7,2),因此以这个点的x维度的取值进⾏划分;3、x=7将空间分为左右两个部分,然后递归使⽤此⽅法,最后结果为: (7,2) / \ (5,4)(9,6) / \ / (2,3)(4,7)(8,1)⼆、搜索最近邻先找到包含⽬标点的叶⼦节点,然后以⽬标点为圆⼼,⽬标点到叶⼦节点距离为半径,得到超球体。

最近邻的点⼀点在内部。

返回叶⼦节点的⽗节点,检查另⼀个叶⼦节点包含的超矩体是否和这个超球体相交,相交的话在这个叶⼦节点寻找有没有更近的近邻,更新。

当回溯到根节点时,结束。

此时保存的节点就是最近邻节点。

KD树划分后可以⼤⼤减少⽆效的最近邻搜索,很多样本点由于所在的超矩形体和超球体不相交,根本不需要计算距离。

⼤⼤节省了计算时间。

1、对(2,4.5)搜索最近邻,先从(7,2)开始找,2<7因此在左⼦树;2、4.5>4,在右⼦空间找到叶⼦节点(4,7),计算距离为3.202,以它为半径得到超球体,返回⽗节点(5,4);3、计算⽗节点与(2,4.5)的距离=3.041<3.202,更新保存的最近节点,同时由于左⼦空间与超球体相交,所以到左⼦空间中找有没有叶⼦节点;4、左⼦空间中(2,3)节点与⽬标节点更近,找到最近邻。

三、KD树预测在kd树搜索最近邻的基础上,选择到了第⼀个最近邻样本,把它设置为已选,然后第⼆轮中忽略这个样本,重新找最近邻。

KD树数据结构中的多维空间数据检索工具

KD树数据结构中的多维空间数据检索工具

KD树数据结构中的多维空间数据检索工具KD树(K-dimensional tree)是一种用于多维空间数据检索的数据结构,它在计算机科学领域中被广泛应用于解决各种问题,如最近邻搜索、范围搜索等。

KD树通过将空间划分为多个区域,从而实现高效的数据检索。

本文将介绍KD树数据结构的原理、构建方法以及在多维空间数据检索中的应用。

### 1. KD树数据结构简介KD树是一种二叉树,每个节点代表一个k维空间中的点,其中k 为维度的数量。

在构建KD树时,我们需要选择一个维度作为划分的依据,通常是选择数据集中方差最大的维度。

根据所选维度的中位数,将数据集划分为两部分,左子树包含小于中位数的数据点,右子树包含大于中位数的数据点。

递归地构建子树,直到每个节点只包含一个数据点或数据点为空为止。

### 2. 构建KD树的步骤构建KD树的步骤如下:1. 选择划分维度:选择一个维度作为划分的依据。

2. 选择划分点:找到所选维度的中位数作为划分点。

3. 划分数据集:根据划分点将数据集分为两部分,左子树包含小于划分点的数据点,右子树包含大于划分点的数据点。

4. 递归构建子树:对左右子集分别重复上述步骤,直到每个节点只包含一个数据点或数据点为空。

### 3. KD树的搜索算法在KD树中进行数据检索时,可以通过以下算法实现:1. 从根节点开始,根据当前节点的划分维度和划分点,确定搜索路径。

2. 沿着搜索路径向下遍历KD树,根据当前节点的划分维度和划分点,确定下一个访问的子节点。

3. 如果当前节点是叶子节点,则计算当前节点到目标点的距离,并更新最近邻点。

4. 递归地向上回溯,检查当前节点的父节点的另一子节点是否可能包含更近的点。

5. 如果存在更近的点,则继续向下遍历该子树,直到遍历完整个KD 树。

### 4. KD树在多维空间数据检索中的应用KD树在多维空间数据检索中具有广泛的应用,其中最常见的应用包括最近邻搜索和范围搜索。

1. 最近邻搜索:通过构建KD树,可以高效地找到给定点在多维空间中的最近邻点。

kd树和BBF算法

kd树和BBF算法

d ( x, y ) ( x1 y1 ) 2 ( x2 y2 ) 2 ... ( xn yn ) 2
二、什么是K-D 树
Kd-树是K-dimension tree的缩写,是对数据点在k维 空间(如二维(x,y),三维(x,y,z),k维(x1,y,z..)) 中划分的一种数据结构,主要应用于多维空间关键数据 的搜索(如:范围搜索和最近邻搜索)。本质上说, Kd-树就是一种平衡二叉树。 k-d树也可以理解为一种空间划分树,就是把整个空间 划分为特定的几个部分,然后在特定空间的部分内进行 相关搜索操作。想像一个三维(多维很难想象)空间,kd 树按照一定的划分规则把这个三维空间划分了多个空间, 如下图所示:
构建结果如下图所示:
二、查询K-D 树
输入:构造的kd树,目标点x; 输出:x 的最近邻 算法步骤如下: 1.在kd树中找出包含目标点x的叶结点:从根结点出发,递归 地向下搜索kd树。若目标点x当前维的坐标小于切分点当前维 的坐标,则移动到左子结点,否则移动到右子结点,直到子结 点为叶结点为止。在整个查询过程中一直有一个不断更新优先 级队列。 2.对查询到的叶子结点做边界重叠球测试,以判断是否还需要 继续搜索。具体做法是:判断分隔那些记录的几何边界与以查 询点为中心,以当前最近点为半径的圆或超球体是否相交,若 相交则递归的查询其兄弟结点,若不相交则回溯。 3.当回退到根结点时,搜索结束,最后的更新的最近邻即为x 的最近邻点。
举个例子如查找点为(2,4.5),具体步骤依次如下:
1.首先从根结点(7,2)开始查询,因为根结点是从第一维开始划分的, 所以拿查询点的第一维2与7比较,显然2<7,所以进入(7,2)的左子结 点(5,4)进行查询,同理因为(5,4)结点是按照第二维划分的,所 以拿查询点的第二维4.5 与4比较,显然4.5>4,所以进入(5,4)的右 子结点(4,7)查询。 2.当查询到(4,7)时发现此节点为叶子结点,进行“边界重叠球测 试”,此时是以(2,4.5)为圆心,以(2,4.5)到(5,4)的距离为 半径画圆,发现(4,7)结点与分割该子文件的边界y = 4 相交,则需 要继续对其兄弟结点(2,3)进行查询,此时则更新到最近点(2,3)。 3.按照向下查找的路径向上回溯,每个结点都进行“边界重叠球测试”, 重复上一步。

Vocabulary Tree

Vocabulary Tree

Scalable Recognition with a Vocabulary Tree
K-d Tree & BBF (Best bin first)
K-d Tree
• 实际上是一棵平衡二叉树
– 例: pointList = [(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)] tree = kdtree(pointList)
概念:
• k-d树是一个特殊的二叉树,每个非叶节点 对应一个k维的向量点。这个节点表示一个 垂直于某维轴的超平面,将空间一分为二。 这个节点所有左子树上的点都在这个超平 面左边,所有右子树上的点都在这个超平 面的右边。
k-d树的构建的经典方法
• 每个坐标轴被依次循环使用,来选择分割 超平面; • 分割位置被选择在所有剩下点的该坐标的 中点; • 所生成的k-d树是一个平衡二叉树。其中每 个叶子和根节点的距离基本相等。
Scalable Recognition with a Vocabulary Tree
Scalable Recognition with a Vocabulary Tree
Scalable Recognition with a Vocabulary Tree
Scalable Recognition with a Vocabulary Tree
最近邻搜索算法
• 按照插入节点的方法遍历树,找到一个叶 子节点; • 将此叶子节点记作当前最好点; • 反溯而上,如果父节点比当前最好点还要 好,则检查其左右子树。
改善方法•ຫໍສະໝຸດ 限定查找的点数 • 限定查找时间 • 或者采用近似最邻近搜索算法,例如: Best Bin First。
缺点

k-d树

k-d树

16
K-d树的查找
1)精确的点查找
2)最近邻点的查找
3)范围查找
17
K-d树的查找
1)精确的点查找
例如查找点H(85,15)
分辨器
(5,45)
A
(35,42)
X:0
(52,10)
B D
(27,35)
C E
(90,5) (85,15)
Y:1 X: 0
F
H
(62,77)
G Y: 1 (82,65)
X: 0
k-d树
引入k-d树的目的
K-d树的定义
kd树的构造 kd树的插入
K-d树的基本操作
kd树的删除 kd树的查询
K-d树的应用
总结
1
引入k-d树的目的
常见的数据结构都是基于一维空间。不便查 询具有多个关键字索引的数据。 K-d树将搜索拓展到多维空间,大大提高了多 属性关键字的搜索效率。
2
k-d树
优点:
Kd树适用于多维空间关键数据的搜索。如最近邻搜索和 范围搜索。
缺点: 1)在最近邻搜索中,由于有大量的回溯,效率较低。 2)删除操作比较复杂,代价较高。 3)应用不太广泛
26
Thanks
27
薪水300
30,260 25,400 45,350
50,275 60,260
50,100 50,120
年龄35
25,400
45,350 35,350
24
k-d树
引入k-d树的目的
kd树的定义
kd树的构造 kd树的插入
K-d树的基本操作
kd树的删除 kd树的查询
K-d树的应用 总结
25
总结

一种基于网格的最近邻SVM新算法

一种基于网格的最近邻SVM新算法

一种基于网格的最近邻SVM新算法
吴渝;向浩宇;刘群
【期刊名称】《重庆邮电大学学报(自然科学版)》
【年(卷),期】2008(020)006
【摘要】支持向量机(SVM)算法往往由于分类面过分复杂或过学习而导致其泛化能力降低,现有的最近邻(NN-SVM)或K近邻(K-NN-SVM)方法解决了这类样本问题,但算法时间复杂度高,处理海量样本的能力有限.在NN-SVM算法的基础上引入了网格概念,提出了G-NN-SVM算法,该算法先对空间进行分块,然后在空间块内计算样本距离,找出最近邻,并结合分块序列最小优化算法(SMO)进行了算法实现.实验表明,该方法降低了计算复杂度,它在保持分类精度的同时,提高了训练和分类的速度,并具有较强的泛化能力,从而提高了原NN-SVM算法的海量数据处理能力.
【总页数】4页(P706-709)
【作者】吴渝;向浩宇;刘群
【作者单位】重庆邮电大学,人工智能研究所,重庆市400065;重庆邮电大学,人工智能研究所,重庆市400065;重庆邮电大学,人工智能研究所,重庆市400065
【正文语种】中文
【中图分类】TP391
【相关文献】
1.一种基于密度网格索引的κ-最近邻查询算法 [J], 章登义;李想
2.一种基于检索树的改进计数最近邻分类新算法 [J], 廖志芳;樊晓平;刘皛;Zhining
LIAO;Zhihua Qu
3.一种新的基于伪最近邻算法的降水预报方法 [J], 黄明明;林润生;黄帅;邢腾飞
4.一种基于数据空间自适应规则网格划分的Skd-tree最近邻算法 [J], 王荣秀;王波
5.一种基于数据空间自适应规则网格划分的Skd-tree最近邻算法 [J], 王荣秀;王波
因版权原因,仅展示原文概要,查看原文内容请购买。

多维空间分割树--KD树

多维空间分割树--KD树

多维空间分割树--KD树算法介绍KD树的全称为k-Dimension Tree的简称,是⼀种分割K维空间的数据结构,主要应⽤于关键信息的搜索。

为什么说是K维的呢,因为这时候的空间不仅仅是2维度的,他可能是3维,4维度的或者是更多。

我们举个例⼦,如果是⼆维的空间,对于其中的空间进⾏分割的就是⼀条条的分割线,⽐如说下⾯这个样⼦。

如果是3维的呢,那么分割的媒介就是⼀个平⾯了,下⾯是3维空间的分割这就稍稍有点抽象了,如果是3维以上,我们把这样的分割媒介可以统统叫做超平⾯。

那么KD树算法有什么特别之处呢,还有他与K-NN算法之间⼜有什么关系呢,这将是下⾯所将要描述的。

KNNKNN就是K最近邻算法,他是⼀个分类算法,因为算法简单,分类效果也还不错,也被许多⼈使⽤着,算法的原理就是选出与给定数据最近的k个数据,然后根据k个数据中占⽐最多的分类作为测试数据的最终分类。

图⽰如下:算法固然简单,但是其中通过逐个去⽐较的办法求得最近的k个数据点,效率太低,时间复杂度会随着训练数据数量的增多⽽线性增长。

于是就需要⼀种更加⾼效快速的办法来找到所给查询点的最近邻,⽽KD树就是其中的⼀种⾏之有效的办法。

但是不管是KNN算法还是KD树算法,他们都属于相似性查询中的K近邻查询的范畴。

在相似性查询算法中还有⼀类查询是范围查询,就是给定距离阈值和查询点,dbscan算法可以说是⼀种范围查询,基于给定点进⾏局部密度范围的搜索。

想要了解KNN算法或者是Dbscan算法的可以点击我的和。

KD-Tree在KNN算法中,针对查询点数据的查找采⽤的是线性扫描的⽅法,说⽩了就是暴⼒⽐较,KD树在这⽅⾯⽤了⼆分划分的思想,将数据进⾏逐层空间上的划分,⼤⼤的提⾼了查询的速度,可以理解为⼀个变形的⼆分搜索时间,只不过这个适⽤到了多维空间的层次上。

下⾯是⼆维空间的情况下,数据的划分结果:现在看到的图在逻辑上的意思就是⼀棵完整的⼆叉树,虚线上的点是叶⼦节点。

基于三维激光扫描的矿山法隧道超欠挖及平整度智能化检测

基于三维激光扫描的矿山法隧道超欠挖及平整度智能化检测

基于三维激光扫描的矿山法隧道超欠挖及平整度智能化检测齐成龙(中国铁路设计集团有限公司土建工程设计研究院,天津300308)摘要:为了提高矿山法隧道施工过程中的超欠挖及平整度检测水平,将三维激光扫描与其他信息化手段结合,取得了一定的研究成果。

但是,超欠挖检测主要采用断面法实现,未充分发挥三维技术优势;平整度检测主要通过最大凹凸点到拟合平面的距离进行计算,不符合现行规范的靠尺法要求。

针对上述问题,利用切割、去噪、补全、降采样等算法,进行激光扫描点云预处理;通过聚类及BPA算法,将点云转化为空间三角网;借助三角网格投影及棱柱体体积积分,统计三维超欠挖情况;综合运用k-d树和八叉树算法,模拟靠尺法平整度计算流程,完成三维平整度计算。

在实际工程项目中进行应用验证,最终实现矿山法隧道施工阶段的智能化超欠挖和平整度检测。

关键词:隧道;点云;平整度;超欠挖;靠尺法;k-d树;智能化检测中图分类号:U455 文献标识码:A 文章编号:1672-061X(2024)02-0099-07 DOI:10.19550/j.issn.1672-061x.2024.01.29.0010 引言由于矿山法隧道在测量及施工过程中会产生误差,需要进行超挖或欠挖检测,以确定净空是否符合要求。

传统的隧道超欠挖检测主要利用断面仪、全站仪等设备,逐点、逐面测量开挖断面,易导致点位离散、采样间隔过大,常发生欠挖或漏测等情况。

同时,尽管我国多项技术标准对隧道初期支护阶段的混凝土表面平整度检测提出了明确规定,但一直采用人工靠尺手动测量,通过计算凹凸点的“矢高-弦长”比值形成平整度检测指标,导致初期支护阶段隧道混凝土表面的平整度检测基本停留在“范围小”“精度低”“速度慢”的状态。

为此,国内外学者将激光扫描与其他信息化手段相结合,开展了一系列超欠挖及平整度检测技术研究。

在超欠挖检测方面,李瑶等[1]通过三维激光扫描采集隧道开挖断面数据,根据断面超欠挖算法计算超欠挖的体积、面积、平均线性值以及每延米超挖、欠挖体基金项目:中国国家铁路集团有限公司科技研究开发计划项目[N2023G070、N2023G080-A(JB)]作者简介:齐成龙(1986—),男,高级工程师。

kd树

kd树
k-d树
k-d树

k-d树是早期发明的一种用于多 维检索的树结构,它每一层都根 据特定的关键码将对象空间分解 为两个
顶层结点按一个维划分 第二层结点按照另一维进行划分 …以此类推在各个维之间反复进

识别器( discriminator )
在每一层用来进行决策的关键码 称为识别器( discriminator ) 对于k维关键码,在第i层把识别 器定义为i mod k

进入其右子树发现结点D(20,80)也不符合。

同样的道理,算法将进入根结点的右子树进行搜索
K-D树的范围查找
查找与(50,70)距离小于20的点(续) 根的右结点C(70,30)显然不在其中


纵坐标70-30>20 不需要进入C的左子树,因为左边子树的y<30

进入其右子树F,发现结点F(80,70)也不符 合


上图是一个二维的k-d树,我们限制其取值范 围为100×100之内 k-d树的每个内部结点

把当前的空间划分为两块 交替地对两个维进行划分 其子结点进一步把空间划分成更小的部分 子结点的划分线不会穿过根结点的划分线 这些矩形是结点可能落到的各子树范围

根结点把空间划分成两部分


k-d树中的这些结点最终把空间分解为矩形


例如,对一个三维的关键码做检 索,3个关键码(x,y,z)标号 分别为0、1、2
结点的分配

在结点分配的时候首先比较该层 的识别器
如果关键码小于识别器的值就放 到左子树中 否则放到右子树

然后在下一层使用新的识别器来 判断每个结点的归属 识别器的值应该尽量使得被划分

k-d树检测算法

k-d树检测算法

K-d树的检测算法k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。

主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。

应用背景SIFT算法中做特征点匹配的时候就会利用到k-d树。

而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。

针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中一种。

索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),另一种是K近邻查询(K-neighbor searches)。

范围查询就是给定查询点和查询距离的阈值,从数据集中找出所有与查询点距离小于阈值的数据;K近邻查询是给定查询点及正整数K,从数据集中找到距离查询点最近的K个数据,当K=1时,就是最近邻查询(nearest neighbor searches)。

特征匹配算子大致可以分为两类。

一类是线性扫描法,即将数据集中的点与查询点逐一进行距离比较,也就是穷举,缺点很明显,就是没有利用数据集本身蕴含的任何结构信息,搜索效率较低,第二类是建立数据索引,然后再进行快速匹配。

因为实际数据一般都会呈现出簇状的聚类形态,通过设计有效的索引结构可以大大加快检索的速度。

索引树属于第二类,其基本思想就是对搜索空间进行层次划分。

根据划分的空间是否有混叠可以分为Clipping 和Overlapping两种。

前者划分空间没有重叠,其代表就是k-d树;后者划分空间相互有交叠,其代表为R树。

(这里只介绍k-d树)实例先以一个简单直观的实例来介绍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树的最近点搜索算法

第36卷 第7期2008年 7月 华 中 科 技 大 学 学 报(自然科学版)J.Huazhong Univ.of Sci.&Tech.(Natural Science Edition )Vol.36No.7 J ul. 2008收稿日期:2007204205.作者简介:刘 宇(19762),男,博士研究生,E 2mail :headheat @.基金项目:国家自然科学基金资助项目(5035020,50405032);国家重点基础研究发展计划资助项目(2003CB716207).基于有界k 2d 树的最近点搜索算法刘 宇 熊有伦(华中科技大学机械科学与工程学院;数字制造装备与技术国家重点实验室,湖北武汉430074)摘要:提出了一种基于有界k 2d 树的最近点搜索算法.算法的原理是:由根节点中的包围盒确定树中数据的空间范围,并在搜索过程中不断划分包围盒来缩小搜索范围,同时递归地计算查询点到包围盒的距离.结合优先级队列,基于有界k 2d 树的最近点搜索算法拓展到搜索按距离远近排列的多个最近点.实测和仿真分析表明,本搜索算法的计算效率高于传统的搜索算法.关 键 词:逆向工程;最近点搜索;有界k 2d 树;包围盒中图分类号:TP391 文献标识码:A 文章编号:167124512(2008)0720073204Algorithm for searching nearest 2neighbor based on the bounded k 2d treeL i u Yu X iong Youl un(College of Mechanical Science and Engineering ;State Key Laboratory of Digital Manufacturing Equipment and Technology ,Huazhong University of Science and Technology ,Wuhan 430074,China )Abstract :An algorit hm for searching nearest 2neighbor is p roposed based on t he bounded k 2d t ree of which t he spatial range of t he data is restricted by t he bounded box of t he root node.The search area in t he searching p rocess is reduced by continually dividing bounded boxes.The distance from a query point to a bounded box is also comp uted bined wit h a priority queue ,t he clo sest point query algorit hm can be generalized to search multi 2nearest 2neighbors ordered by t heir distances to a query point.The experiment s on bot h real and synt hetic data set s show t hat t he query algorit hm based on t he bounded k 2d t ree is comp utationally more efficient t han some traditional algorit hms.K ey w ords :reverse engineering ;nearest 2neighbor searching ;bounded k 2d t ree ;bounded box 在逆向工程中,基于离散坐标点的操作通常需要查询一点的相邻点[1,2].随着数据获取技术的飞速发展,需处理的数据点数目动辄数十万或上百万,提高相邻点查询算法的效率能有效提高逆向工程中数据处理的效率.k 维二叉搜索树(k 2dimensional binary search t rees ,简称k 2d 树[3]),是对k 维数据进行空间查询的有效数据结构,受到关注和研究[4~7],已在矢量量化、数据压缩、数据库匹配查询等方面得到了广泛应用.本文将k 2d 树与空间包围盒相结合,构造了有界k 2d 树,提出了相应的最近点搜索算法.1 有界k 2d 树与以往文献中不同的是,本文在有界k 2d 树的内部节点中,定义了左右划分平面L l 和L r 来表示对该节点中数据的划分(见图1),在整个树的根节点中还存储了一组主对角点的坐标来表示k 2d 树中数据的包围盒.因此,有界k 2d 树的内部节点由2个指向其他节点或者为空的指针、维数辨别量、2个划分值组成.有界k 2d 树的叶节点则由指向该叶节点中所包含的数据点列的指针和表示该数据点列大小的值组成.图1 同一节点处的不同划分平面有界k2d树与一般k2d树一样,用递归的方式进行构造.在每个内部节点处,选取一个中值将以该节点为根节点的树划分为大小基本相等(所包含的数据点数目的差别不超过1)的2棵子树.这样构造的k2d树从根节点到叶节点的平均搜索长度为[log2n],可以提高搜索效率,其中[]表示向下取整数.从n个数据点构造有界k2d树所需的存储空间和计算时间与一般k2d树为同一量级,分别为O(n)和O(n log n).图1以二维数据为例,说明左右划分平面对数据的划分,其中L m表示中值划分平面,p1和p2是左子树中的点,p3是右子树中的点.L m可以由L l和L r来确定.设p2和p3分别是左右子树中到L m最近的点.则L m经过p2和p3连线的中点.选择介于L l和L r之间任一平面作为划分平面,数据点在左右子树中的分配均不会发生变化.但选择与图中的圆相交的划分平面时,若p1为查询点q的当前的最近点,则搜索算法通过相交测试,将会对右子树中的数据点进行搜索.因此有界k2d树的内部节点用点p2和p3所确定的值s l和s r分别表示划分平面L l和L r沿相应坐标轴的位置,以使搜索算法减少可能的比较次数.2 相邻点搜索设输入数据点集为P={p i,i=1,2,…,n},式中p i为k维空间中的点.点q在P中的m 个最近相邻点查询就是在P中搜索与查询点q 距离最近的m个点.当m=1时,则是在P中搜索点q的最近点.在查询中,数据点一般为欧几里德空间中的点,点之间的距离定义为欧氏距离.设l=[l1,l2,…,l k]T和h=[h1,h2,…, h k]T是k维欧氏空间中的2个点,l i≤h i(1≤i≤k).则l和h所定义的包围盒B是以l和h为主对角点且各面与坐标轴垂直的一个2k面体.点q=[q1,q2,…,q k]T到B的最近点是B的内部或边界上与q距离最近的点,它们之间的距离则是q到B的距离.有界k2d树采用平方距离以避免开方运算,q到B的平方距离D(q,B)=∑ki=1(q i-r i)2,(1)式中:r i=s i (q i<s i);b i (q i>b i);q i (其他).称D(q,B)为查询点q到与B对应的节点的距离.有界k2d树的根节点中记录了树中数据的包围盒,而其他节点的包围盒则可根据节点中左右划分平面从父节点的包围盒得到.图2以二维数据为例,说明了父节点与子节点的包围盒的关系.图中实线矩形B是父节点的包围盒,虚线表示父节点中由s l和s r定义的左右划分平面L l和L r.L l和L r将包围盒B划分为B l,B m和B r3部分.左右子节点包围盒分别是B l和B r.图2 父节点包围盒与子节点包围盒的关系查询点q到子节点的距离也可以在q到父节点的距离的基础上计算得到.设父节点中的划分平面与第j个坐标轴垂直.则有:D(q,B l)= D(q,B) (q j≤s l), D(q,B)-(q j-r j)2+(q j-s l)2 (q j>s l);(2)D(q,B r)= D(q,B)-(q j-r j)2+(q j-s r)2 (q j<s r), D(q,B) (q j≥s r).(3) 基于有界k2d树的最近点搜索算法从根节点开始,依次计算查询点到左右子节点的包围盒的距离,然后选择距离较近的节点向下搜索.当距离相等时,默认向左节点进行搜索.到达叶节点后,计算查询点与叶节点中的数据点的最近距离,然后向上沿搜索路径搜索与查询点的距离小于当前最近距离的子树.由式(2)和(3),既可以从查询点到父节点的距离计算查询点到子节点的距离,也可以从查询点到子节点的距离计算查询点到父节点的距离.因而搜索算法中只需记录当前节点的包围盒和查询点到该包围盒的距离,并在搜索过程中对包围盒和到包围盒的距离进行动态更新.于是,给出如下基于有界k2d树的最近点搜索算・47・ 华 中 科 技 大 学 学 报(自然科学版) 第36卷法:a.初始化当前节点为根节点,当前包围盒B c 为根节点的包围盒;b.若当前节点为叶节点,则转入叶节点搜索程序,否则,进入下一步;c.计算D(q,B cl)和D(q,B cr),其中B cl和B cr分别为当前节点左右子节点的包围盒;d.若D(q,B cl)≤D(q,B cr),则令B c=B cl,然后在左子树中进行搜索,搜索完成后若D(q,B cr)小于查询点到当前最近点的距离,则继续搜索右子树;e.若D(q, B cr)<D(q,B cl),则令B c=B cr,然后在右子树中进行搜索,搜索完成后若D(q,B cl)小于查询点到当前最近点的距离,继续搜索左子树.步骤d和e通过函数的递归调用来实现.叶节点搜索程序与内部节点的搜索程序不同,需单独实现.上述算法的时间复杂度与搜索的节点数目成正比.一个包含n个节点的有界k2d树从根节点到叶节点的平均搜索长度为[log2n].另外,在从下向上的搜索过程中,可能有新的节点需要搜索.因此,上述搜索算法的实际计算时间还与k2d树中数据的分布情况、查询点的位置等相关.结合一个基于最大堆的优先级队列,单个最近点搜索算法可以扩展到搜索q的m(m>1)个最近点.队列中的每个元素包含2个域:一个表示某个数据点的坐标;另一个是该元素的键值.队列根据元素的键值进行组织,键值取值为该元素表示的数据点到查询点的平方距离.在搜索中,当优先级队列中的元素个数不足m时,碰到的每个数据点都会进入队列.当优先级队列中的元素个数达到m时,则队列中元素的个数不再增加.这时若碰到一数据点,其到查询点的平方距离小于队列中元素的最大键值,则删除最大堆的堆顶元素,并将该数据点插入堆中.在一个包含n个元素的堆上删除或插入一个元素的时间复杂度为O(log2n).因此,m个最近点搜索的时间复杂度与单个最近点搜索相比,至少增加O(log2m!).3 试验结果将本文算法与其他3种基于k2d树的搜索算法进行了比较:一种是Sproull的算法[5],记做PMS;另外2种是Arya等的基于距离增量计算的算法和采用优先级队列的算法[6],分别记做IDC和PS.而本文的算法则记为BS.所有的搜索算法都采用平方距离,且在按同样的算法构造的k2d树上测试.所构造的k2d树的叶节点中的数据点个数一般为1,各节点的划分平面与坐标轴垂直.实验都在一台配备了奔腾Ⅲ933M Hz CPU 和256Mbyte内存的个人计算机上进行.首先采用仿真数据进行比较.仿真数据随机分布在一个中心与原点重合,各边长均为100的超立方体中.仿真数据的坐标由下式生成:100×rand()/32767-50,其中rand()是一个随机数生成器,返回值介于1和32767之间.另外构造一个中心与原点重合,各边长均为400的超立方体.然后在该超立方体的一条主对角线上选取100个均匀分布的点.图3中的结果是以这100个点为查询点时的平均搜索时间.采用3D激光扫描仪对一个实际的发动机零件进行测量,获得了图4 (a)所示的三维点数据.该零件的尺寸约为294 mm×352mm×124mm.通过平移,使测量数据的重心与原点重合.在一个中心与原点重合,尺寸为294mm×352mm×124mm的长方体内选取均匀分布的125个点作为查询点.图4(b)则是搜索这125个点的最近点的平均时间,其中不同大小的数据是通过原始测量数据的均匀采样获得.从图3可看出,随着数据维数的增加,不同搜索算法的计算时间均明显增加.这是由于k2d树对数据的划分越来越不充分引起的.而图3和图4都表明本算法的计算效率要高于其他3种算法.图3 在不同维数的仿真数据中搜索最近点(a)实测三维点数据(b)搜索最近点结果图4 在实测三维数据中搜索最近点在其他一系列实验中,考察了选取不同分布范围的查询点的搜索结果.图5给出了其中部分实验的结果,图中仿真数据的维数为8,点数为10×104,实测数据的点数为16×104.实验中,查・57・第7期 刘 宇等:基于有界k2d树的最近点搜索算法 询点仍然沿超立方体的主对角线均匀分布,但选取查询点的超立方体的边长则依次为仿真数据所分布的超立方体边长的1~7倍.同样,在采用实测数据的实验中,选取查询点的长方体的边长依次为294mm ×352mm ×124mm 的长方体的1~7倍.从图5可以看出,查询点位置对本文搜索算法的计算时间的影响要比其他3种算法要小得多. (a )仿真数据(b )实测数据图5 选取不同分布范围的查询点的搜索结果另外,考察了本文算法搜索多个最近点的时间和当有界k 2d 树的叶节点中存储不同数目的数据点时的搜索时间.图6是在实测数据上搜索多个最近点的结果,其中叶节点中的点数为1,4条斜线对应的实测数据的点数分别为4×104,8×104,16×104和32×104.从图6可以看出,搜索时间随最近点数的增加稍有增加.图7是叶节点中存储不同数目的数据点时,在点数为16×104的实测数据上搜索多个最近点的结果,图中数据5,10,20和30表示搜索最近点的个数.从图7可以看出,适当增加叶节点中存储的数据点个数可以减少搜索时间.图6 搜索多个最近点结果本文提出了1种欧氏空间中最近点的快速算图7 叶节点中存储不同数目点时的搜索结果法和相应的有界k 2d 树结构,通过对根节点的包围盒的动态划分和计算获得其他节点的包围盒及查询点到这些包围盒的距离,结合优先级队列,将搜索算法从单一最近点搜索拓展到了多个最近点搜索.实验仿真表明,本算法的计算效率均优于其他3种传统的搜索算法.参考文献[1]Hameiri E ,Shimshoni I.Estimation the principalcurvatures and the Darboux frame f rom real 32D range data[J ].IEEE Transaction on Systems ,Man ,and Cybernetics ,Part B ,2003,33(4):6262637.[2]Paul J B ,Neil D M.A method for registration of 3Dshapes[J ].IEEE Transactions on Pattern Analysis and Machine Intelligence ,1992,14(2):2392256.[3]Bentley J L.Multidimensional binary search treesused for associative searching [J ].Communications of the ACM ,1975,18(9):5092517.[4]Friedman J H ,Bentley J L ,Finkel R A.An algo 2rithm for finding best matches in logarithmic expec 2ted time [J ].ACM Transactions on Mathematical Software ,1977,3(3):2092226.[5]Sproull R F.Refinements to nearest 2neighbor search 2ing in k 2dimensional trees [J ].Algorithmica ,1991,6(4):5792589.[6]Arya S ,Mount D.M.Algorithms for fast vectorquantization [C ]∥Proceedings of the IEEE Data Compression Conference.Snowbird :[s.n.],1993:3812390.[7]Vanco M ,Brunnett G ,Schreiber T.A hashing strat 2egy for efficient k 2nearest neighbors computation [C]∥Proceedings of the International Conference on Computer Graphics.Canmore :[s.n.],1999:1202128.・67・ 华 中 科 技 大 学 学 报(自然科学版) 第36卷。

KNN(K近邻法)算法原理

KNN(K近邻法)算法原理

KNN(K近邻法)算法原理⼀、K近邻概述k近邻法(k-nearest neighbor, kNN)是⼀种基本分类与回归⽅法(有监督学习的⼀种),KNN(k-nearest neighbor algorithm)算法的核⼼思想是如果⼀个样本在特征空间中的k(k⼀般不超过20)个最相邻的样本中的⼤多数属于某⼀个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。

简单地说,K-近邻算法采⽤测量不同特征值之间的距离⽅法进⾏分类。

通常,在分类任务中可使⽤“投票法”,即选择这k个实例中出现最多的标记类别作为预测结果;在回归任务中可使⽤“平均法”,即将这k个实例的实值输出标记的平均值作为预测结果;还可基于距离远近进⾏加权平均或加权投票,距离越近的实例权重越⼤。

k近邻法不具有显式的学习过程,事实上,它是懒惰学习(lazy learning)的著名代表,此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进⾏处理K近邻算法的优缺点:优点:精度⾼、对异常值不敏感、⽆数据输⼊假定缺点:计算复杂度⾼、空间复杂度⾼适⽤数据范围:数值型和标称型⼆、K近邻法的三要素距离度量、k值的选择及分类决策规则是k近邻法的三个基本要素。

根据选择的距离度量(如曼哈顿距离或欧⽒距离),可计算测试实例与训练集中的每个实例点的距离,根据k值选择k个最近邻点,最后根据分类决策规则将测试实例分类。

根据欧⽒距离,选择k=4个离测试实例最近的训练实例(红圈处),再根据多数表决的分类决策规则,即这4个实例多数属于“-类”,可推断测试实例为“-类”。

k近邻法1968年由Cover和Hart提出1.距离度量特征空间中的两个实例点的距离是两个实例点相似程度的反映。

K近邻法的特征空间⼀般是n维实数向量空间Rn。

使⽤的距离是欧⽒距离,但也可以是其他距离,如更⼀般的Lp距离或Minkowski距离Minkowski距离(也叫闵⽒距离):当p=1时,得到绝对值距离,也称曼哈顿距离(Manhattan distance),在⼆维空间中可以看出,这种距离是计算两点之间的直⾓边距离,相当于城市中出租汽车沿城市街道拐直⾓前进⽽不能⾛两点连接间的最短距离,绝对值距离的特点是各特征参数以等权参与进来,所以也称等混合距离当p=2时,得到欧⼏⾥德距离(Euclidean distance),就是两点之间的直线距离(以下简称欧⽒距离)。

点云间距计算算法

点云间距计算算法

点云间距计算算法全文共四篇示例,供读者参考第一篇示例:点云是由大量的离散点组成的三维数据集合,通常用来表示物体表面的形状和结构。

在许多领域,如机器人导航、三维重建、虚拟现实等,点云数据都扮演着重要的角色。

点云数据通常密集且混乱,需要一些算法来计算点云之间的距离,以便更好地分析和处理这些数据。

点云间距计算算法是指计算点云数据中各个点之间的距离的方法。

在实际应用中,点云数据通常包含大量的点,因此需要高效的算法来计算这些点之间的距离。

常用的点云间距计算算法有最近点计算算法、K最近邻算法、RANSAC算法等。

最近点计算算法是最简单的点云间距计算算法之一,它通过计算每个点与其最近的邻居点之间的距离来获取点云数据的局部结构信息。

该算法的计算复杂度为O(n^2),其中n为点云数据的点的数量。

虽然最近点计算算法简单高效,但在处理大规模点云数据时性能有限。

RANSAC算法是一种基于随机采样的点云间距计算算法,它通过随机选择一组点来拟合模型,并计算其他点到该模型的距离,然后根据距离阈值筛选出符合条件的点。

RANSAC算法在点云配准、平面拟合等方面有着广泛的应用,但在处理大规模点云数据时性能较差。

除了上述算法外,还有一些基于机器学习的点云间距计算算法,如基于深度学习的点云特征学习、点云配对等。

这些算法通过学习点云数据的特征表示,实现更高效、更准确的点云间距计算。

虽然这些算法在处理大规模点云数据时性能较好,但需要大量的标注数据和计算资源。

在实际应用中,选择合适的点云间距计算算法需要根据具体场景和需求来决定。

在处理大规模点云数据时,可以选择K最近邻算法等高效算法;在需要对点云数据进行进一步分析和处理时,可以选择基于机器学习的算法。

研究和开发更高效的点云间距计算算法,将有助于提高点云数据的处理效率和质量,推动点云技术在各个领域的发展和应用。

【字数不足,继续】总结而言,点云间距计算算法在点云数据处理中起着至关重要的作用。

选择合适的点云间距计算算法可以更好地分析和处理点云数据,实现更高效、更精确的结果。

kdtreesearchparamhybrid 法方向计算

kdtreesearchparamhybrid 法方向计算

kdtreesearchparamhybrid 法方向计算1. 引言1.1 概述本文将介绍一种名为KdTreeSearchParamHybrid法的方向计算方法。

该方法是基于Kd树搜索参数的一种改进算法,在处理复杂的方向计算问题时具有重要意义。

1.2 文章结构本文共分为五个部分。

首先,引言部分将对本篇文章进行概览和总览。

然后,第二部分将详细介绍KdTreeSearchParamHybrid法的算法原理和应用场景。

第三部分将阐述Kd树搜索参数的具体说明和定义。

接着,第四部分将对KdTreeSearchParamHybrid法方向计算方法的优势与局限性进行深入分析。

最后,结论与展望部分总结全文,并提出未来研究的展望和建议。

1.3 目的本文旨在介绍KdTreeSearchParamHybrid法方向计算方法,并探讨其在解决复杂方向计算问题中所具备的优势和局限性。

通过对这一方法及其相关参数的详细描述和分析,读者能够更好地理解该方法并在实际应用中进行合理运用。

同时,本文也期望为未来相关研究提供新的思路和方向。

通过探索改进现有算法或发展新的方法,可以进一步提升方向计算领域的研究成果和应用效果。

2. KdTreeSearchParamHybrid 法方向计算:2.1 KdTreeSearchParamHybrid 算法介绍: KdTreeSearchParamHybrid 法是一种高效的数据结构和算法结合的搜索方法,用于在数据集中快速查找最近邻点。

它利用k-d树(k-dimensional tree)这一多维空间索引结构进行搜索操作。

KdTreeSearchParamHybrid 算法通过同时使用kd 树的搜索和参数化hybrid 方式来计算目标方向。

2.2 算法原理:KdTreeSearchParamHybrid 算法的原理基于kd 树和参数化hybrid 的特点。

首先,kd 树是一种二叉树结构,能够将多维空间划分为更小的区域,并将点分布到不同的叶节点中。

陶瓷艺术品器身图案的提取与图像复制系统的构建研究

陶瓷艺术品器身图案的提取与图像复制系统的构建研究
3. 为了解决研究对象图像特征点过少的问题,采用了一种结合SIFT和MSER算法的图像拼接算 法,能够提取更多的图像特征点方便后期图像配准。在特征匹配方面,基于K-D树搜索算法,采用改进 的BBF算法提高了特征点的搜索效率;在特征提取方面,采用RANSAC算法过滤外点,去除冗余和误匹 配。为了去除拼接过程可能产生的裂缝,采用了一种改进的多波段融合算法对配准后的图像进行无缝拼 接,解决了原有图像融合算法中的图像模糊现象。
答辩时间:2017-05-31 博士学位授予单位:华南理工大学
386
影像科学 与光化学
第37卷
!"#$摘&
陶瓷艺术品器身图案的提取与图像复制系统 的构建研究
张静 导师:陈广学
随着数字信息技术的发展,艺术品和文物的数字化已不再是一个问题 。然而,在这些三维的文物或 艺术品的复制过程中,后还是要靠 手工绘制。然而对文物及艺术品来说,除造型之外,器身表面的图案同样是其重要的组成部分。为此,本 文聚焦陶瓷艺术品器身曲面的立体图案,定位于数字化后进行高质量的复制和设计再创作。论文对陶瓷 器身立体图案的采集和图像拼接技术进行了深入研究,构建了图像复制系统,实现了从立体图案的拍摄、 预处理、图像校正、立体图像的二维变换、图像配准、图像融合到生成完整的二维图案的数字化全过程。 主要研究成果如下:
1. 在图像采集的过程中,采用陶瓷按照角度均匀转动,相机固定不动的拍摄方法,减少颜色的变化 因素,提高后期图像处理的效率。采集到的图像色彩差异小,利用直方图匹配来校正图像颜色。此外,还 必须对原始图像进行有效、准确的图像去噪、图像修正等工作,保证图像之间具有精确到像素级的校准精 度。
2. 曲面形状的陶瓷转动时,陶瓷器身上的图像相对于相机的移动是非线性的,这导致常用的拼接方 法并不能直接适用。论文采用一种计算单应性矩阵的方法很好地解决了这个问题,为后续的图像拼接奠 定了基础。

【数学】kd 树算法之思路篇

【数学】kd 树算法之思路篇

【数学】kd 树算法之思路篇导语:kd 树是一种二叉树数据结构,可以用来进行高效的kNN 计算。

kd 树算法偏于复杂,本篇将先介绍以二叉树的形式来记录和索引空间的思路,以便读者更轻松地理解kd 树。

图较多,小心流量作者:肖睿编辑:宏观经济算命师本文由JoinQuant量化课堂推出,本文的难度属于进阶(上),深度为level-1。

阅读本文之前请掌握kNN(level-1)的知识。

前言kd 树(k-dimensional tree)是一个包含空间信息的二项树数据结构,它是用来计算kNN 的一个非常常用的工具。

如果特征的维度是D,样本的数量是N,那么一般来讲kd 树算法的复杂度是O(D log(N)),相比于穷算的O(DN) 省去了非常多的计算量。

因为kd 树的概念和算法较为复杂,固将本教程分为“思路篇”和“详细篇”。

两篇的内容在一定程度上是重叠的,但是本篇注重于讲解kd 树背后的思想和直觉,告诉读者一颗二项树是如何承载空间概念的,我们又该如何从树中读取这些信息;而之后的详细篇则详细讲解kd 树的定义,如何构造它并且如何计算kNN。

出于教学起见,本文讲的例子和算法与严格的kd 树有一些差异。

有算法经验或者想尝试挑战的读者可以直接跳过本篇去读详细篇。

关于在学习编程和算法时有没有必要自己制作轮子的问题,一直存在着很多的争议。

作者认为,做不做轮子暂且不论,但是有必要去了解轮子是怎么做出来的。

Python 的scikit-learn 机器学习包提供了蛮算、kd 树和ball 树三种kNN 算法,学完本篇的读者若无兴趣自撰算法,可以非常轻松地使用该包。

直觉给定一堆已有的样本数据,和一个被询问的数据点(红色五角星),我们如何找到离五角星最近的15个点?先忽略在编程上的实现,想一想一个人如何主观地执行。

嗯,他一定会把在五角附近的一些点中,分别计算每一个的距离,然后选最近的15个。

这样可能只需要进行二三十次距离计算,而不是300次。

三维散乱数据的k个最近邻域快速搜索算法

三维散乱数据的k个最近邻域快速搜索算法

三维散乱数据的k个最近邻域快速搜索算法
熊邦书;何明一;俞华璟
【期刊名称】《计算机辅助设计与图形学学报》
【年(卷),期】2004(016)007
【摘要】提出一种新的快速搜索算法.首先,采用空间分块策略,把数据空间分成许多大小相同的立方体子空间,立方体的大小决定了最近点的搜索速度;然后,综合考虑了数据集的范围、点的总数及最近点数目k,给出了一种新的估算立方体边长的方法.大量真实数据的实验结果表明:文中算法可以快速地给出接近于最佳搜索速度的立方体边长.
【总页数】5页(P909-912,917)
【作者】熊邦书;何明一;俞华璟
【作者单位】西北工业大学电子与信息学院,西安,710072;南昌航空工业学院电子工程系,南昌,330034;西北工业大学电子与信息学院,西安,710072;西北工业大学电子与信息学院,西安,710072
【正文语种】中文
【中图分类】TP391
【相关文献】
1.一种改进的散乱数据点的k近邻快速搜索算法 [J], 马长胜;姜晓峰;强鹤群
2.基于栅格排序的散乱数据近邻快速搜索算法 [J], 李彬;常智勇;张力宁
3.基于自适应空间球的k最近邻域快速搜索算法 [J], 杨军;林岩龙;王小鹏;张瑞峰
4.三维散乱数据点集k近邻的快速搜索算法 [J], 伍爱华
5.散乱数据点的k近邻快速搜索算法 [J], 马长胜;姜晓峰;强鹤群
因版权原因,仅展示原文概要,查看原文内容请购买。

一种多维特征融合的车辆对象同一性匹配方法

一种多维特征融合的车辆对象同一性匹配方法

一种多维特征融合的车辆对象同一性匹配方法刘加运;李玉惠;李勃;严明【摘要】Vehicles based on image matching is image matching in the specific application in the field of intelligent transportation. In order to achieve quick matching for vehicle object,a method of vehicle object identity matching based on multidimensional feature combination is proposed. This method can be divided into two stages. First,the vehicle object is carried on the preliminary selection,extracting color features and models for fast matching, calculating the Euclidean distance of feature vector to exclude the impossible similar vehicles. Then,according to the physical condition of camera and video coding format,the local features of the vehicle and perceptual hash features are compared to complete the vehicle’ s iden tity matching. After completion of the first phase matching,the second phase is simplified to only within the vehicle types match,narrowing the scope of the match. The experimental results show that this method can effectively re-duce the vehicle matching range,and match to the most likely to be the same as target vehicle with high accuracy.%基于图像的车辆匹配是图像匹配在智能交通领域内的具体应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第36卷 第7期2008年 7月 华 中 科 技 大 学 学 报(自然科学版)J.H uazhong U niv.o f Sci.&T ech.(N atural Science Edition)Vo l.36N o.7 Jul. 2008收稿日期:2007-04-05.作者简介:刘 宇(1976-),男,博士研究生,E -ma il:headheat@163.co m.基金项目:国家自然科学基金资助项目(5035020,50405032);国家重点基础研究发展计划资助项目(2003CB716207).基于有界k -d 树的最近点搜索算法刘 宇 熊有伦(华中科技大学机械科学与工程学院;数字制造装备与技术国家重点实验室,湖北武汉430074)摘要:提出了一种基于有界k -d 树的最近点搜索算法.算法的原理是:由根节点中的包围盒确定树中数据的空间范围,并在搜索过程中不断划分包围盒来缩小搜索范围,同时递归地计算查询点到包围盒的距离.结合优先级队列,基于有界k -d 树的最近点搜索算法拓展到搜索按距离远近排列的多个最近点.实测和仿真分析表明,本搜索算法的计算效率高于传统的搜索算法.关 键 词:逆向工程;最近点搜索;有界k -d 树;包围盒中图分类号:T P391 文献标识码:A 文章编号:1671-4512(2008)07-0073-04Algorithm for searching nearest -neighbor based on the bounded k -d treeL iu Yu X iong Youlun(Colleg e of M echanical Science and Engineer ing;St ate Key Labor ator y o f Dig ital M anufacturing Equipment and T echno log y,H uazhong U niv ersity of Science and T echnolog y,W uhan 430074,China)Abstract :An alg orithm for searching nearest -neighbo r is proposed based on the bounded k -d tree ofw hich the spatial range o f the data is restricted by the bounded box of the r oot node.The search area in the searching pr ocess is reduced by continually dividing bo unded bo xes.T he distance fr om a query point to a bounded bo x is also co mputed recursively.Co mbined w ith a pr io rity queue,the clo sest po int query alg orithm can be generalized to search mult-i nearest -neig hbor s o rdered by their distances to aquery point.T he ex perim ents on bo th real and synthetic data sets show that the query alg orithm based on the bounded k -d tree is com putationally m ore efficient than some traditional alg orithm s.Key words :reverse engineering;nearest -neighbo r searching;bounded k -d tree;bounded box 在逆向工程中,基于离散坐标点的操作通常需要查询一点的相邻点[1,2].随着数据获取技术的飞速发展,需处理的数据点数目动辄数十万或上百万,提高相邻点查询算法的效率能有效提高逆向工程中数据处理的效率.k 维二叉搜索树(k -dimensional binary search trees ,简称k -d 树[3]),是对k 维数据进行空间查询的有效数据结构,受到关注和研究[4~7],已在矢量量化、数据压缩、数据库匹配查询等方面得到了广泛应用.本文将k -d 树与空间包围盒相结合,构造了有界k -d 树,提出了相应的最近点搜索算法.1 有界k -d 树与以往文献中不同的是,本文在有界k -d 树的内部节点中,定义了左右划分平面L l 和L r 来表示对该节点中数据的划分(见图1),在整个树的根节点中还存储了一组主对角点的坐标来表示k -d 树中数据的包围盒.因此,有界k -d 树的内部节点由2个指向其他节点或者为空的指针、维数辨别量、2个划分值组成.有界k -d 树的叶节点则由指向该叶节点中所包含的数据点列的指针和表示该数据点列大小的值组成.图1 同一节点处的不同划分平面有界k -d 树与一般k -d 树一样,用递归的方式进行构造.在每个内部节点处,选取一个中值将以该节点为根节点的树划分为大小基本相等(所包含的数据点数目的差别不超过1)的2棵子树.这样构造的k -d 树从根节点到叶节点的平均搜索长度为[lo g 2n],可以提高搜索效率,其中[]表示向下取整数.从n 个数据点构造有界k -d 树所需的存储空间和计算时间与一般k -d 树为同一量级,分别为O(n)和O(n log n).图1以二维数据为例,说明左右划分平面对数据的划分,其中L m 表示中值划分平面,p 1和p 2是左子树中的点,p 3是右子树中的点.L m 可以由L l 和L r 来确定.设p 2和p 3分别是左右子树中到L m 最近的点.则L m 经过p 2和p 3连线的中点.选择介于L l 和L r 之间任一平面作为划分平面,数据点在左右子树中的分配均不会发生变化.但选择与图中的圆相交的划分平面时,若p 1为查询点q 的当前的最近点,则搜索算法通过相交测试,将会对右子树中的数据点进行搜索.因此有界k -d 树的内部节点用点p 2和p 3所确定的值s l 和s r 分别表示划分平面L l 和L r 沿相应坐标轴的位置,以使搜索算法减少可能的比较次数.2 相邻点搜索设输入数据点集为P ={p i ,i =1,2,,,n},式中p i 为k 维空间中的点.点q 在P 中的m 个最近相邻点查询就是在P 中搜索与查询点q距离最近的m 个点.当m =1时,则是在P 中搜索点q 的最近点.在查询中,数据点一般为欧几里德空间中的点,点之间的距离定义为欧氏距离.设l =[l 1,l 2,,,l k ]T 和h =[h 1,h 2,,,h k ]T 是k 维欧氏空间中的2个点,l i [h i (1[i [k).则l 和h 所定义的包围盒B 是以l 和h 为主对角点且各面与坐标轴垂直的一个2k 面体.点q =[q 1,q 2,,,q k ]T到B 的最近点是B 的内部或边界上与q 距离最近的点,它们之间的距离则是q 到B 的距离.有界k -d 树采用平方距离以避免开方运算,q 到B 的平方距离D(q ,B)=E ki=1(q i-r i )2,(1)式中:r i =s i (q i <s i );b i (q i >b i );q i (其他).称D(q ,B)为查询点q 到与B 对应的节点的距离.有界k -d 树的根节点中记录了树中数据的包围盒,而其他节点的包围盒则可根据节点中左右划分平面从父节点的包围盒得到.图2以二维数据为例,说明了父节点与子节点的包围盒的关系.图中实线矩形B 是父节点的包围盒,虚线表示父节点中由s l 和s r 定义的左右划分平面L l 和L r .L l 和L r 将包围盒B 划分为B l ,B m 和B r 3部分.左右子节点包围盒分别是B l 和B r .图2 父节点包围盒与子节点包围盒的关系查询点q 到子节点的距离也可以在q 到父节点的距离的基础上计算得到.设父节点中的划分平面与第j 个坐标轴垂直.则有:D(q ,B l )=D(q ,B ) (q j [s l ),D(q ,B )-(q j -r j )2+(q j -s l )2 (q j >s l );(2)D(q ,B r )=D (q ,B)-(q j -r j )2+(q j -s r )2(q j <s r ), D (q ,B) (q j \s r ).(3)基于有界k -d 树的最近点搜索算法从根节点开始,依次计算查询点到左右子节点的包围盒的距离,然后选择距离较近的节点向下搜索.当距离相等时,默认向左节点进行搜索.到达叶节点后,计算查询点与叶节点中的数据点的最近距离,然后向上沿搜索路径搜索与查询点的距离小于当前最近距离的子树.由式(2)和(3),既可以从查询点到父节点的距离计算查询点到子节点的距离,也可以从查询点到子节点的距离计算查询点到父节点的距离.因而搜索算法中只需记录当前节点的包围盒和查询点到该包围盒的距离,并在搜索过程中对包围盒和到包围盒的距离进行动态更新.于是,给出如下基于有界k -d 树的最近点搜索算#74# 华 中 科 技 大 学 学 报(自然科学版) 第36卷法:a.初始化当前节点为根节点,当前包围盒B c 为根节点的包围盒;b.若当前节点为叶节点,则转入叶节点搜索程序,否则,进入下一步;c.计算D(q,B cl)和D(q,B cr),其中B cl和B cr分别为当前节点左右子节点的包围盒;d.若D(q,B cl)[ D(q,B cr),则令B c=B cl,然后在左子树中进行搜索,搜索完成后若D(q,B cr)小于查询点到当前最近点的距离,则继续搜索右子树;e.若D(q, B cr)<D(q,B cl),则令B c=B cr,然后在右子树中进行搜索,搜索完成后若D(q,B cl)小于查询点到当前最近点的距离,继续搜索左子树.步骤d和e通过函数的递归调用来实现.叶节点搜索程序与内部节点的搜索程序不同,需单独实现.上述算法的时间复杂度与搜索的节点数目成正比.一个包含n个节点的有界k-d树从根节点到叶节点的平均搜索长度为[log2n].另外,在从下向上的搜索过程中,可能有新的节点需要搜索.因此,上述搜索算法的实际计算时间还与k-d树中数据的分布情况、查询点的位置等相关.结合一个基于最大堆的优先级队列,单个最近点搜索算法可以扩展到搜索q的m(m>1)个最近点.队列中的每个元素包含2个域:一个表示某个数据点的坐标;另一个是该元素的键值.队列根据元素的键值进行组织,键值取值为该元素表示的数据点到查询点的平方距离.在搜索中,当优先级队列中的元素个数不足m时,碰到的每个数据点都会进入队列.当优先级队列中的元素个数达到m时,则队列中元素的个数不再增加.这时若碰到一数据点,其到查询点的平方距离小于队列中元素的最大键值,则删除最大堆的堆顶元素,并将该数据点插入堆中.在一个包含n个元素的堆上删除或插入一个元素的时间复杂度为O(log2n).因此,m个最近点搜索的时间复杂度与单个最近点搜索相比,至少增加O(log2m!).3试验结果将本文算法与其他3种基于k-d树的搜索算法进行了比较:一种是Sproull的算法[5],记做PM S;另外2种是A rya等的基于距离增量计算的算法和采用优先级队列的算法[6],分别记做IDC和PS.而本文的算法则记为BS.所有的搜索算法都采用平方距离,且在按同样的算法构造的k-d树上测试.所构造的k-d树的叶节点中的数据点个数一般为1,各节点的划分平面与坐标轴垂直.实验都在一台配备了奔腾Ó933MH z CPU 和256M by te内存的个人计算机上进行.首先采用仿真数据进行比较.仿真数据随机分布在一个中心与原点重合,各边长均为100的超立方体中.仿真数据的坐标由下式生成:100@ rand()/32767-50,其中rand()是一个随机数生成器,返回值介于1和32767之间.另外构造一个中心与原点重合,各边长均为400的超立方体.然后在该超立方体的一条主对角线上选取100个均匀分布的点.图3中的结果是以这100个点为查询点时的平均搜索时间.采用3D激光扫描仪对一个实际的发动机零件进行测量,获得了图4 (a)所示的三维点数据.该零件的尺寸约为294 mm@352mm@124mm.通过平移,使测量数据的重心与原点重合.在一个中心与原点重合,尺寸为294mm@352m m@124mm的长方体内选取均匀分布的125个点作为查询点.图4(b)则是搜索这125个点的最近点的平均时间,其中不同大小的数据是通过原始测量数据的均匀采样获得.从图3可看出,随着数据维数的增加,不同搜索算法的计算时间均明显增加.这是由于k-d树对数据的划分越来越不充分引起的.而图3和图4都表明本算法的计算效率要高于其他3种算法.图3在不同维数的仿真数据中搜索最近点(a)实测三维点数据(b)搜索最近点结果图4在实测三维数据中搜索最近点在其他一系列实验中,考察了选取不同分布范围的查询点的搜索结果.图5给出了其中部分实验的结果,图中仿真数据的维数为8,点数为10@104,实测数据的点数为16@104.实验中,查#75#第7期刘宇等:基于有界k-d树的最近点搜索算法询点仍然沿超立方体的主对角线均匀分布,但选取查询点的超立方体的边长则依次为仿真数据所分布的超立方体边长的1~7倍.同样,在采用实测数据的实验中,选取查询点的长方体的边长依次为294mm @352mm @124mm 的长方体的1~7倍.从图5可以看出,查询点位置对本文搜索算法的计算时间的影响要比其他3种算法要小得多.(a)仿真数据(b)实测数据图5 选取不同分布范围的查询点的搜索结果另外,考察了本文算法搜索多个最近点的时间和当有界k -d 树的叶节点中存储不同数目的数据点时的搜索时间.图6是在实测数据上搜索多个最近点的结果,其中叶节点中的点数为1,4条斜线对应的实测数据的点数分别为4@104,8@104,16@104和32@104.从图6可以看出,搜索时间随最近点数的增加稍有增加.图7是叶节点中存储不同数目的数据点时,在点数为16@104的实测数据上搜索多个最近点的结果,图中数据5,10,20和30表示搜索最近点的个数.从图7可以看出,适当增加叶节点中存储的数据点个数可以减少搜索时间.图6 搜索多个最近点结果本文提出了1种欧氏空间中最近点的快速算图7 叶节点中存储不同数目点时的搜索结果法和相应的有界k -d 树结构,通过对根节点的包围盒的动态划分和计算获得其他节点的包围盒及查询点到这些包围盒的距离,结合优先级队列,将搜索算法从单一最近点搜索拓展到了多个最近点搜索.实验仿真表明,本算法的计算效率均优于其他3种传统的搜索算法.参考文献[1]Hameiri E,Shimshoni I.Estimat ion the pr incipalcur vatures and t he Darboux fr ame fr om real 3-D range data[J].IEEE T ransaction o n Sy st ems,M an,and Cybernetics,P art B,2003,33(4):626-637.[2]Paul J B,N eil D M.A method for reg istrat ion of 3Dshapes[J].IEEE T ransact ions on Patter n A naly sis and M achine I ntelligence,1992,14(2):239-256.[3]Bentley J L.M ultidimensio nal binar y search treesused fo r asso ciative sear ching [J ].Communicat ions of the A CM ,1975,18(9):509-517.[4]F riedman J H,Bentley J L ,Finkel R A.A n alg o -r ithm fo r finding best matches in log arithmic ex pec -ted time [J].A CM T r ansactio ns on M athematical So ftw are,1977,3(3):209-226.[5]Sproull R F.Refinements to nearest -neighbor sear ch -ing in k -dimensional tr ees [J].A lg or ithmica,1991,6(4):579-589.[6]A ry a S,M ount D.M.A lg or ithms fo r fast vectorquant izat ion [C ]M P roceeding s o f the I EEE Data Co mpr ession Co nfer ence.Snow bir d:[s.n.],1993:381-390.[7]V anco M ,Brunnett G ,Schr eiber T .A hashing st rat -eg y for efficient k -near est neighbor s co mputation [C]M P ro ceedings of the Internatio na l Conference on Co mputer Gra phics.Canmo re:[s.n.],1999:120-128.#76# 华 中 科 技 大 学 学 报(自然科学版) 第36卷。

相关文档
最新文档