一.实验目的
1. 掌握图像滤波的基本定义及目的。
2. 理解空间域滤波的基本原理及方法。
3. 掌握进行图像的空域滤波的方法。
4. 掌握傅立叶变换及逆变换的基本原理方法。
5. 理解频域滤波的基本原理及方法。
6. 掌握进行图像的频域滤波的方法。
二.实验基本原理
1.空间域增强
空间域滤波是在图像空间中借助模板对图像进行领域操作,处理图像每一个像素的取值都是根据模板对输入像素相应领域内的像素值进行计算得到的。空域滤波基本上是让图像在频域空间内某个范围的分量受到抑制,同时保证其他分量不变,从而改变输出图像的频率分布,达到增强图像的目的。
空域滤波一般分为线性滤波和非线性滤波两类。线性滤波器的设计常基于对傅立叶变换的分析,非线性空域滤波器则一般直接对领域进行操作。
各种空域滤波器根据功能主要分为平滑滤波器和锐化滤波器。平滑可用低通来实现,平滑的目的可分为两类:一类是模糊,目的是在提取较大的目标前去除太小的细节或将目标内的小肩端连接起来;另一类是消除噪声。锐化可用高通滤波来实现,锐化的目的是为了增强被模糊的细节。
空间滤波器都是基于模板卷积,其主要工作步骤是:
1) 将模板在图中移动,并将模板中心与图中某个像素位置重合;
2) 将模板上的系数与模板下对应的像素相乘;
3) 将所有乘积相加;
4) 将和(模板的输出响应)赋给图中对应模板中心位置的像素。
2. 频率域滤波
在傅里叶图像中,高频位于图像的四角,低频位于图像中心,图像的边缘和细节主要在高频部分显示,对应到四角,而图像的背景和基调对应为图像的低频部分,在图像的中心。 频率域滤波的基本步骤:
① F=fft2(f) F:傅里叶图像
② Fc=fftshift(F) Fc:中心化后的傅里叶图像
③Gc=H(u,v)*Fc G:频域的输出图像
④G=ifftshift(Gc) g:空间域的输出图像
⑤ g=ifft2(G) H:频域滤波器
⑥ g=real(g) real:输出图像的实部
ilpf(理想低通滤波器):由于高频成分包含大象的图像边缘信息,因此ilpf在去噪的同事会导致边缘信息的损失,同时造成图像边缘模糊。 BLPF(巴特沃斯低通滤器)连续性衰减没有ILPF那样陡峭不连续,因此图像边缘模糊大大减少,但大大增加了计算量。 GLPF(高斯低通滤波器):图像边缘模糊成都较ILPF小,而比BLPF大。
三.实验内容
1. 获得图像的傅里叶图
2. 平滑
采用低通平滑滤波器(理想、buttworth、Gaussian)完成图像的平滑功能,用mesh函数绘制滤波器,分析比较三种滤波器的平滑效果
3. 锐化
采用高通平滑滤波器(理想、buttworth、Gaussian)完成图像的平滑功能,并用mesh函数绘制滤波器,分析比较三种滤波器的锐化效果
四.实验源代码及结果
平滑:
1.理想低通平滑滤波器
ff=imread(' C:\Users\cs\Desktop\图片\黑白.jpg')
f=rgb2gray(ff); %将rgb图像转换成灰度图像,赋值给f
subplot(2,2,1),
imshow(f),title('原图');
F=fft2(f); %对图像进行傅里叶变换
subplot(2,2,2),
imshow(F),title('傅里叶图');
Fc=fftshift(F);
[M N]=size(Fc); %分别返回Fc的行数到M中,列数到N中
m=floor(M/2); %对M/2进行取整
n=floor(N/2); %对N/2进行取整
D0=55; %初始化D0
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2); %点(i,j)到傅里叶变换中心的距离
if d<=D0; %点(i,j)在通带内的情况
H(i,j)=1; %通带变换函数
else
H(i,j)=0; %阻带变换函数
end
end
end
Gc=H.*Fc; %理想低通滤波器滤波后的频域表示
G=ifftshift(Gc); %去中心化
g=uint8(real(ifft2(G))); %显示图像的实部
%g=ifft2(G); %反傅里叶变换
%g=uint8(real(g)); %显示图像的实部
subplot(2,2,3),
mesh(H(1:10:400,1:10:400)),title('滤波器');%绘制滤波器
subplot(2,2,4),
imshow(g),title('理想平滑图');
结果如下:
理想低通滤波器透视图
2.巴特沃斯平滑滤波器
ff=imread(' C:\Users\cs\Desktop\图片\黑白.jpg')
f=rgb2gray(ff);%将rgb图像转换成灰度图像,赋值给f
subplot(2,2,1),imshow(f),title('原图');
F=fft2(f);%对图像进行傅里叶变换
subplot(2,2,2),imshow(F),title('傅里叶图');
Fc=fftshift(F);%中心化
[M N]=size(Fc);%分别返回Fc的行数到M中,列数到N中
m=floor(M/2);%对M/2进行取整
n=floor(N/2);%对N/2进行取整
D0=60;%初始化D0
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);%点(i,j)到傅里叶变换中心的距离
H(i,j)=1/(1+(d/D0)^4);
end
end
Gc=H.*Fc;
G=ifftshift(Gc);%去中心化
g=ifft2(G);%反傅里叶变换
g=uint8(real(g));%显示图像的实部
subplot(2,2,3),mesh(H(1:10:400,1:10:400)),title('滤波器'); %绘制滤波器
subplot(2,2,4),imshow(g),title('巴特沃斯平滑图');
结果如下:
3.高斯低通滤波器
ff=imread(' C:\Users\cs\Desktop\图片\黑白.jpg')
f=rgb2gray(ff);%将rgb图像转换成灰度图像,赋值给f
subplot(2,2,1),imshow(f),title('原图');
F=fft2(f);%对图像进行傅里叶变换
subplot(2,2,2),imshow(F),title('傅里叶图');
Fc=fftshift(F);%中心化
[M N]=size(Fc);%分别返回Fc的行数到M中,列数到N中
m=floor(M/2);%对M/2进行取整
n=floor(N/2);%对N/2进行取整
D0=80;%初始化D0
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
H(i,j)=exp((-1/2)*(d^2/D0^2));
end
end
Gc=H.*Fc;
G=ifftshift(Gc);%去中心化
g=ifft2(G);
g=uint8(real(g));
subplot(2,2,3),mesh(H(1:10:400,1:10:400)),title('滤波器');
subplot(2,2,4),imshow(g),title('高斯平滑图');
结果如下:
高斯低通滤波器透视图
锐化
1.理想高通滤波器
ff=imread(' C:\Users\cs\Desktop\图片\黑白.jpg')
f=rgb2gray(ff);
subplot(2,2,1),
imshow(f),title('原图');
F=fft2(f); %傅里叶变换
subplot(2,2,2),
imshow(F),title('傅里叶图');
Fc=fftshift(F); %中心化
[M N]=size(Fc);
m=floor(M/2);
n=floor(N/2);
D0=50; %给D0赋初值
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
if d<=D0;
H(i,j)=0;
else
H(i,j)=1;
end
end
end
Gc=H.*Fc;
G=ifftshift(Gc); %去中心化
g=ifft2(G); %反傅里叶变换
g=uint8(real(g)); %显示图像实部
subplot(2,2,3),
mesh(H(1:10:400,1:10:400)),title('滤波器'); %设置滤波器
subplot(2,2,4),imshow(g),title('理想锐化图');
结果如下:
理想高通滤波器透视图
2.巴特沃斯高通滤波器
ff=imread(' C:\Users\cs\Desktop\图片\黑白.jpg')
f=rgb2gray(ff);
subplot(2,2,1),
imshow(f),title('原图');
F=fft2(f); %傅里叶变换
subplot(2,2,2),
imshow(F),title('傅里叶图');
Fc=fftshift(F); %中心化
[M N]=size(Fc);
m=floor(M/2);
n=floor(N/2);
D0=50;
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
H(i,j)=(1-(1/(1+(d/D0)^4)));
end
end
Gc=H.*Fc;
G=ifftshift(Gc);
g=ifft2(G);
g=uint8(real(g));
subplot(2,2,3),mesh(H(1:10:400,1:10:400)),title('滤波器');
subplot(2,2,4),imshow(g),title('巴特罗斯锐化图');
结果如下:
巴特沃斯高通滤波器透视图
3.高斯高通滤波器
ff=imread(' C:\Users\cs\Desktop\图片\黑白.jpg')
f=rgb2gray(ff);
subplot(2,2,1),imshow(f),title('原图');
F=fft2(f);
subplot(2,2,2),imshow(F),title('傅里叶图');
Fc=fftshift(F); %中心化
[M N]=size(Fc);
m=floor(M/2);
n=floor(N/2);
D0=80;
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
H(i,j)=1-exp((-1/2)*(d^2/D0^2));
end
end
Gc=H.*Fc;
G=ifftshift(Gc);
g=ifft2(G);
g=uint8(real(g));
subplot(2,2,3),mesh(H(1:10:400,1:10:400)),title('滤波器');
subplot(2,2,4),imshow(g),title('高斯锐化图');
结果如下:
五.实验总结(心得体会)
通过这次实验我明白了低通滤波是要保留图像中的低频分量而去除高频分量。因为图像中的边缘和噪声都对应图像傅里叶变换的高频部分,所以在频域中的低通滤波可以去除或消除噪声的影响,与空域中的平滑方法类似。因为图像的边缘对应着高频分量,所以,高通滤波可以锐化图像;低通滤波和高通滤波都是减少图像的低频或高频分量,而带通滤波是只允许器一定频率范围的信号通过而阻止其它频率范围的信号通过,主要要于删除特定的频率,在增强中一般很少用。