python3-scikit-image,matplptlib图像处理

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

    使用scikit-image,matplotlib进行图片处理,PIL提供了许多图像处理的函数,使用点变换来更改像素值对图像实现几何变换


    scikit-image模块安装

    pip install scikit-image

    pip install scikit-learn

    pip install simpleITK


    scikit-image使用warp()函数进行反向扭曲和几何转换,在图像上应用仿射变换,可以使用SimilarityTransform()函数来计算变换矩阵,然后使用warp()函数来执行变换

    from skimage.io import imread
    from skimage.transform import SimilarityTransform, warp
    import numpy as np
    import matplotlib.pylab as plt
    
    im = imread(r'D:\image_processing\jpgs\ss.jpg')
    tform = SimilarityTransform(scale=0.9, rotation=np.pi/4, translation=(im.shape[0]/2, -30))
    warped = warp(im, tform)
    plt.subplot(221), plt.imshow(im), plt.title('原图', size=15),plt.axis('off')
    plt.subplot(222), plt.imshow(warped), plt.title('矩阵变换图', size=15),plt.axis('off')
    plt.show()

    image.png



    scikit-image应用旋流变换,这是scikit-image文档中定义的非线性变换,使用swirl()函数来实现变换,其中strength是函数的旋流量参数,radius以像素表示旋流程度,rotation用来添加旋转角度

    from skimage.io import imread
    from skimage.transform import SimilarityTransform, warp, swirl
    import matplotlib.pylab as plt
    
    # 指定默认字体
    plt.rcParams['font.sans-serif'] = ['KaiTi']
    # 解决保存图像是负号'-'显示为方块的问题
    plt.rcParams['axes.unicode_minus'] = False
    im = imread(r'D:\image_processing\jpgs\ss.jpg')
    swirled = swirl(im, rotation=45, strength=10, radius=150)
    plt.subplot(221), plt.imshow(im), plt.title('原图', size=15),plt.axis('off')
    plt.subplot(222), plt.imshow(swirled), plt.title('旋流变换图', size=15),plt.axis('off')
    plt.show()

    image.png


    scikit-image在图像中添加随机高斯噪声,可以使用random_noise()函数向图像添加不同类型的噪声.

    from skimage.io import imread
    from skimage import color, viewer, exposure, img_as_float
    from skimage.util import invert, random_noise
    import matplotlib.pylab as plt
    
    # 指定默认字体
    plt.rcParams['font.sans-serif'] = ['KaiTi']
    # 解决保存图像是负号'-'显示为方块的问题
    plt.rcParams['axes.unicode_minus'] = False
    im = img_as_float(imread(r'D:\image_processing\jpgs\ss.jpg'))
    plt.figure(figsize=(15,12))
    sigmas = [0.1, 0.25, 0.5, 1]
    for i in range(4):
        noisy = random_noise(im, var=sigmas[i]**2)
        plt.subplot(2, 2, i+1)
        plt.imshow(noisy)
        plt.axis('off')
        plt.title('sigma=' + str(sigmas[1]) + '高斯噪声', size=20)
    plt.tight_layout()
    plt.show()

    image.png



    使用matplotlib进行图像操作,使用pylab模块进行图像操作,为图像绘制轮廓线,图像的轮廓线是一条连接所有像素的曲线,这些像素具有相同的特定值

    from skimage.io import imread
    from skimage import color
    import numpy as np
    import matplotlib.pylab as plt
    
    # 指定默认字体
    plt.rcParams['font.sans-serif'] = ['KaiTi']
    # 解决保存图像是负号'-'显示为方块的问题
    plt.rcParams['axes.unicode_minus'] = False
    im = color.rgb2gray(imread(r'D:\image_processing\jpgs\b.jpg'))
    plt.figure(figsize=(20,8))
    plt.subplot(131), plt.imshow(im, cmap='gray'), plt.title('原始图像', size=20)
    plt.subplot(132), plt.contour(np.flipud(im), colors='k', levels=np.logspace(-15, 15, 100))
    plt.title('图像轮廓线', size=20)
    plt.subplot(133), plt.contourf(np.flipud(im), cmap='inferno')
    plt.title('图像填充轮廓', size=20)
    plt.show()

    image.png

关键字