您的位置:首页 > 编程语言 > MATLAB

傅立叶变换的实现—MATLAB(纯代码)

2019-08-08 18:36 357 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_33668060/article/details/98882712

闲来无事,想验证一下MATLAB中内涵的f傅立叶变换fft2()和ifft2()正确不,于是就有了下面的代码和结果:该部分只是写了傅立叶变换,不是快速傅立叶变换,虽然运行结果都一样)。建议用不大于100×100的图片进行验证,原因不解释,自己去百度。

[code]close all; clear all; clc
% A = [1 2 3 4; 5 6 7 8; 2 3 4 5; 4 5 6 7];
% A = imread('cameraman.tif');
A = imread('C:\Users\Administrator\Desktop\捕获3.png');
A = rgb2gray(A);
A = im2double(A);
B = fft2(A); %matlab 傅立叶变换调用函数,与自己写的进行对照
C = fftshift(B);

[m,n] = size(A);
%傅立叶变换
for u=0:m-1
for v=0:n-1
sum = 0;
for x=0:m-1
e1 = exp(-i*2*pi*u*x/m);
for y=0:n-1
e2 = exp(-i*2*pi*v*y/n);
sum = sum + A(x+1,y+1)*e1*e2;
end
end
F(u+1,v+1) = sum;
end
end
figure;
subplot(131);imshow(log(B));title('fft2公式的傅立叶变换图')
subplot(132);imshow(log(F));title('原公式公式的傅立叶变换图')
subplot(133);imshow(log(C));title('C')
C = ifft2(B);
%傅立叶逆变换
for x=0:m-1
for y=0:n-1
sum = 0;
for u=0:m-1
e1 = exp(i*2*pi*u*x/m);
for v=0:n-1
e2 = exp(i*2*pi*v*y/n);
sum = sum + F(u+1,v+1)*e1*e2;
end
end
f(x+1,y+1) = real(sum/(m*n));
end
end
figure;
subplot(121);imshow(C,[]);title('fft2公式的傅立叶逆变换图')
subplot(122);imshow(f,[]);title('原公式公式的傅立叶逆变换图')

 

结果:

傅立叶变换的频谱图

逆变换后的图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: