关于人像美容之祛痘祛斑算法的一些尝试。

     祛痘祛斑算法一直在关注,一直在期待看有么有大神分享有关这方面的资料。在百度上用关键词祛痘祛斑搜到的都是于原理无关的不痛不痒的东西,看样子还是得靠自己奋斗。

     总的来说,对于祛痘祛斑,我们概念上还是有一定的了解的,这个按照我的分析应该是属于图像修复方面的内容的,于是咨询了一些专门搞学术研究,特别是图像修复相关方向的比较专业的人士,他们也给我提供了一些测试的代码,其中最为简单又有一定效果代码如下(由网友西西提供):

function inpainting()
    f=imread('12.png');
    f=rgb2gray(f);
    f=double(f);
    [m,n]=size(f);
    lamda=0.1;
    phi=double(1-(f==255));%
    u=f;    Iter =400;
    for k=1:Iter
        C1 = circshift(u,[0 -1]); C1(:,n) = C1(:,n-1);
        C2 = circshift(u,[0 1]);  C2(:,1) = C2(:,2);
        C3 = circshift(u,[-1 0]); C3(m,:) = C3(m-1,:);
        C4 = circshift(u,[1 0]);  C4(1,:) = C4(2,:);
        lap_u=C1+C2+C3+C4;
        u=(phi.*f+lamda*lap_u)./(phi+4*lamda);
end
figure; imagesc(u); colormap(gray); axis off; axis equal;

  这个代码的原理是参考:

 一文的。具体的我也没有看,应该是基于TV模型的最简单的一种实现。

  上述代码很简单,其中的lamda控制了模糊的程度,用这个代码做了下测试,对于灰度图效果如下:

      原图

                          Mask

                         修复后的图

  由上图可见,这种简单的代码具有一定的修复功能,但是修复部分比较模糊,另外一个问题就是这个代码的效率很低,虽然改成C语言实现病不是特别困难,但是即使是C速度也有问题,不过针对手动祛斑时的特性,编程时时不需要整图处理,比如取要祛痘祛斑2倍面积的地方进行处理也是可以的。

      在一个群里也问起这个问题,有部分网友提出opencv 的 inpaint 算法可行吗,于是我也是试着用opencv的函数试验了下,实验的结果如下:

  原图   

  Mask

   修复的结果图

  如果初步的看,似乎修复的结果也还是可以的。这个代码在OpenCV的inpaint.cpp,其中一种方法来自论文《An Image Inpainting Technique Based on the Fast Marching Method》, 我花费了2天左右的时间将其转换为了纯C++代码,脱离了opencv环境,不过结果验证却有点令人失望,主要的原因是这个方法其实也和TV那个类似,修复的地方会有比较明显的模糊结果(OpenCV里的算法也存在类似卷积的过程,因此模糊时不可避免的)。而观察美图等软件的修复,对于被修复部分的纹理保留的很好。

      但是,也不是说这些算法也毫无用处,祛斑祛痘一般都是伴随着磨皮美白一起使用的,如果对磨皮后部分依旧没有被消除的斑点,上述祛斑的方式就能和周边的图较为完美的融合在一起的,因为周边的皮肤也是会比较光滑的,例如下图:

           原图

                    磨皮后再手动祛斑的效果

      其实现在比较难得还是斑点的自动定位,祛斑算法很多厂家已经有了成熟的算法,只是我们这些小强见识比较短而已。 

      至此,我的人像美容算法方法的主要的几个功能基本都已研究完成了(虽然都不完美),其中瘦脸瘦身和眼睛缩放在我的Imageshop软件的美化菜单里有实例,像皮肤红润那些只是一些色相的局部调整,没啥难度,磨皮、美白、祛斑这三个我集中在下面的文件包,有兴趣的朋友可以看下。

http://files.cnblogs.com/Imageshop/FaceBeautification.rar

****************************作者: laviewpbt   时间: 2014.7.27    联系QQ:  33184777 转载请保留本行信息**********************

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

7月Python最佳开源项目Top 10

【导读】七月就要结束了,小编为大家整理了本月 Python 最受欢迎的十大开源项目。他山之石,可以攻玉,爱好Python的朋友们一起学习Github上的优秀项目...

763
来自专栏机器学习算法原理与实践

英文文本挖掘预处理流程总结

    在中文文本挖掘预处理流程总结中,我们总结了中文文本挖掘的预处理流程,这里我们再对英文文本挖掘的预处理流程做一个总结。

812
来自专栏mwangblog

遗传算法解决旅行商问题(TSP)一:初始化和适应值

旅行商问题(Travelling salesman problem, TSP)是这样一个问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起...

1842
来自专栏编程

假如让你写一个年会抽奖程序……

刷微博的时候看到一家互联网公司组织年会,在抽奖的环节中,一群程序员觉得这个抽奖程序有猫腻,纷纷提出质疑,于是 CTO 就带头把程序代码显示出来,一个年会变成了一...

6006
来自专栏CDA数据分析师

【零一】#操作教程贴#从0开始,教你如何做数据分析#中阶#第八篇

大家好,我是零一。第一次用手机写文章,哈。在车上的时间看了一本书,余下的时间,我想应该可以写一篇文章。图片等到了地儿了,再用电脑补上。 我的公众微信号是sta...

1975
来自专栏ATYUN订阅号

AI算法可以通过脑电图读数检测睡眠障碍模式

脑电图(EEG)使用放置在头皮上的电极测量大脑中的电活动。睡眠专家可利用它来诊断和评估神经系统疾病,这可能是一项繁琐的工作,需要在数小时记录的大脑活动中注释峰值...

893
来自专栏大数据

用R语言进行文本挖掘和主题建模

我们每天都会遇到各种各样的文本数据 - 但大部分是非结构化的,并不是全部都是有价值的。请继续阅读以了解文本挖掘如何提供帮助。

3261
来自专栏机器学习算法与Python学习

干货 | 自然语言处理(5)之英文文本挖掘预处理流程

前言 自然语言处理(4)之中文文本挖掘流程详解(小白入门必读) 干货 | 自然语言处理(3)之词频-逆文本词频(TF-IDF)详解 干货 | 自然语言处理(...

70212
来自专栏北京马哥教育

一步步用python制作游戏外挂

? 作者:晴明 来源: http://blog.csdn.net/qq_37267015/article/details/71330600 玩过电脑游戏的同...

6337
来自专栏量子位

TensorFlow 1.9.0正式版来了!新手指南全新改版,支持梯度提升树估计器

1042

扫码关注云+社区