从相位和幅度获取傅立叶变换-Matlab
||
傅立叶变换F的大小和相位定义为:
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 mfile代码如下:
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;
非常感谢 :)
没有找到相关结果
已邀请:
1 个回复
凰葱崎济邯
是否会返回原始图像,您可以删除或注释掉所有复数操作:
这可行。所以问题出在您的复数运算上。考虑当phase = 0或phase = pi / 2时会发生什么。 0的切线为0,导致被零除; tan(pi / 2)是无限的。 这是一些有效的代码:
为了显示最终的逆变换图像,您将必须执行
才能消除(几乎为零)虚部。 获取复数的大小和相位的更惯用的方法是简单地执行以下操作:
希望这可以帮助。