使用Matlab的自带函数生成高斯滤波器处理图片(二)

使用Matlab的自带函数生成高斯滤波器处理图片(二)

续接上文:使用Matlab的自带函数生成高斯滤波器处理图片(一)

上文我们使用高斯滤波器在频域完成了对图像的模糊与还原,在还原时我们使用的模糊图片是刚被高斯滤波器所模糊的,接下来,我们尝试将模糊图储存,再将它取出来进行复原看看会有什么不同。

图像存储与读取

在这里我们将它保存为.jpg格式,由于在之前的操作过程后,图像Img_ifft1 现在的矩阵类型是double类型,并且值的范围在 [0,255],直接以储存图像,会被识别为 [0,1]的double类型图转uint8类型图,就是超过1的值会被直接置成255,得到的会是一张全白图,所以在这里要转成 uint8 类型矩阵(就是对现有的double类型值进行取整),然后进行存储

imwrite(uint8(Img_ifft1),'test.jpg')
test = imread('test.jpg');

figure(3)
subplot(121)
imshow(Img_ifft1)
title('原模糊图')
subplot(122)
imshow(test)
title('存储后读取模糊图')

我们看一下两者的空域图有什么区别
在这里插入图片描述
从图像显示上来看,它们好像没有区别。再来看一下频域图

%Img_fft_Gauss为模糊图的频域矩阵
fft_test = fft2(test);
figure(4)
subplot(121)
imshow(uint8(abs(Img_fft_Gauss)))
title('原模糊图')
subplot(122)
imshow(uint8(abs(fft_test)))
title('存储后读取模糊图')

差别还是比较大的,主要区别在于中间的高频区(此处并没有使用fftshift函数,所以中间的是高频区),原图的幅值很小,而存储图还存在一定大小的幅值。
在这里插入图片描述
这种现象,出现的原因,就是在存储过程中取整的约化过程,对其图像的频率分布产生了巨大影响。

模糊图像的还原

如果还是通过原来用来模糊的高斯滤波器的倒数矩阵还原图像,效果是这样的

figure(4)
subplot(121)
imshow(ifft2(Img_fft_Gauss.*iGauss_afterfft),[])
title('原模糊图还原')
subplot(122)
imshow(ifft2(fft_test.*iGauss_afterfft))
title('存储后读取模糊图还原')

在这里插入图片描述
显然,这样的还原效果是无法接受的。中间肯定出了什么问题,我们再来看一下,两幅模糊图在频域中的区别,存储图高频区仍然不小的幅值,这是两幅图在频域中最大的区别,那么是不是还原过程中的那个倒数矩阵,把这些高频区放大了所造成的呢,我们看看倒数矩阵的在频域是怎么分布的

iGauss_afterfft的频谱图
在这里插入图片描述
这样的频谱,与下面的两幅频谱进行点乘,可以预见的是,原图的Gauss_afterfft(用于模糊的高斯滤波器)成份会被约去,而存储图,它的高频区会被放大,所造成的后果便是我们上面还原图那样,基本没法看。
在这里插入图片描述
所以如果还是想要还原的话,必须要对中间的高频区做出一些限定,
下面提供一种方法,使用理想的低通滤波器,来限制对高频信号的放大
低通滤波过程

%使用fftshift函数,将低频区放置在图像中心,便于操作
iGauss_afterfft1 = fftshift(iGauss_afterfft);
for i = 1:M
    for j = 1:N
    	% 使得低通的范围为列像素数一半的1/7范围内
    	% 1/7是试错得到的,既要避免对高频噪声的放大
    	% 又要保留一定的高频分量维持图像细节的恢复的得到保留
    	% 这样的一个低通滤波效果
        if (i-M/2)^2+(j-N/2)^2 > (N/2/7)^2
            iGauss_afterfft1(i,j) = 0;
        end
    end
end
iGauss_afterfft1 = fftshift(iGauss_afterfft1);
figure(4)
imshow(uint8(abs(iGauss_afterfft1)))

在这里插入图片描述
可以看到的是角的黑色变白了,实际上述过程并没有对角进行操作,仅仅是因为中间的高亮度区域被置零了,而体现的反差。
那么再来看看图像恢复的效果

Img_ifft2_ifft = fftshift(ifft2(fft_test.*iGauss_afterfft1));

figure(5)
subplot(121)
imshow(test)
title('存储的模糊图')
subplot(122)
imshow(Img_ifft2_ifft,[])
title('左边的恢复图')

在这里插入图片描述
由于使用理想的低通滤波器作为截断滤波器,带来了水波纹效应,虽然恢复效果不咋地,但是可以看出相较于不使用截断滤波器,好太多了,同时和模糊图对比,一部分的细节(像小姐姐面部的特征)也得到了一点点的恢复。

至此,这样我们的工作就可以完成了。

可以看出,在图像存储时的这个取整操作,对于后面的图像显示问题不大,可是如果是作为我们要恢复的原材料,可以说取整存储这个动作,简直是毁灭性打击。
在这里插入图片描述

扫描二维码关注公众号,回复: 11387890 查看本文章

更多的

行文至此,有感而发
2020年来的太特殊了,今天这个特殊的日子,我们缅怀的不只有先祖,还有为我们奋战在抗疫一线以及支持抗疫而做出巨大牺牲的人们。岁月静好,负重前行,我们总是被勇敢而无私的人们保护的很好、很安全。
上敬战死的英烈,下敬涂炭的生灵

猜你喜欢

转载自blog.csdn.net/qq_45083791/article/details/105308844