数字图像处理实验4 图象处理中的正交变换

更新时间:2024-03-18 19:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验4 图象处理中的正交变换

——频域处理

一.实验目的:

1.掌握二维快速傅里叶变换(FFT)的实现,对频谱图像可视化操作。

2.了解频域滤波的内容,学会如何在频域中直接生成滤波器,包括平滑频域滤波器——低通滤波器、锐化频域滤波器——高通滤波器,并利用生成的滤波器对输入图像进行频域处理。

3.掌握绘制三维可视化滤波器图形的方法。

二.实验内容:

1.实现二维快速傅里叶变换,以图像形式显示傅里叶频谱。

2.利用已给出的自定义的M函数,建立频域滤波器的传递函数H(u, v) 3.绘制滤波器传递函数H(u, v)三维图形,并以图像形式显示滤波器。 4.对输入图像进行频域滤波处理。

三.实验原理:

1.快速傅里叶变换FFT的实现

一个大小为M×N的图像矩阵f的快速傅里叶变换FFT可以通过MATLAB函数fft2获得,其简单语法:

F = fft2(f)

该函数返回一个大小仍为M×N的傅里叶变换,数据排列如图4.2(a)所示;即数据的原点在左上角,而四个四分之一周期交汇于频率矩形的中心。

傅里叶频谱可以使用函数abs来获得,语法为: S = abs(F)

该函数计算数组的每一个元素的幅度,也就是实部和虚部平方和的平方根,即若某个元素为F = a +bj,则S?a2?b2。

通过显示频谱的图像进行可视化分析是频域处理的一个重要方面。例如,对图4.3(a)所示的图像f (image.bmp)我们计算它的傅里叶变换并显示其频谱: >> F = fft(f) >> S = abs(F) >> imshow(S, [ ])

图4.3(b)显示了结果,图像四个角上的亮点就是四个四分之一周期的中心点。

函数fftshift将变换的原点移动到频率矩形的中心,语法为: Fc = fftshift(F)

F是用fft2得到的傅里叶变换,即图4.2(a),而Fc是已居中的变换,即图4.2(b)。键入命令: >> Fc = fftshift(F) >> Sc = abs(Fc)

>>figure, imshow(Sc, [ ])

将产生图4.3(c)所示的图像,居中后的结果在该图像中是很明显的。

虽然该移动像我们期望的那样完成了,但该频谱中Sc值的动态范围很大(0到204000)与8比特显示相比要大的多,使用对数变换来处理,命令: >> ScL = log(1 + Sc)

>> figure, imshow(ScL, [ ])

产生如图4.3(d)所示的结果。

2.在频率域中直接生成滤波器 低通滤波器传递函数Hlp(u, v):

?1, D(u,v)?D0理想低通滤波器:H(u,v)??

0, D(u,v)?D0?n阶巴特沃兹低通滤波器:H(u,v)?高斯低通滤波器:H(u,v)11?[D(u,v)/D0]2n

?e?D2(u,v)/2D02高通滤波器传递函数Hhp(u, v): Hhp(u, v) = 1 - Hlp(u, v)

直接利用自定义的函数lpfilter(type, M, N, D0, n),建立所有低通滤波器的传递函数,语法为:

Hlp = lpfilter(type, M, N, D0, n)

参数type为’ideal’、’btw’、’gaussian’,分别表示理想低通滤波器、n阶巴特沃兹低通滤波器(通常建立的是二阶,即n = 2)、高斯低通滤波器。M, N表示滤波器大小,n仅在建立巴特沃兹滤波器中使用。

例:

>> Hlp = lpfilter(‘gaussian’, 500, 500, 50) %建立了一个高斯低通滤波器,截止频率是50

类似地,有建立所有高通滤波器的传递函数,语法为: Hhp = hpfilter(type, M, N, D0, n)

添加函数库文件夹matlab_function到MATLAB环境中,方法是:

File——Set Path——Add Folder——OK——Save——关闭对话框。这样,我们就可以使用函数库所提供的各种自定义的matlab函数。建立低通滤波器的函数lpfilter,建立高通滤波器的函数hpfilter,都来自这个函数库。

3.绘制滤波器传递函数H(u, v)三维图形,并以图像形式显示滤波器

对二维滤波器函数的传递函数进行可视化,使用函数mesh,语法为: mesh(H) %默认是彩色绘图

该函数将绘制一个x = 1:M和y = 1:N的线框图,其中[M N] = size(H)。若M和N很大,则线框图的密度会大到不可接受,将以连续曲面显示。在这种情况下,我们可以使用语法:

mesh(H(1:k:end, 1:k:end))

经验表明,沿每个轴40到60个等分可在外观和分辨率上有较好的平衡。 例:

>> Hlpg = lpfilter(‘gaussian’, 500, 500, 50) %建立一个高斯低通滤波器 >> mesh(Hlpg) %滤波器的三维透视图 >> figure, mesh(Hlpg(1:10:500, 1:10:500)) >> axis([0 50 0 50 0 1])

>> figure, imshow(Hlpg) %以图像形式显示滤波器

>> Hlpgc = fftshift(Hlpg) %频率矩形中心化 >> mesh(Hlpgc)

>> figure, mesh(Hlpgc(1:10:500, 1:10:500)) >> axis([0 50 0 50 0 1])

>> figure, imshow(Hlpgc)

4.对输入图像进行频域滤波处理

使用函数库matlab_function中自定义的函数dftfilt(f, H),语法为: g = dftfilt(f, H)

f是输入的空间域图像,H是频率域滤波器,g是经频域滤波后的输出图像,注意,f和H的图像大小应一致。 >> g = dftfilt(f, Hlpg) >> imshow(g)

>> gc = dftfilt(f, Hlpgc) >> figure, imshow(gc)

四.实验报告:

1.对图像image.bmp,lena.bmp进行傅里叶变换

2.生成低通滤波器、高通滤波器,共6种类型,绘制其三维透视图,并给出其图像显示。

3.任选一幅图像,用你己经做好的频域滤波器进行滤波,注意截止频率的选择,会严重影响图像外观。

本文来源:https://www.bwwdw.com/article/6728.html

Top