铅笔画算法
程序员文章站
2023-12-27 10:25:33
...
关于铅笔画算法
图像铅笔画算法,属于一直是非真实感绘制领域(Non-Photorealistic Rendering,NPR)中很热门的一个课题,但是计算机也很难模拟出像人一样真实的画质,这也显得CG师们的重要性。本文是基于香港中文大学Cewu Lu等人所做的工作《Combining Sketch and Tone for Pencil Drawing Production》,描述计算机生成铅笔画的艺术。本人才疏学浅,描述如有错误,还望指点。
算法概述
作者基于对日常生活中的人手绘铅笔画的观察,可以分为两个步骤,第一步勾勒出物体的大致轮廓;第二步是对物体进行色调渲染,即用铅笔反复轻轻的划。
也就是说铅笔画是由结构(Structure)和色调(Tone)组成。
算法步骤如下
- 产生笔画结构(Stroke Structure Generation )
- 色调渲染(Tone Rendering)
- 笔画结构图与色调渲染图融合得到最终图像
框架图
详细步骤
笔画结构的产生
通过对图像求其梯度得到,得到轮廓。
然后检测轮廓中每一点的方向,公式(2),沿着该方向进行扩展(3)。这里,作者是对得到的梯度图G进行8个方向的卷积,响应最大的卷积的方向为视为该点的方向。
得到每个点的方向后,再对梯度图进行8个方向的卷积,将8个方向的响应叠加在一起,可得到图像的笔画结构
色调渲染
人手绘的铅笔画的直方图往往如下
作者解释道,这是因为铅笔画有高光(bright layer),中间调(mid-tone),阴影(dark layer)三部分组成,如下图所示。
分别用拉布拉斯分布,均匀分布,高斯分布函数来模拟。其表达式如下
然后再对这3个函数调节不同的权重,用最大似然估计权重的值。
最后一步就是纹理渲染,即模拟人反复用铅笔描的过程。
这一步看起来比较抽象,但也简单,就是一个gamma矫正的过程,gamma值越高图像越黑,如图所示。
gamma矫正的示例代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
这里未知的就是区域渲染次数,或者说深度。
这可以由一个最优化问题解决。
我们可令,其中,代表水平和竖直方向上的梯度算子,那么该最优化满足下列条件
进一步,两边取转置
由此可解的
转换形式
由于对称正定,该大规模方程组,可以使用共轭梯度法(CG)求解。
- 纹理图 P
-
色调图 J
-
图层
-
纹理渲染图层
至此,该算法讲解已算完结了。更多内容可以看原始论文。
代码
- 产生笔画结构代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 纹理传输代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
注: 这里我给出的只是第一步产生笔画结构的代码,和纹理渲染部分代码,只有色调映射部分未给。若对此算法感兴趣,可以参考作者论文。另外作者主页上有部分代码,可以下载
效果
图片来源互联网,侵权则删。
致谢
在此感谢采石工(QQ544617183)指正公式求解过程中几处不正确。
附上采石工的推导证明
软件下载地址(可执行程序exe)
感兴趣的朋友可以点此下载,尝试效果。
更多阅读
http://www.cnblogs.com/Imageshop/p/4285566.html
http://www.cse.cuhk.edu.hk/~leojia/projects/pencilsketch/pencil_drawing.htm
转载请保留以下信息
作者 | 日期 | 联系方式 |
---|---|---|
风吹夏天 | 2015年5月2日 | wincoder#qq.com |