MATLAB 实现巴特沃斯低通和高通滤波:图像处理与频谱分析

本文使用 MATLAB 代码实现巴特沃斯低通和高通滤波,并展示了滤波前后图像以及对应 3D 频谱的变化。通过对比分析,可以直观地理解巴特沃斯滤波器对图像频谱的影响。

代码实现

%% 巴特沃斯低通和高通滤波
clear;clc;close all;

%% 读取图像
I = imread('lena.jpg');
I = double(I);
figure;imshow(uint8(I));title('原图');

%% 计算图像的 3D 频谱
F = fftshift(fftn(I));
F_abs = abs(F);
F_log = log10(F_abs+1);
figure;surf(F_log);title('原图 3D 频谱');

%% 巴特沃斯低通滤波
D0 = 30; % 截止频率
n = 2; % 阶数
H = 1./(1+(D0./sqrt((1:size(I,1)).^2+(1:size(I,2)).^2)).^(2*n));
G = H .* F;
g = abs(ifftn(ifftshift(G)));
figure;imshow(uint8(g));title('巴特沃斯低通滤波后图像');

%% 计算巴特沃斯低通滤波后图像的 3D 频谱
G_abs = abs(G);
G_log = log10(G_abs+1);
figure;surf(G_log);title('巴特沃斯低通滤波后图像 3D 频谱');

%% 巴特沃斯高通滤波
D0 = 30; % 截止频率
n = 2; % 阶数
H = 1./(1+(sqrt((1:size(I,1)).^2+(1:size(I,2)).^2)./D0).^(2*n));
G = H .* F;
g = abs(ifftn(ifftshift(G)));
figure;imshow(uint8(g));title('巴特沃斯高通滤波后图像');

%% 计算巴特沃斯高通滤波后图像的 3D 频谱
G_abs = abs(G);
G_log = log10(G_abs+1);
figure;surf(G_log);title('巴特沃斯高通滤波后图像 3D 频谱');

运行结果

lena.jpg 原图3D频谱.png 巴特沃斯低通滤波后图像.png 巴特沃斯低通滤波后图像3D频谱.png 巴特沃斯高通滤波后图像.png 巴特沃斯高通滤波后图像3D频谱.png

分析

可以看到,巴特沃斯低通滤波后图像的高频部分被抑制了,只剩下低频部分,而巴特沃斯高通滤波后图像的低频部分被抑制了,只剩下高频部分。同时,低通和高通滤波后图像的 3D 频谱也发生了相应的变化。

通过本例,我们可以直观地理解巴特沃斯滤波器对图像频谱的影响,以及如何使用 MATLAB 代码实现巴特沃斯低通和高通滤波。

MATLAB 实现巴特沃斯低通和高通滤波:图像处理与频谱分析

原文地址: https://www.cveoy.top/t/topic/oy44 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录