有关巴特沃斯低通滤波器(BLPF)(含振铃效应介绍)

# 在使用matlab完成课程作业的时候要求设计一个巴特沃斯低通滤波器,其中提到了振铃效应。

首先介绍一下这个滤波器(BLPF),巴特沃斯低通滤波器与理想低通滤波器相似,但是它引入了阶数参数 n。该参数决定了滤波器的“软硬”程度。阶数越高,滤波器越陡峭,过渡带越窄,因此滤波器的截止频率附近有更少的振铃效应。

注意这个转移函数的分母里面是1+[ D(u,v) / D0 ]^2n

巴特沃斯高通滤波器的转移函数分母里面是1+[ D0 / D(u,v) ]^2n

50d2facb1845477b86ec78ab8f294698.png

074f6061b86e40728ab82f31f70b5211.png

0cdcc69e73ac48eaa118d3ff6d6e19ce.png

31cc5d9da37e4608adac9570ac52e314.png

7932286317544b69a695dd1246543cfb.png

另外,在信号处理中,特别是数位影像处理 ,振铃效应是一种出现在信号快速转换时,附加在转换边缘上导致失真的信号。而在图像或影像上,振铃效应会导致出现在边缘附近的环带或像是“鬼影”的环状伪影,称为振铃伪像[1](ringing artifact);在音讯中,振铃效应会导致出现在短暂音附近的回声,特别是由打击乐器发出的声音;最容易注意到的是预回声。使用“振铃”这一个词则是因为输出信号在输入信号快速转换的边缘附近出现一有一定衰减速度的振荡,这个现象相似于被敲击之后发出声音的过程。振铃效应就如同其他的失真一样,他们的最小化在滤波器设计中是很重要的一项指标。

提一下高斯低通滤波器:

高斯低通滤波器的设计基于高斯分布函数。它具有连续性和光滑性,没有理想低通滤波器和巴特沃斯低通滤波器的振铃效应。高斯滤波器通过控制方差来调节频率域的衰减速度。

在 MATLAB 中,我们首先创建一个二维的高斯分布函数,其中心为图像中心,方差与截止频率相关。然后将该函数应用于频域图像,即可得到高斯低通滤波器。

MATLAB 语法中,二维数组的创建使用 zeros() 函数或 ones() 函数,通过遍历每个像素点计算距离并进行滤波器值的设定。对于循环操作,MATLAB 提供了 for 循环结构,用于迭代遍历数组中的每个元素。

这里贴一下本次作业这部分的代码

% 作者: 你猜不到我是谁
% 编辑时间: 2024-04-10
% 描述:完成第三次实验第二部分平滑频域滤波:
% (1)设计理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器,截止频率自选。
% (2)读出图像,加入椒盐躁声,分别采用上题设计的理想低通滤波器、巴特沃斯低通滤波器和指数型低通滤波器对其进行滤波,再做逆变换得到低通滤波后的空域图像。
%   观察不同的截止频率下采用不同低通滤波器得到的图像与原图像的区别,特别注意振铃效应。

clc;close all;clear;

im = imread('room.png');
im = im2double(im); % 转换为 double 类型

% 设置截止频率
cutoff_frequency = 0.1;

% 创建理想低通滤波器
[M, N] = size(im);
ideal_lowpass_filter = zeros(M, N);
center_x = floor(M/2) + 1;
center_y = floor(N/2) + 1;
for i = 1:M
    for j = 1:N
        distance = sqrt((i - center_x)^2 + (j - center_y)^2);
        if distance <= cutoff_frequency * sqrt(M^2 + N^2)
            ideal_lowpass_filter(i, j) = 1;
        end
    end
end

% 创建巴特沃斯低通滤波器
n = 2; % 巴特沃斯滤波器阶数
butterworth_lowpass_filter = zeros(M, N);
for i = 1:M
    for j = 1:N
        distance = sqrt((i - center_x)^2 + (j - center_y)^2);
        butterworth_lowpass_filter(i, j) = 1 / (1 + (distance / (cutoff_frequency * sqrt(M^2 + N^2)))^(2*n));
    end
end

% 创建高斯低通滤波器
[X, Y] = meshgrid(1:N, 1:M);
gaussian_lowpass_filter = exp(-((X-center_x).^2 + (Y-center_y).^2) / (2*(cutoff_frequency * sqrt(M^2 + N^2))^2));

% im = imread('room.png'); 
% im = im2double(im); % 转换为 double 类型
[M, N] = size(im);

% 添加椒盐噪声
noise_density = 0.05; % 噪声密度
salt_pepper = rand(M, N);
im(salt_pepper < noise_density/2) = 0; % 椒噪声
im(salt_pepper > 1 - noise_density/2) = 1; % 盐噪声

% 进行傅里叶变换
im_fft = fftshift(fft2(im));

% 应用滤波器
filtered_im_fft_ideal = im_fft .* ideal_lowpass_filter;
filtered_im_fft_butterworth = im_fft .* butterworth_lowpass_filter;
filtered_im_fft_gaussian = im_fft .* gaussian_lowpass_filter;

% 进行逆傅里叶变换
filtered_im_ideal = real(ifft2(ifftshift(filtered_im_fft_ideal)));
filtered_im_butterworth = real(ifft2(ifftshift(filtered_im_fft_butterworth)));
filtered_im_gaussian = real(ifft2(ifftshift(filtered_im_fft_gaussian)));

% 显示滤波后的图像
figure;
subplot(2, 2, 1), imshow(im), title('原始图像');
subplot(2, 2, 2), imshow(filtered_im_ideal), title('理想低通滤波器');
subplot(2, 2, 3), imshow(filtered_im_butterworth), title('巴特沃斯低通滤波器');
subplot(2, 2, 4), imshow(filtered_im_gaussian), title('高斯低通滤波器');

参考:

维基百科对振铃效应的解释

与open ai的GPT3.5的对话

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值