Matlab/Octave 二维离散傅里叶变换

Matlab/Octave 2D Discrete Fourier Transform

我想在 Octave 中重新创建如图所示的步骤,但我认为我做的完全错了。

I = imread('424a.png');

subplot(2,2,1);
imshow(I);
title('Original Image'); 

subplot(2,2,2);
F = fft2(I);
imshow(abs(F),[]);
title('FFT'); 

subplot(2,2,3);
imshow(log(abs(F)),[])
title('log - FFT'); 

F = fftshift(F);
subplot(2,2,4);
imshow(log(abs(F)),[])
title('centered - log - FFT'); 

非常感谢您的帮助:) 此致!

编辑: 现在看起来像这样:

您可以使用MATLAB对数函数进行对数变换。它有助于查看转换的缩放版本。

I = imread('testimage.png');

subplot(2,2,1);
imshow(I);
title('Original Image'); 

subplot(2,2,2);
F = fft2(I);
imshow(abs(F),[]);
title('FFT'); 

subplot(2,2,3);
imshow(log(abs(F)),[])
title('log - FFT'); 

F = fftshift(F);
subplot(2,2,4);
imshow(log(abs(F)),[])
title('centered - log - FFT'); 

问题是 F 的最小值为 0,当您取 log(F) 时,您将得到最小值 -Infimshow(F,[]) 函数在 MIN 和 MAX 之间缩放图片,因此在您的情况下它将显示为黑色图像。您可以在获取日志之前向 F 添加一个小值,或者手动设置限制 [0 8.8](8.8 是 log(max(F(:)))

编辑 1:

如果我在 imshow(log(abs(F)+1),[]) 中添加一个小常量,我会得到以下结果(在 Ubuntu 17.10 下使用 Octave 4.2.1): 结果与您展示的论文有所不同,但看起来它们没有线性灰度色图(它从中等灰度级开始)

编辑 2:

他们似乎使用了 2 版本图像的下采样。如果你使用 imresize(I,0.5) 对其进行下采样,你将得到与论文中类似的图。