ColorSketch

ColorSketch

“ColorSketch: A Drawing Assistant for Generating Color Sketches from Photos”

前言

拿到这篇文章的时候,我还是很惊喜的。因为之前很少阅读应用或者工程相关的论文,借着这次机会,看看是否能让自己的科研思路转变转变,不做一个一直改模型发Paper的机器。在我看来,很多地方都能让人眼前一亮,之前在计算机图形学这门课中也有了解到 Color Sketching 这个领域的探索,如有一个师兄进行的研究是给草图上色。

在这篇文章里,作者制作了一个绘画协助系统——ColorSketch,用来协助画家将真实图像转化为 Color Sketching 风格的图片。

在这里插入图片描述

ColorSketch 包含两个阶段:

  1. Offline Preprocessing
  2. Online Interactive Drawing

Preprocessing

在这个阶段中,ColorSketch 使用轮廓检测和分层图像分割技术来协助画家生成不同物体(区域)的边界。这一步大家可能都能想到用图像分割来做,这里使用的是 Contour Detection and Hierarchical Image Segmentation 这篇文章里的算法。其中的一个亮点就是 Hierarchical 的思想:

在这里插入图片描述

因为对图像分割没有很多了解,同时它也不是这篇文章的重点,这里也就不详细讲解这个算法。如果对图像分割感兴趣,可以看看下面一些相关链接:

Interactive drawing

在这个阶段中,ColorSketch 给画家提供了更多的自由,如可以自定义轮廓,增加空白区域等。这里有几个值得一提的算法。

Region Boundary Smoothing

对于新手说,绘制一条线段或者虚线总会出现不够平滑的效果,为了让新手绘制的区域边界也能跟专业画家绘制的一样平滑,ColorSketch 使用高斯滤波器来实现平滑效果,但它需要邻域像素来协助工作,作者发现这些边界很大一部分是被多个区域共享的,这样高斯滤波器的效果很大程度依赖于边界的区域关系。为了减少这个不确定性,作者在进行这个步骤前,先将各个区域按照面积大小进行排序,这样的话每个区域只需要光滑其未处理过的边界。

Color Stylization

这个部分是我最喜欢的之一,另一个是下面将要提到的 Brush Stroke Placement and Rendering。通常在将真实世界图像转化为 color sketching 风格图像时,颜色是非常重要的。作者使用了机器学习的方法,采集了各个区域的像素颜色均值以及对应的画家所使用的颜色作为数据集,在 HSV 颜色空间里,做一个仿射变换,变换矩阵 M M M使用线性回归训练得到。记原来区域的颜色为 R R R,对应的变化颜色为 R ′ : R ′ = M R R': R'=MR R:R=MR

为什么使用线性回归模型即可?

按照我对机器学习领域的理解,如果说数据间的关系通过一个简单的规则就可以表示,那么就没有必要去复杂化。周志华的西瓜书中提到的 Occam’s Razor 原则就说明了这一点。

Occam’s razor (or Ockham’s razor) is a principle from philosophy. Suppose there exist two explanations for an occurrence. In this case the one that requires the least speculation is usually correct. Another way of saying it is that the more assumptions you have to make, the more unlikely an explanation.

颜色也无需做到过于精确,毕竟人眼对颜色细微的变化并不敏感。

同时,简单也代表效率,以线性回归和随机森林为例,线性回归在有不俗的表现的同时,计算速度非常快,因为就是一个矩阵乘法,如果将区域中的像素按列排成一个矩阵,那么在GPU上运行极具效率。因为这是个图像化工具,在上计算机图像学这门课时,我就体会到算法对GPU的友好度有多么重要,因此线性模型在这个地方我觉得很加分。

Brush Stroke Placement and Rendering

在这个部分里,作者提出了一个 Anisotropic vector quantization 的模型,它其实是一个聚类算法,目的是将区域分解成多个细长的 cell。这个模型实际上是将 K-means 算法的欧式距离替换成 Anisotropic Distance,定义为:

在这里插入图片描述

其中P和C分别代表两个像素, x ′ , y ′ , x ′ ′ , y ′ ′ x', y', x'', y'' x,y,x,y 分别是P在C的局部坐标系里的坐标和C在P的局部坐标系里的坐标, h , h c h, h_c h,hc分别是P和C的颜色。这样说会有点抽象,但是也不用过度去解读它,只需要理解成作者利用了像素的坐标以及颜色来建模两个像素的差异。

下面是使用 ColorSketch 的画笔放置算法与随机摆放的效果比较:
在这里插入图片描述

Blank Area Creation

为了凸显物体间的遮挡关系,作者还在区域的边界和内部创建了空白区域,为了实现这个部分。ColorSketch 预先计算了区域的深度图(听起来有点像计算机图像学里的概念)。对于区域边界,首先记边界的一部分为 ∂ S ′ \partial S' S,定义一个标量函数 f f f,其将 ∂ S ′ \partial S' S 中较大的值作一个光滑变换到 ∂ S − ∂ S ′ \partial S-\partial S' SS 里较小的值。给定函数 f f f 和一个阈值 τ \tau τ ,区域 S S S 就能分割成两部分,然后其中一部分留白。这里作者使用了一个泊松方程来求解。

在这里插入图片描述

(因为没能理解这个地方是怎么求解的,所以如果有说错的地方,欢迎纠正。)

一些浅陋见解

之前也说到我是第一次阅读这类偏向应用的文章,但在这篇文章中,很多亮点(或者说灵感)真的十分惊艳。在一种站着说话不腰疼的姿态下,谈谈这个系统的优缺点:

  1. 在文章中作者也做了一些调查,发现这个系统确实能给绘画新手带来帮助,虽然我没有使用过这个系统,如果它能够上线,对于我们这种手残党来说真的是好消息。
  2. 对机器学习的使用恰到好处,这才是机器学习该有的样子,而不是滥用深度学习。说到这就想起了前些天看到的用深度学习预测余震位置的 Nature 论文遭受了地震一般的猛烈质疑。吃瓜链接
  3. 在Preprocessing阶段,ColorSketch 没有深度学习相关的图像分割模型,但是近些年来,基于FCN等网络对于图像语义分割的效果提升十分明显,使用这些图像分割技术是否能带来更好的效果呢?

后续如果想在CV这个方向继续下去的话,目前所学的这些机器学习算法是远远不够的。例如一些经典的计算机视觉算法需要好好地去拜读一下文章,同时数学建模能力有待加强,不然真的很多东西都看不懂,更做不来。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值