技术咖:美颜应该用matlab

十行代码,一键磨皮。I= double(imread('1.jpg'));H = RF(I,30,100) - I + 128;G = imfilter(H,fspecial('gaussian',[3 3],100));opacity = 50;Dest = (I*(100 - opacity)+(I+2*G-256)*opacity)/100;imshow([uint8(I) uint8(Dest)]);

前方高能预警,观后可能对心理产生不适,慎重下拉。。。

5e130a62446d0be4b50fc26fd4855e2c.gif

360截图20150828075831978.jpg (26.46 KB, 下载次数: 22)

2015-8-28 08:00 上传

(雀斑丑小鸭→美丽白天鹅)

回看该程序,RF是递归域变换滤波器,可以到“[url=]Domain Transform for Edge-Aware Image and Video Processing”[/url]下载,也可以换成其他保边平滑的滤波器,例如双边滤波,导向滤波,各向异性扩散滤波器等等。

算法说明:

关于这个算法,其实就是在网上搜索一个磨皮教程,然后用Matlab程序化实现而已。

这里,给出最后的计算公式,

5e130a62446d0be4b50fc26fd4855e2c.gif

360截图20150828080059474.jpg (4.8 KB, 下载次数: 20)

2015-8-28 08:01 上传

EPFFilter是一种保边平滑的滤波器,Opacity控制透明度,GaussBlur是高斯滤波了,这些PS的操作也非常易于用Matlab程序化,没有什么难的。若真真对这个算法感兴趣,可以参考人在旅途的博客简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节。

后续说明:

考虑到Matlab并没有自带这个函数,我有作弊的嫌疑。所以略加修改答案,将Domain transfrom flter换成导向滤波。还好在Matlab2014中有包括这个函数,叫做imguidedfilter,若是2014及其以后版本可以直接调用,关于这个函数可以看官方文档“Guided filtering of images”。

撰写:Zhang He

如果觉得不错,欢迎赞赏,欢迎分享!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐