2014-03-06 86 views
1

如何在MATLAB中绘制二维图像的傅立叶变换的相位和幅度? 我使用angleabs,然后使用imshow,但我得到一个黑色的图像。
在这个绘图中有什么用fftshift绘制相位和幅度图像傅立叶

+0

尝试imagesc(abs(fftshift(fft2(I)))); – lennon310

+0

我试过这个,但它只显示中间有一个白点的黑色图像。 – amanda

回答

1
F = fft2(I); where I is the input 
F = fftshift(F); % Center FFT 

F = abs(F); % Get the magnitude 
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined 
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1 

imshow(F,[]); % Display the result 

试试这个。代码取自:How to plot a 2D FFT in Matlab?

+0

我见过这个gode,但我不明白为什么我们使用日志和fftshift为什么我们不只是表明不使用这个? – amanda

+0

谢谢lakesh你救了我!我花了几个小时寻找那个日志(F + 1):D 这是一个澄清,当你准备输入时,如果你阅读它的f = imread(imPath),在安全方面;你需要这个F = fft2(double(f));因为图像是以unit8格式读取的,因此在执行FFT之前应将它们转换为双数组。 引用自http://matlabgeeks.com/tips-tutorials/how-to-do-a-2-d-fourier-transform-in-matlab/#comment-5137 – N0rA

1

从您的评论中,您需要删除直流偏移。 类似于:

imagesc(abs(fftshift(fft2(I - mean(I(:)))))); 
+0

非常感谢。它现在有效。 – amanda