分享免费的编程资源和教程

网站首页 > 技术教程 正文

「三十一」MATLAB图像变换之傅里叶变换

goqiw 2024-11-06 18:24:07 技术教程 39 ℃ 0 评论

傅里叶变换是线性系统分析的有力工具,通过将图像从空域变换到频域,可以很容易地了解到图像的各空间频域成分,从而进行相应的处理。傅里叶变换应用十分广泛,如图像特征提取、空间频域滤波、图像恢复和纹理分析等。

针对傅里叶变换,MATLAB图像处理工具箱中提供了fft()函数、fft2()函数、fftn()函数和fftshift()函数。

(1)在MATLAB中提供了fft()函数用于实现一维快速傅里叶变换,该函数的调用格式如下:

  • Y = fft(X):返回向量X的离散傅里叶变换。若X为矩阵,返回矩阵每列的傅里叶变换;若为多维数组,返回第一个非单元素的维;

  • Y = fft(X,n):返回n点傅里叶变换。若length(X)小于n,X自动在末尾添加0到n长;若length(X)大于n,X自动按顺序在顶端截断到n长;若为矩阵,矩阵的每列都自动调整到n长;

  • Y = fft(X,[],dim)或Y = fft(X,n,dim):在数组dim维上进行傅里叶变换。

(2)二维傅里叶变换可由两次一维傅里叶变换实现。此外,在MATLAB中专门提供了fft2()函数用于实现二维快速傅里叶变换,该函数的调用格式如下:

  • Y = fft2(X):返回矩阵X的二维离散傅里叶变换,输出Y与X同大小;其等价于Y = fft(fft(X).').';

  • Y = fft2(X,m,n):在变换前,把X截断或添加0使其变成m*n的数组,输出结果Y与X同大小;

(3)对于n位数组,在MATLAB中提供了fftn()函数用于实现n维快速傅里叶变换,该函数的调用格式如下:

  • Y = fftn(X):返回矩阵X的多维离散傅里叶变换;等价于

Y=X;

for p=1:length(X)

Y=fft(Y,[],p);

end

  • Y = fftn(X,siz):在变换前,把X截断或添加0使其变成siz大小的数组,输出结果Y与X同大小;

(4)在MATLAB中提供了fftshift()函数,用于实现把傅里叶变换的零频率部分移到频谱中间,便于观察图像频域的低频和高频分布。该函数的调用格式如下:

  • Y = fftshift(X):将fft()函数、fft2()函数和fftn()函数的输出结果的零频率部分移到数组中间。对于向量,fftshift(X)将X的左右部分交换;对于矩阵,fftshift(X)将X的一、三象限部分交换,二、四象限部分交换;对于高维数组,fftshift(X)在每维交换X的半空间;

  • Y = fftshift(X,dim):把fftshift操作应用到dim维上。

下面通过具体实例来说明图像空域经过傅里叶变换到图像频域的效果:

代码:

显示效果:

全黑图像

全灰图像

全白图像

帕斯瓦尔定理

帕斯瓦尔定理验证结果

傅里叶变换理解一直都是一个难题,很少有文章能深入浅出地解释傅里叶变换,能从现实世界的具体东西来表达傅里叶变换的含义。我认为,可以尝试着从能量守恒的角度去理解傅里叶变换。正如前面给出的帕斯瓦尔定理,时域(空域)能量和频域能量有明确的关系。如全黑图像空域能量为0,所以其频域能量也为零,即表现为频域图像全黑;如全灰图像和全白图像的频域图像都对应于一个白点,但该白点包含的能量不同,前者为0.8229*10^9,后者为3.3164*10^9。

从上述多幅图像的空域和频域可以看出,面积减小对应亮度增加,面积增大对应亮度减小。

最后,感谢您的耐心阅读!

MATLAB的世界

MATLAB语言之程序性能优化

上一篇:MATLAB数字图像运算之特定区域处理方法

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表