【发布时间】:2017-04-03 19:26:01
【问题描述】:
我正在熟悉 Octave 和函数 fft2()。在这个玩具示例中,我的目标是生成以下 256 x 256 png 图像的 2D DFT:
为了便于理解输出,我尝试将此图像转换为 256 x 256 图像,消除颜色信息:
Im = imread('circ.png');
pkg load image
Im = rgb2gray(Im);
figure, imshow(Im)
在这个簿记准备工作之后,我运行:
A = fft2(double(Im));
好的。现在我拍摄相同的图像,并使用 ImageJ 对其进行分析,检查点 (157, 96) 的输出,如下所示:
所以幅度将是sqrt(7.448^2 + 10.458^2) = 12.83
还有相位,arctan(-10.458 / 7.448) = 54.54 degrees。
问题是,如何从fft2() 输出中获取这些值?
如果它有所不同,这就是我绘制 Octave 输出 2D DFT 的方式:
subplot(132);
h = imshow(abs(fftshift(A)),[24 100000]);
h2 = get(h,'Parent');
set(h2,'YDir','Normal');
axis equal tight;
title("2D FFT Magnitude");
subplot(133);
h = imshow(angle(fftshift(A)),[-pi pi]);
h2 = get(h,'Parent');
set(h2,'YDir','Normal');
axis equal tight;
title("2D FFT Phase");
这是 ImageJ 中的过程:
【问题讨论】:
-
使用索引?
A(157,96)? -
对不起,我的意思是
A(96,157) -
@Suever 还差得很远...可能我不知道如何正确读取输出...我不知道...
>> A(96,157) ans = -472.89 - 2050.46i -
你有 ImageJ 为你计算 FFT 吗?
-
Ashift = fftshift(A); rad2deg(angle(Ashift(96, 157)));提供几乎相同的角度输出 (-53.0599°)。正如@Suever 所建议的那样,幅度可能会发生变化。