MATLAB实现巴特沃斯低通和高通滤波:图像与3D频谱分析
首先,我们需要导入一张图片并将其转换为灰度图像。在MATLAB中,可以使用imread和rgb2gray函数来实现。
% 导入图片并转换为灰度图像
img = imread('lena.jpg');
gray_img = rgb2gray(img);
% 显示原图像
figure();
subplot(1,2,1);
imshow(gray_img);
title('原图');
% 显示原图像的3D频谱
subplot(1,2,2);
freq = fft2(gray_img);
freq = fftshift(freq);
freq = abs(freq);
freq = log(freq+1);
freq = mat2gray(freq);
surf(freq);
title('原图3D频谱');
接下来,我们可以使用butter函数来实现巴特沃斯低通和高通滤波。需要注意的是,我们需要指定滤波器的阶数和截止频率。在这里,我们将阶数设置为2,截止频率设置为0.1。
% 巴特沃斯低通滤波
lowpass_freq = 0.1;
lowpass_n = 2;
[b, a] = butter(lowpass_n, lowpass_freq, 'low');
lowpass_img = filter(b, a, double(gray_img)/255);
lowpass_img = uint8(lowpass_img*255);
% 显示巴特沃斯低通滤波后的图像
figure();
subplot(1,2,1);
imshow(lowpass_img);
title('巴特沃斯低通滤波后图像');
% 显示巴特沃斯低通滤波后的3D频谱
subplot(1,2,2);
freq = fft2(lowpass_img);
freq = fftshift(freq);
freq = abs(freq);
freq = log(freq+1);
freq = mat2gray(freq);
surf(freq);
title('巴特沃斯低通滤波后3D频谱');
% 巴特沃斯高通滤波
highpass_freq = 0.1;
highpass_n = 2;
[b, a] = butter(highpass_n, highpass_freq, 'high');
highpass_img = filter(b, a, double(gray_img)/255);
highpass_img = uint8(highpass_img*255);
% 显示巴特沃斯高通滤波后的图像
figure();
subplot(1,2,1);
imshow(highpass_img);
title('巴特沃斯高通滤波后图像');
% 显示巴特沃斯高通滤波后的3D频谱
subplot(1,2,2);
freq = fft2(highpass_img);
freq = fftshift(freq);
freq = abs(freq);
freq = log(freq+1);
freq = mat2gray(freq);
surf(freq);
title('巴特沃斯高通滤波后3D频谱');
完整代码如下:
% 导入图片并转换为灰度图像
img = imread('lena.jpg');
gray_img = rgb2gray(img);
% 显示原图像
figure();
subplot(1,2,1);
imshow(gray_img);
title('原图');
% 显示原图像的3D频谱
subplot(1,2,2);
freq = fft2(gray_img);
freq = fftshift(freq);
freq = abs(freq);
freq = log(freq+1);
freq = mat2gray(freq);
surf(freq);
title('原图3D频谱');
% 巴特沃斯低通滤波
lowpass_freq = 0.1;
lowpass_n = 2;
[b, a] = butter(lowpass_n, lowpass_freq, 'low');
lowpass_img = filter(b, a, double(gray_img)/255);
lowpass_img = uint8(lowpass_img*255);
% 显示巴特沃斯低通滤波后的图像
figure();
subplot(1,2,1);
imshow(lowpass_img);
title('巴特沃斯低通滤波后图像');
% 显示巴特沃斯低通滤波后的3D频谱
subplot(1,2,2);
freq = fft2(lowpass_img);
freq = fftshift(freq);
freq = abs(freq);
freq = log(freq+1);
freq = mat2gray(freq);
surf(freq);
title('巴特沃斯低通滤波后3D频谱');
% 巴特沃斯高通滤波
highpass_freq = 0.1;
highpass_n = 2;
[b, a] = butter(highpass_n, highpass_freq, 'high');
highpass_img = filter(b, a, double(gray_img)/255);
highpass_img = uint8(highpass_img*255);
% 显示巴特沃斯高通滤波后的图像
figure();
subplot(1,2,1);
imshow(highpass_img);
title('巴特沃斯高通滤波后图像');
% 显示巴特沃斯高通滤波后的3D频谱
subplot(1,2,2);
freq = fft2(highpass_img);
freq = fftshift(freq);
freq = abs(freq);
freq = log(freq+1);
freq = mat2gray(freq);
surf(freq);
title('巴特沃斯高通滤波后3D频谱');
原文地址: https://www.cveoy.top/t/topic/oy40 著作权归作者所有。请勿转载和采集!