实现原理
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。
对于二维信号,二维Fourier变换定义为:
逆变换:
二维离散傅立叶变换为:
逆变换:
实现代码
I2 = imread ('xiaochou.tif'); %读入原图像文件
I =rgb2gray(I2);
FFT = fft2(I);
myangle = angle(FFT);
fftI=fft2(I); %二维离散傅立叶变换
sfftI=fftshift(fftI); %直流分量移到频谱中心
RR=real(sfftI); %取傅立叶变换的实部
II=imag(sfftI); %取傅立叶变换的虚部
A=sqrt(RR.^2+II.^2); %计算频谱幅值
A=(A-min(min(A)))./(max(max(A))-min(min(A)))*225; %归一化
B=A;
[m,n]=size(A);
x=35;
y=19;
A(1:m/2-y,n/2+x:n)= 0;
A(m/2+y:m,1:n/2-x) = 0;
j=15;
k=10;
A(1:m/2-k,1:n/2-j)= 0;
A(m/2+k:m,n/2+j:n) = 0; % myangle = angle(FFT);
aaa = ifftshift(A); % 将处理后的幅度图反移位,恢复到正常状态
bbb = aaa.*cos(myangle) + aaa.*sin(myangle).*1i; % 幅度值和相位值重新进行结合,得到复数
fr = abs(ifft2(bbb)); % 进行傅里叶反变换,得到处理后的时域图像
ret = im2uint8(mat2gray(fr));
figure;
subplot(221),imshow(B),title('原图像频谱');
subplot(222),imshow(A),title('处理后图像频谱');
subplot(223),imshow(I),title('原图像');
subplot(224),imshow(ret),title('处理后图像'); %去除高频成分后的图像
最后效果