实验目的
学习图片去噪的两种方法均值滤波(线性)和中值滤波(非线性)
实验任务
- 对比均值滤波和中值滤波的去噪效果和灰度直方图
- 均值滤波和中值滤波对不同强度的高斯噪声和椒盐噪声的去噪效果和灰度直方图
- 中值滤波和均值滤波对不同模板的图片的去噪效果和灰度直方图
实验内容
图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;这里用一个函数实现 :imnoise函数。
1. 均值滤波算法
也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。
①模板游走
②将mask对应下的灰度值相加,求平均值
③用均值代替f(x,y)
2. 中值滤波算法
基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。中值滤波是求局部中值而不是局部均值,即对参与计算的象素灰度值按大小排序,然后取位置居中的象元灰度值。
图像:
实验代码
1. 均值滤波对不同模板的椒盐噪声和高斯噪声下图片的影响(对比了中值滤波效果)
① 均值滤波对不同模板的椒盐噪声图片的去噪效果
I=imread('test1.jpg');%读取图像
I = rgb2gray(I);%灰度处理
J=imnoise(I,'salt & pepper',0.2);%加入椒盐噪声,密度为0.2
subplot(2,3,1);imshow(I);title('原始图像');
subplot(2,3,2); imshow(J);title('加入椒盐噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K1= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波
K2=filter2(fspecial('average',3),J)/255; %模板尺寸为3
K3=filter2(fspecial('average',5),J)/255;% 模板尺寸为5
K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9
subplot(2,3,3);imshow(K1);title('中值滤波');
subplot(2,3,4); imshow(K2);title('均值滤波,尺寸3');
subplot(2,3,5);imshow(K3);title('均值滤波,尺寸5');
subplot(2,3,6);imshow(K4);title('均值滤波,尺寸9');
运行截图如下:
对应的灰度直方图如下图:
subplot(2,3,1);imhist(I);title('原始图像灰度直方图');
subplot(2,3,2); imhist(J);title('椒盐噪声图像灰度直方图');
subplot(2,3,3);imhist(K1);title('中值滤波图像灰度直方图');
subplot(2,3,4); imhist(K2);title('模板3均值滤波图像灰度直方图');
subplot(2,3,5);imhist(K3);title('模板5均值滤波图像灰度直方图');
subplot(2,3,6);imhist(K3);title('模板9均值滤波图像灰度直方图');
② 均值滤波对不同模板的高斯噪声图片的去噪效果
I=imread('test1.jpg');%读取图像
I = rgb2gray(I);%灰度处理
J=imnoise(I,'gaussian',0.2);%加入高斯噪声,密度为0.2
subplot(2,3,1);imshow(I);
title('原始图像');
subplot(2,3,2); imshow(J);
title('加入高斯噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K1= medfilt2(J);%采用二维中值滤波函数medfilt2对受高斯噪声干扰的图像滤波
%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波
K2=filter2(fspecial('average',3),J)/255; %模板尺寸为3
K3=filter2(fspecial('average',5),J)/255;% 模板尺寸为5
K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9
subplot(2,3,3);imshow(K1);
title('中值滤波');
subplot(2,3,4); imshow(K2);
title('均值滤波,尺寸3');
subplot(2,3,5);imshow(K3);
title('均值滤波,尺寸5');
subplot(2,3,6);imshow(K4);
title('均值滤波,尺寸9');
实验截图:
对应的灰度直方图如下图:
subplot(2,3,1);imhist(I);title('原始图像灰度直方图');
subplot(2,3,2); imhist(J);title('高斯噪声图像灰度直方图');
subplot(2,3,3);imhist(K1);title('中值滤波图像灰度直方图');
subplot(2,3,4); imhist(K2);title('模板3均值滤波图像灰度直方图');
subplot(2,3,5);imhist(K3);title('模板5均值滤波图像灰度直方图');
subplot(2,3,6);imhist(K3);title('模板9均值滤波图像灰度直方图'
实验截图:
2. 中值滤波对不同模板的椒盐噪声和高斯噪声图片的去噪效果和灰度直方图
I=imread('test1.jpg');%读取图像
I = rgb2gray(I);%灰度处理
J1=imnoise(I,'salt & pepper',0.2);%加入椒盐噪声,密度为0.2
J2=imnoise(I,'gaussian',0.2);%加入高斯噪声,密度为0.2
subplot(3,3,1);imshow(I);title('原始图像');
subplot(3,3,2); imshow(J1);title('加入密度0.2椒盐噪声之后的图像');
subplot(3,3,3); imshow(J2);title('加入密度0.2高斯噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波
K1= medfilt2(J1, [3 3]);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
K2= medfilt2(J1, [5 5]);
K3= medfilt2(J1, [9 9]);
K4= medfilt2(J2, [3 3]);%采用二维中值滤波函数medfilt2对受高斯噪声干扰的图像滤波
K5= medfilt2(J2, [5 5]);
K6= medfilt2(J2, [9 9]);
subplot(3,3,4);imshow(K1);title('模板3椒盐噪声中值滤波');
subplot(3,3,5);imshow(K2);title('模板5椒盐噪声中值滤波');
subplot(3,3,6); imshow(K3);title('模板9椒盐噪声中值滤波');
subplot(3,3,7);imshow(K4);title('模板3高斯噪声中值滤波');
subplot(3,3,8);imshow(K5);title('模板5高斯噪声中值滤波');
subplot(3,3,9); imshow(K6);title('模板9高斯噪声中值滤波');
对应的灰度直方图如下图:
subplot(3,3,1);imhist(I);title('原始图像灰度直方图');
subplot(3,3,2); imhist(J1);title('密度0.2椒盐噪声之后的图像灰度直方图');
subplot(3,3,3); imhist(J2);title('密度0.2高斯噪声之后的图像灰度直方图');
subplot(3,3,4);imhist(K1);title('模板3椒盐噪声中值滤波灰度直方图');
subplot(3,3,5);imhist(K2);title('模板5椒盐噪声中值滤波灰度直方图');
subplot(3,3,6); imhist(K3);title('模板9椒盐噪声中值滤波灰度直方图');
subplot(3,3,7);imhist(K4);title('模板3高斯噪声中值滤波灰度直方图');
subplot(3,3,8);imhist(K5);title('模板5高斯噪声中值滤波灰度直方图');
subplot(3,3,9); imhist(K6);title('模板9高斯噪声中值滤波灰度直方图');
3. 均值滤波和中值滤波对不同强度的椒盐噪声的去噪效果和灰度直方图
I=imread('test1.jpg');%读取图像
I = rgb2gray(I);%灰度处理
J1=imnoise(I,'salt & pepper',0.2);%加入椒盐噪声,密度为0.2
J2=imnoise(I,'salt & pepper',0.08);%加入椒盐噪声,密度为0.08
subplot(3,3,1);imshow(I);title('原始图像');
subplot(3,3,2); imshow(J1);title('加入密度0.2椒盐噪声之后的图像');
subplot(3,3,3); imshow(J1);title('加入密度0.08椒盐噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波
K1= medfilt2(J1);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
K2= medfilt2(J2);
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K3=filter2(fspecial('average',3),J1)/255; %模板尺寸为3,密度0.2椒盐噪声
K4= filter2(fspecial('average',9),J2)/255; %模板尺寸为3,密度0.08椒盐噪声
subplot(3,3,4);imshow(K1);title('密度0.2椒盐噪声中值滤波');
subplot(3,3,5);imshow(K2);title('密度0.08椒盐噪声中值滤波');
subplot(3,3,6); imshow(K3);title('密度0.2椒盐噪声模板3均值滤波');
subplot(3,3,7);imshow(K4);title('密度0.08椒盐噪声模板3均值滤波');
实验截图:
对应的灰度直方图如下图:
subplot(3,3,1);imhist(I);title('原始图像的灰度直方图');
subplot(3,3,2); imhist(J1);title('密度0.2椒盐噪声之后的图像的灰度直方图');
subplot(3,3,3); imhist(J1);title('密度0.08椒盐噪声之后的图像的灰度直方图');
subplot(3,3,4);imhist(K1);title('密度0.2椒盐噪声中值滤波的灰度直方图');
subplot(3,3,5);imhist(K2);title('密度0.08椒盐噪声中值滤波的灰度直方图');
subplot(3,3,6); imhist(K3);title('密度0.2椒盐噪声模板3均值滤波的灰度直方图');
subplot(3,3,7);imhist(K4);title('密度0.08椒盐噪声模板3均值滤波的灰度直方图');
4. 均值滤波和中值滤波对不同强度的高斯噪声的去噪效果和灰度直方图
I=imread('test1.jpg');%读取图像
I = rgb2gray(I);%灰度处理
J1=imnoise(I,'gaussian',0.2);%加入高斯噪声,密度为0.2
J2=imnoise(I,'gaussian',0.08);%加入高斯噪声,密度为0.08
subplot(3,3,1);imshow(I);title('原始图像');
subplot(3,3,2); imshow(J1);title('密度0.2高斯噪声之后的图像');
subplot(3,3,3); imshow(J1);title('密度0.08高斯噪声之后的图像');
%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波
K1= medfilt2(J1);%采用二维中值滤波函数medfilt2对受高斯噪声干扰的图像滤波
K2= medfilt2(J2);
%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
K3=filter2(fspecial('average',3),J1)/255; %模板尺寸为3,密度0.2高斯噪声
K4= filter2(fspecial('average',9),J2)/255; %模板尺寸为3,密度0.08高斯噪声
subplot(3,3,4);imshow(K1);title('密度0.2高斯噪声中值滤波');
subplot(3,3,5);imshow(K2);title('密度0.08高斯噪声中值滤波');
subplot(3,3,6); imshow(K3);title('密度0.2高斯噪声模板3均值滤波');
subplot(3,3,7);imshow(K4);title('密度0.08高斯噪声模板3均值滤波');
对应的灰度直方图如下图:
subplot(3,3,1);imhist(I);title('原始图像的灰度直方图');
subplot(3,3,2); imhist(J1);title('密度0.2高斯噪声之后的图像的灰度直方图');
subplot(3,3,3); imhist(J1);title('密度0.08高斯噪声之后的图像的灰度直方图');
subplot(3,3,4);imhist(K1);title('密度0.2高斯噪声中值滤波的灰度直方图');
subplot(3,3,5);imhist(K2);title('密度0.08高斯噪声中值滤波的灰度直方图');
subplot(3,3,6); imhist(K3);title('密度0.2高斯噪声模板3均值滤波的灰度直方图');
subplot(3,3,7);imhist(K4);title('密度0.08高斯噪声模板3均值滤波的灰度直方图');
结论
1. 对比均值滤波和中值滤波的去噪效果和灰度直方图
均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,中值滤波对椒盐噪声表现较好,对高斯噪声表现较差。
2. 均值滤波和中值滤波对不同强度的高斯噪声和椒盐噪声的去噪效果和灰度直方图
椒盐噪声是由于图像传感器或传输过程中的错误导致的。椒盐噪声是一种脉冲噪声,它会在图像中随机出现黑色或白色的像素点,类似于盐和胡椒粉的颗粒。椒盐噪声会在图像中产生明显的黑白点,这些点可能会干扰图像的细节和边缘信息。椒盐噪声可以通过中值滤波等方法进行去噪处理,将异常像素点替换为周围像素的中值。密度越低的椒盐噪声,均值滤波和中值滤波去噪效果越好。
高斯噪声是由于图像传感器的电子元件的随机变化引起的。它是一种符合高斯分布的随机噪声,会使图像的亮度值产生随机波动。高斯噪声会使图像的亮度值产生随机波动,使得图像整体呈现出一种模糊或柔化的效果。高斯噪声可以通过均值滤波、高斯滤波等方法进行去噪处理,通过平滑图像来减少噪声的影响。密度越低的高斯噪声,均值滤波和中值滤波去噪效果越好。
3. 中值滤波和均值滤波对不同模板的图片的去噪效果和灰度直方图
中值滤波是一种常用的图像去噪方法,它通过将像素点周围的邻域像素值进行排序,然后选择中间值作为当前像素的新值来实现去噪效果。中值滤波对不同模板的图片的去噪效果和灰度直方图如下:
在3x3的邻域内进行排序,选择中间值作为当前像素的新值。这种模板适用于对轻度噪声的去除,能够保留较好的图像细节。在5x5的邻域内进行排序,选择中间值作为当前像素的新值。这种模板适用于对中等程度噪声的去除,能够在一定程度上平滑图像。在9x9的邻域内进行排序,选择中间值作为当前像素的新值。这种模板适用于对较强噪声的去除,能够有效减少图像中的噪点。对于灰度直方图,中值滤波可以通过去除图像中的噪声点来改变图像的灰度分布。去噪后的图像灰度直方图会更加平滑,峰值之间的差异会减小,使得图像的对比度得到改善。
均值滤波是一种常用的图像去噪方法,它通过计算像素周围邻域的平均值来替代当前像素的值,从而达到去除噪声的效果。均值滤波的模板大小决定了邻域的范围,不同大小的模板会对图像的去噪效果产生影响。对于小尺寸的模板,如3x3或5x5,均值滤波可以有效地去除图像中的高频噪声,例如椒盐噪声或高斯噪声。这是因为小尺寸的模板只考虑了局部邻域的平均值,能够平滑掉噪声点。对于大尺寸的模板,如11x11或15x15,均值滤波可能会导致图像细节的模糊。这是因为大尺寸的模板考虑了更广阔的邻域范围,可能将图像中的细节也进行平均处理,从而损失了一些图像细节。关于灰度直方图,它是描述图像中各个灰度级别出现频率的统计图。在进行均值滤波之后,灰度直方图会发生变化。具体来说,均值滤波会使图像的灰度级别分布变得更加平滑,峰值会变得更加平缓。这是因为均值滤波通过平均邻域像素的值来替代当前像素的值,从而减小了灰度级别之间的差异。