公开/公告号CN104820999A
专利类型发明专利
公开/公告日2015-08-05
原文格式PDF
申请/专利权人 成都品果科技有限公司;
申请/专利号CN201510205504.1
发明设计人 黄亮;
申请日2015-04-28
分类号G06T7/40(20060101);G06T5/00(20060101);
代理机构11001 北京国林贸知识产权代理有限公司;
代理人胡琳梅
地址 610041 四川省成都市高新区世纪城南路216号
入库时间 2023-12-18 10:21:38
法律状态公告日
法律状态信息
法律状态
2018-05-08
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06T7/41 变更前: 变更后: 申请日:20150428
专利权人的姓名或者名称、地址的变更
2017-06-16
授权
授权
2015-09-02
实质审查的生效 IPC(主分类):G06T7/40 申请日:20150428
实质审查的生效
2015-08-05
公开
公开
技术领域
本发明属于图像处理领域,特别涉及一种将自然图像转换成水墨画风格图像的方法。
背景技术
近年来,随着相机数码化、手机相机化,一个全民摄影时代已经来临。对这些图像进行非真实感渲染也成为了图形图像处理领域的一个研究热点。其中,水墨画风格处理就是一种重要的非真实感渲染技术。目前,基于现有的动画软件来制作水墨画需要大量的人机交互操作,而且其复杂程度并不亚于传统的手绘工作。故此,利用图像自动生成水墨画的研究就显得尤为重要。
基于图像的自动水墨画生成算法是将一些用户预定义的笔刷纹理原语映射到待绘制的图像上,目前国际国内针对自动水墨画生成的研究还为数不多,这种基于图像的自动水墨画生成方法不需要毛笔模拟就可以生成水墨画图像。但是,其算法效果并不理想,且处理过程也很费时。
发明内容
为解决上述问题,本发明提供一种将自然图像转换成水墨画风格图像的方法。
为达到上述目的,本发明采用的技术方案是:
一种将自然图像转换成水墨画风格图像的方法,包括如下步骤:
S1、将自然图像转换成灰度图像I,且灰度图像I的像素值范围为[0, 1];
S2、求解灰度图像I的阴影区域,得到阴影图像I_shadow;
S3、计算出灰度图像I的3副改进的FDOG图像I_FDOG1、I_FDOG2和I_FDOG3;
S4、对图像I_FDOG2和I_FDOG3边缘细化分别得到其骨架图I_edgeS和I_edgeL;
S5、对骨架图I_edgeS和I_edgeL分别进行笔划标记得到标记好的笔划图edgeLinesS和edgeLinesL ;
S6、分别在笔划图edgeLinesS和edgeLinesL 上载入笔刷纹理;
S7、初始化绘制图像I_painting,设置初始的绘制图像I_painting为全黑,使得其每个像素点的值都为零;
S8、利用步骤S6中载入笔刷纹理后的笔划图edgeLinesL和图像I_FDOG1在绘制图像I_painting上绘制底层笔划,得到第一绘制图像I_painting1;
S9、利用步骤S6中载入笔刷纹理后的笔划图edgeLinesS和图像I_FDOG1在第一绘制图像I_painting1上绘制顶层笔划,得到第二绘制图像I_painting2;
S10、对第二绘制图像I_painting2进行对比度调节得到第三绘制图像I_painting3;
S11、将第三绘制图像I_painting3进行反相得到第四绘制图像I_painting4;
S12、在第四绘制图像I_painting4上载入墨团浸染纹理得到第五绘制图像I_painting5;
S13、利用步骤S6中载入笔刷纹理后的笔划图edgeLinesS和edgeLinesL在第五绘制图像I_painting5上绘制墨团浸染图层得到第六绘制图像I_painting6;
S14、对步骤S2中阴影图像I_shadow和第六绘制图像I_painting6以正片叠底的方式进行融合得到第七绘制图像I_painting7,也即,I_painting7(y,x) = I_shadow(y,x) * I_painting6(y,x), 其中,I_painting7(y,x)为第七绘制图像上像素值, I_shadow(y,x)为阴影图像像素值,I_painting6(y,x)为第六绘制图像像素值,(y,x)为像素的位置坐标;
S15、载入宣纸纹理图,并与第七绘制图像I_painting7进行正片叠底融合,得到最终的水墨图像。
进一步的,步骤S3中计算出灰度图像I的3副改进的FDOG图像I_FDOG1、I_FDOG2和I_FDOG3均采用如下过程:
S31、复制一份灰度图像I到新的图像I_tmp中;
S32、根据参数sigma_r和phi,计算图像I_tmp的FDOG图像I_fdog;
S33、将图像I_fdog以正片叠底的方式叠加到原图像I_tmp上,也即I_tmp (y,x)= I_fdog (y,x)* I_tmp(y,x),其中,I_tmp(y,x)为图像I_tmp的像素值,I_fdog (y,x)为图像I_fdog的像素值,(y,x)为像素坐标位置;
S34、重复步骤b、c直到达到最大迭代次数n;
上述过程中,当sigma_r = 1.6, phi = 2, n=1时,得到的图像I_fdog即为图像I_FDOG1;当sigma_r = 1.6, phi = 30, n=3时,得到的图像I_fdog即为图像I_FDOG2;当sigma_r = 1.6, phi = 30, n=4时,得到的图像I_fdog即为图像I_FDOG3。
进一步的,步骤S4中对图像I_FDOG2和I_FDOG3边缘细化分别得到其骨架图I_edgeS和I_edgeL具体过程为:首先对图像I_FDOG2和I_FDOG3分别进行二值化处理,其二值化的阈值为1-darkTresh,其中darkTresh为灰度图像I阴影区域的阈值;然后,对两幅二值化处理后的图像分别进行骨架提取,得到骨架图I_edgeS和I_edgeL。
更进一步的,上述darkTresh的计算公式如下,
darkTresh =(max_g – min_g) * factor + min_g
其中,max_g为灰度图像I中像素最大值,min_g为灰度图像I中像素最小值,factor为常数,取值范围为[0.1, 0.3]。
进一步的,步骤S6中笔刷纹理是由画水墨画的笔划模板组成。
进一步的,步骤S10中对第二绘制图像I_painting2进行对比度调节得到第三绘制图像I_painting3是按照如下公式进行全局的色彩调节的,
I_painting3(y,x)= log10(offset+ I_painting2(y,x))- log10(offset)
其中offset为常数,取值范围为[0.1, 4.0],I_painting3(y,x)为第三绘制图像像素值,I_painting2(y,x) 为第二绘制图像像素值。
进一步的,步骤S12中的墨团浸染纹理是由水墨浸染图组成。
采用本技术方案的有益效果:
通过利用改进的FDOG图像,得到了更加连贯有序的边缘笔划;通过对边缘笔划进行两层不同的笔划绘制,得到更加逼真的笔锋;通过添加墨团浸染纹理,更加逼近真实的水墨浸染效果;通过自适应地计算阴影区域值,使得整体的渲染效果有更佳的明暗层次感;采用本技术方案生成的水墨画风格图像效果更加逼真,且生成速度快。
附图说明
图1是本发明的流程示意图。
具体实施方式
为了更好的理解本发明,下面结合附图对本发明作进一步阐述。
如图1所示,一种将自然图像转换成水墨画风格图像的方法,包括如下步骤:
S1、将自然图像转换成灰度图像I,且灰度图像I的像素值范围为[0, 1]。
S2、求解灰度图像I的阴影区域,得到阴影图像I_shadow,具体包括如下过程:
S21、找出灰度图像I中像素最大值max_g和像素最小值min_g,按照公式(max_g – min_g) * factor + min_g计算得到阴影区域的阈值darkThresh,其中factor的取值范围为[0.1, 0.3],本实施例中取0.188;
S22、按照阈值darkThresh对灰度图像I进行二值分割,大于阈值darkThresh的区域被设定为高光区域,其像素值为1.0;小于阈值darkThresh的区域被设定为阴影区域,其像素值为0.0,得到分割后的第一阴影图像I_shadow1;
S23、对第一阴影图像I_shadow1中的高光区域进行噪声剔除,即对区域小于100个像素的8连通区域进行剔除,使其为阴影区域,得到第二阴影图像I_shadow2;
S24、对第二阴影图像I_shadow2中的阴影区域进行噪声剔除,即对区域小于40个像素的8连通区域进行剔除,使其为高光区域,得到第三阴影图像I_shadow3;
S25、对灰度图像I进行平滑滤波处理,得到平滑的图像I_blur;
S26、对第三阴影图像I_shadow3中阴影区域的每个像素进行明暗程度调节,得到第四阴影图像I_shadow4,其具体的调节方式为:
I_shadow4(y,x) = (I_blur(y,x)-min_g)/(darkTresh–min_g) * 0.4 + 0.1,
其中I_shadow4(y,x) 为第四阴影图像I_shadow4像素值,I_blur(y,x)是图像I_blur像素值,(y,x)为像素的位置坐标;
S27、对第四阴影图像I_shadow4进行平滑滤波处理得到最终的阴影图像I_shadow。
S3、计算出灰度图像I的3副改进的FDOG图像I_FDOG1、I_FDOG2和I_FDOG3,具体包括如下过程:
S31、复制一份灰度图像I到新的图像I_tmp中;
S32、根据参数sigma_r和phi,计算图像I_tmp的FDOG图像I_fdog;
S33、将图像I_fdog以正片叠底的方式叠加到原图像I_tmp上,也即
I_tmp (y,x)= I_fdog (y,x)* I_tmp(y,x),
其中,I_tmp(y,x)为图像I_tmp像素值,I_fdog (y,x)为图像I_fdog像素值;
S34、重复步骤S32、S33直到达到最大迭代次数n;
上述过程中,当sigma_r = 1.6, phi = 2, n=1时,得到的图像I_fdog即为图像I_FDOG1;当sigma_r = 1.6, phi = 30, n=3时,得到的图像I_fdog即为图像I_FDOG2;当sigma_r = 1.6, phi = 30, n=4时,得到的图像I_fdog即为图像I_FDOG3。
S4、对图像I_FDOG2和I_FDOG3边缘细化分别得到其骨架图I_edgeS和I_edgeL,具体过程为:
首先对图像I_FDOG2和I_FDOG3分别进行二值化处理,其二值化的阈值为1-darkTresh;然后,对两幅二值化处理后的图像分别进行骨架提取,得到骨架图I_edgeS和I_edgeL。
S5、对骨架图I_edgeS和I_edgeL分别进行笔划标记得到标记好的笔划图edgeLinesS和edgeLinesL 。
笔划标记时要求尽量地让每一笔划可以拟合更长地边缘,每一条边缘路径只能在一个笔划路径上,每一个笔划是由若干条线段首尾相连构成,其具体计算如下所示:
S51、从骨架图I_edgeS的左上角开始,逐行扫描每一个像素,如果此像素是边缘像素,且没有被访问过,便找出与它8邻接的所有边缘点,并将这些边缘点标记为已经访问过,这些边缘点按照其相邻关系,很自然地构成了一颗树;
S52、从这个树中的任意一个未被纳入任何笔划的叶子节点开始,寻找到其它某一叶子的一条路径,在行进过程中,标记已经访问过的路径;当遇到分支节点时,从未被标记过的分支中,按照灰度图像I的灰度一致性的原则,选择最接近的一条分支继续行进,直到到达某一个叶子节点或者已经没有可行进的分支路径时终止行进,并将此路径标记为一个笔划;
S53、重复步骤S51、S52的过程,直到骨架图I_edgeS中所有的边缘点都被纳入到某一条笔划为止;
S54、将所有的笔划利用点合成法进行分段拟合,每一个笔划将得到一系列的首尾相连的线段,最终得到标记好的笔划图edgeLinesS;
同样的,对骨架图I_edgeL按照步骤S51-S54进行笔划的标记,最后得到标记好的笔划图edgeLinesL 。
S6、分别在笔划图edgeLinesS和edgeLinesL 上载入笔刷纹理。
载入的笔刷纹理图是由一系列的画水墨画的笔划模板组成,模板大小不一,图案不一。
S7、初始化绘制图像I_painting,设置初始的绘制图像I_painting为全黑,使得其每个像素点的值都为零。
S8、利用步骤S6中载入笔刷纹理后的笔划图edgeLinesL和图像I_FDOG1在绘制图像I_painting上绘制底层笔划,得到第一绘制图像I_painting1,具体包括如下过程:
S81、针对笔划图edgeLinesL的一个笔划,找出该笔划内的每一条线段的首尾像素p1和p2,在以p1为中心像素的9*9的邻域内,在灰度图像I上找出像素最大值p1_max和像素最小值p1_min,在以p2为中心像素的9*9的邻域内,在灰度图像I上找出像素最大值p2_max和像素最小值p2_min;在图像I_FDOG1上以p1为中心像素的9*9的邻域内找出像素最小值p1_minDOG、以p2为中心像素的9*9的邻域内像素最小值p2_minDOG;计算像素p1的对比度p1_constrast,
p1_constrast=1-p1_min/p1_max
计算像素p2的对比度P2_constrast,
P2_constrast=1-p2_min/p2_max;
S82、计算首尾像素p1和p2的笔刷纹理的半径:
width1=log10(1+pow(10,9)*p1_constrast)*pow(1-p1_minDOG,0.3)
width2=log10(1+pow(10,9)*p2_constrast)*pow(1-p2_minDOG, 0.3);
S83、对此笔划前半部分的所有线段,按照如下方式计算首尾像素p1和p2的笔刷纹理的权重值:
weight1=(length/11)*log10(1+10* (curStrokeLength/strokLength/2)),
weight2=(length/11)*log10(1+10*((curStrokeLength+length)/strokLength/2));
而后半部分的所有线段,按照如下方式计算首尾像素p1和p2的笔刷纹理的权重值:
Weight11=(length/11)*log10(1+10*((strokLength-curStrokeLength)/strokLength/2)),
Weight21=(length / 11)*log10(1 + 10 * ((strokLength – curStrokeLength - length)/strokLength/2));
其中length为当前线段的长度,curStrokeLength为此笔划的第一条线段到当前线段的前一条线段间的所有线段的长度之和,strokLength为此笔划内的所有线段长度之和;
S84、按照纹理半径width1和width2在纹理库中挑选相应的纹理,并按笔刷纹理权重值weight1、weight11和weight2、weight21对纹理颜色的深度进行控制,也即用笔刷纹理权重值乘以纹理的像素值得到最终的像素值;
S85、对线段首尾像素p1和p2之间的像素点,利用插值得到相应的纹理图,并将这些纹理图叠加到绘制图像I_painting上;
S86、对笔划图edgeLinesL上的每一个笔划,重复步骤S81-S85的过程,得到第一绘制图像I_painting1。
S9、利用步骤S6中载入笔刷纹理后的笔划图edgeLinesS和图像I_FDOG1在第一绘制图像I_painting1上绘制顶层笔划,得到第二绘制图像I_painting2
S91、针对笔划图edgeLinesS上的一个笔划,找出笔划内的每一条线段的首尾像素p1’和p2’,在以p1’为中心像素的9*9的邻域内,在灰度图像I上找出像素最大值p1’_max和像素最小值p1’_min,在以p2’为中心像素的9*9的邻域内,在灰度图像I上找出像素最大值p2’_max和像素最小值p2’_min;在图像I_FDOG1上以p1’为中心像素的9*9的邻域内找出像素最小值p1’_minDOG、以p2’为中心像素的9*9的邻域内像素最小值p2’_minDOG;计算像素p1’的对比度p1’_constrast,
p1’_constrast=1- p1’_min/ p1’_max
计算像素p2’的对比度p2’_constrast,
p2’_constrast=1- p2’_min/ p2’_max;
S92、计算首尾像素p1’和p2’的笔刷纹理的半径:
width1’=log10(1+pow(10,9)*p1’_constrast)*pow(1-p1’_minDOG, 0.2)
width2’=log10(1+pow(10,9)*p2’_constrast)*pow(1-p2’_minDOG, 0.2);
S93、对此笔划开始的一部分线段且长度之和小于minStrokeLength/2的,其中minStrokeLength为预先设定好的最小线段长度阈值,按照如下方式计算首尾像素p1’和p2’的笔刷纹理的权重值:
Weight1’=(curStrokeLength’/minStrokeLength/2)*pow(1-max((length’ / 11), 1) , 1.2),
weight2’=((curStrokeLength’+ length’)/strokLength’/2) * pow(1-(length’ / 11), 1.2);
中间的一部分线段,按照如下方式计算首尾像素p1’和p2’的笔刷纹理的权重值:
weight11’= pow(1- max((length’/ 11), 1), 1.2),
weight21’= pow(1-max((length’ / 11), 1), 1.2);
而末尾的一部分线段,且长度之和小于minStrokeLength/2的,按照如下方式计算首尾像素p1’和p2’的笔刷纹理的权重值:
weight12’=((strokLength’-curStrokeLength’) / (minStrokeLength/2)) * pow(1-(length’ / 11), 1.2) ,
weight22’=((strokLength’-curStrokeLength’-length’)/(minStrokeLength/2))*
pow(1-max((length’/ 11), 1), 1.2);
其中length’为当前线段的长度,curStrokeLength’为此笔划的第一条线段到当前线段的前一条线段间的所有线段的长度之和,strokLength’为此笔划内的所有线段长度之和;
S94、按照纹理半径width1’和width2’在纹理库中挑选相应的纹理,并按纹理的权重值weight1’、weight11’、weight12’、weight2’、weight21’和weight22’对纹理颜色的深度进行控制,即用纹理的权重值乘以纹理的像素值得到最终的像素值;
S95、对线段首尾像素p1’和p2’之间的像素点,利用插值得到相应的纹理图,并将这些纹理叠加到第一绘制图像I_painting1上。
S96、对笔画图edgeLinesS的每一个笔划,重复S91-S95的过程,得到第二绘制图像I_painting2;
S10、对第二绘制图像I_painting2进行对比度调节得到第三绘制图像I_painting3,对比度调节是按照如下公式进行全局的色彩调节的,
I_painting3(y,x)= log10(offset+ I_painting2(y,x))- log10(offset)
其中offset为常数,取值范围为[0.1, 4.0],本实施例中offset=3.0,I_painting3(y,x)为第三绘制图像像素值,I_painting2(y,x) 为第二绘制图像像素值。
S11、将第三绘制图像I_painting3进行反相得到第四绘制图像I_painting4。
S12、在第四绘制图像I_painting4上载入墨团浸染纹理得到第五绘制图像I_painting5,浸染纹理图是由一系列的水墨浸染图组成,其大小不一,图案不一。
S13、利用步骤S6中载入笔刷纹理后的笔划图edgeLinesS和edgeLinesL在第五绘制图像I_painting5上绘制墨团浸染图层得到第六绘制图像I_painting6,具体包括如下过程:
S131、计算笔划图edgeLinesS的一个笔划首尾像素p1和p2的第二笔刷纹理半径widthII= min(p1_constrast, p2_constrast)* min(p1_constrast, p2_constrast)*15;
S132、对p1_constrast和p2_constrast均大于0.8,且length / 11 大于0.3的线段,按照纹理半径width II在纹理库中挑选相应的纹理;
S133、对线段首尾像素p1和p2之间的像素点,利用插值得到相应的纹理图,并将这些纹理叠加到第五绘制图像I_painting5上;
S134、对笔划图edgeLinesS上的每一个笔划,重复步骤S131-S133;
S135、对笔划图edgeLinesL的每一个笔划,重复S131-S134的过程,最终得到第六绘制图像I_painting6。
S14、对步骤S2中阴影图像I_shadow和第六绘制图像I_painting6以正片叠底的方式进行融合得到第七绘制图像I_painting7,也即,I_painting7(y,x) = I_shadow(y,x) * I_painting6(y,x), 其中,I_painting7(y,x)为第七绘制图像上像素值, I_shadow(y,x)为阴影图像像素值,I_painting6(y,x)为第六绘制图像像素值。
S15、载入宣纸纹理图,并与第七绘制图像I_painting7进行正片叠底融合,得到最终的水墨图像。
本发明通过利用改进的FDOG图像,得到了更加连贯有序的边缘笔划;通过对边缘笔划进行两层不同的笔划绘制,得到更加逼真的笔锋;通过添加墨团浸染纹理,更加逼近真实的水墨浸染效果;通过自适应地计算阴影区域值,使得整体的渲染效果有更佳的明暗层次感;采用本发明生成的水墨画风格图像效果更加逼真,且生成速度快。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
机译: 将输入图像数据转换成输出图像数据图像转换单元的方法,用于将输入图像数据转换成输出图像数据图像处理装置的显示装置
机译: 将输入图像数据转换成输出图像数据的方法,将输入图像数据转换成输出图像数据的图像转换单元,图像处理设备,显示装置
机译: 用于将输入图像数据转换成输出图像数据的设备和方法,用于将输入图像数据转换成输出图像数据的图像转换单元,图像处理设备,显示装置