一种基于OpenGL实现景深效果的方法

文档序号:6438865阅读:1553来源:国知局
专利名称:一种基于OpenGL实现景深效果的方法
技术领域
本发明涉及图像/视频处理领域,尤其涉及一种基于OpenGL实现景深效果的方法。
背景技术
景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像景深相机器轴线所测定的物体距离范围。在聚焦完成后,在焦点前后的范围内都能形成清晰的像,这一前一后的距离范围,便叫做景深。在镜头前方(调焦点的前、后)有一段一定长度的空间,当被摄物体位于这段空间内时,其在底片上的成像恰位于焦点前后这两个弥散圆之间。被摄体所在的这段空间的长度,就叫景深。换言之,在这段空间内的被摄体,其呈现在底片面的影象模糊度,都在容许弥散圆的限定范围内,这段空间的长度就是景深。在图像/视频处 理软件中,经常要用到三维合成器来实现许多三维合成效果,在真实的三维世界中,景深是很重要的效果,因此景深的实现在三维合成器中是不可或缺的。像素深度是指存储每个像素所用的位数,它也是用来度量图像的分辨率。像素深度决定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。例如,一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那么一个像素共用24位表示,就说像素的深度为24,每个像素可以是16 777 216 (2的24次方)种颜色中的一种。在这个意义上,往往把像素深度说成是图像深度。表示一个像素的位数越多,它能表达的颜色数目就越多,而它的深度就越深。虽然像素深度或图像深度可以很深,但各种VGA的颜色深度却受到限制。例如,标准VGA支持4位16种颜色的彩色图像,多媒体应用中推荐至少用8位256种颜色。由于设备的限制,加上人眼分辨率的限制,一般情况下,不一定要追求特别深的像素深度。此外,像素深度越深,所占用的存储空间越大。相反,如果像素深度太浅,那也影响图像的质量,图像看起来让人觉得很粗糙和很不自然。在用二进制数表示彩色图像的像素时,除R,G,B分量用固定位数表示外,往往还增加I位或几位作为属性(Attribute)位。例如,RGB 5:5:5表示一个像素时,用2个字节共16位表示,其中R,G,B各占5位,剩下一位作为属性位。在这种情况下,像素深度为16位,而图像深度为15位。属性位用来指定该像素应具有的性质。例如在CD-I系统中,用RGB 5:5:5表示的像素共16位,其最高位(bl5)用作属性位,并把它称为透明(Transparency)位,记为T。T的含义可以这样来理解假如显示屏上已经有一幅图存在,当这幅图或者这幅图的一部分要重叠在上面时,T位就用来控制原图是否能看得见。例如定义T = 1,原图完全看不见;T = 0,原图能完全看见。在用32位表示一个像素时,若R,G,B分别用8位表示,剩下的8位常称为a通道(alpha channel)位,或称为覆盖(overlay)位、中断位、属性位。它的用法可用一个预乘a通道(premultiplied alpha)的例子说明。假如一个像素(A, R, G, B)的四个分量都用规一化的数值表示,(A,R,G,B)为(1,1,0,0)时显示红色。当像素为(0.5,1,0,0)时,预乘的结果就变成(0.5,0.5,0,0),这表示原来该像素显示的红色的强度为1,而现在显示的红色的强度降了一半。用这种办法定义一个像素的属性在实际中很有用。例如在一幅彩色图像上叠加文字说明,而又不想让文字把图覆盖掉,就可以用这种办法来定义像素,而该像素显示的颜色又有人把它称为混合色(key color)。在图像产品生产中,也往往把数字电视图像和计算机生产的图像混合在一起,这种技术称为视图混合(video keying)技术,它也采用a通道。泊松分布(Poisson distribution),是一种统计与概率学里常见到的离散机率分布(discrete probability distribution),由法国数学家西莫恩 德尼 泊松(Simeon-Denis Poisson)在 1838 年时发表。Mpmap是一种电脑图形图像技术,用于在三维图像的二维代替物中达到立体感效应。Mipmap技术与材质帖图技术结合,根据距观看者远近距离的不同,以不同的分辨率将单一的材质帖图以多重图像的形式表现出来并代表平面纹理尺寸最大的图像放在前面显著 的位置,而相对较小的图像则后退到背景区域。每一个不同的尺寸等级定义成一个Mipmap水平。Mipmap技术帮助避免了不想要的锯齿边缘(称为锯齿状图形)在图像中出现,这种锯齿状图形可能是由于在不同分辨率下使用bit map图像产生的。在基于OpenGL实现景深效果时,把场景的深度信息和场景分别渲染到一张纹理中,然后通过模糊处理后合成新的场景,新的场景中就带有了景深效果。发明人在完成本发明的过程,发现现有技术存在以下不足实现景深的效率低,尤其是在做模糊处理的过程中,高斯模糊处理的方法效率非常低;实现景深的效果不理想,因为泊松分布采样具有不确定性,限制了景深实现的效果。

发明内容
本发明实施例提供了一种基于OpenGL实现景深效果的方法,本发明的实施例中,通过基于OpenGL的Mipmap原理与泊松分布结合,计算不同层级的图像场景信息,实现景深的效果。本发明实施例提供了一种基于OpenGL实现景深效果的方法,包括以下步骤获取图像的原始色彩缓存信息,所述原始色彩缓存信息包括深度缓存信息和色彩缓存息;根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息;计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息;根据所述原始色彩缓存信息、所述新的色彩缓存信息、所述像素点的泊松分布圆直径和所述图像层级信息计算最终的色彩缓存信息;根据所述最终的色彩缓存信息对所述图像进行渲染,实现景深效果。所述获取图像的原始色彩缓存信息前,包括判断图像处理设备是否开启深度缓存且摄像机为渲染模式。所述获取图像的原始色彩缓存信息,包括若开启了深度缓存且摄像机为渲染模式,获取所述深度缓存信息和所述色彩缓存信息;
将所述深度缓存信息和所述色彩缓存信息绑定到指定的纹理中。所述根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息,包括以下步骤A、根据所述深度缓存信息和所述色彩缓存信息计算焦距深度B、用所述焦距深度替换所述原始色彩缓存信息中alpha通道的值,得到运算色彩缓存息;C、将所述运算色彩缓存信息绑定到指定的纹理中,生成所述新的色彩缓存信息。所述根据所述深度缓存信息和所述色彩缓存信息计算焦距深度,具体包括计算像素点与虚拟视点的距离distance = farPlane^nearPlane/((1-depth)*farPlane+depth*nearPlane) 其中,distance为像素点与虚拟视点的距离,farPlane为所述摄像机的远平面,nearPlane为所述摄像机的近平面,depth为像素深度;计算焦距深度d = distance-focalPlaneDistance ;如果 d < 0, focalDepth = d/ (focalPlaneDistance-nearBlurDistance);如果d > 0 或者 d = 0, focalDepth = d/ (farBlurDistance-focalPlaneDistance);其中,d为像素点平面与焦距平面的距离,focalPlaneDistance为焦距平面距离,focalDepth为焦距深度,nearBlurDi stance为最近模糊平面距离,f arBlurDi stance为最远模糊平面距离。所述计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息,包括计算泊松分布圆直径discDiameter = abs(focalDepth*2_l)*maxCoC ;其中,discDiameter为像素点级泊松分布圆直径,maxCoC为最大泊松分布圆直径;计算层级信息Iod= log2 (discDiameter);其中Iod为层级信息。本发明的实施例中,通过基于OpenGL的Mipmap原理与泊松分布结合,计算不同层级的图像场景信息实现景深,提高了实现景深的效率和效果。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图I是本发明一种基于OpenGL实现景深效果的方法的流程图;图2是本发明实施例中一种基于OpenGL实现景深效果的方法的流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普 通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例一提供了一种基于OpenGL实现景深效果的方法,如图I所示,包括以下步骤步骤S101,获取图像的原始色彩缓存信息,所述原始色彩缓存信息包括深度缓存Ih息和色彩缓存息。步骤S102,根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息。步骤S103,计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息。步骤S104,根据所述原始色彩缓存信息、所述新的色彩缓存信息、所述像素点的泊松分布圆直径和所述图像层级信息计算最终的色彩缓存信息。步骤S105,根据所述最终的色彩缓存信息对所述图像进行渲染,实现景深效果。本发明的实施例中,通过基于OpenGL的Mipmap原理与泊松分布结合,计算不同层级的图像场景信息实现景深,提高了实现景深的效率和效果。本发明实施例二提供了一种基于OpenGL实现景深效果的方法,如图2所示,包括以下步骤步骤S201,判断所述图像处理设置的缓存信息是否开启,所述摄像机是否为渲染模式;若开启了深度缓存且摄像机为渲染模式,获取所述深度缓存信息和色彩缓存信息,继续执行步骤S202 ;否则继续执行步骤S201。步骤S202,获取图像的原始色彩缓存信息,所述原始色彩缓存信息包括深度缓存信息和色彩缓存信息,将所述深度缓存信息和所述色彩缓存信息绑定到指定的纹理中。步骤S203,根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息,具体包括A、根据所述深度缓存信息和所述色彩缓存信息计算焦距深度,包括计算像素点与虚拟视点的距离,如公式I所示distance = farPlane^nearPlane/((1-depth)*farPlane+depth*nearPlane)(I)其中,distance为像素点与虚拟视点的距离,farPlane为所述摄像机的远平面,nearPlane为所述摄像机的近平面,depth为像素深度;计算焦距深度,如公式2至4所示d = distance-focalPlaneDistance(2)如果d < 0,focalDepth = d/(focalPlaneDistance-nearBlurDistance) (3)如果d > 0 或者 d = 0,
focalDepth = d/(farBlurDistance-focalPlaneDistance)(4)其中,d为像素点平面与焦距平面的距离,focalPlaneDistance为焦距平面距离,focalDepth为焦距深度,nearBlurDi stance为最近模糊平面距离,farBlurDi stance为最远模糊平面距离;B、用所述焦距深度替换所述原始色彩缓存信息中alpha通道的值,得到运算色彩缓存息;C、将所述运算色彩缓存信息绑定到指定的纹理中,生成所述新的色彩缓存信息。步骤S204,计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息,包括计算泊松分布圆直径,如公式5所示 discDiameter = abs(focalDepth*2_l)*maxCoC(5)其中,discDiameter为像素点级泊松分布圆直径;maxCoC为最大泊松分布圆直径。计算层级信息(level of detail, lod),如公式6所示lod = log2 (discDiameter)(6)其中根据经验,Iod最大值为3比较合适,因此可以进行限幅。步骤S205,根据所述原始色彩缓存信息、所述新的色彩缓存信息、所述像素点的泊松分布圆直径和所述图像层级信息计算最终的色彩缓存信息。步骤S206,根据所述最终的色彩缓存信息对所述图像进行渲染,实现景深效果。本发明的实施例中,通过基于OpenGL的Mipmap原理与泊松分布结合,计算不同层级的图像场景信息实现景深,提高了实现景深的效率和效果。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以可借助软件加必要的通用硬件平台的方式来实现,基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是⑶-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于OpenGL实现景深效果的方法,其特征在于,包括以下步骤 获取图像的原始色彩缓存信息,所述原始色彩缓存信息包括深度缓存信息和色彩缓存信息; 根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息; 计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息; 根据所述原始色彩缓存信息、所述新的色彩缓存信息、所述像素点的泊松分布圆直径和所述图像层级信息计算最终的色彩缓存信息; 根据所述最终的色彩缓存信息对所述图像进行渲染,实现景深效果。
2.如权利要求I所述一种基于OpenGL实现景深效果的方法,其特征在于,所述获取图像的原始色彩缓存信息前,包括 判断图像处理设备是否开启深度缓存且摄像机为渲染模式。
3.如权利要求2所述一种基于OpenGL实现景深效果的方法,其特征在于,所述获取图像的原始色彩缓存信息,包括 若开启了深度缓存且摄像机为渲染模式,获取所述深度缓存信息和所述色彩缓存信息; 将所述深度缓存信息和所述色彩缓存信息绑定到指定的纹理中。
4.如权利要求3所述一种基于OpenGL实现景深效果的方法,其特征在于,根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息,包括以下步骤 A、根据所述深度缓存信息和所述色彩缓存信息计算焦距深度 B、用所述焦距深度替换所述原始色彩缓存信息中alpha通道的值,得到运算色彩缓存信息; C、将所述运算色彩缓存信息绑定到指定的纹理中,生成所述新的色彩缓存信息。
5.如权利要求4所述一种基于OpenGL实现景深效果的方法,其特征在于,所述根据所述深度缓存信息和所述色彩缓存信息计算焦距深度,具体包括 计算像素点与虚拟视点的距离distance = farPlane^nearPlane/((1-depth)*farPlane+depth*nearPlane) 其中,distance为像素点与虚拟视点的距离,farPlane为所述摄像机的远平面,nearPlane为所述摄像机的近平面,depth为像素深度; 计算焦距深度d = distance-focalPlaneDistance如果 d < 0, focalDepth = d/(focalPlaneDistance-nearBlurDistance)如果 d > 0 或者 d = 0, focalDepth = d/ (farBlurDistance-f ocalPlaneDi stance) 其中,d为像素点平面与焦距平面的距离,focalPlaneDistance为焦距平面距离,focalDepth为焦距深度,nearBlurDistance为最近模糊平面距离,farBlurDistance为最远模糊平面距离。
6.如权利要求5所述一种基于OpenGL实现景深效果的方法,其特征在于,所述计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息,包括计算泊松分布圆直径discDiameter = abs(focalDepth*2-l)^maxCoC其中,discDiameter为像素点级泊松分布圆直径,maxCoC为最大泊松分布圆直径;计算层级信息Iod = log2 (discDiameter) 其中Iod为层级信息。
全文摘要
本发明实施例公开了一种基于OpenGL实现景深效果的方法,所述方法包括以下步骤获取图像的原始色彩缓存信息,所述原始色彩缓存信息包括深度缓存信息和色彩缓存信息;根据所述深度缓存信息和所述色彩缓存信息计算新的色彩缓存信息;计算所述图像的像素点的泊松分布圆直径,根据所述像素点的泊松分布圆直径计算图像层级信息;根据所述原始色彩缓存信息、所述新的色彩缓存信息、所述像素点的泊松分布圆直径和所述图像层级信息计算最终的色彩缓存信息并对所述图像进行渲染。本发明的实施例中,通过基于OpenGL的Mipmap原理与泊松分布结合,计算不同层级的图像场景信息实现景深,提高了实现景深的效率和效果。
文档编号G06T15/00GK102750726SQ201110370718
公开日2012年10月24日 申请日期2011年11月21日 优先权日2011年11月21日
发明者黄裔 申请人:新奥特(北京)视频技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1