SciPy库本身是针对科学计算而不是图像处理的,只是图像处理也包含了很多数学计算,
所以Scipy也提供了一个专门的模块ndimage用于图像处理。

ndimage模块提供的功能包括输入/输出图像、显示图像、基本操作(如裁剪、翻转、旋转等)、图像过滤(如去噪、锐化等)、图像分割、分类、特征提取以及注册/配准等任务。

这个模块支持多种图像格式的读取和写入,使得对图像的处理变得方便快捷。

1. 主要功能

虽然图像处理不是Scipy的主要目的,Scipy中也提供了70多个各类图像处理函数。

类别 主要函数 说明
过滤器 包含convolve等20多个函数 各类卷积和滤波相关的计算函数
傅立叶滤波器 包含fourier_ellipsoid等4个函数 多维椭球傅里叶,高斯傅里叶等滤波器
图像插值 包含affine_transform等8个函数 图像的反射变换,移动,旋转等相关函数
图像测量 包含center_of_mass等将近20个函数 计算图像几何特征的相关函数
形态学 包含binary_closing等20多个函数 图像的侵蚀,膨胀,二元开闭运算等等

图像处理底层函数专业性较强,下面结合图片演示一些比较直观的例子。

2. 边缘检测

图像边缘检测在计算机视觉和图像处理中是非常重要的任务之一。
边缘是图像中像素值发生显著变化的地方,它可以提供有关图像的重要信息,例如物体的轮廓、边界等。

ndimage模块中提供了多种算法来检测边缘,下面演示三种不同的边缘检测算法的效果:
(示例中所用的图片是维基百科上找的一个python logo

2.1. sobel算法

import matplotlib.pyplot as plt
import cv2
from scipy import ndimage image = plt.imread("d:/share/python-logo.png")
# 图像灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用索贝尔边缘检测算法
name = "sobel"
edges = ndimage.sobel(gray) # 显示原始图像和边缘检测结果
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image)
ax[0].set_title("原始图像")
ax[1].imshow(gray, cmap="gray")
ax[1].set_title("灰度图像")
ax[2].imshow(edges, cmap="gray")
ax[2].set_title("边缘检测({}算法)".format(name))
plt.show()

2.2. prewitt算法

代码和上面的类似,不同的部分就下面两行。

# 使用prewitt边缘检测算法
name = "prewitt"
edges = ndimage.prewitt(gray)

2.3. laplace算法

上面两种算法的效果看上去很类似,laplace算法的结果看上去比上面两种效果更好一些。

name = "laplace"
edges = ndimage.laplace(gray)

3. 侵蚀和膨胀

侵蚀和膨胀是最基本的两种图像形态学操作,它们的作用用来增强目标特征。
仍然使用上面的python logo图片,演示侵蚀和膨胀的操作。

import matplotlib.pyplot as plt
import cv2
from scipy import ndimage image = plt.imread("d:/share/python-logo.png")
# 图像灰度化
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 图像侵蚀
structure = ndimage.generate_binary_structure(2, 2)
erosion = ndimage.binary_erosion(image, structure) # 图像膨胀
dilation = ndimage.binary_dilation(image, structure) # 显示原始图像、侵蚀图像和膨胀图像
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image, cmap="gray")
ax[0].set_title("灰度图像")
ax[1].imshow(erosion, cmap="gray")
ax[1].set_title("图像--侵蚀")
ax[2].imshow(dilation, cmap="gray")
ax[2].set_title("图像--膨胀")
plt.show()


简单来说,侵蚀操作会扩张图像中黑色的区域,反之,膨胀操作会扩张图像中白色的区域。
直观上来看的话,侵蚀变了,膨胀变了。

4. 总结

Scipy图像模块本质上是把图像当作数组来处理,
虽然它不是专门的图像处理库,不过它处理速度很快,且和numpy等库结合紧密,
经常处理图像的朋友可以把它当成一个辅助的工具。

【scipy 基础】--图像处理的更多相关文章

  1. SciPy 基础功能

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

  2. 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)

    相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...

  3. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  4. SciPy 图像处理

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

  5. python-数据处理的包Numpy,scipy,pandas,matplotlib

    一,NumPy包(numeric python,数值计算) 该包主要包含了存储单一数据类型的ndarry对象的多维数组和处理数组能力的函数ufunc对象.是其它包数据类型的基础.只能处理简单的数据分析 ...

  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 ...

  10. SciPy 积分

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

随机推荐

  1. 仪酷LabVIEW AI视觉工具包及开放神经网络交互工具包常见问题解答

    前言 哈喽,各位朋友,好久不见~ 之前给大家分享了基于LabVIEW开发的AI视觉工具包及开放神经网络交互工具包,不少朋友私信说在安装和使用过程中会遇到一些问题,今天我们就集中回复一下大家问到最多的问 ...

  2. CentOS上安装Redis的两种方式

    今天小编给大家介绍下,如何在CentOS上安装Redis.通常有两种方式:第一种是通过下载源码并编译来安装,第二种是通过仓库直接安装.相较而言,第二种方式更直截了当,但小编更倾向第一种. 一.通过源码 ...

  3. 关于"覆盖问题”的反思

    [HAOI2007]覆盖问题 题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的 ...

  4. Django2.2:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence

    报错截图: 解决方案: 打开django/views下的debug.py文件,转到line331行: with Path(CURRENT_DIR, 'templates', 'technical_50 ...

  5. json虽然简单,但这些细节你未必知道

    基本介绍 JSON的全称是JavaScript Object Notation,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式,本来是JavaScript的子集,但现在已独立存在于各 ...

  6. [selenium]点击元素出现的obscure问题

    前言 我们一般使用如下方式点击元素: elem = driver.find_element(...) elem.click() # 或者使用带等待条件的方式 elem = WebDriverWait( ...

  7. 痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序

    近日,恩智浦官方隆重上线了应用程序代码中心(Application Code Hub,简称 ACH),这是恩智浦 MCUXpresso 软件生态的一个重要组成部分.痞子衡之所以要如此激动地告诉大家这个 ...

  8. Java BigDecimal 分析

    1.使用理由: Double类和Float类可以对16位有效数字的数进行精确运算,但对于超过16位有效数字的数,会丢失精度.所以使用BigDecimal类来精确计算超过16位有效数字的数. 2.引入包 ...

  9. Vue3 vite:is a JavaScript file. Did you mean to enable the 'allowJs' option?

    描述 今天在vue3+vite下进行打包时,突然vscode报了一个error. 大概的意识是询问是否启用"allowJS"选项,因为该文件在程序内是指定用于编译的根文件. 提示信 ...

  10. JS逆向实战21——某查查webpack密码加密

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 aHR0cHM6Ly ...