关于人像美容之祛痘祛斑算法的一些尝试。
来源:互联网 发布:软件测试方案实例 编辑:程序博客网 时间:2024/05/17 04:48
祛痘祛斑算法一直在关注,一直在期待看有么有大神分享有关这方面的资料。在百度上用关键词祛痘祛斑搜到的都是于原理无关的不痛不痒的东西,看样子还是得靠自己奋斗。
总的来说,对于祛痘祛斑,我们概念上还是有一定的了解的,这个按照我的分析应该是属于图像修复方面的内容的,于是咨询了一些专门搞学术研究,特别是图像修复相关方向的比较专业的人士,他们也给我提供了一些测试的代码,其中最为简单又有一定效果代码如下(由网友西西提供):
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);endfigure; 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 转载请保留本行信息**********************
- 关于人像美容之祛痘祛斑算法的一些尝试。
- 关于DLL的一些尝试
- 滚蛋疗法祛痘祛斑
- 关于视频录制的一些尝试
- 关于网站抽奖活动算法的尝试
- 关于遮挡剔除的几个算法尝试
- 图像美容之眼睛放大算法。
- 图像美容之眼睛放大算法
- 祛斑小妙招之祛斑美食
- 关于Shell.Application对象的一些简单尝试
- 关于python类和实例的一些尝试
- numpy基础——关于 ndarray 的一些尝试
- 关于对Tarjan算法的思考与尝试
- PS之人像处理
- ps 祛斑祛痘 污点修复画笔工具
- 关于算法的一些想法
- 关于算法的一些想法
- 关于算法的一些想法
- 学习《Hardware-Efficient Bilateral Filtering for Stereo Matching》一文笔记。
- python+selenium 上传文件或者图片
- 对皮肤美白算法的一些研究。
- android 获取UUid
- 图像美容之眼睛放大算法。
- 关于人像美容之祛痘祛斑算法的一些尝试。
- 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。
- mysql卸载与重装
- 避免图像去雾算法中让天空部分出现过增强的一种简易方法。
- 如何计算算法的时间复杂度
- 优化的对比度增强算法用于有雾图像的清晰化处理(算法效果是我目前看到最为稳定的,且对天空具有天然的免疫力,极力推荐有需要的朋友研究)。
- JSPatch 调用第三方库教程.写看新使用的朋友们当案例看看,随便给自己练练手
- 图像处理中任意核卷积(matlab中conv2函数)的快速实现。
- 关于Cewu Lu等的《Combining Sketch and Tone for Pencil Drawing Production》一文铅笔画算法的理解和笔录。