海量变电站点云实时渲染方法

文章编号:2095-6835(2021)07-0001-05
海量变电站点云实时渲染方法*
杨雪飞1,杨绍远1,向东伟2,杨成城2
(1.中国南方电网超高压输电公司柳州局,广西柳州545006;2.武汉汇卓航科技有限公司,湖北武汉430070)
摘要:为解决海量变电站点云数据实时渲染问题,利用OSG(Open Scene Graph)三维引擎的PagedLOD技术,通过自定义插件PPCD(Power Point Cloud Data)对点云数据动态调度管理,提高三维点云的组织及渲染效率。在点云数据组织阶段,利用四叉树数据结构对原始点云分块分级建立LOD(Level Of Details)索引,结合文件内存映射方法对LOD中点云索引进行存储;在点云数据渲染过程中,通过PPCD插件实时解析索引文件,根据屏幕范围和视距变化动态加载及释放LOD点云,并结合GLSL(OpenGL Shading Language)着语言对点云进行着、剪裁处理,实现海量点云的可视化。实验结果表明,海量变电站点云实时渲染方法方法在海量变电站数据管理、调度和可视化等方面优于传统的点云可视化平台,能够满足电力场景应用的时效性需求。
关键词:海量点云;OSG;文件内存映射;四叉树
中图分类号:TM73文献标志码:A DOI:10.ki.kjycx.2021.07.001
1引言
随着电力行业的快速发展,电网规模急速扩大,传统的变电站安全运维手段需要消耗大量财力、人力去采集各金具实时温度、避雷针偏移等数据,但往往精度很低,增加了变电站事故防范和变电站检修的难度[1]。采用无人机机载激光扫描系统、可见光相机后处理三维重建等手段对变电站进行三维测量,帮助电网相关部门在最短时间内采集到变电站的三维信息,为变电站危险点智能检测、运行情况评估等提供决策依据[2]。伴随着变电站点云数据后处理技术在电力巡线中得到了广泛的应用,而如何在有限的计算机内存容量下对海量点云数据进行高效组织管理并实时渲染显示等处理已经成为阻碍变电站维护应用进一步发展的突出问题。
近年来,已经有许多国内外学者对LiDAR点云三维可视化进行深入研究,形成了各具特的方法案例。闫利等人[3]提出了车载LiDAR海量点云数据管理与可视化方法,基于八叉树结构构建LOD索引,采用多线程动态调度技术实现基于视点的海量点云渲染与漫游。王磊等人[4]提出了基于改进的八叉树索引与分层渲染的海量激光点云可视化研究,采用三维点云分块,建立八叉树索引数据文件,根据屏幕显示范围与视角变化实时读取释放点云索引数据。石祖旭等人[5]提出了基于树形结构网格矢量量化的点云渲染算法,采用八叉树构建索引,支持在线实时压缩渲染。吴建军等人[6]提出了电力巡线直升
机激光扫描数据的高效组织与显示,通过并行化阈值分割构建八叉树结构,采用视点变化与分页数据库的内外存调度方法。李冻[7]提出了基于OSG的LAS文件三维渲染方法,采用四叉树存储结构和内外存调度的方法,生成多个子节点的Las文件,同时对多个文件读写消耗大量时间。以上相关研究的激光点云数据场景主要是城市激光扫描点云数据,而变电站点云数据相比城镇激光扫描点云数据,存在场景中地物复杂,平面X、Y轴方向上跨度大,竖直平面Z轴方向点云分布稀少且不均匀等问题,针对海量变电站点云数据进行组织管理以及实时渲染显示需要考虑这些特点。虽然吴建军等人[6]的研究对象为电力场景点云数据,但是其采用八叉树数据结构来对点云数据进行组织与调度,为保证八叉树数据结构的动态性以及平衡性,对电力场景点云数据进行额外预处理,延长了点云分块时间。
针对以上情况,本文在前人研究的基础上,提出一种适用于海量变电站点云数据的快速可视化和实时渲染的方法。采用四叉树构建索引,结合OSG[8]三维引擎的PagedLOD技术[9]根据不同视域分页显示,并结合GLSL着语言对点云实时渲染。本文主要通过以下几点对其说明:①快速构建四叉树结构的LOD[10]索引,利用文件内存映射解决海量数据存储问题,简化分块算法、缩短构建索引时间;②自定义PPCD插件,基于OSG的PagedLOD技术,设置不同视域显示相应的细节层次,采用多线程实现实时调度和加载;
③利用GLSL着语言[11]实现点云实时渲染、裁剪等处理。2基于四叉树结构的LOD索引快速构建
目前,索引树主要包括K-D树[12]、四叉树[13-15]、八叉树[16]、R树[17]等,其中,R树具有较强的调节性和灵活性,相关学者提出了一系列的改进方法。其中如BECKMANN
——————————————————————————
*[基金项目]南方电网超高压输电公司科技项目(编号:CGYKJXM20180206)
·1·
·2·
通过对R 树算法研究改进提出R*树[18],R*树的优越性主要体现在查方式和节点操作的多样性,但是R*树相对R 树构建索引所需要的时间过长,不适合海量点云数据处理。K-D 树结构为一种二叉树,特别之处是每一层都存在选择子节点,通过每一层的节点遍历寻其子节点并显示,但是在可视化分页显示中对节点剔除、显示的计算会显得十分复杂,不利于海量点云数据的实时渲染。与结构相对简单的四叉树和八叉树相比,R 树节点之间存在交集,容易导致数据存储冗余,过多消耗计算机性能。相对于城市建筑物的点云数据,变电站点云数据分布不均匀,直接采用八叉树数据结构会导致叶节点不平衡,构建效率低。而利用四叉树对变电站点云数据进行划分,仅需考虑平面内X 、Y 方向的坐标而直接忽略Z 方向坐标,处理简单且四叉树构建效率较高。经上述分析,本文采用四叉树数据结构来对变电站点云数据创建索引。
四叉树索引是将地理空间递归划分为不同层次树的结构。将已知范围的空间等分成四个相等的子空间,如此递归下去,直到树的层次达到一定深度后停止分割,如图1所示,
四叉树的查询子节点效率较高,能更好实现点的快速查询。
图1四叉树结构的索引树结构
由于海量点云数据的数量以千万甚至亿级作为计量单位,若是分块算法显得冗余,则会导致构建索引时间过长,消耗内存过大。本文解析的点云数据文件采用LAS 、LAZ 格式存储,其中包含点云坐标值、颜信息、分类信息、强度信息等相关信息。由于原本存储的点云属性丰富,导致构建索引树时会占用大量内存,需重新定义点云数据结构,构建的数据结构如图2所示,其中包含简单的三维点位置信息pos_x 、pos_y 、pos_z ,颜信息rgb_r 、rgb_g 、rgb_b ,quadrant
表示四叉树最底层节点编号。
图2自定义单个点数据结构
点云数据如何快速按照四叉树索引结构分块是基于四叉树结构的LOD 索引构建的关键点。若是分块算法在运算
中烦琐、冗余,则会导致处理速度大大降低。本文本着将分块算法极简化,解析LAS 、LAZ 文件过程中便将点云按照四叉树结构分块完成。
算法输入:点云集合,四叉树最大深度(树高)为H 。算法输出:点云按照grid _id 从小到大排序好。具体步骤如下:①读取LAS 、LAZ 文件的头文件获取外围包围盒大小(X long ,Y long )X 轴方向上最小值x min ,Y 轴方向上最小值y min ;②根据N =4
(n-1)
计算出网格数,得到X
轴、Y 轴方向上的网格数n ,根据n
Y y n
X x long long long long =
=
,计算单个网格长度;③依次读取点云集合,计算单个点在X
轴、Y 轴上所在网格值,long min
long min __y y y y grid x x x x grid -=-=,,
并根据grid _id =(grid _x -1)×n +grid _y 计算每个点的grid _id ;④最后按照每个点记录的grid _id 值从小到大使用快速排序法排序;⑤退出算法。
根据提前构建的四叉树,按照grid _id 值有序放在对应的节点位置上。通过对四叉树由下到上的遍历,并写入LOD 索引文件中。
父节点按照子节点数据进行点云抽稀如图3所示,初始设置索引树为4层。第四层中5、7、6、6分别代表此节点中所含有的将原始点云根据顺序编码值分块之后的点云数量。将5、7、6、6点云集构成一个集合,根据抽稀比例1∶4,得到父节点包含的点云数为8
个,以此类推遍历完四叉树。
图3父节点按照子节点数据进行点云抽稀
本文重点研究的是海量变电站点云的显示及渲染,其数据规模通常远大于千万数量级,若仅仅依靠计算机内存来存储构建索引树过程中生成的临时数据,会面临因计算机内存不足而导致生成索引失败的问题。若是采用邱炎等人[19]提出的基于外存八叉树的三维激光点云实时渲染技术,将超过计算机内存容量的点云数据通过外部存储器构建索引结构,则导致计算机一直对多个文件进行读写,严重影响构建索引树的效率。由于上述原因,本文采用的文件内存映射[20]方法,将需存储在物理内存的数据
映射到特定地址范围,然后通过指针访问内存映射文件里的内容。一旦需读取的LAS 文件被映射,就能访问它,就像整个LAS 数据已经加载内存一样,从而不需要对文件执行I/O 操作,这对LAS 文件解析并
存储效率较高,提高构建索引树生成LOD 索引文件速率。3基于PPCD 插件的点云动态管理
基于OSG 和OpenGL 技术对点云可视化进行研究,采
·3·
用C++平台的程序接口(Application Pro-gramming Interface ,API ),能够更加方便、快速地创建高性能、跨平台的交互式图形程序[21]。OSG 自带插件(osgdb_las )支持对LAS 点云文件解析并显示,但是osgdb_las 插件将点云数据一次性读取并放入物理内存,若是点云数据过大,会导致点云交互卡顿甚是死机,因此osgdb_las 插件不能满足大规模点云渲染的需求。
PPCD 插件需要满足OSG 插件工作机制,如图4所示,尝试使用osgDB 读取或写入文件时,根据文件的后缀名查OSG 中已注册的插件,若是存在成功执行I/O 操作,返回相应的数据;若是不存在则不能成功执行I/O 操作,返回
失败信息。
图4OSG 插件机制图
PPCD 插件根据四叉树模型,由上往下遍历节点信息并显示,在OSG 的场景树管理结构中,专门提供了场景结点osg::PagedLOD 技术来展示不同的细节层次模型。其中,osg::PagedLOD 结点作为父结点,每个子节点作为单个细节层次展现,通过设置不同的视域,在不同的视域内显示相应的细节层
次,加载过程中有单独的线程负责实时调度和加载,以此决定对物体渲染的资源分配与资源删除,降低非重要物体模型的面数和细节度展示,获得高效率的渲染运算。OsgDB::DatabasePager 负责执行场景动态调度工作,通过DatabasePager::registerPagedLOD (node )注册PagedLOD 节点,DatabasePager 实时遍历场景中节点设置视域范围,计算节点与窗口视域距离,将长期处于不在设置视域范围内的节点认为不会立即显现的场景元素,通过数据线程删除。利用osg::Group 、osg::Node 、osg::Geometry 、osgDB 等相关类实现显示。其核心代码如下。
osg::Geode*geode =new osg::Geode;
osg::Geometry*geometry =new osg::Geometry;osg::Vec3Array*vertices =new osg::Vec3Array;osg::Vec4ubArray*colours =new osg::Vec4ubArray;for (int i =0;i <points.size();i++){vertices->push_back(osg::Vec3(points[i].x,points[i].y,
points[i].z));
colours->push_back(osg::Vec4ub(points[i].r,points[i].g,points[i].b,a));
}
geode->addDrawable(geometry);
osg::PagedLOD*plod =new osg::PagedLOD();plod->addChild(geode);plod->setRange(0,0,radius);
plod->setCenter(plod->getBound().center());
其中,points 为四叉树节点点云集合,(0,radius)为视域范围。
4基于GLSL 的点云着及剪裁
三维渲染引擎为了实现三维场景图像的结构管理和绘制,包含至少两个层次:构建层和交互层,前者提供三维空间中设计和完成需要的工具集,或者从外部加载复杂模型的数据接口;后者提供对三维空间及所含模型的装配、渲染、优化和控制功能。通过场景视图、图形设备、渲染器、摄像机等联合控制场景节点,详细关系如图5
所示。
图5窗口、摄像机、渲染器、场景图等之间的关系
基于PPCD 插件的读取点云显示完成后,为了最大程度地保证点云数据实时渲染、交互流畅性。本文点云数据渲染采用GLSL 着语言,其中点云实时渲染操作包括:点云裁剪、分类渲染、高程渲染。点云裁剪应用视锥体裁剪技术,设置显示范围区域,使用深度优先的递归遍历对四叉树节点进行遍历,判断节点是否在视锥体范围内,如果在视锥体内则计算节点里的点云数据是否在视锥体范围内。分类渲染主要是根据读取点云属性类别信息,根据不同的类别信息设置不同RGB 值。高程渲染主要是根据读取点云Z 轴方向上最大值与最小值,依次求取各点的高程值在最大值与最小值所在区间的比率,根据比率修改RGB 值,达到自上而下颜渐变过程,具体思路流程如图6所示,最终加入到渲染队列中完成渲染,渲染效果如图7所示。5实验与分析
为了验证本文海量点云组织管理方法能够高效支持点云实时渲染、快速处理。基于Visual Studio2017采用C++编程实现索引树构建、文件内存映射、osg::PagedLOD 节点动态加载、点云实时渲染。主要硬件配置:CPU 为Inter CoreI7、32GB 内存、显卡为Nvidia GeForce GTX1080。
本文采用广西壮族自治区柳州市某变电站的点云模型数据,总文件大小为17.1GB ,通过裁剪方式将LAS 文件分成665MB 、1.2GB 、3.21GB 、7.3GB 等不同大小LAS 文件。将LAS 文件导入市面上流
行的点云显示软件,如:
·4·
CloudCompare 、Lidar360、Displaz 。通过对几种软件的海量点云显示所需要进行比较,结果如表1
所示。
图6高程渲染-计算单个点RGB
值思路流程
(a )裁剪后的高程渲染点云
(b
)分类渲染
(c )高程渲染
图7高程、分类渲染,裁剪效果图
由表1分析得到当LAS 文件越来越大时,每个主流软件构建索引树并显示所需要的时间呈直线上升。其中表1中Lidar360、PPCD 插件显示点云速度所需要时间是因为第一次打开该LAS 文件,需要构建索引书生成LOD 索引文件,之后打开该LAS 文件所需要显示时间几乎可以忽略不计。
基于OSG 三维引擎搭建的可视化平台PowerModel ,将17.1G 的LAS 文件生成相应的LOD 索引文件,导入可视化平台。由于该文件为激光数据,为了展示更好的效果,初始
设置渲染为高程渲染,渲染效果如图8所示。
1
各种三维平台显示点云速度
点云文件大小显示时间/min
CloudCompare
Lidar360Displaz PPCD 插件0.65GB 0.560.400.430.411.27GB    3.32  2.52  3.65  2.503.21GB    4.71  3.01  4.45  3.017.38GB 8.567.458.687.3217.1GB
30.32
13.12
35.98
12.10
(a )远看点云数据模型时占用内存1.7GB (b )近看点云数据模型时占用内存630.2MB
图8点云模型在三维平台显示
PowerModel 程序初始化占用内存130MB ;图8(a )表示在PowerModel 中远看点云数据模型时程序占用内存
1.7GB ;图8(b )表示在PowerModel 中近看点云数据模型时程序占用内存630.2MB 。从上面数据可以看出,当点云
数据细节层次展示时不会加重计算机内存容量负担,反而远看点云数据模型全貌更消耗计算机内存容量。同时PowerModel支持对点云数据的放大缩小、漫游、旋转和全图等操作。
6结束语
为了满足海量变电站点云数据的快速调度与后处理需求,本文提出一种支持海量点云快速构建四叉树结构的LOD 索引的方法,并在该方法上实现了高效的海量变电站点云数据的实时渲染。通过相关实验表明,本文研究技术能够支持大范围海量变电站点云数据的动态调度显示、交互操作等过程,支持对点云的分类、裁剪等相关后处理,具有一定的应用价值。海量点云数据的包围盒大小与四叉树最优深度的关系、海量点云生成LOD索引文件速率是后续研究的重点,这些研究有望进一步提高变电站点云数据分析、处理系统的自动化程度、点云交互流畅性。
参考文献:
[1]YU D M,CHEN F D,GUO X Y,et al.Application of helicopter laser scanning3D imaging technology in
transmission lines[J].Gaodianya jishu/high voltage
engineering,2011,37(3):711-717.
[2]王和平,夏少波,谭弘武,等.电力巡线中机载激光点云数据处理的关键技术[J].地理空间信息,2015(5):59-62.
[3]闫利,胡晓斌,谢洪.车载LiDAR海量点云数据管理与可视化研究[J].武汉大学学报(信息科学版),2017,42(8):1131-1136.
[4]王磊,郭清菊,姜晗.基于改进的八叉树索引与分层渲染的海量激光点云可视化技术[J].软件,2016(3):114-117.
[5]石祖旭,曾安,RICORDEL V,等.基于树型结构网格矢量量化的点云渲染算法[J].计算机应用研究,2019,36(7):2205-2209.
[6]吴建军,李磊,方平凯,等.电力巡线直升机激光扫描数据的高效组织与显示[J].激光技术,2019,43(3):32-37.
[7]李冻.基于OSG的LAS文件三维渲染研究[J].衡阳师范学院学报,2014,35(6):97-100.
[8]VÁZQUEZ C,HUEDO E,MONTERO R S,et al.
Federation of teraGrid,EGEE and OSG infrastructures
through a metascheduler[J].Future generation computer
systems,2010,26(7):979-985.
[9]李雷.基于OGRE的海量三维模型动态调度技术的研究与实现[D].南宁:广西大学,2012.
[10]LATHROP G M,LALOUEL J M.Easy calculations of LOD scores and genetic risks on small computers[J].
American journal of human genetics,1984,36(2):
460-465.
[11]GLVERTEX.Einführung in GLSL-openGL shading language[DB/OL].[2020-02-23].xueshu.baidu.
com/usercenter/paper/show?paperid=f738cc235ab58aea19
fee2e66abcac60&site=xueshu_se&hitarticle=1.
[12]刘宇,熊有伦.基于有界k-d树的最近点搜索算法[J].
华中科技大学学报(自然科学版),2008,36(7):
73-76.
[13]谭兵,徐青,马东洋.用约束四叉树实现地形的实时多分辨率绘制[J].计算机辅助设计与图形学学报,2003,15(3):270-276.
[14]黄先锋,陶闯,江万寿,等.机载激光雷达点云数据的实时渲染[J].武汉大学学报(信息科学版),2005,
30(11):975-978.
[15]支晓栋,林宗坚,苏国中,等.基于改进四叉树的LiDAR 点云数据组织研究[J].计算机工程与应用,2010,46
(9):71-74.
[16]张会霞.基于八叉树的点云数据的组织与可视化[J].
太原师范学院学报(自然科学版),2011(3):128-132.[17]ZHU Q,GONG J,ZHANG Y.An efficient3D R-tree spatial index method for virtual geographic environments
[J].Isprs journal of photogrammetry&remote sensing,2007,62(3):217-224.
[18]BECKMANN N,KRIEGEL H P,SCHNEIDER R.The R*-tree:an efficient and robust access method for points
and rectangles[DB/OL].[2020-02-23].xueshu.
08200k400m604h577757&site=xueshu_se.
[19]邱炎,梁玉斌,崔铁军.基于外存八叉树的三维激光点云实时渲染技术[J].天津师范大学学报(自然科学
版),2017,37(3):58-61.
[20]杨宁学,诸昌钤,聂爱丽.内存映射文件及其在大数据量文件快速存取中的应用[J].计算机应用研究,2004,21(8):187-188.
[21]王锐,钱学雷.OpenSceneGraph三维渲染引擎设计与实践[M].北京:清华大学出版社,2009.————————
作者简介:杨雪飞(1974—),女,学士,高级工程师,主要研究方向为超高压变电设备运行与维护、无人机巡检。杨绍远(1977—),男,硕士,高级工程师,主要研究方向为电网设备运行、智能作业。杨成城(1985—),男,硕士,高级工程师,主要研究方向为图像处理、电力树障分析及应用。
通讯作者:向东伟(1995—),男,学士,工程师,主要研究方向为图像处理、三维渲染、点云数据处理、深度学习。
〔编辑:丁琳〕
·5·

本文发布于:2024-09-20 11:54:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/97063.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   渲染   节点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议