一种古建筑散乱点云空间索引的方法
技术领域
本发明涉及点云索引领域,尤其涉及一种古建筑散乱点云空间索引的方法。
背景技术
空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息。古建筑点云数据具有数据量大(海量性)、数据表达精细(高空间分辨率)、空间三维点之间无拓扑关系(散乱性)等特征,在进行后续的数据处理中需要频繁的进行邻域查找,因此必须进行数据的组织和索引,以提高后续邻域检索和查询等操作的速度。
针对点云数据采用八叉树和K-D树索引的较多,八叉树算法实现简单,但较适用于分布均匀的数据,虽然深度较K-D树低,但子树判断较费时间,检索效率较低。而K-D树的常数因子很小,继承了二叉树检索效率较高的特点,经过粗略测试这种结构的效率和散列相比,在一百万数据量之下还是很占优势的,但海量数据则存在深度较大引起效率降低的情况。将八叉树和K-D树集成同样存在深度问题。规则格网法算法实现简单,查询效率很高,但存在单一分辨率,数据冗余等问题。单一的索引方法难以实现对海量的散乱点云数据的高效索引。
发明内容
针对上述技术问题,本发明设计开发了一种古建筑散乱点云空间索引的方法,目的在于在保持格网索引算法实现简单、查询效率高等优点的同时,解决单一分辨率、数据冗余的问题,减少每次查询的数据量,保证K-D树的查询效率。
本发明提供的技术方案为:
一种古建筑散乱点云空间索引的方法,包括以下步骤:
步骤一、采集古建筑的原始数据,并根据点坐标构建点集;
步骤二、对所述点集进行格网划分,并构建格网索引数组,根据格网中的点坐标计算出格网索引数组每个单元的值;
步骤三、将格网合并为区域,或利用八叉树划分出区域,并构建区域数组,每个区域的ID和所有相邻六个面的区域的ID存储到相应的区域数组中,在每个区域中构建K-D树,遍历格网索引数组,计算各个格网对应的区域在区域数组中的ID并存储到格网索引数组中;
步骤四、根据查询点的坐标计算其所在的格网,并通过格网索引数组找到其所在的区域数组,在相应的区域中利用K-D树进行最近邻搜索,得到该区域中与查询点距离最近的点,并将该点与查询点的距离与查询点到其所在的区域的六个面的距离进行比较,若该点与查询点的距离小于查询点到其所在的区域的六个面的距离,则该点即为最终的与查询点距离最近的点;若该点与查询点的距离大于该点到所在的区域的一个或多个面的距离,则在所述一个或多个面的相邻区域中继续利用K-D树进行最近邻搜索,得到最终的与查询点距离最近的点。
优选的是,所述的古建筑散乱点云空间索引的方法中,根据统计的方法估算出格网的大小,对所述点集进行格网划分。
优选的是,所述的古建筑散乱点云空间索引的方法中,利用八叉树对所述点集进行划分,计算深度最深的叶子节点的长宽高并假定为格网大小,构建初始格网索引数组,将格网中的点坐标存储到初始格网索引数组中,判断所述初始格网索引数组中每个单元存储的值是否超出系统内存,若超出,删除此深度级别的所有叶子节点,以其上一级节点作为新的最深的叶子节点,如此递归,直至所述初始格网索引数组中每个单元存储的值不超出系统内存,记录最终叶子节点的长宽高和初始格网索引数组中每个单元的值,用最终叶子节点的长宽高对所述点集进行格网划分,并新建格网索引数组。
优选的是,所述的古建筑散乱点云空间索引的方法中,利用八叉树的所有叶子节点构建区域及区域数组,计算每个叶子节点的范围并将其作为一个区域,统计每个区域的六个面的所有相邻区域,将所述每个区域的ID和所有相邻区域的ID存储到相应的区域数组中。
优选的是,所述的古建筑散乱点云空间索引的方法中,所述区域数组中存储有多个区域结构体,所述每个叶子节点的范围和所有相邻区域均存储到相应的区域结构体中。
优选的是,所述的古建筑散乱点云空间索引的方法中,计算所述点集的最小包围盒,在最小包围盒范围内对所述点集进行格网划分。
优选的是,所述的古建筑散乱点云空间索引的方法中,在对所述点集进行八叉树划分时,设置节点包含点数的阈值。
优选的是,所述的古建筑散乱点云空间索引的方法中,若节点包含的点数大于阈值,则继续进行八叉树划分,若节点包含的点数小于阈值,则该节点为叶子节点。
优选的是,所述的古建筑散乱点云空间索引的方法中,所述八叉树的叶子节点将所述点集划分为大小不同的多个区域,每个区域中包含至少一个格网。
优选的是,所述的古建筑散乱点云空间索引的方法中,将利用K-D树在所述一个或多个面的相邻区域中进行最近邻搜索得到的一个或多个点与查询点的距离和查询点所在的区域得到的与查询点距离最近的点与查询点的距离进行比较,得到最终的与查询点距离最近的点。
本发明所述的古建筑散乱点云空间索引的方法具有以下有益效果:对点集进行格网划分,将格网合并为区域,或利用八叉树划分出区域,每一区域中构建K-D树,在区域和相邻区域范围内通过K-D树检索,避免了K-D树深度过大的问题,保证了K-D树的查询效率。格网索引数组存储各个格网对应的区域在区域数组中的ID,在保持格网索引算法实现简单、查询效率高等优点的同时,又解决了单一分辨率、数据冗余的问题,整体索引效率较高。
附图说明
图1是本发明所述的古建筑散乱点云空间索引的方法的流程图。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
如图1所示,本发明提供一种古建筑散乱点云空间索引的方法,包括以下步骤:
步骤一、采集古建筑的原始数据,并根据点坐标构建点集,标记为{X};
步骤二、对所述点集{X}进行格网划分,并构建格网索引数组,根据格网中的点坐标计算出格网索引数组每个单元的值;
步骤三、设置格网包含点数的最小阈值,将点数小于最小阈值的格网合并为区域,或利用八叉树划分出区域,设置八叉树划分时节点包含点数的阈值为5000,由于古建筑散乱点云分布的不均匀性,八叉树每个节点包含的点数不同,节点包含的点数大于5000的则继续进行八叉树划分,直至节点包含的点数小于5000,节点包含的点数小于5000的即为叶子节点,利用八叉树的所有叶子节点构建区域及区域数组Region[k],每个区域的ID和所有相邻六个面的区域的ID存储到相应的区域数组中,在每个区域中构建K-D树,遍历格网索引数组,计算各个格网对应的区域在区域数组中的ID并存储到格网索引数组中;
步骤四、根据查询点的坐标x,y,z计算出格网索引数组每个单元的值m,n,l,m=(x-x0)/dx,n=(y-y0)/dy,l=(z-z0)/dz,x0,y0,z0是格网划分的起点坐标,即点集最小包围盒的minx,miny,minz,通过格网索引数组中格网对应的区域在区域数组中的ID,从而定位到所在区域Region[Index[m][n][l]],在相应的区域中利用K-D树进行最近邻搜索,得到该区域中与查询点距离最近的点,并将该点与查询点的距离与查询点到其所在的区域的六个面的距离进行比较,若该点与查询点的距离小于查询点到其所在的区域的六个面的距离,则该点即为最终的与查询点距离最近的点;若该点与查询点的距离大于该点到所在的区域的一个或多个面的距离,则在所述一个或多个面的相邻区域中继续利用K-D树进行最近邻搜索,得到最终的与查询点距离最近的点。
所述的古建筑散乱点云空间索引的方法中,根据统计的方法估算出格网的大小,对所述点集进行格网划分。
所述的古建筑散乱点云空间索引的方法中,利用八叉树对所述点集进行划分,找到深度最深的叶子节点,即区域范围最小的叶子节点,计算深度最深的叶子节点的长宽高dx,dy,dz,并假定为格网大小,构建初始格网索引数组Index[m][n][l],将格网中的点坐标存储到初始格网索引数组中,判断所述初始格网索引数组中每个单元存储的值m,n,l是否超出系统内存,若超出,删除此深度级别的所有叶子节点,以其上一级节点作为新的最深的叶子节点,计算新的最深的叶子节点的长宽高dx,dy,dz和格网索引数组的m,n,l,如此递归,直至所述初始格网索引数组中每个单元存储的值不超出系统内存,记录最终叶子节点的长宽高dx,dy,dz和初始格网索引数组中每个单元的值m,n,l,用最终叶子节点的长宽高对所述点集进行格网划分,并新建格网索引数组。
所述的古建筑散乱点云空间索引的方法中,利用八叉树的所有叶子节点构建区域及区域数组,计算每个叶子节点的范围并将其作为一个区域,统计每个区域的六个面的所有相邻区域,将所述每个区域的ID和所有相邻区域的ID存储到相应的区域数组中。
所述的古建筑散乱点云空间索引的方法中,所述区域数组中存储有多个区域结构体,所述每个叶子节点的范围和所有相邻区域均存储到相应的区域结构体中,每个叶子节点的范围即每个叶子节点三维坐标信息的最大值和最小值,每个叶子节点的六个面的所有相邻区域,即左边面邻接的区域、右边面邻接的区域、上边面邻接的区域、下边面邻接的区域、前边面邻接的区域、后边面邻接的区域。
所述的古建筑散乱点云空间索引的方法中,计算所述点集的最小包围盒,在最小包围盒范围内对所述点集进行格网划分。
所述的古建筑散乱点云空间索引的方法中,在对所述点集进行八叉树划分时,根据原始数据的大小合理设置节点所包含点数的阈值。
所述的古建筑散乱点云空间索引的方法中,若节点包含的点数大于阈值,则继续进行八叉树划分,若节点包含的点数小于阈值,则该节点为叶子节点。
所述的古建筑散乱点云空间索引的方法中,所述八叉树的叶子节点将所述点集划分为大小不同的多个区域,每个区域中包含至少一个格网,若深度最深的叶子节点刚好为格网,则该叶子节点所在的区域只包含一个格网,否则每个区域中至少包含两个格网,而每一个格网只属于一个区域。
所述的古建筑散乱点云空间索引的方法中,将利用K-D树在所述一个或多个面的相邻区域中进行最近邻搜索得到的一个或多个点与查询点的距离和查询点所在的区域得到的与查询点距离最近的点与查询点的距离进行比较,得到最终的与查询点距离最近的点。
所述的古建筑散乱点云空间索引的方法中,所述格网索引数组中存储每个格网的ID,每个格网的ID对应多组该格网中的点坐标计算出的格网索引数组中的单元值,通过查询点的坐标所述区域数组中存储每个区域的ID。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。