7.图像增强—频域滤波 - 数字图像处理实验报告汇总

计算机与信息工程学院验证性实验报告

专业:通信工程 年级/班级:2011级 2013—2014学年第一学期 课程名称 数字图像处理 指导教师 段新涛 本组成员 学号姓名 实验地点 计科楼111 实验时间 周五5-6节 项目名称 图像增强—频域滤波 实验类型 验证性 一、实验目的

1.掌握怎样利用傅立叶变换进行频域滤波 2.掌握频域滤波的概念及方法 3.熟练掌握频域空间的各类滤波器 4.利用MATLAB程序进行频域滤波

二、实验原理及知识点

频域滤波分为低通滤波和高通滤波两类,对应的滤波器分别为低通滤波器和高通滤波器。频域低通过滤的基本思想:

G(u,v)=F(u,v)H(u,v)

F(u,v)是需要钝化图像的傅立叶变换形式,H(u,v)是选取的一个低通过滤器变换函数,G(u,v)是通过H(u,v)减少F(u,v)的高频部分来得到的结果,运用傅立叶逆变换得到钝化后的图像。

理想地通滤波器(ILPF)具有传递函数:

?1ifD(u,v)?D0 H(u,v)??0ifD(u,v)?D0?其中,D0为指定的非负数,D(u,v)为(u,v)到滤波器的中心的距离。D(u,v)?D0的点的轨迹为一个圆。

n阶巴特沃兹低通滤波器(BLPF)(在距离原点D0处出现截至频率)的传递函数为

H(u,v)?11?[D(u,v)D0]2n

与理想地通滤波器不同的是,巴特沃兹率通滤波器的传递函数并不是在D0处突然不连续。

高斯低通滤波器(GLPF)的传递函数为

H(u,v)?eD2(u,v)2?2

其中,?为标准差。

相应的高通滤波器也包括:理想高通滤波器、n阶巴特沃兹高通滤波器、高斯高通滤波器。给定一个低通滤波器的传递函数Hlp(u,v),通过使用如下的简单关系,

可以获得相应高通滤波器的传递函数:

Hhp?1?Hlp(u,v)

利用MATLAB实现频域滤波的程序

f=imread('room.tif');

F=fft2(f); %对图像进行傅立叶变换

%对变换后图像进行队数变化,并对其坐标平移,使其中心化 S=fftshift(log(1+abs(F)));

S=gscale(S); %将频谱图像标度在0-256的范围内 imshow(S) %显示频谱图像

h=fspecial('sobel'); %产生空间‘sobel’模版 freqz2(h) %查看相应频域滤波器的图像 PQ=paddedsize(size(f)); %产生滤波时所需大小的矩阵 H=freqz2(h,PQ(1),PQ(2)); %产生频域中的‘sobel’滤波器

H1=ifftshift(H); %重排数据序列,使得原点位于频率矩阵的左上角 imshow(abs(H),[]) %以图形形式显示滤波器 figure,imshow(abs(H1),[])

gs=imfilter(double(f),h); %用模版h进行空域滤波

gf=dftfilt(f,H1); %用滤波器对图像进行频域滤波 figure,imshow(gs,[]) figure,imshow(gf,[])

figure,imshow(abs(gs),[]) figure,imshow(abs(gf),[])

f=imread('number.tif'); %读取图片

PQ=paddedsize(size(f)); %产生滤波时所需大小的矩阵 D0=0.05*PQ(1); %设定高斯高通滤波器的阈值

H=hpfilter('gaussian',PQ(1),PQ(2),D0); %产生高斯高通滤波器 g=dftfilt(f,H); %对图像进行滤波 figure,imshow(f) %显示原图像

figure,imshow(g,[]) %显示滤波后图像

三、实验步骤:

1.调入并显示所需的图片;

2.利用MATLAB提供的低通滤波器实现图像信号的滤波运算,并与空间滤波进行比较。

3.利用MATLAB提供的高通滤波器对图像进行处理。 4.记录和整理实验报告。

四、实验仪器

1.计算机;

2.MATLAB程序;

3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。

五、实验报告内容

1.叙述实验过程;

2.提交实验的原始图像和结果图像。

六、实验报告要求

描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,必须包括原始图像及其计算/处理后的图像。

七、实验图片

Fig0409(a)(bld).tif Fig0707(a)(Original).tif.tif

八、实验程序及结果

先编一部分所需要的子程序如下:

function g = gscale(f, varargin)

if length(varargin) == 0 % If only one argument it must be f. method = 'full8'; else

method = varargin{1}; end

if strcmp(class(f), 'double') & (max(f(:)) > 1 | min(f(:)) < 0) f = mat2gray(f); end

% Perform the specified scaling. switch method case 'full8'

g = im2uint8(mat2gray(double(f))); case 'full16'

g = im2uint16(mat2gray(double(f))); case 'minmax'

low = varargin{2}; high = varargin{3}; if low > 1 | low < 0 | high > 1 | high < 0

error('Parameters low and high must be in the range [0, 1].')

end

if strcmp(class(f), 'double')

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4