图像处理频域滤波"/>
数字图像处理频域滤波
第一部分:三种低通滤波器
实验一:理想低通滤波
1.1实验原理
高通滤波是常见的频域增强的方法之一,因为图像的边缘对应于高频分量,所以
要锐化图像可以使用高通滤波器。
二维理想高通滤波器的传递函数为:
1.2实验程序
%理想高通滤波器
clc;
clear all;
close all;
RGB=imread('方块.jpg'); %读取图片
I_0=rgb2gray(RGB); %确保图片转换为灰度图
subplot(2,3,1),imshow(I_0);title('原图');%显示原图片
I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声
subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片
s=fftshift(fft2(I_1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心
[M N]=size(s); % 将图片的大小复制给[M N]
d0=15; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离if d<=d0 %点(i,j)在通带内的情况h(i,j)=0; %通带变换函数else %点(i,j)在阻带内的情况h(i,j)=1; %阻带变换函数end s(i,j)=h(i,j)*s(i,j); %理想低通滤波后的频域表示end
end
s=ifftshift(s); %对s进行反FFT移动
%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
subplot(2,3,4),imshow(h);title('传递函数'); %显示理想低通滤波器的传递函数
subplot(2,3,5),imshow(s);title('理想高通滤波(d0=15)'); %显示理想低通滤波处理后的图像
1.3实验结果
实验二:巴特列低通滤波器
2.1实验原理
巴特沃斯低通滤波器
2.2实验程序
clc;
clear all;
I=imread('斑马.jpg');
imshow(I);
J1=imnoise(I,'salt & pepper'); % 叠加椒盐噪声
figure,imshow(J1);
f=double(J1); % 数据类型转换,MATLAB不支持图像的无符号整型的计算
g=fft2(f); % 傅立叶变换
g=fftshift(g); % 转换数据矩阵
[M,N]=size(g);
nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器
d0=50;
m=fix(M/2); n=fix(N/2);取整函数
for i=1:Mfor j=1:Nd=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数result(i,j)=h*g(i,j);end
end
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
figure,imshow(J3); % 显示滤波处理后的图像
2.3.处理结果
实验三:gaussian低通滤波器GLHF
3.1实验原理
高斯低通滤波器
3.2实验程序
%gaussian低通滤波GLHF
clc;
clear all;
close all;
RGB=imread('方块.jpg'); %读取图片
I_0=rgb2gray(RGB); %确保图片转换为灰度图
subplot(2,3,1),imshow(I_0);title('原图');%显示原图片
I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声
subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片
s=fftshift(fft2(I_1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心
[M N]=size(s); % 将图片的大小复制给[M N]
d0=50; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);%计算点(i,j)距离频谱图中心距离h=1*exp(-1/2*(d^2/d0^2));%计算高斯滤波函数H(i,j)=h ; %记录传递函数picture(i,j)=h*s(i,j); %用高斯滤波器处理频谱图end
end
picture=ifftshift(picture);
J2=ifft2(picture);
J3=uint8(real(J2));
subplot(234),imshow(H);title('传递函数'); %显示GHPF滤波器的传递函数
subplot(2,3,5),imshow(J3);title('处理后的图像'); %显示处理后的图像
3.3实验结果
第二部分:高通滤波器
实验四:理想高通滤波
4.1实验原理
理想高通滤波器
这里的D0是滤波器的阻带半径,而D(u,v)是点到滤波器中央的距离。
4.2实验程序
%理想高通滤波器
clc;
clear all;
close all;
RGB=imread('方块.jpg'); %读取图片
I_0=rgb2gray(RGB); %确保图片转换为灰度图
subplot(2,3,1),imshow(I_0);title('原图'); %显示原图片
I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声
subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片
s=fftshift(fft2(I_1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心
[M N]=size(s); % 将图片的大小复制给[M N]
d0=15; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离if d<=d0 %点(i,j)在通带内的情况h(i,j)=0; %通带变换函数else %点(i,j)在阻带内的情况h(i,j)=1; %阻带变换函数end s(i,j)=h(i,j)*s(i,j); %理想高通滤波后的频域表示end
end
s=ifftshift(s); %对s进行反FFT移动
%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
subplot(2,3,4),imshow(h);title('传递函数'); %显示理想高通滤波器的传递函数
subplot(2,3,5),imshow(s);title('理想高通滤波(d0=15)'); %显示理想高通滤波处理后的图像
4.3实验结果
实验五:高斯高通滤波
5.1实验原理
高斯高通滤波器
5.2实验程序
%高斯高通滤波
clc;
clear all;
close all;
RGB=imread('方块.jpg'); %读取图片
I_0=rgb2gray(RGB); %确保图片转换为灰度图
subplot(2,3,1),imshow(I_0);title('原图');%显示原图片
I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声
subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片
s=fftshift(fft2(I_1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心
[M N]=size(s); % 将图片的大小复制给[M N]
d0=15; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M for j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离h(i,j)=1-1*exp(-1/2*(d^2/d0^2)); %GHPF滤波函数s(i,j)=h(i,j)*s(i,j); %GHPF滤波后的频域表示end
end
s=ifftshift(s); %对s进行反FFT移动
%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
subplot(2,3,4),imshow(h);title('传递函数'); %显示GHPF滤波器的传递函数
subplot(2,3,5),imshow(s);title('GHPF滤波(d0=15)'); %显示GHPF滤波处理后的图像
5.3实验结果
实验六:巴特沃斯高通滤波
6.1实验原理
巴特沃斯高通滤波器
6.2实验程序
%Butterworth高通滤波
clc;
clear all;
close all;
RGB=imread('方块.jpg'); %读取图片
I_0=rgb2gray(RGB); %确保图片转换为灰度图
subplot(2,3,1),imshow(I_0);title('原图');%显示原图片
I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声
subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片
s=fftshift(fft2(I_1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心
[M N]=size(s); % 将图片的大小复制给[M N]
d0=15; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
nn=2;
for i=1:M for j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离h=1/(1+(d0/d)^(2*nn)); %计算butterworth传递函数H(i,j)=h ; %记录传递函数picture(i,j)=h*s(i,j); %用高斯滤波器处理频谱图end
end
picture=ifftshift(picture);
J2=ifft2(picture);
J3=uint8(real(J2));
subplot(234),imshow(H);title('传递函数'); %显示GHPF滤波器的传递函数
subplot(2,3,5),imshow(J3);title('BHHF处理后的图'); % 显示滤波处理后的图像
6.3实验结果
实验小结:
本次实验我总共做了六个实验,分别是三个低通滤波器和三个高通滤波器,通过实验我发现,低通滤波器能够有效保留图片细节,能够有效去除图片的噪声,而高通滤波器能够提取图片的边缘轮廓信息,可以使图片锐化。
另外我发现使用不同的程序处理图片,计算机的计算量也是不同的,比如巴特沃斯滤波器,阶数n取得值越大,则滤波特器特征函数越接近理想滤波器,但随着阶数n的增加,计算机的计算量也在不停的增加,所以我们在设计程序的时候不光要考虑滤波效果还要考虑计算量的大小。
通过本次实验我掌握了几种滤波器的原理和算法 ,也大大熟悉了matlab编程工作,通过本次实验我使用matlab的技能得到极大提升,这也是是收益匪浅的。
更多推荐
数字图像处理频域滤波
发布评论