图像处理——滤波器的比较

滤波器

  • 方框滤波——boxFilter
  • 均值滤波——blur
  • 高斯滤波——GaussianBlur
  • 中值滤波——medianBlur

线性滤波器

线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。常见的有:低通、高通、带通、带阻、全通、陷波
每个信号的输出值是一些输入像素的加权和

  • 方框滤波——boxFilter
  • 均值滤波——blur (归一化后的方框滤波)
  • 高斯滤波——GaussianBlur

非线性滤波器

  • 中值滤波——medianBlur
    在处理类似于椒盐噪声这种散粒噪声时,使用中值滤波有时可以达到更好的效果
    优势: 在均值滤波中,由于噪声成分被放入平均计算中,所以输出受到了噪声的影响。但是在中值滤波器中,由于噪声成分很难选上,所以几乎不会受影响。
    劣势: 中值滤波花费的时间是均值滤波的5倍以上。

代码演示

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
	Mat src = imread("G:/picture/cs.jpg");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
	}
	Mat roi;
	//修改图像大小
	resize(src, roi, Size(300, 300));
	//遍历每个像素,用at()函数为随机选取的像素点赋一个随机值
	for (int i = 0; i < roi.rows; i++)
	{
		for (int j = 0; j < roi.cols; j++)
		{
			//当导入的时灰度图
			if (roi.channels() == 1)
			{
				if (rand() % roi.cols == j)
				{
					roi.at<uchar>(i, j) = rand() % 255;  //模上255是为了将随机值限定在(0,255)内
				}	
			}
			//当导入彩色图
			else if (roi.channels() == 3)
			{
				if (rand() % roi.cols == j)
				{
					Vec3b p;
					p[0] = rand() % 255; 
					p[1] = rand() % 255;
					p[2] = rand() % 255;
					roi.at<Vec3b>(i, j) = p;
				}
			}
		}
	}
	Mat median,gaussian,avgblur;
	blur(roi, avgblur, Size(3, 3));//均值
	GaussianBlur(roi, gaussian,Size(3,3),0,0);//高斯
	medianBlur(roi, median, 3);//中值
	imshow("roi",roi);
	imshow("blur", avgblur);
	imshow("Gaussian", gaussian);
	imshow("medianBlur", median);
	waitKey(100000);
	return 0;
}
	

输出结果

  • 椒盐噪声图(roi)
    在这里插入图片描述
  • 均值
    在这里插入图片描述
  • 高斯滤波
    在这里插入图片描述
  • 中值滤波效果图
    在这里插入图片描述
    可以看到,线性滤波器(均值、高斯)处理之后图中仍可以看到“斑点”,而中值滤波则完美的达到“磨皮”效果,由此得出在处理椒盐噪声是应选择中值滤波。
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值