内容发布更新时间 : 2024/11/15 16:32:43星期一 下面是文章的全部内容请认真阅读。
计算机与信息工程学院验证性实验报告
专业:通信工程 年级/班级: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')