雙邊濾波,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,濾波結果爲:
效果還是挺明顯的。