影楼精修-手部青筋祛除算法解析
注意:本文样例图片为了避免侵权,均使用AIGC生成;
手部青筋祛除科普
手部青筋祛除是影楼精修中一个非常精细的工作,需要较高的修图技巧,目前市面上很少有自动化的青筋祛除功能的,而像素蛋糕目测是第一个做到的。我们先给大家看一下效果示例图。
如示例图所示,效果图中美女的手部曝露的青筋消失了,整体效果对比肌肤要更加丰满一点。
这里我将给大家介绍一下这个功能算法要如何实现,我们的目标是自动化处理照片,达到手部青筋祛除的效果,并可调节祛除强度。
算法实现
像素蛋糕为了这个效果申请了算法专利CN 119624835 A:一种模拟人工修图的级联式人物图像祛青筋方法。
算法流程如下图所示:
这里我们先看整体流程:
-
假设用户照片原图为S,手部祛除青筋的效果图为D。对S进行手部区域检测,比如手部关键点检测,根据关键点计算手部区域图像位置,将手部区域图像裁剪出来得到手部图像A,这里需要记录裁剪位置,以及仿射变换矩阵H以及逆矩阵NH等,变换主要指缩放旋转等操作;
-
将手部图像A进行灰度化处理,得到灰度图A_gray;
-
将A和A_gray送入“中性灰平整网络”,输出中性灰蒙版图层,即为图B;
-
将A和B进行柔光图层混合,得到中性灰平整结果图C;
-
将C和B送入“颜色调整网络”,得到颜色调整后的结果图M,M即为祛除青筋且颜色正常的效果图;
-
将M按照仿射变换逆矩阵NH,贴回原图S,得到最终效果图D;
这个流程中,像素蛋糕设计了两个网络模块“中性灰平整网络”和“颜色调整网络”,其中,中性灰平整网络是用来获取青筋区域的中性灰调整蒙版,用于调节青筋区域的亮度,将突出的青筋区域亮度平整,变得光滑均匀;而颜色调整网络用于将青筋区域颜色调整为原图正常的肤色;
中性灰平整网络如下图所示:
网络很好理解,输入手部灰度图和原图,输出中性灰图层,网络使用了transformer模块,从个人角度理解,应该是一个GAN网络,采用Unet结构,难点在于如何构建数据集。当然,像素蛋糕应该是不缺乏数据的。
颜色调整网络如下图所示:
网络输入中性灰平整结果图+中性灰图层蒙版,输出颜色调整结果图,其中中性灰图层蒙版实际上是导向作用,与中性灰平整网络类似。这一步实际上也可以使用GAN网络来实现,或者使用LUT调色网络等。
上面就是像素蛋糕手部青筋祛除功能的算法流程。
针对上面的过程,大体思路是没有问题的,个人认为是正确的(毕竟是专利,需要以谨慎的思考来看待),但是,从我个人经验,这里提供一个更为简单的算法流程,或者说对上述流程进行改进。
本人改进的思路原理:手部暴露的青筋,整体上表现出来为亮度明暗突变+青绿颜色变化,而中性灰的概念,我们前面中性灰磨皮也介绍过,他的作用就是改变亮度信息,但实际上,以RGB颜色空间为例,我们如果在三通道上分别做中性灰蒙版,他就可以变成一个即改变亮度,也改变颜色的彩色中性灰蒙版,因此,从这个角度来看,我们不需要颜色调整网络,也可以达到最终的效果。
因此,本人算法流程如下:
-
假设用户照片原图为S,手部祛除青筋的效果图为D。对S进行手部区域检测,比如手部关键点检测,根据关键点计算手部区域图像位置,将手部区域图像裁剪出来得到手部图像A,这里需要记录裁剪位置,以及仿射变换矩阵H以及逆矩阵NH等,变换主要指缩放旋转等操作;
-
构建一个彩色中性灰平整网络,输入为手部区域图像A,输出为彩色中性灰蒙版图层A_color;
-
将A_color按照仿射变换逆矩阵NH贴回原图S,与原图S对应区域直接进行柔光图层混合,同时设定混合强度调节参数k,用于调节混合效果的程度,这一步直接可以得到青筋祛除效果图D;
柔光计算公式(A为原图像素,B为中性灰像素):
其中,彩色中性灰平整网络可使用CGAN,设置输入为512×512×3,实际也可以更小,比如384×384×3,由于得到的是中性灰图层,缩放到高分辨率后与原图进行柔光处理,并不会有损原图清晰度信息,因此,可以很好的应对影楼大图处理的清晰度要求。
这里,给出一组测试:
可以看到,本人方案效果与像素蛋糕效果几乎一致,方案流程上要更加简单,算法完全可以做到毫秒级快速处理高分辨率大图;
注意:彩色中性灰的思想,用途非常广泛,可以用于磨皮,祛除各类皱纹(黑眼圈/眼角纹/抬头纹/颈纹/法令纹等等),大家可以自行发挥,对于本人专栏中,部分思路相同的功能,也可能不会再重复介绍,有兴趣的也可以私聊,共勉!