Combining Sketch and Tone for Pencil Drawing Production 是一个非常出色的自然图像转铅笔画的算法,具体的算法原理就不多说了,不了解的可以看一下这个博客,写得非常清楚了:
http://blog.csdn.net/bluecol/article/details/45422763
这里主要写一下我的开发过程,和用到的优化方法。
这个算法主要有三个步骤:
(1) Generate Structure Map
(2) Generate Tone Map
(3) Generate Texture Map
这里面,最费时间的是第(3)步,其中涉及到了一个超大规模稀疏线性方程组的求解,其将是第(1)步,涉及到了图像的16次卷积操作。第(2)费时相当短,不需要优化。
先看第(3)步,按照文章的实现思路,构造稀疏矩阵,然后用CG求解,对于450 * 600的图像,需要花费大约600ms,而且由于直接采用了现成的稀疏矩阵算法库,这个模块优化起来相当吃力。那有没有方法可以替代这个步骤呢?我们先观察一下生成所CG求解出来的beta有什么样的特征。用下现这两幅图作实验,其中左图是原图,右图是纹理图。
用CG求解出来的beta是这个样子:
可以在beta图上看到明显的输入的纹理图像的痕迹,因此,可以猜测,beta本质上是由输入到的纹理图像与另外一幅图合成的。再考虑到Texture map 的生成算法:
Texture Map = (Tone Map) ^beta,也就是说texture Map由于Tone Map经过一个gamma变换的衰减得到的,因此,这个“另外一幅图”肯定是和Tone Map相关的。上面右图就是Tone Map图,比较beta与Tone Map,可以很容易的得到用于合成beta的另外一幅图就是:(1 – Tone Map):
找到了这两个用于合成的图,我们就可以借用铅笔画生成算法里将Structure Map 和 Texture Map进行合成时所采用的方法,将这两个图合成一个beta图,具体方法就是将这两个图的对应像素进行相乘,可以得到下面的beta图的一个近似,我们称为beta_:
对比,beta和beta_,可以看



被折叠的 条评论
为什么被折叠?



