了解图像的 FFT

信息处理 图像处理 fft matlab 频率
2022-01-26 12:01:25

我无法识别图像的频率分量,

在这里,我只是生成了 256x256 的二进制图像。

a = [zeros(256,128) ones(256,128)];
imshow(a);

在此处输入图像描述

取图像 FFT 并将零频移到中心,

f = fft2(a)
shft = fftshift(f);
imshow(log(shft)) %stretching

将导致,

在此处输入图像描述

如何确定有多少频率分量以及这些频率是多少?

另外,如果我计算任何一维序列的 FFT 并绘制该序列,则某些值为负数,这是什么意思?怎么会有负频率?

3个回答

怎么会有负频率?

FFT 系数不是频率,而是复振幅。系数的模数表示幅度,系数的自变量表示相位。

请注意,您应该从 Matlab 收到计算警告或错误消息log(shft),因为 shft 是一个复数矩阵,结果不是真实的,不能绘制为图像。

我的第一个建议是,在尝试解释二维结果之前,先了解一维的 FFT。

离散傅里叶变换(FFT 是 DFT 的一种实现)是一种复数变换:它在 2 个向量之间变换大小为 N 的复数向量。

因此,在一维情况下,您不仅会得到负值,而且通常会得到复数。

这同样适用于 2D。imshow 函数可能会占用复数矩阵的实部(在 imshow 文档中并不清楚)。

您缺少abs命令。

尝试以下操作:

f = fft2(a)
shft = fftshift(abs(f));
imshow(log(shft)) %stretching