当前位置: 首页 > 专利查询>武汉大学专利>正文

一种基于Spark平台的点云K邻域的搜索方法及装置制造方法及图纸

技术编号:19822265 阅读:26 留言:0更新日期:2018-12-19 14:52
本发明专利技术提供了一种基于Spark平台的点云K邻域的搜索方法及装置,该方法应用于计算机集群,所述计算机集群上搭建有Spark平台,该方法包括:首先将参考点云与查询点云存储到所述计算机集群所在的HDFS分布式文件系统中,然后将所述参考点云和所述查询点云加载至所述Spark平台,并以弹性分布式数据集的方式保存所述参考点云和所述查询点云,分别获得参考点云数据集与查询点云数据集,接下来确定所述参考点云数据集的分区个数;再根据所述分区个数对所述参考点云数据集构建分布式k‑d树;最后基于所述分布式k‑d树,对所述查询点云数据集进行并行K邻域搜索。本发明专利技术实现了提高K邻域搜索效率的技术效果。

【技术实现步骤摘要】
一种基于Spark平台的点云K邻域的搜索方法及装置
本专利技术涉及计算机应用
,尤其涉及一种基于Spark平台的点云K邻域的搜索方法及装置。
技术介绍
K邻域搜索的定义为查询点从参考点云中找到K个离查询点距离最近的点。K邻域搜索算法是许多点云算法的基础步骤,这些点云算法包括法向量估计、特征提取、噪声点去除、配准等。在点云算法中,一般需要对多个查询点进行批量的K邻域搜索,其中参考点云同样也是查询点云最为常见,例如法向量估计、特征提取、噪声点去除中参考点云同时也是查询点云。目前,通常的做法是,在单机环境下进行点云K邻域的搜索,而在先进传感器技术与应用需求的双重驱动下,点云密度越来越大,点数也越来越多,实践中处理的点云数据一般是海量的,采用目前的搜索方法效率较低,非常耗时。由此可见,现有技术中的点云K邻域搜索方法存在效率低下的技术问题。
技术实现思路
本专利技术实施例提供了一种基于Spark平台的点云K邻域的搜索方法及装置,用以解决或者至少部分解决现有技术中存在的效率低下的技术问题。第一方面,本专利技术提供了一种基于Spark平台的点云K邻域的搜索方法,应用于计算机集群,所述计算机集群上搭建有Spark平台,所述方法包括:将参考点云与查询点云存储到所述计算机集群所在的HDFS分布式文件系统中;将所述参考点云和所述查询点云加载至所述Spark平台;以弹性分布式数据集的方式保存所述参考点云和所述查询点云,分别获得参考点云数据集与查询点云数据集;确定所述参考点云数据集的分区个数;根据所述分区个数对所述参考点云数据集构建分布式k-d树;基于所述分布式k-d树,对所述查询点云数据集进行并行K邻域搜索。基于上述方法,所述将所述参考点云和所述查询点云加载至所述Spark平台,包括:采用Spark平台的文件读取接口从所述HDFS分布式文件系统中读取所述参考点云和所述查询点云,并加载至所述Spark平台。基于上述方法,所述参考点云数据集存储为文本文件,所述文本文件的每行的格式为:X,Y和Z,X,Y,Z用以表示一个三维的点,为所述参考点云数据集的每个元素预设初始key值为m,所述初始key值用以表征点元素所在的树节点在所述的分布式k-d树中的位置,所述分布式k-d树包括全局k-d树和局部k-d树,所述根据所述分区个数对所述参考点云数据集构建分布式k-d树,包括:全局k-d树的构建和局部k-d树的构建,其中,全局k-d树的构建,包括:步骤S51:采用X,Y和Z轮转的方式确定分割维度,首先选择X维作为根节点的分割维度,然后选择Y维作为根节点两个子节点的分割维度,再选择Z维作为四个子节点的分割维度,接下来重新选择X维作为八个子节点的分割维度,依次轮转;步骤S52:根据当前的分割维度获得分割值,若所述点元素的坐标在所述分割维度上的值小于或等于所述分割值,则将所述点元素的key值更新为2*m,若所述点元素的坐标在所述分割维度上的值大于所述分割值,则将所述点元素的key值更新为2*m+1;其中,步骤S51和步骤S52递归执行,直到构建的全局k-d树的叶子节点个数与所述分区个数相等;局部k-d树的构建,包括:采用预设k-d树创建算法,构建所述局部k-d树。基于上述方法,所述根据当前的分割维度获得分割值,包括:将所述分割维度作为groupByKey函数的输入,通过所述groupByKey函数输出获得所述分割值。基于上述方法,为所述全局k-d树中的每个树节点构建分割表,所述分割表中的信息包括节点的key值、分割维度与分割值。基于上述方法,为所述参考点云数据集的每个元素预设初始key值为m,所述初始key值用以表征点元素所在的树节点在所述的分布式k-d树中的位置,所述位置为编号,所述分布式k-d树包括全局k-d树和局部k-d树,所述基于所述分布式k-d树,对所述查询点云数据集进行并行K邻域搜索,包括:步骤S61:通过map函数在所述全局k-d树上查找与查询点云数据集中点元素对应的局部k-d树的编号,在查询点云数据集上使用groupByKey函数将相同key值的点聚集在同一个分区,然后采用join函数将查询点云数据集各分区中的点与局部k-d树进行连接,生成新的查询点云数据集,所述新的查询点云数据集具体形式为(key,(kdtree,List[Point])),其中,key表示健值,对应查询点在局部k-d树的编号,kdtree表示分区上的局部k-d树,List[Point]表示分区上的查询点列表;步骤S62:采用flatMap函数对所述新的查询点云数据集进行处理,并使各分区内的查询点云在各自的局部k-d树上进行并行K邻域搜索,更新当前的K近邻点;步骤S63:采用map函数使查询点在全局k-d树上执行回溯操作,其中,根据预设条件区分出第一部分查询点和第二部分查询点,所述第一部分查询点回溯至全局k-d树的根节点之上,所述第二部分查询点交换到其他分区中,并继续执行步骤S62的操作;步骤S64:将所述当前的K近邻点作为搜索结果。基于上述方法,步骤S63具体包括:步骤S631:对所述查询点云数据集进行过滤,获得过滤后的查询点;步骤S632:当所述过滤后的查询点小于阈值t时,将未完成搜索的查询点广播至所述Spark平台的所有的计算节点上,并行在每个分区上搜索K邻近点;步骤S633:采用reduceByKey函数归并从各个分区上获得邻近点,并确定出最终的K邻近点。基于同样的专利技术构思,本专利技术第二方面提供了一种基于Spark平台的点云K邻域的搜索装置,应用于计算机集群和Spark平台,所述装置包括:存储模块,用于将参考点云与查询点云存储到所述计算机集群所在的HDFS分布式文件系统中;加载模块,用于将所述参考点云和所述查询点云加载至所述Spark平台;保存模块,用于以弹性分布式数据集的方式保存所述参考点云和所述查询点云,分别获得参考点云数据集与查询点云数据集;确定模块,用于确定所述参考点云数据集的分区个数;构建模块,用于根据所述分区个数对所述参考点云数据集构建分布式k-d树;搜索模块,用于基于所述分布式k-d树,对所述查询点云数据集进行并行K邻域搜索。基于同样的专利技术构思,本专利技术第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现第一方面所述的方法。基于同样的专利技术构思,本专利技术第四方面一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:在本专利技术提供的方法中,首先将参考点云与查询点云存储到所述计算机集群所在的HDFS分布式文件系统中,然后将所述参考点云和所述查询点云加载至所述Spark平台,并以弹性分布式数据集的方式保存所述参考点云和所述查询点云,分别获得参考点云数据集与查询点云数据集,接下来确定所述参考点云数据集的分区个数,再根据所述分区个数对所述参考点云数据集构建分布式k-d树;最后基于所述分布式k-d树,对所述查询点云数据集进行并行K邻域搜索。由于本专利技术提供的方法中,采用Spark平台替代传统Hadoop平台下MapReduce的计算模型,由于Spark平台是基于内存计算的平台,可以尽可能地将本文档来自技高网...

【技术保护点】
1.一种基于Spark平台的点云K邻域的搜索方法,其特征在于,应用于计算机集群,所述计算机集群上搭建有Spark平台,所述方法包括:将参考点云与查询点云存储到所述计算机集群所在的HDFS分布式文件系统中;将所述参考点云和所述查询点云加载至所述Spark平台;以弹性分布式数据集的方式保存所述参考点云和所述查询点云,分别获得参考点云数据集与查询点云数据集;确定所述参考点云数据集的分区个数;根据所述分区个数对所述参考点云数据集构建分布式k‑d树;基于所述分布式k‑d树,对所述查询点云数据集进行并行K邻域搜索。

【技术特征摘要】
1.一种基于Spark平台的点云K邻域的搜索方法,其特征在于,应用于计算机集群,所述计算机集群上搭建有Spark平台,所述方法包括:将参考点云与查询点云存储到所述计算机集群所在的HDFS分布式文件系统中;将所述参考点云和所述查询点云加载至所述Spark平台;以弹性分布式数据集的方式保存所述参考点云和所述查询点云,分别获得参考点云数据集与查询点云数据集;确定所述参考点云数据集的分区个数;根据所述分区个数对所述参考点云数据集构建分布式k-d树;基于所述分布式k-d树,对所述查询点云数据集进行并行K邻域搜索。2.如权利要求1所述的方法,其特征在于,所述将所述参考点云和所述查询点云加载至所述Spark平台,包括:采用Spark平台的文件读取接口从所述HDFS分布式文件系统中读取所述参考点云和所述查询点云,并加载至所述Spark平台。3.如权利要求1所述的方法,其特征在于,所述参考点云数据集存储为文本文件,所述文本文件的每行的格式为:X,Y和Z,X,Y,Z用以表示一个三维的点,为所述参考点云数据集的每个元素预设初始key值为m,所述初始key值用以表征点元素所在的树节点在所述的分布式k-d树中的位置,所述分布式k-d树包括全局k-d树和局部k-d树,所述根据所述分区个数对所述参考点云数据集构建分布式k-d树,包括:全局k-d树的构建和局部k-d树的构建,其中,全局k-d树的构建,包括:步骤S51:采用X,Y和Z轮转的方式确定分割维度,首先选择X维作为根节点的分割维度,然后选择Y维作为根节点两个子节点的分割维度,再选择Z维作为四个子节点的分割维度,接下来重新选择X维作为八个子节点的分割维度,依次轮转;步骤S52:根据当前的分割维度获得分割值,若所述点元素的坐标在所述分割维度上的值小于或等于所述分割值,则将所述点元素的key值更新为2*m,若所述点元素的坐标在所述分割维度上的值大于所述分割值,则将所述点元素的key值更新为2*m+1;其中,步骤S51和步骤S52递归执行,直到构建的全局k-d树的叶子节点个数与所述分区个数相等;局部k-d树的构建,包括:采用预设k-d树创建算法,构建所述局部k-d树。4.如权利要求3所述的方法,其特征在于,所述根据当前的分割维度获得分割值,包括:将所述分割维度作为groupByKey函数的输入,通过所述groupByKey函数输出获得所述分割值。5.如权利要求3所述的方法,其特征在于,为所述全局k-d树中的每个树节点构建分割表,所述分割表中的信息包括节点的key值、分割维度与分割值。6.如权利要求1所述的方法,其特征在于,为所述参考点云数据集的每个元素预设初始key值为m,所述初始key值用以表征点元素所在的树节点在所述的分布式k-d树中的位置,...

【专利技术属性】
技术研发人员:孟令奎马成张文
申请(专利权)人:武汉大学
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1