人像美膚-人臉檢測+雙邊濾波
一、人像美膚
使用人臉檢測 + 自實現的雙邊濾波,可以對圖像中多張人臉進行美膚平滑。
項目地址: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()
。
雙邊濾波的基本原理是在高斯濾波的基礎上,同時考慮模板的空間位置距離和顏色值域的距離。所以在計算卷積模板的時候,需要同時計算兩個因素,合成一個卷積模板。根據以下公式進行計算:
其中 代表的濾波後的像素,需要注意的是,在雙邊濾波的時候要對圖像的三個通道進行分別處理。
超參數設置:
- 卷積模板使用7*7大小
- , 代表空間域和像素域的平滑程度,各取20
1.4 算法效果
輸入一張512*512,tiff格式的Lenna圖,左邊爲濾波前效果,右邊爲濾波後效果。
細節對比:可以觀察到只有在框內的區域進行了平滑。