实验一:数字图像的频域滤波器设计
一、实验目的
掌握 matlab 程序设计语言,掌握 matlab 基本数据类型、核心函数及辅助函数的使用。掌握
理想和高斯低通滤波器的设计方法。
二、实验内容
利用理想和高斯低通滤波器实现图像的频域滤波;
利用理想和高斯高通滤波器实现图像的频域滤波;
三、实验原理
二维理想低通滤波器的传递函数为:
( , )
H u v
1.
( , )
D u v D
0
0.
( , )
D u v D
0
D0 是指定非负数值,D(u,v)是(u,v)点距频率中心的距离。如果要研究的图像尺寸为 M X N,则
它的变换也有相同的尺寸。在半径为 D0 的圆内,所有频率无衰减地通过滤波器,而在此半径之外的所有频
率完全被衰减掉。
高斯高通滤波器传递函数为:
( , )
H u v
e
2
D u v
( , )/2
2
D
0
D(u,v)是距傅立叶变换中心原点的距离。D0 是截止频率。高斯低通滤波器的傅立叶变
换也是高斯的。
二维理想高通滤波器的传递函数为:
( , )
H u v
0.
( , )
D u v D
0
1.
( , )
D u v D
0
D0 是从频率矩形中点测得的截止频率长度,它将以 D0 为半径的圆周内的所有频率置零,
而毫不衰减地通过圆周外的任何频率。但其物理上是不可实现的。
高斯高通滤波器传递函数为:
H u v
( , ) 1
e
2
D u v
( , )/2
2
D
0
高通滤波器能够用高斯型低通滤波器的差构成。这些不同的滤波器有更多的参数,因此能
够对滤波器的形状进行更多的控制。
四.实验设备和仪器
1.计算机
2. matlab 开发平台
五.关键代码及注释
1. 理想低通滤波器
RGB = imread('saturn.png');
I0 = rgb2gray(RGB);
subplot(2,3,1),imshow(I0);title('原图');
I1 = imnoise(I0,'gaussian');
%对原图像加噪声
subplot(2,3,2),imshow(I1);title('加入噪声后')
%将灰度图像的二维不连续 Fourier 变换的零频率成分移到频谱的中心
s=fftshift(fft2(I1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');
[M,N]=size(s);
n1=floor(M/2);
n2=floor(N/2);
%ILPF 滤波(程序中以 d0=15 为例)
d0=50;
for i=1:M
for j=1:N
%分别返回 s 的行数到 M 中,列数到 N 中
%对 M/2 进行取整
%对 N/2 进行取整
%初始化 d0
d=sqrt((i-n1)^2+(j-n2)^2);
%点(i,j)到傅立叶变换中心的距离
%点(i,j)在通带内的情况
%通带变换函数
%点(i,j)在阻带内的情况
h(i,j)=0;
%阻带变换函数
if d<=d0
h(i,j)=1;
else
end
s(i,j)=h(i,j)*s(i,j);
%ILPF 滤波后的频域表示
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('ILPF 滤波(d0=50)');
%显示 ILPF 滤波后的图像
2. 高斯低通滤波器
RGB = imread('saturn.png');
I0 = rgb2gray(RGB);
subplot(2,3,1),imshow(I0);title('原图');
I1 = imnoise(I0,'gaussian');
%对原图像加噪声
subplot(2,3,2),imshow(I1);title('加入噪声后')
%将灰度图像的二维不连续 Fourier 变换的零频率成分移到频谱的中心
s=fftshift(fft2(I1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');
[M,N]=size(s);
%GLPF 滤波
d0=50;
n1=floor(M/2);
n2=floor(N/2);
for i=1:M
for j=1:N
%分别返回 s 的行数到 M 中,列数到 N 中
%初始化 d0
%对 M/2 进行取整
%对 N/2 进行取整
d=sqrt((i-n1)^2+(j-n2)^2);
%点(i,j)到傅立叶变换中心的距离
h(i,j)=1*exp(-1/2*(d^2/d0^2)); %GLPF 滤波函数
s(i,j)=h(i,j)*s(i,j);
%GLPF 滤波后的频域表示
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('GLPF 滤波(d0=50)');
%显示 GLPF 滤波处理后的图像
3. 理想高通滤波器
RGB = imread('saturn.png');
I0 = rgb2gray(RGB);
subplot(2,3,1),imshow(I0);title('原图');
I1 = imnoise(I0,'gaussian');
%对原图像加噪声
subplot(2,3,2),imshow(I1);title('加入噪声后')
%将灰度图像的二维不连续 Fourier 变换的零频率成分移到频谱的中心
s=fftshift(fft2(I1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');
[M,N]=size(s);
n1=floor(M/2);
n2=floor(N/2);
%IHPF 滤波
d0=15;
for i=1:M
for j=1:N
%分别返回 s 的行数到 M 中,列数到 N 中
%对 M/2 进行取整
%对 N/2 进行取整
%初始化 d0
d=sqrt((i-n1)^2+(j-n2)^2);
%点(i,j)到傅立叶变换中心的距离
if d<=d0
%点(i,j)在通带内的情况
h(i,j)=0;
%通带变换函数
h(i,j)=1;
%阻带变换函数
%点(i,j)在阻带内的情况
else
end
s(i,j)=h(i,j)*s(i,j);
%ILPF 滤波后的频域表示
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('IHPF 滤波(d0=15)');
%显示 IHPF 滤波后的图像
4.高斯高通滤波器
RGB = imread('saturn.png');
I0 = rgb2gray(RGB);
subplot(2,3,1),imshow(I0);title('原图');
I1 = imnoise(I0,'gaussian');
%对原图像加噪声
subplot(2,3,2),imshow(I1);title('加入噪声后')
%将灰度图像的二维不连续 Fourier 变换的零频率成分移到频谱的中心
s=fftshift(fft2(I1));
subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift');
[M,N]=size(s);
%GHPF 滤波
d0=15;
n1=floor(M/2);
n2=floor(N/2);
for i=1:M
for j=1:N
%分别返回 s 的行数到 M 中,列数到 N 中
%初始化 d0
%对 M/2 进行取整
%对 N/2 进行取整
d=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 滤波处理后的图像
六.实验结果
图一 理想低通滤波器
图二 高斯低通滤波器
图三 理想高通滤波器
图四 高斯高通滤波器