图像处理和分析通常被看作是对二维值数组的操作。然而,在一些领域中,必须对高维数的图像进行处理分析,例如,医学成像和生物成像。由于对多维特性的良好支持,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. Android 短信模块分析(七) MMS数据库定义及结构整理

    一. mmssms.db 数据库mmssms.db中表的定义见表4.1至4.18所示: 表4.1 addr(彩信地址) 字段名 类型 描述 备注 _id INTEGER PRIMARY_KEY 主键I ...

  2. POJ 2559 Largest Rectangle in a Histogram(单调栈) && 单调栈

    嗯... 题目链接:http://poj.org/problem?id=2559 一.单调栈: 1.性质: 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递 ...

  3. 缓存ViewState减少网络传输

    在维护 asp.net webform系统时,某些系统将控件及页面数据都存储在viewstate中,导致在频宽不够时,影响页面加载速度,此时可将viewstate 存储在服务端,减少网络传输. 重写  ...

  4. vector的使用-Hdu 4841

    圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  5. Web基础了解版09-Cookie-Session

    Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术. 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存 ...

  6. pandas 存储文件到MySQL 以及读取

    pandas导入数据到MySQL 1.导入必要的库 2.创建链接 3.导入数据 import pandas as pd from sqlalchemy import create_engine con ...

  7. iOS之Xcode提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploading this package

    https://www.jianshu.com/p/6d465a0ea58e 这句英文翻译过来就是: 无法继续交付:现有的传输程序实例目前正在上载此包 原因:上传的动作被记录在UploadToken中 ...

  8. SpringMvc 初步配置

    spring-aop.jarspring-bean.jarspring-context.jarspring-core.jarspring-web.jarspring-webmvc.jarcommons ...

  9. mac下删除不需要的应用程序

    一般的应用程序删除: 1)可以在 前往--应用程序 中直接删除 2)直接在启动台中按住出现X直接删除. 问题: mac下不出现在应用程序中,启动台中按住也不出现X,也不可以直接拖到废纸篓中删除的应用如 ...

  10. centos7一步一步搭建docker nginx 及重点讲解

    系统环境:centos7.7 (VMware中) images版本:nginx:latest (截止2020.01.10最新版) 1.拉取镜像 docker pull nginx 2.启动nginx容 ...