离散傅里叶变换,并进行中心点平移。在进行中心平移后,以直流分流所在中心为原点,分别获取不同大小的正方形频率子带进行逆傅里叶变换,分析不同大小的正方形频率子带对空域图像。
算法思想:
将图像进行快速傅里叶变换并将中心点平移,进行中心点平移后,F(0,0)移到了图像的中心,求出中心化F(0,0)的位置,根据尺寸获取相应的正方形频率子带,后将正方形频率子带进行反中心化和转换到空域中。
i=imread('lena.bmp');
subplot(1,2,1);imshow(i);title('原图');
f=double(i); %将矩阵转换为double型
F=fft2(f); %快速傅里叶变换
Fs=fftshift(F); %进行中心点平移
S=log(abs(Fs)+1); %取模并进行缩放
subplot(1,2,2);imshow(S,[]);title('中心化后的频谱图');
[h,w]=size(i);%求出原图的大小
Fs1=Fs(h/2-12:h/2+12,w/2-12:w/2+12);
fr1=real(ifft2(ifftshift(Fs1))); %频率域反变换到空间域,并取实部
ret1=mat2gray(fr1); %更改图像类型
subplot(2,2,1);imshow(ret1),title('25*25逆傅里叶变换');
Fs2=Fs(h/2-25:h/2+25-1,w/2-25:w/2+25-1);
fr2=real(ifft2(ifftshift(Fs2))); %频率域反变换到空间域,并取实部
ret2=mat2gray(fr2); %更改图像类型
subplot(2,2,2);imshow(ret2),title('50*50逆傅里叶变换')
Fs3=Fs(h/2-50:h/2+50-1,w/2-50:w/2+50-1);
fr3=real(ifft2(ifftshift(Fs3))); %频率域反变换到空间域,并取实部
ret3=mat2gray(fr3); %更改图像类型
subplot(2,2,3);imshow(ret3),title('100*100逆傅里叶变换')
总结:
傅里叶变换是将时域信号分解为不同频率的正弦信号或余弦函数叠加之和。图像的的边缘或噪声是突变部分,在频域中是高频分量,图像的平缓则为低频分量,图像的大部分信息存储在低频域中。将中心点平移后,低频信息移到频域图像的中间,可根据傅里叶系数来压缩数据。