高斯滤波是图像处理中常用的一种滤波方法,它基于高斯分布的函数来设计滤波器,具有平滑图像的特性。下面是高斯滤波不同类型的原理简介:
1.原理
(1)高斯低通滤波(Gaussian Lowpass Filtering)
高斯低通滤波器通过对图像进行高斯模糊,滤除图像中的高频成分,从而实现图像的平滑。其频域中的传递函数为:
其中 D(u,v) 是频域中点(u,v) 到中心的距离,σ 是高斯分布的标准差。
(2)高斯高通滤波(Gaussian Highpass Filtering)
高斯高通滤波器通过对图像进行高斯锐化,保留图像中的高频细节,从而增强图像的边缘。其频域中的传递函数为:
其中 D(u,v) 是频域中点(u,v) 到中心的距离,σ 是高斯分布的标准差。
(3)高斯带通滤波(Gaussian Bandpass Filtering)
高斯带通滤波器通过在频域中选择一定范围内的频率来保留图像的一部分信息,同时滤除低频和高频成分。其传递函数为:
其中D(u,v) 是频域中点 (u,v) 到中心的距离,σ 是高斯分布的标准差,D0 是带通滤波的截止频率。
(4)高斯带阻滤波(Gaussian Bandstop Filtering)
高斯带阻滤波器与带通滤波器相反,它通过在频域中选择一定范围内的频率来滤除图像的一部分信息,同时保留低频和高频成分。其传递函数为:
其中D(u,v) 和 D0、D1 同上,n 是滤波器的阶数。
2.实现代码
(1)高斯低通滤波(Gaussian Lowpass Filtering)
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);
sigma=20; %截止频率
H=exp(-(D.^2)./(2*(sigma^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('滤波后图像的频域');
(2)高斯高通滤波(Gaussian Highpass Filtering)
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);
sigma=20; %截止频率
H=1-exp(-(D.^2)./(2*(sigma^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('滤波后图像的频域');
(3)高斯带通滤波(Gaussian Bandpass Filtering)
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=5; %截止频率
sigma=10;
H=1-exp(-(D.^2-D0.^2)./(2*(sigma^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('滤波后图像的频域');
(4)高斯带阻滤波(Gaussian Bandstop Filtering)
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=5; %截止频率
sigma=10;
H=exp(-(D.^2-D0.^2)./(2*(sigma^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仿真......希望能帮到你!