首页 > 其他分享 >【scipy 基础】--图像处理

【scipy 基础】--图像处理

时间:2023-11-14 09:58:10浏览次数:31  
标签:gray ndimage -- image scipy 图像处理 图像 ax

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

image.png

2.2. prewitt算法

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

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

image.png

2.3. laplace算法

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

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

image.png

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

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

4. 总结

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

标签:gray,ndimage,--,image,scipy,图像处理,图像,ax
From: https://www.cnblogs.com/wang_yb/p/17830942.html

相关文章

  • jpa 的 Specification案例
    dao接口除了extendsJpaRepository外,还要extends JpaSpecificationExecutor<dependency><groupId>com.github.wenhao</groupId><artifactId>jpa-spec</artifactId><version>3.2.4</versi......
  • fastify-request-context fastify request 级别的存储支持扩展
    fastify-request-context是一个fastify插件基于nodejs的asynchooks的处理,比较方便,尤其我们是需要进行基于request进行一些扩展的时候实际上不少框架都类似类似的能力(比如javaweb框架的httpServletSession,sparkjava的requestattribute)参考使用注册以及使用......
  • Ubuntu固定网口方法_via.chatgpt
    在Ubuntu系统中,你可以通过编辑网络配置文件来设置固定的网口地址。以下是一种常见的方法:确定网卡名称首先,你需要确定要设置固定地址的网卡名称。你可以使用以下命令列出当前系统中的网卡及其对应的名称:ifconfig-a通常情况下,网卡的名称类似于eth0、eth1或者enp0s3,根......
  • Redis简述|以及它能用于做什么?
    什么是RedisRedis是一种开源的NoSQL内存数据库,用于高性能的数据存储和访问。Redis支持多种数据类型,包括字符串、哈希、列表、集合和有序集合,并且支持分布式存储和操作。Redis的特点包括快速、高可用和易扩展等,适用于各种应用场景。Redis应用场景Redis可以广泛应用于多种场景,包括......
  • chapter 13:TCP/IP 和网络编程
    学习笔记:TCP/IP和网络编程13.0摘要本章分为两个部分:TCP/IP协议与应用包括TCP/IP协议栈、IP地址、主机名、DNS、IP数据包和路由器。描述了UDP和TCP协议、端口号以及TCP/IP网络中的数据流。解释了服务器-客户端计算模型和套接字编程接口。通过使用UDP和TCP套接字的示例......
  • 服务器变动后 vscode远程连接失败
    参考:https://developer.huawei.com/consumer/cn/forum/topic/0203853369117070036删除C:\Users{用户}.ssh\known_hosts下的对应远程机器信息哪个服务器变动就把那一行删除,保存文件,在vscode中重新连接即可。......
  • 小样本学习在图像识别中的挑战与突破
    小样本学习(Few-ShotLearning)是一种机器学习方法,旨在从很少的样本中学习并做出准确的预测。在图像识别领域,小样本学习面临一些挑战,同时也涌现出一些突破性的解决方法。挑战:缺乏数据:小样本学习的主要挑战之一是样本数量有限,这使得传统深度学习模型难以学习足够的特征。过拟......
  • final关键字的作用
    目录1.修饰类时2.修饰方法时3.修饰属性和局部变量时3.1修饰局部变量时3.2修饰成员变量时3.3修饰类变量时4.final与普通变量的区别5.final用于引用1.修饰类时1.只能是公共的(public)就算不写也是public2.被final修饰的类不可以被继承//前面默认有个public写不写都行finalcla......
  • Identifier Naming Method
    I.VariablesLocalvariableDefinetheloop:i,j,z,x,y;Uselowercaseforsinglewordsandusethesmallcamelcasecommandformultiplewords;ModulevariablesDefineitasstatic,usingHungariannamingconventions+camelcasenamingconvention......
  • shell技能大全
    1.执行shell脚本提示输入并根据输入内容执行#!/bin/bashif[$#-ne3];thenecho"usage:$(basename$0)par1par2par3"exitfimyfunc(){echo$(($1*$2*$3))}result=`myfunc$1$2$3`echo"$result"2.替换变量中的子字符串(空格)myStr=......