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

结果:

傅立叶变换的频谱图

逆变换后的图:

发布了15 篇原创文章 · 获赞 5 · 访问量 4394

猜你喜欢

转载自blog.csdn.net/qq_33668060/article/details/98882712