導(dǎo)入一些必要的庫
并讀取圖片,將其灰度化
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()
對圖像進(jìn)行傅里葉變換,并將位移,顯示log后的fft圖像
im_fft=fft.fftshift(fft.fft2(im))
imshow(log(abs(im_fft)),'gray')
show()
根據(jù)圖像大小生成相對應(yīng)的高斯低通核.
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圖像與高斯核相乘,如圖所示,高頻成分已經(jīng)被去除.
為了在取log時不會出現(xiàn)log(0)的情況,將去除高頻的fft圖像加1
im_fftlow=im_fft*kernel
imshow(log(abs(im_fftlow)+1),'gray')
show()
進(jìn)行反傅里葉變換,并保存圖像.
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)