Alexandrina Orzan, Adrien Bousseau, Holger Winnemöller, Pascal Barla, Joëlle Thollot, David Salesin

ACM Transactions on Graphics (Proceedings of SIGGRAPH 2008), Volume 27 - 2008

原文相关链接:https://maverick.inria.fr/Publications/2008/OBWBTS08/

扩散曲线:光滑阴影图的矢量表示

本人简要笔记:

扩散曲线:光滑阴影图的矢量表示

摘要:首次将扩散曲线作为矢量图原语,同时提供了一个基于gpu的实现的绘图系统,利用作者的绘图系统,既可以方便艺术家自由创作矢量图,也可对图像进行自动矢量化。

关键词:Vector graphics, vectorization, gradient mesh, color diffusion, image creation, image reconstruction

矢量图,矢量化,梯度网格,颜色扩散,图像生成,图像重建

使用矢量几何图元创建艺术作品所需时间太长,现有工具大多仅支持线性或径向渐变。当前梯度网格作为处理复杂颜色渐变的工具,不仅需要人工初始化梯度网格(Sun提出半自动化初始网格),更重要的一点是梯度网格的拓扑约束使得矢量后的结构不易编辑。

Adobe Live Trace依靠颜色区域分割,多边形拟合分割区域,这样会产生大量的原语,虽然结果质量较好,但是矢量图文件太大。

ArDeco利用线性或二次梯度逼近分割区域内的颜色变化,并在矢量原语被栅格化后重新模糊图像,利用这种方式弱化分割区域间强烈的颜色变化。

这种网格patch结构,往往是全局,不能轻易连接到所描述的内容。

作者方法的优点:稀疏且有意义。并且还是自动提取的

扩散曲线

数据结构:类似于Elder的基于边的表示[1999],允许精细级别的人工控制

扩散曲线绘制渐变:color sources的选取,解poission方程,重新模糊

创建扩散曲线,三种方式:纯手工,手工画线然后自动渲染上色,自动化提取轮廓并上色

1、人工创建(略)

2、追踪图像(颜色自动渲染)

DouglasPeucker algorithm对颜色点拟合一条折线,并不断迭代细分到最大距离小于阈值,最终折线的端点几位曲线上的控制点。

Active Contours的使用允许画家迭代将轮廓曲线进行纠正

3、完全自动创建

依赖作者上一篇文献[1]对光栅图提取的做法,同时显式提取边缘两边的颜色,根据预设的模糊值的3倍作为法向距离提取颜色,使用potrace的算法对提取的边缘进行矢量化。在颜色属性方面和追踪图像的过程一样。

(由于对作者的上篇文献还没有研究,所以这一块内容之后补充)

总结:

与梯度网格相比,扩散曲线表示更具有稀疏性,会更易于编辑,且更方便实用。但是扩散曲线不存在拓扑约束,而拓扑约束一定情景下是有用的。扩散曲线不支持分层和透明。

未来的挑战:

1、多层(基于对象的操作)

2、交叉点的处理,本文默认所有的交叉点都是产生的平滑的颜色梯度,只能通过手动添加颜色控件纠正,或许可以自动化

3、扩散曲线版本的纹理合成工具

4、poission方程可以做很多事情,逗可以进行研究。

具体翻译

摘要:我们提出了一种新的基于矢量的原语——扩散曲线,用于创建平滑的阴影图像。扩散曲线划分它所绘制的空间,并在每一边定义不同的颜色。这些颜色可以沿着曲线平滑地变化。此外,颜色从曲线一侧过渡到另一侧的锐度也可以控制。给定一组扩散曲线,通过求解泊松方程来构造最终图像,泊松方程的约束由所有扩散曲线的梯度集指定。与所有基于矢量的基元一样,扩散曲线方便地支持各种操作,包括基于几何的编辑、关键帧动画和预定义样式化。此外,它们的表示是紧凑的,并且本质上与分辨率无关。为了实时绘制由一组扩散曲线定义的图像,我们提出了一个基于gpu的实现。然后我们演示了一个交互式的绘图系统,允许艺术家使用扩散曲线来创建艺术品,既可以画手绘风格的曲线,也可以通过追踪现有的图像。

该系统简单直观:只需几分钟的指导,我们就可以显示艺术家创造的结果。此外,我们描述了一个完全自动的转换过程,以取得一幅图像,并把它变成一组扩散曲线,接近原始图像内容。

关键词:矢量图,矢量化,梯度网格,颜色扩散,图像生成,图像重建

1、引言

矢量图中基本几何图元的定义可以追溯到我们这个领域的初期。起始于1950年第一台图形显示器的早期的阴极射线管,当时都是矢量显示器,而且具有开创性的画板系统(Sutherland 1980)允许用户操作像点、线和曲线这样的几何元素。光栅图形在20世纪70年代随着帧缓冲的出现而出现,现在通常用于存储、显示和编辑图像。然而,虽然光栅图形提供了一些比矢量图形主要的优势,但是用于获取和显示图像的硬件设备之间的更直接的映射,以及它们的内部表示,矢量图形还是存在一定的优势。最值得注意的是,矢量图形提供了更紧凑的表示、分辨率独立性(允许缩放图像,同时保留锐利的边缘)和几何可编辑性。基于向量的图像更容易动画(通过其基本几何图形的关键帧动画),也更容易格式化(例如通过控制的几何扰动)。由于所有这些原因,基于矢量的绘图工具,如ai、CorelDraw和Inkscape,以及标准化的矢量表示,如Flash和SVG,仍然非常受欢迎。

然而,针对于这些优势,矢量图绘图工具只能提供有限的支持来表示复杂的颜色梯度去组成一些艺术风格。例如,现实主义和超现实主义的艺术流派是依靠平滑的渐变来实现柔和的阴影、离焦模糊、漫反射阴影、光泽反射和各种材质效果。被广泛应用于设计和城市艺术的喷枪技术其基础是(物理)色彩扩散。The Art Deco绘画流派,各种各样的漫画风格,以及众多的绘画风格的颜色梯度也很重要。而图像艺术家,如Yukio Miyamoto,已经能使用现有的矢量图工具取得惊人的效果,,创造这些艺术品需要高度的艺术艺术技巧,更不用说巨大的耐心程度(据报道,一些艺术作品创作时间长达数百小时)。

使用矢量几何图元创建艺术作品如此困难的原因在于,大多数现有的矢量格式仅支持线性或径向梯度。目前最先进的用于矢量化处理复杂梯度的工具就是梯度网格。梯度网格的每个网格顶点都有颜色,网格内部利用顶点颜色值进行线性插值。虽然比简单梯度(或“ramps”-斜坡)更为强大,但是梯度网格仍然存在一些局限性。至关重要的一点是梯度网格所施加的拓扑约束导致一种过度完整的表示,这种表示变得越来越低效,且难以创建和操作。最近,Sun等人提出了一个重要进展:一种优化人工初始网格半自动化方法。虽然他们的方法减少了对用户的手工需求,但是仍然没有解决后续的梯度网格操作过程,对人工初始化梯度网格也没有带来什么方便。

本文提出了一种新的矢量图原语——扩散曲线。扩散曲线将颜色扩散到曲线所分割的两边的空间。提出扩散曲线这种原语的矢量表示背后的动机有两个方面:

其一,这种表示法支持传统手绘技术。艺术家经常先画草图,然后再加颜色。使用我们的工具在一个典型的绘画场景中,艺术家首先奠定绘制曲线对应的颜色边界。与传统的矢量图形相比,颜色边界不需要闭合,甚至可以相交。然后在曲线的两边扩散过程创建平滑的渐变。通过指定沿着曲线的模糊值,艺术家还可以创建平滑的颜色过渡跨越曲线边界。

其二,图像中大多数的颜色变化都可以被认为是由边缘引起的(材料和深度的不连续性、边缘纹理、阴影边界等)。[Koenderink and Doorn 1979; Marr and Hildreth 1980].即使是细微的阴影效果也可以被创建,就好像是由一个或多个边缘引起的,并且这已经被证明了,边缘构成了编码和编辑图像一个近乎完整和自然的原始元素。[Carlsson 1988; Elder 1999; Elder and Goldberg
2001]。在这项工作中,我们依靠视觉算法,如边缘检测,将图像转换成完全自动化的扩散曲线表示。

因此,本文的主要贡献是将扩散曲线定义为一种基本矢量原语,以及两种工具:(1)允许手动创建和编辑扩散曲线的原型。尽管全局的颜色扩散有着巨大的计算量,但利用高效的GPU实现,艺术家依然可以享受即时的视觉反馈。(2)一个基于尺度空间分析全自动的位图图像转换工具。得到的扩散曲线忠实地代表原始图像,并且可以手动编辑。

2.先前地工作

我们在这里回顾利用现代矢量图形工具创建复杂颜色梯度和模糊地现有的技术。

很长时间以来,矢量图一直被受限于只能被颜色均匀或线性和径向梯度填充地基本原语(路径、多边形)。虽然熟练地艺术家可以通过这些简单工具仍然可以创建丰富地矢量艺术品,但结果图像往往因为复杂的梯度和模糊方面的限制呈现平坦或有限地阴影。商业工具如Adobe Live Trace帮助用户从输入的位图图像创建复杂的矢量图形。他们通过将输入图像分割成恒定或变化缓慢的颜色区域,然后将多边形拟合到这些区域原语上。虽然这类技术在均匀变化区域得到了能令人信服的结果,但分割通常在光滑区域产生大量的原语。

Lecot等人[2006]的ArDeco系统允许使用现有的线性或径向梯度基元对更复杂的梯度进行矢量化。它基于将输入图像分割成颜色变化缓慢的区域,并用线性或二次梯度逼近每个区域内的颜色变化。生成的原语完全兼容SVG标准,但是这种近似会在分割区域之间产生强烈的颜色转换。使用SVG格式的现代工具采用了一种更简单的绕过这些限制的解决方案(ai,Corel CorelDraw, Inkscape),即在矢量原语被栅格化后重新模糊图像。然而,它们只允许对每个给定的原语进行统一的模糊,这与平面颜色或简单的渐变的限制类似,需要大量的原语来近似复杂的图像内容。

梯度网格最近被引入来解决这些问题。通过允许用户在一个四边形网格的顶点上指定颜色值,并在网格面上平滑插值的方式。然而,初始化一个网格需要很多的技能和耐心,因为艺术家需要准确的预测网格分辨率和拓扑结构,用以嵌入所需要的平滑特征。这也是为什么大多数的用户依赖示例位图来驱动实现梯度网格的设计。用户首先将输入的照片分解为若干子对象,然后根据子对象的拓扑结构在每个子对象上绘制网格;最后,他们在原始照片中采样颜色,并将它们分配给网格顶点。Web上有许多描述这种方法的教程。然而,绘制有效网格和进精确的手工颜色采样在现实中是非常耗时的(对于一些细节图像需要几个小时甚至几天),并且需要对图像的复杂性由良好的鉴赏能力,这样才能采用适当的网格分辨率。最近,Sun等人的论文提出通过将一个输入梯度网格自动拟合到一个输入图像来帮助用户。这种拟合是通过将得到的图像和输入图像之间的重建误差最小化来实现的。他们的半自动技术很大程度减少了绘制精确网格和采样颜色所需要的时间,尽管用户仍然需要手动指定图片的子对象,并以适当的分辨率绘制初始网格。Price and Barret [2006]提出了一种类似的对象矢量化方法,使用递归细分,直到重构误差降到固定阈值以下。他们的方法产生了忠实的结果但是也产生了许多小块的平滑区域。

然而,对于这两种方法,如何有效地操纵产生的网格用以进行进一步的编辑仍然是不清楚的。我们认为这是由于网格的使用而带来的不必要的约束:使用预定义的拓扑结构,使用特定的patch细分方案,以及选择全局方向。在现实实践中,这将转化成一个密集的patch网,这些patch不能轻易连接到所描述的内容。因此,对于非专业人士来说,这样一组原语的操作很快就会变得无法进行。

本文所描述的新表示方法提供了与梯度网格相同的视觉复杂度,但又两个主要优点:稀疏性和对应有意义的图像特征。的确,新引入的扩散曲线创建起来很直观,因为每个原语都对应于一个图像特征;他们易于操作和动画,因为连接没有约束,也不需要多余的细分;并且他们很好的适应了格式化,这对梯度网格方法来所是很重要的。除此之外,相比于以上讨论的其他方法,我们的表示很自然地可以自动从位图图像中提取:原始位置和原始属性是完全自动找到的;(颜色和模糊)通过视觉算法提取。

换句话说,与经典的矢量表示中的域和梯度网格中的patch相比,我们的方法基于一个事实,图像中大部分颜色变化都是由边缘引起的,或者可以通过边缘来建模,而(可能开放的)域或patch是隐藏式的。这样的稀疏图像表示是受到了Elder[1999]的启发,他证明了图像的边缘是一种近乎完整的表示。Elder[2001]也提出了利用边缘进行基本操作来有效处理图像的可能性(删除边缘,复制和粘贴)。然而,我们相信这一方法的全部潜力尚未实现。因此,我们的转换算法从与Elder系统相同的前提出发。但是通过向量化边缘和属性,我们扩展了它的操作能力,包括形状、颜色、对比度、模糊操作。通过这种方式,我们为用户提供了更直观的编辑工具,并支持分辨率无关、格式化和关键帧动画。

3.扩散曲线

在这个部分,我们将介绍我们表示法的基础原语——扩散曲线,并描述它是如何高效渲染出一幅图像的。扩散曲线的规范和操作将在后面的章节中讨论。

3.1数据结构

图2.扩散曲线由(A)由贝塞尔样条曲线描述的几何曲线,(b)两边任意的颜色,沿着曲线线性插值,(c)沿着曲线线性插值的模糊量。通过扩散和再模糊得到最终图像(d)。值得注意的是只用少数的控制定义了复杂的颜色分布和模糊变化。

扩散曲线的基本元素是一条定义为由一组控制点P指定的三次bezier样条几何曲线。几何图像增加了额外的属性:两组颜色控制点Cl和Cr对应曲线左右两半空间的颜色约束;还有一组模糊控制点Σ定义两部分之间的过渡的平滑度。直观的说,曲线扩散颜色,利用被给模糊值产生柔和过渡。

颜色和模糊属性可以沿着曲线变化,以创建丰富的颜色过渡。这种变化由属性空间中属性控制点之间的插值来引导。在实际中,我们使用线性插值并考虑在整个渲染过程中RGB空间的颜色,因为他们更容易映射到一个有效的GPU实现并且也证明了对使用我们的系统的艺术家来说已经足够了。几何和属性控制点被独立存储,因为他们通常是不相关的。这就产生了四个独立的数组,其中控制点(几何和属性)与他们的各自的参数位置t一起存储在曲线上。

扩散曲线结构编码的数据类似于Elder的基于边的表示[1999]。然而扩散曲线的矢量特征扩展了Elder的离散边的功能,它允许对两个形状进行精确控制——通过控制点和切线的操作——以及外观属性——通过颜色和模糊控制点(图形上的小圆圈)。这个精细级别的控制,连同我们的实时渲染程序,促进了平滑阴影图像的绘制和编辑。

3.2从扩散曲线绘制平滑的渐变

如图3渲染模型设计三个主要步骤:(1)栅格化彩色原图像,其中颜色约束在每个贝塞尔样条的两边用彩色曲线表示,其余的像素是无颜色的;(2)彩色光源的扩散类似于热扩散——一种将颜色扩散到图像上的迭代过程,在GPU上实现以保持实时性。以及(3)使用模糊属性引导的空间变化模糊对得到的图像重新模糊。关于这三个步骤的技术细节将在下面的部分中解释。

3.2.1 颜色来源

使用插值的颜色值,第一步用左右颜色源Cl、Cr渲染曲线上每一个像素。随着渲染的进行,alpha遮罩会被计算出来,以指示颜色源与未定义区域的确切位置。

对于非常锐利的曲线,这些颜色源理论上是无限接近的。然而,在离散的像素网格上,栅格化像素间距过小会导致像素重叠。在我们的例子中,这意味着几个颜色源被绘制在同一个位置,在扩散之后创建人为视觉效果。我们的解决方式是将颜色源与曲线稍微拉开距离,并直接在曲线上添加颜色梯度约束。这个梯度保持锐利的颜色过渡,而被放置在垂直于曲线的方向上一个小距离d的颜色仍然保持独立性。

更精确的说,梯度约束被表示为梯度场w,除了在曲线上,它在所有地方都是0,它等于曲线上的颜色导数。我们将梯度场分解为沿x方向的梯度Wx和沿y方向的梯度Wy。对于曲线上的每一个像素,我们计算从曲线法线N、左(cl)和右(cr)颜色到曲线的颜色导数,如下所示(为了清楚可见我们省略了t参数):Wx,y=(cl-cr)Nx,y

我们对三张RGB图像的颜色和梯度进行栅格化:一幅图像C在曲线的每一遍一幅图像C在曲线的每一边都包含彩色像素,两幅图像Wx,Wy包含梯度场分量。实际上,梯度场是用一个像素宽度的线沿曲线光栅化的。颜色源使用宽度为2d的三角形条进行栅格化,这个三角形条带有着一个特殊的像素着色器的,该像素着色器只绘制在正确距离d的像素(图3(1))。在我们的实验中,d被设置为3个像素。像素重叠仍然会发生在高曲率区域的曲线上(即三角形带自身重叠的区域),或者两条曲线太接近的时候(比如细结构或交叉点)。一个简单的模板测试允许我们在绘制重叠的颜色源之前丢弃它们,这意味着只有梯度场w决定这些区域的颜色转换。在图1中可以看到这样的例子,尽管眉毛的几何形状很薄,但是眉毛被精确地渲染了。

图3:渲染扩散曲线需要(1)对颜色和模糊源进行光栅化,同时使用梯度场W=(Wx,Wy) (2)彩色图像的扩散和模糊,(3)彩色图像的再模糊。

3.2.2扩散

已知上一步计算的颜色源和梯度场,接下来我们计算基于梯度约束的颜色源稳态扩散产生的彩色图像I(图3(2))。类似于以前的方法[Carlsson 1988; Elder 1999; Perez et al. 200]我们将这种扩散表示为泊松方程的解,其中颜色源施加了局部约束:

∆I= div w。

如果像素(x,y)存储一个颜色值I(x,y)=C(x,y)。

∆和div是Laplace和divergence算子。

计算泊松方程需要求解一个大型的、稀疏的线性系统,如果简单实现的话,会非常的耗时。为了给艺术家提供交互式的反馈,我们使用多重网格算法的GPU实现来解决这个问题。[Briggs et al. 2000; Goodnight et al. 2003]. McCann和Pollard[2008]发表在同一期刊上的论文详细描述了一个与我们非常相似的简单实现。多重网格技术背后的思想是使用域的粗略版本来有效解决低频部分,并使用域的细化版本来细化高频部分。我们使用雅可比松弛来求解多重网格的每一层,并限制松弛迭代次数以达到实时性能。一般情况下,对于512×512的图像,每层网格使用5i Jacobi迭代,i是由细到粗的层数。当需要高质量时,可以增加迭代的次数。本文和视频中的所有图像都是使用Nvidia进行渲染的GeForce 8800,提供了512×512网格上的实时性能,具有合理数量的曲线(几千条)。

3.2.3重新模糊

我们渲染过程的最后一步,以颜色扩散产生的含有尖锐边的彩色图像作为输入,并根据沿每一条曲边存储的模糊值进行重新模糊。然而,因为模糊值只沿着曲线定义,我们缺少曲线外像素的模糊值。由Elder[1999]提出的一个简单的解决方案是,将模糊值扩散到图像上,类似于前面描述的颜色扩散。我们采用相同的策略,使用多重网格实现从模糊值创建一个模糊映射B。颜色扩散过程的唯一区别是模糊值精确地位于曲线上,所以我们不需要任何梯度约束。这就产生了下面的等式:

∆B = 0;如果像素(x,y)在曲线上,B(x,y) = σ(x,y)

给出结果模糊映射 B,我们在彩色图像上应用空间变化的模糊(图3(3)),其中每个像素上的模糊内核的大小由该像素所需的模糊量定义。尽管在GPU上实现了空间变化的模糊常规过程,但是对于大型模糊内核来说,这一步的计算成本仍然很高(在我们的实验中大约每帧一秒),所以我们在绘制曲线和操作的时候绕过了这一步,并在绘制交互完成之后重新激活。

3.2.4广角与聚焦(缩放)技术

解泊松方程会得到全局解,这意味着任何颜色值都会影响最终图像的任意像素。尽管有颜色源引入的局部约束降低了全局的影响,但当聚焦(缩放)到图像的子部分的时候这就产生了一个问题,因为当前视图外的曲线仍然会影响视图的内容。为了解决这个问题,不需要高分辨率下的完全泊松解,我们首先计算未聚焦(缩放)图像域的低分辨率扩散,并使用得到的解定义聚焦(缩放)窗口周围的Dirichlet边界条件。这给了我们一个足够好的近似来计算仅在视窗内的全分辨率扩散。

4.创建扩散曲线

创作图像的过程因艺术家而异。一个人可以从草图开始,自由发挥想象力,而另一个人可能更喜欢使用现有的图像作为参考。我们为用户提供了两种创建扩散曲线的选项。对于人工创建,艺术家可以用我们的工具,通过素描线条,然后填充颜色的方式,创建一个图像。而当使用图像作为模板时,我们提出两种方式。辅助:艺术家可以手绘跟踪图像的部分,我们恢复基本内容的颜色。自动:艺术家可以自动转换图像到我们的表现并可能之后编辑它。

4.1人工手动创建

为了方便艺术家的内容创建,我们提供了几个标准工具:曲线几何的编辑,曲线分割,复制/粘贴,缩放,颜色选择,等等。我们也开发了一些特殊的工具:颜色的复制/粘贴,从一个曲线到另一个的模糊属性,属性控制点的编辑(添加,删除和修改)等。在我们项目第3页和会议的DVD上提供的教程提供了当时原型界面的更完整的描述。

为了阐明一个艺术家如何使用我们的扩散曲线,如图4显示了使用我们的工具绘制图像的不同阶段。艺术家采用了与传统绘画一样的直觉过程:先画草图,然后填充颜色。

图4.人工创建的示例步骤:(a)画出曲线的草图(b)调整曲线的位置(c)设置沿着扩散曲线的颜色和模糊(d)得到最后的结果。这张图片是由一位艺术家第一次使用该工具创作的,耗时4个小时。

4.2追踪图像

在很多情况下艺术家不会完全从头开始创作作品,而是使用现有的图像作为指导。为此,我们提供了沿着绘制曲线提取底层位图颜色的可能性,如图5所示。

图5.用扩散曲线追踪:(a)原始位图;(b)左:采用颜色采样进行风格描摹的结果(艺术家绘画时间:不到一分钟);右图:使用活动轮廓和颜色采样的描摹结果(艺术家绘制时间:90分钟)。(c)

相应的扩散曲线(为了演示的目的,颜色源被加厚了)

这里的挑战是正确地提取和矢量化曲线及曲线每一边地颜色。我们还需要考虑,颜色异常可能是由于底层位图中地噪声或曲线定位不够理想而出现的。我们首先在曲线的法线方向上沿距离d(与绘制渲染时所用的距离相同)均匀的对颜色进行采样。然后我们通过测量曲线上当前样本附近的标准偏差来识别颜色异常值。为此,我们在CIE L*a*b*颜色空间进行(被认为感知上是一致的,只是可以注意到差异)。如果一个颜色在L*、a*或b*通道中偏离均值太多,则将其标记为离群值。然后在向量化的过程结束时,为了与我们的渲染系统兼容,我们将颜色转换回RGB。

为了得到类似于用于渲染的线性颜色插值,我们使用DouglasPeucker algorithm对颜色颜色点拟合一条折线。[Douglas and Peucker 1973] 迭代过程从连接第一个点和最后一个点的一条直线开始,反复细分成越来越小的线段,直到实际值与当前折线的最大距离(仍然是CIE L*a*b*)小于误差容限ε。最终折线的端点产生我们附加到曲线上的颜色控制点。图5(b)左侧图像中展示了一个使用颜色采样的创造性示例,一位艺术家绘制了非常有风格的形状,同时使用颜色采样特性来重现原始图像的整体色调,类似于绘画过程[Bertalmio et al. 2000]

当在模板上跟踪时,人们通常希望将曲线定位在底层图像的颜色不连续性的位置上。由于在给定图像的边缘位置精确地绘制曲线并不总是容易的,所以我们提供了一个工具,基于Active Contours [Kass et al. 1987] 。Active Contours被吸引到输入位图的最高梯度值,并允许画家迭代地将曲线吸附到最近的边缘。当下降到局部最小值或者当一个不那么最佳但更风格化的曲线是需要时,轮廓线也很容易被修正。图5(b)-右边显示了使用几何抓取和颜色提取创建的一只瓢虫的图像。相比于原始的,当艺术家选择一种更加格式化和光滑的外观,图像仍然会进行扩散,光滑,散焦模糊和半透明这一些过程。

4.3从位图中自动抽取

最终,艺术家可能想要给一个已经存在的图像添加风格化和表达。我们提出了一个从位图自动化抽取和向量化扩散曲线数据的技术。

数据抽取:有许多方法可以找到边缘并确定其模糊和颜色属性。我们的数据提取基于我们以前的工作。[Orzan et al. 2007] 因为该作品是为基于边缘的图像程式化而“设计”的。扩散曲线将我们以前的方法从基于栅格的方法扩展到一个完全矢量化的版本。为简便起见,我们将只回顾前面方法的基本步骤,感兴趣的读者请参阅Orzan等人[2007]。

图6.我们重建的实例:(a)原始图像(b)转化为我们的表述后的结果;(c)自动提取扩散曲线;(d)原始图像与重建图像的RGB差(放大4倍);注意,最明显的错误发生在边缘,最可能的原因是,通过向量化,我们改变了它们的定位。

基本的方法依赖于高斯尺度空间,它可以被描绘成一堆越来越模糊的版本的图像,在更高的尺度图像显示越来越少的细节。为了从这个尺度空间获得边缘位置和模糊估计,我们首先使用经典的Canny检测器在所有可用的尺度上提取边缘[Canny 1986]。与我们之前只对亮度通道有效的方法相反,我们现在将Canny检测器应用于Di Zenzo[1986]中描述的多通道颜色梯度。这允许我们检测图像的iso-luminant区域的明显颜色变化,在iso-luminant区域亮度梯度将失败。然后,从以往的尺度空间分析中获得灵感[Lindeberg 1996;,我们找到了最佳表示边缘的尺度(边界越模糊,尺度越高)。我们使用这个理想的尺度来识别边缘的模糊程度,就像以前一样,但也使用它来定位边缘。需要注意的是,非常模糊的边缘很难被准确地检测和参数化。在我们的系统中,我们发现非常大的梯度有时被一些较小的梯度近似。

在尺度空间分析之后,我们剩下被选择的边缘映射,它包含边缘位置和边缘像素的模糊值。正如我们在之前的论文中解释的那样[Orzan等人]。,我们还提供了一种提取边缘寿命的方法(测量其在连续尺度上的扩展),它允许分离细节和轮廓边缘。虽然过去我们直接使用提取的数据,但我们的新方法需要一个额外的处理步骤:必须显式地提取边缘两边的颜色。为此,我们从边缘贴图中连接像素链,然后沿着边缘法线的方向在原始图像的每一边采样颜色。在现实中,对于模糊的边缘来说,边缘的法线梯度很难去估计,所以我们使用与每条边缘匹配的折线的法线所给出的方向。对于一个预估的模糊值σ,我们在距离边缘位置3·σ的距离选择颜色,这覆盖了99%的边缘对比度,假设高斯形状的内核[Elder 1999]。对于常规例子,虽然3·σ的距离确保了一个良好的颜色抽取,但是对于结构厚度超过3像素(σ<1)存在数值问题,在这种特殊情况下,颜色无法准备测出。

转换为扩散曲线:对于位置的矢量化,我们从开源的使用方法中获得了灵感

Potrace 软件[Selinger 2003]。该方法首先使用具有最小分段数和最小近似误差的折线逼近像素链,然后将折线转换为由端到端连接的贝塞尔曲线构成的光滑多边形曲线。从折线到曲线的转换使用经典的最小二乘贝塞尔拟合,基于用户指定的最大拟合误差和平滑度。对于属性向量化,我们使用与4.2节相同的方法。

几个参数决定了矢量化图像表示的复杂性和质量。对于边缘几何,canny阈值决定了图像中有多少边缘需要考虑矢量化; 一个降斑参数设置了要考虑矢量化的像素链的最小长度;最后,另外两个参数设置了曲线拟合的平滑度和拟合误差。对于模糊值和颜色值,需要考虑两个参数:用于消除异常值的邻域的大小,以及拟合折线时接受的最大误差。对于本文中的大多数图像,我们使用canny的高阈值0.82.低阈值0.328,丢弃小于5个像素点的像素链,我们使用平滑参数1(Potrace默认值),并将拟合误差设置为0. 因此曲线非常接近原始边缘。对于属性,我们考虑一个9个样本的邻域,对于模糊的最大接受误差是2个模糊尺度,对于颜色的最大接受误差是30 CIE L*a*b*单位。

5结果

扩散曲线作为基于矢量的基元,得益于传统矢量图形的优势: 放大时仍然保持锐利的过渡和关键帧容易通过几何和属性的线性插值执行。我们的表示同样适合全局和局部图像样式化。可以很容易地修改曲线形状和属性,以获得如图8(d)所示的效果。对于从图像中提取的扩散曲线,可以使用Orzan等人[2007]提供的寿命度量来调整细节的保存(图8(c))。

图7带有扩散曲线的关键帧:动画的三个关键帧。

为了验证我们的方法并收集有价值的实用反馈,我们让不同的艺术家使用我们的原型。(不翻译了)

图8风格化效果:(a)原始位图;(b)自动重建;(c)通过去除寿命较短的边缘来简化重构;(d)适用于(c)的整体形状格式;(e)扩大(b)。

6.讨论以及未来工作

在前面的部分中,我们介绍了新的基于矢量的原语,并解释了艺术家利用这种直观的表示方式创建光滑阴影图像的各种选项。我们现在比较我们的方法与最常用的矢量工具创建图像与类似的复杂梯度:梯度网格。接下来,我们确定在未来的工作中需要解决的剩余挑战。

6.1与梯度网格的比较

表示效率:就编码的稀疏性而言,梯度网格和扩散曲线都是非常有效的图像表示方法。在两种表示形式之间进行直接比较是困难的,因为这很大程度上取决于所选择的图像内容(例如,梯度网格需要大量的细分来描绘尖锐的边缘,并且很难将网格拓扑符合复杂的几何形状)。此外,Price和Barret[2006]提出了一种更紧凑的细分梯度网格,但所有可用的工具都使用常规网格。虽然扩散曲线的表示看起来更紧凑(参见图11),但需要注意的是,每个几何曲线都可以保留任意数量的颜色和模糊控制点(参见表9)。因此,尽管稀疏编码的表示被认为是类似的,但我们认为扩散曲线的好处就是在于他的灵活性,因为我们允许曲线上任意角度的控制,对控制点的数目没有拓扑上的上限或下限。

实用性:我们相信扩散曲线是一个比梯度网格更自然的绘图工具。正如之前提及那样,艺术家通常用笔画来描绘图像的边界。扩散曲线也允许艺术家逐步和自然地创造一个艺术品。另一方面,梯度网格,需要仔细的规划和一个好的理解最终组成的意图艺术作品。大多数梯度网格图像是几个独立的矩形或径向梯度网格的复杂组合,经常重叠。在创建和可视化相关图像内容之前,必须做出所有这些决定。

拓扑性:在某些情况下,梯度网格的拓扑约束是相当有用的,例如当移动一个梯度网格到图像的不同部分,或当扭曲整个网格。这样的操作在我们的表示中也是可能的,但不是那么直接。为了移动图像的一部分,相关的边缘必须作为一个单元被选择和移动。更重要的是,如果不支持分层和透明(见6.2节),就很难确定外部边缘的颜色应该如何与它们的新环境相互作用。网格变形可以作为围绕一组边缘的空间变形而实现。

图9:对于这篇论文的图像的曲线,几何控制点(P),左和右颜色控制点(Cl分别Cr)和模糊控制点(Σ)数量

6.2未来的挑战

目前,我们的表现是单层的,但我们知道,多个独立的层为艺术家提供了更多的灵活性。:为了充分利用分层系统的优势,我们需要处理多层的交互(考虑全局泊松解决方案),以及额外的计算需求。图层的混合也需要一个(逐渐)透明度的概念。我们目前的表现形式更多地与平面地图相关[Asente et al. 2007],平面地图在单层中建模矢量图形。

另一个值得改进的点是扩散曲线处理交叉点的方式。目前,扩散曲线出现一种特殊行为(尽管可以预测且有意义):尽管连接到两条相交曲线上的颜色本质上是相互竞争的,但在扩散后仍然创建了一个平滑的颜色梯度(图10(a))。如果不希望出现这种默认行为,用户可以通过在交叉点的每一边添加颜色控件或使用不同颜色将曲线分割成若干部分来纠正它(图10(b))。自动化这些行为将代表一个强大的工具,以减轻用户交互。

另一个所有的矢量图都有的一个限制,出现在包含了很多小颜色或亮度变化(或纹理)的图像或图像区域。在现实中,自动转换可以捕获到纹理高度丰富区域的大部分视觉信息,但是当纹理由许多小结构组成时(与3.2.1中定义的距离d相比小),会产生不精确。此外,表示纹理需要大量的曲线,这使得向量表示效率低下,难以操作。结合扩散曲线版本的纹理合成工具是一个有趣的领域,未来的研究。

最后,由于扩散曲线部分依赖于泊松解决方案,没有什么可以阻止它们在各种常见的Poisson编辑应用程序中的使用(例如,用于图像特性的传输,如阴影,或用于在同一个表示中合并多个图像)。我们计划在不久的将来沿着这个方向扩展我们的原型。

图10:交叉点扩散曲线的默认行为(a)可通过曲线分割和颜色编辑(b)进行校正

图11:梯度网格对比:(a)原始图像(b,c)手动创建梯度网格(b, c)手动创建渐变网格(版权信息),有340个顶点(和许多颜色控制点);(d,e)我们通过在图像上手动跟踪创建的绘图;有38个扩散曲线,365个几何控制点,176个左颜色控制点,156个右颜色控制点。

7.结论

我们引入了扩散曲线作为一种新的图像表示,它提供了通常在矢量方法中发现的大多数好处,比如分辨率独立性、精确可编辑性和紧凑性; 同时允许描绘那些一般只能通过光栅图形实现的高度复杂的图像内容。使用梯度网格,扩散曲线图像在质量和编码效率上都是相当的,但是创建起来更简单(根据使用过这两种工具的艺术家的介绍),并且可以完全自动地从位图中捕获。

参考文献

[1] Orzan A, Bousseau A, Barla P, et al. Structure-preserving manipulation of photographs[C]//Proceedings of the 5th international symposium on Non-photorealistic animation and rendering. 2007: 103-110.

[2] Orzan A, Bousseau A, Winnemöller H, et al. Diffusion curves: a vector representation for smooth-shaded images[J]. ACM Transactions on Graphics (TOG), 2008, 27(3): 1-8.

《Diffusion Curves: A Vector Representation for Smooth-Shaded Images》翻译相关推荐

  1. 《Git版本控制管理(第2版)》——4.3 Git在工作时的概念

    本节书摘来自异步社区<Git版本控制管理(第2版)>一书中的第4章,第4.3节,作者:[美]Jon Loeliger , Matthew McCullough著,更多章节内容可以访问云栖社 ...

  2. 【Git版本控制管理】Gitee(码云)和GitHub的使用

    远程仓库的使用 文章目录 远程仓库的使用 使用码云(Gitee) 使用GitHub 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读 ...

  3. java中git版本控制,git版本控制管理是什么?git如何实现版本控制?

    大家好,今天要跟大家讲的是关于git版本控制管理的一点小知识,git相信程序员小伙伴们都已经很熟悉了,很多项目开发都需要git,所以,git版本控制管理到底是干嘛的呢?Git又如何实现版本控制呢?下面 ...

  4. Git 版本控制管理(一)

    Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 关于 Git 的 ...

  5. Git版本控制管理——简介

    说明 在大型项目开发或者多人协作开发时,都希望可以对软件代码进行管理和追踪,以便确认开发的进度和方便问题追溯.这就需要使用到版本控制系统(VCS),比如Git就是一款很优秀的版本控制工具.如今很多项目 ...

  6. 3.git版本控制-管理修改、撤销、删除

    管理修改 第一次修改 -> git add -> 第二次修改 -> git commit,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交, ...

  7. Git版本控制管理——远程版本库

    之前提到的Git的所有操作都是在本地完成的,而实际项目开发并不是一个人就可以搞定的,通常需要团队的协作,而这些协作可能又不是在同一个地区的,这就涉及到Git的分布式特性了. Git的分布式特定会涉及到 ...

  8. Git版本控制管理(二)--git配置

    在系统上安装好 Git后,还需要配置Git 环境. 每台计算机上只需要配置一次,程序升级时会保留配置信息,也可以在任何时候再次通过运行命令来修改它们. 配置文件位置 Git 自带一个 git conf ...

  9. Git版本控制管理——版本库管理

    本文主要说明如何发布Git仓库. 发布版本库 对于Git来说,服务器并不是必需的.Git更乐于与同一台机器上的同级版本库直接交换文件,而不需要某个服务器来进行代理,或通过各种不需要上级服务器的协议与不 ...

  10. Git版本控制管理——基本Git概念

    基本概念 版本库 Git版本库(repository)只是一个简单的数据库,其中包括所有用来维护与管理项目的修订版本和历史信息.而Git版本不仅会维护项目整个生命周期的完整副本,还会提供版本库本身的副 ...

最新文章

  1. 985学校计算机专业毕业月薪过万,这八个985和211大学分数低,容易考,毕业后月薪过万...
  2. ROS 机器人操作系统进阶实战
  3. 数字后端——可制造性设计
  4. win7关机快捷键_1个U盘+1款软件,电脑小白也能在家轻松重装win7系统
  5. 怎样重建一个损坏的调用堆栈(callstack)
  6. OpenShift 4 - 用Quay扫描OpenShift用到的镜像
  7. navicate 导入mysql数据库
  8. 如何在回调中访问正确的“ this”?
  9. Hadoop之HDFS(二)HDFS基本原理
  10. 20191124每日一句
  11. C# 读取PDF书签内容
  12. ROS:机器人系统设计(连接摄像头、Kinect、激光雷达、URDF建模)
  13. Linux安装后的配置操作
  14. RASP技术进阶系列(一):与WAF的“相爱相杀”
  15. LINUX定时清理文件定时任务
  16. linux网桥--简介
  17. EI收录中国大陆期刊名录(2012年)
  18. 如何把视频压缩,视频压缩软件哪个最好
  19. PMP之项目成本管理
  20. 2019最新iOS面试题及答案

热门文章

  1. 从量子力学到量子卫星:教你成为量子科学高手
  2. 基于android平台多媒体播放器的设计与实现,基于Android的多媒体音乐播放器设计论文...
  3. [C++复健日常] for_each
  4. 服务器机械硬盘坏了怎么修复,机械硬盘能修吗
  5. 大学生穷游网 项目截图
  6. Django如何实现点赞、收藏以及浏览量增减
  7. 学习设计模式之建造者模式
  8. rabbitmq安装问题汇总
  9. 【CSDN 2021 年度总结】半年涨粉11万,铁杵磨成针
  10. 计算机巨人的采访对话英文怎么说,【英文采访稿对话式范文】_英文采访稿对话式范文...