# 接巴特沃斯低通滤波器,记录一下巴特沃斯高通滤波器
巴特沃斯高通滤波器与巴特沃斯低通滤波器类似,但是其目标是增强高频信号。与巴特沃斯低通滤波器一样,巴特沃斯高通滤波器也有一个阶数参数 n,用来控制滤波器的“软硬”程度。
在 MATLAB 中,我们同样计算每个像素到图像中心的距离,然后根据巴特沃斯滤波器公式:1 / (1 + (距离 / 截止频率)^(2*n)),计算滤波器的值。
注意这个转移函数的分母里面是1+[ D0 / D(u,v) ]^2n
巴特沃斯低通滤波器的转移函数分母里面是1+[ D(u,v) / D0 ]^2n
那么关于高斯高通滤波器:
高斯高通滤波器的设计基于高斯分布函数,类似于高斯低通滤波器。不过高斯高通滤波器的目标是增强高频信号,从而实现图像的锐化。
在 MATLAB 中,我们首先创建一个二维的高斯分布函数,其中心为图像中心,方差与截止频率相关。然后将该函数应用于频域图像,即可得到高斯高通滤波器。
MATLAB 语法中,二维数组的创建使用 ones()
函数或 zeros()
函数,通过遍历每个像素点计算距离并进行滤波器值的设定。对于循环操作,MATLAB 提供了 for
循环结构,用于迭代遍历数组中的每个元素。
最后贴一下本次作业这部分的matlab代码吧
% 作者: 你猜不到我是谁
% 编辑时间: 2024-04-10
% 描述:完成第三次实验第三部分锐化频域滤波:
% (1)设计理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器,截止频率自选。
% (2)读出图像,分别采用理想高通滤波器、巴特沃斯高通滤波器和指数型高通滤波器对其进行滤波(截止频率分别为 15,20,80),再做反变换得到高通滤波后的空域图像。
% 观察不同的截止频率下采用不同高通滤波 器得到的图像与原图像的区别。
clc;close all;clear;
im = imread('room.png');
im = im2double(im); % 转换为 double 类型
% 设置截止频率
cutoff_frequency = 15; % 自选
% 创建理想高通滤波器
[M, N] = size(im);
ideal_highpass_filter = ones(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
ideal_highpass_filter(i, j) = 0;
end
end
end
% 创建巴特沃斯高通滤波器
n = 2; % 巴特沃斯滤波器阶数
butterworth_highpass_filter = 1 ./ (1 + (cutoff_frequency ./ distance).^(2*n));
% 创建高斯高通滤波器
[X, Y] = meshgrid(1:N, 1:M);
gaussian_highpass_filter = 1 - exp(-((X-center_x).^2 + (Y-center_y).^2) / (2*(cutoff_frequency)^2));
% 读入图像
% im = imread('room.png'); % 替换为你的图像文件名
% im = im2double(im); % 转换为 double 类型
[M, N] = size(im);
% 进行傅里叶变换
im_fft = fftshift(fft2(im));
% 应用滤波器
filtered_im_fft_ideal = im_fft .* ideal_highpass_filter;
filtered_im_fft_butterworth = im_fft .* butterworth_highpass_filter;
filtered_im_fft_gaussian = im_fft .* gaussian_highpass_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('高斯高通滤波器');
参考: