数字图像处理——高斯低通滤波器(GLPF)实验报告
一、程序代码及注释
1、myGLPF函数
%pho参数为输入图像的路径
%D0参数为截止频率
function im2 = myGLPF(pho,D0)
ima = imread(pho); %读取输入图像
%得到高斯低通滤波器
[r,c] = size(ima); %获取输入图像的行和列
D = zeros(r,c); %D(u,v)是距频率矩形中心的距离
for i=1:r
for j=1:c
D(i,j)=sqrt((i-r/2)^2+(j-c/2)^2);
end
end
H=exp(-(D.^2)/(2*D0*D0)); %计算滤波器,得到高斯低通滤波器
F=fft2(ima,size(H,1),size(H,2)); %对原图像进行傅里叶变换
F=fftshift(F); %对傅里叶变换后的F进行中心移位
F1=ifft2(ifftshift(H.*F)); %对中心移位后的F使用高斯低通滤波器后进行反FFT移动(记得一定要进行一次反FFT移动,否则输入结果图片背景会变暗),并进行反变换
im2=real(F1); %从结果中获取幅度(或称频率谱)
im2=uint8(im2);
2、useMyGLPF函数
function [] = useMyGLPF(pho)
ima=imread(pho); %输入图像
subplot(231); %显示输入图像
imshow(ima);
title('输入图像');
D0=[60 80 100 120 140]; %设置多个截止频率进行对比
for i=1:size(D0,2)
g=myGLPF(pho,D0(i)); %得到使用不同截止频率的高斯低通滤波器后的结果
subplot(2,3,i+1); %显示结果
imshow(g);
title(['D0 = ',num2str(D0(i))]);
end
3、使用useMyGLPF()
pho1=imread('p4.jpg');
pho2=rgb2gray(pho1);
imwrite(pho2,'p4_gray.jpg')
useMyGLPF('p4_gray.jpg')
二、实验结果
实验选取了两幅人像图作为输入。
实验1:
(a)原图像(400×411像素);(b) (c)分别是使用D0=80和D0=100的的GLPF对图像滤波后的结果。注意图(b)和图(c)中放大部分的皮肤皱纹已减少了
实验2:
输入:
原图
输出:
放大后:
不同D0的GLPF对图像滤波后的结果
三、参考原文:https://blog.****.net/qq_15096707/article/details/50061145