关于铅笔画算法
图像铅笔画算法,属于一直是非真实感绘制领域(Non-Photorealistic Rendering,NPR)中很热门的一个课题,但是计算机也很难模拟出像人一样真实的画质,这也显得CG师们的重要性。本文是基于香港中文大学Cewu Lu等人所做的工作《Combining Sketch and Tone for Pencil Drawing Production》,描述计算机生成铅笔画的艺术。本人才疏学浅,描述如有错误,还望指点。
算法概述
作者基于对日常生活中的人手绘铅笔画的观察,可以分为两个步骤,第一步勾勒出物体的大致轮廓;第二步是对物体进行色调渲染,即用铅笔反复轻轻的划。
也就是说铅笔画是由结构(Structure)和色调(Tone)组成。
算法步骤如下
- 产生笔画结构(Stroke Structure Generation )
- 色调渲染(Tone Rendering)
- 笔画结构图与色调渲染图融合得到最终图像
框架图
详细步骤
笔画结构的产生
通过对图像求其梯度得到,得到轮廓。
G=((∂ x I) 2 +(∂ y I) 2 ) 12 (1)
然后检测轮廓中每一点的方向,公式(2),沿着该方向进行扩展(3)。这里,作者是对得到的梯度图G进行8个方向的卷积,响应最大的卷积的方向为视为该点的方向。
C i (p)={
G(p)0 ifargmax i {
ψ i ⊗G}(p)=iotherwise (2)
得到每个点的方向后,再对梯度图进行8个方向的卷积,将8个方向的响应叠加在一起,可得到图像的笔画结构
S=∑ i=1 8 ψ i ⊗C i (3)
色调渲染
人手绘的铅笔画的直方图往往如下
作者解释道,这是因为铅笔画有高光(bright layer),中间调(mid-tone),阴影(dark layer)三部分组成,如下图所示。
分别用 拉布拉斯分布,均匀分布,高斯分布函数来模拟。其表达式如下
P 1 (v)=⎧ ⎩ ⎨ 1σ b e −1−vσ b