用Matlab编程实现图像的傅立叶变换和逆变换并显示出来
% 用Matlab编程实现图像的傅立叶变换并显示出来
% 可进行傅立叶变换和逆变换恢复
clear all
close all
clc
I=imread('1.JPG'); % 读取图像
I=rgb2gray(I); % 灰度处理
fftI=fft2(I); % 二维离散傅立叶变换
sfftI=fftshift(fftI); % 直流分量移到频谱中心
RR=real(sfftI); % 取傅立叶变换的实部
II=imag(sfftI); % 取傅立叶变换的虚部
A=sqrt(RR.^2+II.^2); % 计算频谱幅值
B=(A-min(min(A)))./(max(max(A))-min(min(A)))*225; % 归一化
pha=angle(fftI); % 计算复数的相位角
figure(1) % 设定窗口
subplot(2,2,1),imshow(I);title('原图');
subplot(2,2,2),imshow(B);title('原图像的频谱'); % 显示原图像的频谱
subplot(2,2,3),imshow(log(B),[]);title('原图像的频谱'); % 显示原图像的频谱
subplot(2,2,4),imshow(pha);title('相位谱')
figure(2)
x=abs(ifft2(fftI)); % 取绝对值
magif=ifft2(abs(fftI)); % 二维离散傅里叶逆变换
phaif=ifft2(exp(1i*pha)); % 1i为复数单位,因为 i 容易和变量搞混了,所以matlab在使用符号函数求解时,其结果会推荐你使用 1i
subplot(1,3,1),imshow(phaif,[]);title('相位谱重建图像');
subplot(1,3,2),imshow(x,[]);title('频谱重建原图像')
subplot(1,3,3),imshow(magif,[]);title('幅度谱重建图像')
展示
处理图
重建图