闲来无事,想验证一下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-1for v=0:n-1sum = 0;for x=0:m-1e1 = exp(-i*2*pi*u*x/m);for y=0:n-1e2 = exp(-i*2*pi*v*y/n);sum = sum + A(x+1,y+1)*e1*e2;endendF(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-1for y=0:n-1sum = 0;for u=0:m-1e1 = exp(i*2*pi*u*x/m);for v=0:n-1e2 = exp(i*2*pi*v*y/n);sum = sum + F(u+1,v+1)*e1*e2;endendf(x+1,y+1) = real(sum/(m*n));end
end
figure;
subplot(121);imshow(C,[]);title('fft2公式的傅立叶逆变换图')
subplot(122);imshow(f,[]);title('原公式公式的傅立叶逆变换图')
结果:
傅立叶变换的频谱图
逆变换后的图: