在FFT中移位

时间:2017-02-01 06:24:52

标签: matlab fft

输入图片

enter image description here

清单-1

i = imread('Untitled.png');
i = rgb2gray(i);
F = fft2(i);
%%%F = fftshift(F);
F = abs(F);
F = log(F+1); 
F = mat2gray(F); 
imshow(F);

输出

enter image description here

清单-2

i = imread('Untitled.png');
i = rgb2gray(i);
F = fft2(i);
F = fftshift(F);
F = abs(F);
F = log(F+1); 
F = mat2gray(F); 
imshow(F);

输出

enter image description here

看到上述两个输出,你能否回答以下问题,

  1. 为什么图像的FFT产生这样的光谱,其中零频率位于图像的角落?

  2. 为什么这是一个问题(或者是那个)?

  3. 为什么换档操作会修复这种现象?

1 个答案:

答案 0 :(得分:3)

以下是一些答案:

  1. 为什么图像的FFT产生零的光谱 频率是在图像的角落?
  2. fft是离散傅立叶变换(DFT)的快速实现。在1-D中,DFT定义为X [m] = \ sum_n×[n] exp(j 2 pi(m-1)(n-1)/ N)。因此,显然,变换的第一个元素对应于零频率。这在2-D中类似,其中第一行/列承载零频率。

    1. 为什么这是一个问题(或者是那个)?
    2. 不是,根本不是。它按预期工作。可能只是一个“问题”,我们更习惯于在中间看到零频率,因为频谱具有一些对称性,所以我们喜欢在[-Nyquist,Nyquist]而不是[0,2 * Nyquist]中查看它。虽然从技术上来说这没有什么不同,因为它无论如何是周期性的

      1. 为什么换档操作会解决这种现象?
      2. 由于将零频率移到中间会产生视觉上更令人愉悦的图像,因此可以使用这项工作的功能。它仅用于显示。 fftshift的文档详细显示了它的工作原理,也在2-D中。