APP下载

基于OpenSceneGraph的校园可视化系统研究与实现

2020-03-15刘子桓

现代计算机 2020年4期
关键词:漫游可视化测量

刘子桓

(四川大学计算机学院,成都 610065)

0 引言

随着信息技术的不断发展,校园信息化水平不断提升,智慧校园建设应运而生。可视化是智慧校园信息化的基础,通过可视化系统既能向师生展示校园风貌,又能方便校方对校园进行管理。因此,研究实现校园可视化系统具有重大意义。

实现校园可视化需要校园的模型数据,然而通过手工建模的方式创建校园模型需要花费大量的人力和时间,不能满足智慧校园可视化建设需求。近年来,随着无人机技术的飞速发展,对可视化建模提供了巨大支持[1]。无人机技术结合倾斜摄影测量技术,改变了以往遥感影像只能从单一方向拍摄的现状,实现多台设备从不同的角度进行数据采集的功能[2]。通过使用搭载多台倾斜摄影测量设备的无人机,能准确、真实客观地反映校园实际情况,满足了快速生成校园三维模型的需求。同时,随着硬件不断升级以及计算机图形学的快速发展,以OpenSceneGraph为代表的一系列场景可视化系统和渲染引擎日益成熟[3]。三维数据可视化技术不断进步,为实现校园可视化建设提供了巨大帮助。

本文以实现智慧校园建设中校园可视化目标,设计实现一套可视化系统用于校园模型数据可视化。校园模型数据来自于无人机拍摄的校园影像,系统以OpenSceneGraph作为三维渲染引擎,对校园模型数据进行调度、渲染。同时,为了更好地向用户展示校园风貌,系统支持场景漫游功能,用户能选择不同的漫游方式,在校园场景中进行漫游。

1 相关技术

1.1 倾斜摄影测量技术简介

倾斜摄影测量与正射影像测量不同,正射影像测量只能从单一角度对物体进行拍摄。而使用搭载多个相机的飞行平台,能同时从垂直方向和四个倾斜方向五个不同角度采集数据[4]。同时倾斜摄影测量技术具有体量小、真实度高、花费低等特点,在场景可视化建设中能快速收集数据,降低场景三维建模成本。与此同时,由于倾斜摄影测量技术采用多个相机进行拍摄,在建模时纹理可以批量提取,相比正射影像测量后期需要手工处理纹理偏差付出的代价小很多。

倾斜摄影测量技术日渐成熟,处理倾斜摄影测量数据的软件也推陈出新。目前,处理倾斜摄影测量数据的软件市场大都是由国外公司把控,主要代表有法国Acute3D的Smart3DCapture、美国Pictometry公司的Pictometry系统、徕卡公司的LPS[5]工作站等。通过这些软件,能将倾斜摄影测量得到的数据进行自动处理,快速地生成场景模型。通常来说,上述软件通过倾斜摄影测量数据进行三维场景建模一般包括以下几个步骤:

(1)获取原始数据:一般来说,通过倾斜摄影测量数据进行三维场景建模需要正射影像、倾斜影像以及POS(Position and Orientation System)数据三种数据,这些数据都能由无人机的各种传感器提供。

(2)原始数据处理:主要是对正射影像、倾斜影像进行筛选,通过空中三角测量计算(Aerotriangulation)、几何纠正等手段将原始数据转化为大规模的点云数据。

(3)模型构建:有了大规模点云数据,就能通过点云的拼接和重建技术实现点云的三维重建,生成几何模型。然后将得到几何模型通过原始影像进行纹理映射,最后即可输出具有真实感的场景三维模型。

经过以上几个步骤,就能实现拍摄的倾斜摄影图像到三维场景建模的转化。图1显示了通过倾斜摄影技术进行三维场景建模的一般流程。

1.2 OpenSceneGraph三维引擎简介

OpenSceneGraph是一个基于工业图形标准OpenGL的高层次图形开发API接口。通过它,程序员能更加快速便捷地创建高性能、跨平台的交互式图形程序[6]。作为一个开源图形引擎,OpenSceneGraph具有很多封装库,通过这些库提供的功能,用户能方便地开发程序,实现自己的需求。常用的库有以下几种[7]:

(1)osg库:它包含OpenSceneGraph引擎的核心内容,提供三维引擎所需的一些基本功能,定义一些数据结构,如用于向量和矩阵运算的类,以及用于描述渲染状态的类等等。

(2)osgDB库:它包含文件处理和加载部分,通过它能实现对文件读写以及模型处理相关功能。一般来说用于场景可视化的数据量都比较大,直接对整个场景进行渲染是不可能的。osgDB中的DatabasePager提供了对数据进行管理的方式,在实际渲染过程中加载不同的细节层次(Level Of Detail,LOD)模型进行渲染,同时使用PagedLOD技术[8]对过期的模型进行卸载并从内存中移除,保证内存不会超出限制。

(3)osgGA库:它是提供交互控制功能的部分,通过它能实现平台无关的用户交互控制。

(4)osgViewer库:它提供渲染相关功能,包括场景、视口、视窗等相关部分。

由以上几个模块,可以组成一个具备基础交互功能的渲染程序,它的基本结构如图2所示。

图2 基于OpenSceneGraph的渲染程序示意图

2系统实现

2.1 校园倾斜摄影测量数据采集

为了实现校园可视化系统,首先需要得到校园的模型数据。本文通过搭载多个相机和多种传感器的无人机进行对校园进行数据采集,通过倾斜摄影测量技术,获取用于建模的数据。为了取得倾斜摄影测量数据,需要事先规划无人机飞行线路,将无人机运行轨迹设定好。本文数据采集使用了无人机的往返飞行模式,无人机在设定好的路线往返飞行,并且在每次掉头同时移动一定的偏移量,达到对一片区域覆盖拍摄的目的。同时,为保证良好的拍摄效果,将无人机飞行高度设定在距地面30至50米上空,并将相机光圈值设定为f/5、曝光时间为1/320秒进行拍摄。

本文通过无人机进行倾斜摄影测量方式,对校园进行了拍摄,实际采集到有效数据共计6967张图片,每张图片分辨率为5472×3648,共计为大小55.4GB。

2.2 倾斜摄影测量数据自动建模

为了处理通过无人机拍摄的倾斜摄影测量数据,本文采用Smart3DCapture对采集到的数据进行自动建模处理。实现倾斜摄影测量数据自动建模步骤如下:

(1)导入数据:将拍摄数据导入到Smart3DCapture中。因为软件一次能处理的数据量有限(不能超过30G像素),加之实验环境硬件设备的限制,本文将拍摄到的6967张图片分成7个数据包分别处理,每个数据包约为1000张图片,大小在8GB左右,大约有20G像素。

(2)空中三角测量计算:将拍摄数据导入到Smart3DCapture中后,Smart3DCapture会根据图片带有的POS信息进行空中三角测量计算。它会进行关键点提取,分析POS数据,得到点云数据。

(3)三维重建及纹理映射处理:将得到的点云数据进行三维重建,产生如图3所示的网格模型。完成后再进行纹理映射处理即可输出模型数据。输出模型文件时会要求选择输出的模型格式,本文渲染引擎使用OpenSceneGraph,为了方便使用,输出的模型文件格式选择 OpenSceneGraph Binary(OSGB)格式。

图3 三维重建产生的网格模型

2.3 校园可视化系统实现

本文将校园可视化系统分为三个模块进行实现,如图4所示。下面分别介绍各个模块的具体功能和实现。

图4 校园可视化系统架构示意图

(1)初始化模块

初始化模块对整个系统进行初始化,由以下几个子模块组成:

①系统初始化子模块:系统启动后会读取初始化文件InitValue.ini,将文件中记录系统初始化的内容加载到系统中来,并记录到结构体SInitValue中,之后再通过SInitValue的值对系统进行设置。SInitValue的声明如下:

其中WindowWidth和WindowHeight分别为程序窗口宽和高。OSGBFilePath表示使用Smart3DCapture生成的OSGB模型文件所在目录。BeginTileNumber和EndTileNumber表示加载模型的开始块序号和终止块序号,通过这两个序号可以控制整个校园模型是否全部加载。当BeginTileNumber大于EndTileNumber时认为加载全部模型,其他情况则加载序号为BeginTile-Number到EndTileNumber之间每一个模型块(Tile)。

②场景浏览器初始化子模块:在系统初始化子模块完成后,场景浏览器初始化子模块读取SceneViewer-Config.cfg文件,将场景浏览器有关的设置加载到系统中来,并完成场景设置。主要设置参数有LightSource和MaximumNumberOfPageLOD两个。对光源的设置包括光源的位置、数量以及它们的Ambient、Diffuse、Specular三种材质分量的设定。MaximumNumberOf-PageLOD则是用来控制OpenSceneGraph中PagedLOD数量最大值,其作用是防止内存占用过多。OpenScene-Graph处理MaximumNumberOfPageLOD的值有两种情况:当MaximumNumberOfPageLOD被设置为0时,使用超期删除模式,DatabasePager会依据系统运行的帧号删除过期的LOD子节点;而当MaximumNumberOf-PageLOD大于0时,使用超过数量删除模式,当系统中LOD子节点数量大于这个值时,DatabasePager开始删除内存中的LOD子节点直到LOD子节点数量小于MaximumNumberOfPageLOD为止。

③漫游器初始化子模块:在场景浏览器初始化完成之后,漫游器初始化子模块开始运行,将SceneVisitorConfig.cfg中的内容加载到系统中来,记录到结构体SVisitorConfig中,以便后续漫游模块使用。SVisitor-Config的声明如下:

其中VisitorDefaultPosition表示漫游器的初始位置。VisitStrategy表示使用的漫游模式。ChangeDirectionFrameID、ResetVisitorFrameID、BoundaryWidth以及BoundaryLength是在使用随机漫游模式时才会生效的值,分别表示每经过ChangeDirectionFrameID帧改变漫游器的方向以及每经过ResetVisitorFrameID帧重置漫游器位置。BoundaryWidth和BoundaryLength表示边界长和宽的最大值,当漫游器超出边界时会随机重置位置。

(2)渲染模块

渲染模块由OpenSceneGraph完成。在Open-SceneGraph引擎中,一次渲染循环过程主要由Viewer-Base对象响应事件、更新场景图以及对场景图进行渲染三个部分组成。它采用遍历的方式,对不同的过程做出不同的响应。

在校园可视化系统中,通过渲染模块对系统初始化子模块中加载的模型块进行响应,系统遍历所有加载的模型块,完成渲染工作。对于这些模型块来说,它们在校园可视化系统的渲染模块中会经过以下处理步骤:

①事件遍历:事件遍历就是对Viewer的实际操作做出响应,包括UI的控制、键盘的响应、相机的回调等操作。在校园可视化系统中,没有太多复杂的事件需要响应。除去响应计时器对遍历事件开始的时间和结束时间的记录操作外,主要响应的操作是通过漫游控制模块传入的对相机进行的键盘操作、鼠标操作以及窗口大小改变等UI控制操作。

②更新遍历:更新遍历主要完成对场景图的更新。在校园可视化系统中,主要是通过DatabasePager对模型块进行内存管理,包括删除过期模型块的LOD子节点,加入新的期望显示模型块的LOD子节点等操作。

③渲染遍历:渲染遍历主要完成对场景图的渲染相关工作。在校园可视化系统中,主要是包括对场景中视锥体外的模型进行剔除,对需要渲染的节点进行渲染两个基本功能。

(3)漫游控制模块

漫游控制模块提供漫游方式控制,包括自由操作模式,随机漫游模式和指定路线漫游模式。无论是使用哪种漫游方式,漫游控制模块本质上都是通过对相机的View Matrix进行操作,改变相机在场景中的位置以及观察视角来实现的。下面介绍本文中的三种操作模式具体实现。

①自由操作模式:实现用户在校园中进行自由漫游的功能。通过响应键盘按键以及鼠标转动实现类似于第一人称相机操控器的功能。要实现这一功能,首先编写自己的事件响应类CMovementHandler,它继承自osgGA::GUIEventHandler基类,通过重写virtual bool handle(const GUIEventAdapter&,GUIActionAdapter&)函数来实现自己对键盘鼠标事件进行响应。之后,通过osgViewer::Viewer::addEventHandler(osgGA::EventHandler*)函数将CMovementHandler加入到事件响应队列中,等待Viewer进行事件遍历处理事件。

②随机漫游模式:用户在设定漫游模式为随机漫游模式时,初始化模块的SVisitorConfig对象会根据读入的数据设置随机漫游的参数。每当漫游需要改变方向或者重置位置时,漫游控制模块会产生一个取值范围为-1到1的浮点随机数RandomFloat作为随机数因子控制转向方向以及重置位置坐标。这个随机数因子采用c++中std标准库的default_random_engine作为随机数产生引擎,采用uniform_real_distribution连续均匀分布方式产生-1到1的浮点随机数。通过设置随机漫游方式,用户无需操作就能在一定的区域范围内随机漫游。当用户漫游到感兴趣的地点时,可以通过按键中断随机漫游模式,进入自由操作模式,从而对感兴趣地点进行自由查看。

③指定线路漫游模式:当漫游模式被设置为指定线路漫游模式时,系统会加载预先指定好的路径文件,再根据文件的内容改变每一帧相机的View Matrix,从而达到按指定线路漫游的目的。同随机漫游模式一样,用户也可以通过按键中断漫游过程,进入自由操作模式。

3 系统实际运行效果

通过无人机对校园进行数据采集,对完成倾斜摄影测量数据自动建模,将校园模型数据加载到校园可视化系统中进行显示,得到的系统实际运行效果如图5所示。

图5 校园可视化系统实际运行效果图

4 结语

校园可视化系统能提供给学生、家长、教师以及社会各界人士直观认识学校的机会,并且在智慧校园建设中,校园场景的可视化也是重要的一环。本文基于OpenSceneGraph设计开发一套校园可视化系统,系统利用无人机拍摄的倾斜摄影测量数据,使用Smart3DCapture对其进行自动建模,并将创建好的模型加载到OpenSceneGraph中用于可视化。同时,校园可视化系统提供了不同的漫游方式,满足用户以多种方式在校园场景中进行漫游的需求。

猜你喜欢

漫游可视化测量
自然资源可视化决策系统
思维可视化
基于知识图谱的我国短道速滑研究可视化分析
复变函数级数展开的可视化实验教学
复变函数级数展开的可视化实验教学
霹雳漫游堂
霹雳漫游堂
二十四节气简易测量
日出日落的观察与测量
你所不知道的测量秘密