一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法与流程

文档序号:11953292阅读:330来源:国知局
一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法与流程
本发明属于虚拟现实,计算机图形学,数字图像处理等领域,涉及一种虚拟现实移动端中图像扭曲的方法,更具体的是,涉及一种根据场景渲染中的矩阵变换对当前帧进行扭曲得到下一帧的方法。
背景技术
:虚拟现实技术综合利用计算机图形学、光电成像技术、传感技术、计算机仿真、人工智能等多种技术,并借助各种交互设备,旨在为用户提供一个逼真的、具有多重感知的虚拟世界。近年来,虚拟现实技术迅速发展,凭借其强悍的硬件,电脑端虚拟现实技术已经能够给用户带来很好的沉浸式体验,但因其成本高,配套设备繁琐,未能有很好的普及。相比之下,移动端虚拟现实技术门槛低,因现在高端智能手机的普及率高,加之移动端(如VR头盔,VR:VirtualReality,即虚拟现实,一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中)的成本和制造难度与电脑端相比微乎其微,给用户带来的体验也是极为方便,用户甚至只需拥有一部智能手机,再简单制作一个VR盒子便能进行VR体验,所以现在移动端的虚拟现实技术普及率远远超于电脑端,并逐年上升。移动端虚拟现实技术普及率虽然高,但是用户体验却远远不如电脑端。其最主要的原因在于移动端的硬件性能远远弱于电脑端,即使是移动端的骁龙820或者三星Exynos8890也完全无法和电脑端的I54590与GTX970的性能相比拟。因此移动端带来的用户体验往往不尽人意,会出现跳帧、抖动的现象。对于VR游戏而言,要有较好的用户体验,其游戏运行帧率必须保持在60HZ以上。由于受到移动端硬件性能的限制,有时无法在规定时间内渲染完一帧,这时就会出现跳帧或者抖动的现象。另外,当用户头部转动过快时,设备无法渲染出与头部动作相应的画面,此时也会出现抖动现象。为解决此问题,许多厂商提出了一些技术方案,例如Oculus提出的异步时间扭曲技术(AsynchronousTimewarp,简称ATW),其实就是一项生成中间帧技术,当游戏下一帧无法在规定时间内渲染完成时,该技术根据当前已经渲染好的帧及当前VR头盔的状态生成下一帧进行填充,虽然该方法一定层度解决了画面的抖动现象,但是该技术依然具有局限性,例如当移动物体或动画覆盖屏幕很大一部分时,就会产生伪影现象。如何根据当前帧预测出较为准确的下一帧仍是虚拟现实领域中一个值得研究的问题。技术实现要素:发明目的:本发明所要解决的技术问题是当虚拟现实游戏中不能在规定时间内渲染完一帧时生成中间帧进行插入,以此减少游戏中的画面抖动。技术方案:本方法通过当前帧,当前头盔状态及下一帧时刻头盔状态,根据场景渲染时的矩阵变换及其逆变换预测生成下一帧,并直接输出至显示设备,包括以下步骤:步骤1,读取当前帧信息,并且得到当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T,读取设备当前帧及下一帧时刻状态;步骤2,对步骤1的读入数据进行必要预处理,把当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T转换为当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T,根据设备状态生成第一旋转矩阵R、第二旋转矩阵R′;步骤3,根据投影矩阵P、第一旋转矩阵R、视点平移矩阵T,对每个当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T进行矩阵逆变换,得到其位于世界坐标系中坐标(xworld,yworld,zworld,wworld)T;步骤4,根据视点平移矩阵T、第二旋转矩阵R′、投影矩阵P,对世界坐标系中坐标(xworld,yworld,zworld,wworld)T进行矩阵变换,得到对应下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T;步骤5,对步骤4得到的下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T进行线性变换,最终转换成屏幕坐标系下坐标(xfinal,yfinal)T;步骤6,把每个当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T中的像素RGB值赋给对应的下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T中,从而得到最后的扭曲图像。优选的,步骤1包括:在图像即将显示至屏幕设备之前,读取当前帧信息即framebuffer内容,包括已经渲染成纹理的colorbuffer和depthbuffer内容,并得到图像像素点当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T;colorbuffer中内容即为将要显示的图像像素点RGB值,定义其图像宽度为WindowWidth,图像高度为WindowHeight,则有0≤xoriginal<WindowHeight及0≤yoriginal<WindowWidth;depthbuffer中内容即为图像像素点深度信息,其坐标为屏幕坐标系下坐标(xoriginal,yoriginal)T,对应深度信息值为depthoriginal(xoriginal,yoriginal);读取当前帧及下一帧时刻设备状态即读取设备两时刻的陀螺仪数据,OpenGL采用右手笛卡尔坐标系统,读取当前帧时刻设备陀螺仪数据即欧拉角ψ、θ、欧拉角ψ、θ、分别为当前帧时刻设备绕Z轴、Y轴、X轴的旋转角度;读取下一帧时刻设备陀螺仪数据即欧拉角ψ′、θ′、欧拉角ψ′、θ′、分别为下一帧时刻设备绕Z轴、Y轴、X轴的旋转角度。更优的,步骤2包括以下步骤:步骤2-1,把当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T转换为当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T,具体为:z=2*depthoriginal(xoriginal,yoriginal)-1,w=1.0;步骤2-2,根据设备状态生成旋转矩阵R、R′,具体步骤为:步骤2-2-1,通过欧拉角生成四元素,转换公式为:步骤2-2-2,通过四元素生成旋转矩阵,转换公式为:Rq=1-2(qy2+qz2)2(qxqy-qwqz)2(qxqz+qwqy)02(qxqy+qwqz)1-2(qx2+qz2)2(qyqz-qwqx)02(qxqz-qwqy)2(qyqz+qwqx)1-2(qx2+qy2)00001]]>把欧拉角ψ、θ、带入步骤2-2-1~2-2-2中得到第一旋转矩阵R,把欧拉角ψ′、θ′、带入步骤2-2-1~2-2-2中得到第二旋转矩阵R′。更优的,步骤3包括以下步骤:步骤3-1,获取投影矩阵P,对其求逆得到P-1,对当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T进行投影逆变换,得到当前帧时刻相机坐标系下坐标(xcamera,ycamera,zcamera,wcamera)T,公式为:(xcamera,ycamera,zcamera,wcamera)T=P-1(x,y,z,w)T;步骤3-2,对步骤2求得的第一旋转矩阵R及视点平移矩阵T求逆,求得矩阵R-1、T-1;对于当前帧像素,其世界坐标系坐标为:(xworld,yworld,zworld,wworld)T=T-1·R-1·(xcamera,ycamera,zcamera,wcamera)T。更优的,步骤4包括以下步骤:步骤4-1,根据步骤2求得的第二旋转矩阵R′及视点平移矩阵T,求得世界坐标系下坐标(xworld,yworld,zworld,wworld)T位于下一帧时刻相机坐标系下坐标(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T,其变换公式为:(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T=R′·T·(xworld,yworld,zworld,wworld)T;步骤4-2,获取投影矩阵P,对下一帧时刻相机坐标系下坐标(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T进行投影变换,得到下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T,其变换公式为:(x′,y′,z′,w′)T=P·(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T。更优的,步骤5包括以下步骤:对下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T进行线性变换,最终得到像素点下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T,具体为:更优的,步骤6包括以下步骤:把每个像素当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T中的像素RGB值赋给下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T中,具体步骤为:新建并初始化framebuffer,其中colorbuffer中的每个像素RGB值为(0,0,0),逐像素遍历纹理,该纹理为当前帧的colorbuffer渲染成纹理,把当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T对应的RGB值分别赋给对应的下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T的RGB分量中,遍历结束即可得到扭曲后的图像,最后把其直接输出至显示设备即可。优选的,所涉及的坐标均有左眼与右眼之分,计算方式一致;视点平移矩阵T包括左眼视点平移矩阵T_L、右眼视点平移矩阵T_R,分别在左眼坐标变换、右眼坐标变换中使用。更优的:所述左眼视点平移矩阵T_L为:左眼视点相对于设备中心位置在世界坐标系下的平移矩阵,为设备内参;所述右眼视点平移矩阵T_R为:右眼视点相对于设备中心位置在世界坐标系下的平移矩阵,为设备内参。本发明的有益效果(1)本发明为虚拟现实中一种生成中间帧方法,该方法能够有效减少VR游戏中的抖动,从而增加用户体验。(2)本发明提出的矩阵逆运算方法其计算量小,运算速度快,能够在短时间内完成运算,实现在规定时间内完成一帧的插入。(3)本发明提供的方法在计算着色器中编程实现,在保证计算速度的前提下,能够对当前帧逐像素扭曲,实现高精度预测,实际效果如图3所示。附图说明图1为本发明方法的基本流程图。图2为各坐标系统变换关系图。图3(a)为图像扭曲前后对比图的当前帧视图。图3(b)为图像扭曲前后对比图的实际下一帧视图。图3(c)为图像扭曲前后对比图的通过该发明方法扭曲得到下一帧视图。图4为本发明方法应用场合图。具体实施方式下面结合实施例对本发明作进一步说明,但本发明的保护范围不限于此:本方法的流程图如图1所示,该发明方法主要通过场景渲染中的矩阵变换关系,计算像素位置位于各坐标系统中的对应关系,从而得到当前帧像素点与下一帧像素点位置映射关系,最后根据当前帧生成下一帧,得到扭曲图像输出至显示设备。各坐标系统变换关系如图2所示。本实施例的实验开发环境是:英特尔第三代酷睿i5-35503.30GHz四核CPU(处理器),NVDIAGeForceGTX650GPU(显卡),8G内存,软件环境是Eclipse2015(软件开发工具)、MicrosoftVisualStudio2015(软件开发工具)和OpenGLES3.1(嵌入式系统开源图形库)。运行环境是:RK3288(移动端处理器型号)、ARMMali-T764(GPU型号)、2GB内存、16GB存储空间。本发明方法主要用于移动端虚拟现实设备中,如VR头盔等。如图4所示,当设备运行VR程序时,设备主线程(图4右侧)以至少60HZ的频率渲染图像帧输出,次线程(图4左侧)一直运行本发明方法,当设备无法在规定时间内渲染完一帧时,次线程把扭曲后的图像送入backbuffer中,最后输出到显示设备,从而保证设备能够以足够的帧率运行,并且减少画面抖动。实施例1:一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,包括以下步骤:步骤1,读取当前帧信息,并且得到当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T,读取设备当前帧及下一帧时刻状态;步骤2,对步骤1的读入数据进行必要预处理,把当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T转换为当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T,根据设备状态生成第一旋转矩阵R、第二旋转矩阵R′;步骤3,根据投影矩阵P、第一旋转矩阵R、视点平移矩阵T,对每个当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T进行矩阵逆变换,得到其位于世界坐标系中坐标(xworld,yworld,zworld,wworld)T;步骤4,根据视点平移矩阵T、第二旋转矩阵R′、投影矩阵P,对世界坐标系中坐标(xworld,yworld,zworld,wworld)T进行矩阵变换,得到对应下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T;步骤5,对步骤4得到的下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T进行线性变换,最终转换成屏幕坐标系下坐标(xfinal,yfinal)T;步骤6,把每个当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T中的像素RGB值赋给对应的下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T中,从而得到最后的扭曲图像。采用本方案可以获得以下有益效果:(1)本发明为虚拟现实中一种生成中间帧方法,该方法能够有效减少VR游戏中的抖动,从而增加用户体验。(2)本发明提出的矩阵逆运算方法其计算量小,运算速度快,能够在短时间内完成运算,实现在规定时间内完成一帧的插入。(3)本发明提供的方法在计算着色器中编程实现,在保证计算速度的前提下,能够对当前帧逐像素扭曲,实现高精度预测,实际效果对比如图3(a)、图3(b)、图3(c)所示。实施例2:如实施例1所述的一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,步骤1包括:在图像即将显示至屏幕设备之前,读取当前帧信息即framebuffer内容,包括已经渲染成纹理的colorbuffer和depthbuffer内容,并得到图像像素点当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T;colorbuffer中内容即为将要显示的图像像素点RGB值,定义其图像宽度为WindowWidth,图像高度为WindowHeight,则有0≤xoriginal<WindowHeight及0≤yoriginal<WindowWidth;depthbuffer中内容即为图像像素点深度信息,其坐标为屏幕坐标系下坐标(xoriginal,yoriginal)T,对应深度信息值为depthoriginal(xoriginal,yoriginal);读取当前帧及下一帧时刻设备状态即读取设备两时刻的陀螺仪数据,OpenGL采用右手笛卡尔坐标系统,读取当前帧时刻设备陀螺仪数据即欧拉角ψ、θ、欧拉角ψ、θ、分别为当前帧时刻设备绕Z轴、Y轴、X轴的旋转角度;读取下一帧时刻设备陀螺仪数据即欧拉角ψ′、θ′、欧拉角ψ′、θ′、分别为下一帧时刻设备绕Z轴、Y轴、X轴的旋转角度。实施例3:如实施例2所述的一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,步骤2包括以下步骤:步骤2-1,把当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T转换为当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T,具体为:z=2*depthoriginal(xoriginal,yoriginal)-1,w=1.0;步骤2-2,根据设备状态生成旋转矩阵R、R′,具体步骤为:步骤2-2-1,通过欧拉角生成四元素,转换公式为:步骤2-2-2,通过四元素生成旋转矩阵,转换公式为:Rq=1-2(qy2+qz2)2(qxqy-qwqz)2(qxqz+qwqy)02(qxqy+qwqz)1-2(qx2+qz2)2(qyqz-qwqx)02(qxqz-qwqy)2(qyqz+qwqx)1-2(qx2+qy2)00001]]>把欧拉角ψ、θ、带入步骤2-2-1~2-2-2中得到第一旋转矩阵R,把欧拉角ψ′、θ′、带入步骤2-2-1~2-2-2中得到第二旋转矩阵R′。实施例4:如实施例3所述的一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,步骤3包括以下步骤:步骤3-1,获取投影矩阵P,投影矩阵P优选的根据虚拟现实移动端(如VR头盔)的参数确定,或是程序中设定,一般是不变的。获取,读懂了代码直接在程序中GET。对投影矩阵P求逆得到P-1,对当前帧时刻标准化设备坐标系下坐标(x,y,z,w)T进行投影逆变换,得到当前帧时刻相机坐标系下坐标(xcamera,ycamera,zcamera,wcamera)T,公式为:(xcamera,ycamera,zcamera,wcamera)T=P-1(x,y,z,w)T;步骤3-2,对步骤2求得的第一旋转矩阵R及视点平移矩阵T求逆,求得矩阵R-1、T-1;对于当前帧像素,其世界坐标系坐标为:(xworld,yworld,zworld,wworld)T=T-1·R-1·(xcamera,ycamera,zcamera,wcamera)T。实施例5:如实施例4所述的一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,步骤4包括以下步骤:步骤4-1,根据步骤2求得的第二旋转矩阵R′及视点平移矩阵T,求得世界坐标系下坐标(xworld,yworld,zworld,wworld)T位于下一帧时刻相机坐标系下坐标(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T,其变换公式为:(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T=R′·T·(xworld,yworld,zworld,wworld)T;步骤4-2,获取投影矩阵P,对下一帧时刻相机坐标系下坐标(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T进行投影变换,得到下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T,其变换公式为:(x′,y′,z′,w′)T=P·(xcamera_1,ycamera_1,zcamera_1,wcamera_1)T。实施例6:如实施例5所述的一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,步骤5包括以下步骤:对下一帧时刻标准化设备坐标系下坐标(x′,y′,z′,w′)T进行线性变换,最终得到像素点下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T,具体为:实施例7:如实施例6所述的一种虚拟现实移动端中基于矩阵逆运算的图像扭曲方法,步骤6包括以下步骤:把每个像素当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T中的像素RGB值赋给下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T中,具体步骤为:新建并初始化framebuffer,其中colorbuffer中的每个像素RGB值为(0,0,0),逐像素遍历纹理,该纹理为当前帧的colorbuffer渲染成纹理,把当前帧时刻屏幕坐标系下坐标(xoriginal,yoriginal)T对应的RGB值分别赋给对应的下一帧时刻屏幕坐标系下坐标(xfinal,yfinal)T的RGB分量中,遍历结束即可得到扭曲后的图像,最后把其直接输出至显示设备即可。优选的实施例中,所发明方法中所涉及的坐标均有左眼与右眼之分,计算方式一致;视点平移矩阵T包括左眼视点平移矩阵T_L、右眼视点平移矩阵T_R,分别在左眼坐标变换、右眼坐标变换中使用。在更优的实施例中:所述左眼视点平移矩阵T_L为:左眼视点相对于设备中心位置在世界坐标系下的平移矩阵,为设备内参;所述右眼视点平移矩阵T_R为:右眼视点相对于设备中心位置在世界坐标系下的平移矩阵,为设备内参。本文中所描述的具体实施例仅仅是对本发明精神做举例说明。本发明所属
技术领域
的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1