[发明专利]一种直接提取的k个最近邻点搜索方法有效
申请号: | 201310717019.3 | 申请日: | 2013-12-23 |
公开(公告)号: | CN103744886A | 公开(公告)日: | 2014-04-23 |
发明(设计)人: | 肖晓萍;李自胜 | 申请(专利权)人: | 西南科技大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 成都九鼎天元知识产权代理有限公司 51214 | 代理人: | 卿诚;吴彦峰 |
地址: | 621010 四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 直接 提取 近邻 搜索 方法 | ||
1.一种直接提取的k个最近邻点搜索方法,其特征在于包括:载入模型的点云数据,针对点云数据中任意一点,从其反最近邻点的最近邻点中提取k1个最近邻点,然后通过KNN算法搜索的最近邻点中k-k1个最近邻点,所述最近邻点有k个最近邻点,其中k是正整数,k1≤k。
2.根据权利要求1所述的一种直接提取的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)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西南科技大学,未经西南科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310717019.3/1.html,转载请声明来源钻瓜专利网。