zoukankan      html  css  js  c++  java
  • SciPy 图像处理

    章节


    图像处理和分析通常被看作是对二维值数组的操作。然而,在一些领域中,必须对高维数的图像进行处理分析,例如,医学成像和生物成像。由于对多维特性的良好支持,numpy非常适合这种类型的应用程序。scipy.ndimage包提供了许多通用的图像处理和分析功能,这些功能支持操作任意维度的数组。

    scipy.ndimage中提供了图像矩阵变换、图像滤波、图像卷积等功能。

    旋转图片

    旋转图片,可以使用ndimage.rotate函数。

    测试图片下载: face.png

    示例

    加载原图片

    from scipy import ndimage
    import matplotlib.image as mpimg
    import matplotlib.pyplot as plt
    
    # 加载图片
    face = mpimg.imread('./face.png')
    
    # 显示图片
    plt.imshow(face)
    # plt.savefig('./img2-1.png') # 保存要显示的图片
    plt.show()
    

    输出

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NTwDVFBg-1571731533309)(https://www.qikegu.com/wp-content/uploads/2019/06/img2-1.png)]

    示例

    from scipy import ndimage
    import matplotlib.image as mpimg
    import matplotlib.pyplot as plt
    
    # 加载图片
    face = mpimg.imread('./face.png')
    
    # 旋转图片
    rotate_face = ndimage.rotate(face, 45)
    
    plt.imshow(rotate_face)
    # plt.savefig('./img3-1.png') # 保存要显示的图片
    plt.show()
    

    输出

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-roYeWLno-1571731533312)(https://www.qikegu.com/wp-content/uploads/2019/06/img3-1.png)]

    图像滤波

    图像滤波是一种修改/增强图像的技术。例如,可以通过图像滤波突出图像的某些特性,弱化或滤除图像的另一些特性。滤波有很多种,例如:平滑、锐化、边缘增强等等。

    示例

    对图像进行高斯滤波。高斯滤波是一种模糊滤波,广泛用于滤除图像噪声。

    from scipy import ndimage
    import matplotlib.image as mpimg
    import matplotlib.pyplot as plt
    
    # 加载图片
    face = mpimg.imread('./face.png')
    
    # 处理图片
    face1 = ndimage.gaussian_filter(face, sigma=3)
    
    # 显示图片
    plt.imshow(face1)
    # plt.savefig('./img4-1.png') # 保存要显示的图片
    plt.show()
    

    输出

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ri8BeFuk-1571731533317)(https://www.qikegu.com/wp-content/uploads/2019/06/img4-1.png)]

    sigma=3表示模糊程度为3,我们可以通过调整sigma值,来比较图像质量的变化。

    边缘检测

    边缘检测是一种寻找图像中物体边界的图像处理技术。它的原理是通过检测图像中的亮度突变,来识别物体边缘。边缘检测在图像处理、计算机视觉、机器视觉等领域中广泛应用。

    常用边缘检测算法包括:

    • Sobel
    • Canny
    • Prewitt
    • Roberts
    • Fuzzy Logic methods

    让我们考虑下面的例子。

    import scipy.ndimage as nd
    import numpy as np
    
    im = np.zeros((256, 256))
    im[64:-64, 64:-64] = 1
    im[90:-90,90:-90] = 2
    im = nd.gaussian_filter(im, 8)
    
    import matplotlib.pyplot as plt
    plt.imshow(im)
    # plt.savefig('./img5-1.png') # 保存要显示的图片
    plt.show()
    

    上面的程序将生成以下输出。

    scipy.ndimage pic5

    图像看起来像一个正方形的色块,我们将检测这些彩色块的边缘。这里使用ndimage的Sobel函数来检测图像边缘,该函数会对图像数组的每个轴分开操作,产生两个矩阵,然后我们使用NumPy中的Hypot函数将这两个矩阵合并为一个矩阵,得到最后结果。

    示例

    import scipy.ndimage as nd
    import numpy as np
    import matplotlib.pyplot as plt
    
    im = np.zeros((256, 256))
    im[64:-64, 64:-64] = 1
    im[90:-90,90:-90] = 2
    im = nd.gaussian_filter(im, 8)
    
    sx = nd.sobel(im, axis = 0, mode = 'constant')
    sy = nd.sobel(im, axis = 1, mode = 'constant')
    sob = np.hypot(sx, sy)
    
    plt.imshow(sob)
    # plt.savefig('./img6-1.png') # 保存要显示的图片
    plt.show()
    

    上面的程序将生成以下输出。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qc6G227y-1571731533323)(https://www.qikegu.com/wp-content/uploads/2019/06/img6-1.png)]

  • 相关阅读:
    Yii2.0 rules验证规则大全
    面试官: 谈谈什么是守护线程以及作用 ?
    Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
    Spring Boot 入门教程 | 图文讲解
    Spring Boot 2.0 图文教程 | 集成邮件发送功能
    面试官: 说说看, 什么是 Hook (钩子) 线程以及应用场景?
    性能测试工具 wrk 使用教程
    关于 Docker 镜像的操作,看完这篇就够啦 !(下)
    关于 Docker 镜像的操作,看完这篇就够啦 !(上)
    Docker 上传镜像
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11819414.html
Copyright © 2011-2022 走看看