用于转换数字图像的方法与流程

文档序号:18745190发布日期:2019-09-21 02:15阅读:304来源:国知局
用于转换数字图像的方法与流程

本发明涉及过程噪声的计算的改进。更具体地,旨在减少在计算机生成的数字图像内的元素的参数上生成梯度噪声的计算时间。



背景技术:

为了为合成图像提供丰富的细节,过程噪声被广泛用于计算机图形领域。通常,生成的噪声被应用于图像元素的一个(或几个)参数,以便使其视觉方面“变形”。

该参数可以是色度参数,以便为元素提供噪声纹理;或者可以是几何参数,以便生成原始平面元素的高度图,并且从而创建逼真的景观。参数噪声的几种其他应用也是可以的。

“过程”一词意味着噪声是由实现参数函数的程序代码生成的。这种噪声与硬编码为数据结构的噪声相反,并且在所需的内存空间方面允许更紧凑的封装:几千字节足以编码过程噪声。过程噪声还有其他优点。A. Lagae等人在Eurographics 2010中的“State of the Art in Procedural Noise function”列出了其中的一些优势,并进一步介绍了过程噪声函数的原理。

在参数噪声函数中,一种非常著名和常见的方法是Perlin噪声。Perlin 噪声包括在噪声晶格的顶点处生成梯度值,并为噪声晶格的任何超立方体内的图像对象的顶点内插这些梯度值。

Perlin噪声在文献中被广泛描述。除了其他来源,人们可以参考美国专利US 6,867,776、Ken Perlin的基础文章或者Stefan Gustavson的文章“Simplex noise demystified”。

正如本文所述,“经典噪声的一个基本问题是,它涉及每个维度之间的顺序插值。除了随着我们向更高维度移动,计算复杂度迅速增加之外,计算插值函数的分析导数也变得越来越困难。”

Ken Perlin随后提出了对这第一种方法的改进,称为“Simplex噪声”。

Perlin噪声是O(nx2n),其中,n是维度,但是Simplex噪声是O(n2),使其是多项式时间,并且可以随维度而缩放。

Perlin噪声公认的主要缺点是使用超立方体作为晶格。在给定的n维中,对于要考虑的图像元素的每个顶点,这等于2n个角。此外,梯度值的插值然后应该被成对执行,这意味着对于每个顶点执行2n-1个线性插值。

Simplex噪声通过考虑单工而不是超立方体来解决这个问题。单工是在给定维度中角最少的几何形状,即,n+1个角,其中,n是维度。

此外,不需要线性插值,而只需要径向衰减来加权噪声晶格的每个顶点的梯度对给定顶点的影响。只需要n+1次衰减。

然而,实现生成Simplex噪声的现有算法仍然不够高效,并且产生了重要的计算开销。这种开销可能会阻塞需要大量噪声计算的应用。



技术实现要素:

本发明的目的包括至少部分地减轻上述缺点。更具体地,本发明旨在进一步提高噪声计算的性能。

该目的通过一种用于转换数字图像的方法来实现,该方法包括将过程噪声施加到该数字图像的图像元素的参数上,包括:

确定该噪声的晶格的范围,该噪声包括该图像元素;

对于该范围内的该晶格的每个噪声顶点,确定梯度值作为伪随机值,并且将取决于该梯度值以及该图像顶点和噪声顶点的相对位置的贡献度添加到与该噪声顶点邻域内的该图像元素的每个图像顶点相关联的参数中。

优选实施方式包括一个或多个以下特征,可以单独地或共同地、部分组合或者完全组合地采取这些特征。

该梯度值仅取决于该噪声顶点的坐标;

该参数是该图像顶点的几何参数;

该参数是该图像顶点的色度参数,以便为该图像元素创建噪声纹理;

该邻域是以该噪声顶点为中心的径向对称区域,其中,半径小于该晶格的周期;

该贡献度由该梯度值的以及该图像顶点和该噪声顶点的坐标的函数确定,该函数对于该邻域之外为空,并且在该邻域内随着该噪声顶点和该图像顶点之间的距离增加而减小;

该函数的导数在距该噪声顶点的该半径处为零;

该噪声是Perlin噪声;

该噪声是Simplex噪声;

线性应用被用于在该晶格和与该图像元素相关联的另一晶格之间转换该噪声顶点和该图像顶点的坐标。

参考下面列出的附图,本发明的其他特征和优点将从作为非限制性示例给出的本发明的实施方式的以下描述中显而易见。

附图说明

图1示出了普通的2D示例,其中,描绘了Simplex噪声晶格和图像元素,用于说明本发明的实施方式;

图2示出了传统Simplex噪声的另一实施方式。

具体实施方式

本发明允许通过将过程噪声施加到该数字元素内的图像元素的参数上来转换数字图像。

根据一些实施方式,本发明可以帮助生成数字图像,将由其他软件算法提供的一些图像元素作为输入:例如,可以通过仅应用本发明的噪声生成算法并通过指定一些其他参数(图像的大小等)来生成表示景观的图像。本发明的这种广义应用将在措辞“要转换”中考虑,因为这些其他参数可以被认为是要转换的输入图像的模型。

通常,数字图像内的元素由一组顶点定义,每个顶点由坐标向量定义。根据本发明的实施方式,过程噪声可以被施加到顶点的坐标上,以便使图像元素的原始形状变形。一个典型的示例包括从平面图像元素开始,并且建立仅由被应用于其的过程噪声确定的人造景观。

图像元素还可以具有一些色度参数,过程噪声可以被施加到这些色度参数上,以便为其提供更逼真的纹理。

其他实施方式也是可能的。在下文中,将结合人造景观的生成来更具体地描述本发明,而不会丧失一般性。

以类似的方式,本发明特别适用于Simplex噪声的计算,但是也可以适用于其他类型的过程噪声,包括“经典”Perlin噪声。然而,在不失一般性的情况下,将结合其Simplex噪声的实施方式更具体地描述本发明。

计算Simplex噪声意味着为噪声定义晶格,该晶格被“映射”到要施加噪声的图像元素上。

这种噪声晶格可以被看作是由一组单形(或单工,这两个词都存在) 组成的n维镶嵌,例如,如维基百科网站 https://en.wikipedia.org/wiki/Tessellation_(computer_graphics)中所说明的。因此,图像元素的每个顶点落入镶嵌中的唯一一个单工内。

该噪声晶格具有比与图像元素相关联的晶格更低的频率,因此,通常,图像元素的许多顶点落入给定的单工内。

有人提及,对于给定的维度,单工是最规则的几何形状,其具有最小数量的顶点。在二维(2D)空间的典型示例中,对应的单工是等边三角形,即,具有3个顶点和相等边的形状。

一般来说,Simplex算法与任何其他过程梯度噪声函数一样,包括确定噪声晶格的每个顶点的梯度。然后,基于这些梯度值,可以在图像元素的每个顶点处计算噪声。

在第一步骤中,确定噪声晶格的范围,以包含图像元素。优选地,该范围Rnoise被确定为用以封装该图像元素的最小范围,以避免不必要的计算。在2D或3D情况下,该范围Rnoise可以分别定义简单的封装正方形或立方体。

图1示出了普通的2D示例,其中,描绘了Simplex噪声晶格L和图像元素E。帧与噪声晶格L相关联。在这种情况下,范围Rnoise是在图像元素E周围的噪声晶格L中定义四边形的2D范围。这种四边形(在噪声晶格中)在图1中以粗体显示。

然后,对于在范围Rnoise内的噪声晶格的每个顶点S,确定梯度值G (S)。梯度值是伪随机值,通常是与图像元素的顶点具有相同维度n(此处是二维)的向量。这个值仅由顶点的坐标决定,因此每次计算给定顶点时,其值都是相同的:这样的特性使噪声(并且因此产生的景观或纹理…) 是确定性的(即,当在不同的时间或由不同的用户观看时是相同的)。

伪随机梯度值的实际计算超出了本发明的范围,并且在本领域中是众所周知的,并且例如,在与Perlin噪声和Simplex噪声相关的文献中广泛讨论。

一旦确定了梯度值,就传播到图像元素E的顶点P。

更准确地,将取决于梯度值G(S)和噪声顶点与图像顶点P之间的相对位置的贡献度f(S,G(S),P)添加到与该噪声顶点S的邻域N(S) 内的该图像元素E的每个顶点P相关联的参数中。该相对位置可以完全或部分地由这两个顶点S、P之间的距离表示。

如上所述,该参数可以是色度参数或几何参数(例如,构建2D景观的高度)。

换句话说,对于图像元素的每个顶点P,根据邻域N(S),相关参数从几个顶点接收贡献度。这些贡献度简单地相加(或“累加”),因此,当所有顶点都提供了其相应的贡献度时,迄今为止针对参数累加的值可以被视为最终参数值。

噪声顶点的梯度值G(S)的“传播”限于该顶点S的邻域N(S)。邻域N(S)由阈值确定,因此当图像顶点P和噪声顶点S之间的距离大于r时,使贡献度为零。该邻域可以是以相应顶点为中心且半径等于该阈值r的径向对称区域。

优选地,阈值r被设置为低于噪声晶格的两个相邻顶点之间的距离 (即,低于单工的最小高度),以确保任何图像顶点最多在维度d中使用来自d+1个噪声顶点的贡献度。

噪声晶格的顶点S的邻域N(S)由图1中的虚线圆表示。

因此,图像元素的每个顶点仅接收其所在的单工顶点的贡献度,即, N+1个贡献度,其中,N是维数。在图1的示例中,图像元素E的每个顶点P接收3个顶点的贡献度。因此,每个图像顶点处的噪声值总是可以计算为三个项的总和。

由于其中贡献度函数不为空的有限范围,发明人已经意识到,就计算复杂度而言,在图像的每个顶点处部署参数值的非局部计算变得受关注。根据本发明,然后,通过首先考虑噪声顶点,并针对每个噪声顶点将其贡献度施加到其邻域,经典Simplex算法在某种程度上“反向”。一旦对所有顶点进行了这种处理,最终的累加值就提供了产生的噪声图像元素。

贡献度函数f旨在根据图像顶点相对于噪声顶点S的位置,特别是根据其到该噪声顶点S的距离,来衰减梯度值G(S)。通常,贡献度f可以作为向量PS和G(S)之间的标量积来计算。根据实施方式,它可以是关于d的递减函数,其中,d是顶点P和噪声顶点S之间的距离,对于该距离,其值等于其在P=S(d=0)时的最大值。

优选地,设置该函数f,使得当d=r时,其值为零。这允许避免函数f 提供的值和邻域N(S)之外的强制0值之间的任何不连续性。同样优选地,设置函数f,使得当d=r时,其导数也等于零。

根据与图像本身相关联的晶格来定义图像元素E的顶点。噪声晶格L 去相关,并且不与该图像晶格对齐,因为噪声晶格基于单工,而图像晶格基于超立方体。

为了描述的清楚,图像晶格没有在图1上表示,但是可以很容易地理解图像顶点P是由沿着水平和垂直轴确定的坐标(x,y)定义的。此外,该图像晶格的频率与噪声晶格无关(并且通常更高)。

因此,需要基础的变化来确定噪声顶点S的贡献度所适用的图像元素 E的这组顶点P。

在与经典Simplex噪声算法相关的文献中,广泛讨论了这种基础的变化。Stefan Gustavson的上述文章“Simplex noise demystified”提出了一种实现计算Simplex噪声的源代码,包括与噪声和图像晶格之间的基础变化有关的方面。

在一般情况下,基础变化可以被视为矩阵乘积。在2D情况下,矩阵的项由正弦和余弦组成,因此整个计算会对计算资源要求很高。因此,基于N×N矩阵,基础变化通常通过线性应用来近似,N×N矩阵具有如下形式:

这种近似至少有两个优点。

首先,可以由系统从前一基础中的坐标中容易地计算在新基础中的坐标(x′,y′,...z′):

计算一个乘积K(x+y…+z),允许用一个简单的和来计算所有坐标。从计算的角度来看,这种转换非常有效。

第二,允许反向基础变化的反向转换可以很容易地推导出来,并且是基于以下形式的N×N矩阵的线性应用:

其中,

Ken Perlin提出了几个K值,根据维度N,允许很好地近似基础变化:

通过应用这些近似,然后可以在任何噪声晶格L或图像晶格的帧中表达噪声顶点S和图像顶点P。

其他近似也是可以的,包括非线性近似。如在 http://en.wikipedia.org/wiki/OpenSimplex_noise上所讨论的,一些相关的实施方式是例如基于OpenSimplex。

然后,确定噪声晶格L的顶点S的邻域N(S)内的这组图像顶点P 变得可行。

然后,可以遍历先前已经确定的范围Rnoise的所有顶点S。对于所有这些顶点S,确定梯度G(S),并且对于邻域N(S)的所有图像顶点P,基于所考虑的图像顶点P和所考虑的噪声顶点S的相对位置来确定该梯度G (S)的贡献度。将该贡献度添加到与该图像顶点P相关联的累积参数值中。

根据本发明的实施方式,在噪声晶格L的顶点S在范围Rnoise内遍历期间,执行进一步的测试,以检查所考虑的顶点S是否足够接近图像元素。由于噪声晶格L相对于图像晶格的偏斜,在其末端处可以存在噪声晶格的某个区域,其中,顶点离图像元素E太远,以至于不能影响其顶点的噪声,因为该影响受限于邻域。根据该测试,在计算中,简单地丢弃离图像元素太远的噪声顶点S。

这个测试意味着小开销,但是这个测试很简单,并且位于图像元素E 的顶点上的回路之外。因此,这个开销被认为是合理的,并且随着更高的采样频率和维度而减少。

在图2中,描述了用于经典Perlin噪声的本发明的实施方式。

以与前面结合Simplex噪声描述的实施方式类似的方式,为晶格L的每个噪声顶点确定梯度,作为伪随机值。在噪声顶点S的邻域N(S)内,为与图像元素E的所有图像顶点P相关联的所考虑的参数(颜色、高度…) 添加贡献度。该贡献度基于该噪声顶点S处的梯度G(S)以及顶点S和 P的相对位置。

然而,参见图2,可以验证对于同一图像顶点P,将添加4个贡献度,其对应于图像顶点P落入其中的晶格L的正方形的4个角。

与经典的Simplex噪声算法或Perlin噪声算法相比,增益被认为是实质性的,因为每个顶点S的梯度G(S)只计算一次。由于每个图像顶点 P上的梯度值的贡献度f()的相加性以及由于有限的邻域N(S),这种设置成为可能。

在邻域的图像顶点P上的回路仅包括关于缓存、分支预测器和矢量化的加法和非常友好的计算。

发明人随后确定,就计算复杂度而言,执行噪声的非局部计算更有效,即,通过不像经典算法那样局部地(即,逐个顶点地)确定该噪声。

根据本发明,将过程噪声(例如,Simplex噪声)施加到图像元素的顶点参数上,以便转换数字图像,并为其提供一些噪声方面,变得更加有效。

已经参考优选实施方式描述了本发明。然而,在本发明的范围内,许多变化是可能的。

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