注意:本文样例图片为了避免侵权,均使用AIGC生成;
高低频磨皮基础
高低频磨皮是一种常用于人像后期修图的技术,它能在保留皮肤纹理的同时柔化瑕疵,使皮肤看起来更加自然细腻。高低频磨皮的算法原理如下:
一张人像图像S中的皮肤区域可分为高频和低频信息,假设高频信息为S_h,低频信息为S_l:
图像S = S_h高频层(细节) + S_l低频层(色调和大结构)
-
低频层(Low Frequency):包含肤色、明暗过渡、大的色块结构。 用来处理皮肤的色斑、暗沉、泛红等问题。
-
高频层(High Frequency):包含皮肤毛孔、皱纹、细节纹理等高频信息。 用来保留皮肤质感、清晰度,不会变得“假脸”。
我们希望的磨皮效果是高频信息得以保留,保证皮肤真实感,低频信息中的色斑暗沉等得到平滑减弱或者消除而边缘信息得以保留;
其中,低频层信息S_l的获取,通常我们使用低通滤波器来进行滤波,比如高斯滤波;实际应用中为了得到更好的边缘保留,我们使用保边滤波器滤波处理(edge-preserving filter,后面简称EPFilter),比如双边滤波,导向滤波,Surface blur等等;
高频信息S_h我们直接使用原图S-S_l即可得到细节信息,常见如高反差操作等;
高反差公式:Highpass(x)=S(x)-GaussFilter(x)+127.5;在Photoshop中添加128的偏移,实际上整数化而已;
基于上述原理,在Photoshop中的高低频磨皮步骤如下:
-
对S做高反差处理,得到高频细节图像S_h;
-
对S做EPFilter,可以是Surfaceblur或者高斯滤波,得到低频图像S_l;
-
将S_h和S_l进行以S_l为底的线性光图层混合(Linear Light blend mode);
假设高低频磨皮效果图为D,上述步骤公式化:
Linearlight(base,mix)=2*mix+base-255;
Highpass(S) = S - EPFilter(S);
D=Linearlight(EPFilter(S),Highpass(S)) ;
由于磨皮主要针对的是皮肤区域,因此,这里我们还需要叠加皮肤区域Mask,即:
D=Linearlight(EPFilter(S),Highpass(S)) *Mask,皮肤Mask区域内保留效果,其他区域保留原图;
到这里,基础的高低频磨皮原理我们进行了简单的科普,下面我们开始步入正题。
像素高低频磨皮
像素蛋糕高低频磨皮分为了人脸高低频磨皮和身体高低频磨皮,算法原理一样,只是划分了人脸区域和身体区域,方便用户控制而已;这里我们直接以人脸区域为例进行讲解分析;
像素蛋糕的高低频磨皮共有3个可调参数:高频增强和低频平整两个参数控制,第三个高低频磨皮强度参数控制整体效果的融合程度,除此之外,还有一个最重要的隐藏参数皮肤Mask,保证磨皮效果仅对皮肤有效。界面如下图所示:
我们假设高低频磨皮总参数为100,做如下调节实验:
当高频增强0低频平整0时,算法效果为原图效果;此时高低频信息仅仅做了分离,效果图D=高频S_h+低频S_l;
当高频增强0,低频平整从0到100变化时,低频信息增加了平滑强度,平滑强度逐渐增强,此处可以分析出像素使用了不同强度的EPF,而不是简单的固定强度与原图做融合,因为在低频平整参数为0时具有平滑效果,并非原图;此时,效果图=高频0+低频↑;
当高频增强0低频平整100时,算法表现为低频信息平滑也就是保边滤波器的最大效果;
当高频增强-100,低频平整0时,算法表现为仅有低频信息的最小保边滤波效果;高频从0到-100变化时,效果图=高频↓+低频0;
当高频增强100低频平整0时,算法表现为高频信息的最大强度效果;高频从0到100变化时,效果图=高频↑+低频0;
综上,我们对基础高低频磨皮算法进行修改,来实现类似像素蛋糕的3参数调节:
-
仿照像素蛋糕设定3个参数(kh,kl,K),假设高频增强参数为kh,范围[-100,100],低频平整参数为kl,范围为[0,100],高低频磨皮整体调节参数为K,范围为[0,100];
-
高低频磨皮效果计算:
S_l=EPF_min(S) + kl * (EPF_max(S)-EPF_min(S)) /100;
S_h=(kh * Highpass(S) + (100-kh)*128)/100;
D=(K*Linearlight(S_l,S_h) +(100-K)*S)/100;
3.最后添加皮肤Mask:
D=D*Mask+S*(1-Mask);
上述过程就完成了像素蛋糕高低频磨皮功能的算法分析与讲解,基于上述分析,本人进行算法验证,个人算法实现效果展示:
算法使用导向滤波作为EPF,使用高斯滤波进行高反差,DEMO界面:
效果测试:
最后,DEMO代码没有给出,有需要的可私聊;