图像的空间域滤
一、 实验目的
1.了解和掌握图像中噪声的类型,使用MATLAB函数及编程实现多种类型噪声。
2.了解和掌握图像空间域滤波方法,使用MATLAB函数及编程实现多种类型的空间滤波。
3.分析各种空间滤波算法的滤波效果,分析各种算法的特点及其应用场合,培养处理实际图像的能力。
二、实验内容和步骤
1.噪声生成
(1)利用imnoise()函数在图像electric.tif 上加入高斯噪声,高斯噪声均值为0,方差分别为0.2,0.5,0.8,在同一个图形窗口显示原图像和加入不同方差噪声图像,比较加入不同方差的高斯噪声对图像的影响;
实验代码:
image = imread('E:\实验三\electric.tif');
subplot(2,2,1);
imshow(image),title('原图');
subplot(2,2,2);
imageNoise1 = imnoise(image,'gaussian',0,0.2);
imshow(imageNoise1),title('方差0.2');
subplot(2,2,3);
imageNoise2 = imnoise(image,'gaussian',0,0.5);
imshow(imageNoise2),title('方差0.5');
subplot(2,2,4);
imageNoise3 = imnoise(image,'gaussian',0,0.8);
imshow(imageNoise3),title('方差0.8');
实验结果:
(2)利用imnoise()函数在图像electric.tif 上加入椒盐噪声,概率分别为0.2,0.5,0.8,在同一个图形窗口显示原图像和加入不同概率噪声的图像,比较加入不同概率的椒盐噪声对图像的影响。
实验代码:
image = imread('E:\实验三\electric.tif');
subplot(2,2,1);
imshow(image),title('原图');
subplot(2,2,2);
imageNoise1 = imnoise(image,'salt & pepper',0.2);
imshow(imageNoise1),title('概率0.2');
subplot(2,2,3);
imageNoise2 = imnoise(image,'salt & pepper',0.5);
imshow(imageNoise2),title('概率0.5');
subplot(2,2,4);
imageNoise3 = imnoise(image,'salt & pepper',0.8);
imshow(imageNoise3),title('概率0.8');
实验结果:
2.空间滤波去除噪声
(1)利用medfilt2() 函数对实验1(2)中加了椒盐噪声的图像electric.tif 进行模板为3✕3的中值滤波(参数选择:default),比较同一大小模板的中值滤波对不同程度噪声的滤波效果;
实验代码:
image = imread('E:\实验三\electric.tif');
subplot(2,2,1);
imshow(image),title('原图');
subplot(2,2,2);
imageNoise1 = imnoise(image,'salt & pepper',0.2);
M1= medfilt2(imageNoise1,[3 3]);
imshow(M1),title('概率0.2');
subplot(2,2,3);
imageNoise2 = imnoise(image,'salt & pepper',0.5);
M2= medfilt2(imageNoise2,[3 3]);
imshow(M2),title('概率0.5');
subplot(2,2,4);
imageNoise3 = imnoise(image,'salt & pepper',0.8);
M3= medfilt2(imageNoise3,[3 3]);%3×3中值滤波
imshow(M3),title('概率0.8');
实验结果:
(2)利用medfilt2() 函数对实验1(2)中加了同一种程度椒盐噪声(概率为0.5)的图像electric.tif 进行模板为3✕3、5✕5、9✕9的中值滤波,比较不同大小模板对同一种程度噪声的滤波效果;
实验代码:
image = imread('E:\实验三\electric.tif');
subplot(2,2,1);
imshow(image),title('原图');
imageNoise = imnoise(image,'salt & pepper',0.5);
subplot(2,2,2);
M1= medfilt2(imageNoise,[3 3]);
imshow(M1),title('3x3');
subplot(2,2,3);
M2= medfilt2(imageNoise,[5 5]);
imshow(M2),title('5x5');
subplot(2,2,4);
M3= medfilt2(imageNoise,[9 9]);
imshow(M3),title('9x9');
实验结果:
(3)利用imnoise()函数在图像electric.tif 上加入高斯噪声(均值为0,方差为0.2)和椒盐噪声(概率为0.2),利用medfilt2() 函数对加了高斯和椒盐噪声的图像分别进行均值滤波和中值滤波处理,模板为3✕3,比较中值滤波和均值滤波的效果。
实验代码:
image = imread('E:\实验三\electric.tif');
imageNoise1 = imnoise(image,'salt & pepper',0.2);
imageNoise2 = imnoise(image,'gaussian',0,0.2);
ave=fspecial('average',3);%利用预定义函数fspecial 命令产生均值(average)滤波器
M1 = filter2(ave,imageNoise1)/255; %均值滤波器
subplot(2,2,1),imshow(M1),title('椒盐均值');
M2= medfilt2(imageNoise1,[3 3]); %3×3中值滤波
subplot(2,2,2),imshow(M2),title('椒盐中值');
M3 = filter2(ave,imageNoise2)/255; %均值滤波器
subplot(2,2,3),imshow(M3),title('高斯均值');
M4= medfilt2(imageNoise2,[3 3]); %3×3中值滤波
subplot(2,2,4),imshow(M4),title('高斯中值');
实验结果:
3.图像的锐化滤波
(1)利用函数fspecial()和filter2()实现对图像(building.tif)的'laplacian'滤波器的锐化滤波增强;
实验代码:
image = imread('E:\实验三\building.tif');
subplot(1,2,1),imshow(image),title('原图');
La=fspecial('laplacian');%利用预定义函数fspecial 命令产生laplacian滤波器
M1 = filter2(La,image);
subplot(1,2,2),imshow(M1),title('锐化滤波增强');
实验结果:
(2)利用函数fspecial()和filter2()实现对图像(building.tif)的均值滤波;
实验代码:
image = imread('E:\实验三\building.tif');
subplot(1,2,1),imshow(image),title('原图');
ave=fspecial('average',3);%利用预定义函数fspecial 命令产生均值滤波器
M1 = filter2(ave,image)/255;
subplot(1,2,2),imshow(M1),title('均值滤波');
实验结果:
(3)将原图像和两种滤波的图像在一个图形窗口显示,并比较两种滤波器滤波的效果。
实验代码:
image = imread('E:\实验三\building.tif');
subplot(1,3,1),imshow(image),title('原图');
ave=fspecial('average',3);%利用预定义函数fspecial 命令产生均值滤波器
La=fspecial('laplacian');%利用预定义函数fspecial 命令产生laplacian滤波器
M1 = filter2(La,image);
subplot(1,3,2),imshow(M1),title('锐化滤波增强');
M2 = filter2(ave,image)/255;
subplot(1,3,3),imshow(M2),title('均值滤波');
实验结果:
对比:锐化滤波使图像的边缘和模糊部分更加明显;均值滤波使图像更加平滑,但是去除了图像的一些细节。
4.滤波器去噪效果评价
设计一个滤波实验,对数字图像中的高斯噪声和均值噪声进行去除。要求自己编写中值滤波器和均值滤波器(不能调用MATLAB中fspecial()函数和filter2()函数)程序,并能够定性评价:
(1)中值滤波器和均值滤波对数字图像中的高斯噪声和均值噪声的去噪效果;
(2)滤波模板大小对去噪效果的影响。
实验代码:
均值滤波:
%自编的中值滤波函数。x是需要滤波的图像,n是模板大小(即n×n)
function d=mid_filter(x,n)
[height, width]=size(x); %输入图像是p×q的,且p>n,q>n
x1=double(x);
x2=x1;
for i=1:height-n+1
for j=1:height-n+1
c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)
e=c(1,:); %是c矩阵的第一行
for u=2:n
e=[e,c(u,:)]; %将c矩阵变为一个行矩阵
end
mm=median(e); %mm是中值
x2(i+(n-1)/2,j+(n-1)/2)=mm; %将模板各元素的中值赋给模板中心位置的元素
end
end
%未被赋值的元素取原值
d=uint8(x2);
中值滤波:
%自编的中值滤波函数。x是需要滤波的图像,n是模板大小(即n×n)
function d=mid_filter(x,n)
[height, width]=size(x); %输入图像是p×q的,且p>n,q>n
x1=double(x);
x2=x1;
for i=1:height-n+1
for j=1:height-n+1
c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)
e=c(1,:); %是c矩阵的第一行
for u=2:n
e=[e,c(u,:)]; %将c矩阵变为一个行矩阵
end
mm=median(e); %mm是中值
x2(i+(n-1)/2,j+(n-1)/2)=mm; %将模板各元素的中值赋给模板中心位置的元素
end
end
%未被赋值的元素取原值
d=uint8(x2);
评价:
均值滤波和和中值滤波都可以起到平滑图像,滤去噪声的功能。均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好,对椒盐噪声表现较好,对高斯噪声表现较差。
滤波器模板越大对于噪声表现越好。
三、 问题与讨论
1.图像灰度变换与空间滤波有什么不同?
答:灰度变换是在图像的单个像素上操作,以对比度和阈值处理为主要目的,而空间滤波通过设计性能改善的操作,例如通过图像中每一个像素的邻域处理来锐化图像。
- 空间锐化滤波和空间平滑滤波的特点和效果。
答:平滑滤波能减弱或消除图像中的高频率分量而不影响低频分量,高频分量对应图像中的区域边缘等灰度值具有较大变化的部分,平滑滤波可将这些分量滤去减少局部灰度起伏,使图像变得比较平滑。也可用于消除噪声,或在提取较大目标前去除太小的细节或将目标的小间断连接起来。
锐化滤波正好相反,锐化滤波常用于增强被模糊的细节或目标的边缘,强化图像的细节。
- 结合实验内容,定性评价中值滤波和均值滤波对数字图像的高斯噪声和椒盐噪声的去除效果。
答:均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。中值滤波对椒盐噪声表现好,对高斯噪声表现差。
4.结合实验内容,定性评价滤波模板大小对去噪效果的影响?
答:中值滤波器模板越大对于椒盐噪声表现越好。
四、总结
1.实验收获
通过实验,我了解和掌握图像中噪声的类型,使用MATLAB函数及编程实现多种类型噪声,也了解和掌握图像空间域滤波方法,虽然老师在课堂上也讲过,但是动手实践起来让我有了更加深刻的了解和认识,通过实验中的对比,也让我区分了解了不同噪声之间的特性,不同滤波器面对不同噪声的不同效果。
2.实验不足
主要不足还是在不用函数库中的函数去实现中值滤波和均值滤波,感觉上课学的有点忘了等等,还需要多去巩固多去琢磨一下。