Matlab 实现低通/高通/带通滤波器

本文提供圆形及方形滤波器的实现代码,适用于图像处理中的低通、高通滤波需求,通过修改参数可轻松调整滤波器孔径。

问题

在进行语音、图像、光学成像相关的实验时,可能需要用到低通滤波器或高通滤波器。


解决

以方形滤波器和圆形高低通滤波器为例,直接上代码!!!带通滤波器只需要根据代码加个外径即可,而特殊形状的滤波器可以参考我的另一篇经验分享

1、圆形滤波器(可以利用循环和k值创建不同孔径的圆形滤波器)

clc;clear;set(0,'defaultfigurecolor','w'); % 将画布默认底色改为白色
[f,map] = imread('...\Origin_Picture.jpg'); % 读取原始图片
f = rgb2gray(f); % 将三通道RGB图片转为灰度图
[m,n] = size(f); % 读取图片尺寸
F = fftshift(fft2(double(f))); % 傅里叶变换
d0 = 20; % 设置滤波器频段
flag = 1; % 高低通滤波器选择(1为低通)

H = ones(m,n); %全通滤波器矩阵
for k = 0:2
for u = 1:m
    for v = 1:n
        d = sqrt((u-0.5*m-1).^2+(v-0.5*n-1).^2); %以矩阵中心为圆心绘制圆孔
        if flag == 1 %低通滤波器
            if d <= d0+40*k %不同孔径的圆形滤波器,步长40
                H(u,v) = 1;
                H(u,v) = double(H(u,v));
            else
                H(u,v) = 0;
                H(u,v) = double(H(u,v));
            end
        else  %高通滤波器
            if d <= d0+40*k %不同孔径的圆形滤波器,步长40
                H(u,v) = 0;
                H(u,v) = double(H(u,v));
            else
                H(u,v) = 1;
                H(u,v) = double(H(u,v));
            end
        end
    end
end 
end

G=H.*F; %进行滤波

2、方形滤波器

clc;clear;
f=imread('...\new.bmp');
f=rgb2gray(f); 
[m,n]=size(f);
figure(1),subplot(2,3,1),imshow(f);xlabel('原图像');
F=fftshift(fft2(double(f)));
H=zeros(m,n);
for u=1:m
    for v=1:n
        d0=50;

        if  ((m/2-d0)<=u)&& (u<=(m/2+d0)) && ((n/2-d0)<=v)&&(v<=(n/2+d0)
            H(u,v)=1;
            H(u,v)=double(H(u,v));
        else
            H(u,v)=0;
            H(u,v)=double(H(u,v));
        end
    end
end 
G=H.*F;

希望我的分享可以帮到你!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想是优秀社畜

您的打赏是对我最大的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值