我熟悉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中的过程:
答案 0 :(得分:2)
以下是一些应该澄清使用的缩放的观察结果:
application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
坐标对在Matlab中。(X,Y)
因此,考虑到这一点,我们有:
(Y+1,X+1)
分别与位置fftshift(Im)
和>> Ashifted = fftshift(A);
>> Ashifted(97,158)/255
ans = 7.4484 - 10.4582i
>> Ashifted(93,165)/255
ans = 12.1928 - 4.9850i
处的实部和虚部的所示测量值完全对应。
请注意,通过FFT的线性属性,您还可以划分输入并获得相同的结果:
(X,Y) = (157,96)