现在各大手机制造商都在主推美颜效果,各种前后2000万像素,照亮你的美,各种逆光也清晰。其实这些看似神秘的美颜效果,除了依赖于手机像素之外,更重要的是攻城狮们对于美颜算法的构造。除了这些手机供应商,各大拍照软件比如B612,faceu也必然会有美颜效果,紧随其后的是各大直播平台,没有美颜效果,网红都不愿意去平台直播啦~
那么这些美颜算法很难吗?只有大牛们能解决吗?答案是,很难。好的美颜算法确实很难,需要经过很多算法工程师的优化,重构,经过用户的千锤百炼,不断进步而成。但是,小编要说的是,如果各位有兴趣,简单的美颜算法还是OK的,稍微懂点图像处理的还是可以做实时美颜效果,下面我们就聊一聊如何来进行美颜效果的实现。
美颜大致上可以分为两块:美白和磨皮。如果玩过Photoshop的都知道其实美颜其实就是四大步:1.用具有保边效果的滤波算法对图像进行模糊处理。2.用肤色检测算法保护非皮肤区域。3.将模糊后的图像和原图进行图像融合。4.对融合后的图像进行锐化处理。
对于步骤1,滤波算法可以选择双边滤波,导向滤波,表面模糊等,只要能保边缘就行,有人说高斯模糊是不行的,但事实上只做美白是可以的,高斯模糊没办法实现磨皮效果。如果单单使用高斯模糊来磨皮,得到的效果是不尽人意的。原因在于,高斯模糊只考虑了像素间的距离关系,没有考虑到像素值本身之间的差异。举个例子来讲,头发与人脸分界处(颜色差异很大,黑色与人皮肤的颜色),如果采用高斯模糊则这个边缘也会模糊掉,这显然不是我们希望看到的。而双边滤波(Bilateral Filter) 则考虑到了颜色的差异,它的像素点取值也是周边像素点的加权平均,而且权重也是高斯函数。不同的是,这个权重不仅与像素间距离有关,还与像素值本身的差异有关,具体讲是,像素值差异越小,权重越大,也是这个特性让它具有了保持边缘的特性,因此它是一个很好的磨皮工具。这里以双边滤波为例。取出绿色通道,对绿色通道进行高斯模糊,得到模糊后的值sampleColor。再用原图绿色通道值减去sampleColor,加上0.5(即128),这两个步骤即PS中的高反差保留。
vec3 centralColor = texture2D(inputImageTexture, textureCoordinate).rgb;
float highpass = centralColor.g - sampleColor + 0.5;
再对上述结果值进行3-5次强光处理,此步骤可以使得噪声更加突出
if(color <= 0.5){
color = color * color * 2.0;
}else{
color = 1.0 - ((1.0 - color)*(1.0 - color) * 2.0);
}
这样经过这些步骤得到如下图片:
计算原图的灰度值,公式为0.299R + 0.587G + 0.114*B得到灰度图片之后,将灰度值作为阈值,用来排除非皮肤部分,根据灰度值计算,将原图与结果图合成。
float alpha = pow(lumance, 0.333333);
vec3 smoothColor = centralColor + (centralColor-vec3(highpass))alpha0.1;</span>
原图rgb值与高反差后的结果相比,噪声越大,两者相减后的结果越大,在原结果基础上加上一定值,来提高亮度,消除噪声。
pow函数中第二个参数可调(1/3~1),值越小,alpha越大,磨皮效果越明显,修改该值可作为美颜程度。
并对混合后结果增加亮度,调整饱和度等参数得到最终图:
我们可以看下原图和美颜后的图对比:
下图为原图,上图为磨皮效果示意图 以上就是最简单的美白磨皮效果实现啦。
拓幻科技的美颜算法也是经过程序猿和算法工程师们的不断优化才变得效果强大的,最简单的美颜肯定不能满足商业客户的需求,我们的美颜算法提供的是高阶美白,磨皮效果,让普通手机也能照亮你的美,痘痘去无踪。除此之外,我们的美颜还提供粉嫩效果,让大家的肌肤变得水嫩粉扑,吹弹可破哦~欢迎大家在APP Store搜索“TiFancy”看我们demo,也欢迎大家关注我们:拓幻科技,可以留言,我们也会定期抽取幸运粉丝送出精美礼品哦~