Matlab / Octave 2D离散傅立叶变换

时间:2018-04-19 13:34:05

标签: matlab image-processing octave fft

我想重新创建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'); 

enter image description here

非常感谢帮助:) 最好的问候!

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

enter image description here

2 个答案:

答案 0 :(得分:1)

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

EDIT1:

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

EDIT2:

他们似乎使用2版本的图像进行缩减采样。如果您使用imresize(I,0.5)对其进行下采样,您将获得与文章类似的情节。

enter image description here

答案 1 :(得分:0)

您可以使用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'); 

enter image description here