matlab实现傅里叶变换

代码实现

clc;clear;close all;

%读取图片,展示图片
I=imread('p3.jpg');
figure('Name','原图','NumberTitle','off');imshow(I);
 
I=rgb2gray(I); %I = rgb2gray(RGB) 将真彩色图像 RGB 转换为灰度图像 I。
I=im2double(I); %I = im2double(I) 将图像 I 转换为双精度。
figure('Name','灰度图','NumberTitle','off');imshow(I,[0,1]);%展示原灰度图像
 
F=fft2(I); %Y = fft2(X) 使用快速傅里叶变换算法返回矩阵的二维傅里叶变换,这等同于计算 fft(fft(X).').'。如果 X 是一个多维数组,fft2 将采用高于 2 的每个维度的二维变换。输出 Y 的大小与 X 相同。
Fm=abs(F);%得到变换后的模
T=log(Fm+1);%求自然对数
figure('Name','傅里叶变换频谱图','NumberTitle','off');imshow(T,[]);%展示傅里叶变换后的图
 
Ff=fftshift(F);%快速傅里叶变换 Y = fftshift(X) 通过将零频分量移动到数组中心,重新排列傅里叶变换 X。
Fm=abs(Ff);
T=log(Fm+1);
figure('Name','中心偏移后的傅里叶变换频谱图','NumberTitle','off');imshow(T,[]); 

r=log(abs(real(Ff)));
i=log(abs(imag(Ff)));
figure('Name','中心偏移后的傅里叶变换频谱图实部','NumberTitle','off');imshow(r,[]);
figure('Name','中心偏移后的傅里叶变换频谱图虚部','NumberTitle','off');imshow(i); 


J=ifft2(F);%X = ifft2(Y) 使用快速傅里叶变换算法返回矩阵的二维离散傅里叶逆变换。
figure('Name','傅里叶逆变化得到的灰度图','NumberTitle','off');imshow(J,[0,1]);

open fftshift
open ifft2
open fft2


结果:

原图

image-20201204222737888

灰度图

image-20201204222944348

傅里叶频谱图

image-20201204223005138

中心偏移后的傅里叶频谱图

image-20201204223340844

中心偏移后频谱图的实部

image-20201204223405703

中心偏移后频谱图的虚部

image-20201204223424411

傅里叶逆变换得到的灰度图

image-20201204223445600

posted @ 2020-12-04 22:39  碎了的冰  阅读(2435)  评论(2编辑  收藏  举报