文章目录
4f
FFT
图中可以看出,高频(Fourier变换后的四周)对应着图片边缘(细节)信息,低频(Fourier变换后的中心)对应着图片平坦区域。
i=imread('333.png');
j=imread('222.png');
ii=rgb2gray(i);
jj=rgb2gray(j);
%=======显示原图
subplot(2,3,1),imshow(ii);
title('original_i');
subplot(2,3,4),imshow(jj);
title('original_j');
%=======fft
i1 = fft2(ii);
i2 =fftshift(i1);
j1 = fft2(jj);
j2 =fftshift(j1);
%=======图大小和遮挡半径(方形)
[m,n] = size(i2);
r = 20;
%=======去掉第一张图的低频信息
for p = -r:r
for q = -r:r
i2(m/2+p,n/2+q) = 0;
end
end
%=======去掉第二张图的高频信息
for p1 = 1:m
for q1 = 1:n
if p1>=m/2-r && p1<=m/2+r && q1>=n/2-r && q1<=n/2+r
j2(p1,q1) = j2(p1,q1);
else
j2(p1,q1) = 0;
end
end
end
%=======可视化转换坐标后的傅里叶频谱图
i3=log(abs(i2));
j3=log(abs(j2));
subplot(2,3,2),imshow(i3,[]);
title('Fourier_i');
subplot(2,3,5),imshow(j3,[]);
title('Fourier_j');
%=======反FT
i5 = real(ifft2(ifftshift(i2))); %===频域的图反变换到空域 并取实部
i6 = im2uint8(mat2gray(i5)); %===取其灰度图
subplot(2,3,3),imshow(i6);
title('anti-Fourier_i');
j5 = real(ifft2(ifftshift(j2))); %===频域的图反变换到空域 并取实部
j6 = im2uint8(mat2gray(j5)); %===取其灰度图
subplot(2,3,6),imshow(j6);
title('anti-Fourier_j');
%=======低频高频结合
ij = i2+j2;
ij1 = real(ifft2(ifftshift(ij))); %===频域的图反变换到空域 并取实部
ij2 = im2uint8(mat2gray(ij1)); %===取其灰度图
figure
imshow(ij2);
title('anti-Fourier_i');
关于傅里叶更细致的操作,请查看 图像傅里叶变换的幅度谱和相位谱的以及反变换
关于傅里叶原理,可以参考:深入浅出的讲解傅里叶变换(真正的通俗易懂)
关于 matlab 的安装,可以参考:Matlab 2015b安装教程
幅值和相位谁更重要?
%读入图像
X=imread('1.jpg');
Y=imread('2.jpg');
%转为灰度图
x = rgb2gray(X);
y = rgb2gray(Y);
% 傅里叶变换
xf=fft2(double(x));
yf=fft2(double(y));
%取幅度和相位
xf1=abs(xf);
xf2=angle(xf);
yf1=abs(yf);
yf2=angle(yf);
%交换相位
xfr=xf1.*cos(yf2)+xf1.*sin(yf2).*1i;
yfr=yf1.*cos(xf2)+yf1.*sin(xf2).*1i;
%傅里叶逆变换
xr=abs(ifft2(xfr));
yr=abs(ifft2(yfr));
%转换成uint8类型
xf1=uint8(xf1);
xf2=uint8(xf2);
yf1=uint8(yf1);
yf2=uint8(yf2);
xr=uint8(xr);
yr=uint8(yr);
%显示
figure(1)
subplot(2,2,1);imshow(xf1,[]);title('x 幅度谱');
subplot(2,2,2);imshow(yf1,[]);title('y 幅度谱');
subplot(2,2,3);imshow(xf2,[]);title('x 相位谱');
subplot(2,2,4);imshow(yf2,[]);title('y 相位谱');
figure(2)
subplot(2,2,1);imshow(x);title('x 灰度图');
subplot(2,2,2);imshow(y);title('y 灰度图');
subplot(2,2,3);imshow(xr,[]);title('x 幅度谱 与 y相位谱');
subplot(2,2,4);imshow(yr,[]);title('y 幅度谱 与 x相位谱');