主要内容

傅里叶变换

傅里叶变换的定义

傅里叶变换是将图像表示为不同幅度、频率和相位的复指数的和。傅里叶变换在广泛的图像处理应用中起着关键作用,包括增强、分析、恢复和压缩。

如果fn是两个离散空间变量的函数吗而且n,则二维傅里叶变换fn是由关系定义的吗

F ω 1 ω 2 n f n e j ω 1 e j ω 2 n

的变量ω1而且ω2为频率变量;单位是弧度/样本。Fω1ω2常被称为频域的代表fnFω1ω2复值函数在内和内都是周期函数吗ω1而且ω2,带周期 2 π .由于周期性,通常只有范围 π ω 1 ω 2 π 会显示出来。请注意,F(0,0)是所有值的和吗fn.出于这个原因,F(0,0)常被称为恒定的组件直流分量傅里叶变换。(DC代表直流电;它是一个电气工程术语,指的是恒压电源,而不是电压呈正弦变化的电源。)

变换的逆是一种操作,当对变换后的图像执行时,会产生原始图像。二维傅里叶反变换由

f n 1 4 π 2 ω 1 π π ω 2 π π F ω 1 ω 2 e j ω 1 e j ω 2 n d ω 1 d ω 2

粗略地说,这个方程意味着fn可以表示为无限个具有不同频率的复指数(正弦信号)的和。频率上贡献的幅度和相位ω1ω2是由Fω1ω2

可视化傅里叶变换

为了说明这一点,考虑一个函数fn它在矩形区域内等于1,其他地方都是0。为了简化图表,fn是一个连续函数,即使变量而且n是离散的。

矩形函数

下图作为网格图显示了傅里叶变换的幅值,

| F ω 1 ω 2 |

上图所示的矩形函数。幅值的网格图是傅里叶变换可视化的常用方法。

矩形函数的模像

在情节中心的顶点是F(0,0)中所有值的和fn.图表也表明了这一点Fω1ω2在高水平频率比在高垂直频率有更多的能量。这反映了水平横截面的事实fn为窄脉冲,垂直截面为宽脉冲。窄脉冲的高频含量比宽脉冲高。

另一种常见的可视化傅里叶变换的方法是显示

日志 | F ω 1 ω 2 |

如图所示。

矩形函数的傅里叶变换的对数

使用对数有助于得到傅里叶变换的细节Fω1ω2非常接近0。

其他简单形状的傅里叶变换示例如下所示。

一些简单形状的傅里叶变换

离散傅里叶变换

在计算机上处理傅里叶变换通常涉及一种称为离散傅里叶变换(DFT)的变换形式。离散变换是一种输入和输出值为离散样本的变换,便于计算机操作。使用这种形式的转换有两个主要原因:

  • DFT的输入和输出都是离散的,便于计算机操作。

  • 有一种计算DFT的快速算法称为快速傅里叶变换(FFT)。

DFT通常定义为一个离散函数fn它只在有限区域内是非零的 0 1 而且 0 n N 1 .二维——- - - - - -NDFT和逆——- - - - - -NDFT关系由

F p 0 1 n 0 N 1 f n e j 2 π p / e j 2 π n / N p 0 1 ... 1 0 1 ... N 1

而且

f n 1 N p 0 1 0 N 1 F p e j 2 π p / e j 2 π n / N 0 1 ... 1 n 0 1 ... N 1

的值Fp的DFT系数是fn.零频率系数,F(0,0)通常称为“直流分量”。直流是电气工程术语,代表直流电。(注意MATLAB中的矩阵指标®总是从1开始,而不是0;因此,矩阵元素f(1,1)而且F(1,1)对应于数学量f(0,0)而且F(0,0)分别)。

MATLAB函数fftfft2,fftn实现了快速傅里叶变换算法,分别计算一维DFT、二维DFT和n维DFT。的函数传输线ifft2,ifftn计算DFT逆。

和傅里叶变换的关系

DFT系数Fp是傅里叶变换的样本Fω1ω2

F p F ω 1 ω 2 | ω 1 2 π p / ω 2 2 π / N p 0 1 ... 1 0 1 ... N 1

可视化离散傅里叶变换

  1. 构造一个矩阵f这和函数很相似fn傅里叶变换的定义.记住,fn在矩形区域内等于1,其他地方等于0。使用二值图像来表示fn

    F = 0 (30,30);F (5:24,13:17) = 1;imshow (f,‘InitialMagnification’,‘适合’)

  2. 计算和可视化的30 × 30 DFTf通过这些命令。

    F = fft2(F);F2 = log(abs(F));imshow (F2, [1 - 5], ' InitialMagnification ', '适应');colormap(飞机);colorbar

    无填充的离散傅里叶变换计算

    图中显示的傅里叶变换与图中的不同可视化傅里叶变换.首先,傅里叶变换的采样要粗糙得多。其次,零频系数显示在左上角,而不是传统的中心位置。

  3. 为了获得更精细的傅里叶变换采样,将零填充添加到f当计算其DFT时。零填充和DFT计算可以用这个命令在一个步骤中执行。

    F = fft2(F,256,256);

    命令zero-padsf为256 × 256,然后再计算DFT。

    imshow(日志(abs (F)), [1 5]);colormap(飞机);colorbar

    用填充计算的离散傅里叶变换

  4. 然而,零频率系数仍然显示在左上角,而不是中心。您可以通过使用函数来解决这个问题fftshift的象限互换F零频率系数在中心。

    F = fft2(F,256,256);F2 = fftshift(F);imshow(日志(abs (F2)), [1 5]);colormap(飞机);colorbar

    所得到的图与图中所示的图相同可视化傅里叶变换

傅里叶变换的应用

本节介绍傅里叶变换的许多图像处理相关应用中的几个。

线性滤波器的频率响应

线性滤波器脉冲响应的傅里叶变换给出了滤波器的频率响应。这个函数freqz2计算并显示滤波器的频率响应。高斯卷积核的频率响应表明,该滤波器通过低频,衰减高频。

H = fspecial('高斯');freqz2 (h)

高斯滤波器的频率响应

看到频域线性滤波器的设计有关线性滤波、滤波器设计和频率响应的更多信息。

使用傅里叶变换进行快速卷积

这个例子展示了如何使用傅里叶变换对两个矩阵进行快速卷积。傅里叶变换的一个关键性质是两个傅里叶变换的乘积对应于相关空间函数的卷积。这个性质,连同快速傅里叶变换,形成了快速卷积算法的基础。

注意:基于fft的卷积方法最常用于大输入。对于小的输入,通常使用imfilter函数。

创建两个简单的矩阵,一个而且B一个是m × n矩阵B是p × q矩阵。

A =魔术(3);B = ones(3);

一个而且B使它们至少是(M+P-1)-by-(N+Q-1)。(通常是一个而且B0被填充为2的幂,因为fft2对于这些尺寸是最快的。)该示例将矩阵填充为8 × 8。

A(8,8) = 0;B(8,8) = 0;

计算的二维DFT一个而且B使用fft2函数。将两个DFT乘在一起,并使用ifft2函数。

C = fft2(fft2(A).*fft2(B));

提取结果的非零部分,并去除舍入错误引起的虚部。

C = C(1:5,1:5);C =实(C)
C =5×58.0000 9.0000 15.0000 7.0000 6.0000 11.0000 17.0000 30.000 19.0000 13.0000 15.0000 30.000 45.0000 30.000 15.0000 7.0000 21.0000 30.000 23.0000 9.0000 4.0000 13.0000 15.0000 11.0000 2.0000

执行基于fft的相关性来定位图像特征

这个例子展示了如何使用傅里叶变换来进行相关,这与卷积密切相关。相关性可以用来定位图像中的特征。在这种情况下,通常称为相关性模板匹配

将一个示例图像读入工作区。

Bw = imread(“text.png”);

通过从图像中提取字母“a”来创建一个匹配模板。类的交互语法也可以创建模板imcrop函数。

A = bw(32:45,88:98);

通过将模板图像旋转180度,然后使用基于fft的卷积技术,计算模板图像与原始图像的相关性。(如果将卷积核旋转180度,卷积就等价于相关性。)要将模板与图像匹配,请使用fft2而且ifft2功能。在生成的图像中,明亮的峰值对应字母的出现。

C =实际(ifft2 (fft2 (bw)。* fft2 (rot90 (a, 2), 256256)));图imshow (C, [])将图像缩放到适当的显示范围。

图中包含一个轴对象。axis对象包含一个image类型的对象。

若要查看模板在图像中的位置,请找到最大像素值,然后定义小于此最大值的阈值。阈值图像将这些峰值的位置显示为阈值相关图像中的白点。(为了使位置在图中更容易看到,示例将阈值图像放大以扩大点的大小。)

马克斯(C (:))
Ans = 68
脱粒= 60;使用略小于max的阈值。D = C >脱粒;Se = strel(“磁盘”5);E = imdilate(D,se);图imshow (E)显示值超过阈值的像素。

图中包含一个轴对象。axis对象包含一个image类型的对象。