则将数组中所有点打包为叶节点插入R树中;如果iPtNum大于imax且小
于等于2imax,将点均分为两个叶节点,插入R树中;如果iPtNum大于2imax,k为iPtNum/imax取整,将数组前(k-1)imax个点,均分(k-1)个叶节点插入R树,剩余点数iRestNum为iPtNum-
(k-1)imax,如果iRestNum等于imax,则将其作为一个叶节点插入到R树,如果大于imax(必然小于2imax)
,则将其均分为两个叶节点,插入R树中。步骤5:逐一遍历子节点Childi,如果Childi中的点数目大于imax,则令node为Childi,进入步骤2。
步骤6:逐一遍历子节点Childi,如果Childi
中的点数目大于等于imin且小于等于imax,则将节点中的点组成叶节点插入R树。
步骤7:所有八叉树分支分裂结束后,将
Array
2中的点以元组身份逐一插入R树。步骤8:退出。
本方法利用八叉树分配邻近点至相同或相邻节点中,通过以节点为插入单元的策略批量插入点,避免了逐点插入的费时操作,显著地提高索引
生成效率,同时仍然采用动态生成方法构建R
树,使得树形结构具有很好的空间适应性,保证平衡树状结构和良好空间利用率。图3是某点云数据的八叉树叶节点层(分裂参数为100,即大于100个点要分裂节点)和3DOR树结构叶节点层(扇出参数为40和100
)
。图3 八叉树和3DOR树的叶节点层Fig
.3 Leaf nodes in Octree and 3DOR-tree3 顾及多细节层次的3DOR树扩展结构
对于车载激光点云测图应用需要高效交互性能来说,启用多细节层次策略成为合理甚至必须的选择,即根据视距和软硬件性能实时选择合适细节层次表示点云场景。关于R树和多细节层次场景结合的已有研究均试图采用R树的天然层次结构实现目标查询和细节层次查询的双重功
能[
17-
19]。然而,应用R树节点包围盒作为低细节层次描述,忽略单个目标的LOD(level of details)描述需求,也不能满足可视化精度要求。
传统R树索引方法仅在叶节点中管理目标模型,本文扩展结构使得中间节点也能管理目标模型。叶节点层管理全部和最精细的目标,从每个子节点按照某种规则挑选一个最有代表性的目标作为较粗层次目标模型集合存于父节点中,因此上层节点中的目标数目和子节点数目相等。举例说明,
从每个子节点中选择一个距离目标集合重心最近的目标作为上层节点的目标。
本文方法借助R树的层次结构,叶节点代表最高的细节层次,中间节点代表中等的细节层次,根节点代表最低的细节层次。每层被设置一个适用范围,包括最近距离和最远距离,相邻层的适用范围无缝拼接。同层中所有节点的适用范围相同,当视点和节点的距离落于该范围内,即访问节点中的点模型。在全景描绘时,只需访问根节点中的点模型,随着视点接近,视域逐渐减小,关注
9
95
Aug
ust 2012 Vol.41 No.4 AGCS http:∥xb.sinomap
s.com细节逐渐提高,从根节点访问其子节点,根节点中的点仅是其子节点中的重要目标,因此关注的目标集合有所增加,细节层次增强。LOD选取距离原则的详细解释可以参考文献[20]。图4是点云的多细节层次描述效果
。
图4 点云的多细节层次描述
Fig.4 LOD rep
resentation of point clouds4 基于3DOR树的点云数据高效组织方法
由于文件大小的限制,
大规模点云工程采用工程-点云-点层次模式组织点云数据。车载激光点云采集过程中,每隔几百万个点分段为单个点
云,单个点云的原始文本文件数据量为数百兆字节,某个应用中的点云集合即为点云工程,一个小型城镇的点云工程可能高达数十GB。本文采用自定义的文件结构组织大规模车载激光点云,目的是为了提高数据管理效率,其方法也可实现于商业数据库管理系统。
以自定义文件系统方式为例,点云工程是包含众多点云的目录,点云是单个二进制数据文件,图5是本文数据组织方法描述。每个点云包括头部分和实体部分,头部分包括点云的整体信息,如版本号、总数据量、R树扇出参数(子节点数目的最大最小值)、总点数、R树总层数、
空间范围、中心点坐标、压缩标志以及根节点地址等。点坐标是实际点坐标减去中心点坐标的差值,这样坐标可以采用较少有效位数表示,
有利于采用4字节单精度浮点类型表示点坐标,另外,如果空间范围在各坐标轴上的长度小于655.35m且精度要求在厘米级(车载激光扫描数据精度可达到厘米级),将坐标值乘以100然后用2字节短整数类型表示点坐标,数据量减少75%
。
图5 点云工程数据组织方法
Fig.5 Data organization method of point cloud proj
ect 点云的实体部分采用三维R树索引结构管
理点数据,R树索引结构包括根节点、中间节点和叶节点。本文的多细节层次生成方法中,上层节点从每个子节点中选取一个点作为低细节层次描
述,为避免重复存储和处理,选取点将从子节点移出至上层节点,这样中间节点和叶节点中的点数目要减1。为了实现缓存机制,即根据视域条件动态调度数据,父节点记录子节点的首地址,即子
006
第4期龚 俊,等:一种八叉树和三维R树集成的激光点云数据管理方法节点相对文件起始位置的偏移量。R树存储结构可以分为按广度遍历存储顺序和按深度遍历存储顺序组织。广度遍历存储顺序指按节点层的次序存储节点数据,从根节点开始,将节点按层顺序依次记录到文件中,
负面影响是父节点和子节点无法集中存储;深度遍历存储顺序指从根节点开始,然后记录其各个子树,负面影响是中间层的兄弟节点无法集中存储。图6(a)和(b)分别是广度遍历存储和深度遍历存储的原理
。
图6 广度和深度遍历存储原理描述
Fig.6 Principal description of breadth and dep