图像处理和分析通常被看作是对二维值数组的操作。然而,在一些领域中,必须对高维数的图像进行处理分析,例如,医学成像和生物成像。由于对多维特性的良好支持,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()

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

图像看起来像一个正方形的色块,我们将检测这些彩色块的边缘。这里使用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)]

SciPy 图像处理的更多相关文章

  1. scipy 图像处理-深度学习

    scipy 图像处理(scipy.misc.scipy.ndimage).matplotlib 图像处理 from scipy.misc import imread / imsave / imshow ...

  2. scipy 图像处理(scipy.misc、scipy.ndimage)、matplotlib 图像处理

    from scipy.misc import imread / imsave / imshow imresize / imrotate / imfilter 1. scipy.misc 下的图像处理 ...

  3. SciPy 信号处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  4. SciPy 统计

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  5. SciPy 线性代数

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  6. SciPy 优化

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  7. SciPy 积分

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  8. SciPy 插值

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. SciPy 输入输出

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

随机推荐

  1. intellij idea设置(字体大小、背景)

    1. 配置信息说明 Intellij Idea: 2017.2.5 2.具体设置 <1> 设置主题背景.字体大小 File---->Settings----->Appearan ...

  2. [ DLPytorch ] 注意力机制&机器翻译

    MachineTranslation 实现过程 rstrip():删除 string 字符串末尾的指定字符(默认为空格). 语法:str.rstrip([chars]) 参数:chars -- 指定删 ...

  3. Docker 之registry私有仓库搭建

    Docker 之registry私有仓库搭建 官方提供的私有仓库docker registry用法 https://yeasy.gitbooks.io/docker_practice/reposito ...

  4. 时间选择器UIDatePicker的使用

    UIDatePicker的介绍 UIDatePicker这个类的对象让用户可以在多个车轮上选择日期和时间.iPhone手机上的‘时钟’应用程序中的时间与闹铃中便使用了该控件.使用这个控件时,如果你能配 ...

  5. 笔记-capped collection

    笔记-capped collection 1.      collection 1.1.    简介 集合分为固定与非固定collection,capped collection 1.1.1.   c ...

  6. 去重sort|uniq -d

    #!/bin/bash ############################################################### #Author :Bing # #Create ...

  7. Mac. 修改bash_file

    https://www.cnblogs.com/mokey/p/3542389.html

  8. win7系统中开启wifi热点

    1.进入cmd下 2.输入命令创建一个热点,名称为testwifi,密码为12345678 netsh wlan 3.进入网络和共享中心->更改适配器设置,看到多出一个“无线网络连接2”,选中本 ...

  9. Python函数-2 匿名函数

    匿名函数 当我们在创建函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.这省去了我们挖空心思为函数命名的麻烦,也能少写不少代码,很多编程语言都提供这一特性. Python语言使用lamb ...

  10. java_3:JVM、JRE、JDK区别和联系

    首先 三者之间存在包含关系JVM + 核心类库 = JREJRE + java开发工具(javac.exe/jar.exe) = JDK 什么是JVM? 我们知道Java语言有一个独特的优点就是可以跨 ...