python3-PIL图像增强

发布时间:2021-09-08 00:08:02编辑:run阅读(3917)

    图像增强的目地是提高图像的质量或使特定的特征显得更加突出。图像增强技术的一些例子有对比度拉伸,平滑和锐化。


    逐点强度变换--像素变换。

    逐点强度变换运算对输入图像的每个像素f(x,y)应用传递函数T,在输出图像中生成相应的像素。变换可以表示为g(x,y)=TF(x,y)或等同于s=T(r),其中r为输入图像中像素的灰度级,s为输出图像中相同像素的灰度级变换。这是一个无内存操作,在(x, y)处的输出强度只取决于同一点的输入强度。相同强度的像素得到相同的变换。这不会带来新的信息,也不可能导致信息的丢失,但可以改善外观使其特征更容易检测。


    对数变换,当需要在图像中压缩或拉伸至一定灰度范围时,对数变换是非常有用的,为了显示傅里叶频谱,因为其中直流分量的值要比其他分量的值高得多,所以如果没有对数变换,其他频率分量几乎总是看不见的。对数变换的点变换函数的一般形式为:s=T(r)=c*log(l+r),其中c是常数。

    from PIL import Image
    from skimage import data, img_as_float,img_as_ubyte
    import matplotlib.pylab as pylab
    import numpy as np
    
    pylab.rcParams['font.sans-serif'] = ['KaiTi']
    # 解决保存图像是负号'-'显示为方块的问题
    pylab.rcParams['axes.unicode_minus'] = False
    def plot_image(image, title=''):
        pylab.title(title, size=20)
        pylab.imshow(image)
        pylab.axis('off')
    
    def plot_hist(r, g, b, title=''):
        r, g, b = img_as_ubyte(r), img_as_ubyte(g), img_as_ubyte(b)
        pylab.hist(np.array(r).ravel(), bins=256, range=(0, 256), color='r', alpha=0.5)
        pylab.hist(np.array(g).ravel(), bins=256, range=(0, 256), color='g', alpha=0.5)
        pylab.hist(np.array(b).ravel(), bins=256, range=(0, 256), color='b', alpha=0.5)
        pylab.xlabel('像素值', size=20)
        pylab.ylabel('频率', size=20)
        pylab.title(title, size=20)
    im = Image.open(r'D:\image_processing\image4\a.jpg')
    im_r,im_g,im_b = im.split()
    pylab.style.use('ggplot')
    pylab.figure(figsize=(15, 5))
    pylab.subplot(121)
    plot_image(im, '原始图')
    pylab.subplot(122)
    plot_hist(im_r, im_g, im_b, 'RGB颜色通道直方图')
    pylab.show()

    image.png



    使用PIL-python图像库,图像模块的point()函数进行对数变换,并将此变换作用于RGB图像,从而对不同色彩通道直方图产生影响。

    from PIL import Image
    from skimage import data, img_as_float,img_as_ubyte
    import matplotlib.pylab as pylab
    import numpy as np
    
    pylab.rcParams['font.sans-serif'] = ['KaiTi']
    # 解决保存图像是负号'-'显示为方块的问题
    pylab.rcParams['axes.unicode_minus'] = False
    def plot_image(image, title=''):
        pylab.title(title, size=20)
        pylab.imshow(image)
        pylab.axis('off')
    
    def plot_hist(r, g, b, title=''):
        r, g, b = img_as_ubyte(r), img_as_ubyte(g), img_as_ubyte(b)
        pylab.hist(np.array(r).ravel(), bins=256, range=(0, 256), color='r', alpha=0.5)
        pylab.hist(np.array(g).ravel(), bins=256, range=(0, 256), color='g', alpha=0.5)
        pylab.hist(np.array(b).ravel(), bins=256, range=(0, 256), color='b', alpha=0.5)
        pylab.xlabel('像素值', size=20)
        pylab.ylabel('频率', size=20)
        pylab.title(title, size=20)
    im = Image.open(r'D:\image_processing\image4\a.jpg')
    im = im.point(lambda i:255*np.log(1+i/255))
    im_r,im_g,im_b = im.split()
    pylab.style.use('ggplot')
    pylab.figure(figsize=(15, 5))
    pylab.subplot(121)
    plot_image(im, '经对数变换后的图像')
    pylab.subplot(122)
    plot_hist(im_r, im_g, im_b, 'RGB颜色通道对数变换直方图')
    pylab.show()

    image.png

关键字