数字图像处理-课程建设

频域滤波-高斯低通

2016-01-19  本文已影响557人  momo猪

导入一些必要的库
并读取图片,将其灰度化

from matplotlib.pyplot import *
from numpy import *
from scipy import signal,misc
from PIL import Image,ImageFilter
%matplotlib inline
im=Image.open('/home/zach/Study/code/3.jpg').convert('L')
x,y=shape(im)
imshow(im,'gray')
show()

对图像进行傅里叶变换,并将位移,显示log后的fft图像

im_fft=fft.fftshift(fft.fft2(im))
imshow(log(abs(im_fft)),'gray')
show()

根据图像大小生成相对应的高斯低通核.

k1=signal.gaussian(x,x/10)
k2=signal.gaussian(y,y/10)
plot(k1)
show()
plot(k2)
show()
s1,s2=meshgrid(k2,k1)
kernel=s1*s2
imshow(kernel,'gray')
show()

将fft图像与高斯核相乘,如图所示,高频成分已经被去除.

为了在取log时不会出现log(0)的情况,将去除高频的fft图像加1

im_fftlow=im_fft*kernel
imshow(log(abs(im_fftlow)+1),'gray')
show()
进行反傅里叶变换,并保存图像.
im_conj=conj(im_fftlow)
im_new=uint8(real(fft.fft2(fft.fftshift(im_conj)/(x*y))))
imshow(im_new,'gray')
show()
imsave('smooth.jpg',im_new,cmap=cm.gray)
smooth.jpg
上一篇下一篇

猜你喜欢

热点阅读