基于图像的虚拟现实全景漫游技术

2022-04-20 06:47贾亚娟卢春光
科学技术创新 2022年10期
关键词:全景图视点漫游

贾亚娟 卢春光

(河南职业技术学院,河南 郑州 450046)

虚拟现实技术是近几年的热门研究课题,并且已经在电脑游戏、休闲娱乐、军事训练、远程医疗等多个领域得到了广泛应用。从现有的技术来看,基于图像的虚拟现实全景漫游技术具有场景逼真、交互方便、硬件要求低、可扩展性强等一系列优点,较好地满足了各种应用需求。其中,虚拟场景的获取、全景漫游模型的构建,以及图像处理算法和信息压缩技术等,都是影响虚拟现实全景漫游系统应用效果的关键因素,也成为今后虚拟现实技术研究发展的主要方向。

1 基于图像的虚拟现实场景制作

1.1 全景图的拍摄

常见的全景图有3 种类型,即多面体全景图、球面全景图、柱面全景图。其中,柱面全景图能够反映空间任意角度的场景,并且图像细节真实程度更好,本文以柱面全景图为例,进行虚拟现实场景的制作。由于虚拟现实场景来自于现实环境,因此首要任务是利用高清相机拍摄现实世界中的场景,然后将图像数据导入计算机中。在拍摄时,每30°拍摄一张照片,相邻两张照片之间有20%-30%的重叠区域,保证图片之间能够做到平滑过渡。注意整个拍摄期间尽量不改变相机焦距,对提升拍摄画面的清晰度有积极帮助。

1.2 全景图的拼接

完成全景图的拍摄后,将所得照片进行拼接,假设需要对P1 和P2 两张照片进行拼接,具体操作方法为:首先进行照片投影。将平面上的P1 和P2 分别投影到两个圆柱面上,得到Q1 和Q2。在Q1 的左边和Q2 的右边经过一定的搜索后,找出两幅图像的重叠区域,此过程称为“图像配对”。然后将两张照片的重叠部分进行拟合,即可拼接成为一张照片。最后剪掉多余部分,完成图像的拼接。重复上述流程,直到所有拍摄图像全部完成拼接,即可得到全景图。

1.3 虚拟场景的生成

同一个虚拟场景中包含了大量的全景图,在生成虚拟场景时需要将每一张全景图作为一个独立的节点,然后按照现实场景中的位置关系重新排列这些节点。同时在节点与节点之间添加过渡图像,最终生成完整的虚拟场景。这样在虚拟现实场景漫游时,用户可以在任意一个节点上进行360°环视,并且可以通过改变所在节点的位置,达到在虚拟场景中前进、后退的效果,如同身处真实场景一样。

2 基于图像的虚拟现实全景漫游模型

2.1 系统模型的构建

基于全景图像的虚拟现实漫游系统模型主要由3个模块组成,各模块的功能为:

a.StitchTool 模块,其功能是按照特定的序列对拍摄所得图像进行组合、拼接,从而得到平滑且连续的全景图。

b.VR Editor 模块,其功能是使用中间过渡图像,将所有按照顺序排列好的全景图链接起来,形成一个多视点的虚拟场景。

c.VR Viewer 模块,主要由反投影装置、调度器、I/O 口等组成,其功能是通过I/O 口接收来自计算机的控制指令,调度器根据当前指令调用数据,在虚拟场景中反投影,为用户提供对应场景的视图。系统模型的结构如图1 所示。

图1 虚拟现实全景漫游模型的架构图

2.2 基于指令驱动的漫游系统结构

系统的各项功能通过指令驱动来实现,用户利用键盘编辑并发送命令。该命令经由命令接口传递给调度器。调度器则根据虚拟场景的一系列环境变量对用户命令进行处理,如读取数据、进行反投影或者输出画面到显示器等。全景漫游系统的结构如图2 所示。

图2 基于指令驱动的漫游系统结构

该系统可支持编辑和发送的指令包括用户指令和内部处理指令2 种类型。用户指令属于公开指令,具体类型有左视/右视指令、前进/后退指令,以及浏览器初始化指令、结束浏览指令、视点跳转指令等。内部处理指令的具体类型有视线转移指令、脚步移动指令、文件读取指令以及重新投影指令等。

2.3 全景视点的浏览

如果用户位于某个全景视点上,调度器会自动记录某个时刻下用户视线的方向。如果调度器重新接收到新的移动命令(如左移指令),就会自动调整视线角度,并同时从全景图中截取该角度对应的视图,利用反投影装置进行处理,将处理完毕的视图从输出模块反馈给用户,这样用户就可以观察到不同方向上的虚拟景象。在全景视点浏览时,提高系统对用户指令的响应速度是优化虚拟现实全景漫游体验的关键。而提高响应速度的关键点主要有两个,即反投影算法和调度策略。通常来说,自然状态下动态特性要求每秒生成并同步显示30 帧图像,可以保证用户在转换视线时获得良好体验;最低不得低于10 帧,否则用户在转换视线时会明显感到图像的不连续性。同样的,交互响应时间应控制在0.2s 以内,最大不得超过0.5s,否则也会让用户在虚拟现实全景漫游中产生场景不真实的感觉。

2.4 视点间的过渡处理

在整个虚拟现实场景中包含了多个全景视点,而相邻两个全景视点中用空间链进行链接,此外每个空间链上还添加了中间过渡图像,以保证全景视点漫游时不会产生明显的跳跃感。假设相邻的两个全景视点分别为A和B,两者之间的过渡处理如图3 所示。

图3 视点过渡处理示意图

用户在全景视点漫游时,调度器获取用户当前视线角度,并根据当前视点和角度在空间链的列表立面检索匹配的空间链。如匹配成功,则系统提示用户可以执行下一步操作。用户根据系统提示和个人需求,发出前进(UESR_GO_AHEAD)或后退(UESR_GO_BACK)指令。此时调度器经过I/O 接口收到指令,并检索出当前空间链上第一张中间过渡图像,在显示器上展示出来,同时记录该图像的编号。然后等待接收用户的下一个指令,显示第二张中间过渡图像,以此类推,直到离开当前空间链,然后继续进入到下一个全景视点。通过视点过渡优化处理,能够保证用户在虚拟现实全景漫游中,获得连续的漫游体验,使得漫游时的“真实感”更加强烈,优化了漫游体验效果。

3 虚拟现实全景漫游技术的优化

3.1 降低内存消耗

通过上文分析可知多视点虚拟现实场景是由大量的全景图和中间图像链接形成的。在每次系统启动时,都需要花费较长的时间完成初始化,占用大量的内存。如果剩余的内存空间不足,将会导致用户在环视时出现视角不能360°任意旋转的情况。因此,在全景漫游技术优化时必须要想办法降低内存消耗。一种方法是将全景图分成360 份,即每转动1°实现一次变换。假设浏览一张200×1000(24Bits)的全景图,占用内存不会超过50MB。虽然对内存的消耗有一定降低,但是在多视点连续浏览时仍然无法避免系统内存占用问题。反投影模板则是通过取消缓冲区的方式降低内存占用,其原理是在反投影处理环节,在源节点和目标点之间建立映射关系,可以利用设计好的模板直接将源节点包含的所有信息直接映射到反投影模板上,快速生成反投影视图,如图4 所示。

图4 反投影模板示意图

当系统完成初始化后,反投影模板也自动进入待机状态。当用户需要重复浏览某个视点时,可直接加载反投影模板上的数据,而不需要再做反投影,因此简化了流程,减少了对内存的消耗。

3.2 减少内存漏洞

内存漏洞除了会消耗系统内存外,还会导致程序响应速度变慢,浏览速度降低,系统运行的稳定性也会受到影响。从用户全景漫游角度来看,在转移视线或转换场景时,则容易出现卡顿现象,严重破坏用户在虚拟现实场景中的漫游体验。对于内存漏洞的检测方法比较简单,对于系统运行前后可用内存容量,如果运行以后内存明显减少,即说明一部分内存未被完全释放,有较大概率是存在内存漏洞。在判断有内存漏洞后,一般会采取重新定义malloc 和free 函数的方式,对内存漏洞进行监测、定位。在找到内存漏洞后,通过释放内存的方式解决这一问题。处理方法也比较简单,在内存块已经被占用的地方,加上delete 语句即可重新释放内存,消除漏洞。

3.3 可变速的环视移动

由于调度器发送的环视移动指令,只能以固定的速度进行环视,因此用户在转换视线时,也只能按照固定的速度,无法快速转换到另一个角度。为了解决这一问题,让用户能够实现可变速的环视移动,可采取按固定角度进行环视偏移、按像素进行环视偏移两种方式加以解决。但是在实际操作中,根据固定角度进行环视偏移很难达到较高的命中率,这是因为偏移角度和缓冲速度无法得到兼顾。如果短时间内偏移角度过大,那么新的视图会因为缓冲速度不够导致视图无法快速加载完成,从而出现视线转移之后虚拟场景尚未加载出来的问题。对比之下,按照像素进行环视偏移则是基于像素个数来确定偏移量,由于像素单元小,因此场景加载速度快;同时以像素级的精度进行环视,也能保证漫游场景更加真实。

4 结论

基于图像的虚拟现实全景漫游,将高清相机拍摄到的图像进行拼接得到全景图,再利用中间过渡图像链接得到虚拟现实场景。在调度器的辅助下,可根据用户指令和用户视线变化,灵活加载、呈现不同视角的虚拟图像,优化了全景漫游体验。随着VR 技术的成熟发展,今后要重点从降低内存消耗、支持可变速环视移动方面进行优化改进,从而进一步提升虚拟现实全景漫游技术的使用效果。

猜你喜欢
全景图视点漫游
专家视点
嫦娥四号月背之旅全景图
霹雳漫游堂
NASA漫游记
环境视点
环保概念股全景图
让你每天一元钱,物超所值——《今日视点—2014精萃》序
奇妙岛全景图
奇妙岛全景图
边走边看:漫游海底 梦想成真