人像美膚-人臉檢測+雙邊濾波

人像美膚-人臉檢測+雙邊濾波

一、人像美膚

使用人臉檢測 + 自實現的雙邊濾波,可以對圖像中多張人臉進行美膚平滑。
項目地址:https://github.com/wchstrife/DigitalImageProcessing

1.1 運行環境

  • python 3.7
  • numpy
  • opencv

1.2 運行

  1. cd Skin-Filter
  2. 修改beatyskin.pymain函數的filename爲輸入圖片的路徑,默認爲data下的圖片
  3. python beatyskin.py
  4. 默認輸出在根目錄下newimage.jpg處理後的圖像

1.3 算法原理

首先對於輸入的圖片,調用detect函數進行人臉檢測。

人臉檢測使用了opencv預訓練好的模型,模型存在haarcascade_frontalface_default.xml中,返回一個list,list中每一項代表存在人臉的一個矩形區域。

對於每個人臉矩形區域,進行雙邊濾波bilateral_filter()

雙邊濾波的基本原理是在高斯濾波的基礎上,同時考慮模板的空間位置距離和顏色值域的距離。所以在計算卷積模板的時候,需要同時計算兩個因素,合成一個卷積模板。根據以下公式進行計算:
w(i,j,k,l)=exp((ik)2+(jl)22δd2I(i,j)I(k,l)22δr2) 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})
ID(i,j)=k,lI(k,l)w(i,j,k,l)k,lw(i,j,k,l) I_D(i,j) = \frac{\sum_{k,l}I(k,l)w(i,j,k,l)}{\sum_{k,l}w(i,j,k,l)}
其中 ID(i,j)I_D(i,j)代表pixel(i,j)pixel(i,j)的濾波後的像素,需要注意的是,在雙邊濾波的時候要對圖像的三個通道進行分別處理。

超參數設置:

  1. 卷積模板使用7*7大小
  2. δd\delta_dδr\delta_r代表空間域和像素域的平滑程度,各取20

1.4 算法效果

輸入一張512*512,tiff格式的Lenna圖,左邊爲濾波前效果,右邊爲濾波後效果。

在這裏插入圖片描述在這裏插入圖片描述
細節對比:可以觀察到只有在框內的區域進行了平滑。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章