风格化渲染之油画渲染:Customizing Painterly Rendering Styles Using Stroke Processes——论文阅读和个人理解

摘要

文中提出了一种基于sketch(单个笔划)Non-photorealistic rendering的方法。效果如图

1 引言

本章主要引入了几个用于控制式样渲染的参数

Density——密度:这个参数和图像内stroke的数量成正比

Non-Uniformity——不均匀度:用于衡量图像内笔划较为密集的zone和较为稀疏的zone的strokes的数量对比,这个值越大,数量对比越悬殊

Local Isotropy——局部各向同性:这个值用来衡量局部的区域内,笔划的方向的相似度,这个值越高,局部的笔划方向会更加趋同,图像会看起来更加“平滑”

Coarseness——粗糙度:指的是stroke的平均大小,越大,整个图像看起来越“粗糙”

Size Contrast——尺寸对比度:尺寸的局部方差,代表某个stroke和其相邻的stroke在尺寸上的差别大小程度,以下类似

Lightness Contrast——亮度对比度

Chroma Contrast——色度(饱和度)对比度

Hue Contrast——色相对比度

需要注意的是,最后的三项参数,亮度、色度和色相对比度,应该是在CIELCH空间下衡量的。

后面又提到,本文在设计参数时,着重强调了八个参数中的五个,即,Local Isotropiy, Size Contrast, Lightness Contrast, Chroma Contrast, Hue Contrast(但其他的三个参数也有用到)

本文的contribution

(1)强调contrast的参数设计

(2)一种用来表示相邻笔划关系的graph model

(3)快速计算stroke属性的算法

2 相关工作

3 Stroke Processes

简单起见,将笔划视作一个矩形,并且其具有以下属性:

矩形的中心位置p(x, y)

主轴的方向θ

大小s(包括长u和宽v)

颜色c

对组成一幅图像的M个strokes,他们的四个属性分别可以组成四个集合,P, Θ,S和C。

笔划生成的过程分为三个phase

1 根据density和non uniformity,首先对所有的stroke进行全局的布局(即生成P)

2 建立一个graph model来模拟相邻笔划之间的关系。每个笔划都是graph中的一个nod

3 根据其它的几个parameter 生成其它的三个集合 Θ,S和C

这个过程将笔画集合 (P,Θ,S,C) 分解为 P 和 (Θ,S,C|P)

其中,第一步是一个非平稳的泊松空间点过程(non-stationary hard-core Poisson spatial point process, 这里的hard-core后面会解释到)

第二和第三步,是一个基于 PDE 的在graph model上的随机反应扩散过程

假设图的拓扑关系(联通关系)仅由 P 和 Θ 决定,并且 S 和 C 在给定拓扑的情况下条件独立,我们可以将 (Θ,S,C|P) 进一步分解为 (Θ|P), (S|P, Θ) 和 (C|P,Θ),并分别计算它们。

下图给出了算法的pipeline

3.1 P的计算

P的计算分为三步

1、计算一个显着性图(saliency map),文中给的参考方法是[Freeman and Adelson 1991;
Collomosse and Hall 2002],(个人理解,其它的显着性map方法应该也ok)

2、计算笔划空间分布的密度图。假设这个密度和显着性在空间上是正相关的,那么通过一维直方图匹配[Gonzalez and Woods 2002]和尾截断指数分布(tail-truncated exponential distribution,并且其指数和前述的non-uniformity成正比)来生成笔划空间分布的密度图。(个人理解,就是一种从saliency到density map的指数映射,并且指数和 non-uniformity有关),这样,使得当non-uniformity增加时,更多的像素将具有非常低的概率质量,因此笔画往往会更多地聚集在几个显着区域周围。

3、根据density和前面计算的density map采样若干个stroke positions。这个具体的数量由图像的大小和denstiy决定;而density map影响的是在该点采样的stroke position的core大小,采样点的density越大,其core越小——这些采样点都是hard core的,换言之,别的采样点是不允许出现在当前采样点的core内部的。下图就是一个density map和相对应的stroke position samples的example,可以看到采样的局部密度是和density map成正相关的。

关于第三步,上面的理解不一定对,因为后面作者提到他们采用的是——

使用非均匀密度图但在整个图像格子上使用均匀抑制半径(Note that for the sampling, we use a non-uniform density map but a uniform inhibition radius across the image lattice)

作者解释了这样做的优点:在抑制半径小于最小的stroke尺寸的情况下,总是可以产生足够的笔划来覆盖整个画布,而如果density影响了局部的抑制半径,那么在density比较低的地方,笔划也必须有足够大的尺寸,要不就会产生很多“缝隙”。这个问题虽然可以通过scaling的方法解决,但是会使得stroke的自定义风格不那么灵活。——但个人理解,无论density map是否影响inhibition radius,产生的结果应该都是相似的。

3.2 建立stroke的graph model

这里建立了一个Markov Graph,每个node就是前面计算得到的P中的采样点,每个节点最多连接周围的其它四个节点。根据stroke之间的距离以及方向来计算整个graph的邻域结构。具体方法如下:

1、首先计算一个初始的参考方向场,然后将每个笔划的方向θ设置为该点的方向。作者在文中给出了两种计算local orientation的方法:通过扩散分割边界和显着草图计算的方向场 [Zeng 等人, 2009],或通过最强梯度的 RBF 插值 [Hays and Essa 2004]。这里个人更推荐用edge tangent field计算local orientation,思路是首先计算图像的structure tensor,平滑后再计算structure tensor的特征值和特征向量,structure tensor的特征向量是可以表征图像的local orientation的。

2、在每个position采样点构建直角坐标系,x轴或y轴和局部orientation对齐

3、在每个象限中,找到一个欧拉距离最近的笔划,将这两个笔划连接起来。当然,当这个距离超过某一个preset的阈值的时候,这个象限被忽略。当这个方向指向图像的边界时,这个象限也可以忽略。

Q:一个思考:如果某个stroke指向的某个邻居已经具有了4邻节点,该怎么办?

A:这里的邻域设计是非对称的,即,如果笔画 b 属于笔画 a 的邻居,即 b ∈ N(a),这并不意味着相反陈述 a ∈ N(b)。换言之,这些连接各个节点的边是有向边,这个Markov Graph是一个有向图Directed Graph。

下图中,作者给出了一个对比,分别是,图(a),使用作者设计的的有向图构建graph model,图(b),使用无向图,规定每个node只能有4个neighbour node所构建的有向图,图(c),使用固定半径搜索范围内的所有neighbour node构建无向图。可以看出来图(a)构建的graph model更漂亮。

作者认为这种graph model构建方法不仅考虑了笔划位置,还考虑了他们的方向,对于艺术化渲染意义重大。

3.3 生成笔划的其它属性(Θ、S、C)

使用随即反应-扩散方程来计算这些属性。其中预先设置的几个contrast参数用来control相邻的stroke之间的属性。

3.3.1 笔划方向Θ

使用了随机反应扩散方程来计算笔划方向:

其中,ε是在每次迭代中加入的随机噪声。由于方向θ在0~2pi中是周期性的,所以第二项是一个扩散项:

其中θn是相邻笔划的方向,ωn是与这些笔划的空间距离成反比的权重。

另外,式(1)中的第一项定义为: 

其中的θ*指的是在第3.2节第一步中计算得到的local orientation field。

式(1)中的 λθ和参数中的Local Isotropy成比例关系。

具体来说,当 λθ > 0 时,扩散项将每个笔画的方向旋转到其相邻笔画的方向以使它们相似,从而导致平滑的风格(如梵高的风格)。当 λθ < 0 时,它将扩散转化为集中,从而使相邻笔画的方向相互远离,从而导致风格杂乱。

等式(1)中的过程,如果没有ε这一项的话,等价于optimize一个Markov field energy function:

其中,φ(·) = 1 -cos(·);权重ωij与两个笔划的欧氏距离成反比;

仅仅看方程4的话,这个式子是有上界和下界的,而且在式子(1)的反应过程中会收敛到local optimal。使用 ε使得我们不能再确保最小值,但幸运的是这是不必要的,并且达到接近最小值的某个地方就足以满足我们的目的。

经过数次迭代后,Θ就接近收敛了。此时需要根据新的Θ重新更新整个图的连接:即重新构建graph model中的边。好在虽然需要迭代,但这个速度还是很快的,因为stroke的数量级是很小的。

3.3.2 笔划尺寸S

笔划的尺寸的生成和方向是类似的,但尺寸并不像方向一样是周期性的。

这里为笔划尺寸定义的扩散函数为:

这个反应过程对应的马尔可夫场能量函数为:

λs和参数中的size contrast成反比:大的 λs 导致局部相似的笔画大小,因此大小对比度较低。

另外,笔划本身的大小由第一项控制。s*= (u*,v*)是一个size的参考值,是使用直方图匹配从saliency map中生成的。这个过程类似于生成density map的过程,但是大小对应要反过来,因为大显着性应该对应较小的笔划size。并且,这个直方图应该匹配到两个分别以length和width为中心的拉普拉斯分布上。为了保证尺寸不会越界,还应该设定一个截断阈值。

parameter中的coarseness是通过影响length和width来间接控制size的大小的。

3.3.3 笔划颜色 C

笔画的颜色是比较复杂的。因为在CIELCH空间中表示颜色的,所以其中包括了非周期性的亮度,饱和度,以及周期性的色相两个部分。在这一部分中,使用原像素的颜色作为参考颜色c*= (l*,k*,h*)。对于亮度和饱和度,其扩散函数为:

对于色相,其扩散函数为:

相对应的能量方程也是类似的,这里不再赘述。

最后,在调整参数生成图像的时候:

事实上,当用户调整一个或多个感知维度时,通常不需要从头开始。例如,如果只调整方向的“局部各向同性”,则笔画位置P不需要更新,如果只调整“色调对比度”,则除了C的色调通道不需要更新。与之前的一些基于优化的系统一旦改变单个参数就需要完全重新计算相比,这显着降低了计算成本。

本文的知识部分大概就是这样了。由于公司原因,代码就不放在这里了。整个实现过程中只有markov graph的构建稍微复杂一点,其它的部分都是相对简单的。

以上是阅读本文时候的记录和一些个人见解,如有想法,可以在评论区讨论。

猜你喜欢

转载自blog.csdn.net/q274488181/article/details/122305376
今日推荐