采用八叉树和OSG分页结点的海量点云三维可视化
基于外存八叉树的三维激光点云实时渲染技术研究

基于外存八叉树的三维激光点云实时渲染技术研究三维点云数据的交互式处理通常依赖点云数据三维实时渲染。
随着三维激光扫描技术的深入应用,越来越多的三维点云数据被获取和积累下来。
随着点云数据量的不断增大,大规模三维激光扫描点云的实时渲染已经成为点云数据处理的瓶颈问题。
本文提出一种支持大规模点云实时渲染的技术方法,主要成果如下:根据用RTK测得的扫描站点和靶标的真实地理坐标与其对应的在激光扫描仪独立坐标系下的相对坐标,使用坐标转换矩阵经旋转和平移将点云数据全部统一到真实地理坐标系中,然后通过配准完成多站地面三维激光扫描点云的融合。
研究了点云数据的数据特征,采用"分之而治"的思想,使用C++语言实现了对大规模点云数据的分块,每个分块包含一定数量的扫描点,可直接读入内存进行处理。
对于每个点云分块,构建kd tree,使用PCL滤波以最近邻点数为阈值滤除点云中的孤立点。
遍历经过去噪的点云分块,统计测区覆盖的空间范围。
在外存储器上建立不同细节层次的八叉树索引结构,对海量点云数据进行有效的组织。
通过与商业软件的对比渲染实验,验证了本文方法的可行性。
最终的实验结果表明,本文提出的方法支持对超过内存容量的三维点云数据进行实时渲染。
该方法有望用于大规模三维激光扫描点云数据的可视化和交互式处理。
基于深度八叉树的三维数据场LOD可视化

基于深度八叉树的三维数据场LOD可视化作者:马晓晨孔小利来源:《计算机应用》2010年第01期摘要:提出了广度八叉树、深度八叉树概念,分析了它们逻辑结构和存储结构,探讨了这两种数据结构在三维数据场可视化中的应用,把深度八叉树应用于三维数据场LOD体绘制算法中。
算法在某三维震波数据场进行了体绘制实验,并与传统方法进行了比较分析。
结果表明,该方法通过逐层简化细节来减少场景的复杂性,提高了渲染效率,将全局和局部体绘制相结合,既提高了绘制速度,又实现了精细观察。
关键词:广度八叉树;深度八叉树;细节层次;体绘制;三维数据场中图分类号: TP391文献标志码:A3D data set LOD visualization based on depthocttree1. School of Mechanical Engineering, Tianjin University, Tianjin 300072, Chi2. Department of Computer and Information Engineering, Chengde Petroleum College, Chengde Hebei 067000, China)Abstract:This paper put forward the concepts of breadthocttree and depthocttree. It analyzed their logic structures and storage structures, which were applied in 3D data set visualization. Depthocttree was used in LOD volume rendering algorithm which was tested on a sismic【报错 wave data set. Compared with the traditional method, the new algorithm was much faster. On the contrary, the traditional method cannot be applied in PCs due to the large amount of time and space required. The results indicate that the new method can improve the performance of volume rendering. Especially, combining the whole and part volume rendering method, the speed was higher and more elaborated observation was achieved.Key words: breadthocttree; depthocttree; Level Of Detail (LOD); volume rendering; 3D data set0 引言随着数据采集技术的快速发展,震波CT、工业CT等三维数据越来越精细,其体数据也越来越大,有的数据体达到几吉字节、十几吉字节,甚至几十吉字节,给大规模三维数据体快速可视化技术带来了难题,尤其是基于微机的大规模数据场快速可视化,在传统方式下几乎难以实现,因此对数据进行预处理是实现快速可视化的前提。
基于八叉树的点云数据的组织与可视化

基于八叉树的点云数据的组织与可视化张会霞【摘要】三维激光扫描获取了大量的点云数据,数据的组织直接影响点云数据的操作速度.采用数据库管理点云数据,对点云数据采用八叉树数据模型进行组织,建立空间索引,对点云数据进行分块提取,实现点云数据的检索以及可视化.%The three dimensional laser scanning gains the massive point cloud data,and the data organization immediate influence point cloud data operating speed. By using the database administrated point cloud data,using Octree data model to carry on the organization of the cloud data,establishing the spatial index,the point cloud data are carried on the block extraction,and realize the cloud data retrieval as well as the visualization.【期刊名称】《太原师范学院学报(自然科学版)》【年(卷),期】2011(010)003【总页数】5页(P128-132)【关键词】八叉树;点云数据;组织;可视化【作者】张会霞【作者单位】太原师范学院城市与旅游学院,山西太原030012【正文语种】中文【中图分类】TP39三维激光扫描技术(3D Laser Scanning Technology)是一种先进的全自动高精度立体扫描技术.它是一项新兴的获取空间数据的技术,同传统的测量手段相比,三维激光扫描测量技术可以连续、自动、快速地采集大量的目标物表面数据,即点云数据,并且拥有许多独特的优势[1].由于点云数据量大,把所有的点一次性的调入内存,系统运行缓慢,故需要进行合理的数据组织,建立索引.三维激光扫描获取的数据为三维目标物点云数据,由于目标物多为不规则形状,对于体状目标物数据的管理,八叉树数据模型具有独到的优势,故采用八叉树数据模型进行组织.三维激光扫描获取大量的点云数据,对点云数据采用八叉树模型进行组织,通过对点云数据层层分割,最后叶节点存储的数据量大大减少,可以加快检索速度.八叉树是一种非常直观的数据结构,具有树的深度小,遍历速度快的特点[2].八叉树分为规则八叉树和线性八叉树.规则八叉树是指直接通过八叉树结构来描述空间信息,即显性地描述节点及通过指针来表达父子关系.八叉树由中间节点组成,叶子节点保存在中间节点的子节点中.八叉树节点的数据结构要存储8个子节点的指针、父节点的指针,对于非叶子节点,还要存储下一个子节点的指针,以及该节点的属性数据,内存消耗大.线性八叉树是为了克服规则八叉树编码的不足而形成的一种高效的编码方法.这种方法只存储叶节点,包括叶节点的位置、大小、属性值.叶节点的编码称为地址码,常用的地址码是Morton码,它隐含了叶节点的位置和大小信息.比如空间目标的大小为2n×2n×2n,分辨率为1,那么任意叶节点的Morton码是一个n位数的编码[3],可以写成:八叉树的结构示意图如图1所示:点云数据由于数据量大,且都分布在目标物的外表面,在八叉树中每个节点对应一个数据块.本文对点云数据分割3次,分为4级,目的是为了分块检索数据.八叉树模型是一种中间结构,它不能直接由原始采样数据生成,只能由其他模型转换得到[4].本节由三维阵列生成八叉树模型,由于三维阵列表示的数据量大,一般情况下只作为过渡表示,把点云数据先转换成三维阵列表示,再转换成八叉树模型.对于2n×2n×2n 的三维阵列表示的目标,若某一单元的三维坐标为(I,J,K)(I,J,K=0,1,2,...,2n-1),将三维坐标转换成二进制表示有如下形式[3]:把点云数据采用八叉树模型进行分割,分割三次就产生23×23×23个三维阵列格网.确定每个点所属的三维阵列格网,也就是把点云数据归属于不同的格网中,即八叉树叶节点中.八叉树的地址码采用八进制的Morton码进行编码,通过计算每个格网的Morton码,按Morton码的大小进行排序.可根据Morton码进行分块检索.Morton码的生成算法有两种:一种是比特运算法,另一种是求余数法.比特运算法是按位操作,十进制的行号在计算机内部采用二进制的形式表示,把X、Y、Z 方向的行列号用二进制的形式II、JJ、KK表示,通过取出KK、JJ、II的二进制中的各位交叉结合,就可得到每个单元的Morton码.按位运算主要利用C语言按位操作的“或”运算,由于本文是采用C#语言进行开发,故采用第二种求Morton 码的方法求余数法进行计算.求余数法是把十进制的行列号通过求余数转换为二进制的行列号,再通过公式求出Morton码.每个点的Morton码算法如下:1)求点云数据X,Y,Z方向的最大最小点值:2)求出点云数据的外包络六面体的长L、宽W、高H:3)求出三维阵列中每个单元格的大小△X,△Y,△Z:4)求出每一个点在三维阵列中的十进制行列号l,m,k:5)将每一单元格十进制的行列号转换为二进制表示:十进制的行列号l,m,k通过求余运算,转换成二进制的行列号Ib,Jb,Kb. 6)根据二进制的行列号,计算每一点的Morton码的值.八叉树的构建在内存中进行,由于系统内存的限制,把内存结构映射到外存数据库中,并把一些信息写入外存数据库中.在数据量大时,可直接在外存数据库中进行检索,避免把所有的数据一次性的装入系统,使得系统运行缓慢.点的数据结构用C语言表示如下:struct Point数据库中点表字段设计,如表1.所对应的八叉树表字段设计,如表2.表2中Point1为叶节点的最小坐标点,Point2为叶节点的最大坐标点.code为叶节点的Morton码.采用八叉树模型组织点云数据,可以达到树的深度小,检索速度快的效果.以下代码是点云数据的八叉树模型生成算法代码,求出每个点所归属的叶节点,并把它保存在数据库中,用数据库管理点云数据,可视化时,根据需要提取出数据,加快系统运行效率.本文采用SQL Server2008管理点云数据,采用C#语言开发Map Objects组件,在Map Objects组件下进行可视化.八叉树分为四层,分割3次算法如下:1)从数据库中读出点云数据;2)求出点云数据的外包络六面体;3)求出每个点所在的十进制行列号;4)把每个十进制的行列号转换成二进制行列号;5)求出点的八叉树Morton码;6)写入数据库.关键代码如下:根据组织好的点云数据进行检索,可根据Morton码提取出点云数据,也可根据区域范围,通过八叉树索引表,确定包括那些Morton码,然后进行查询.图2是采用三维激光扫描仪获取的点云数据,本文对建筑物点云数据以文本的格式导入到SQL Server 2008数据库软件中采用八叉树数据模型进行重新组织,图3是根据Morton码提取出的点云数据,不考虑反射率,记录数71 960条,用时1 s,并在MO组件下进行可视化.实验证明,采用八叉树模型组织后的点云数据检索速度较快,适于点云数据的分块提取.本文采用八叉树组织点云数据,可实现点云数据的分块快速检索,采用MO组件进行可视化,可实现点云数据的可视化.通过编程验证,该算法效率较高.【相关文献】[1]李必军,方志祥,任娟.从激光扫描数据中进行建筑物特征提取研究[J].武汉大学(信息科学版),2003,28(1):65-70[2]惠文华,郭新成.三维 GIS中的八叉树空间索引研究[J].测绘通报,2003,1:25-27 [3]路明月,何永健.三维海量点云数据的组织与索引方法[J].地球信息科学,2008,10(2):190-194[4]李清泉,杨必胜,史文中,等.三维空间数据的实时获取、建模与可视化[M].武汉:武汉大学出版社,2003。
三维点云可视化系统毕业设计

三维点云可视化系统毕业设计一、引言在当今数字化时代,三维点云数据的获取和处理在许多领域得到广泛应用,如机器人导航、地质勘探、虚拟现实等。
为了更好地理解和利用三维点云数据,开发一个高效的三维点云可视化系统具有重要意义。
本文将介绍一个基于毕业设计的三维点云可视化系统,旨在提供一个直观、易用且功能丰富的工具。
二、系统设计2.1 系统架构本系统采用C++编程语言开发,并利用OpenGL库进行图形渲染。
其架构由数据输入模块、数据处理模块和可视化模块组成。
2.2 数据输入模块为了实现对三维点云数据的输入,本系统支持多种数据格式,如PLY格式、OBJ格式等。
用户可以通过文件导入功能将所需的点云数据加载到系统中。
2.3 数据处理模块为了提高对大规模点云数据的处理效率,本系统采用了基于八叉树(Octree)的空间划分算法。
该算法可以将大规模点云数据分割成一系列子空间,并对每个子空间进行递归划分。
通过八叉树算法,用户可以方便地进行点云数据的搜索、滤波、分割等操作。
2.4 可视化模块本系统的可视化模块主要包括了点云数据的显示、交互操作和渲染效果设置。
通过OpenGL库提供的函数,系统可以将点云数据以三维模型的形式显示在屏幕上。
用户可以通过鼠标和键盘进行交互操作,如旋转、平移、缩放等。
此外,用户还可以设置渲染效果,如光照、颜色映射等。
三、功能实现3.1 数据加载与显示本系统支持多种数据格式的加载,并将加载后的数据以点云形式显示在屏幕上。
用户可以通过文件导入功能选择所需的文件,并在界面上查看加载后的点云模型。
3.2 数据处理与分析本系统支持对加载后的点云数据进行多种处理和分析操作。
用户可以选择不同算法对点云进行滤波处理,去除噪声和异常值。
此外,用户还可以根据需求对点云进行分割操作,提取感兴趣区域。
3.3 交互操作与视角控制本系统提供了丰富而灵活的交互操作方式,包括鼠标控制和键盘控制。
用户可以通过鼠标左键进行旋转操作,右键进行平移操作,滚轮进行缩放操作。
采用八叉树体素生长的点云平面提取

采用八叉树体素生长的点云平面提取李明磊;李广云;王力;宗文鹏【期刊名称】《光学精密工程》【年(卷),期】2018(026)001【摘要】提出了一种高效的基于八叉树体素自适应生成与体素分层次生长的平面提取方法,其主要思路为采用体素信息统计的方式进行相关阈值参数的自动选定,以及基于体素的生长替代基于点的生长进行平面提取.首先,对点云进行八叉树初始剖分并计算其几何属性信息(包括法矢、特征值以及维度特征描述符等);然后,通过统计得到细分终止条件,并对初始八叉树进行进一步自适应剖分,得到一系列非均匀八叉树体素;最后,在体素层面进行区域生长阈值的统计与体素的分层次生长,进行点云平面的精细提取.利用4种不同类型的点云数据对本文算法进行了测试.实验结果显示:精度和召回率可以达到95% 以上,表明本文算法对数据质量不敏感,可以自动适应不同平台采集的、不同分布密度和不同数据质量的激光点云,并且高效地得到精细的点云平面提取结果.【总页数】12页(P172-183)【作者】李明磊;李广云;王力;宗文鹏【作者单位】信息工程大学导航与空天目标工程学院,河南郑州450001;信息工程大学导航与空天目标工程学院,河南郑州450001;信息工程大学导航与空天目标工程学院,河南郑州450001;信息工程大学导航与空天目标工程学院,河南郑州450001【正文语种】中文【中图分类】P237【相关文献】1.采用局部凸性和八叉树的点云分割算法 [J], 傅欢;梁力;王飞;赵季中2.基于线性八叉树的点云简化与特征提取研究 [J], 宋杨3.基于线性八叉树的点云简化与特征提取研究 [J], 宋杨4.基于逐条线区域生长的点云平面提取 [J], 浮丹丹;周绍光;田慧5.采用八叉树和OSG分页结点的海量点云三维可视化 [J], 李彩林; 陈文贺; 胡善明; 袁斌因版权原因,仅展示原文概要,查看原文内容请购买。
基于八叉树模型的三维点云数据预处理研究.kdh

2008年第12期福建电脑基于八叉树模型的三维点云数据预处理研究罗才华1,周燕2(1.罗定职业技术学院广东罗定527200 2.广东北电通信设备有限公司广东广州510630)【摘要】:三维点云数据密度大,包含有大量的冗余数据,并不适合直接用于后续曲面重构。
文中重点讨论了基于八叉树模型的点云数据预处理的方法。
实例表明,该方法对点云数据处理的灵活性和适应性都较好,能够满足曲线和曲面重构的要求。
【关键词】:八叉树;点云;曲面重构0、引言随着电子和激光技术的迅速发展,三维激光扫描仪器精度越来越高,三维重建领域中的数据测量越来越倾向于采用三维激光扫描仪。
三维激光扫描仪的特点是速度快、精度高、操作灵活。
但是其测量数据是在三维空间中、无规则的、随机分布的,其特点是数据量庞大、噪声点多、数据密集、数据点散乱分布,被称为"点云"数据。
因此,点云数据并不适合直接用于后续曲面重构,有必要对点云数据进行一定的处理。
点云的预处理就是对这些海量数据进行有序化、简化、法向估计、去噪等等,为后续的建模做必要的准备。
1、八叉树模型现代的数据测量技术,已经使得所扫描数据量达到了几兆、几十兆甚至上百兆,要达到对数据的高效利用,首先必须解决的一个问题就是如何有效地处理庞大的三维点云数据。
建立点云数据之间的几何拓扑关系,是提高点云的几何建模速度的关键。
八叉树(Octree)是在上个世纪七十年代后期至八十年代早期出现的。
Samet深刻地研究了八叉树的特征。
八叉树结构是由四叉树(Quadree)结构推广到三维空间而形成的一种3D栅格数据结构。
其基本思想是将3D空间区域划分成三维栅格,每一个小立方体有一个或多个属性数据[1,2,3]。
八叉树的树形结构在空间分解上具有很强的优势。
2、八叉树分割八叉树细分过程可以用一棵度为8的树来表示。
将指定的三维空间区域分成8个卦限(Octants),且在树上的每个非叶子节点处存储8个数据元素(体素)。
点云八叉树算法

点云八叉树算法点云八叉树算法是一种用于快速查询和管理点云数据的高效算法。
该算法将点云数据分解为一组八叉树节点,每个节点代表一个立方体区域,并存储在该区域内的点云数据。
本文将介绍点云八叉树算法的原理、应用以及如何实现该算法。
一、原理点云八叉树算法基于八叉树的数据结构,即将三维空间分割为8个小立方体。
每个子立方体称为八叉树节点。
八叉树节点的大小可以根据实际情况进行调整,一般为标准立方体。
将点云数据存储在八叉树节点中,可以快速地访问和查询这些点。
可以通过八叉树的层数来调整点云的精度。
如果层数太低,则会导致点的丢失,如果层数太高,则会导致存储和计算成本的增加。
二、应用点云八叉树算法具有广泛的应用,以下为具体介绍:1、点云分割将点云数据分割为多个八叉树节点可加快数据处理速度,使得处理过程更加高效。
通过分割,可以将点云数据和处理任务分解为多个独立的部分,同时可以对单个部分进行多线程处理,提高处理速度和效率。
2、点云可视化通过创建八叉树节点,可以将点云数据分解为多个小立方体,使得点云的展示更加真实、直观。
通过八叉树算法,可以使得点云的渲染速度更快,同时也可以修改八叉树节点的属性,调整点云的显示效果。
3、点云采集采用点云八叉树算法可以大大降低点云采集的时间成本,同时增加数据采集效率。
通过在采集过程中应用八叉树算法,可以将采集到的点云数据进行分割和管理,提高数据的质量和精度。
三、实现点云八叉树算法的实现主要分为以下几个步骤:1、点云预处理:需要将点云数据转换为八叉树节点,将每个节点与数据点相关联。
可以采用VoxelGrid算法将原始点云数据降采样,简化点云数据的计算、存储和管理。
2、八叉树的建立:通过逐个点向根节点逐层添加新节点的方式建立八叉树,同时可以使用逐级切割层级方法进行空间分割。
3、节点遍历:可以使用递归遍历方法,在当前节点访问结束后递归访问其子节点,遍历整个八叉树,加快数据访问和查询速度。
结论本文对点云八叉树算法的原理、应用以及实现方法进行了详细介绍。
采用八叉树和OSG分页结点的海量点云三维可视化

基金项目:国家自然科学基金(No.41601496,No.41701525);山东省重点研发计划(No.2018GGX106002);山东省高等学校科技计 划(No.J15LN32);山东理工大学青年教师发展支持计划(No.4072-114016)。
234 2019,55(21)
Computer Engineering and Applications 计算机工程与应用
采用八叉树和,胡善明,袁 斌 山东理工大学 建筑工程学院,山东 淄博 255000
摘 要:针对现有海量点云可视化方法存在索引构建时间长、内存占用大等问题,研究一种八叉树索引结合 OSG 分 页结点的快速可视化方法 ,可在占用较小内存的基础上快速建立点云索引并实时调度。采用八叉树索引结构对海 量点云进行数据组织,建立各层级的八叉树结点并以文件映射的方式分块保存,对结点文件重组织转换为支持 OSG 渲染引擎的多分辨率点云数据。采用基于 OSG 分页结点的实时调度技术,对海量点云进行高质量可视化。与目前 两 款 主 流 的 点 云 数 据 处 理 商 业 软 件 进 行 实 验 对 比 分 析 ,结 果 表 明 所 提 方 法 具 有 索 引 建 立 速 度 快 、内 存 占 用 小 等 优 点,同时可视化交互更加流畅,适用于各种配置计算机下海量点云数据的调度管理与实时可视化。 关键词:八叉树 ;均匀采样 ;OSG 分页结点 ;海量点云 ;快速可视化 文献标志码:A 中图分类号:TP391 doi:10.3778/j.issn.1002-8331.1807-0087
Abstract:Aiming at technical problems of long index construction time and large memory usage in existing massive point cloud visualization method, a fast visualization method based on octree and OSG paging nodes is proposed, which is rapid on the establishment of point cloud index and real-time in scheduling based on small memory usage. Using octree data index structure for data organization of point cloud, this paper establishes the level of the octree node file and saves block in file mapping way. The file node is reorganized into multi-resolution point cloud to support the OSG rendering engine. Using real-time scheduling technology based on OSG paging nodes, mass cloud points are highly quality visualized. Compared with the two mainstream point cloud processing commercial software, the results show that this method has the advantages of fast index establishment and small memory occupation, and interactive visualization is more smooth, which is suitable for mass data scheduling management and real-time visualization of various computer configuration. Key words:octree; uniform sampling; OSG paging node; massive point cloud; fast visualization
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
采用八叉树和OSG分页结点的海量点云三维可视化李彩林; 陈文贺; 胡善明; 袁斌【期刊名称】《《计算机工程与应用》》【年(卷),期】2019(055)021【总页数】6页(P233-238)【关键词】八叉树; 均匀采样; OSG分页结点; 海量点云; 快速可视化【作者】李彩林; 陈文贺; 胡善明; 袁斌【作者单位】山东理工大学建筑工程学院山东淄博 255000【正文语种】中文【中图分类】TP3911 引言海量三维点云的可视化技术对于理解和传达空间信息以及分析和模拟结果至关重要[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)和图5(c)对比可得出本文提出的均匀采样方法很好地解决了随机采样方法出现的结果点云数据出现的不均匀和空洞问题,且较好地保留了物体的轮廓。
图5 老鹰雕像点云及其采样方法比较在采样效率方面,文献[15-17]需先对点云构建索引,后根据索引以叶子结点内的点云为起点向上逐层随机采样,即该方式需要两次遍历索引,而本文方法则直接在构建八叉树索引的过程中以根结点为起点,采用由上向下的顺序对点云进行逐层均匀采样,仅需对索引的遍历一次提升了采样效率。
2.2 点云分块处理、逐结点保存在点云八叉树构建过程中,若直接将点云特别是海量点云一次性载入内存,会导致内存占用过高甚至超出内存容量以至于无法处理。
为此,本文研究一种点云分块处理、逐结点保存的文件映射机制有效减少了内存消耗。
(1)读入原始点云同时进行八叉树的构建,分配点云到八叉树各层结点,当处理到1 000万点云时,以此为分块阈值将采样点云逐结点以文件映射的方式写入磁盘临时文件夹temp,以结点名称作为文件名,如第一层八叉树结点,以r为文件名,第二层以r0,r1,……,第三层以r01,r02,……,依次类推。
(2)当结果点云写入磁盘后释放内存,继续读入原始点云,到1 000万时,再次输出保存,如果结果点云属于之前建立的某层八叉树结点文件,则直接将其保存至该结点文件,如果不属于之前建立的所有结点文件,则新建结点文件保存。
(3)当所有点云处理完毕,将temp文件夹中的八叉树结点文件统一转化为OSG 支持的多分辨率点云文件。
3 基于OSG分页结点的实时动态调度OpenSceneGraph(简称OSG)是一个基于工程图形标准OpenGL的高层次开发API接口,具备商业级别渲染能力的实时三维渲染引擎,在点云三维可视化中应用广泛。
本文利用OSG Paged LOD(Paged Level of Detail,分页细节层次结点,为描述方便,下文通称为分页结点)技术对基于OSG的多分辨率点云文件进行动态调度,取得较好的点云可视化效果。
3.1 支持OSG分页结点技术的多分辨率点云文件结构设计分页结点的基本思想是对一个物体根据不同场景的需要采用不同的精细程度进行描述,其主要有三种类型:离散分页结点、连续分页结点和层次分页结点[18]。
基于连续分页结点配合使用层次分页结点的方法是OSG点云可视化的基本方法。
在构建八叉树索引后,在输出的各层八叉树结点文件中,每个文件的结构是相同的,即每一行内容都对应每个点云的三维坐标和对应属性信息。
这种结构是不能直接提供给OSG渲染引擎使用的,因此需要转为适用于OSG支持的、格式为ive的多分辨率点云文件。
本文对八叉树结点文件结构进行重组织,八叉树结点文件数据结构形式和对应转化的基于OSG分页结点设计的多分辨率点云文件数据结构形式如图6所示。
图6 多分辨率点云文件数据结构重组织该数据结构以分页结点为主体分层组成,其组(Group)结点为初始结点;组结点和每个分页结点包含一个Geode结点用于存储几何(Geometry)结点;几何结点又分为两部分,原始集(PrimitiveSet)对象和顶点数组(VertexArray)对象,前者用于存储点云属性信息(如数量、颜色),后者用于存储实际的点云坐标数据。
3.2 数据动态调度流程在OSG中,采用OSGDB::DatabasePager类来管理场景结点的动态调度,可满足海量点云数据动态调度的需要。
在不同的视域下,分页结点动态读取不同LOD的结点模型,实现分页LOD显示。
OSG中数据的动态调度过程可以分解为4个环节:删除过期场景数据、获取新的数据加载请求、编译加载的数据、将加载数据合并至场景图形。
数据动态调度流程如图7所示,具体内容请参考文献[19]。
图7 数据动态调度流程图4 实验与分析本文利用C++结合OSG实现了海量点云数据的索引快速建立与动态调度,并实现了场景绘制。
实验数据为山东某地形1.8亿激光扫描数据点。
实验环境为Intel Xeon(至强)E3-1220 v5(3.00 GHz)处理器、8 GB内存。
为验证算法性能,将本文方法与当前比较流行的点云数据处理软件LiDAR360和开源软件CloudCompare在索引建立和数据浏览两方面进行对比分析。