一、概述
案例:使用雙邊濾波對圖片進行美化。特性:雙邊濾波能夠很好的保留邊緣的同時抑制平坦區域的噪聲。也就是下圖的人臉看上去更平滑了,而且還不影響頭發手的部分。
實現步驟:先試用bilateralFilter對圖片進行過濾,然后再利用filter2D的銳化算子提升圖片的整體的清晰度。
二、展示效果
比較左圖和右圖會發現,左圖人臉上的痔沒有了。整體看上去也更平滑了。下圖相對於右圖來說,清晰度更高了,棱角更分明 。

三、示例代碼
//中值濾波對椒鹽噪聲有很好的的抑制作用
//原理:卷積核所圈定范圍取中位數
//均值濾波無法克服邊緣像素信息丟失的缺陷。原因是均值濾波是基於平局權重。高斯模糊部分克服了該缺陷,但是無法完全避免,因為沒有考慮像素值的不同。
//高斯雙邊模糊是邊緣保留的濾波方法,避免了邊緣信息丟失,保留了像素輪廓不變。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char const *argv[])
{
//加載圖形
Mat src = imread("girl.jpg");
if(!src.data){
cout<< "can't load image ..."<< endl;
return -1;
}
imshow("src",src);
//中值模糊
// Mat mediaBlurMat;
// medianBlur(src,mediaBlurMat,3);
// imshow("mediaBlurMat",mediaBlurMat);
//高斯雙邊濾波
Mat bilateralMat;
/**
* 雙邊濾波參數說明:
* 15--->計算半徑,半徑之內的都會被納入計算,如果提供-1則根據sigma space參數進行計算
* 100--->sigma color 決定多少差值之內的像素會被計算
* 5----->sigma space 如果d的值大於0則申明無效,否則根據他來計算d的值
**/
bilateralFilter(src,bilateralMat,15,50,5);
imshow("bilateralMat",bilateralMat);
//對雙邊濾波后的圖像執行銳化操作,提升圖片的棱角以及清晰度
Mat resultImage;
Mat kernel = (Mat_<int>(3,3)<< 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(bilateralMat,resultImage,-1,kernel,Point(-1,-1),0);
imshow("resultImage",resultImage);
waitKey(0);
return 0;
}
