作者:天儿哥

有了前面的照片处理基础,这一篇开始讲美颜算法。

一、滤波为什么要保边?

人像美颜技术中,最重要的技术之一就是磨皮,没有磨皮谁还敢自拍,谁还敢直播?

磨皮本质上就是对图像进行滤波,比如前面讲的均值滤波,或者高斯滤波,说直白点就是对整张图片进行一定程度的模糊。但是仅这么处理是不够的,整张图片都会模糊掉,所以需要在模糊的同时,保留人像面部的边界特征,此处的“保留”就是保边。

实验美颜相机Python 美颜算法原理_权重

二、保边滤波算法

保边滤波算法有很多种,我们不一一展开,这里仅讨论有代表性的“双边滤波”,带大家感性认识保边滤波的实现思路。其他的保边滤波算法列在文末,有兴趣的读者可自行研究。

2.1 双边滤波原理:参看下面示意图。

左边的输入是一个表面粗糙并且有边界的图像,那个阶梯表示边界。

中间的滤波算法是一个高斯模糊 * 范围的权重,即在高斯模糊的基础上,保持阶梯的突变。

右边是滤波的结果,图像的边界依然存在,没有被模糊,阶梯两侧均进行了平滑的模糊。

实验美颜相机Python 美颜算法原理_滤波算法_02

聪明的你会发现,其实就是在高斯模糊的同时,根据当前像素周围的像素信息,来计算不同的权重,结合权重来模糊。大多数空间滤波的本质都是如此,掌握双边滤波一种,其他的也更容易理解。

2.2 结合双边滤波的公式加深理解:

假设像素I(i, j)的邻域半径为R,邻域⼤⼩为S,邻域内的像素为I(k,l),那么滤波后的像素值Id的计算公式如下,w(i, j, k,l )是权重函数

实验美颜相机Python 美颜算法原理_权重_03

其中权重w的计算如下:

实验美颜相机Python 美颜算法原理_均值滤波计算_04

σd和σr分别是空间距离、颜色差值的方差,exp函数即自然数e的幂。

可以想象,当处理到边界像素时,像素突变,I(i, j) - I(k,l) 值非常大,Wr ≈ 0,W(i,j,k,l)整体很小,即周围的像素影响很小,几乎保留了当前像素的原始值。这就是通过权重,实现了“保边”。

同理,当I(i, j) - I(k,l) 接近,Wr ≈ 1,则主要体现了高斯模糊Wd的权重,该像素进行了平滑的模糊处理。

处理结果:

实验美颜相机Python 美颜算法原理_权重_05

三、其他滤波

算法比较枯燥,单篇不适宜大而全,这里列举其他常见保边滤波算法,读者可自行研究。

1. Surface Blur滤波

Surface Blur滤波又叫表⾯模糊滤波,是Photoshop中的⼀种常⽤滤波算法,也是⼀种空间域滤波算法。

2. Guided滤波算法,论文:

http://mmlab.ie.cuhk.edu.hk/pdf/pami12Guided%20Image%20Filtering.pdf

3. 局部均值滤波算法

局部均值滤波算法是 JONG-SEN LEE于 1980年在论⽂[8]中提出的⼀种基于局部均值⽅差的滤波算法。在普通的均值滤波基础之上,增加了方差的权重,由于效率高被广泛应用。

4. Anisotropic滤波

算法原理有点复杂,需要复习多元微积分,熟悉“散度”的定义

Anisotropic滤波也叫各向异性扩散滤波,由Pietro Perona和Jagannatch Malik在1990年发表的论⽂[9]中提出,在图像去噪中效果明显。此算法可以在去噪的同时,保留图像的边缘,因此,笔者认为此算法也可以作为美颜算法的可选算法之⼀

5. Smart Blur滤波算法

Smart Blur是Photoshop 2018(简称PS2018)中出现的⼀种保边滤波器,具体参考论⽂不详。

6. MeanShift滤波算法(均值飘移)

MeanShift即均值漂移,最早由Fukunaga在1975年提出,论⽂题⽬为“The Estimation of the Gradient of a density function”。MeanShift滤波算法是⽤MeanShift算法来实现的⼀种图像保边滤波算。理解起来有点复杂,算法复杂度较高,感觉不适合实际的应用,且当参考。

本篇没有给出代码,后面有时间,我写一个demo,将算法内置到Android  iOS中供读者参考。

参考:图像视频滤镜与人像美颜