幅度和傅立叶相位变换F被定义为:入门从相位和幅度傅立叶变换 - Matlab的
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
和
Phase = arctan(Imaginary(F)/Real(F))
伊夫试图写MATLAB代码,取入一个灰度图像矩阵,在矩阵上执行fft2(),然后计算变换的幅度和相位。然后我希望计算傅里叶变换的虚部和实部。
Real = Mag/sqrt(1 + tan(Phase)^2)
和
Imaginary = Real*tan(Phase)
,最后组合和反FFT2:
F = Real + i*Imaginary
image = ifft2(F)
我希望看到相同的图像,因为这是由前两个方程重新排列成完成输入,但我得到垃圾。我的数学错了吗?我的MATLAB M文件的代码如下:
function y = forwardBackwardFFT(image)
F = fft2(image);
mag = sqrt(real(F).^2 + imag(F).^2);
phase = atan(imag(F)./real(F));
re = sqrt((mag.^2)./(1 + tan(phase).^2));
im = re.*tan(phase);
F = re + i*im;
f = ifft2(F);
subplot(1,2,1);
imshow(image);
Title('Original Image');
subplot(1,2,2);
imshow(f);
Title('Image after forward and backward FFT');
y = f;
感谢很多:)
啊谢谢一吨!棒极了。 atan(im./re)和atan2(im,re)之间最大的区别是什么?昨天我尝试了同样类型的东西,从mag和cos和罪恶中获得重新和im,但它仍然给我垃圾。与你的建议atan2(),它的作品。感谢一吨虽然:) –
@Dave:见http://en.wikipedia.org/wiki/Atan2#Motivation。 –
@nibot不好意思的男人,还没来过这里。只是选择它作为接受的答案 –