高斯低通和高斯高通滤波器

1.高斯低通滤波器(GLPF)

高斯低通滤波器的二维形式为:

其中,D0是截止频率,D(u,v)是距频率矩形中心的距离。高斯滤波器的宽度由参数 D0 表征,决定了平滑程度,而且 D0越大,高斯滤波器的频带就越宽,平滑程度就越好。因为噪声主要集中在高频段,所以通过高斯低通滤波器可以滤除噪声信息、平滑图像,但与此同时会滤除图像的细节信息,使图像变得模糊。

2.高斯高通滤波器(GHPF)

截止频率处在距频率矩形中心距离为 D0的高斯高通滤波器的传递函数为:

高通滤波与低通滤波正好相反,是频域图像的高频部分通过而抑制低频部分。在图像中图像的边缘对应高频分量,因此高通滤波的效果是图像锐化。通过高斯高通滤波器可以增强细节信息,提升图像的高频分量,减少低频分量,对微小物体和细线条也能很好地增强显示。

3.高通滤波与阈值滤波相结合

高通滤波与低通滤波正好相反,是频域图像的高频部分通过而抑制低频部分。在图像中图像的边缘对应高频分量,因此高通滤波的效果是图像锐化。

阈值处理是将滤波后的图像中的所有负值设置为黑、将所有正值设置为白后的结果。

程序代码和实验结果如下:

1.高斯低通滤波器(GLPF)

clc        %清除命令窗口的内容
close all  %关闭所有的Figure窗口
clear all  %清除工作空间的所有变量
%% 实现高斯低通滤波器,见函数GaussianLowpass()。
%% 对Fig. 4.41(a)进行高斯低通滤波结果
A = imread('Fig. 4.41(a).tif');
L=ILPF_hanshu(A,100);
imshow(L),title('显示为图像的滤波器');
[m,n] = size(A);
A = im2double(A);
F = fft2(A,2*m,2*n);
F1 = fftshift(F);
figure;
subplot(231),imshow(A),title('原图像');
D0=10;%截止频率设置在半径值为10处
H = GaussianLowpass(A,D0);
G = F1.*H;
F2 = ifftshift(G);
output = ifft2(F2);
output = output(1:size(A,1),1:size(A,2)); 
subplot(232),imshow(output),title('截止频率D0=10');

D0=30;%截止频率设置在半径值为30处
H = GaussianLowpass(A,D0);
G = F1.*H;
F2 = ifftshift(G);
output = ifft2(F2);
output = output(1:size(A,1),1:size(A,2)); 
subplot(233),imshow(output),title('截止频率D0=30');

D0=60;%截止频率设置在半径值为60处
H = GaussianLowpass(A,D0);
G = F1.*H;
F2 = ifftshift(G);
output = ifft2(F2);
output = output(1:size(A,1),1:size(A,2)); 
subplot(234),imshow(output),title('截止频率D0=60');

D0=160;%截止频率设置在半径值为160处
H = GaussianLowpass(A,D0);
G = F1.*H;
F2 = ifftshift(G);
output = ifft2(F2);
output = output(1:size(A,1),1:size(A,2)); 
subplot(235),imshow(output),title('截止频率D0=160');

D0=460;%截止频率设置在半径值为460处
H = GaussianLowpass(A,D0);
G = F1.*H;
F2 = ifftshift(G);
output = ifft2(F2);
output = output(1:size(A,1),1:size(A,2)); 
subplot(236),imshow(output),title('截止频率D0=460');


function H = GaussianLowpass(img,D0)
% 高斯低通滤波器

[M,N] = size(img);
H = zeros(2*M,2*N);

for u = 1:2*M
    for v = 1:2*N
        D_square = (u-M) * (u-M) + (v-N) * (v-N); 
        H(u,v) = exp(-D_square/(2*D0*D0));        
    end
end

end


%%理想低通滤波器函数
function H = ILPF_hanshu(img,D0) 
[m,n]=size(img);
P = 2*m;
Q = 2*n;
H = zeros(P,Q);
for u = 1:P
    for v = 1:Q
        D = ((u-m) * (u-m) + (v-n) * (v-n))^0.5; 
        if D <= D0
            H(u,v) = 1;
        else
            H(u,v) = 0;
        end
    end
end

end


实验结果:

高斯低通和高斯高通滤波器_第1张图片

编写高斯低通滤波函数,通过高斯低通滤波器后,实现如图效果,截止频率D0分别设置为10,30,60,160,460。其低频信息保留,高频细节被滤除。当截止频率较低时,滤波后图像虽然比原图像平滑,由于许多细节信息缺失,导致图像变得模糊不清。当截止频率较高时,图像比较清晰。

2.高斯高通滤波器(GHPF)

clc        %清除命令窗口的内容
close all  %关闭所有的Figure窗口
clear all  %清除工作空间的所有变量

%% 实现高斯高通滤波器
A = imread('Fig. 4.41(a).tif');
A = im2double(A);
[a,b] = size(A);
subplot(221),imshow(A),title('原图像');
F = fft2(A,2*a,2*b);
F3 = fftshift(F);
[a,b] = size(A);
W = zeros(2*a,2*b);
D0=30;
for u = 1:2*a
    for v = 1:2*b
        D_square = (u-a) * (u-a) + (v-b) * (v-b); 
        W(u,v) =1 - exp(-D_square/(2*D0*D0));        
    end
end
G = F3.*W;
F4 = ifftshift(G);
F1 = ifft2(F4);
F1 = F1(1:size(A,1),1:size(A,2)); 
subplot(222),imshow(F1),title('高通滤波D0=30');

D0=60;
for u = 1:2*a
    for v = 1:2*b
        D_square = (u-a) * (u-a) + (v-b) * (v-b); 
        W(u,v) =1 - exp(-D_square/(2*D0*D0));        
    end
end
G = F3.*W;
F4 = ifftshift(G);
F1 = ifft2(F4);
F1 = F1(1:size(A,1),1:size(A,2)); 
subplot(223),imshow(F1),title('高通滤波D0=60');

D0=120;
for u = 1:2*a
    for v = 1:2*b
        D_square = (u-a) * (u-a) + (v-b) * (v-b); 
        W(u,v) =1 - exp(-D_square/(2*D0*D0));        
    end
end
G = F3.*W;
F4 = ifftshift(G);
F1 = ifft2(F4);
F1 = F1(1:size(A,1),1:size(A,2)); 
subplot(224),imshow(F1),title('高通滤波D0=120');

实验结果:

高斯低通和高斯高通滤波器_第2张图片

通过高斯高通滤波,实现了如图的效果,通过高斯高通滤波器可以增强细节信息,提升图像的高频分量,减少低频分量,对微小物体和细线条也能很好地增强显示。D0分别取30,60和160。

3.高通滤波与阈值滤波相结合

clc        %清除命令窗口的内容
close all  %关闭所有的Figure窗口
clear all  %清除工作空间的所有变量
A = imread('Fig. 4.57(a).tif');
A = im2double(A);
[a,b] = size(A);
subplot(131),imshow(A),title('原图像');
F = fft2(A,2*a,2*b);
F3 = fftshift(F);
[a,b] = size(A);
W = zeros(2*a,2*b);
D0=50;
for u = 1:2*a
    for v = 1:2*b
        D_square = (u-a) * (u-a) + (v-b) * (v-b); 
        W(u,v) =1 - exp(-D_square/(2*D0*D0));        
    end
end
G = F3.*W;
F4 = ifftshift(G);
F1 = ifft2(F4);
F1 = F1(1:size(A,1),1:size(A,2)); 
subplot(132),imshow(F1),title('高通滤波D0=50');

B=F1;
for i=1:size(B,1)
for j=1:size(B,2)
if(B(i,j)>0)
B(i,j)=255;%阈值化的方法,从亮的背景中分割出暗的物体
elseif(B(i,j)<0)
B(i,j)=0;%阈值化的方法,从暗的背景中分割出亮的物体
end
end
end
subplot(133),imshow(B),title('阈值操作后的结果');

实验结果: 

高斯低通和高斯高通滤波器_第3张图片

使用截止频率为50的高斯高通滤波器进行滤波,高通滤波后的图像失去了它的灰度色调,因为直流项已被减小为0.最终结果是,高通滤波后的图像中,典型的暗色调已经成为主流,因此需要额外的处理来增强细节。

对滤波后的图像进行阈值处理,将图像中的所有负值设置为黑、将所有正值设置为白。结果是,脊线变得清晰,且污染明显较小,图像得到很好地增强。

你可能感兴趣的:(matlab,图像处理)