静画变动画

交代前提

前段休假中,一个巧合,突然想起一件欠着别人多年的事情来。

三年前,朋友见我各种机器视觉玩具玩得飞起,让我给他们公司搞点装逼东西,需求很简单:“艺术范,科技感”。

我就一搞技术的不懂你们什么感觉什么艺术啊,但又不好拒绝,于是“没问题,有时间的时候帮你弄”。这“有时间”一晃就是三年(其实是真没时间)。

上个月初,在一个度假村的湖边,躺着发呆,眼前风景真是美如画。不知道是不是因为度假村想营造一种国际感,全部公共场合的电视放的都是英文节目,菜单什么的也都双语,我那段时间脑内活动语言也跟着切换到英文去。

美如画 --> 画的英文是啥来着 --> picture好像太泛,不算画 --> painting,这个动名词不错,既是画,又能指代画出来的画,又能指代画的动作 --> 动作?? --> 输入一副画,输出的是绘画过程动画,岂不是很炫? --> 啊,好像以前欠着人点什么东西能还上了。

以上就是现在今天要说的这个控件的来源。

演示

视频演示--打开bilibili

1.gif

2.gif

3.gif


过程描述

简单描述一下整体过程,细节计算就不说了,等有必要的时候在写(看心情)。会来RSS关联我日志的朋友,我相信通过关键字就知道我怎么干的了,没必要浪费唇舌。

初值准备

重新采样原图,避免原图太大招成过分低效。 图像灰度、高斯作为后续使用素材避免重复采样。

区分绘画区块

  1. haar取头位置及大小。
  2. 二值化+降噪+突出主题(高亮度部分,相对较高,过爆区低权重)做预处理。形成一些“区域”。
  3. 计算图像中的所有边界,然后利用随机膨胀来形成一些封闭区域。这一步与第二步并行。
  4. 对(2)、(3)得到“区域”利用相关性系数法判断各之间的关系,合并。然后分水岭算法分区。
  5. 最后建立包边,得到多边形包块列表。

笔触顺序

计算每块面积。

各区块按头位置以及区块面积大小确定排序顺序。

头所在区或最大面积区,向两边延伸,如果当前附近有小区块则优先考虑。接着由第二大面积区开始,向周围延伸。以此类推。

根据区块排列顺序,重新采样canny的边界点。

采样使用扫描线,从左往右,从上往下, 扫到的第一个点,取值后,点去除。然后开始递归,检查四向连通(左下,下,右下,右),优先完成一条最长的完整线。然后直到该点连接的全部线全部获取。不过递归容易爆栈,我在一条线长度超过400时强制中断掉了。

至此,基本笔触顺序获取完成。

不过后来进一步优化,因为有时候有些包块会很大,例如背景蓝天。此时如果画面上Y方向的长物体少的话,按照上述方法采样画出来的顺序像是打印机。于是把块度太宽或太长的区块分为几个部分分别采样,而不是直接横穿整个屏幕。

绘制草图

绘制素描线条时,并不使用canny的结果,因为太“干”。

通过低强度高斯平滑取反,与高强度高斯做差,得到高斯平滑掉的突变,以此得到一张类似低密度阴影图。加上sobel或者拉普拉斯作为边界强化,就得到一张完整的铅笔“草图”。

利用上一节获取到的笔触顺序,将草图绘制在图形上下文空间中,按照“帧率”和预设绘图时间渲染图像。

绘制底色

按照笔触的分块顺序,对草图进行上色。

第一遍,按照区块抠原图,抠出的部分直接取均值,然后再与255平均,作为纯底色进行上色。

第二遍,对整图使用最大强度的stylization进行风格化,然后用各区块进行抠图,分别与各自底色加权平均。

第三遍,在第二遍的基础上加权平均一次,产生水彩效果。

为了上色看起来不那么单调,对大块的区域模仿手工刷油漆效果先涂一遍,再以斜对角扫描线的形式补全毛刷没刷到的位置。

加强线条与阴影

作为水彩到原图的过度过程,我们知道水彩风格从整体上看,色彩是偏淡的。而现实照片是邻角分明,通过阴影来表现立体感。

所以在图像绘制原图前,把“重色彩”部分,用黑色先“打底”。这步用拉普拉斯的粗略边界和阴影效果来覆盖,理论上有比较好的效果,但由于拉普拉斯本身的问题,效果不稳定。我最后直接用canny描个边就拉倒了(偷懒)。

绘制原图

进行两次涂抹,用模糊原图按区块顺序加权平均一次,让水彩效果产生立体感,接近原图。最后一次用原图覆盖。

至此,整个绘图过程完成。

问题

因为基于信号波动来分区,基于高频高能信号来决定绘画顺序和笔触。

所以高强度的高斯处理过的图像是没法处理的,帕金森手拍出来的是没法处理的,还有那种柔光美颜开到最大的那些。

还有一个情况就是波光粼粼的水面,湿漉漉的高清草地,虽然能处理,但是需要处理的东西太多。高能信号太多,太零散,会导致性能消耗严重。

最后,效果最好的当然就是专业摄影师的作品或者是人工作画的作品:有意识地利用光能来强调“主题”,主次边界分明,细节清晰。

源码

github

2018-12-18 12:07 修改

由于项目接收人表示要拿去弄知识产权还是什么专利之类的东西,所以我寻思着还是把网上的源码删掉好了,免得节外生枝。想要玩的朋友直接联系我,源码预计会在我手上保留至少到明年3月。

2018-12-28 17:25 修改

嗯,征得同意,旧版公开。

github

未公开的版本也仅仅是草图多一步阴影纹理贴图,让草图更接近素描而已,并没有太大差别。

原文:大专栏  静画变动画


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11615030.html