CN103744886B - 一种直接提取的k个最近邻点搜索方法 - Google Patents

一种直接提取的k个最近邻点搜索方法 Download PDF

Info

Publication number
CN103744886B
CN103744886B CN201310717019.3A CN201310717019A CN103744886B CN 103744886 B CN103744886 B CN 103744886B CN 201310717019 A CN201310717019 A CN 201310717019A CN 103744886 B CN103744886 B CN 103744886B
Authority
CN
China
Prior art keywords
head
nearest neighbor
data
point
neighbor point
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310717019.3A
Other languages
English (en)
Other versions
CN103744886A (zh
Inventor
肖晓萍
李自胜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Southwest University of Science and Technology
Original Assignee
Southwest University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Southwest University of Science and Technology filed Critical Southwest University of Science and Technology
Priority to CN201310717019.3A priority Critical patent/CN103744886B/zh
Publication of CN103744886A publication Critical patent/CN103744886A/zh
Application granted granted Critical
Publication of CN103744886B publication Critical patent/CN103744886B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/9032Query formulation
    • G06F16/90324Query formulation using system suggestions
    • G06F16/90328Query formulation using system suggestions using search space presentation or visualization, e.g. category or range presentation and selection

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及逆向工程点云数据最近邻点搜索领域,尤其是一种直接提取的 个最近邻点搜索方法 。 本发明针对现有技术存在的问题,以逆向工程的点云模型为研究对象,提出一种直接提取的个最近邻点搜索方法。利用空间上位置相邻点的k最近邻点集合存在交集的几何特性,通过减少目标搜索点的数量来提升搜索性能。具体做法是:为查询点qhead搜索k个最近邻点,从qhead的反最近邻点的k个最近邻点集合中提取了k1个最近邻点,再通过KNN算法或者其它快速算法为qhead搜索余下的(k-k1)个最近邻点,本算法极大提高了搜索速度。本发明应用于点云数据最近邻点搜索领域。

Description

一种直接提取的k个最近邻点搜索方法
技术领域
本发明涉及逆向工程点云数最近邻点据搜索领域,尤其是一种直接提取的k个最近邻点搜索方法。
背景技术
在数据挖掘及分类、数据库检索和逆向工程点云建模中,由于存在大量无拓扑关系的离散数据点,为了进行数据分类、相似性比较及法线的估算,需要查询离任一给定点q距离最近的k个数据点,对q点的特性研究,将在其k最近邻点的集合中进行。k最近邻搜索方法(k Nearest Neighbors SearchingAlgorithm,KNN)由此成为海量数据处理一个必备方法。
在逆向工程中,物体或零件三维经激光扫描仪扫描或坐标测量机测量后得到大量离散坐标点,原物体的连续表面扫描后得到采样的点云,为了高精度还原原物体,通常会采用高精度扫描仪,导致点云数据量很大,几十万个点、几百万个点乃至上千万个点都是正常的。
逆向工程的目的是要对原物体进行反求设计,也就是要得到与原物体尺寸一样的数字模型,然后对数字模型进行加工生产,得到与原物体一样的物体或零件。在得到点云数据后,在建立表面建模之前一般都要经过除噪、光顺、拟合等过程,然而这些过程中,需要用到模型的法线和曲率等几何属性。曲率可由法线计算而来,因此点的法线计算是反求建模的根本和基础工作。然而,点云是离散的,点与点之间没有任何关联,即没有拓扑结构,一个独立点的法线可以指定任何方向,这样就与原物体的表面对应点的法线有很大差异,导致后续处理过程完全可能失真或走样。因此需要一种科学的方法进行法线估算,使其尽量与原物体表面上对应点的法线方向保持一致。为了达到这一目的,往往需要在当前查询点的附近区域寻找一些点,通过这些点来构造当前点的切平面,称为微切平面,通过微切平面来估算当前点的法线方向。如何在当前查询点的附近寻找点来构造微切平面,一种科学的方法就是KNN方法。
传统的KNN方法,事先对已知样本点进行剪辑,实现去除分类作用不大的样本。适用于样本容量比较大的类域的自动分类。具体就是计算当前查询点q到每一个点的距离并安升序排序,取前k个距离值最小的点。而且数据集中的每个点都要查询其k个最近邻点,由于点云数据量大,由此看出k最近邻查找是一个耗时的过程,传统方法也称为暴力搜索方法。于是产生了查询KNN的快速搜索方法,现有k近邻点快速搜索方法主要有两类:
一类是空间分割法,把点云的包围盒分割成若干个小子空间,查询过程中首先计算查询点q与所在的子空间内的点的距离并按升序排序,如果最大距离值大于q与所在子空间壁的距离或子空间内数据点数小于k,则扩展子空间,并在新子空间内继续搜索;
另一类是数据重组方法,通过构造树形结构,利用相应规则把数据点分别归属到不同的树节点中,搜索过程中,通过剔除节点以达到缩小搜索范围,提高搜索速度的目的。
无论是空间分割还是数据重组方法,都使用了点的邻近特性,即:q的k个最近邻点q的邻近区域。实际上,空间位置上相邻的点,其k个最近邻点构成的集合必定存在交集,k越大,交集成员的数量也越大,因此可以从空间位置相邻点的k最近邻点集合中直接提取部分或全部最近邻点,然而,两类快速算法以及其它算法都没有提及该思想,更没有有效的解决直接提取最近邻点的方法。
发明内容
本发明所要解决的技术问题是:针对现有技术存在的问题,本发明以逆向工程的点云模型为研究对象,提出一种直接提取的k个最近邻点搜索方法。利用空间上位置相邻点的k最近邻点集合存在交集的特点,通过减少目标搜索点的数量来提升搜索性能。具体做法是:为查询点qhead搜索k个最近邻点,可以从qhead的反最近邻点(如果qhead点是p点的一个最近邻点,那么p点就是qhead点的一个反最近邻点)的k个最近邻点集合中提取了k1个最近邻点,再通过KNN算法或者其他快速算法为qhead搜索余下的(k-k1)个最近邻点,本算法极大提高了搜索速度。进一步的,在提取最邻近点的过程中,为了节省存储空间,查询点与最邻近点之间的距离没有再保存,为了避免重复进行距离计算和提高速度,进一步的,本发明提出采用相关点的向量内积代替距离计算,进行距离比较。
本发明采用的技术方案如下:
一种直接提取的k个最近邻点搜索方法包括:载入模型的点云数据,针对点云数据中任意一点,从其反最近邻点的最近邻点中提取k1个最近邻点,然后通过KNN算法搜索的最近邻点中k-k1个最近邻点,所述最近邻点有k个最近邻点,其中k是正整数,k1≤k。
进一步的,所述从qhead的最近邻点中提取k1个最近邻点,然后通过KNN算法搜索qhead的最近邻点中k-k1个最近邻点具体步骤包括:
步骤1:根据模型的点云数据,建立点云数据链表PCDPointLink,qhead是点云数据中任意一点,pcdPoint是PCDPointLink中的一个节点,链表中的第一个节点指针为head,令链表遍历变量qhead=PCDPointLink→head,即用变量指针qhead指向链表的第一个节点,qhead的最近邻点集合kNN(qhead)、qhead的反最近邻点集合rkNN(qhead)、指向下一个节点的指针Next,qhead与最近邻点的最大距离dmax
步骤2:判断qhead的k个最近邻点集合kNN(qhead)是否为空,若kNN(qhead)为空,则执行步骤3;否则,执行步骤7;
步骤3:判断rkNN(qhead)是否为空,若rkNN(qhead)为空,则采用KNN算法进行搜索;否则,令遍历变量qdata=rkNN(qhead)→head(令指针变量qdata指向rkNN(qhead)链表的第一个节点),计数变量k1=0,执行步骤4;
步骤4:判断kNN(qdata)是否为空,若kNN(qdata)为空,则从qhead的反最近邻点集合的下一个点去提取,因此qdata=qdata→Next(让指针变量qdata指向rkNN(qhead)当前节点的后一个节点),重复步骤4;若kNN(qdata)不为空,令遍历变量pdata=kNN(qdata)→head(让指针变量pdata指向kNN(qdata)的第一个节点),执行步骤5;
步骤5:判断qhead的最近邻点是否为pdata,若pdata是qhead的最近邻点,则将pdata加入到qhead的最近邻点集合中,将qhead加入到pdata的k个反最近邻点集合,同时k1=k1+1;否则,pdata不是qhead的最近邻点,则需要判断qdata的最近邻点集合中的下一个点,因此pdata=pdata→Next(让指针变量pdata指向kNN(qdata)当前节点的后一个节点),并重复步骤5;
步骤6:当步骤5中,qhead的所有反近邻点的遍历完了后,比较k1与k的关系,如果k1<k,则qhead提取的最近邻点个数不足k个,通过KNN算法为qhead点搜索k-k1个最近邻点,将qhead的k1个最近邻点加入到集合kNN(qhead)中,将qhead加入到剩余的k-k1个最近邻点的反最近邻点集合rkNN(pi)中,其中pi表示通过KNN算法搜索得到的k-k1个最近邻点;如果k1=k,说明算法为qhead直接提取到了k个最近邻点,执行步骤7;
步骤7:qhead=qhead→Next(让qhead指向链表PCDPointLink下一个节点),重复步骤2到步骤6,得到qhead的k个最近邻点kNN(qhead)。
进一步的,所述步骤5判断qhead的最近邻点是否为pdata为:距离比较算法和向量内积比较算法。
进一步的,所述步骤3中向量内积计算法判断依据是:如果qhead∈kNN(qdata),任意点Pdata∈kNN(qdata),如果a×βT>0,则有Pdata∈kNN(qhead),a和β是向量,a×βT>0等价于qheadpdata的距离小于qheadpi的距离,因此pdata是qhead最近邻点。
进一步的,所述步骤5判断qhead的最近邻点是否为pdata具体步骤:步骤51:由于点云数据的每一个点qhead都要查找其k个最近邻点,由于qhead是整个方法开始的第一个点,其通过KNN算法找到qhead的k个最近邻点,并构成集合kNN(qhead),将要为下一个点qhead查找k个最近邻点。选择qhead点作为下一个点来进行搜索,我们从qhead的最近邻点集合kNN(qhead)中选择qhead
步骤52:根据判定条件,qhead∈kNN(qdata),qdata的最近邻点集合kNN(qdata)内任一点pdata,我们先判断pdata是不是qhead的一个最近邻点,如果是,则把pdata放入qhead的k个最近邻点集合kNN(qhead)中去;
步骤53:由于kNN(qdata)已知,qdata的k个最近邻点中,离qdata距离最大点的距离值dmax已知,以qdata为球心,以dmax为半径构造一个球S,则qdata的k个最近邻点全部位于球S内,离qdata距离最大的点在球面上,以qdata为射线的起点画射线,该射线经过qhead,与球面S相较于Pi,点pdata和点Pi的中点为Pm,则可以构造出与上述判定条件一致的如果a×βT>0,则说明|qheadPdata|<|qheadPi|,因此pdata是qhead最近邻点,把pdata放入qhead的k最近邻点集合kNN(qhead)中;
步骤54:pdata判断之后,继续判断kNN(qdata)中的其余k-2个点,因qhead是qdata的最近邻点;
步骤55:qdata只是qhead的一个反最近邻点,因此还需要对qhead的其它反最近邻点Pi进行提取,从Pi的最近邻点集合kNN(Pi)中搜索,提取方法如上述步骤52、步骤53、步骤54;
步骤56:反最近邻点都搜索完毕后,统计为qhead提取的最近邻点个数k1,如果k1≥k的话就结束qhead最近邻点搜索过程,说明qhead的k个最近邻点已经全部通过直接提取找到;如果k1<k的话,说明只为qhead点提取到了k1个最近邻点,通过KNN算法为qhead点搜索k-k1个最近邻点。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1)为点云数据中任意一点qhead搜索k个最近邻点,具体做法是从qhead的反最近邻点(如果qhead点是p点的一个k最近邻点,那么p点就是qhead点的一个反最近邻点)的k个最近邻点集合中提取了k1个最近邻点,同时结合其它快速算法(例如快速算法--空间分割法的KNN算法)为qhead搜索余下的(k-k1)个最近邻点,因此算法极大提高了搜索速度。
2)在提取最邻近点的过程中,为了节省存储空间,查询点与最邻近点之间的距离没有再保存,为了避免重复进行距离计算和提高速度,本发明提出采用相关点的向量内积进行距离比较。方便计算,大大提高运算速度。
附图说明
本发明将通过例子并参照附图的方式说明,其中:
图1是本发明的流程图。
图2是基于向量内积的距离比较法示意图。
图3是数据点是否是最近邻点的判定准则示意图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
说明书:qhead,qdata和pdata表示指针变量,指向链表的节点,节点中的数据就是点云的数据点,为了使图和权利书中的符号保持一致,图3中用符号qhead,qdata和pdata表示数据点。
本发明的具体步骤:如图1所示。
步骤1:根据模型的点云数据,建立点云数据链表PCDPointLink,qhead是点云数据中任意一点,pcdPoint是PCDPointLink中的一个节点,链表中的第一个节点指针为head,令链表遍历变量qhead=PCDPointLink→head,即用变量指针qhead指向链表的第一个节点,qhead的最近邻点集合kNN(qhead)、qhead的反最近邻点集合rkNN(qhead)、指向下一个节点的指针Next,qhead与最近邻点的最大距离dmax
步骤2:判断qhead的k个最近邻点集合kNN(qhead)是否为空,若kNN(qhead)为空(说明还没有对qhead搜索最近邻点),则执行步骤3;否则,执行步骤7;
步骤3:判断rkNN(qhead)是否为空,若rkNN(qhead)为空(说明qhead也不是其它点的k个最近邻点之一),则采用KNN算法进行搜索(注:链表第一个节点都要采用其它算法来搜索);否则,令遍历变量qdata=rkNN(qhead)→head(说明qhead已经是其它点的k个最近邻点之一),计数变量k1=0,执行步骤4;
步骤4:判断kNN(qdata)是否为空,若kNN(qdata)为空,则从qhead的反最近邻点集合的下一个点去提取,因此qdata=qdata→Next,重复步骤4;若kNN(qdata)不为空,令遍历变量pdata=kNN(qdata)→head,执行步骤5;
步骤5:判断qhead的最近邻点是否为pdata,若pdata是qhead的最近邻点,则将pdata加入到qhead的最近邻点集合中,将qhead加入到pdata的k个反最近邻点集合,同时k1=k1+1(这一步说明为qhead提取到了一个最近邻点pdata,将pdata保存到qhead的最近邻点集合中,同时将qhead保存到pdata的反最近邻点集合中去,qhead的最近邻点提取计数变量k1加1);否则,pdata不是qhead的最近邻点,则需要判断qdata的最近邻点集合中的下一个点,因此pdata=pdata→Next,并重复步骤5;
步骤6:步骤5中qhead的所有反近邻点的遍历完了后,比较k1与k的关系,如果k1<k,则qhead提取的最近邻点个数不足k个,通过KNN算法为qhead点搜索k-k1个最近邻点,将qhead的k1个最近邻点加入到集合kNN(qhead)中,将qhead加入到剩余的k-k1个最近邻点的反最近邻点集合rkNN(pi)中,其中pi表示通过KNN算法搜索得到的k-k1个最近邻点;如果k1=k,说明算法为qhead直接提取到了k个最近邻点,执行步骤7;步骤7:qhead=qhead→Next,让qhead指向链表PCDPointLink下一个节点,重复步骤2到步骤6,得到qhead的k个最近邻点kNN(qhead)。
其中步骤5中判断qhead的最近邻点是否为pdata采用距离比较算法和向量内积比较算法。具体原理为:
1、距离比较算法原理:如图2所示,将要进行距离比较,作为某点是否是最近邻点的判断准则。在三维空间中(点的坐标用x,y,z进行表示),有三个点p0(x0,y0,z0),p1(x1,y1,z1)和p2(x2,y2,z2),dist(p1,p0)表示p1和p0之间的距离,dist(p2,p0)表示p2和p0之间的距离,则 dist ( p 1 , p 0 ) = ( x 1 - x 0 ) 2 + ( y 1 - y 0 ) 2 + ( z 1 - z 0 ) 2 , dist ( p 2 , p 0 ) = ( x 2 - x 0 ) 2 + ( y 2 - y 0 ) 2 + ( z 2 - z 0 ) 2 . 计算出dist(p1,p0)和dist(p2,p0)之后,就可以比较|p0 p1|和|p0 p2|。如果dist(p1,p0)>dist(p2,p0),则说明|p0 p1|>|p0 p2|,反之亦然。
2、采用向量内积比较算法来达到进行距离比较,原理是:为点p1和点p2的之间的中点,向量a=p1-p2,向量β=p12-p0,如果a×βT>0则有dist(p1,p0)>dist(p2,p0),也即是:a×βT>0等价于|p0 p1|>|p0 p2|。
3、数据点是否是最近邻点判定准则应用于本发明中具体做法是:如图3所示。
令kNN(qdata)为qdata的k个最近邻点构成的集合,kNN(qhead)为qhead的k个最近邻点构成的集合。判定条件:如果qhead∈kNN(qdata),任意点Pdata∈kNN(qdata),如果a×βT>0,则有Pdata∈kNN(qhead),a和β是向量,a×βT>0等价于qheadpdata的距离小于qheadpi的距离,因此pdata是qhead最近邻点。具体做法是:
步骤51:由于点云数据的每一个点qhead都要查找其k个最近邻点,由于qhead是整个方法开始的第一个点,其通过KNN算法找到qhead的k个最近邻点(KNN快速算法比如:空间分割方法或者数组重组方法进行搜索),并构成集合kNN(qhead),将要为下一个点qhead查找k个最近邻点。选择qhead点作为下一个点来进行搜索,我们从qhead的最近邻点集合kNN(qhead)中选择qhead
步骤52:根据判定条件,qhead∈kNN(qdata)(即:qdata是qhead的一个最近邻点,那么qhead是qdata的一个反最近邻点),qdata的最近邻点集合kNN(qdata)内任一点pdata,我们先判断pdata是不是qhead的一个最近邻点,如果是,则把pdata放入qhead的k个最近邻点集合kNN(qhead)中去;
步骤53:由于kNN(qdata)已知,qdata的k个最近邻点中,离qdata距离最大点的距离值dmax已知,以qdata为球心,以dmax为半径构造一个球S,则qdata的k个最近邻点全部位于球S内,离qdata距离最大的点在球面上,以qdata为射线的起点画射线,该射线经过qhead,与球面S相较于Pi,点pdata和点Pi的中点为Pm,则可以构造出与上述判定条件一致的如果a×βT>0,则说明|qheadPdata|<|qheadPi|,因此pdata是qhead最近邻点,把pdata放入qhead的k最近邻点集合kNN(qhead)中;
步骤54:pdata判断之后,继续判断kNN(qdata)中的其余k-2个点,因qhead是qdata的最近邻点;
步骤55:qdata只是qhead的一个反最近邻点,因此还需要对qhead的其它反最近邻点Pi进行提取,从Pi的最近邻点集合kNN(Pi)中搜索,提取方法如上述步骤52、步骤53、步骤54;
步骤56:反最近邻点都搜索完毕后,统计为qhead提取的最近邻点个数k1,如果k1≥k的话就结束qhead最近邻点搜索过程,说明qhead的k个最近邻点已经全部通过直接提取找到;如果k1<k的话,说明只为qhead点提取到了k1个最近邻点,通过KNN算法为qhead点搜索k-k1个最近邻点。
本发明并不局限于前述的具体实施方式。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。

Claims (4)

1.一种直接提取的k个最近邻点搜索方法,其特征在于包括:载入模型的点云数据,针对点云数据中任意一点qhead,从其反最近邻点的最近邻点中提取k1个最近邻点,然后通过KNN算法搜索的最近邻点中k-k1个最近邻点,所述最近邻点有k个最近邻点,其中k是正整数,k1≤k;所述从qhead的反最近邻点的最近邻点中提取k1个最近邻点,然后通过KNN算法搜索qhead的最近邻点中k-k1个最近邻点具体步骤包括:
步骤1:根据模型的点云数据,建立点云数据链表PCDPointLink,qhead是点云数据中任意一点,pcdPoint是PCDPointLink中的一个节点,链表中的第一个节点指针为head,令链表遍历变量qhead=PCDPointLink→head,即用变量指针qhead指向链表的第一个节点,qhead的最近邻点集合kNN(qhead)、qhead的反最近邻点集合rkNN(qhead)、指向下一个节点的指针Next,qhead与最近邻点的最大距离dmax
步骤2:判断qhead的k个最近邻点集合kNN(qhead)是否为空,若kNN(qhead)为空,则执行步骤3;否则,执行步骤7;
步骤3:判断rkNN(qhead)是否为空,若rkNN(qhead)为空,则采用KNN算法进行搜索;否则,令遍历变量qdata=rkNN(qhead)→head,计数变量k1=0,执行步骤4;
步骤4:判断kNN(qdata)是否为空,若kNN(qdata)为空,则从qhead的反最近邻点集合的下一个点去提取,因此qdata=qdata→Next,重复步骤4;若kNN(qdata)不为空,令遍历变量pdata=kNN(qdata)→head,执行步骤5;
步骤5:判断qhead的最近邻点是否为pdata,若pdata是qhead的最近邻点,则将pdata加入到qhead的最近邻点集合中,将qhead加入到pdata的k个反最近邻点集合,同时k1=k1+1;否则,pdata不是qhead的最近邻点,则需要判断qdata的最近邻点集合中的下一个点,因此pdata=pdata→Next,并重复步骤5;
步骤6:当步骤5中,qhead的所有反近邻点的遍历完了后,比较k1与k的关系,如果k1<k,则qhead提取的最近邻点个数不足k个,通过KNN算法为qhead点搜索k-k1个最近邻点,将qhead的k1个最近邻点加入到集合kNN(qhead)中,将qhead加入到剩余的k-k1个最近邻点的反最近邻点集合rkNN(pi)中,其中pi表示通过KNN算法搜索得到的k-k1个最近邻点;如果k1=k,说明算法为qhead直接提取到了k个最近邻点,执行步骤7;
步骤7:qhead=qhead→Next,让qhead指向链表PCDPointLink下一个节点,重复步骤2到步骤6,得到qhead的k个最近邻点kNN(qhead)。
2.根据权利要求1的一种直接提取的k个最近邻点搜索方法,其特征在于所述步骤5判断qhead的最近邻点是否为pdata为:距离比较算法和向量内积比较算法。
3.根据权利要求2的一种直接提取的k个最近邻点搜索方法,其特征在于所述步骤5中向量内积计算法判断依据是:如果qhead∈kNN(qdata),任意点Pdata∈kNN(qdata),如果α·βT>0,则有Pdata∈kNN(qhead),α和β是向量,α·βT>0等价于qhead与pdata之间的距离小于qhead与pi之间的距离,因此pdata是qhead最近邻点。
4.根据权利要求2至3之一的一种直接提取的k个最近邻点搜索方法,其特征在于所述步骤5判断qhead的最近邻点是否为pdata具体步骤:
步骤51:由于点云数据的每一个点qhead都要查找其k个最近邻点,由于qhead是整个方法开始的第一个点,其通过KNN算法找到qhead的k个最近邻点,并构成集合kNN(qhead),将要为下一个点qhead查找k个最近邻点。选择qhead点作为下一个点来进行搜索,我们从qhead的最近邻点集合kNN(qhead)中选择qhead
步骤52:根据判定条件,qhead∈kNN(qdata),qdata的最近邻点集合kNN(qdata)内任一点pdata,我们先判断pdata是不是qhead的一个最近邻点,如果是,则把pdata放入qhead的k个最近邻点集合kNN(qhead)中去;
步骤53:由于kNN(qdata)已知,qdata的k个最近邻点中,离qdata距离最大点的距离值dmax已知,以qdata为球心,以dmax为半径构造一个球S,则qdata的k个最近邻点全部位于球S内,离qdata距离最大的点在球面上,以qdata为射线的起点画射线,该射线经过qhead,与球面S相交于Pi,点pdata和点Pi的中点为Pm,则可以构造出与上述判定条件一致的如果α·βT>0,则说明|qheadPdata|<|qheadPi|,因此pdata是qhead最近邻点,把pdata放入qhead的k最近邻点集合kNN(qhead)中;
步骤54:pdata判断之后,继续判断kNN(qdata)中的其余k-2个点,因qhead是qdata的最近邻点;
步骤55:qdata只是qhead的一个反最近邻点,因此还需要对qhead的其它反最近邻点Pi进行提取,从Pi的最近邻点集合kNN(Pi)中搜索,提取方法如上述步骤52、步骤53、步骤54;
步骤56:反最近邻点都搜索完毕后,统计为qhead提取的最近邻点个数k1,如果k1≥k的话就结束qhead最近邻点搜索过程,说明qhead的k个最近邻点已经全部通过直接提取找到;如果k1<k的话,说明只为qhead点提取到了k1个最近邻点,通过KNN算法为qhead点搜索k-k1个最近邻点。
CN201310717019.3A 2013-12-23 2013-12-23 一种直接提取的k个最近邻点搜索方法 Expired - Fee Related CN103744886B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310717019.3A CN103744886B (zh) 2013-12-23 2013-12-23 一种直接提取的k个最近邻点搜索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310717019.3A CN103744886B (zh) 2013-12-23 2013-12-23 一种直接提取的k个最近邻点搜索方法

Publications (2)

Publication Number Publication Date
CN103744886A CN103744886A (zh) 2014-04-23
CN103744886B true CN103744886B (zh) 2015-03-18

Family

ID=50501904

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310717019.3A Expired - Fee Related CN103744886B (zh) 2013-12-23 2013-12-23 一种直接提取的k个最近邻点搜索方法

Country Status (1)

Country Link
CN (1) CN103744886B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105488192A (zh) * 2015-12-03 2016-04-13 青岛尤尼科技有限公司 点云数据k邻域搜索方法
CN105975519A (zh) * 2016-04-28 2016-09-28 深圳大学 一种基于多支撑点索引的离群检测方法及其系统
CN109887024A (zh) * 2019-02-16 2019-06-14 西南科技大学 一种点云法线估算新方法
CN109598761B (zh) * 2019-02-16 2022-08-09 西南科技大学 一种曲线测量定位方法
CN110059766A (zh) * 2019-04-26 2019-07-26 兰州大学 一种运用k临近算法进行降水类型分类的方法
CN112200976B (zh) * 2020-09-30 2022-04-26 苏州艾隆科技股份有限公司 药品检测方法、装置、电子终端及存储介质
CN112529010B (zh) * 2020-12-04 2023-03-24 浙江大学计算机创新技术研究院 一种基于在线局部特征提取的点云识别方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100114871A1 (en) * 2008-10-31 2010-05-06 University Of Southern California Distance Quantization in Computing Distance in High Dimensional Space
EP2492824B1 (en) * 2011-02-23 2020-04-01 Harman Becker Automotive Systems GmbH Method of searching a data base, navigation device and method of generating an index structure
CN103092897A (zh) * 2011-11-08 2013-05-08 南京理工大学常熟研究院有限公司 一种用于点云数据处理的快速k近邻搜索方法

Also Published As

Publication number Publication date
CN103744886A (zh) 2014-04-23

Similar Documents

Publication Publication Date Title
CN103744886B (zh) 一种直接提取的k个最近邻点搜索方法
Li et al. Motion-alert: automatic anomaly detection in massive moving objects
Hu et al. Massively parallel KD-tree construction and nearest neighbor search algorithms
Lu et al. Massive point cloud space management method based on octree-like encoding
Lou et al. Matchminer: Efficient spanning structure mining in large image collections
CN104035949A (zh) 一种基于局部敏感哈希改进算法的相似性数据检索方法
CN111027140B (zh) 基于多视角点云数据的飞机标准件模型快速重构方法
CN103617217A (zh) 一种基于层次索引的图像检索方法及系统
CN111209805B (zh) 车道线众包数据的多道路片段数据的快速融合优化方法
Mohan et al. Environment selection and hierarchical place recognition
CN104850712B (zh) 实物表面采样数据拓扑邻域查询方法
CN103279551A (zh) 一种基于欧氏距离的高维数据准确近邻快速检索方法
CN114386466B (zh) 一种用于脉冲星搜寻中候选体信号挖掘的并行的混合聚类方法
CN102722554A (zh) 位置敏感哈希随机性减弱方法
CN104361135A (zh) 一种图像检索方法
CN112633389A (zh) 一种基于mdl和速度方向的飓风运动轨迹趋势计算方法
CN110781943A (zh) 一种基于毗邻网格搜索的聚类方法
CN105138607B (zh) 一种基于混合粒度分布式内存网格索引的knn查询方法
Tsai et al. DBSCALE: An efficient density-based clustering algorithm for data mining in large databases
CN102110173A (zh) 一种改进亲和矩阵的多路谱聚类方法
WO2016112618A1 (zh) 一种基于距离的求解二维空间中代表性节点集的算法
Choudhury et al. Monitoring the top-m rank aggregation of spatial objects in streaming queries
CN103336963A (zh) 一种图像特征提取的方法及装置
CN103345509B (zh) 获取路网上复反向最远邻居的层次分区树方法及系统
CN109241628B (zh) 基于图谱理论和聚类的三维cad模型分割方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150318

Termination date: 20161223

CF01 Termination of patent right due to non-payment of annual fee