首页 / 图像处理

图像处理实质审查 发明

技术领域

[0001] 本公开涉及图像处理。

相关背景技术

[0002] 数字图像尝试在各个像素位置处使用有限的像素值集合来表示连续图像。存在许多不同类型的图像处理技术,这些技术产生用像素值表示的图像。例如,图形渲染过程(例如,光栅化或光线跟踪过程)可用于形成计算机生成的图像,例如示出包括表示场景中对象的几何形状的场景视图。
[0003] 每个像素位于图像的2D图像空间中的点处,但是每个像素的值通常表示像素值尝试表示的连续图像的区域,其中该区域具有非零面积。换句话讲,每个像素在图像空间中具有覆盖区域,并且像素值应该是图像在其覆盖区域(或“内核支持”)上的某种形式的加权平均值(例如,由积分内核数学地表示)。如关于像素使用的术语“覆盖区域”不一定指显示装置中像素的物理形状,而可能是指用于构成该像素的最终像素值的像素滤波器的面积。如果像素值的覆盖区域太小(使得覆盖区域之间存在大间隙),那么图像中可能会出现伪像。这些伪像可能由“混叠”引起,并且可能导致图像中的闪烁或阶梯效应(或其他令人不快的效应)。然而,如果像素值的覆盖区域太大(使得它们在很大程度上重叠),那么图像会显得模糊并且/或者像素值的评估成本可变得过高。
[0004] 用于减少混叠效应的一些现有方法是超采样或多重采样抗混叠(MSAA),其中用比最终图像中的像素密度更大的样本密度来处理经渲染的值,使得可以通过对经渲染的值进行下采样来确定最终像素。一些其他现有方法使用时间抗混叠滤波器,其中生成场景的图像(或“帧”)的序列,其中帧序列上的像素值可以被组合以减少诸如混叠之类的伪像的影响。还存在后处理方法,其中当已经生成图像时,运行程序,该程序分析图像并且尝试发现图像中的伪像并例如通过模糊图像中的混叠边缘来减少这些伪像的影响。
[0005] 然而,现有的方法通常不能完全去除伪像,并且/或者经常显著增加生成图像的计算工作负载。例如,通过增加采样密度,超采样方法可以将渲染图像所执行的工作的量增加一倍或三倍,并且后处理方法需要附加的渲染遍次,从而招致存储器和带宽开销。一些硬件加速方法诸如MSAA可能会限制附加工作负载,但在去除伪像的程度上受到更多限制(并倾向于集中在特定的问题领域)。

具体实施方式

[0061] 以举例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文所描述的实施方案,并且对所公开的实施方案的各种修改对于本领域技术人员而言将是显而易见的。
[0062] 当离散的像素值集合被确定为表示连续图像时,一些信息将会丢失,例如奈奎斯特频率以上的空间频率处的细节。在已经确定像素值集合之后,一些系统可以尝试通过应用一些后处理(例如,通过以相当特别的方式对图像应用锐化或模糊滤波处理)来改善图像的质量。
[0063] 相比之下,在本文所述的示例中,图像处理方法在概念上被分成两个滤波阶段:(i)离散化滤波阶段,和(ii)细化滤波阶段。离散化滤波阶段中像素值集合的生成可以被认为表示使用一个或多个滤波函数的集合处理图像数据的结果,使得像素值在本文中可被称为经滤波的像素值。每个经滤波的像素值可以被认为与由经滤波的像素值集合表示的连续图像内的覆盖区域相关联。经滤波的像素值的覆盖区域的大小(或“宽度”或“尺度”)可以在一个或多个滤波函数的集合的协方差方面来描述。当覆盖区域为各向同性时,协方差可被描述为方差,但更一般地,覆盖区域可能是各向异性的,因此通常使用协方差。滤波函数可以用滤波内核来描述。本文描述的一个或多个滤波函数的集合的滤波函数是非负的,这允许(协)方差明确地与覆盖区域的宽度相关联(具有负部分的函数将抵消协方差计算中的正位置,例如对于有限宽度内核,这可以导致(协)方差为零)。非负内核自然地与概率分布相关联,并且非常适合于描述物理过程(诸如撞击在检测器上的光子的角度分布),这继而可以形成渲染仿真模型的基础,例如光线跟踪中的随机采样。本领域技术人员将熟悉不同类型的非负滤波器,诸如箱式滤波器、帐篷滤波器和高斯滤波器,仅给出几个示例。在一些应用中,允许滤波内核中有一定量的负性可能是有利的,但本文描述的方法的益处主要针对非负内核。如本文所述,将内核分成应用于连续图像的离散化滤波器和作用于帧缓冲器的细化滤波器在计算上是有益的。具体地,如果离散化滤波器和细化滤波器被预先组合,工作负载将成倍增加(而不是相加,如通过分离它们所实现的)。
[0064] 当多个滤波函数被应用于像素值集合时,所应用的总滤波可以被描述为各个滤波函数的卷积。当各个滤波函数彼此卷积时,它们的个体协方差被相加以得到总滤波的总协方差。换句话讲,当滤波函数被卷积时,协方差是可加的。这允许将离散化滤波阶段分解成一系列(可能更简单的)滤波操作。
[0065] 在本文描述的示例中,当已经确定了表示使用一个或多个(非负)滤波函数的集合处理图像数据的结果的一个或多个经滤波的像素值的集合时,标识一个或多个滤波函数的集合的总协方差。然后,对一个或多个经滤波的像素值的集合应用细化滤波函数,以确定一个或多个细化的像素值的集合。基于一个或多个滤波函数的集合的总协方差而确定细化滤波函数的协方差。一个或多个滤波函数的集合的总协方差可以以编程方式确定,或者根据关于图形流水线的一些固定假设来确定。
[0066] 作为第一示例,细化滤波函数可以是锐化函数,其被应用于一个或多个经滤波的像素值的集合以确定一个或多个锐化像素值的集合,其中锐化函数的(协)方差表示一个或多个滤波函数的集合的总(协)方差的负值。这可以在滤波内核的频谱方面来理解。采样定理告诉我们,任何信号与周期脉冲串的相乘(即,将信号/函数简化为周期样本集合)将会将信号频谱转换为其自身的移位副本的集合(偏移采样速率的倍数或奈奎斯特波长的两倍)。因此,混叠的数学起源在于相邻副本之间的重叠程度(在关于原始信号的信息丢失之后,我们无法将它们理顺),并且抗混叠滤波器的一般任务是通过衰减较高频率来最小化这种重叠(使得它是低通滤波器)。对于非负内核,频谱宽度(再次以协方差表示)在下面受到空间宽度倒数的限制(这是海森堡不确定性原理在起作用),因此我们通常需要与采样宽度成比例的协方差来提供足够的抗混叠。然而,为了避免过度模糊,我们还希望保留较低的频率,这些频率在很大程度上不受混叠的影响,并有助于最终图像的感知保真度(应当注意,确切的折衷取决于处理图像的系统的光学属性,包括例如显示设备和人类观察者)。在滤波用语中,我们的目的(有时是竞争的)是使通带尽可能接近一,而使阻带尽可能接近零。通常认为,非负滤波内核虽然通常具有良好或足够的抗混叠特性,但在通带中表现不佳(即,它们倾向于过度模糊图像)。其原因是,在原点处的频谱的二阶导数实际上是滤波器的空间方差的负值,因此,随着频率的增加,任何具有正方差的内核的频谱将倾向于偏离一。然而,由于协方差的可加性,通过将我们的滤波内核与任何其他具有负方差的内核进行卷积,我们可以产生在通带中具有零方差和更平坦(即,更好)的频率响应的复合内核。这可以通过在离散化滤波阶段将锐化函数的(协)方差设置为一个或多个滤波函数的集合的总(协)方差的负值来实现。利用关于复合内核的更多信息,可以对通带进行进一步的细化,但这将需要更大的细化内核(对更多经滤波的像素进行操作),并且必须注意在保留期望频率与放大不需要的混叠频率之间进行权衡(模糊有助于掩蔽缺陷)。例如,sinc滤波器是带限信号的理想抗混叠滤波器,其频率响应为一直到奈奎斯特极限(此后为零),但它具有无限支持(即,内核宽度)。此外,如果预期信号/函数经历对称变换(诸如在3d图形中普遍存在的旋转和缩放),则由于过度保留奈奎斯特极限附近的频率而引入了不稳定性,使得更加缓和的解决方案(如通过仅应用协方差校正所提供的)可能通常是优选的,更不用说过度锐化所产生的计算像素值中的误差的一般复合。
[0067] 作为第二示例,一个或多个滤波函数的集合的总协方差可以低于目标总协方差,并且细化滤波函数可以是模糊函数,其被应用于一个或多个经滤波的像素值的集合以确定一个或多个模糊的像素值的集合,其中模糊函数的协方差表示目标总协方差与一个或多个滤波函数的集合的总协方差之间的差。该示例可以找到初始离散化滤波器质量差的应用(例如,在经渲染的多边形的边缘的MSAA滤波中),并且认为减少混叠比增加通带频率更好。
[0068] 本文描述的一些示例使用了非锐化的渲染目标。“渲染目标”可以被称为“帧缓冲器”,并且例如可以是渲染遍次渲染到的存储器附件和状态的集合。渲染目标可以写入存储器104中的一个或多个缓冲器或者写入片上存储器中的一个或多个缓冲器(例如,作为图像处理单元102的一部分的缓冲器)。换句话讲,渲染目标是图像处理单元102处理的数据的目的地。在这些示例中,对于指示渲染目标的一个或多个片段的集合的(协)方差的数据,渲染目标(例如,帧缓冲器对象)具有一个或多个附加通道(例如,一个通道用于各向同性方差,或者多达三个通道以允许各向异性协方差)。在一个或多个片段的集合只是单个片段的情况下,附加通道存储每片段指示,以指示各个片段的(协)方差(即,在每片段基础上)。在一个或多个片段的集合是多个片段(例如片段块,诸如片段的2×2或4×4块)的示例中,附加通道存储每块指示,以指示片段块的(协)方差(即,在每块基础上)。如本文所述,图像重构被合理地分解为(i)离散化滤波阶段,和(ii)细化滤波阶段。这种可分离性被用来减少采样/滤波工作负载。以这种方式,不是将值渲染到某个中间目标并执行附加渲染过程,而是对渲染到非锐化渲染目标中的值执行简单的受约束内核,从而基于附加通道中指示的数据来应用细化(例如,锐化或模糊)。指示存储在附加通道中的非锐化渲染目标中的片段的(协)方差的数据可被称为“方差边带数据”。方差边带数据可以以编程方式暴露给着色器程序,以指示片段的总(协)方差,并且着色器程序可以使用该信息,然而其认为是适合的,例如通过应用如本文中所描述的具有作为片段的总(协)方差的负值的(协)方差的锐化函数。如已经显而易见的,不同的片段可以具有不同的总(协)方差,因此(协)方差边带数据中的不同指示对于不同的片段可以是不同的,使得不同的处理(在细化阶段)可以根据它们在(协)方差边带数据中相应的指示被应用于不同的片段。
[0069] 图1示出了图像处理系统。图像处理系统包括图像处理单元102和存储器104。图像处理单元102包括处理模块106、协方差标识模块108、滤波模块110和存储器接口112。图1所示的图像处理单元102的组件可以以硬件(例如固定功能电路)、软件或它们的组合来实现。此外,应当注意,在不同的实施方式中,不同部件之间的边界可以不同。例如,在一些实施方式中,协方差标识模块108可以被实现为处理模块106的一部分或者滤波模块110的一部分,并且在一些实施方式中,滤波模块110可以被实现为处理模块106的一部分。
[0070] 图2是图像处理方法的流程图。在步骤S202中,处理模块106确定一个或多个经滤波的像素值的集合。如下面更详细描述的,这可以涉及执行纹理滤波或执行图形渲染过程,给出两个示例。一个或多个经滤波的像素值表示使用一个或多个滤波函数的集合处理图像数据的结果。在一些示例中,一个或多个滤波函数是非负的,这意味着它们的内核中的权重都≥0。在一些其他示例中,滤波内核中可能允许一定量的负性,但本文描述的方法的益处主要针对非负内核。
[0071] 一个或多个经滤波的像素值的集合可以表示图像或图像的一部分。一个或多个滤波像素值的集合从处理模块106提供给协方差标识模块108并且提供给滤波模块110。
[0072] 在步骤S204中,协方差标识模块108标识一个或多个滤波函数的集合的总协方差。应当注意,协方差可以是方差(例如,在各向同性示例中),但是更一般地,协方差可以允许各向异性示例。例如,在步骤S204中,协方差标识模块108可以为一个或多个滤波函数中的每一者标识相应的个体协方差,然后对一个或多个标识的个体协方差求和,以确定一个或多个滤波函数的集合的总协方差。如上所述,当滤波函数被卷积时,协方差是可加的。可以从协方差标识模块108向滤波模块110提供一个或多个滤波函数的集合的总协方差的指示。
在一些示例中,提供了总协方差的不止一个指示。例如,总协方差的每像素指示可以由协方差标识模块108提供。
[0073] 应当注意,协方差标识模块108可以被实现为处理模块106的一部分。处理模块106处理数据以确定一个或多个经滤波的像素值(例如,写入渲染目标的像素值)的集合。协方差标识模块108可以确定协方差边带数据,例如作为附加数据通道,以表示包含经渲染的像素值中的每一者的总协方差的指示的协方差映射图。由协方差标识模块108确定的总协方差的指示中的每一者可以用少量数据表示,例如仅2位,并且/或者可以是某个范围内的浮点或定点连续值。在另一个示例中,可以有三个通道来在每片段的基础上表示协方差(例如,作为2×2对称矩阵)。
[0074] 滤波模块110接收一个或多个经滤波的像素值(例如,通过从渲染目标读取它们,或者通过从如图1所示的处理模块106接收它们)。滤波模块110还接收总协方差的指示(例如,通过从存储在渲染目标中的附加通道读取它们,或者通过从如图1所示的协方差标识模块108接收它们)。在步骤S206中,滤波模块110将细化滤波函数应用于一个或多个经滤波的像素值的集合,以确定一个或多个细化的像素值的集合。如上所述,基于由协方差标识模块108标识的一个或多个滤波函数的集合的总协方差而确定细化滤波函数的协方差。细化滤波函数可以是锐化函数或模糊函数,或者可以保持像素不变(例如,如果像素已经表示最佳重构,或者如果存在可能表明锐化和模糊相互抵消的因素)。如上所述,在存在不止一个经滤波的像素值的情况下(例如,在多个像素值被渲染到非锐化渲染目标中的情况下),每个像素可以具有与其相关联的相应的(例如,不同的)协方差。不同协方差的每像素指示可以在协方差边带数据中表示,即在协方差映射图中表示。滤波模块110可以根据不同协方差的每像素指示将相应的(例如不同的)细化滤波函数应用于经滤波的像素值中的每一者,从而确定细化的像素值。
[0075] 在一些示例中,一个或多个滤波函数的协方差和细化滤波函数的协方差是各向同性的,使得协方差被表示为方差。
[0076] 在步骤S208中,图像处理单元102输出一个或多个细化像素值的集合。例如,滤波模块110可以向存储器接口112提供细化的像素值,该存储器接口然后可将细化的像素值发送到存储器104以存储在其中。在其他示例中,细化的像素值可以从图像处理单元102输出到显示器,使得细化的像素值可被显示给例如用户。在一些示例中,细化的像素值可以存储在图像处理单元102上的存储装置(例如,高速缓冲存储器)中,并且/或者细化的像素值可以从滤波模块110传递到处理模块106,使得处理模块106可以处理细化的像素值。应当注意,图2所示的方法输出细化的像素值。这与其他方法形成对比,其他方法涉及将经滤波的像素值写入中间缓冲器,然后在将最终像素值写入最终缓冲器之前运行后处理阶段以进行细化(例如,用于将最终像素值输出到显示器或存储器)。
[0077] 如上所述,在一些示例中,处理模块106执行纹理滤波以确定一个或多个经滤波的像素值的集合。在计算机图形学中,纹理化通常用于向待渲染的场景内的对象添加表面细节。纹理通常表示连续图像,并且通常被存储为具有离散像素值(可以被称为“纹理像素”值)的图像。可以访问纹理以返回正被处理的图像的像素的颜色值,该图像示出施加了纹理的表面。为了获得像素的纹理颜色值,可以对纹理的多个纹理像素的值进行采样,然后可以对经采样的纹理像素值进行滤波,以获得像素的最终纹理值。由于纹理在图像内投影到3D几何上,通常渲染图像的单个像素不能精确映射到纹理的单个纹理像素。例如,对于描绘纹理的相对较近视图的纹理像素,每个像素都可以与映射到纹理的相对较小的区域(例如,覆盖零或一个纹理像素)的覆盖区域相关联,而对于描绘纹理的相对远处的纹理像素,每个像素可以与映射到纹理的相对较大的区域(例如,覆盖许多(例如,两个或更多个)纹理像素)的覆盖区域相关联。
[0078] 一种执行纹理重采样的方法是通过mipmap。存储为mipmap的纹理包括图像序列,其中每个图像都是基本纹理的分辨率逐渐降低的表示。mipmap用于通过离线执行纹理的一些重采样来提高渲染速度。例如,当创建纹理时,纹理的创建者可以形成mipmap的不同图像,例如,通过用2×2箱式滤波器逐渐地对源图像进行滤波,使得每个mipmap级别处的图像是前一个mipmap级别处的图像的一半宽度和一半高度。mipmap中的每个图像都可以被称为“MIP映射级别”或“细节级别”(LOD),并且每个图像都表示相同的基本纹理,但分辨率不同。
[0079] 为了使用MIP映射渲染图像,可使用三线性滤波。三线性滤波包括两个双线性滤波操作的组合,然后是线性插值(或混合)。为了根据三线性滤波方法以特定分辨率(或细节级别)渲染图像,双线性滤波用于从两个最接近的MIP映射级别中的每一个MIP映射级别(即,分辨率比所要求的分辨率高的级别,以及分辨率比所要求的分辨率低的级别)重构连续图像,然后线性插值(或混合)用于产生处于中间的所需分辨率的图像。
[0080] 在某些情况下,可以执行各向异性纹理滤波。各向异性纹理滤波识别出纹理的采样率,该采样率取决于从屏幕空间(其中描绘了图像并且定义了像素坐标)到纹理空间(其中描绘了纹理并且定义了纹理像素坐标)的映射,并且是屏幕空间中行进方向的函数。换句话讲,最佳纹理采样率在屏幕空间中沿不同的行进方向或轴可能不同。在这种情况下,屏幕空间和纹理空间之间的映射可以说成是各向异性的。各向异性映射的一个示例是水平面附近的平面纹理表面的3D投影,或者是将纹理施加于场景中与视点成显著大的角度的表面的任何其他情况。
[0081] 对于各向异性纹理映射,映射到屏幕空间中的像素的纹理空间中的采样内核沿纹理空间中的特定轴线延长,该轴线的方向取决于屏幕空间和纹理空间之间的映射。这在图3中示意性地示出,该图示出了由具有在图像空间中定义的坐标的像素形成的图像300,以及由具有在纹理空间中定义的坐标的纹理像素形成的纹理302。图像300包括对象304,该对象的表面细节由纹理302指定,即,纹理302映射到对象304的表面。为了清楚起见,已经省略了图像300内的其余对象。对象304在图像300内处于倾斜视角。如上所述,如果将纹理应用于相对于观察方向成斜角的几何选择,则图像空间中像素的各向同性覆盖区域映射到纹理空间中的各向异性覆盖区域。因此,在映射到纹理空间的情况下,未保持图像300内的纹理映射像素的覆盖区域的形状。数字306表示圆形的图像空间中的像素覆盖区域,并且数字308表示纹理像素空间中对应的像素覆盖区域。可以看出,覆盖区域在纹理空间中已经延长以形成椭圆,使得它是各向异性的。一般来讲,在图像空间中具有圆形覆盖区域的像素到纹理空间的映射可以用椭圆近似,只要纹理映射本身可以通过像素原点的仿射映射近似即可。在此,再次注意到,关于像素使用的术语“覆盖区域”不一定指显示装置中像素的物理形状,而可能是指用于构成该像素的最终像素值的像素滤波器的面积。因此,可以说像素在纹理空间中的覆盖区域相当于该像素在纹理空间中的采样内核;即,纹理空间中的覆盖区域标识待采样和待滤波的纹理像素以形成像素的纹理颜色值。
[0082] 纹理表示源图像(例如,连续图像),并且纹理滤波的过程产生一个或多个经滤波的像素值的集合(在图像空间中),其表示施加了纹理的表面的外观。纹理滤波过程可以使用滤波函数集合,包括以下中的一项或多项:(i)mipmap生成滤波函数,(ii)纹理滤波函数,(iii)各向异性滤波函数,以及(iv)纹理映射函数。
[0083] 例如,图4的(i)示出源图像。使用mipmap生成滤波函数来生成mipmap的图像,如图4的(ii)所示。mipmap生成滤波函数可以是可应用于源图像的箱式滤波函数。如上所述,纹理的创建者可以在纹理将被用于渲染图像的时间之前的某个时间执行mipmap生成。例如,可将表示纹理的mipmap提供给图像处理系统(例如,图形处理单元)并存储在图像处理系统的存储器(例如,存储器104)中。
[0084] 纹理滤波函数用于使用mipmap的图像在特定细节级别处生成纹理的表示(如图4的(iii)所示)。纹理滤波函数可以是帐篷滤波函数,例如三线性滤波函数,其可应用于mipmap的一个或多个图像。
[0085] 使用各向异性滤波函数来生成在细节级别上具有一定的各向异性的纹理的表示(如图4的(iv)所示)。各向异性滤波函数可以是抽头和函数,其可以应用于图4的(iii)所示的纹理的表示。例如,图4的(iii)中所示的纹理的表示的多个纹理像素的加权和可用于确定图4的(iv)中所示的纹理的各向异性表示,其中可以控制所使用的权重和被求和的纹理像素的位置,以便控制各向异性比率和由各向异性滤波函数引入的各向异性的方向。
[0086] 纹理映射函数用于将纹理的表示从纹理空间映射到图像空间中的几何形状的表面上,其结果在图4的(v)中示出,标记为“非锐化渲染图像”。
[0087] 因此,非锐化渲染图像中的像素值表示使用一个或多个滤波函数的集合处理图像数据(例如,处理源图像)的结果。滤波函数集合以一定序列应用,使得该序列中的滤波函数作用于该序列中前一个滤波函数的结果。总体影响可以解释为一个或多个滤波函数的卷积。
[0088] 如上所述,滤波函数用滤波内核来表示,该滤波内核被定义为N维图像平面上的实函数f(x),其中x是N维向量。滤波函数的协方差(表示为 )如下给出:
[0089]
[0090] 其中,符号 表示滤波内核的平均值,并且如下给出:
[0091]
[0092] 并且符号|f|标识伪模(当为正时),并且如下给出:
[0093] |f|=∫dxNf(x)   (3)
[0094] 本文描述的滤波函数的滤波内核被归一化,因此|f|=1,并且它们的平均值为零,即 此外,在参考图4作为示例描述的纹理滤波过程中,用于确定非锐化渲染图像的滤波函数是非负的,即,对于所有有效值x,f(x)≥0。
[0095] 本文提供的描述是指“协方差”,并且应当理解,当术语被更宽松地使用时或者当协方差被限制为具有一个维度(例如,对于各向同性尺度)时,可以使用术语“方差”来代替。“方差”是“协方差”的示例。
[0096] 用于从源图像(例如,在图4的(i)中示出)到非锐化渲染图像(例如,在图4的(v)中示出)的不同滤波函数的个体协方差可以使用等式(1)来标识,然后个体协方差可以被求和以确定滤波函数集合的总协方差。
[0097] 然后,滤波模块110可以将锐化函数应用于图4的(v)中所示的非锐化渲染图像,以确定图4的(vi)中所示的最终锐化图像。锐化函数的协方差被确定(例如,通过滤波模块110或通过协方差标识模块108)为滤波函数集合的总协方差的负值。换句话讲,锐化函数的协方差可以通过将滤波函数集合的总协方差乘以‑1来计算。确定具有表示锐化滤波器的权重的内核,使得它具有适当的协方差。内核也可被归一化,并且可具有平均值零。以这种方式,确定了锐化矩阵。作为示例,锐化矩阵可以是3×3矩阵(这是具有3个非零项和零平均值的协方差矩阵的最小大小),但是在其他示例中,锐化矩阵可以具有不同的大小和/或形状(例如1×3、3×1、5×5等)。滤波模块100执行锐化矩阵与非锐化渲染图像的像素值的卷积,以确定最终锐化图像。
[0098] 如上所讨论的,通过将锐化滤波器的协方差设置为已经生成经滤波的像素值的滤波函数集合的总协方差的负值,锐化滤波器保持了已经如实表示的像素值中的细节,但是滤除了图像中没有如实表示的部分。例如,如上所述,当实现滤波时,存在(有时是竞争的)目的,即,使通带尽可能接近一,而使阻带尽可能接近零。通常认为,非负滤波内核虽然通常具有良好或足够的抗混叠特性,但在通带中表现不佳(即,它们倾向于过度模糊图像)。其原因是,在原点处的频谱的二阶导数实际上是滤波器的空间协方差的负值,因此,随着频率的增加,任何具有正协方差的内核的频谱将倾向于偏离一。然而,由于协方差的可加性,通过将我们的滤波内核与任何其他具有负协方差的内核进行卷积,我们可以产生在通带中具有零协方差和更平坦(即,更好)的频率响应的复合内核。这可以通过在离散化滤波阶段将锐化函数的协方差设置为一个或多个滤波函数的集合的总协方差的负值来实现。
[0099] 图5示出使用锐化滤波器对理想滤波函数的影响的第一示例。曲线502(在图5中用虚线示出)表示方差为1/4样本间隔(在空间域中)的一维高斯内核的频谱。它在原点处具有峰值1(使得它使任何经滤波的函数的DC分量保持不变,如内核的归一化所暗示的)。水平轴(f)以每样本间隔的周期为单位给出,使得奈奎斯特频率为1/2。因此,高斯频谱由以下表达式描述:
[0100]
[0101] 高斯是理想的离散化滤波器,在某种意义上,它使给定空间宽度的频谱宽度(方差)最小化,使得(通过适当的窗口化来生成有限支持)它可以为固定宽度的有限滤波预算递送接近最佳程度的抗混叠。在仿射映射和卷积以及(借助于中心极限定理)在其他内核的重复卷积的极限下,它也恰好是可分离的和闭合的,并且因此是在纹理映射的上下文中要考虑的原型滤波器。从图中可以看出,奈奎斯特极限以上的曲线下的面积会导致一些频谱泄漏,但这可以通过使用更宽的内核来减轻(以更多的计算开销)。然而,应当注意,曲线502已经在通带内表现出显著的衰减,并且更宽的(更好抗混叠的)内核将进一步加剧这个问题。曲线504(在图5中用实线示出)描绘了在应用了方差为‑1/4的内核之后的高斯内核。具体地,(在该示例中是一维的,但是作为可分离的滤波器容易地扩展到二维)内核
[0102]
[0103] 其中δ(x)是用于在像素位置处采样的狄拉克δ函数,与高斯卷积。曲线504的频谱因此由下式给出(由于卷积定理将卷积映射到频谱域中的乘法)
[0104]
[0105] 复合内核具有零方差,并且从曲线图中可以看出,通带响应被显著改善(即,与曲线502相比,曲线504对于更大范围的f值保持在值1或接近值1,这意味着通带(在f=‑0.5和f=0.5之间)没有被如此衰减),而阻带的放大相对较小(低于f=‑0.5并且高于f=0.5)。
[0106] 图6a至图6c示出在更一般化的滤波函数集合上使用锐化滤波器的影响的另外示例。曲线602(在图6a中用虚线示出)表示箱式滤波器(即,sinc函数)的频谱,并且曲线604(在图6a中用实线示出)表示其锐化的对应物。曲线606(在图6b中用虚线示出)表示帐篷滤波器,并且曲线608(在图6b中用实线示出)表示其锐化的对应物。曲线610(在图6c中用虚线示出)表示下一个基数B样条,并且曲线612(在图6c中用实线示出)表示其锐化的对应物。帐篷滤波器(在图6b中表示)是与其自身卷积的箱式滤波器,并且下一个(即第三)B样条(在图6c中表示)是与其自身卷积两次的箱式滤波器,其迅速接近高斯滤波器的形状。尽管这些示例中的每个示例都具有完全不同的阻带响应(其中箱式滤波器是最差的示例),但是从曲线图中可以清楚地看出,通带响应非常相似,并且由每个核的匹配方差决定。类似地,可以看出,通带中的锐化响应很大程度上对下面的内核的高阶矩不敏感:
[0107]
[0108] 此处,O给定基数B样条的阶;对于箱式滤波器为1,对于帐篷为2,以此类推。在箱式滤波器的情况下,不需要的阻带频率的放大程度比其他情况更明显,但可以表明,通带的好处在整体上超过了这一点,因此通常可以论证(对于合理的离散化方差,其中1/4是典型的妥协[1/2具有高得多的质量潜力,但是对于离散化和细化两者都招致高得多的开销,后一阶段需要分接到更高的矩以恢复更积极的滤波通带]),细化阶段(几乎)总是有益的,而与先前滤波器的确切形状无关。
[0109] 如上所述,锐化内核可以应用于非锐化的渲染目标,或者其可以在一系列纹理滤波操作(mip映射、纹理滤波和各向异性滤波)结束时应用,在这种情况下,它可以被视为附加纹理滤波阶段,独立于渲染流水线的其余部分。在后一种情况下,可以并行处理包含在单个图块(如基于图块的渲染器所采用的)内的多边形的一部分的片段集合。与例如各向异性滤波不同,在各向异性滤波中,伸长的内核在每片段的基础上招致源纹理的附加采样操作,本图像重构方法的分离的离散化和细化阶段使得能够重新使用来自相邻片段的采样结果。换句话讲,如果将锐化内核与纹理滤波器预先组合,则所得的覆盖区域将比原始纹理滤波器大得多,并且当独立处理时,需要多得多的样本(可能9倍之多)来评估经滤波的结果,但是分离的内核避免了不必要的计算重复。图7示出了像素702的10×10阵列,其包括表示像素的8×8阵列的图块704。一些像素被图元网格覆盖,该图元网格包括图元7061和7062。在图
7中,像素用正方形表示,但是应该理解,像素具有点位置(在相应正方形的中心处),即像素不覆盖正方形面积。被图元网格覆盖的像素在图7中示出为白色正方形(例如,像素708)。当将3×3锐化矩阵应用于由图元网格覆盖的每个像素位置(即,应用于图7中示出为白色正方形的每个像素并以其为中心)时,锐化矩阵将使用来自与由图元网格覆盖的像素相邻的一些另外像素位置的值,并且这些另外像素位置处的像素在图7中以点状图案示出(例如,像素710)。锐化滤波器不使用的像素在图7中用交叉影线示出(例如,像素712)。应当注意,尽管图元网格覆盖的所有像素(即,白色像素)都在图块704内,但是锐化滤波器使用的一些像素(即,具有点状图案的一些像素)在图块704外。由图元网格覆盖的像素(即,白色像素)以及由锐化滤波器使用的像素(即,具有点状图案的像素)在本文所述的图像处理方法中使用。特别地,纹理坐标被扩展到点状区域中,以外推3×3内核。参考图7,多边形网格中的每个片段必须输出一个值,该值是将3×3内核应用于其及其邻居的结果。在网格内部内,大多数(如果不是所有的)邻居将被计算为滤波操作的并行处理的一部分(并且将被存储在某种形式的中间缓冲器中,用于执行锐化操作的目的)。对于作为丢失邻居的片段,或者因为它们靠近网格的边界或图块的边界,或者必须以丢失的片段为中心生成附加滤波操作,或者必须修改内核以排除它们的贡献。由于后一种选项可能在图块边界处引起块伪像,因此优选的是外推纹理坐标(使用例如用于计算LOD或执行每顶点定义的坐标属性的透视校正内插的屏幕空间坐标导数)并执行附加采样操作,将它们视为如同图元扩展到相邻区域中(类似于保守光栅化的形式)。这些附加滤波操作可另选地被简单地视为锐化和纹理滤波器内核的部分(或者如果不存在邻居,则全部)组合的形式,并且直接在纹理空间中对它们进行评估。然而,同样,这些边界片段可能对多个邻居有贡献,并且因此它们最好被视为(并且被实现为)附加片段,该附加片段不作为输出返回到着色器,而是被用作到如此描述的基于图块的卷积阶段的输入。考虑到这一点,图7描述了基于图块的卷积操作,该操作将覆盖多边形内部及其增大边界的片段的扩展面片作为输入,并且仅将多边形内部输出到着色器。
[0110] 如参考图7所述,锐化滤波器可被实现为附加纹理滤波阶段,其中中间缓冲器将纹理坐标扩展到图块和/或图元边界之外。以这种方式,步骤S206(将细化滤波函数应用于一个或多个经滤波的像素值的集合)可包括:将图块中的图元的纹理坐标扩展到以下中的一项或两项之外:(i)图块的边界,以及(ii)图元的边界;以及使用扩展的纹理坐标将细化滤波函数应用于对应于图元的一个或多个片段的经滤波的像素值中的一个或多个经滤波的像素值。
[0111] 如上所述,在一些示例中,处理模块106执行图形渲染过程以确定经渲染的像素值。经渲染的像素值可以被认为是经滤波的像素值,其表示使用一个或多个滤波函数的集合处理图像数据的结果。图形渲染过程在本领域中是已知的,并且包括光栅化和光线跟踪技术,仅给出两个示例。经渲染的像素值可以被写入渲染目标,例如其中可写入经渲染的像素值以表示图像的像素值的存储器。该存储器可以是片上存储器,例如图像处理单元102的一部分,或者可以是存储器104的一部分。存储器104可被称为“主存储器”、“设备存储器”或“系统存储器”。渲染目标可被称为“帧缓冲器”。在本文描述的方法中,渲染目标被认为是非锐化的渲染目标,其中(通过滤波模块110)执行后处理阶段以确定细化的像素值。具体地,协方差标识模块108为经渲染的像素值中的每一者确定用于渲染像素值的一个或多个滤波函数的总协方差的指示(例如,以每片段或每像素为基础)。如上所述,协方差标识模块108可以是处理模块106的一部分,并且可以在像素值正在被渲染时确定用于渲染像素值的滤波函数的协方差。应当注意,不同的像素值可以具有由处理模块106应用于它们的不同处理,例如,它们可以表示具有应用于它们的不同纹理的表面,并且/或者它们可以表示距视点不同距离的表面(并且因此以不同的细节级别)。因此,用于渲染像素值的滤波函数的总协方差对于不同的像素值可能不同。
[0112] 然后,对于经渲染的像素值中的每一者,滤波模块110将相应的细化滤波函数应用于经渲染的像素值,以确定相应的细化的像素值。如上所述,基于用于渲染像素值的一个或多个滤波函数的集合的所确定的总协方差,来确定应用于像素值的细化滤波函数的协方差。再次注意到,“方差”是“协方差”的示例。
[0113] 对应于像素值的目标覆盖区域大小,可以存在渲染像素值的目标总协方差。如果一个或多个滤波函数的集合的总协方差高于目标总协方差,那么细化滤波函数是如上所述的锐化函数,其中锐化函数的协方差是经渲染的像素值的总协方差的负值。如上所述,通过在离散化滤波阶段将锐化函数的协方差设置为一个或多个滤波函数的集合的总协方差的负值,可以产生在通带中具有零协方差和更平坦(即,更好)的频率响应的复合内核。因为不同的经渲染的像素值可具有不同的总协方差,所以应用于不同的经渲染的像素值的锐化函数的协方差可能不同。
[0114] 如果经渲染的像素值的一个或多个滤波函数的集合的总协方差低于目标总协方差,那么细化滤波函数是模糊函数。模糊函数的协方差表示目标总协方差与一个或多个滤波函数的集合的总协方差之间的差。这可能有助于减少经渲染的像素值中的混叠(例如,在子像素精度不足的多边形边界处,或者在例如光线跟踪中采用的随机渲染中)。
[0115] 由图形渲染过程生成的像素值的细化通过利用将重构滤波器分离成离散化和细化内核来提高3D渲染中的图像重构的质量。屏幕上的每个片段都与参数化宽度/尺度/方差/质量的离散化内核相关联。如上所述,当生成渲染目标时,渲染像素值的总协方差的指示可以与经渲染的像素值一起存储为一个或多个附加数据通道(例如,代替现有通道,诸如阿尔法通道)。应当注意,对于不同的矩阵条目,可能存在多个附加数据通道。
[0116] 滤波模块110在经渲染的图像的渲染(由处理模块106执行)和显示(或其他最终输出)之间提供中间后处理阶段。滤波模块110在每像素基础上应用适当的锐化或模糊内核。典型的锐化响应相对于输入片段将具有负的协方差,而典型的模糊响应将补偿计算片段的协方差(或质量)的不足。
[0117] 当处理模块106执行图形渲染过程以生成经渲染的像素值时,它可以为经渲染的像素值设置指示符以指示它们是表示几何形状边界还是几何形状的内部区域。可以基于为经渲染的像素值设置的指示符来确定相应的经渲染的像素值的细化滤波函数的协方差。例如,处理模块106可以标记几何形状边界(诸如通过MSAA标志来指示),使得滤波模块110可以保守地模糊结果,并且处理模块106可以用高质量纹理滤波来标识几何形状的内部区域,使得滤波模块110可以锐化那些区域。具体地,由滤波模块110对经渲染的像素值应用的细化滤波函数的协方差在经渲染的像素值的指示符指示经渲染的像素值表示几何形状边界的情况下可比在经渲染的像素值的指示符指示经渲染的像素值表示几何形状的内部区域的情况下更大。以这种方式,图像处理单元102是灵活的并且/或者能够利用几何形状信息(其通常不可直接用于后处理方法)来对经渲染的像素值执行细化滤波,从而改善最终输出的图像值的质量。此外,图像处理单元102能够使较高质量滤波算法的质量最大化。
[0118] 图8示出其中可以实现本文所描述的图像处理系统的计算机系统。计算机系统包括CPU 802、GPU 804、存储器806和其他装置814,例如显示器816、扬声器818和相机822。图像处理单元810(对应于图像处理单元102)在GPU 804以及神经网络加速器(NNA)811上实现。在其他示例中,图像处理单元810可以在CPU 802上或在NNA 811内实现,或作为计算机系统中的单独处理单元实现。计算机系统的部件可通过通信总线820彼此通信。存储装置812(对应于存储器104)被实施为存储器806的一部分。
[0119] 图像处理单元102被示出为包括多个功能块。这仅是示意性的,并不旨在限定这种实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,如由图像处理单元形成的本文中所描述的中间值不需要由图像处理单元在任何时间点处物理地生成,并且可仅表示方便描述由图像处理单元在其输入与输出之间执行的处理的逻辑值。
[0120] 本文中所描述的图像处理单元可以在集成电路上的硬件中体现。本文所描述的图像处理单元可被配置为执行本文所描述的任何方法。一般来说,上文所描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或它们的任何组合中实现。本文可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,所述程序代码当在处理器上执行时执行指定任务。本文所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使得处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器
(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器设备。
[0121] 如本文所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0122] 处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
[0123] 其还旨在涵盖限定如本文中所描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以实现所需功能。也就是说,可以提供一种其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将该系统配置成制造被配置为执行本文所述任何方法的图像处理单元,或者制造包括本文所述任何装置的图像处理单元。集成电路定义数据集可以是例如集成电路描述。
[0124] 因此,可提供一种在集成电路制造系统处制造如本文中所描述的图像处理单元的方法。此外,可提供一种集成电路定义数据集,当在集成电路制造系统中进行处理时,该集成电路定义数据集促使制造图像处理单元的方法得以执行。
[0125] 集成电路定义数据集可呈计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别进行制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法,诸如Verilog或VHDL,以及作为低级电路表示法,诸如OASIS(RTM)和GDSII。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便将计算机系统配置成用于产生集成电路的制造定义,以执行定义集成电路以便产生该集成电路的制造定义的代码。
[0126] 现在将参考图9描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置为制造图像处理单元的示例。
[0127] 图9示出了集成电路(IC)制造系统902的示例,该集成电路制造系统被配置为制造如本文任何示例中描述的图像处理单元。具体地说,IC制造系统902包括布局处理系统904和集成电路生成系统906。IC制造系统902被配置为接收IC定义数据集(例如,定义如本文任何示例中描述的图像处理单元)、处理IC定义数据集以及根据IC定义数据集来生成IC(例如,其体现如本文任何示例中所述的图像处理单元)。通过对IC定义数据集的处理,将IC制造系统902配置为制造体现如本文任何示例中描述的图像处理单元的集成电路。
[0128] 布局处理系统904配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP‑FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统904已经确定电路布局时,其可将电路布局定义输出到IC生成系统906。电路布局定义可以是例如电路布局描述。
[0129] 如本领域中已知,IC生成系统906根据电路布局定义来生成IC。例如,IC生成系统906可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩码的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统906的电路布局定义可呈计算机可读代码的形式,IC生成系统906可使用所述计算机可读代码来形成用于生成IC的合适掩码。
[0130] 由IC制造系统902执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统902可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下级中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩码来制造集成电路。
[0131] 在其他示例中,在集成电路制造系统中对集成电路定义数据集的处理可以将该系统配置成在不处理IC定义数据集以确定电路布局的情况下制造图像处理单元。例如,集成电路定义数据集可以定义可重新配置的处理器,诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
[0132] 在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文所描述的装置。例如,由集成电路制造定义数据集以上文参考图9所描述的方式对集成电路制造系统进行的配置可以制造如本文所描述的装置。
[0133] 在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图9中所示的示例中,IC生成系统可以由集成电路定义数据集进一步配置成在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0134] 与已知的实施方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实施方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间减少、吞吐量增大和/或功耗降低中的一者或多者。在制造这种设备、装置、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实现之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实施的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
[0135] 申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

当前第1页 第1页 第2页 第3页
相关技术
R·金发明人的其他相关专利技术