matlab用傅里叶变换实现图像的低通滤波

要求 

可以使用 MATLAB 的傅里叶变换函数和反变换函数。

原理部分

 

  • 低通滤波器指去除图像中的高频成分,而低通滤波器指去除图像中的高频成分。
  • 考虑的有三种低通滤波器:理想滤波器、布特沃斯滤波器和高斯滤波器。
  • 理想低通滤波器:以原点为圆心,D为半径的圆内, 无衰减地通过所有频率,在圆外截断所有频率。由下面函数确定:
  • 具体参见下图:

 

Matlab函数介绍

 

 

  • Fft2:二维快速傅里叶变换
  • Fftshift:移动零频点到频谱中间
  • Ifft2: 二维快速反傅里叶变换 

 

算法思路

对图像进行傅里叶变换(FFT),得到频谱;用理想低通滤波器对频谱滤波;对滤波后的频谱进行反傅里叶变换(IFFT),得到滤波后图像。见下图:

 

具体编程流程

 

1) 原始正常的图像,加噪处理,得到img_noise;

2) img_noise图像进行傅里叶变换,得到频谱;

3) 对得到的频谱进行理想低通滤波;

4) 对滤波后的频谱进行反傅里叶变换,得到滤波后图像

源码

 

%傅里叶变换的低通滤波
%低通滤波选用理想低通滤波方式
% d0 是阈值,可以修改,初步设定为50
% 
clear all;
close all;
clc;

img_origin=imread('C:\Users\yytang\Desktop\lena.jpg');
img_origin=rgb2gray(img_origin);
d0=50;  %阈值
img_noise=imnoise(img_origin,'salt'); % 加椒盐噪声
%img_noise=imnoise(img_origin,'gaussian'); % 加高斯噪声
img_f=fftshift(fft2(double(img_noise)));  %傅里叶变换得到频谱
[m n]=size(img_f);
m_mid=fix(m/2);  %是不是可以有其他取整方式?
n_mid=fix(n/2);  
img_lpf=zeros(m,n);
for i=1:m
    for j=1:n
        d=sqrt((i-m_mid)^2+(j-n_mid)^2);   %理想低通滤波,求距离
        if d<=d0
            h(i,j)=1;
        else
            h(i,j)=0;
        end
        img_lpf(i,j)=h(i,j)*img_f(i,j);  
    end
end

img_lpf=ifftshift(img_lpf);    %反傅里叶变换
img_lpf=uint8(real(ifft2(img_lpf)));  %取实数部分

subplot(2,2,1);imshow(img_origin);title('原图');
subplot(2,2,2);imshow(img_noise);title('噪声图');
subplot(2,2,3);imshow(img_lpf);title('理想低通滤波');

 

测试结果

 

分别对高斯噪声和椒盐噪声处理过的图像进行低通滤波,同时对于不同的阈值进行测试,具体测试结果见下图。

 

图1 高斯噪声阈值50结果图

 

图2 高斯噪声阈值为30结果图

图3 椒盐噪声阈值50的结果图

图4 椒盐噪音阈值30的结果图

 

思考1:可以尝试使用其他滤波方式?比如?

思考2:rgb图像如何处理?

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值