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

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

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('原公式公式的傅立叶逆变换图')

 

结果:

傅立叶变换的频谱图

逆变换后的图:

  • 6
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值