差不多是半年前,看到一篇关于如何将图像转化为手绘铅笔风格图像的算法论文,但是苦于是个门外汉,数学也快忘光了。然而,这段时间一直在学习计算机视觉和图像处理方面的知识,数学也进行了一些复习,这才想起那篇论文,想着能不能实现一下。论文为香港中文大学的Combining Sketch and Tone for Pencil Drawing Production,由于英语阅读水平还有点不够,一些关键的地方不太能理解。不过好在有位热心人在博客中用中文记录了这篇论文的实现的过程——图像铅笔画算法,写的很详细,可以跟论文结合一起看。
2017-3-28
今天按照其论文的步骤实现,将图像梯度图分为八个方向,然后再跟各自相对应方向的直线图进行卷积,相加即可得到初步的铅笔轮廓图。不过由于我是在Mathematica上实现的,总感觉速度有点慢。上面那个博主用opencv实现的程序,一副图像总共才花了两三秒而已(主要是现在对opencv还不够熟练)。
上面代码是用来获取相应方向的直线(实际上是构造矩阵),便于后面进行卷积。
这段代码是用来获取图像的梯度图以及梯度方向值。
这段代码则是构建了每个方向的梯度图以及用来卷积的直线方向矩阵。
将各个方向的梯度图与其相应方向的直线图进行卷积并叠加,得到铅笔画像的初步轮廓图。效果如下:
原图↑
初步铅笔轮廓↑
我想着偷个懒,能不能直接用铅笔纹理图将上述轮廓图进行直方图变换得到比较理想的图像,从结果来看我简直太naive!
这是铅笔纹理图↑
直接与纹理图进行直方图转换的结果↑
很明显,不是我想的那么简单……色调明显不对。不过,我看到色调那块的模拟铅笔画分布时又懵了,因为概率论这块还复习的不是很好,有点不能理解,所以还得赶紧推进自己的计划才行,修炼不到家……
发表回复
要发表评论,您必须先登录。