基於OpenCV雙邊濾波器的人臉美化 .

人像美化類軟件中通常會提供一個磨皮功能,可以使得皮膚變得柔和,去除痘痘和斑點。本文基於OpenCV中的雙向濾波器實現了一個簡單的人臉美化功能。

       雙邊濾波,Bilateral filter,是一種保持邊緣的降噪平滑濾波器。注意兩點,第一是保持邊緣,這樣對於人臉而言,可以在平滑皮膚區域的同時不破壞五官的邊緣結構。第二,降噪平滑,這樣就可以抑制皮膚上的斑點和痘痘,使得皮膚變得柔和。Bilateral filter同時利用了中心像素與周圍像素在空間上和顏色強度上的差異,具體可參考這個鏈接:點擊打開鏈接

       OpenCV中的cvSmooth功能支持雙邊濾波功能,調用格式爲:

       cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_BILATERAL, int size1=3, int size2=0, double    sigma1=0, double sigma2=0 )。 其中要使用雙邊濾波功能,需指定size1,size3和size4三個參數,分別對應窗口大小size1*size1, color sigma和spatical sigma.

       需要特別提醒的是,OpenCV中的Bilateral filater不支持原址運算,也就是說src和dst必須指定爲不同的圖像,如果指定爲同一副圖像,華麗麗的會出現運行時崩潰。

        下圖爲一副網絡圖片:

        

       使用OpenCV中的雙邊濾波器進行處理,注意需要用cvCreateImage創建一副size、depth和channel與源圖像相同的圖像,參數設置size1=7,size2=0(無效參數),size3=70,size4=10,濾波結果爲:

         

          效果還是挺明顯的。

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