一种基于移动端的虚拟现实图像处理系统的制作方法

文档序号:16136325发布日期:2018-12-01 01:01阅读:226来源:国知局

本发明涉及虚拟现实(virtualreality,vr)技术领域,更具体地,涉及一种基于移动端的虚拟现实图像处理系统。

背景技术

近年来,随着虚拟现实技术的风靡,越来越多应用虚拟现实技术的产品出现,虚拟现实技术将人们从现实带到了虚拟世界。目前的虚拟现实技术的呈现,主要是体验者依靠全封闭的头戴型显示器观看电脑模拟产生的虚构世界的影像,并配有耳机、运动传感器或其他设备等,为其提供视觉、听觉、触觉等方面的感官体验,虚拟现实系统的整套设备可以根据体验者的反应做出反馈,使体验者达到身临其境的感觉。

作为应用了虚拟现实技术的vr头戴设备受到了消费者尤其是科技迷的广泛关注和追捧。目前,市面上的虚拟现实设备大多需要同终端配合使用,将安放在头戴设备中的终端作为头戴设备的显示屏。终端需要对显示画面进行虚拟现实图像处理,将二维的平面画面转变为虚拟的立体画面。在转变的过程中,为了使虚拟画面更真实,终端需要对播放的画面进行图像渲染,但是全渲染要求的运算资源十分高,观看全渲染图像的代价是帧率下降,延时提高,带来卡顿等不良的视觉感受。

在虚拟现实设备中,为了正确在虚拟世界里呈现一个人们的感知,必须要在显示器上的定时更新图像,然而如果渲染时间太长,一帧就会丢失了,产生的结果就是抖动,这是由于新的一帧图像还没有被渲染出来,显示器显示了上一帧的图像,如果一帧图像被两次渲染,就会出现重影。

因此,现有移动端虚拟现实设备刷新频率不足画面丢失,重影,以及移动端虚拟设备内存不够等问题。



技术实现要素:

针对现有技术的缺陷,本发明的目的在于解决现有移动端虚拟现实设备刷新频率不足画面丢失,重影,以及移动端虚拟设备内存不够等技术问题。

为实现上述目的,本发明提供一种基于移动端的虚拟现实图像处理系统,包括:视线计算模块、多层次渲染模块以及显示模块;

所述视线计算模块用于控制移动端的摄像头实时获取用户脸部图像,通过用户脸部图像实时确定用户瞳孔位置,并根据用户瞳孔位置确定用户视线区域,所述视线区域不占满所述移动端的整个显示屏;

所述多层次渲染模块用于通过累进网格算法中的点分裂算法对视线区域内待播放图像的底层数据进行点分裂得到高层网格数据,通过累进网格算法中的边折叠算法处理视线区域以外待播放图像的底层数据的得到底层网格数据;

所述显示模块用于将多层次渲染模块和中间帧模块处理后的待播放图像数据分屏变换后显示给用户,使用户看到虚拟现实的图像。

可选地,该基于移动端的虚拟现实图像处理系统还包括:中间帧模块;

所述视线计算模块用于根据摄像头实时获取的用户脸部图像信息确定用户的眼部运动数据和头部运动数据,并根据用户眼部运动数据和头部运动数据预测用户下一时刻的视线区域;在移动端播放虚拟现实视频时,若多层次渲染模块无法在规定时间内渲染完成下一帧图像,则所述中间帧模块使用动态时间帧补偿渲染,动态时间帧补偿渲染由异步时间扭曲技术和动态时间帧补偿渲染系统组成,在用户下一时刻的视线区域角度变化非常小时,利用异步时间扭曲技术可以停止渲染新的画面,由当前渲染好的单帧图像计算出各个朝向的新画面,作为下一帧并发送给所述显示模块。

可选地,该基于移动端的虚拟现实图像处理系统还包括:同步控制模块;

所述同步控制模块,用于控制中间帧模块、多层次渲染模块以及显示模块同步,在中间帧模块计算出各个朝向的新画面作为下一帧时,采用同步信号控制显示模块获取中间帧模块中的帧进行显示。

可选地,所述显示模块利用摄像头拍摄的用户的脸部图像确定用户的运动信息,根据用户在运动时头部和眼部的关系,从移动端陀螺仪中获取的四元数计算用户左右眼的中心视角矩阵,通过左右眼的中心视角矩阵计算出左眼和右眼的中心偏移矩阵,并且通过偏移矩阵和头部的旋转矩阵可以得到左右眼的转换矩阵,根据左右眼的转换矩阵计算得到左右眼视角矩阵,通过左右眼视角矩阵对多层次渲染模块和中间帧模块发送的图像进行分屏变换后显示给用户。

可选地,所述视线计算模块采用viola-jones算法获取用户脸部图像中人眼位置,并采用以下步骤确定定位瞳孔的位置:

随机选取人眼中不在同一条直线上的四个点,使用其中的三个点来确定一个圆的方程,第四个点代入到圆方程中来判断该圆是不是候选圆,如果是候选圆,再选取其他点来进行投票,通过最后的投票结果来判断是不是圆,假设使用四个点中的三个点确定的圆为c123,圆心和半径分别为(a123,b123),r123,可以根据第四个点到圆心的距离来判断圆是不是候选圆:

其中d4→123表示第四个点到圆心的距离,(x4,y4)表示第四个点的坐标。

将检测圆的直径限制在9mm到18mm之间,当检测到的圆的个数达到两个时就结束检测;

根据检测到的两个圆获取左右瞳孔的中心坐标点(xl,yl)和(xr,yr);

确定左眼瞳孔的中心点(xl,yl)距离左眼眼眶的右侧水平距离dl,右侧瞳孔中心点(xr,yr)距离右眼眼眶的左侧水平距离dr,预设距离差δx,若|dl-dr|<=δx,则用户视线区域位于移动端屏幕的中间区域,若dl-dr>δx,此时左右瞳孔都离左侧眼眶近,则用户视线区域位于移动端屏幕的左边区域,若dr-dl>δx,则用户视线区域位于移动端屏幕的右边区域。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:

本发明基于眼部识别和多层次渲染以及动态中间帧生成技术,提出一种虚拟现实图像处理系统,采取局部渲染的方式降低对运算资源的要求,只对用户观看的部分进行渲染。同时使用中间帧技术来动态的生成中间帧弥补帧率下降、卡顿以及重影等不良的视觉感受。

本发明中的间帧技术使用动态时间帧补偿渲染,动态时间帧补偿渲染由异步时间扭曲技术和动态时间帧补偿渲染系统组成,在角度变化非常小,利用异步时间扭曲技术可以停止渲染新的画面,完全由单帧图像计算出各个朝向的新画面。因此并不需要存放所有的时间帧,只要在内存中保存关键的时间帧,再利用异步时间扭曲技术在关键时间帧上计算出各个朝向的新画面,这样既可以节约内存空间,也可以节约渲染时间。

附图说明

图1为本发明提供的虚拟现实图像处理系统结构图;

图2为本发明提供的移动端屏幕划分区域示意图;

图3为本发明提供的左右眼瞳孔坐标示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本发明提供一种虚拟现实设备和虚拟现实图像处理方法。对于复杂的三维场景数据用累进网格算法中的边折叠算法进行简化,在移动手机等移动端,存放对应的基本数据和变换矩阵。通过移动端如智能手机的前置摄像头获取用户脸部图像,识别提取眼部信息,并结合移动手机的陀螺仪获取头部运动数据,计算出人眼的视锥体区域,对视锥体区域内的部分使用累进网格算法中的点分裂算法获得高层网格数据,这样可以在任何时刻保证人眼看到的区域都是清晰的,而对于视锥体之外的区域只保存底层网格这样既能节省内存又能快速处理三维场景模型。

本发明使用中间帧来解决在移动端进行vr播放帧率不够而引起的缺帧等问题。中间帧技术是通过现有的关键帧结合用户的头部和眼部变换动态生成变换矩阵,来动态的生成过渡帧。在保证位置不变的情况下,把渲染完的画面根据最新获取的传感器朝向信息计算出一帧新的画面,再提交到显示屏。由于角度变化非常小,所以边缘不会出大面积的像素缺失情况。可以停止渲染新的画面,完全由单帧图像计算出各个朝向的新画面。

图1为本发明提供的虚拟现实图像处理系统结构图,如图1所示,包括视线计算模块1、多层次渲染模块2、中间帧模块3、同步控制模块4以及显示模块5。

视线计算模块1控制移动端的摄像头实时获取用户脸部图像,通过用户脸部图像实时确定用户瞳孔位置,并根据用户瞳孔位置确定用户视线区域,视线区域不占满所述移动端的整个显示屏。

多层次渲染模块2用于通过累进网格算法中的点分裂算法对视线区域内待播放图像的底层数据进行点分裂得到高层网格数据,通过累进网格算法中的边折叠算法处理视线区域以外待播放图像的底层数据的得到底层网格数据。

显示模块5将多层次渲染模块和中间帧模块处理后的待播放图像数据分屏变换后显示给用户,使用户看到虚拟现实的图像。

视线计算模块1根据摄像头实时获取的用户脸部图像信息确定用户的眼部运动数据和头部运动数据,并根据用户眼部运动数据和头部运动数据预测用户下一时刻的视线区域。在移动端播放虚拟现实视频时,若多层次渲染模块无法在规定时间内渲染完成下一帧图像,则中间帧模块3使用动态时间帧补偿渲染,动态时间帧补偿渲染由异步时间扭曲技术和动态时间帧补偿渲染系统组成,在用户下一时刻的视线区域角度变化非常小时,利用异步时间扭曲技术可以停止渲染新的画面,由当前渲染好的单帧图像计算出各个朝向的新画面,作为下一帧并发送给显示模块5。

同步控制模块4控制中间帧模块、多层次渲染模块以及显示模块同步,在中间帧模块计算出各个朝向的新画面作为下一帧时,采用同步信号控制显示模块获取中间帧模块中的帧进行显示。

显示模块5利用摄像头拍摄的用户的脸部图像确定用户的运动信息,根据用户在运动时头部和眼部的关系,从移动端陀螺仪中获取的四元数计算用户左右眼的中心视角矩阵,通过左右眼的中心视角矩阵计算出左眼和右眼的中心偏移矩阵,并且通过偏移矩阵和头部的旋转矩阵可以得到左右眼的转换矩阵,根据左右眼的转换矩阵计算得到左右眼视角矩阵,通过左右眼视角矩阵对多层次渲染模块2和中间帧模块3发送的图像进行分屏变换后显示给用户。

视线计算模块1由眼部数据获取模块11和头部数据获取模块22组成,眼部数据获取模块11由移动端前置摄像头实时获取人眼图像,并且计算人眼数据。头部数据获取模块12通过移动端的陀螺仪来实时获取头部数据,结合眼部数据和头部数据能更加人眼数据。

多层次渲染模块2通过眼部数据获取模块11数据得到人眼能看到的屏幕上显示的区域,对屏幕上人眼范围内部区域进行通过累积网格算法中的点分裂算法对底层数据进行点分裂得到高层网格数据,使得人眼观察区域内任何时候都是高层网格数据。同时区域之外是底层网格数据。

中间帧模块3由中间帧预测模块31和中间帧计算模块32组成,中间帧预测模块31通过视线计算得到的头部数据和眼部数据来计算预测矩阵,中间帧计算模块32通过预测矩阵和现有的关键帧来计算产生过渡帧。中间帧模块在显示模块的同步控制信号下从gpu中获取最新渲染完还未现实的帧。根据中间帧预测模块计算的变换矩阵异步对gpu中获取的一帧进行扭曲变换,在同步控制模块的同步信号的控制下,显示模块5获取中间帧中的帧进行显示。

具体地,视线计算模块通过摄像头获取到的用户脸部图像实时估计用户的视线方向,从移动摄像头获取的数据中将人眼视线的方向转换到移动端屏幕对应的区域。视线计算模块需要视线两个方面的功能。首先是识别视频中的人脸图像并且计算人眼区域,通过人眼区域得到人眼瞳孔的坐标,根据计算出瞳孔坐标系与移动端屏幕坐标系之间的关系。视线计算模块的工作流程如下:

(1)人脸识别与眼眶定位

人脸识别和人眼定位采用的是viola-jones算法,通过viola-jones算法来检测移动端前置摄像头获取的图像进行人眼定位和选择出人眼位置。

(2)瞳孔中心定位

对上面算法检测到的人眼区域使用改进随机圆检测算法来定位瞳孔的位置。

随机圆检测算法的思想是:随机选取不在同一条直线上的四个点,使用其中的三个点来确定一个圆的方程,第四个点代入到圆方程中来判断该圆是不是候选圆。如果是候选圆,再选取其他点来进行投票,通过最后的投票结果来判断是不是圆。在随机圆检测算法中,假设使用四个点中的三个点确定的圆为c123,圆心和半径分别为(a123,b123),r123。可以根据第四个点到圆心的距离来判断圆是不是候选圆,如以下公式:

其中d4→123表示第四个点到圆心的距离,(x4,y4)表示第四个点的坐标。

使用随机圆检测算法时,把检测圆的总数限制在两个,当检测到的圆的个数达到两个时就结束检测,一般人眼附近的圆检测出来只有两个,由于人瞳孔的平均大小为12mm因此将检测圆的直径限制在9mm到18mm之间,这样也可以节约大量的检测时间。使用随机圆检测算法检测到左右瞳孔后,获取左右瞳孔的中心坐标点(xl,yl)和(xr,yr)。瞳孔检测时可能出现检测不到瞳孔,或者只检测到一个瞳孔,或者多个瞳孔的情况,在此种情况下使用默认的瞳孔的坐标值。

(3)计算人眼观察到的屏幕上对应的区域

本系统中将虚拟现实移动端屏幕分成6个区域,其中左眼和右眼个对应3个区域如图2所示。

根据左眼瞳孔在眼眶中位置确定左眼在屏幕上对应的的左边、中间、右边的位置。由于vr头戴设备的特性,人脸和虚拟现实显示屏幕以及摄像头在系统运行状态下都是平行的,因此可以通过改进的随机霍夫曼圆拟合可以计算出眼眶中左右眼的坐标,随机霍夫曼圆拟合计算出的左眼瞳孔的中心点(xl,yl)并且计算出距离左眼眼眶的右侧水平距离为dl,右侧瞳孔中心点(xr,yr)距离右眼眼眶的左侧水平距离为dr,由dl和dr的关系可以确定人眼视线在屏幕上对应区域如图3所示。

(1)|dl-dr|<=δx,此时可知人眼视线位于移动端屏幕的中间位置。

(2)dl-dr>δx,此时左右瞳孔都离左侧眼眶近,此时可知眼部视线对应在移动端屏幕的左边。

(3)dr-dl>δx,此时左右瞳孔都离右侧眼眶近,此时可知眼部视线对应在移动端屏幕的右边。

具体地,多层次计算模块根据物体模型节点在虚拟现实显示中所处的位置和重要性来决定物体渲染资源的分配,降低非重要物体的面数和细节度,从而提高渲染的效率。

目前多层次计算主要的代表算法有经典的lod算法,还有hoppe累进网格算法,以及顶点聚类算法等。本系统中采用累进网格算法来实现多层次计算,通过视线计算模块计算得到的人眼视线所在的区域对屏幕上的不同区域的模型进行不同层次的网格处理。

在虚拟现实系统中,需要在显示器上的定时更新图像,如果渲染时间太长,帧就会丢失了,产生的结果就是抖动。新的一帧图像还没有被渲染出来,显示器显示了上一帧的图像,如果一帧图像被两次渲染就会产生重影。在用户头部角度变化非常小时,可以利用中间帧技术从内存中选择已经渲染好,但是还没有显示的帧进行计算得到新的一帧。因此并不需要存放所有的时间帧,只要在内存中保存关键的时间帧,再利用中间帧技术在关键时间帧上计算出各个朝向的新画面,这样既可以节约空间,也可以节约渲染时间。

常规的中间帧生成技术需要输入两幅图像a和b,通过计算通过a和b进行相应的插值算法生成中间帧,而vr中由于是实现要求高,只能通过单幅图像来生成中间帧。vr中间帧生成技术,当vr视频的下一帧无法在规定时间内渲染完成时,该技术根据当前已经渲染好的帧及当前头盔的状态生成下一帧进行填充。在保证位置不变的情况下,把渲染完的画面根据最新获取的传感器朝向信息计算出一帧新的画面,再提交到显示屏。

时间扭曲是一种图像帧修正的技术,在使用虚拟现实眼镜设备时,由于头部运动过快,而造场景渲染的延迟,即头已经转过去了,但是图像还没有渲染出来,或者渲染的是上一帧的图像,时间扭曲它通过扭曲一副被送往显示器之前图像,来解决这个延迟问题。最基础的时间扭曲是基于方向的扭曲,这种只纠正了头部的转动变化姿势,这种扭曲对于2d图像是有优势的,它合并一副变形图像不需要花费太多系统资源。对于复杂的场景,它可以用较少的计算生成一个新的图像帧。

异步时间扭曲是指在一个线程即atw线程中进行处理,这个线程和渲染线程平行异步运行,在每次同步之前,atw线程根据渲染线程的最后一帧生成一个新的帧。在虚拟现实设备中,为了正确在虚拟世界里呈现一个人们的感知,必须要在显示器上的定时更新图像,然而,如果渲染时间太长,一帧就会丢失了,产生的结果就是抖动,这是由于新的一帧图像还没有被渲染出来,显示器显示了上一帧的图像,如果一帧图像被两次渲染,就会出现重影。异步时间扭曲算法的思想:获取用户头部运动数据,通过计算分析出用户头部下一时刻可能出现的位置来生成相应的图片。

本发明中间帧模块的工作流程如下:

(1)通过视线计算模块产生的眼部数据和头部数据计算预测矩阵。通过gpu中的单帧图像计算出各个朝向的新画面。因此并不需要存放所有的时间帧,只要在内存中保存关键的时间帧,再利用异步时间扭曲技术在关键时间帧上计算出各个朝向的新画面,这样既可以节约空间,也可以节约渲染时间。

(2)当vr视频的下一帧无法在规定时间内渲染完成时,该技术根据当前已经渲染好的帧及当前头盔的状态生成下一帧进行填充。在保证位置不变的情况下,把渲染完的画面根据最新获取的传感器朝向信息计算出一帧新的画面,再提交到显示屏。由于角度变化非常小,所以边缘不会出大面积的像素缺失情况。可以停止渲染新的画面,完全由单帧图像计算出各个朝向的新画面。

(3)渲染线程平行运行,在每次同步之前,atw线程根据渲染线程的最后一帧生成一个新的帧。通过视线计算模块得到的计算预测矩阵计算分析出用户头部下一时刻可能出现的位置来生成相应的场景。

本发明同步模块的工作流程如下:

1)中间帧在同步模块的同步控制信号下从gpu中获取最新渲染完还未现实的帧。

2)根据中间帧预测模块计算的变换矩阵异步对gpu中获取的一帧进行扭曲变换。

3)在同步模块的同步信号的控制下,显示模块获取中间帧模块中的帧进行显示。

由于人左右眼看到的图片存在一定的角度偏差,再经过大脑处理左右眼图片后,才能在大脑中形成立体图像必须对移动端显示屏幕进行分屏处理,分屏处理的方式是对同一幅图像进行计算得到两幅不同的图像,这两幅图像满足人眼的立体视差原理,用户观看时左右眼图像互不干扰,右眼只能看到右边的图像,左眼只能看到左边图像。

本发明显示模块的工作流程如下:

(1)获取移动端在头部运动时陀螺仪产生的四元数。

(2)根据用户在运动时头部和眼部的关系,可以从移动端陀螺仪中获取的四元数来计算出左右眼的中心视角矩阵。

(3)通过得到的左右眼的中心视角矩阵可以计算出左眼和右眼的中心偏移矩阵,并且通过偏移矩阵和头部的旋转矩阵可以得到左右眼的转换矩阵。

(4)根据左右眼的转换矩阵可以计算得到左右眼视角矩阵,然后根据左右眼视角矩阵计算出对多层次渲染模块和中间帧模块发送的图像进行分屏变换后,得到左右眼对应屏幕上的图像并显示给用户。

在一个示例中,计算左右眼图像的具体步骤如下:

步骤一:根据视线计算模块得到的眼部数据和头部数据计算计算出人眼中心视点矩阵,随着头部的转动会产生一个四元数,这个四元数由移动端陀螺仪检测得到。

步骤二:结合眼部姿态数据和头部姿态数据计算得到双眼中心旋转矩阵。

步骤三:将旋转矩阵和偏移矩阵相乘,得到双眼中心的转换矩阵。求其逆矩阵,得到双眼中心视点矩阵。

步骤四:根据双眼中心视角矩阵计算出左右眼视角矩阵。对同一个vr场景,实际上左右眼看到的图像是有差异的。这个差异要在绘制的时候,通过改变camera的位置来体现。通过得到的左右眼视觉矩阵计算出左右眼对应的camera的视角矩阵。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1