MATLAB编程实现建立巴特沃斯高斯滤波器展示原图、原图3D频谱、高斯低通高通滤波后图像以及对应的3D频谱。
以下是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');
运行结果如下所示:



可以看出,低通滤波器可以保留低频信息,滤除高频信息,而高通滤波器则保留了高频信息,滤除了低频信息
原文地址: https://www.cveoy.top/t/topic/gXgK 著作权归作者所有。请勿转载和采集!