【scipy 基础】--图像处理

这篇具有很好参考价值的文章主要介绍了【scipy 基础】--图像处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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()

【scipy 基础】--图像处理

2.2. prewitt算法

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

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

【scipy 基础】--图像处理

2.3. laplace算法

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

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

【scipy 基础】--图像处理

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()

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

4. 总结

Scipy图像模块本质上是把图像当作数组来处理,
虽然它不是专门的图像处理库,不过它处理速度很快,且和numpy等库结合紧密,
经常处理图像的朋友可以把它当成一个辅助的工具。文章来源地址https://www.toymoban.com/news/detail-746397.html

到了这里,关于【scipy 基础】--图像处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【scipy 基础】--正交距离回归

    Scipy 的 ODR 正交距离回归(ODR-Orthogonal Distance Regression)模块,适用于 回归分析 时,因变量和自变量之间存在 非线性关系 的情况。 它提高了回归分析的准确性和稳健性。对于需要解决非线性回归问题的科研人员和工程师来说,它具有非常重要的意义。 ODR正交距离回归 模块的

    2024年02月05日
    浏览(46)
  • 【scipy 基础】--聚类

    物以类聚, 聚类算法 使用最优化的算法来计算数据点之间的距离,并将它们分组到最近的簇中。 Scipy 的聚类模块中,进一步分为两个聚类子模块: vq (vector quantization):提供了一种基于向量量化的聚类算法。 vq模块 支持多种向量量化算法,包括 K-means 、 GMM (高斯混合模

    2024年02月06日
    浏览(32)
  • 【scipy 基础】--空间计算

    scipy.spatial 子模块提供了一系列用于处理和计算空间数据和几何形状的算法和工具,在许多领域都有广泛的应用,例如计算机视觉、地理信息系统、机器人学、医学影像分析等。 下面,来具体看看 scipy.spatial 子模块为我们提供的主要功能分类。 scipy.spatial 子模块中主要包含的

    2024年02月05日
    浏览(39)
  • 【scipy 基础】--线性代数

    SciPy 的 linalg 模块是 SciPy 库中的一个子模块,它提供了许多用于线性代数运算的函数和工具,如矩阵求逆、特征值、行列式、线性方程组求解等。 相比于 NumPy的linalg模块 , SciPy的linalg模块 包含更多的高级功能,并且在处理一些特定的数值计算问题时,可能会表现出更好的性

    2024年02月05日
    浏览(38)
  • 【scipy 基础】--插值

    插值运算 是一种数据处理方法,主要用来填补数据之间的空白或缺失值。 因为在实际应用中,数据往往不是完整的,而是存在着空白或缺失值,这些空白或缺失值可能是由于数据采集困难、数据丢失或数据处理错误等原因造成的。 如果直接使用这些空白或缺失值进行分析和

    2024年02月05日
    浏览(39)
  • 【scipy 基础】--统计分布

    scipy.stats 子模块包含大量的概率分布、汇总和频率统计、相关函数和统计测试、掩蔽统计、核密度估计、准蒙特卡罗功能等等。 这个子模块可以帮助我们描述和分析数据,进行假设检验和拟合统计模型等。 具体来说, scipy.stats 子模块包括以下主要功能: 类别 说明 连续统计

    2024年02月05日
    浏览(41)
  • XS5018A一款针对 CMOS 图像传感器的高性价比图像信号处理芯片(ISP)

    XS5018A 是一款针对 CMOS 图像传感器的高性价比图像信号处理芯片,支持 1M/2M 像素 图像传感器,一组 10-bit DVP 输入接口, ISP 具备优异的 3D 降噪功能,标清模拟输出支持 960H , 高清模拟输出支持 HDCCTV 720P/1080P ,高度集成外围器件,简化产品设计,内嵌 CPU 处理器, 可以实现灵

    2024年02月12日
    浏览(38)
  • 【scipy 基础】--傅里叶变换

    傅里叶变换 是一种数学变换,它可以将一个函数或信号转换为另一个函数或信号,它可以将时域信号转换为频域信号,也可以将频域信号转换为时域信号。 在很多的领域都有广泛的应用,例如信号处理、通信、图像处理、计算机科学、物理学、生物学等。 它最大的功能是能

    2024年02月06日
    浏览(40)
  • 【scipy 基础】--积分和微分方程

    对于手工计算来说,积分计算是非常困难的,对于一些简单的函数,我们可以直接通过已知的积分公式来求解,但在更多的情况下,原函数并没有简单的表达式,因此确定积分的反函数变得非常困难。 另外,相对于微分运算来说,积分运算则具有更多的多样性,包括不同的积

    2024年02月05日
    浏览(41)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包