傅里叶定理指出:
- 任何信号都可以表示成(或者无限逼近)一系列正弦信号的叠加。在一维领域,信号是一维正弦波的叠加,那么想象一下,在二维领域,实际上是无数二维平面波的叠加,$(x,y)$对应的是一维领域的 $t$,而灰度(Brightness Variation)就是其变量对应一维领域的振幅$F(t)$。
二维离散傅里叶变换:
幅度谱、相位谱和功率谱:
-
幅度图:频域下每一点$(u,v)$的幅度 $F(u,v)$表示的是该频率的平面正弦波在叠加中所占的比例。
-
相位图:相位图看上去不是很直观,但是与图像结构息息相关
-
功率谱:
-
通过相位图和幅度图,我们可以还原$F(u,v)$:
为什么频谱图的纵坐标一直是正值,而时域图的纵坐标有正有负,而且时频图的纵坐标也是有正有负的? 他们三个都是由时频幅值谱得到的,为什么三个图的纵坐标不是一样的?
1 频谱图使横坐标为频率纵坐标为幅值,频率是通过傅里叶变换以后得到的。可以看到求解的过程中用到了绝对值。
2 时域图的正负。其实他更多的表示的是扶植的强度,即偏离X轴的距离。负值是没有意义的。只是为了更形象的表现波形,也可以理解为相位
3 时频图用的函数在代码中也可以看到。短时傅里叶变换得到的。他表现的是功率谱。在求解时用到的是10log(f),而一般功率密度谱函数f是小于一的。所以取完log以后就是负值。
4 为什么不一样?因为他们表示的是不一样的东西啊。时域图,频谱图,时频图。你也可以去查查资料,我们一起讨论交流,我也有解释的不对的地方。
对信号做傅里叶变换,横轴为时间,纵轴为频率,用颜色表示幅度即得到信号的时频分布。也可以理解为颜色代表能量的分布。
要点分析:
- 那么(u,v)的物理含义是什么样的?平面波如下图所示,灰度变化快的频率高,也就是频率是指灰度在平面空间的梯度,这是很直观的描述,那么反应在图像上,就是图像中灰度变化比较快的地方,比如噪声,边缘,跳跃部分,背景以及慢变区域代表低频分量。 这里有一个理解的误区我需要指出一下,这个也是一开始困扰我的地方,就是正弦平面波叠加成图像时,并不是简单的叠加,而是不同相位的叠加。回忆一下一维的傅里叶变换,不同的正弦波的相位也是不同,不然怎么可能组成想要的信号波。所以理解相位很重要。
- 我们通常看到的傅里叶频谱图是图像中心化(移频)之后再去掉相位的图像,那么问题来了?在频谱图上,我们知道$(u,v)$的位置对应的是频率,在对于每一个$(u,v)$点的亮度又对应的什么?首先要明确,中心化之后,最低频移动到了中心,从图中可以看出来,中心点的能量最大,也就是比重最高。不知道我理解的对不对,看频谱图时要去原图割裂来看,然后再回到原图中区。
图像处理变换的目的:
通过对图像信息进行变换,使得能力保持但重新分配,有利于加工、处理或滤除不必要的信息,加强或提取感兴趣的部分或特征。
- 提取图像特征:如直流分量,目标边缘(高频分量)
- 图像压缩:蒸饺变换能量集中,对集中(小)部分进行编码
- 图像增强:低通滤波,平滑噪声,高通滤波,锐化边缘等
什么是空间频率:
1. 对图像信号而言,空间频率是指单位长度内亮度也就是灰度做周期性变化的次数,也就是变化剧烈程度的指标,可以理解灰度在平面空间上的梯度。
2. 我们对图像进行了二维傅里叶变换得到了频谱图,实际上是图像梯度的分布图,注意频谱图与原图像的各点不存在一一对应的关系,即使在不移频的情况下也没有。图像上某一点与它领域点差异的强弱,实际上就是梯度,而该梯度就是对应于频谱图的某一点,而这个梯度也就是对应$(u,v)$某一点,但是这一点的大小或者说幅度值(亮暗)是由整体图像决定的,该梯度(该频率)对应的平面波的所占成分的大小。(能量的角度)
3. 移频后频谱图的中心为原始图像的平均亮度,频率为0,从图像中心向外,频率增高,高亮度表明该频率特征明显。此外,注意到,频率图像中心明显的频率变化方向与原图像中的物方向垂直,也就是说如果原始图像中有多种水平分布的物,那么频率域图像在垂直方向的频率变化比较明显。
傅里叶变换
傅里叶变换的定义
傅里叶变换是将图像表示为不同幅值、频率和相位的复指数之和。傅里叶变换在广泛的图像处理应用中起着至关重要的作用,包括增强、分析、还原和压缩。
如果 f(m,n) 是两个离散空间变量 m 和 n 的函数,则 f(m,n) 的二维傅里叶变换由如下关系定义:
变量 ω1 和 ω2 是频率变量;其单位是弧度/采样。F(ω1,ω2) 通常称为 f(m,n) 的频域表示。F(ω1,ω2) 是复数值函数,在 ω1 和 ω2 中均呈现周期性,期间为 2π。由于具有周期性,通常只显示范围 −π≤ω1,ω2≤π。请注意,F(0,0) 是 f(m,n) 的所有值的总和。因此,F(0,0) 通常称为傅里叶变换的常量分量或 DC 分量。(DC 表示直流电;这是一个电气工程术语,指恒压电源,不同于电压呈正弦变化的电源。)
变换的逆运算是可应用于变换后的图像以生成原始图像的运算。二维傅里叶逆变换由下式给出:
粗略地说,此方程意味着 f(m,n) 可以表示为无限个不同频率的复指数(正弦曲线)的总和。F(ω1,ω2) 给出了 (ω1,ω2) 频率的贡献的幅值和相位。
傅里叶变换的可视化
为说明傅里叶变换,我们以下面的函数 f(m,n) 为例,它在矩形区域内等于 1,在其他位置等于 0。为了简化图,f(m,n) 显示为连续函数,即使变量 m 和 n 是离散的。
矩形函数
下图以网格图形式显示上图所示的矩形函数的傅里叶变换的幅值,即
∣F(ω1,ω2)∣,
。幅值的网格图是可视化傅里叶变换的常用方法。
矩形函数的幅值图像
图中心的峰值是 F(0,0),这是 f(m,n) 中所有值的总和。该图还显示,F(ω1,ω2) 在高水平频率下比在高垂直频率下具有更多能量。这反映出 f(m,n) 的水平横截面是窄脉冲,而垂直横截面是宽脉冲。窄脉冲比宽脉冲具有更多高频成分。
另一种可视化傅里叶变换的常见方法是将
log∣F(ω1,ω2)∣
显示为图像,如图所示。
矩形函数的傅里叶变换的对数
在 F(ω1,ω2) 非常接近 0 的区域,使用对数有助于显示傅里叶变换的细节。
其他简单形状的傅里叶变换示例如下所示。
一些简单形状的傅里叶变换
离散傅里叶变换
在计算机上使用傅里叶变换通常涉及一种称为离散傅里叶变换 (DFT) 的变换形式。离散变换是一种其输入和输出值均为离散样本的变换,便于计算机操作。使用这种形式的变换有两个主要原因:
-
DFT 的输入和输出均为离散值,便于计算机操作。
-
有一种计算 DFT 的快速算法,称为快速傅里叶变换 (FFT)。
DFT 通常针对仅在有限区域 0≤m≤M−1 和 0≤n≤N−1 上为非零值的离散函数 f(m,n) 定义。二维 M×N DFT 和逆 M×N DFT 的关系由下式给出:
值 F(p,q) 是 f(m,n) 的 DFT 系数。零频率系数 F(0,0) 通常称为“DC 分量”。DC 是一个电气工程术语,表示直流电。(请注意,MATLAB® 中的矩阵索引始终从 1 开始,而不是从 0 开始;因此,矩阵元素 f(1,1) 和 F(1,1) 分别对应于数学量 f(0,0) 和 F(0,0)。)
MATLAB 函数 fft、fft2 和 fftn 分别实现用于计算一维 DFT、二维 DFT 和 N 维 DFT 的快速傅里叶变换算法。函数 ifft、ifft2 和 ifftn 计算逆 DFT。
与傅里叶变换的关系
DFT 系数 F(p,q) 是傅里叶变换 F(ω1,ω2) 的采样。
离散傅里叶变换的可视化
-
构造矩阵
f
,它类似于傅里叶变换的定义的示例中的函数 f(m,n)。前面提到过,f(m,n) 在矩形区域内等于 1,在其他位置等于 0。使用二值图像来表示 f(m,n)。f = zeros(30,30); f(5:24,13:17) = 1; imshow(f,"InitialMagnification","fit")
-
使用以下命令计算并可视化
f
的 30×30 DFT。F = fft2(f); F2 = log(abs(F)); imshow(F2,[-1 5],"InitialMagnification","fit"); colormap(jet); colorbar
在无填充情况下计算的离散傅里叶变换
该图不同于傅里叶变换的可视化中显示的傅里叶变换。首先,傅里叶变换的采样要粗略得多。其次,零频系数显示在左上角,而不是传统的中心位置。
-
为了获得傅里叶变换的更精细采样,在计算
f
的 DFT 时可向在其中填零。使用以下命令,可一步执行填零和 DFT 计算。F = fft2(f,256,256);
该命令在计算 DFT 之前用零将
f
填充为 256×256。imshow(log(abs(F)),[-1 5]); colormap(jet); colorbar
在填充情况下计算的离散傅里叶变换
-
然而,零频系数仍显示在左上角,而不是中心位置。您可以使用函数
fftshift
解决此问题,该函数交换F
的象限,使零频系数位于中心位置。F = fft2(f,256,256);F2 = fftshift(F); imshow(log(abs(F2)),[-1 5]); colormap(jet); colorbar
生成的图与傅里叶变换的可视化中所示的图相同。
傅里叶变换的应用
本节介绍傅里叶变换的许多图像处理相关应用中的一些应用。
线性滤波器的频率响应
线性滤波器的冲激响应的傅里叶变换可得到滤波器的频率响应。函数 freqz2
计算并显示滤波器的频率响应。高斯卷积核的频率响应表明,此滤波器允许低频通过,但会使高频衰减。
h = fspecial("gaussian"); freqz2(h)
高斯滤波器的频率响应
有关线性滤波、滤波器设计和频率响应的详细信息,请参阅Design Linear Filters in the Frequency Domain。
使用傅里叶变换执行快速卷积
尝试此示例Copy Code Copy Command
此示例说明如何使用傅里叶变换对两个矩阵执行快速卷积。傅里叶变换的一个关键特性是两个傅里叶变换相乘对应于相关联的空间函数的卷积。此特性与快速傅里叶变换一起构成了快速卷积算法的基础。
注意:基于 FFT 的卷积方法最常用于大型输入。对于小型输入,使用 imfilter
函数通常更快。
创建两个简单的矩阵 A
和 B
。A
是 M×N 矩阵,B
是 P×Q 矩阵。
A = magic(3); B = ones(3);
对 A
和 B
执行填零,使它们至少为 (M+P-1)×(N+Q-1)。(通常填零后的 A
和 B
的大小要为 2 的幂,这时 fft2
的执行速度最快。)该示例将矩阵填充为 8×8。
A(8,8) = 0; B(8,8) = 0;
使用 fft2
函数计算 A
和 B
的二维 DFT。将两个 DFT 相乘,并使用 ifft2
函数计算结果的逆二维 DFT。
C = ifft2(fft2(A).*fft2(B));
提取结果的非零部分,并删除舍入误差导致的虚部。
Get
C = C(1:5,1:5); C = real(C)
C = 5×5 8.0000 9.0000 15.0000 7.0000 6.0000 11.0000 17.0000 30.0000 19.0000 13.0000 15.0000 30.0000 45.0000 30.0000 15.0000 7.0000 21.0000 30.0000 23.0000 9.0000 4.0000 13.0000 15.0000 11.0000 2.0000