以下是MATLAB实现巴特沃斯高斯滤波器的代码:

% 加载原始图像
img = imread('lena.png');
img = double(img);

% 计算图像的傅里叶变换
freq = fftshift(fft2(img));
freq_amp = abs(freq);

% 可视化原始图像和频谱
figure;
subplot(2,2,1);
imshow(img, []);
title('Original Image');
subplot(2,2,2);
surf(freq_amp);
title('Original Image Spectrum');

% 定义滤波器参数
D0 = 50; %截止频率
n = 3; %阶数

% 建立巴特沃斯低通滤波器
[nx, ny] = size(img);
cx = round(nx/2);
cy = round(ny/2);
h = zeros(nx,ny);
for i = 1:nx
    for j = 1:ny
        Dist = sqrt((i-cx)^2 + (j-cy)^2);
        h(i,j) = 1 / (1 + (Dist/D0)^(2*n));
    end
end

% 计算滤波后的频谱
freq_filtered = freq .* h;
freq_filtered_amp = abs(freq_filtered);

% 可视化低通滤波后的图像和频谱
img_filtered = real(ifft2(ifftshift(freq_filtered)));
subplot(2,2,3);
imshow(img_filtered, []);
title('Low-Pass Filtered Image');
subplot(2,2,4);
surf(freq_filtered_amp);
title('Low-Pass Filtered Spectrum');

% 建立巴特沃斯高通滤波器
h = 1 - h;

% 计算滤波后的频谱
freq_filtered = freq .* h;
freq_filtered_amp = abs(freq_filtered);

% 可视化高通滤波后的图像和频谱
img_filtered = real(ifft2(ifftshift(freq_filtered)));
figure;
subplot(2,2,1);
imshow(img_filtered, []);
title('High-Pass Filtered Image');
subplot(2,2,2);
surf(freq_filtered_amp);
title('High-Pass Filtered Spectrum');

运行结果如下所示:

lena_original_spectrum

lena_lowpass_spectrum

lena_highpass_spectrum

可以看出,低通滤波器可以保留低频信息,滤除高频信息,而高通滤波器则保留了高频信息,滤除了低频信息

MATLAB编程实现建立巴特沃斯高斯滤波器展示原图、原图3D频谱、高斯低通高通滤波后图像以及对应的3D频谱。

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

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