计算机视觉技术:C++和opencv插件 实现比较均值、中值、高斯滤波,对不同噪音(椒盐、高斯噪音)的抑制效果

问题描述:

比较均值滤波、中值滤波、高斯滤波在不同窗口尺寸下,对于不同噪音(椒盐噪音、高斯噪音)的抑制效果。

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	Mat src1, src2, dst1, dst2, gblur1, gblur2, mblur1, mblur2;
	src1 = imread("E:\\picture\\1-1g.jpg");
	src2 = imread("E:\\picture\\1-2j.jpg");
	if (!src2.data || !src1.data)
	{
		printf("could not load image...\n");
		return -1;
	}

	imshow("高斯噪声原图", src1);//原图显示
	imshow("椒盐噪声原图", src2);//原图显示

	//均值滤波操作
	//src:输入图像
	//dst:输出图像
	//Size里面都要奇数,正数。内核内数值分别表示宽,高。
	//Point(-1,-1):表示锚点,一般取-1,表示锚点在核中心。
	blur(src1, dst1, Size(5, 5), Point(-1, -1));
	blur(src2, dst2, Size(5, 5), Point(-1, -1));
	imshow("高斯噪声-均值滤波", dst1);
	imshow("椒盐噪声-均值滤波", dst2);

	//高斯滤波操作
	//src:输入图像
	//gblur:输出图像
	//Size里面都要奇数,正数。内核内数值分别表示宽,高。
	//x方向方差
	//Y方向方差
	GaussianBlur(src1, gblur1, Size(15, 15), 11, 11);//高斯滤波
	GaussianBlur(src2, gblur2, Size(15, 15), 11, 11);//高斯滤波
	imshow("高斯噪声-高斯滤波", gblur1);
	imshow("椒盐噪声-高斯滤波", gblur2);

	//中值滤波操作
	//src:输入图像
	//mblur::输出图像
	//模板宽度,为奇数
	medianBlur(src1, mblur1, 3);
	medianBlur(src2, mblur2, 3);
	imshow("高斯噪声-中值滤波", mblur1);
	imshow("椒盐噪声-中值滤波", mblur2);

	waitKey(0);
	return 0;
}

通过得到的结果,可以发现均值滤波、中值滤波、高斯滤波,对于不同噪音(椒盐噪音、高斯噪音)的抑制效果是不同的:

1、均值滤波直观地理解就是用相邻元素灰度值的平均值代替该元素的灰度值,所以它不能很好地保护细节。

2、高斯滤波一般针对的是高斯噪声,能够很好的抑制图像输入时随机引入的噪声,将像素点跟邻域像素看作是一种高斯分布的关系,它的操作是将图像和一个高斯核进行卷积操作。

3、中值滤波将窗口函数里面的所有像素进行排序取得中位数来代表该窗口中心的像素值,对椒盐噪声和脉冲噪声的抑制效果特别好。

结论:从滤波的结果可以看出各种滤波算法对图像的作用非常不同,有些变化非常大,有些甚至跟原图一样。在实际应用时,应根据噪声的特点、期望的图像和边缘特征等来选择合适的滤波器,这样才能发挥图像滤波的最大优点。

时域滤波通常用于信号处理而非图像处理,它主要关注时间序列数据而不是像素级别的噪声去除。然而,对于图像处理而言,空间域滤波如高斯滤波均值滤波、中值滤波和双边滤波更为常见。 1. **高斯滤波**[^1]:基于高斯分布的概率模型,通过加权平均来平滑图像,常用于模糊边缘并降低噪声。它在保持图像细节方面较为保守,因为高斯核倾向于保留原图像的高频信息。 2. **均值滤波**:简单的算术平均,每个像素的值由其周围邻域像素的平均值决定。它对高频噪声有较好的抑制效果,但可能会导致图像边缘模糊。 3. **中值滤波**:非线性滤波,每个像素替换为其邻域内的中值,能有效抵抗椒盐噪声(离散点状噪声),但可能会影响连续的边缘信息。 4. **双边滤波**:结合了高斯空间滤波和强度滤波,既能平滑图像又能保持边缘清晰,因为它考虑了像素间的空间距离和灰度差异。 要在一个图像上应用这些滤波器,你可以使用图像处理库(如OpenCV)提供的API,以下是一个示例C++代码片段: ```cpp #include <opencv2/opencv.hpp> cv::Mat img, blurred_img; // 原始图像和滤波后的图像 // 加载图像 cv::imread("image.jpg", img); // 高斯滤波 cv::GaussianBlur(img, blurred_img, cv::Size(5, 5), 0); // 5x5卷积核,σ=0表示自动选择 // 均值滤波 cv::blur(img, blurred_img, cv::Size(3, 3)); // 3x3窗口大小 // 中值滤波 cv::medianBlur(img, blurred_img, 3); // 使用3x3窗口 // 双边滤波 cv::bilateralFilter(img, blurred_img, 9, 75, 75); // 半径参数,空间与强度的标准差 // 显示原始和处理后的图像 cv::imshow("Original Image", img); cv::imshow("Filtered Image", blurred_img); cv::waitKey(); ``` 分析它们之间的差别,主要是噪声去除效果、边缘保持程度以及对细节的影响不同高斯均值滤波对细节损失较多,而中值滤波更适于去除椒盐噪声;双边滤波则平衡了这两者,对噪声和边缘保护较好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只爭朝夕不負韶華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值