之前我们学习了均值滤波和高斯滤波,并且在opencv中进行了应用,接下来还有两种滤波方式,中值滤波和双边滤波
中值滤波是一种统计排序滤波器,将一个区域(例如3×3大小的邻域)中的像素点进行统计排序,找到像素值的中位数来替换邻域中心的像素值。
中值滤波对于椒盐噪声有很好的抑制作用,因为椒盐噪声属于像素值过大或过小,如果使用中值来确定邻域中心像素值,那么就可以很好地过滤掉椒盐噪声。
medianBlur(Mat src, Mat dst, ksize)
Mat src;
src = imread("A:/opencvproject/001.jpg");
if (!src.data)
{
cout << "img not ex";
return -1;
}
char input_win[] = "input_window";
namedWindow(input_win, CV_WINDOW_AUTOSIZE);
imshow(input_win, src);
Mat gaublur;
GaussianBlur(src, gaublur, Size(9, 9), 11, 11);
namedWindow("gblur_win", CV_WINDOW_AUTOSIZE);
imshow("gblur_win", gaublur);
Mat medBlur;
medianBlur(src, medBlur, 9);
namedWindow("medBlur", CV_WINDOW_AUTOSIZE);
imshow("medBlur", medBlur);
waitKey(0);
均值滤波无法克服边缘像素信息丢失的缺陷,高斯滤波虽然克服了该缺陷但是也无法完全避免。
而高斯双边滤波是既考虑了空间位置(空间域核)的不同,也考虑了像素值(值域核)的不同的边缘保留滤波方法,避免了边缘信息的丢失,保留了图像轮廓(可以用于图像美颜)。
bilateralFilter(Mat src, Mat dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT);
Mat src;
src = imread("A:/opencvproject/001.jpg");
if (!src.data)
{
cout << "img not ex";
return -1;
}
char input_win[] = "input_window";
namedWindow(input_win, CV_WINDOW_AUTOSIZE);
imshow(input_win, src);
Mat gaublur;
GaussianBlur(src, gaublur, Size(9, 9), 11, 11);
namedWindow("gblur_win", CV_WINDOW_AUTOSIZE);
imshow("gblur_win", gaublur);
Mat bilateralBlur;
bilateralFilter(src, bilateralBlur, 9, 100, 5);
namedWindow("bilateralBlur", CV_WINDOW_AUTOSIZE);
imshow("bilateralBlur", bilateralBlur);
waitKey(0);
Mat resultImg;
Mat kernel = (Mat_<int>(3,3)<< 0,-1, 0, -1. 5, -1, 0, -1, 0);
filter2D(bilateralBlur, resultImg, -1, kernel, Point(-1, -1), 0);//对双边滤波后的图像进行锐化处理可以使图像更加生动
imshow("Final Result", resultImg);
waitKey(0);
滤波可以分为低通滤波和高通滤波
高斯滤波是用高斯函数作为滤波函数的滤波操作
图像的噪声一般集中在高频段,所以使用低通滤波可以去除图像的噪声。
同时图像边缘信息也主要集中在其高频部分,所以使用模糊操作会出现图像边缘和图像轮廓模糊的情况。
为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。
图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰。
经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。
微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。
但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。
总之:图像处理时先对图像进行小型低通滤波处理,比如应用高斯模糊 从而去除噪声,然后再用高通过滤器来检测边缘。