Matlab图像处理频域滤波实现——理想低通、高通、带通带阻滤波器

1.原理

(1)理想低通滤波

理想低通滤波是一种通过滤除图像中高频成分来实现图像平滑的滤波方法。其基本原理是将频域中高频成分设为零,只保留低频成分。在频域中,理想低通滤波器的传递函数为:

其中D(u,v) 是频域中点 (u,v) 到中心的距离,D0​ 是截止频率。

(2)理想高通滤波

理想高通滤波与低通滤波相反,它通过滤除图像中的低频成分来增强图像中的细节和边缘。其频域中的传递函数为:

 其中 D(u,v) 和 D0​ 同上。

(3)理想带通滤波

理想带通滤波保留图像中一定频率范围内的成分,同时滤除低频和高频成分。其频域中的传递函数为:

 其中 D0​ 和 D1​ 是两个截止频率。

(4)理想带阻滤波

理想带阻滤波与带通滤波相反,它滤除一定频率范围内的成分,同时保留低频和高频成分。其频域中的传递函数为:

 其中 D0​ 和 D1​ 是两个截止频率。

2.实现代码

(1)理想低通滤波
clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I = im2double(I);
M = 2 * size(I, 1);   % 滤波器的行数
N = 2 * size(I, 2);   % 滤波器的列数
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2);
D0 = 100;               % 截止频率
H = double(D <= D0);   % 理想低通滤波器
J = fftshift(fft2(I, size(H, 1), size(H, 2)));  % 空域图像转换到频域
K = J .* H;                                     % 滤波处理
L = ifft2(ifftshift(K));                        % 傅里叶反变换 
L = L(1:size(I, 1), 1:size(I, 2));
% 显示原始图像和滤波后的图像
figure;
% 显示原始图像
subplot(221);
imshow(I);
title('原始图像');
% 显示滤波后的图像
subplot(222);
imshow(L);
title('滤波后的图像');
% 显示原始图像的频域
subplot(223);
imagesc(log(1 + abs(J)));
title('原始图像的频域');
% 显示滤波后图像的频域
subplot(224);
imagesc(log(1 + abs(K)));
title('滤波后图像的频域');

Matlab图像处理频域滤波实现——理想低通、高通、带通带阻滤波器_第1张图片 

(2)理想高通滤波
clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I = im2double(I);
M = 2 * size(I, 1);   % 滤波器的行数
N = 2 * size(I, 2);   % 滤波器的列数
u = -M/2:(M/2-1);
v = -N/2:(N/2-1);
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2);
D0 = 100;               % 截止频率
H = double(D >= D0);   % 理想高通滤波器
J = fftshift(fft2(I, size(H, 1), size(H, 2)));  % 空域图像转换到频域
K = J .* H;                                     % 滤波处理
L = ifft2(ifftshift(K));                        % 傅里叶反变换 
L = L(1:size(I, 1), 1:size(I, 2));
% 显示原始图像和滤波后的图像
figure;
% 显示原始图像
subplot(221);
imshow(I);
title('原始图像');
% 显示滤波后的图像
subplot(222);
imshow(L);
title('滤波后的图像');
% 显示原始图像的频域
subplot(223);
imagesc(log(1 + abs(J)));
title('原始图像的频域');
% 显示滤波后图像的频域
subplot(224);
imagesc(log(1 + abs(K)));
title('滤波后图像的频域');

 

(3)理想带通滤波
clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=imnoise(I, 'gaussian', 0, 0.01);%添加噪声
I=im2double(I);  		
M=2*size(I,1);                    %滤波器的行数
N=2*size(I,2);                    %滤波器的列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u, v);
D=sqrt(U.^2+V.^2);
D0=50;                           %滤波器的截止频率
W=30;                            %滤波器的带宽
H=double(or(D>(D0-W/2), D

 

(4)理想带阻滤波
clear
clc
I = imread('1.jpg');  % 读入图像
I = rgb2gray(I);
I=imnoise(I, 'gaussian', 0, 0.01);%添加噪声
I=im2double(I);  		
M=2*size(I,1);                    %滤波器的行数
N=2*size(I,2);                    %滤波器的列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u, v);
D=sqrt(U.^2+V.^2);
D0=50;                           %滤波器的截止频率
W=30;                            %滤波器的带宽
H=double(or(D<(D0-W/2), D>D0+W/2));
J=fftshift(fft2(I, size(H, 1), size(H, 2))); %空域转换到频域
K=J.*H;                                      %滤波处理
L=ifft2(ifftshift(K));                       %频域转换到空域图像
L=L(1:size(I,1), 1:size(I, 2));              %调整图像大小

% 显示原始图像和滤波后的图像
figure;
% 显示原始图像
subplot(221);
imshow(I);
title('原始图像');
% 显示滤波后的图像
subplot(222);
imshow(L);
title('滤波后的图像');
% 显示原始图像的频域
subplot(223);
imagesc(log(1 + abs(J)));
title('原始图像的频域');
% 显示滤波后图像的频域
subplot(224);
imagesc(log(1 + abs(K)));
title('滤波后图像的频域');

 

需要注意的是,理想滤波在实际应用中可能会引入伪影和振铃等问题,因此在实际图像处理中,常常使用其他类型的滤波器,如巴特沃斯滤波器、高斯滤波器等,来避免这些问题。

最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

你可能感兴趣的:(图像处理,matlab,图像处理,开发语言,计算机视觉)