对皮肤美白算法的一些研究。

 皮肤美白是现在任何一款流行的美颜软件必备的功能之一,不过你如果在互联网上搜索关于美白算法,能直接拿到并使用的可能不多。一直觉得这个算法其实很简单的,并且实现的方式可以说是多种多样,本文分享自己研究过的三种实现方式。

   第一:借用色彩平衡算法

  色彩平衡是Photoshop中常用的一个功能,发现这个算法能实现美白的是从一个叫DigitalCameraEnhance的软件中偶然遇到的,这个软件的界面如下图:

  其中的调节中间影调一栏会发现右侧目的图像美白程度不断增加,于是我想到PS中有中间调的功能最有名的就是色彩平衡,打开色彩平衡功能,把色阶三个框设置为同一个正值,并且不勾选保持明度选项,则图像明显出现美白现象。  

注意第一: 色阶的三个调整值必须相同或者差异很小,不然输出图片会出现偏色,第二:一定选选择中间调;第三:必须不勾选保持明度选项。

      关于这个算法的代码,可以从开源的GIMP软件中扣取,其实如果符合上述三个条件,有能力的人就会发现其实最后就是一个映射表而已了,这里不给出具体的算法公式。GIMP是开源的,有这个需求的就应该自己动手去找。

 第二:使用logarithmic Curve。

美白其实主要使皮肤变白变亮,因此,如果能有个合适的映射表,满足使得原图在色阶上有所增强,并且在亮度两端增强的稍弱,中间稍强,则也是个不错的选择。在研究一篇图像增强论文《A Two-Stage Contrast Enhancement Algorithm for Digital Images 》时发现其中的一个公式非常适合这个情况:

  其中w(x,y) 表示输入图像数据,v(x,y)表示输入结果,beta为调节参数,我绘制了Beta分别为[2,3,4,5]时的曲线,如下图:

  可见,Beta越大,美白的程度越强,我想这个程序实现起来应该很容易吧。

  第三:使用图层混合。

 用Photoshop我是这样做的,打开图像,然后点通道面板,按住Ctrl+ 点击RGB通道图像,这样会得到以图像的强度为内容的选区(选区其实就是一副灰度图像),然后回到图层面板,点新建图层,再点添加图层蒙版按钮,这样就会将刚才所建立的选区的内容作为蒙版,接着将,图层填充为白色。调节新建图层的透明,则可以控制最终美白的程度。

     这种方法中以图像强度的内容作为蒙版这一步很重要。

     这种图层+蒙版的编码实现其实也就是一些Alpha混合的过程,有兴趣实现的朋友可以自行研究。

      我个人认为,如果掌握了PS里调整菜单的大部分算法,很多美图软件里的调色这一块基本上都逃不出手掌心了,当然比如有强大的美工基础作为支撑,先靠美工通过某些步骤摸索出某个效果,然后再靠程序员编码实现,可以我美工不行。

   以上操作都是针对全图进行的处理,这样毕竟会把非肤色部分的地方也处理,在很多情况下可能是不合适的,因此一个更好的方式是进行肤色识别,当然这种肤色识别和我之前的磨皮算法原理也一样,不需要也不应该太准确,在边缘处还必须进行一定的羽化,包括非皮肤部分也应该有一定程度的处理,这样整个图看起来会更加自然一些。

  我用以上三种算法进行了一些处理,效果如下所示:

                   原图

                    ColorBalance , 参数为75

            Log曲线, 参数Beta为5

                       图层混合,不透明度30%

                   原图

                     ColorBalance , 参数为75

             Log曲线, 参数Beta为6

                        图层混合,不透明度35%

                                                  原图

                     ColorBalance , 参数为75

                Log曲线, 参数Beta为5 

                       图层混合,不透明度30%     

  纯粹就这个功能来说,和美图秀秀之类的软件区别也不大的。

     测试程序下载:http://files.cnblogs.com/Imageshop/SkinWhitening.rar

以上测试图像均来源于互联网。

************基本上我不提供源代码,但是我会尽量用文字把对应的算法描述清楚或提供参考文档************

************因为靠自己的努力和实践写出来的效果才真正是自己的东西,人一定要靠自己************

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【AlphaGo Zero 核心技术-深度强化学习教程代码实战03】编写通用的格子世界环境类

【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值...

2874
来自专栏人工智能头条

东北大学研究生:用强化学习玩Chrome里的恐龙小游戏

1715
来自专栏小轻论坛

解救不懂PS的设计小白,它适用多平台

解救不懂 PS 的设计小白!Fotor 是一款集图片编辑、美化滤镜、拼图功能以及「傻瓜式平面设计」于一身的全能型在线设计工具,可以帮助你在几分钟内快速修图或者制...

1034
来自专栏PPV课数据科学社区

【可视化】Excel制作INFOGRAPHIC

最近在重新整理日报,周报,月报的数据展现形式,越发觉得一份数据如何展现对于我们数据分析师的受众而言是非常重要的,数据是一种艺术,其原因之一在于如何把数字通过我们...

2584
来自专栏企鹅号快讯

现在做 Web 全景合适吗?

Web 全景在以前带宽有限的条件下常常用来作为街景和 360° 全景图片的查看。它可以给用户一种 self-immersive 的体验,通过简单的操作,自由的查...

3128
来自专栏机器之心

资源 | 一个基于PyTorch的目标检测工具箱,商汤联合港中文开源mmdetection

项目地址:https://github.com/open-mmlab/mmdetection

1542
来自专栏向治洪

基于OpenCV的跳一跳外挂实现原理

最近,微信跳一跳小游戏迅速走红并且在朋友圈刷屏,游戏的规则很简单,就是控制一个小矮子再各个墩子上跳来跳去。由于游戏比较简单,一时间大家都玩起来了,这也带动了一些...

3088
来自专栏数据小魔方

数据地图系列3|散点图模拟数据地图

今天是数据地图的第三篇——使用散点图模拟地图轮廓制作数据地图! 这一篇的地图制作思路,相对比较曲折,使用的是散点图的做法。 先用一组数据模拟地图经纬度,制作出...

3084
来自专栏计算机视觉战队

深度Q网络用语视觉格斗类游戏

最近,基于视觉深度Q的学习在雅达利和视觉Doom AI平台被证明成功的结果。与以前的研究不同,格斗游戏假设两个玩家有相当多的动作,在这项研究中,采用深度Q网络(...

2935
来自专栏阮一峰的网络日志

巧用Photoshop进行科学研究

Photoshop CS3 Extended是一个强大的软件。你可以用它,让你的报名照变得漂亮一些,然后上传到社交网站上;你也可以将一个名人的脑袋,移植到一张裸...

1302

扫码关注云+社区