影楼精修-皮肤瑕疵祛除算法解析
注意:本文样例图片为了避免侵权,均使用AIGC生成;
顾名思义,皮肤瑕疵祛除旨在祛除人像照片皮肤区域的痘痘/斑点/痣/胎记等瑕疵;当前主流算法方案可分为传统图像处理方法和基于深度学习的方法,本文重点介绍基于深度需恶习的方法;
皮肤瑕疵祛除是磨皮好坏的第一步,或者说是人像精修皮肤处理的基础,对于设计师来讲,再处理皮肤磨皮之前,会先通过PS修补工具,人工将大的痘痘/痣等瑕疵祛除,然后在进行磨皮处理,原因是磨皮算法很难将大面积的瑕疵祛除。通用的算法流程如下图所示:
-
假设用户原图S,最终祛除瑕疵效果图为D,对S进行皮肤分割,得到皮肤Mask图Skin_mask;
-
对皮肤区域进行瑕疵检测/分割,得到瑕疵Mask集合(每个瑕疵位置和对应Mask信息);
-
循环遍历瑕疵区域集合,对瑕疵进行分类:痘痘、痣、其他;
-
对需要祛除的瑕疵类型进行瑕疵祛除,得到最终效果图D;
上述算法流程是皮肤瑕疵祛除的通用流程,从AI美颜的角度出发,本人对上述步骤进行算法拆解如下:
-
皮肤分割,使用深度学习算法,Unet,DenseNet,DeepLab系列,PSPNet等等;
-
瑕疵检测/分割,对于检测可以使用Yolo系列,速度快精度高,对于分割这里推荐一个UltraLight VM-UNet,论文名字《Parallel Vision Mamba Significantly Reduces Parameters for Skin Lesion Segmentation》,git链接:https://github.com/wurenkai/UltraLight-VM-UNet
-
瑕疵分类,这个任务比较简单,类别也比较少,简单的CNN即可;
-
瑕疵祛除,这个步骤比较重要,可以使用基于深度学习的inpainting算法,也可以直接使用GAN网络来得到瑕疵祛除后的效果图,个人推荐GAN,可以保留皮肤纹理,输入为瑕疵图+瑕疵mask,输出为祛除瑕疵后的效果图;
像素蛋糕瑕疵祛除
像素蛋糕将瑕疵祛除划分为了人脸区域“祛斑祛痘”和身体祛瑕疵,瑕疵分类为痣和痘斑瑕疵,示意图如下:
功能说明:
-
选择祛斑祛痘功能调节,会将人脸区域进行祛斑祛痘处理,但其他身体皮肤区域不变;
-
选择身体祛瑕疵功能调节,会将除人脸之外的其他皮肤区域进行祛瑕疵(痘斑)处理;
-
选择祛痣功能,只会消除人脸皮肤区域的痣,痘斑不会祛除;
结合像素蛋糕的功能模块,本人对通用皮肤瑕疵祛除算法进行了对应的修改,新的流程如下:
-
假设用户原图S,最终祛除瑕疵效果图为D,对S进行皮肤分割,得到皮肤Mask图Skin_mask;
-
对皮肤区域进行瑕疵检测/分割,得到瑕疵Mask集合(每个瑕疵位置和对应Mask信息);
-
循环遍历瑕疵区域集合,对瑕疵进行分类:痘痘、痣、其他;
-
对原图S进行人脸关键点检测,根据人脸点位确定人脸区域Mask,此处也可以直接进行人脸区域分割来得到Mask,两者都可以;
-
设定三个参数:身体祛瑕疵参数k_body,人脸祛斑祛痘参数k_face,人脸祛痣开关参数k_s,根据人脸区域mask,瑕疵分类结果,分别将符合祛除条件的瑕疵图像筛选出来,送入瑕疵祛除模块;
-
循环遍历所有瑕疵区域,通过瑕疵祛除模块输出对应祛除效果,根据瑕疵融合参数,融合到原图S,得到最终瑕疵祛除效果图D;
上述过程就是像素蛋糕的瑕疵祛除算法流程,本人基于上述流程进行了算法实现,这里给出本人算法和像素蛋糕效果对比图: