编程实现图像的Fourier变换及其反变换,输出图像的频谱图像。用matlab代码
时间: 2024-03-07 17:49:28 浏览: 18
以下是用MATLAB实现图像的Fourier变换及其反变换的代码,并输出频谱图像:
```matlab
% 读取图像
img = imread('lena.bmp');
% 将图像转换为灰度图像
if size(img,3)>1
img = rgb2gray(img);
end
% 将图像类型转换为double类型
img_double = im2double(img);
% 对图像进行傅里叶变换
FT_img = fft2(img_double);
% 对变换后的图像进行移频
FT_img_shift = fftshift(FT_img);
% 计算幅值谱和相位谱
amp_spec = abs(FT_img_shift);
phase_spec = angle(FT_img_shift);
% 显示频谱图像
subplot(1,2,1);
imshow(log(1+amp_spec),[]);
title('Amplitude Spectrum');
subplot(1,2,2);
imshow(phase_spec,[]);
title('Phase Spectrum');
% 对频谱图像进行反变换
FT_img_unshift = ifftshift(FT_img_shift);
img_recover = ifft2(FT_img_unshift);
% 显示原图像和反变换后的图像
figure;
subplot(1,2,1);
imshow(img);
title('Original Image');
subplot(1,2,2);
imshow(img_recover);
title('Recovered Image');
```
注意:在显示幅值谱时,需要对其进行取对数处理,以便更好地观察频谱的变化。