Matlab低通滤波器的使用--频域图像增强实验

//添加噪声
C=imread('');
image=double(C);//转换成double
[h,w]=size(image);
image2=uint8(zeros(h,w));
for i=1:h
    for j=1:w
        image2(i,j)=image(i,j);
        if rand(1,1)>=0.99 //大于该值产生焦点
            if rand(1,1)>=0.5 //大于0.5产生白点
            image2(i,j)=(255);
            else
            image2(i,j)=(0);//否则产生黑点
            end
        end
    end
end
//高斯低通滤波器
f1=im2double(image2);
D0=40;
g1=fft2(f1);//傅立叶变换
g1=fftshift(g1);//转换数据矩阵
[M1,N1]=size(g1);//如果图像f(x,y)的尺寸为M×N,则对(-1)(x+y)f(x,y)进行傅立叶变换后的频率平面的原点在(M/2,N/2)
m1=fix(M1/2);
n1=fix(N1/2);
s1=zeros(M1,N1);
for i=1:M1
   for j=1:N1
        d=sqrt((i-m1)^2+(j-n1)^2);//D(u,v)为频率平面从原点到点(u,v)的距离
        h1=exp((-d^2)/(2*(D0^2)));//计算高斯低通滤波器传递函数
        s1(i,j)=h1*g1(i,j);
   end
end
y1=ifft2(ifftshift(s1));
y1=log(1+abs(y1));
//巴特沃斯低通滤波器
f2=im2double(image2);
g2=fft2(f2);
g2=fftshift(g2);
n0=2;
[M2,N2]=size(g2);
m2=fix(M2/2);
n2=fix(N2/2);
s2=zeros(M2,N2);
for i=1:M2
   for j=1:N2
        d=sqrt((i-m2)^2+(j-n2)^2);
        h2=1/(1+(d/D0)^(2*n0));//计算巴特沃斯低通滤波器传递函数
        s2(i,j)=h2*g2(i,j);
 
   end
end
//绘画
figure;
subplot(2,2,1);imshow(C);
title('原图');
subplot(2,2,2);imshow(imamge2);
title('椒盐噪声后');
y2=ifft2(ifftshift(s2));
y2=log(1+abs(y2));
//如果图像进行傅里叶转换后立即用imshow函数显示,则在命令行可能会显示:Warning: Displaying real part of complex input(警告: 显示复数输入项的实部)。这是因为经过傅里叶变换后的图像矩阵大多是复数矩阵,包含实部和虚部。
//此时如要显示图像则需要先用abs取复数矩阵的模,再进行显示
subplot(2,2,3);imshow(y1,[]);
//当图像是double类型时要使用imshow(I,[])来根据数据矩阵的数值范围自动设置灰度图像显示范围
title('高斯低通滤波器处理后');
subplot(2,2,4);imshow(y2,[]);
title('巴特沃斯低通滤波器处理后');
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值