一、实验目的
1.了解和掌握图像中噪声的类型,使用MATLAB函数及编程实现多种类型噪声。
2.了解和掌握图像空间域滤波方法,使用MATLAB函数及编程实现多种类型的空间滤波。
3.分析各种空间滤波算法的滤波效果,分析各种算法的特点及其应用场合,培养处理实际图像的能力。
二、实验要求
1.实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。
2.实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。
3.实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码,实验小结,回答问题。
三、实验内容(每一个内容编写一个*.m文件)
1.噪声生成
(1)利用imnoise()函数在图像electric.tif 上加入高斯噪声,高斯噪声均值为0,方差分别为0.2,0.5,0.8,在同一个图形窗口显示原图像和加入不同方差噪声图像,比较加入不同方差的高斯噪声对图像的影响;
(2)利用imnoise()函数在图像electric.tif 上加入椒盐噪声,概率分别为0.2,0.5,0.8,在同一个图形窗口显示原图像和加入不同概率噪声的图像,比较加入不同概率的椒盐噪声对图像的影响。
%sy31
clear all
close all
clc
% 1-1
I = imread('electric.tif'); % 读取名为'electric.tif'的图像
J1 = imnoise(I,'gaussian',0,0.2); % 向图像添加高斯噪声,方差为0.2
J2 = imnoise(I,'gaussian',0,0.5); % 向图像添加高斯噪声,方差为0.5
J3 = imnoise(I,'gaussian',0,0.8); % 向图像添加高斯噪声,方差为0.8
figure(1) % 创建一个新的图形窗口
subplot(2,2,1),imshow(I),title('original image') % 在第一个子图中显示原始图像
subplot(2,2,2),imshow(J1),title('gaussian noise,variance=0,mean = 0.2') % 在第二个子图中显示添加高斯噪声后的图像,显示噪声方差为0.2
subplot(2,2,3),imshow(J2),title('gaussian noise,variance=0,mean = 0.5') % 在第三个子图中显示添加高斯噪声后的图像,显示噪声方差为0.5
subplot(2,2,4),imshow(J3),title('gaussian noise,variance=0,mean = 0.8') % 在第四个子图中显示添加高斯噪声后的图像,显示噪声方差为0.8
% 1-2
figure(2) % 创建一个新的图形窗口
K1 = imnoise(I,'salt & pepper',0.2); % 向图像添加椒盐噪声,密度为0.2
K2 = imnoise(I,'salt & pepper',0.5); % 向图像添加椒盐噪声,密度为0.5
K3 = imnoise(I,'salt & pepper',0.8); % 向图像添加椒盐噪声,密度为0.8
subplot(2,2,1),imshow(I),title('original image') % 在第一个子图中显示原始图像
subplot(2,2,2),imshow(K1),title('salt & pepper noise,density = 0.2') % 在第二个子图中显示添加椒盐噪声后的图像,显示噪声密度为0.2
subplot(2,2,3),imshow(K2),title('salt & pepper noise,density = 0.5') % 在第三个子图中显示添加椒盐噪声后的图像,显示噪声密度为0.5
subplot(2,2,4),imshow(K3),title('salt & pepper noise,density = 0.8') % 在第四个子图中显示添加椒盐噪声后的图像,显示噪声密度为0.8
2.空间滤波去除噪声
(1)利用medfilt2() 函数对实验1(2)中加了椒盐噪声的图像electric.tif 进行模板为3✕3的中值滤波(参数选择:default),比较同一大小模板的中值滤波对不同程度噪声的滤波效果;
(2)利用medfilt2() 函数对实验1(2)中加了同一种程度椒盐噪声(概率为0.5)的图像electric.tif 进行模板为3✕3、5✕5、9✕9的中值滤波,比较不同大小模板对同一种程度噪声的滤波效果;
(3)利用imnoise()函数在图像electric.tif 上加入高斯噪声(均值为0,方差为0.2)和椒盐噪声(概率为0.2),利用medfilt2() 函数对加了高斯和椒盐噪声的图像分别进行均值滤波和中值滤波处理,模板为3✕3,比较中值滤波和均值滤波的效果。
%sy32
clear all % 清空所有变量
close all % 关闭所有窗口
clc % 清空命令行窗口
I = imread('electric.tif'); % 读取名为'electric.tif'的图像
K1 = imnoise(I,'salt & pepper',0.2); % 向图像添加椒盐噪声,密度为0.2
K2 = imnoise(I,'salt & pepper',0.5); % 向图像添加椒盐噪声,密度为0.5
K3 = imnoise(I,'salt & pepper',0.8); % 向图像添加椒盐噪声,密度为0.8
% 2-1-1 对K1,K2,K3使用3x3大小的中值滤波
KK1 = medfilt2(K1);
KK2 = medfilt2(K2);
KK3 = medfilt2(K3);
figure(1) % 创建一个新的图形窗口
subplot(2,3,1),imshowpair(K1,KK1,'montage'),title('K1 - medfilt[3 x 3]') % 在第一行第一列位置展示K1和使用3x3大小的中值滤波后的图像
subplot(2,3,2),imshowpair(K2,KK2,'montage'),title('K2 - medfilt[3 x 3]') % 在第一行第二列位置展示K2和使用3x3大小的中值滤波后的图像
subplot(2,3,3),imshowpair(K3,KK3,'montage'),title('K3 - medfilt[3 x 3]') % 在第一行第三列位置展示K3和使用3x3大小的中值滤波后的图像
% 2-1-2 对K2使用不同尺寸(3x3、5x5、9x9)的中值滤波
KK21 = medfilt2(K2,[3 3]); % 使用3x3大小的中值滤波
KK22 = medfilt2(K2,[5 5]); % 使用5x5大小的中值滤波
KK23 = medfilt2(K2,[9 9]); % 使用9x9大小的中值滤波
subplot(2,3,4),imshowpair(K2,KK21,'montage'),title('K2 - medfilt[3 x 3]') % 在第二行第一列位置展示K2和使用3x3大小的中值滤波后的图像
subplot(2,3,5),imshowpair(K2,KK22,'montage'),title('K2 - medfilt[5 x 5]') % 在第二行第二列位置展示K2和使用5x5大小的中值滤波后的图像
subplot(2,3,6),imshowpair(K2,KK23,'montage'),title('K2 - medfilt[9 x 9]') % 在第二行第三列位置展示K2和使用9x9大小的中值滤波后的图像
figure(2) % 创建一个新的图形窗口
% 2-1-3 对高斯噪声图像添加椒盐噪声,并分别使用中值滤波和平均滤波进行去噪
J1 = imnoise(I,'gaussian',0,0.2); % 向原始图像添加高斯噪声,方差为0.2
I2 = imnoise(J1,'salt & pepper',0.2); % 向添加高斯噪声后的图像添加椒盐噪声,密度为0.2
subplot(2,3,1),imshow(I),title('original image') % 在第一行第一列位置展示原始图像
subplot(2,3,2),imshow(J1),title('gaussian') % 在第一行第二列位置展示添加高斯噪声后的图像
subplot(2,3,3),imshow(I2),title('gaussian + salt & pepper') % 在第一行第三列位置展示添加高斯噪声和椒盐噪声后的图像
med_K = medfilt2(I2,[3 3]); % 使用3x3大小的中值滤波去除噪声
H = fspecial('average',[3 3]); % 创建3x3大小的平均滤波器
avg_K = imfilter(I2,H,'replicate'); % 使用平均滤波去除噪声,并使用'replicate'选项进行边缘处理
subplot(2,3,4),imshow(med_K),title('med-filter') % 在第二行第一列位置展示使用中值滤波去噪后的图像
subplot(2,3,5),imshow(avg_K),title('average-filter') % 在第二行第二列位置展示使用平均滤波去噪后的图像
3.图像的锐化滤波
(1)利用函数fspecial()和filter2()实现对图像(building.tif)的’laplacian’滤波器的锐化滤波增强;
(2)利用函数fspecial()和filter2()实现对图像(building.tif)的均值滤波;
(3)将原图像和两种滤波的图像在一个图形窗口显示,并比较两种滤波器滤波的效果。
%sy33
% 清空环境变量,关闭所有图形窗口,清空命令行窗口
clear all
close all
clc
% 创建一个新的图形窗口
figure
% 读取名为'building.tif'的图像
I = imread('building.tif');
% 创建拉普拉斯锐化滤波器
h1 = fspecial('laplacian');
% 创建11x11大小的均值滤波器
h2 = fspecial('average', [11, 11]);
% 对图像进行拉普拉斯滤波,然后除以255进行归一化处理
I2 = filter2(h1, I) / 255; % 拉普拉斯锐化滤波
% 将图像转换为double类型,并与拉普拉斯滤波结果相加,得到增强后的图像
I3 = double(I) / 255 + I2; % 拉普拉斯锐化滤波增强
% 对图像进行均值滤波,然后除以255进行归一化处理
I4 = filter2(h2, I) / 255; % 均值滤波
% 在图形窗口中创建子图,并显示原始图像、拉普拉斯滤波后的图像和均值滤波后的图像
subplot(1, 3, 1), imshow(I), title('original image')
subplot(1, 3, 2), imshow(I3), title('laplacian filter')
subplot(1, 3, 3), imshow(I4), title('average filter')
4.滤波器去噪效果评价
设计一个滤波实验,对数字图像中的高斯噪声和均值噪声进行去除。要求自己编写中值滤波器和均值滤波器(不能调用MATLAB中fspecial()函数和filter2()函数)程序,并能够定性评价:
(1)中值滤波器和均值滤波对数字图像中的高斯噪声和均值噪声的去噪效果;
(2)滤波模板大小对去噪效果的影响。
%sy34
% 清空环境变量,关闭所有图形窗口,清空命令行窗口
clear all
close all
clc
% 读取名为'electric.tif'的图像
I = imread('electric.tif');
% 添加高斯噪声
I1 = imnoise(I, 'gaussian', 0, 0.2);
% 添加椒盐噪声
I2 = imnoise(I, 'salt & pepper', 0.2);
% 创建一个新的图形窗口,显示原始图像、添加高斯噪声后的图像和添加椒盐噪声后的图像
figure(1);
subplot(1, 3, 1);imshow(I);title('原图');
subplot(1, 3, 2);imshow(I1);title('添加高斯噪声');
subplot(1, 3, 3);imshow(I2);title('添加椒盐噪声');
% 使用自定义函数my_median进行中值滤波
I1_3 = my_median(I1, 3, 3);
I2_3 = my_median(I2, 3, 3);
I1_5 = my_median(I1, 5, 5);
I2_5 = my_median(I2, 5, 5);
I1_9 = my_median(I1, 9, 9);
I2_9 = my_median(I2, 9, 9);
% 使用自定义函数my_average进行均值滤波
I1_33 = my_average(I1, 3, 3);
I2_33 = my_average(I2, 3, 3);
I1_55 = my_average(I1, 5, 5);
I2_55 = my_average(I2, 5, 5);
I1_99 = my_average(I1, 9, 9);
I2_99 = my_average(I2, 9, 9);
% 创建新的图形窗口,显示不同滤波方法去除噪声后的图像
figure(2);
subplot(2, 2, 1);imshow(I1_3);title('3*3中值滤波去高斯噪声');
subplot(2, 2, 2);imshow(I2_3);title('3*3中值滤波去椒盐噪声');
subplot(2, 2, 3);imshow(I1_33);title('3*3均值滤波去高斯噪声');
subplot(2, 2, 4);imshow(I2_33);title('3*3均值滤波去椒盐噪声');
figure(3);
subplot(2, 2, 1);imshow(I1_5);title('5*5中值滤波去高斯噪声');
subplot(2, 2, 2);imshow(I2_5);title('5*5中值滤波去椒盐噪声');
subplot(2, 2, 3);imshow(I1_55);title('5*5均值滤波去高斯噪声');
subplot(2, 2, 4);imshow(I2_55);title('5*5均值滤波去椒盐噪声');
figure(4);
subplot(2, 2, 1);imshow(I1_9);title('9*9中值滤波去高斯噪声');
subplot(2, 2, 2);imshow(I2_9);title('9*9中值滤波去椒盐噪声');
subplot(2, 2, 3);imshow(I1_99);title('9*9均值滤波去高斯噪声');
subplot(2, 2, 4);imshow(I2_99);title('9*9均值滤波去椒盐噪声');
四、问题与讨论
1.图像灰度变换与空间滤波有什么不同?
图像灰度变换和空间滤波的不同在于它们处理图像的方式不同。图像灰度变换是通过对图像的像素灰度进行变换来调整图像的对比度和亮度,例如通过对数变换、幂次变换等方式来实现。而空间滤波是通过对图像的局部区域进行像素值的加权平均或其他运算来达到图像平滑、锐化等效果。
2.空间锐化滤波和空间平滑滤波的特点和效果。
空间锐化滤波主要特点是增强图像的边缘和细节,使图像看起来更加清晰和锐利。而空间平滑滤波的特点是减少图像中的噪声,使图像变得更加平滑。空间锐化滤波可以突出图像的细节特征,但也容易增强图像中的噪声;而空间平滑滤波可以有效减少噪声,但可能会导致图像失真和边缘模糊。
3.结合实验内容,定性评价中值滤波和均值滤波对数字图像的高斯噪声和椒盐噪声的去除效果。
中值滤波和均值滤波是常用的去除数字图像中的噪声的方法。对于高斯噪声和椒盐噪声,中值滤波通常能够比均值滤波更有效地去除这些噪声。因为中值滤波使用相邻像素值的中值来代替当前像素值,对于椒盐噪声来说,中值滤波能够更好地保留图像的细节信息,而均值滤波可能会导致模糊效果。
4.结合实验内容,定性评价滤波模板大小对去噪效果的影响?
滤波模板大小对去噪效果有着一定的影响。通常情况下,较大的滤波模板可以更好地平均周围像素的值,从而对噪声有更好的抑制效果,但也可能导致图像细节的丢失和模糊。较小的滤波模板则更适合处理局部的细节和边缘特征,但对于大面积的噪声去除效果可能不如较大的模板。因此,在选择滤波模板大小时需要根据具体的图像特点和去噪需求进行权衡和选择。
五、实验材料
1.实验软件
MATLAB R2020b,其他版本都可以
2.注意事项
实验中需要用到的图片要先准备好放到项目中去