人像美肤-人脸检测+双边滤波
一、人像美肤
使用人脸检测 + 自实现的双边滤波,可以对图像中多张人脸进行美肤平滑。
项目地址:https://github.com/wchstrife/DigitalImageProcessing
1.1 运行环境
- python 3.7
- numpy
- opencv
1.2 运行
cd Skin-Filter
- 修改
beatyskin.py
中main
函数的filename
为输入图片的路径,默认为data下的图片 python beatyskin.py
- 默认输出在根目录下
newimage.jpg
处理后的图像
1.3 算法原理
首先对于输入的图片,调用detect
函数进行人脸检测。
人脸检测使用了opencv预训练好的模型,模型存在haarcascade_frontalface_default.xml
中,返回一个list,list中每一项代表存在人脸的一个矩形区域。
对于每个人脸矩形区域,进行双边滤波bilateral_filter()
。
双边滤波的基本原理是在高斯滤波的基础上,同时考虑模板的空间位置距离和颜色值域的距离。所以在计算卷积模板的时候,需要同时计算两个因素,合成一个卷积模板。根据以下公式进行计算:
w ( i , j , k , l ) = e x p ( − ( i − k ) 2 + ( j − l ) 2 2 δ d 2 − ∣ ∣ I ( i , j ) − I ( k , l ) ∣ ∣ 2 2 δ r 2 ) w(i,j,k,l) = exp(-\frac{(i-k)^2+(j-l)^2}{2\delta _d^2} - \frac{||I(i,j)-I(k,l)||^2}{2\delta_r^2}) w(i,j,k,l)=exp(