采用八叉树和OSG分页结点的海量点云三维可视化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
采用八叉树和OSG分页结点的海量点云三维可视化
李彩林; 陈文贺; 胡善明; 袁斌
【期刊名称】《《计算机工程与应用》》
【年(卷),期】2019(055)021
【总页数】6页(P233-238)
【关键词】八叉树; 均匀采样; OSG分页结点; 海量点云; 快速可视化
【作者】李彩林; 陈文贺; 胡善明; 袁斌
【作者单位】山东理工大学建筑工程学院山东淄博 255000
【正文语种】中文
【中图分类】TP391
1 引言
海量三维点云的可视化技术对于理解和传达空间信息以及分析和模拟结果至关重要[1-2]。随着目标场景的不断增大和场景复杂度的不断升高,获得的数据量也不断增长,这对传统点云管理与可视化算法提出了挑战。实现海量点云数据的空间分析及可视化,需要实时、高效地完成点云数据的管理和调度工作。空间数据的管理,关键在于数据的索引。目前,实现海量点云数据快速显示的有效方法是构建空间索引,常用的空间索引主要包括R树[3]、K-D树[4]、四叉树[5]和八叉树[6]等。文献[7]针对高效海量点云数据的要求,提出一种基于Hilbert码和R树的二级索引方法,索引建立较为高效。文献[8]针对海量机载LiDAR点云数据管理与可视化效
率不高的问题,提出了一种四叉树和局部K-D树相结合的混合空间索引结构以及内外存结合的数据调度模式。文献[9]建立了一种“非空”规则立方体网格和K-D 树相结合的双层次数据结构用于LiDAR点云组织管理,降低了结构冗余和提高索引效率。上述方法一定程度上实现了海量点云高效索引的建立,但针对具有不同分辨率、分布和密度的三维点云,适用性不强,而八叉树结构的索引建立能力适用性较强[10]。
文献[11]提出了一种开源的八叉树点云数据索引标准数据格式,并测试其在海量点云特征提取算法方面的适用性。文献[12]通过哈希表数据结构优化八叉树结构,实现三维点云数据的快速检索,但在内存占用方面需要进一步优化。文献[13]通过数据分块降低海量数据的复杂性,并建立数据块的多分辨率结构,内存占用较小,但是建立八叉树索引时间较长。文献[14]提出基于3D网格与哈希表的车载LiDAR 点云八叉树索引算法,建立索引时间较快,但需要把点云一次读入内存,对于海量数据,此方法显然并不适用。
针对以上问题,本文采用八叉树对海量点云进行划分,建立各层八叉树结点数据结构,然后研究一种点云分块处理、逐结点保存的文件映射机制将采样点云写到外存文件(八叉树结点文件),有效降低了内存的占用,同时提出一种从上往下的逐层均匀采样策略较好解决了文献[15-17]中因随机采样导致结果点云集出现空洞或不均匀问题以及该采样方法需要对数据结构(四叉树、K-D树、八叉树等)索引进行二次遍历导致的效率低问题。在可视化阶段,针对八叉树结点文件结构与OSG 结构不兼容,对结点文件结构进行了重组织,然后利用基于OSG分页结点的实时调度技术,对海量点云进行高质量可视化。本文算法总体流程图如图1所示。
图1 算法总体流程图
2 海量点云的八叉树索引构建与文件组织
采用八叉树索引结构对海量点云进行数据组织,然后利用基于多层3D网格的均匀
采样方法建立各层级的八叉树结点点云数据。同时为减小内存消耗,以内存中原始点云数量1 000万为分块依据,超过1 000万就将采样点云以文件映射的方式逐结点写到外存文件中。
点云八叉树构建与文件组织算法描述如下,具体算法流程如图2所示。
图2 点云八叉树划分与八叉树结点文件生成流程图
输入:点云数据集。
输出:八叉树结点点云文件。
步骤1自动计算原始点云数据集合的最小外包围盒大小,得长、宽、高分别为X、Y、Z,同时确定八叉树最大深度Depth max=log8 N,N为点云总数。
步骤2根据原始点云最小外包盒大小计算最小采样距离,后续在每一层把最小采样距离依次减半;在实际使用中取经验公式minD=,λ为系数值,根据计算机硬件条件能够一次性加载并渲染的点云数量来确定,本文λ取值200。
步骤3遍历输入点云中所有点,根据2.1节介绍的均匀采样策略,获得一个点云子集,使得所有选定点之间的距离大于minD;将所选点保存在结点中,剩余点进入下一层。
步骤4将剩余点所在区域分割为8个子区域,并对每个子区域重复上述步骤2、步骤3(需要说明在步骤3中,遍历的输入点云是采样处理后的剩余点云),当内存中点云到达分块阈值时,采样点云就以文件映射的方式存入磁盘(见2.2节),直到八叉树深度大于Depth max时,八叉树索引建立结束。
为描述方便,本文采用八叉树划分二维简化图对上述点云数据划分进行图解,如图3所示。
2.1 均匀采样
为解决随机采样策略容易导致结果点云集出现空洞和不均匀问题,本文提出一种均匀采样策略,采用虚拟3D网格结构结合点云距离判断能够保证八叉树每一层所选
点分布比较均匀。八叉树根结点采样过程描述如下:
图3 八叉树划分二维简化图
(1)确定虚拟3D网格(立方体)的单元边长。取(最小采样距离)作为虚拟
3D网格的单元边长。
(2)计算每个点对应的虚拟3D网格单元索引。设原始点云中一点为P(X P,Y P,Z P),其在网格中的三维索引为n X P,nY P,n Z P外包围盒的最小三维坐标分别为X min,Y min,Z min则索引计算公式为:
(3)对原始点云进行均匀采样。①根据步骤(2)确定当前点P对应的网格单元
索引;②判断是否需存储点P:若P所在的网格单元cell0及其所有相邻的26个
网格单元都没有包含点,则将P存储在cell0中;若P所在的网格单元cell0及相邻的26个网格单元中存储有点,则计算P i的距离li,仅当每个li均大于网格单
元边长l0时,则P存入cell0,否则舍弃。
图4 采样点选择二维简化图
如图4所示,P1,P2,P3对应的网格索引单元分别为cell1,cell2,cell3。假定cell1
及其周围网格单元初始都为空,将P1点存入cell1。计算P1和P2的距离l12,
图中l12>l0,则P2点存入cell2。加入 P3时,计算P1和 P3的距离l13,图中
l13<l0,则P3点被舍弃。
对八叉树每一层子结点采样时,除上述过程外,还需要进行两点操作:(1)需把父结点使用的网格单元边长减半作为该层子结点的新3D虚拟网格单元边长;(2)需要在该层网格中额外加入父结点保存的点云进行距离判断,以确保采样可靠性,但父结点点云并不会保存到子结点中,以避免保存结果冗余。
实验数据为老鹰点云数据(如图5(a)所示),点个数为796 825,图5(b)和图5(c)分别为随机采样和均匀采样效果图,点数均为80 000。由图5(b)和