实验二A 图像的空域
- 一、实验目的
- 二、实验原理
- 三、实验内容与要求
- 四、实验的具体实现
一、实验目的
1.掌握图像滤波的基本定义及目的。
2.理解空间域滤波的基本原理及方法。
3.掌握进行图像的空域滤波的方法。
二、实验原理
1.空域增强
空域滤波是在图像空间中借助模板对图像进行领域操作,处理图像每一个像素的取值都是根据模板对输入像素相应领域内的像素值进行计算得到的。空域滤波基本上是让图像在频域空间内某个范围的分量受到抑制,同时保证其他分量不变,从而改变输出图像的频率分布,达到增强图像的目的。
空域滤波一般分为线性滤波和非线性滤波两类。线性滤波器的设计常基于对傅里叶变换的分析,非线性空域滤波器则一般直接对领域进行操作。各种空域滤波根据功能主要分为平滑滤波和锐化滤波。图像平滑可用低通滤波器来实现,平滑的目的可分为两类:一类是模糊,目的是在提取较大的目标前去除太小的细节或将目标内的小间断连接起来;另一类是消除噪声。图像锐化可用高通滤波器来实现,锐化的目的是为了增强被模糊的细节。结合这两种分类方法,可将空间滤波增强分为四类:线性平滑滤波器(低通),非线性平滑滤波器(低通),线性锐化滤波器(高通),非线性锐化滤波器(高通)。
空间滤波器都是基于模板卷积,其主要工作步骤是:
1)将模板在图像中移动,并将模板中心与图像中某个像素位置重合;
2)将模板上的系数与模板下对应的像素相乘;
3)将所有乘积相加;
4)将和(模板的输出响应)赋给图像中对应模板中心位置的像素。
2.平滑滤波
1)线性平滑滤波器
线性低通平滑滤波器的所有系数都是正数,对的模板来说,最简均值滤波器的是取所有系数为1,为了保持输出图像仍然在原图像的灰度值范围内,模板与像素邻域的乘积都要除以9。
MATLAB 提供了fspecial函数生成滤波时所用的模板,并提供filter2函数用指定的滤波器模板对图像进行运算。MATLAB 提供了一个函数imnoise来给图像增添噪声,请同学们通过MATLAB的help命令自行查阅fspecial、filter2及imnoise的用法。
2)非线性平滑滤波器
中值滤波器是一种常用的非线性平滑滤波器,其滤波原理与均值滤波器方法类似,但不是计算加权求和,而是把邻域中的图像的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。
MATLAB提供了medfilt2函数来实现中值滤波。
3.锐化滤波器
图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,需要利用图像锐化技术,使图像的边缘变得清晰。
1)线性锐化滤波器
线性高通滤波器是最常用的线性锐化滤波器。这种滤波器的中心系数都是正的,而周围的系数都是负的,所有的系数之和为0。
2)非线性锐化滤波
邻域平均可以模糊图像,因为平均对应积分,所以利用微分可以锐化图像。图像处理中最常用的微分方法是利用梯度。常用的空域非线性锐化滤波微分算子有sobel算子、prewitt算子、log算子等。
三、实验内容与要求
1.平滑空域滤波
1)读出一幅灰度图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。
2)对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示。
3)使用函数imfilter时,分别采用不同的填充方法(或边界选项,如零填充、’replicate’、’symmetric’、’circular’)进行低通滤波,显示处理后的图像。
4)运用for循环,将加有椒盐噪声的图像进行10次、20次均值滤波,查看其特点,显示均值处理后的图像(提示:利用fspecial函数的’average’类型生成均值滤波器)。
5)对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。
6)自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。
2.锐化空域滤波
1)读出一幅灰度图像,采用的拉普拉斯算子对其进行滤波。
2)编写函数w = genlaplacian(n),自动产生任一奇数尺寸的拉普拉斯算子,如5*5的拉普拉斯算子
3)分别采用55、99、1515和2525大小的拉普拉斯算子对图像进行锐化滤波,并利用式.完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。
4)采用不同的梯度算子对图像进行锐化滤波,并比较其效果。
5)自己设计锐化空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。
四、实验的具体实现
%1.1读出一幅灰度图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。
gray = imread('Fig1022(a).tif');
subplot(1,3,1);
imshow(gray);
title('原灰度图像');
saltGray = imnoise(gray,'salt & pepper');%不写参数的话,就是默认参数
subplot(1,3,2);
imshow(saltGray);
title('椒盐噪声处理');
gaussianGray = imnoise(gray,'gaussian');
subplot(1,3,3);
imshow(gaussianGray);
title('高斯噪声处理');
%1.2对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示。
figure(2);
subplot(2,3,1);
imshow(saltGray);
title('椒盐噪声图像');
h = fspecial('average',3);
j1 = filter2(h,saltGray)/255;
subplot(2,3,2);
imshow(j1);
title('3*3均值滤波图');
j2 = medfilt2(saltGray,[3,3]);
subplot(2,3,3);
imshow(j2);
title('3*3中值滤波图');
subplot(2,3,4);
imshow(gaussianGray);
title('高斯噪声图像');
g1 = filter2(h,gaussianGray)/255;
subplot(2,3,5);
imshow(g1);
title('3*3均值滤波图');
g2 = medfilt2(gaussianGray,[3,3]);
subplot(2,3,6);
imshow(g2);
title('3*3中值滤波图');
%1.3使用函数imfilter时,分别采用不同的填充方法(或边界选项,如零填充、’replicate’、’symmetric’、’circular’)进行低通滤波,显示处理后的图像。
figure(3);
subplot(2,3,1)
imshow(gray)
title('原始灰度图像');
h =fspecial('motion',50,45);
Img = imfilter(gray,h);
subplot(2,3,2)
imshow(Img)
title('motion Blurred Image');
rep = imfilter(gray,h,'replicate');
subplot(2,3,3);
imshow(rep);
title('replcate');
B0 =imfilter(gray,h,0);
subplot(2,3,4);
imshow(B0);
title('0-Padding');
sym = imfilter(gray,h,'symmetric');
subplot(2,3,5);
imshow(sym);
title('symmetric');
cir = imfilter(gray,h,'circular');
subplot(2,3,6);
imshow(cir);
title('circular');
%1.4运用for循环,将加有椒盐噪声的图像进行10次、20次均值滤波,查看其特点,显示均值处理后的图像(提示:利用fspecial函数的’average’类型生成均值滤波器)。
figure(4);
subplot(1,3,1);
imshow(saltGray);
title('椒盐噪声图');
h = fspecial('average');
j3 = imfilter(saltGray,h);
for i=1:9
j3 = imfilter(j3,h);
end
subplot(1,3,2);
imshow(j3);
title('10次均值滤波');
j4 =imfilter(saltGray,h);
for i=1:19
j4 = imfilter(j4,h);
end
subplot(1,3,3);
imshow(j4);
title('20次均值滤波');
%1.5对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。
figure(5);
subplot(1,3,1);
imshow(saltGray);
title('椒盐图像');
subplot(1,3,2);
aver =fspecial('average');
pic =imfilter(saltGray,aver);
imshow(pic);
title('椒盐后均值图像');
subplot(1,3,3);
med=medfilt2(saltGray);
imshow(med);
title('椒盐后中值图像');
%1.6自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。
figure(6);
F=imread('lenna_RGB.tif');
F=rgb2gray(F);
JJ=imnoise(F,'salt & pepper',0.05);
[m,n]=size(JJ);
subplot(1,2,1),imshow(JJ),title('椒盐噪声图');
s=zeros(1,9);
II=JJ;
for i=2:1:m-1
for j=2:1:n-1
h=1;
for p=i-1:1:i+1
for q=j-1:1:j+1
s(h)=JJ(p,q);
h=h+1;
end
end
s=sort(s);
II(i,j)=s(5);
end
end
subplot(1,2,2),imshow(II),title('滤波后的图');
%2.1读出一幅灰度图像,采用的拉普拉斯算子对其进行滤波。
figure(7);
gray = imread('Fig1022(a).tif');
gray_double=im2double(gray) %将图像转换为双精度值
w=[1,1,1;
1,-8,1;
1,1,1]
k=conv2(gray_double,w,"same");
subplot(1,2,1);
imshow(gray);
title('灰度图像');
subplot(1,2,2);
imshow(k);
title('滤波处理后的图像');
%2.2编写函数w = genlaplacian(n),自动产生任一奇数尺寸的拉普拉斯算子,如的拉普拉斯算子
num=input('请输入数值:');
W=genlaplacian(num);
display(W);
%2.3分别采用、、和大小的拉普拉斯算子对图像进行锐化滤波,并利用式.完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。
figure(8);
w1=genlaplacian(5);
I1=gray-imfilter(gray,w1,'replicate');
w2=genlaplacian(9);
I2=gray-imfilter(gray,w2,'replicate');
w3=genlaplacian(15);
I3=gray-imfilter(gray,w3,'replicate');
w4=genlaplacian(25);
I4=gray-imfilter(gray,w4,'replicate');
subplot(2,2,1),imshow(I1),title('5*5 lapulasi');
subplot(2,2,2),imshow(I2),title('9*9 lapulasi');
subplot(2,2,3),imshow(I3),title('15*15 lapulasi');
subplot(2,2,4),imshow(I4),title('25*25 lapulasi');
%2.4采用不同的梯度算子对图像进行锐化滤波,并比较其效果。
I=imread('Fig1022(a).tif');
h=fspecial('sobel');
P1=imfilter(I,h);
h=fspecial('prewitt');
P2=imfilter(I,h);
figure(9);
subplot(1,3,1),imshow(I),title('Original Image');
subplot(1,3,2),imshow(P1),title('sobel算子');
subplot(1,3,3),imshow(P2),title('prewitt算子');
%2.5自己设计锐化空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。
F=imread('lenna_RGB.tif');
F=rgb2gray(F);
h=fspecial('sobel');
h1=h'*0.5;
h2=h';
h3=h'*1.5;
F1=imfilter(F,h1);
F2=imfilter(F,h2);
F3=imfilter(F,h3);
figure(11)
subplot(2,2,1),imshow(F),title('原始灰度图像');
subplot(2,2,2),imshow(F1),title('Vertical filter1');
subplot(2,2,3),imshow(F2),title('Vertical filter2');
subplot(2,2,4),imshow(F3),title('Vertical filter3');
function w =genlaplacian(n)
w=ones(n);
x=fix(n/2)+1;
w(x,x)=-(n*n-1);
end