MATLAB如何仅从幅度谱中恢复图片?

信息处理 图像处理 matlab 傅里叶变换 IFFT 二维
2022-02-13 15:32:07

这就是我所做的转变。Lena 图片的代码fft2()ifft2()它还原始。添加一些abs(),以便它实际显示它。

在此处输入图像描述

根据这篇文章,没有相位信息就无法重建图像,但我没有看到任何地方使用相位的迹象。

我猜 MATLAB 仍然使用它,但为了说服而将其隐藏在视线之外。如果是这样,是否可以查看给定图片的相位分量以及幅度谱?

代码:

[x,map] = imread('PATH'); %import image
i = ind2gray(x,map);   % to greyscale

I = fft2(i); % 2D FFT

I = fftshift(I); % centre

ir = ifft2(I);

figure(1); imshow(abs(i),[]) % original
figure(2); imshow(log(double(abs(I))),[]) % original
figure(3); imshow(abs(ir),[]) % original

我想我的措辞真的很糟糕。如何查看图像变换的相位图?我想这听起来不那么愚蠢。

1个回答

您的代码使用相位进行重建。看看 fft2(x) 的输出;它们是复数,即包含相位和幅度。看看这段代码:

%%
[x,map] = imread('http://www.cs.cmu.edu/~chuck/lennapg/lena_std.tif'); %import image
%%
i = rgb2gray(x);   % to greyscale

I = fft2(i); % 2D FFT

I = fftshift(I); % centre
mag = abs(I);
phase = angle(I);
I_magonly = abs(I);
I_phaseonly = I ./ abs(I);

figure(1);
subplot(321); imshow(abs(i),[]); title('Original');
subplot(322); imshow(log(double(abs(I))),[]); title('spectrum magnitude');
subplot(323); imshow(phase,[]); title('spectrum phase');
subplot(324); imshow(abs(ifft2(I)),[]); title('reconstructed');
subplot(325); imshow(abs(ifft2(I_magonly)),[]); title('reconstructed magnitude only');
subplot(326); imshow(abs(ifft2(I_phaseonly)),[]); title('reconstructed phase only');

在此处输入图像描述

它加载 Lena 图像,创建 FFT,并显示相位和幅度信息。然后它尝试仅基于相位或幅度进行重构。显然,相位包含比幅度更多的信息(对于我们的眼睛而言)。但是你需要从傅里叶变换中精确地再现图像。