高斯低通滤波器函数
function [image_out] = GLPF(image_in,D0)
%GLPF为高斯低通滤波器,D0为截止频率
%输入为需要进行高斯低通滤波的灰度图像,输出为经过滤波之后的灰度图像
f=image_in;
f=im2double(f);
% 1、给定一副大小为M×N的输入图像f(x,y),得到填充参数P=2M,Q=2N
M=size(f,1); N=size(f,2);
P=2*M; Q=2*N;
% 2、对输入图像f(x,y)添加必要数量的0,形成大小为P×Q的填充图像fp(x,y)
fp=zeros(P,Q);
fp(1:M,1:N)=f(1:M,1:N);
% 3、用(-1)^(x+y)乘以fp(x,y)移到其变换的中心
for i=1:P
for j=1:Q
fp(i,j)=(-1)^(i+j)*double(fp(i,j));
end
end
% 4、计算来自步骤3的图像的DFT,得到F(u,v)
F=fft2(fp,P,Q);
% 5、生成一个实的、对称的滤波函数H(u,v),其大小为P×Q,中心在(P/2,Q/2)处。用阵列相乘形成乘积G(u,v)=H(u,v)F(u,v)
H=zeros(P,Q);
a=2*(D0^2);
for u=1:P
for v=1:Q
D=(u-P/2)^2+(v-Q/2)^2;
H(u,v)=exp(-D./a);
end
end
G=F.*H; %频率域滤波
% 6、得到处理后的图像
gp=ifft2(G); %频域转换到时域图像
gp=real(gp);
for i=1:P
for j=1:Q
gp(i,j)=(-1)^(i+j)*double(gp(i,j));
end
end
% 7、通过从gp(x,y)的左上象限提取M×N区域,得到最终处理结果g(x,y)
image_out=gp(1:M,1:N);
end
函数调用
clear all; close all; clc;
% 字符识别的应用
A=imread('G:\picture\Fig0419(a)(text_gaps_of_1_and_2_pixels).tif');
out1=GLPF(A,80);
figure;
subplot(1,2,1); imshow(A); title('低分辨率文本');
subplot(1,2,2); imshow(out1); title('DLPF滤波的结果');
%“美容”处理
B=imread('G:\picture\Fig0450(a)(woman_original).tif');
out2=GLPF(B,100);
out3=GLPF(B,80);
figure;
subplot(1,3,1); imshow(B); title('原图像');
subplot(1,3,2); imshow(out2); title('D0=100的GLPF');
subplot(1,3,3); imshow(out3); title('D0=80的GLPF');
%卫星图像和航空图像的处理
C=imread('G:\picture\Fig0451(a)(satellite_original).tif');
out4=GLPF(C,50);
out5=GLPF(C,20);
figure;
subplot(1,3,1); imshow(C); title('显示有突出扫描线的图像');
subplot(1,3,2); imshow(out4); title('D0=50的GLPF');
subplot(1,3,3); imshow(out5); title('D0=20的GLPF');
实验结果图