废话不多说先上代码。
clear
clc
img=imread('f2.jpg');
subplot(2,2,1);imshow(img);title('原图');
f=rgb2gray(img);
F=fft2(f);
F1=log(abs(F)+1);
subplot(2,2,2);imshow(F1,[]);title('幅度谱');
Fs=fftshift(F);
S=log(abs(Fs)+1);
subplot(2,2,3);imshow(S,[]);title('平移后的幅度谱');
fr=real(ifft2(ifftshift(Fs)));
ret=im2uint8(mat2gray(fr));
subplot(2,2,4);imshow(ret);title('逆变换');
我们今天所要认识的就是以上这个简单的代码段,简单来说就是用matlab来将图像变换成频域的幅度谱,那么到底是怎么实现的。
我们可以看到一开始是用img=imread()这个函数读入了一个图像并以img变量存储,最重要的是这个图象存储的路径一定是和代码的路径是一致的,否则就会识别不出。
读出后紧接着就用subplot和imshow联合建立了一张坐标域并显示了原图。
之后,f=rgb2gray()这个函数明显是用来将彩图转换为灰图,因为彩图的数值比起灰度图非常不方便。
我们都知道彩图是由红绿蓝三种色组成的,rgb2gray中的rgb就代表red,green和blue,而每一种颜色都从0-255里面的一个数字组成,0代表纯白,255代表纯黑,介于二者之间就是红绿蓝。也就是说图像里的数值越靠近0,颜色越鲜艳,越靠近255则越暗淡。
懂了这一点我们继续往下想。