了解 Matlab 中的 FFT 输出

信息处理 图像处理 matlab fft 图片
2022-02-20 15:36:27

我对傅里叶变换很陌生,我想在 Matlab 中绘制图像的傅里叶变换。我看过很多例子,在所有例子中,图像的 fft() 是一张黑色图片,中间有一些白色部分。但是当我绘制 fft() 时,我得到了这些图片: 在此处输入图像描述

这是我的代码:

clear all;

img = rgb2gray(imread('images.jpg'));
figure("Name",'Image');
imshow(img)


F = fft(img);
figure("Name",'Fimage');
imshow(F)

可以吗?或者它有什么问题?

3个回答

您应该尝试以下方法:

F = fft2(img);
figure; imagesc(abs(F));

在图像处理中,我们多次使用对数谱:

F = fft2(img);
figure; imagesc(log10(1 + abs(F)));

我对傅里叶变换很陌生

我建议从这里的数学开始。确保您了解公式以及为什么会这样。然后通过编写代码并手动计算结果的简单示例来逐步提高,以便您可以比较两者并了解代码的工作原理

  1. 从中间的单个非零像素开始。
  2. 将像素移动到不同的位置。走着瞧吧。请记住同时查看相位和幅度。
  3. 做一条水平线
  4. 做一条垂直线
  5. 移动和旋转一条线
  6. 做 2 或 3 个单独的像素
  7. 调制像素的强度
  8. 做一条有灰度的线

继续这样做,直到您可以通过代码和手动可靠地产生相同的结果。然后,您可以转到实际图像,看看您到目前为止所开发的直觉是否有用。

Y = fft2(x);
imagesc(10*log10(abs(fftshift(Y))));