基于八叉树与三维r星树集成的激光点云数据管理方法

文档序号:10725033阅读:866来源:国知局
基于八叉树与三维r星树集成的激光点云数据管理方法
【专利摘要】本发明公开了一种基于八叉树与三维R星树集成的激光点云数据管理方法。该海量点云数据管理方法充分结合八叉树在三维空间上的快速收敛能力以及三维R*树对不规则分布的多维点数据性能稳定的优势。先对激光点云数据进行八叉树划分,然后对八叉树叶子节点构建三维R*树,进而实现3DOR*树索引结构的构建。对激光点云数据进行特征分析,构建基于3DOR*树的激光点云数据存储结构,实现基于3DOR*树的激光点云存储与管理。本发明基于3DOR*树的激光点云数据存储结构相比其它树形结构具有高效的空间存储与查询等优势,可以为海量激光点云数据存储、管理与分析应用提供技术支撑。
【专利说明】
基于八叉树与三维R星树集成的激光点云数据管理方法
技术领域
[0001]本发明涉及一种基于八叉树与三维R星(R*)树集成的激光点云数据管理方法,其技术领域为空间数据库的管理。可应用于3DGIS中大场景数据的显示、查询和存储,三维物体表面重构以及其他一些大规模的海量激光点云数据存储、管理与综合分析领域。
【背景技术】
[0002]随着大数据时代的到来,虚拟与现实,数字城市,数字博物馆,逆向工程等技术相继进入应用阶段,这些技术都离不开三维几何建模;因此,对三维激光点云数据的存储和管理要求更加高效、低成本。伴随着近年来测绘地理信息产业不断成熟与发展,三维激光扫描技术在国家经济社会发展、科学研究中发挥着日益重要的作用。与此同时,伴随着激光点云数据的几何级增长,激光点云数据的组织与管理面临着前所未有的严峻挑战,如何对这些激光点云数据进行高效的组织与有效的管理是三维激光扫描技术迫切需要攻克的重大技术性难题,如何提升激光点云数据查询检索效率是三维激光点云数据管理方法研究的关键技术热点问题。
[0003]目前关于激光点云数据管理方法的研究主要集中在利用三维空间索引的在空间划分和空间查询方面的优势,建立激光点云数据的存储结构模型。而三维空间索引在点云存储方面的研究主要集中在八叉树、KD树、三维R树等单一树形结构以及它们之间的集成树结构方面。R树的主要问题是,由于中间结点允许且可能重叠,因此往往导致多路查询,而且随着索引空间维数的增加,R树中间结点的重叠将急剧增加,这严重影响查找性能。R*树可以对路径中每个外接矩形的面积、边长和叠加程度进行综合优化,并将整个路径上所有外包矩形的优化结果合并起来考虑,实现了较为合理的空间聚簇。现有技术获取海量激光点云数据已相对容易,但尚无法直接应用这些海量点云数据进行地理空间实体特征提取、三维建模与分析等操作,为了更好地应用这些海量、且无拓扑关系的激光点云数据,急需设计一个高效的数据存储结构。

【发明内容】

[0004]本发明要解决的技术问题是:针对当前激光点云数据所面临的存储、管理困难等问题,提供了一种基于八叉树与三维R*树集成的激光点云数据管理方法,结合八叉树和三维R*树各自在空间索引方面的优势,并结合激光点云数据自身的结构特性,构建出适合激光点云的存储结构,实现对激光点云数据的高效存储和管理。
[0005]本发明的解决方案是:
[0006]一种基于八叉树与三维R星树集成的激光点云数据管理方法,具体步骤如下:
[0007](I)初始节点分裂阈值的确定:初始节点分裂阈值包括八叉树节点分裂阈值K和三维R*树节点分裂阈值M;先根据设定的初始节点分裂阈值对激光点云数据进行空间划分和节点分裂,然后在八叉树与三维R*树构建过程中不断分析叶子节点中空间对象分布情况,动态调整节点分裂阈值大小;计算包含所有空间对象的最小包围盒(xMin,yMin,zMin,xMax,yMax,zMax),并以坐标点(xMin,yMin,zMin)为起算点,计算包含所有空间对象的最小立方体范围,做为八叉树根节点范围;
[0008](2)节点分裂:根据设定的八叉树节点分裂阈值K对八叉树根节点递归分裂,并进行相关条件判断,直到满足分裂条件,停止分裂;然后将八叉树中包含空间对象的叶子节点作为三维R*树的初始化根节点,并根据设定的三维R*树节点分裂阈值M对三维R*树根节点进行递归分裂,生成三维R*树叶子节点,直至所有空间对象都添加到索引树结构中且每个叶子节点空间对象数量在阈值范围内时终止分裂;如果八叉树节点不满足阈值K,则将空间均匀划分为8个子节点,并将空间对象分配至对应子节点;如果满足阈值K,则停止划分直接进入步骤(3),否则还需继续重新进行递归分裂;
[0009](3)构建三维R*树:对已划分完毕的八叉树叶子节点,如果节点内包含空间对象,则构建其初始化三维R*树,并将空间对象逐一插入至三维R*树中;否则结束操作;
[0010](4)空间对象插入:首先需要选择插入的子树,子树的选择主要根据重叠体积和体积指标;在每次选择子树的过程中,都会更新叶子节点分支的缓存,子树选择之后,执行插入操作,如果插入之后节点包含空间对象数目在三维R*树节点分裂阈值M范围内,则此空间对象完成插入,叶子节点采取红黑树数据结构进行空间对象存储,这样可以保证插入、删除和查找的时间效率;否则,进入下一步;
[0011](5)节点溢出处理:如果插入之后节点包含的空间对象超出节点分裂阈值M的范围,即出现溢出情况;则分两种情况,如果是节点所在层第一次溢出,则执行步骤(4)重新插入操作,否则执行步骤(2)节点分裂操作;
[0012](6)检查空间对象是否完全插入:检查是否还有空间对象未执行插入操作,如果存在则重复执行步骤(4)和(5),直至所有空间对象都被插入到树结构中。
[0013]步骤(2)和步骤(3)中,采用将节点各分支存储到缓存区的方法,保证了节点分裂和节点插入的尚效性。
[0014]步骤(4)在进行空间对象存储的同时,再建立一个附加的索引表,索引表中存储的是已生成的八叉树与三维R*树的各节点信息;所述节点信息包括八叉树和三维R*树数据结构信息,其中八叉树的数据结构包括最小外包矩形体信息、本节点所在的节点深度信息、八个子节点标识符信息、父节点标识信息和每个叶子节点的三维R*树根节点信息;三维R*树的数据结构包括最小外包矩形体信息、节点深度信息、节点包含分支数量、各分支标识符信息以及叶节点存储的激光点云信息。
[0015]激光点云数据是由海量独立的单点数据组成,其中每个单点数据信息内容包括三维坐标、颜色、纹理及信号反射强度等信息,可以根据应用需要扩展单点结构。
[0016]将激光点云数据存储在索引树的叶子节点中,减少了数据的冗余,中间节点不存放数据,只存储跟数据相关的索引信息。通过分别设计八叉树、三维R*树和激光点云数据结构,并且在各树形结构的叶子节点处设置一个位置标识,来关联到下层数据结构。这样的数据结构设计既契合了3D0R*树(3D 0ct-R*tree,即八叉树与三维R*树集成)索引树生成算法,又融合两种树形结构的索引优势,从而在构建索引结构的基础上实现了对海量激光点云数据的高效存储管理。
[0017]本发明将八叉树的构建过程和三维R*树构建过程相融合,其3D0R*树数据结构采用嵌套的二级索引组织形式,以八叉树为一级数据结构,三维R*树为二级数据结构。其中,三维R*树使得激光点云数据的存储管理具有很好的空间适应性,保证平衡树状结构和良好的空间利用率。该嵌套树形结构,既能充分利用八叉树收敛速度快的特性,快速划分三维空间,又具有三维R*树在高维空间中高效检索的潜在优势。本发明采用3D0R*树对激光点云数据进行管理,其优势主要体现在高效的查询性能方面,通过层级的数据结构设计,构建索引信息表,可实现激光点云数据的高效查询。
【附图说明】
[0018]图1为本发明的实现流程图;
[0019]图2为八叉树与三维R*树集成数据结构的组织结构图;
[0020]图3为各节点数据结构设计图;
[0021]图4为各树形索引结构构建时间对比图,算法运行平台为WIN764位系统,主要配置为Inter(R)Core(TM)2Quad CPU,4G内存;
[0022]图5为各树形索引结构查询时间对比图,算法运行平台为WIN764位系统,主要配置为Inter(R)Core(TM)2Quad CPU,4G内存。
【具体实施方式】
[0023]以下将结合附图和【具体实施方式】对本发明进行详细描述。
[0024]本发明海量点云数据管理方法充分结合八叉树在三维空间上的快速收敛能力以及三维R*树对不规则分布的多维点数据性能稳定的优势。先对激光点云数据进行八叉树划分,然后对八叉树叶子节点构建三维R*树,进而实现3D0R*树索引结构的构建。对激光点云数据进行特征分析,构建基于3D0R*树的激光点云数据存储结构,实现基于3D0R*树的激光点云存储与管理。基于3D0R*树的激光点云数据存储结构相比其它树形结构具有高效的空间存储与查询等优势,可以为海量激光点云数据存储、管理与分析应用提供技术支撑。并且通过预先对数据进行合理有效的组织,保证了其具有很高的空间利用率和良好的查询效率,解决了当前激光点云数据所面临的存储、管理困难等问题。
[0025]下面结合图1所示的流程图,以RigelVZ-1000三维激光扫描仪采集的江西理工大学图书馆激光点云数据为例,对基于3D0R*树的激光点云数据管理中查询方法的实现过程进行描述。采用C++实现了本发明3D0R*树生成算法,算法运行平台为WIN7 64位系统,主要配置为Inter(R)Core(TM)2Quad CPU,4G内存。该实例在保留其对象主要特征的前提下,对激光点云数据进行了不同量级的LOD划分,分别提取了点云数量为100000、200000、400000、600000、800000、1000000的实例对象激光点云数据,为本发明所提方法的验证提供横向比较的数据支撑。该发明的具体实施办法如下所述:
[0026]1.读取实例对象激光点云数据
[0027]江西理工大学图书馆激光点云数据存储在.asc文件中,为了更好的进行对比分析,将实例对象的激光点云数据进行了 LOD划分,并分别提取了点云数量为100000、200000、400000、600000、800000、1000000的实例对象激光点云数据。具体的数据读取过程首先需要读取里面的点坐标信息,并且在读取的过程中进行坐标大小比较,计算出当前所包含空间对象的最小立方体范围(11;[11,5^;[11,2]\1;[11,11^?,71&?,2]\^?)。读取完毕即得到整个点云空间的最小外包立方体,并临时存储坐标信息。
[0028]2.设定阈值范围并初始化3D0R*树
[0029]阈值的设定主要是依据点云空间点数目以及密度,并根据实验结果测试不断调整得出。这里根据之前划分的点云数据初步设定八叉树分裂阈值为5000点数目以及三维R*数分裂阈值为500点数目。然后根据之前得到的点云空间最小外包立方体作为3D0R*初始化根节点信息,开始进行3D0R*构建。
[0030]3.基于八叉树的实例对象激光点云空间划分
[0031]根据之前步骤描述,八叉树划分主要是依据分裂阈值,不断的递归划分八叉树。首先判断当前节点包含点数目是否小于5000点数阈值,如果超出阈值则对八叉树节点进行八等份分裂,即将整个实例对象点云的外包立方体平均分割成八份,作为该节点的八个子节点,并根据各自外包立方体范围将点云数据分割到八个子节点,然后对八个子节点递归重复此步骤;如果满足则不再继续划分,直接进入三维R*树构建过程。
[0032]4.八叉树叶子节点的三维R*树构建
[0033]按照图2所描述的3D0R*树组织结构图,在完成八叉树空间划分的基础上,对每一个八叉树叶子节点存储的激光点云数据进行三维R*树构建。采用逐点插入的方法,遍历八叉树叶子节点存储的所有激光点数据,然后执行逐点插入操作,插入过程主要包含选择子树和节点分裂过程。
[0034]4.1三维R*树子树选择与构建
[0035]对于每个插入的点数据,都是从三维R*树根节点开始插入,首先将根节点设为当前节点(记为N),如果N不是叶子节点,则遍历N中所有的分支节点,计算插入后三维R*节点的重叠体积和体积增量,选择体积最小的节点作为插入位置,并重新置为当前节点的体积,直到N为叶子节点则插入过程结束。
[0036]4.2三维R*树节点分裂
[0037]每完成一次数据插入操作后,需要根据之前设置的节点分裂阈值,判断是否要进行节点分裂。对于本实例对象数据,如果数据插入后激光点云数量大于500,则需要对该三维R*树节点溢出操作。如果是节点所在层第一次溢出,则执行重新插入操作,否则执行节点分裂操作,具体分裂步骤与R树相同。
[0038]5.3D0R*树构建完成
[0039]当八叉树叶子节点所有激光点云数据都插入完毕,即所有的八叉树叶子节点都完成三维R*树构建后,则该实例对象激光点云数据的3D0R*构建完成。
[0040]6.利用3D0R*树进行激光点云数据管理
[0041]为了能更好的对激光点云数据进行管理,需要在存储点云数据的同时,建立一个附加索引表,索引表中存储的是已生成的3D0R*树的各节点信息,如图3所示。3D0R*树叶子节点通过激光点云ID关联到实体存储数据,数据和索引分开存储提高管理效率。
[0042]本方法将八叉树的空间划分和三维R*树的空间对象存储两个过程融合到一起,并通过八叉树叶子节点信息进行关联。在混合树的生成过程中,首先需要给定八叉树划分阈值,以及三维R*树每个节点允许包含的空间对象最大数目。在八叉树的划分过程中,将满足阈值条件的八叉树叶子节点作为三维R*树的根节点,采用逐个空间对象插入的方法,同时考虑三维R*树节点分裂阈值和体积参数进行三维R*树子节点的构建,直到所有空间对象执行完插入操作,则完成三维R*树的构建过程。三维R*树的构建主要采用传统的方法,但这里针对空间对象,在进行选择子树和分裂操作时,将二维的R*中的面积指标扩展为体积指标。
[0043]基于3D0R*树的激光点云数据查询过程主要是分为两步,八叉树查询和三维R*树查询,在具体查询过程中两步操作可同时交替执行,提高查询效率。而对于其中的每个查询子过程又是前后分离关系,执行到八叉树叶子节点处开始执行三维R*树查询算法。中间八叉树的叶子节点可以采用队列的方式进行管理,八叉树查询过程中符合要求的叶子节点进行入队操作,然后对出队得到的数据执行三维R*树查询,直到队列为空为止。这样可以使得两过程同时进行互不冲突,很大程度上提高查询效率。
[0044]在此,通过对单一树形结构(八叉树、三维R*树)以及本发明所提的3D0R*树形结构进行数据结构构建用时与查询用时进行对比分析,可以明显的比较出对于处理海量点云数据时本发明所提的3D0R*树形结构更加高效。虽然在索引树构建效率上,3D0R*树构建时间较长,但是在索引树查询效率方面3D0R*树用时较短,并且随着激光点云数量呈几何级增长,其查询效率更为突出。效果如图4、5所示,其中时间单位都是毫秒(ms)。
[0045]本发明说明书中未做详细描述的内容属于本领域专业技术人员公知的现有技术。
[0046]所有上述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视作本发明的保护范围。
【主权项】
1.一种基于八叉树与三维R星树集成的激光点云数据管理方法,其特征在于,具体步骤如下: (1)初始节点分裂阈值的确定 初始节点分裂阈值包括八叉树节点分裂阈值K和三维R*树节点分裂阈值M;先根据设定的初始节点分裂阈值对激光点云数据进行空间划分和节点分裂,然后在八叉树与三维R*树构建过程中不断分析叶子节点中空间对象分布情况,动态调整节点分裂阈值大小;计算包含所有空间对象的最小包围盒(11;[11,5^;[11,2]\1;[11,11^?,71^?,2]\^?),并以坐标点(xMin,yMin,zMin)为起算点,计算包含所有空间对象的最小立方体范围,做为八叉树根节点范围; (2)节点分裂 根据设定的八叉树节点分裂阈值K对八叉树根节点递归分裂,并进行相关条件判断,直到满足分裂条件,停止分裂;然后将八叉树中包含空间对象的叶子节点作为三维R*树的初始化根节点,并根据设定的三维R*树节点分裂阈值M对三维R*树根节点进行递归分裂,生成三维R*树叶子节点,直至所有空间对象都添加到索引树结构中且每个叶子节点空间对象数量在阈值范围内时终止分裂;如果八叉树节点不满足阈值K,则将空间均匀划分为8个子节点,并将空间对象分配至对应子节点;如果满足阈值K,则停止划分直接进入步骤(3),否则还需继续重新进行递归分裂; (3)构建三维R*树 对已划分完毕的八叉树叶子节点,如果节点内包含空间对象,则构建其初始化三维R*树,并将空间对象逐一插入至三维R*树中;否则结束操作; (4)空间对象插入 首先需要选择插入的子树,子树的选择主要根据重叠体积和体积指标;在每次选择子树的过程中,都会更新叶子节点分支的缓存,子树选择之后,执行插入操作,如果插入之后节点包含空间对象数目在三维R*树节点分裂阈值M范围内,则此空间对象完成插入,叶子节点采取红黑树数据结构进行空间对象存储;否则,进入下一步; (5)节点溢出处理 如果插入之后节点包含的空间对象超出节点分裂阈值M的范围,即出现溢出情况;则分两种情况,如果是节点所在层第一次溢出,则执行步骤(4)重新插入操作,否则执行步骤(2)节点分裂操作; (6)检查空间对象是否完全插入 检查是否还有空间对象未执行插入操作,如果存在则重复执行步骤(4)和(5),直至所有空间对象都被插入到树结构中。2.根据权利要求1所述的一种基于八叉树与三维R星树集成的激光点云数据管理方法,其特征在于,步骤(2)和步骤(3)中,采用将节点各分支存储到缓存区的方法。3.根据权利要求1或2所述的一种基于八叉树与三维R星树集成的激光点云数据管理方法,其特征在于,步骤(4)在进行空间对象存储的同时,再建立一个附加的索引表,索引表中存储的是已生成的八叉树与三维R*树的各节点信息;所述节点信息包括八叉树和三维R*树数据结构信息,其中八叉树的数据结构包括最小外包矩形体信息、本节点所在的节点深度信息、八个子节点标识符信息、父节点标识信息和每个叶子节点的三维R*树根节点信息;三维R*树的数据结构包括最小外包矩形体信息、节点深度信息、节点包含分支数量、各分支标 识符信息以及叶节点存储的激光点云信息。
【文档编号】G06F17/30GK106095907SQ201610402781
【公开日】2016年11月9日
【申请日】2016年6月8日
【发明人】王永志, 杨路生, 王慧, 廖丽霞, 李冬森, 潘红伟
【申请人】江西理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1