c语言中人脸磨皮算法,人脸磨皮算法

话说女人的钱最好赚,所以现在各大流行的图像编辑小软件基本上都有个磨皮的功能,这对那些脸上不小心长了小痘痘或者小斑点的美眉来说是在上传照片前的必要和必须步骤。加上现在自恋的人特多,没事有事来个自拍,然后挂到网上炫一把,当然也得把自己的皮肤处理好。 因此啊,国内出了不少这方面的软件,比如美图、可牛、美颜相机、美人相机、Camera360等加入了这个功能,当然还有很多小的手机软件业附带了此项目。

不过在网络上找寻磨皮方面的算法时,能找到的有用的信息是非常少的,估计这于该算法具有较大的实用和经济价值不无关系,本人经过一番研究,也搞出了一个磨皮的功能,这里就能共享的一些技巧说来给有需要的朋友听听。

1、磨皮算法的核心: 磨皮可以看成是去噪算法的应用。典型的去噪算法,比如均值模糊、高斯模糊、中值滤波都有很好的去噪效果,但是视觉效果太差。能有效的用于磨皮算法的去噪方式主要是那些能够边缘的算法,典型的比如双边滤波、Non-Local以及BM3D之类的。BM3D据说去噪效果最好。但是后两者到目前为止未看到具有实质意义的快速实现算法,反而是双边滤波,有多篇论文已经提出了可行的加速方案。其实Photoshop中的表面模糊也可以看成是一种双边滤波,因此不少用PS磨皮的过程也大量使用了表面模糊算法的。

2、头发眼睛等细节部位的保护: 直接使用上述算法得到的结果,针对很多图像会出现头发和眼睛部位的模糊,这种效果对于一个好的磨皮结果来说是不需要的。特别是眼睛,眼睛是心灵的窗口,被模糊了,窗口就不透明了。因此,需要检测出需要磨皮的部分。这个很多人会想到皮肤检测技术。不过我试过了经典的七八种皮肤检测效果,都不能将不同场景的肤色部位全部提取出来。一种方式就是综合好几种肤色检测,取最大区域,这也是一种不错的想法,因为一般的肤色检测速度都是很快的。但是实际的效果表面,这样做对于一些比较极端的图像还是无效的。因此,我采取了一种宁愿错杀一千,也不可放过一个的措施,放松了某一种肤色检测模块里的一些约束条件,使得绝大多数场景下的肤色部分都能够被选中(鉴于某些方面的原因,这个不可详述)。

3、边缘部分的融合:通过上述保护,得到的保护边缘处是硬边缘,即一个像素时要磨皮的部分,边上的可能就是不需要磨皮的,这样的话处理的效果在视觉会造成一定的僵硬,可能会有某个部分过度不自然,如下图所示(所有图片均来源自网络):

568e8274ebdbad05c7e3bbd44229239c.png 

2929971c9a806cab3c23c097d277392c.png 

ea1bc30cb6230d682c95b3172abaf700.png

原图                              硬边界磨皮                            软化后磨皮

一种解决方案就是对得到的硬边界图进行羽化处理,也就是类似高斯模糊之类的算法,这样边缘处就会过渡的较为自然。

4、处理后的增强:经过这样处理后的图像如果在进行一下边缘的增强,会得到更好的效果,比如在PS磨皮的最后一般喜欢加个USM锐化。

按照上述思路,编程程序,我实现的磨皮效果如下所示:

0281cebb256c0ea8c197025751be14e8.png 

b32240f541336feaa4931bf328691a4b.png 

e50794a098bdd4862d1832143831281f.png

7fec98b44fe1c65d341426604339427c.png 

10c9b83067fd44aa6ed0c759ec6a2b8e.png 

4fa90788e5ba3caf8dc9c85e73bc9c22.png

db138eae959b254e4fc98c37e0ace910.png 

3b5a9ed029ddd53cfe25c431d4df7804.png 

3b7d0abdb51fb6dad1c7239cf79e53bf.png

580a10667354c293d9c5900362e956d6.png 

4dc53a8043b4f8b968e1366e716459a0.png 

c10583b601ffdb4f35e75c19746e0362.png

原图                           本文的磨皮效果                美图秀秀效果(智能磨皮,参数深)

由以上几图可以看出,在磨皮质量基本差不多的情况,本文额磨皮的能尽量的保留了头发和眼睛处的细节,这样更自然。

在算法实现的速度上,我采用了两种双边滤波,一种速度很快,在PC上如果加入多线程完全可以实现普通摄像头的实时磨皮,但是效果有一点瑕疵。另外一种速度稍慢,效果较为稳定。

c37c0a738bb86d23396711bc36a64a2f.png

本文来源:http://blog.csdn.net/laviewpbt/article/details/20290763

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值