APP下载

在移动VR中加速修正GPU桶形失真的方法

2018-03-21金益

电子技术与软件工程 2018年2期

摘 要 桶形失真是由于光线的倾斜度大引起的画面呈桶形膨胀形状的失真现象,该现象直接影响了移动VR中对图像的分析理解。本文提出一种新的三维映射几何模型,通过对图像网格的预计算与近似值处理,最后在视频编解码器中进行图像对比并计算图像差值和PSNR,数据结果证明此方法很好地权衡了GPU的输出质量和速度,并修正了失真图像,从而取得更好的细节处理效果。

【关键词】桶形失真 移动VR 预计算 近似值

1 引言

VR技术是利用计算机生成一种三维模拟环境,通过多种传感设备实现用户与该环境进行自然交互的技术。VR正从PC端向移动端进行扩展,研究基于移动设备上的VR应用具有重要的意义。移动端VR技术对图像质量的要求相当高,因为GPU相比传统的移动应用程序需要做更多的工作负载。工作负载增加的其中一个原因是移动端的图像内容需要进行两次渲染(每单位矩阵渲染一次)。另一个原因是GPU最后一次渲染使用了桶形失真过滤。这使得图像处理器的工作负荷特别大,因此我们需要思考良策以降低负荷。

2 桶形失真

桶形失真是由于光線的倾斜度大引起的画面呈桶形膨胀形状的失真现象,该现象直接影响了移动VR中对图像的分析理解。由于失真,图像被压缩,从而失去一部分图像信息;而剩下的部分则意味着要用更高的分辨率进行填充。由于存在桶形失真,我们需要应用反向转换,这样VR移动端的屏幕发出的光线才比较适宜。目前,对桶形失真进行校正的方法主要有模式法和控制点法两种。其中,模式法包括基于镜头相对目标姿态与位置模型的外参数地址修正法和基于镜头光学特性模型的内参数地址修正法;控制点法包括多项式地址修正法和有限元法两种;本文提出一种新的三维映射几何模型,通过对图像网格的预计算与近似值处理,最后进行图像纹理查找,此方法很好地权衡了GPU的输出质量和速度,并修正了失真图像,从而取得更好的细节处理效果。

3 设计思想及算法

3.1 失真模型

本文采用创建的是非零逆函数模型用于桶形失真,其以下逆函数可以进行计算:

α定义了失真量,而α由透镜设计进行界定。p中的输入值x和y在[-1, +1]之间是标准化,如图1函数曲线所示。

α呈增长态势的桶形失真图如图2所示,左图代表桶形失真开始,右图为最后图像,中间为一段动态过程。

3.2 基于图像网格的修正

该算法为在显示图2右图最后图像之前,在后期处理片段着色器中进行最后渲染的修正。修正包括两部分:预计算和近似值。假设将VR内容渲染至每矩阵的帧缓冲对象中,使用OpenGL ES 3.0,顶点着色器和片段着色器的程序如图3示。centre 允许将失真集中的部分稍微移出FBO的中间位置,通常透镜并不完全集中到屏幕的左边或右边。这是可以使用的用来计算失真的最准确的方法。但对GPU而言,这种方法的成本非常高。由于我们仅处理两个三角形到输出一个矩形,一共6个点,因此顶点着色器运行很快。另外,片段着色器需要在屏幕上为每个像素进行转换。所以对于1920×1080像素的显示,要进行2073600次运算及纹理查找。很明显,我们需要优化性能,于是在图像网格基础上进行预计算,需要在片段着色器之外进行转换。我们可以使用多个矩形连接组成网格,而不是在显示FBO时形成一个矩形。如果现在对网格进行预转换,便可以得到以下信息,如图3所示。这种方法的优点是,在初始化时间内以上工作只需要做一次。因为透镜参数不会随时间变化,因此可以反复利用每一帧上的网格。

优化的第二部分是近似值处理,由图像网格的分辨率对其定义。网格点之间可以进行插补。网格分辨率越低产生的图像质量则越高,而网格分辨率越高则运行速度会越快。例如:使用32×32像素的网格可以生成1920 x 1080像素的显示:(1920, 1080) / 32 = (60, 33.75)。因此,有2040个矩形和12240个点组成了顶点。顶点着色器要处理的是12240个点,而不是6个。可以简化片段着色器,如图4所示。

简化片段着色器后还需要进行纹理查找,但可避免转换工作。我们节省了大量的功耗,且分辨率更高将节省更多的功耗。不过,在移动端VR GPU上,还有另一大优势。由于顶点着色器可以在3D阶段独立运行,而3D阶段由于要进行光栅化,因此要执行片段着色器。如果图像对象填充率有限,将有更多的空间可以确保按时完成图像的渲染。

4 实验结果

在实验阶段我们尝试进行量化。实验采集的图像网格大小是32×32像素与160*160像素,并且为每个输出图像创建了向前转换,针对向前转换图像和原始非转换图像输出的不同创建了差值图像,如图5所示。

可以看到,在差值图像中有更多红色。但可以用数值进行表述。在视频编解码器的图像对比中,PSNR值(峰值信噪比)是已知的标准。通过使用ImageMagick,并计算图像差值和PSNR,可以得得到表1。

PSNR值更高意味两个图像更接近。可以清楚地看到,使用32px作为图像的网格参数与使用片段渲染生成的图像非常接近。

5 总结

本文所提出的在移动VR中加速修正GPU桶形失真的方法具有数学模型精练、算法实现简单等优点,通过使用正确的技巧,可以降低特定部分的GPU需求,并同时保持图像的高质量。应用程序得以创建更丰富的对象或设备,以通过缩短唤醒GPU的时间,从而节省功耗。

参考文献

[1]王雷,郭健,陈英革等.图像桶形失真的一种校正方法[J].常熟理工学院学报,2007,21(04):104-107.

[2]何平,殷睿.基于弧面映射的图像桶形失真几何失真的校正方法[J].上海电气技术,2009(06):26-27.

作者简介

金益(1980-),女,江苏省苏州市人。副教授。研究方向为三维动画、虚拟现实。

作者单位

苏州市职业大学计算机工程学院 江苏省苏州市 215104