我想重新创建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');
非常感谢帮助:) 最好的问候!
编辑: 现在它看起来像这样:
答案 0 :(得分:1)
问题是F的最小值为0,当您使用log(F)
时,您将获得最小值-Inf
。 imshow(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):
结果与您展示的纸张有所不同,但看起来它们没有线性灰度色彩图(从中等灰度级开始)
EDIT2:
他们似乎使用2版本的图像进行缩减采样。如果您使用imresize(I,0.5)
对其进行下采样,您将获得与文章类似的情节。
答案 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');