首页> 中国专利> 一种基于图形处理器分区模糊的实时景深模拟方法

一种基于图形处理器分区模糊的实时景深模拟方法

摘要

本发明公开了一种基于图形处理器分区模糊的实时景深模拟方法,包括以下步骤:(1)将待处理的图像转换为GPU可处理的文件形式;(2)对图像的特定信息进行处理;(3)根据图像的特定信息对图像进行分区模糊处理,根据特定信息来决定图像在不同区域采用不同的模糊半径,从而模拟出景深效果。本发明充分利用GPU的并行性和可编程能力,在渲染时将场景存为纹理,将大量代数运算从CPU转移至GPU,不仅释放了CPU,而且减少了CPU与GPU的通信量,大大提高了景深模拟的速度;分区模糊算法直接对原图进行处理,省去了传统算法模糊图与原图融合的步骤,进一步提高了景深模拟的精确度;图像更加清晰细腻,更接近于真实摄像机拍摄的景深效果图,适用于虚拟现实系统。

著录项

  • 公开/公告号CN103093416A

    专利类型发明专利

  • 公开/公告日2013-05-08

    原文格式PDF

  • 申请/专利权人 成都索贝数码科技股份有限公司;

    申请/专利号CN201310031589.7

  • 发明设计人 盛志明;余刚;

    申请日2013-01-28

  • 分类号G06T1/20(20060101);G06T5/00(20060101);

  • 代理机构成都金英专利代理事务所(普通合伙);

  • 代理人袁英

  • 地址 610041 四川省成都市高新区新加坡工业园新元大道南二路2号

  • 入库时间 2024-02-19 19:06:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-25

    授权

    授权

  • 2013-06-12

    实质审查的生效 IPC(主分类):G06T1/20 申请日:20130128

    实质审查的生效

  • 2013-05-08

    公开

    公开

说明书

技术领域

本发明涉及一种基于图形处理器分区模糊的实时景深模拟方法。

背景技术

景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像景深相机器轴线所测定的物体距离范围。在聚焦完成后,在焦点前后的范围内都能形成清晰的像,这一前一后的距离范围,便叫做景深。在镜头前方(调焦点的前、后)有一段一定长度的空间,当被摄物体位于这段空间内时,其在底片上的成像恰位于焦点前后这两个弥散圆之间。被摄体所在的这段空间的长度,就叫景深。换言之,在这段空间内的被摄体,其呈现在底片面的影像模糊度,都在容许弥散圆的限定范围内,这段空间的长度就是景深。

景深是人眼视觉系统中成像的重要特征。人眼对现实世界成像时,自动调节焦距以适应不同的取景距离,眼睛注视的物体便处于聚焦平面(focus plane)上,因此,清晰成像于视网膜;而处于聚焦平面之外的物体,成像便模糊不清。透镜(瞳孔)的焦距、直径,以及物距共同决定了物体成像时的模糊程度。这样,加入了景深效果的整个场景则显得真实、自然,并且能够得到由景深所带的深度暗示。有助于立体照片的合成以及缓解虚拟现实系统中常有的眼睛疲劳,增强场景的真实感、沉浸感。

近年来,在计算机图形学领域中出现了许多关于景深渲染的算法研究,这些算法主要归为以下三类:

a)后处理滤波:其算法采用标准针孔相机模型渲染场景,并输出每个像素的深度值z;根据深度值z、光圈、焦距等将每个采样点转换为不同大小、强度分布的模糊圈(CoC);每个像素的最终值由覆盖它的所有模糊圈的加权平均值确定。Potmesil采用了Lommel强度分布函数计算点对周围像素的影响;Chen也采用了类似的方法来计算强度分布;周强等人采用了均值滤波得到模糊图像,再与清晰图像融合,实时地模拟了景深效果。Potmesil和Chen的算法都是采用软件实现,运算全由CPU负担,运行时间较长,难以满足虚拟现实等高实时性的要求。Rokita提出使用特殊的数字硬件滤波器以加速DoF效果的产生,它采用多次高斯卷积滤波将像素值融合到周围像素中,达到模糊的效果,由于采用了卷积滤波技术,引起像素的强度渗漏,引起前后景物体混合模糊、聚焦面上的物体与前景或后景的模糊物体混合模糊等。周强等人的算法虽满足实时性,但均值滤波会引起强度渗漏,且融合时未考虑模糊圈内的像素,精度不高。

b)多次渲染:其采用针孔相机模型,通过每次细微地改变投影中心,并保持聚焦面不变,然后将渲染结果累积保存,最终便得到一幅具有景深效果的图像图。但是,多次渲染所得的景深效果重影较重,缺乏真实感。

c)反向光线跟踪:此类算法仅限于几何场景,并采用真实透镜模型,因此,速度难以满足虚拟现实系统的要求。

目前,很多算法需要大量的计算或缺乏精度,而传统景深算法的大量代数运算均由CPU完成,大大限制了景深模拟的速度;此外,传统的分区模糊算法需要进行的模糊图与原图混合的步骤,降低了景深模拟的精确度。

发明内容

本发明的目的在于克服现有技术的不足,提供一种新型的基于图形处理器分区模糊的实时景深模拟方法,利用GPU的并行性和可编程能力,将大量代数运算从CPU转移至GPU,不仅释放了CPU,而且减少了CPU与GPU的通信量,大大提高了景深模拟的速度;同时,分区模糊算法直接对原图进行处理,省去了传统算法需要进行的模糊图与原图混合的步骤,进一步提高了景深模拟的精确度。

本发明的目的是通过以下技术方案来实现的:一种基于图形处理器分区模糊的实时景深模拟方法,它包括以下步骤:

S1:将待处理的图像转换为图形处理器GPU可以处理的文件形式,充分利用图形处理器GPU的并行性和可编程能力将大量代数运算从中央处理器CPU转移到图形处理器GPU; 

S2:对图像的特定信息进行处理;

S3:根据图像的特定信息对图像进行分区模糊处理,根据特定信息来决定图像在不同区域采用不同的模糊半径,从而模拟出景深效果。

以水平模糊为例,模糊的方法是采用当前象素点与其左右两边附近的两个象素点进行混合,若所取的两个象素点离当前象素越近,则模糊程度越小,画面越清晰;反之则模糊程度越大,画面越模糊。因此,可以通过控制模糊函数中左右两边象素点的距离来实现不同程度的模糊效果。

将待处理的图像转换为图形处理器GPU可以处理的文件形式的一种方法为:将待处理的图像转换为图形处理器GPU可以处理的纹理数据。

进一步地,将待处理的图像转换为图形处理器GPU可以处理的纹理数据的步骤为:使用DirectX提供的函数“D3DX11CreateTextureFromFile”将待处理的图像转换为图形处理器GPU可以处理的纹理数据。

将待处理的图像转换为图形处理器GPU可以处理的文件形式的另一种方法包括以下步骤:

A:将待处理的图像读入内存;

B:用OpenGL或DirectX提供的函数将内存里的数据上行到图形处理器GPU中。

所述的特定信息包括图像的深度信息(简称:Z信息)。

进一步地,对图像的深度信息进行处理的步骤包括以下两方面:

(1)对于三维场景,直接使用图像的深度信息;

(2)对于二维场景,通过对二维场景进行处理,获取其深度信息。

进一步地,对二维场景进行处理获取其深度信息的步骤包括:对二维场景以图像垂直中心轴Y轴进行旋转,旋转后,除了图像垂直中心轴上的象素值对应的深度值与旋转前二维场景对应的深度值相同,其它值均不与旋转前二维场景对应的深度值相同。假设不旋转时二维场景对应的Z值为0,那么旋转后,除了图像垂直中心轴上的象素值对应的Z值为0外,其它值都不为0。

对于二维场景,不一定要使用Z信息,也可以手动设置模糊半径。可以根据用户的不同需求,实现各种不同的景深效果。例如:在场景上画一个圆,规定圆内的模糊半径为0,圆外模糊半径呈线性增强,便可以出现圆圈里画面清晰,而离圆越远的图像越模糊的景深效果。 

本发明的有益效果是:

1)充分利用GPU的并行性和可编程能力,在渲染时将场景存为纹理,将大量代数运算从CPU转移至GPU,不仅释放了CPU,而且减少了CPU与GPU的通信量,大大提高了景深模拟的速度;

2)自行设计的分区模糊算法直接对原图进行处理,省去了传统算法需要进行的模糊图与原图融合的步骤,进一步提高了景深模拟的精确度;

3)图像更加清晰细腻,更接近于真实摄像机拍摄的景深效果图,适用于虚拟现实系统。

附图说明

图1为本发明实时景深模拟方法流程图;

图2为经过Blur函数后周围像素所占权重的图。

具体实施方式

下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。

如图1所示,一种基于图形处理器分区模糊的实时景深模拟方法,它包括以下步骤:

S1:将待处理的图像转换为图形处理器GPU可以处理的文件形式,充分利用图形处理器GPU的并行性和可编程能力将大量代数运算从中央处理器CPU转移到图形处理器GPU;

将待处理的图像转换为图形处理器GPU可以处理的文件形式的一种方法为:将待处理的图像转换为图形处理器GPU可以处理的纹理数据。

进一步地,将待处理的图像转换为图形处理器GPU可以处理的纹理数据的步骤为:使用DirectX提供的函数“D3DX11CreateTextureFromFile”将待处理的图像转换为图形处理器GPU可以处理的纹理数据。

将待处理的图像转换为图形处理器GPU可以处理的文件形式的另一种方法包括以下步骤:

A:将待处理的图像读入内存;

B:用OpenGL或DirectX提供的函数将内存里的数据上行到图形处理器GPU中。 

S2:对图像的特定信息进行处理;

特定信息包括图像的深度信息(简称:Z信息),进一步地,对图像的Z信息进行处理的步骤包括以下两方面:

(1)对于三维场景,直接使用图像的深度信息;

(2)对于二维场景,通过对二维场景进行处理,获取其深度信息。

进一步地,对二维场景进行处理获取其深度信息的步骤包括:对二维场景以图像垂直中心轴Y轴进行旋转,旋转后,除了图像垂直中心轴上的象素值对应的深度值与旋转前二维场景对应的深度值相同,其它值均不与旋转前二维场景对应的深度值相同。假设不旋转时二维场景对应的Z值为0,那么旋转后,除了图像垂直中心轴上的象素值对应的Z值为0外,其它值都不为0。

对于二维场景,不一定要使用Z信息,也可以手动设置模糊半径。可以根据用户的不同需求,实现各种不同的景深效果。例如:在场景上画一个圆,规定圆内的模糊半径为0,圆外模糊半径呈线性增强,便可以出现圆圈里画面清晰,而离圆越远的图像越模糊的景深效果。

S3:根据图像的特定信息对图像进行分区模糊处理,根据特定信息来决定图像在不同区域采用不同的模糊半径,从而模拟出景深效果。

以水平模糊为例,模糊的方法是采用当前象素点与其左右两边附近的两个象素点进行混合,若所取的两个象素点离当前象素越近,则模糊程度越小,画面越清晰;反之则模糊程度越大,画面越模糊。因此,可以通过控制模糊函数中左右两边象素点的距离来实现不同程度的模糊效果。

该分区模糊处理算法适合GPU,图像模糊程度是通过做模糊函数的次数来决定的,而每次模糊函数的模糊半径不同,如图2所示,给出了经过Blur函数后周围像素所占权重的图。

模糊函数的次数可以用log(1.f + nBlurRadius) / log(2.f)进行计算,这样可以保证:过最后一次模糊函数时处理的是本像素点最近的两个点。

1: float txSize[2] = {nBlurRadius/width, nBlurRaidus/height};

2: int nPassCount = log(1.f + nBlurRadius)/log(2.f);

3: for (i = 0; i < nPassCount; i++)

4:{

5: txSize *= pow(0.5f, i);

6: oColor = 0.5f * tex2D(samColor, vTex);

7: oColor += 0.25f * tex2D(samColor, vTex + txSize);

8: oColor += 0.25f * tex2D(samColor, vTex – txSize);

9: }

以设定的焦距点为原点,模糊半径越来越大,也就是离焦距点越远的地方,模糊程度越高。只需要在上面伪代码的第5行后加一句即可根据Z信息来实现分区模糊。

txSize = (fFocus + vPoint.z) * txSize;

其中,vPoint.z表示当前点的Z信息。 

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号