首页 > 学院 > 开发设计 > 正文

简单的图像频域滤波和频域锐化的matlab实现

2019-11-14 08:44:41
字体:
来源:转载
供稿:网友

图像频域滤波的步骤: 

(1)计算原图像f(x,y)的DFT/FFT,(2)将频谱的零频点移动到频谱图的中心位置;(3)计算滤波器函数H(U,V)与F(U,V)的乘积G(U,V);(频域相乘,时域卷积)(4)将频谱G(U,V)的零频点移回到频谱图的左上角。(5)计算(4)的结果的傅立叶反变换g(x,y);(6)取g(x,y)的实部作为最终的滤波后的结果图像。程序代码:
%% 频域高斯低通滤波和频域锐化的Matlab实现% Date:2017/2/5clc;clearall;I=imread('original_tletter.tif');I=double(I);[M,N]=size(I);m=(M+1)/2;n=(N+1)/2;d0=30;                      %截止频率F=fftshift(fft2(I));        %空域转频域,平移中心H=zeros(M,N);G=zeros(M,N);fori=1:M  forj=1:N       d=(i-m)^2+(j-n)^2;       H(i,j)=exp(-d/(2*d0^2));%%高斯滤波函数       G(i,j)=H(i,j)*F(i,j);   endendO=ifft2(ifftshift(G));          %平移中心,频域转空域O=real(O);                       %取实数部分 subplot(1,2,1);imshow(I,[]);title('原始图像');subplot(1,2,2);imshow(O,[]);title('频域高斯低通滤波'); %% 采用二阶巴特沃斯高通滤波器进行频域滤波nn=2;d0 = 5;m = fix(M/2);n = fix(N/2);fori = 1:M   forj = 1:N        d = sqrt((i-m)^2+(j-n)^2);       if(d==0)            h=0;       else            h = 1/(1+0.414*(d0/d)/(2*nn));       end        result(i,j) = h*G(i,j);   end  end    result = ifftshift(result);    J2 = ifft2(result);    J3 = uint8(real(J2));    figure,    subplot(1,2,1),imshow(I),title('原始图像');    subplot(1,2,2),imshow(J3),title('频域锐化图像');运行结果:   
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表