ButterWorth滤波器学习(参照博主链接——https://blog.youkuaiyun.com/cjsh_123456/article/details/79342300)

本文记录了作者在学习ButterWorth滤波器的过程中,参照某博主的文章进行的实践操作。首先,将彩色图像转换为灰度图以适配滤波器,然后运行滤波器代码。提醒读者注意图像尺寸不宜过大,以免导致MATLAB脚本终止。此外,还分享了解决jpg转bmp图像问题的小技巧,即使用Windows 10的3D画图工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ButterWorth滤波器学习(参照博主链接——https://blog.youkuaiyun.com/cjsh_123456/article/details/79342300,非常感谢!),仅作个人学习记录

因为实验需要,需要了解该滤波器相关内容,参照该博主实验了他的以下代码——
函数代码:

function [image_out] = Bfilter(image_in, D0, N)
% Butterworth滤波器,在频率域进行滤波
% 输入为需要进行滤波的灰度图像,Butterworth滤波器的截止频率D0,阶数N
% 输出为滤波之后的灰度图像

[m, n] = size(image_in);
P = 2 * m;
Q = 2 * n;

fp = zeros(P, Q);
%对图像填充0,并且乘以(-1)^(x+y) 以移到变换中心
for i = 1 : m
    for j = 1 : n
        fp(i, j) = double(image_in(i, j)) * (-1)^(i+j);
    end
end
% 对填充后的图像进行傅里叶变换
F1 = fft2(fp);

% 生成Butterworth滤波函数,中心在(m+1,n+1)
Bw = zeros(P, Q);
a = D0^(2 * N);
for u = 1 : P
    for v = 1 : Q
        temp = (u-(m+1.0))^2 + (v-(n+1.0))^2;
        Bw(u, v) = 1 / (1 + (temp^N) / a);
    end
end

%进行滤波
G = F1 .* Bw;

% 反傅里叶变换
gp = ifft2(G);

% 处理得到的图像
image_out = zeros(m, n, 'uint8');
gp = real(gp);
g = zeros(m, n);
for i = 1 : m
    for j = 1 : n
        g(i, j) = gp(i, j) * (-1)^(i+j);
        
    end
end
mmax = max(g(:));
mmin = min(g(:));
range = mmax-mmin;
for i = 1 : m
    for j = 1 : n
        image_out(i,j) = uint8(255 * (g(i, j)-mmin) / range);
    end
end

end

脚本代码:

clear all;
close all;
clc;
image1 = imread('C:\1.bmp');
image1 = rgb2gray(image1)
image2 = Bfilter(image1, 10, 2);
image3 = Bfilter(image1, 30, 2);
image4 = Bfilter(image1, 60, 2);
image5 = Bfilter(image1, 160, 2);
image6 = Bfilter(image1, 460, 2);

% 显示图像
subplot(2,3,1), imshow(image1), title('原图像');
subplot(2,3,2), imshow(image2), title('D0 = 10, n = 2');
subplot(2,3,3), imshow(image3), title('D0 = 30, n = 2');
subplot(2,3,4), imshow(image4), title('D0 = 60, n = 2');
subplot(2,3,5), imshow(image5), title('D0 = 160, n = 2');
subplot(2,3,6), imshow(image6), title('D0 = 460, n = 2');

使用的图像为1.bmp
在这里插入图片描述
对比该博主文章中的脚本代码,我多了一行代码(即image1 = rgb2gray(image1) %将彩图转为灰度图),这是应为我使用的是三维彩色图片,否则运行结果如下——
在这里插入图片描述

转为灰度图后后再调用以上函数输出图像如下——

在这里插入图片描述

注意:使用的图像尺寸不能太大,否则image1的矩阵过大也会导致matlab脚本终止

注:jpg转bmp图像问题,利用win10系统的3D画图工具打开合适大小目标jpg或png图像,另存问bmp图像即可

最后感谢该播主的解惑!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值