频域滤波-高斯低通

作者: momo猪 | 来源:发表于2016-01-19 11:33 被阅读557次

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

    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

    相关文章

      网友评论

        本文标题:频域滤波-高斯低通

        本文链接:https://www.haomeiwen.com/subject/xawkkttx.html