Python图像形态学处理:腐蚀、膨胀、礼帽、黑帽……

文章目录

    • 二值形态学
    • 灰度形态学

python图像处理教程:初步📷插值变换

最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,【scipy.ndimage】分别实现了二值数组和灰度数组的这四种运算。而针对灰度图像,【scipy.ndimage】还提供了礼帽、黑帽、形态学梯度和拉普拉斯梯度等操作。

二值形态学

二值图像中只有0和1两种元素,故而可将其表示为元素值为 1 1 1的元素位置集合 A = { ( i , j ) ∣ A i j = 1 } A=\{(i,j)\vert A_{ij}=1\} A={(i,j)Aij=1},则腐蚀和膨胀可表示为

A ⊖ B = { ( i , j ) ∣ B i j ⊆ A } A ⊕ B = { ( i , j ) ∣ B i j ∪ A ≠ ∅ } \begin{aligned} A\ominus B&=\{(i,j)|B_{ij}\subseteq A\}\\ A\oplus B&=\{(i,j)|B_{ij}\cup A\not=\varnothing\} \end{aligned} ABAB={(i,j)BijA}={(i,j)BijA=}

其中 B i j B_{ij} Bij表示当 B B B的原点在 ( i , j ) (i,j) (i,j)处时,B中所有为1的值的集合。

用结构B腐蚀A,当B的原点平移到图像A的像元 ( i , j ) (i,j) (i,j)时,若B完全被二者的重叠区域所包围,则赋值为1,否则赋值为0。更直观的例子是,如果B中为1的元素位置上,对应的A的像素值也都为1,则 ( i , j ) (i,j) (i,j)处为1。膨胀则与之相反。

开运算和闭运算则是腐蚀、膨胀的叠加,开运算是先腐蚀后膨胀;闭运算是先膨胀后腐蚀。这四种运算的差别如下

在这里插入图片描述

二值图像的腐蚀、膨胀、开、闭运算分别由函数binary_erosion, binary_dilation, binary_opening, binary_closing来是实现,上述绘图代码如下。

import numpy as np
import matplotlib.pyplot as plt
import scipy.ndimage as snx = np.zeros([20,20])
x[5:15, 5:15] = 1
x[10:12,10:12] = 0
x[2:4, 2:4] = 1func = {"origin": lambda x : x,"erosion": sn.binary_erosion,"dilation": sn.binary_dilation,"opening": sn.binary_opening,"closing": sn.binary_closing
}fig = plt.figure()
for i,key in enumerate(func):ax = fig.add_subplot(2,3,i+1)ax.imshow(func[key](x))plt.title(key)plt.show()

灰度形态学

【ndimage】中为灰度图像也提供了腐蚀、膨胀、开、闭运算,只需将二值函数中的binary替换为grey即可。此外,针对灰度图像,【ndimage】还额外提供了四种运算,如下表所示

函数名称备注
morphological_gradient形态学梯度膨胀图减去腐蚀图
white_tophat礼帽(顶帽)运算原图减去开运算
black_tophat黑帽(底帽)运算原图减去闭运算
morphological_laplace拉普拉斯变换

这些方法的差异如下

在这里插入图片描述
绘图代码如下。

from scipy.misc import ascent
img = ascent()funcs = {"original": lambda x, tmp:x,"erosion" : sn.grey_erosion,"dilation" : sn.grey_dilation,"opening" : sn.grey_opening,"closing" : sn.grey_closing
}fig = plt.figure()
for i, key in enumerate(funcs):ax = fig.add_subplot(2,5,i+1)plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray)plt.axis('off')plt.title(key)ori = img[350:500, 400:500]
funcs = {"ori": lambda x, tmp:x,"white" : sn.white_tophat,"black" : sn.black_tophat,"gradient" : sn.morphological_gradient,"laplace" : sn.morphological_laplace,
}for i, key in enumerate(funcs):ax = fig.add_subplot(2,5,i+6)plt.imshow(funcs[key](ori, (5,5)), cmap=plt.cm.gray)plt.title(key)plt.axis('off')plt.show()

参数列表

二值函数和灰度函数的参数并不相同,下面以closing运算为例,二值和灰度函数的所有参数,除了输入input之外,二者共有的参数有

  • structure 为数组类型,表示构造元素,可以理解为是卷积模板
  • output 与输入相同维度的数组,可以存下结果
  • orgin 过滤器设置,默认为0

二值形态学滤波的其他参数如下

binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)

其中

  • iterations 执行次数
  • mask 掩模数组,为bool类型的数组,对应False的位置将不会改变
  • border_value 边缘处的值
  • brute_force 如果为False,则只有上次迭代中发生变化的值才会更新
grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)
  • size 为滤波模板
  • mode 可选reflect,constant,nearest,mirror, wrap,边缘填充方式
  • cval 边缘填充值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Office/WPS 好用的PPT插件-智能选择布局

软件介绍 PPT大珩助手是一款全新设计的Office PPT插件,它是一款功能强大且实用的PPT辅助工具,能够轻松帮助您修改、优化和管理幻灯片。凭借丰富的功能和用户友好的界面,PPT大珩助手能够助力您打造出精美而专业的演示文稿。我们致力于为用户提…

NGINX的重写与反向代理机制解析

目录 引言 一、重写功能 (一)if指令 1.判断访问使用的协议 2.判断文件 (二)return指令 1.设置返回状态码 2.返回指定内容 3.指定URL (三)set指令 1.手动输入变量值 2.调用其它变量值为自定义变…

RISC-V特权架构 - CSR寄存器

RV32/64 特权架构 - CSR寄存器 1 CSR地址空间2 CSR定义2.1 用户级2.2 监管级2.3 超级监管级2.4 机器级 3 CSR访问3.1 CSRRW3.2 CSRRS3.3 CSRRC3.4 CSRRWI3.5 CSRRSI3.6 CSRRCI 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 CSR地址空间 RISC&…

房贷计算器微信小程序原生语言

微信小程序: 房贷计算器 效果: 输入 300万 结果 还款明细 一共有3个页面 1、输入页面 2、结果页面 3、详情页面 1 index页面 index.wxml文件 <view class="text-black"><!--房屋总价--><view class="cu-bar bg-white solid-bottom"&…

免费下载《金融行业数据安全交换解决方案白皮书》

金融行业包括商业银行业务、证券业务、保险业务、基金业务、信托业务等&#xff0c;因此数据类型多种多样&#xff0c;并且数据涉及主体众多&#xff0c;应用场景上较为多样复杂&#xff0c;在数据交换上存在安全、合规、可控、可靠、高效等需求。 金融行业会面临哪些数据安全…

IIS发布PHP网站字体404解决办法

最近在使用 IIS 发布 PHP 网站时&#xff0c;我遇到了一个前端问题&#xff0c;即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型&#xff0c;导致浏览器在加载页面时无法正确获取所需字体资源&#xff0c;进而触发了404错误。这样的问题会导致网站页…

Javascript:输入输出

目录 一.前言 二.正文 1.输出 2.输入 3.字面量 概念&#xff1a; 三.结语 一.前言 Javascript作为运行浏览器的语言&#xff0c;对于学习前端的同学来说十分重要&#xff0c;那么从现在开始我们将开始介绍有关 Javascript。 二.正文 1.输出 document.write() : 向body内…

第十四篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读Azure Cognitive Services个性化推荐系统

传奇开心果博文系列 系列博文目录Python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、个性化推荐系统介绍和关键功能以及优势解说二、雏形示例代码三、个性化推荐示例代码四、实时推荐示例代码五、多种推荐算法示例代码六、易于集成示例代码七、数据安全和隐私保…

C# DLL实现泄露实验

先说结论&#xff1a;如果应用程序项目中使用直接引用的形式调用动态链接库&#xff0c;当动态链接库是在调试模式生成的情况下&#xff0c;即使应用程序以发布模式生成&#xff0c;跟随应用程序一同生成的动态链接库仍为调试模式&#xff0c;会引发DLL实现泄露问题&#xff1b…

Google Genie:创意互动环境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

day57 集合 List Set Map

List实现类 List接口特点&#xff1a;元素有序 可重复 Arraylist 可变数组 jdk 8 以前Arraylist容量初始值10 jdk8 之后初始值为0&#xff0c;添加数据时&#xff0c;容量为10&#xff1b; ArrayList与Vector的区别&#xff1f; LinkList&#xff1a;双向链表 优点&#xff1…

智慧工地物联网云平台APP源码:监管端、工地端、危大工程、智慧大屏

目录 技术说明 智慧工地 服务对象&#xff1a;项目现场 企业项目管理 服务对象&#xff1a;建设领域企业 政府工地监管 服务对象&#xff1a;全国各省建设领域政府机构 劳务实名制管理解决方案 绿色施工解决方案 视频监控解决方案 塔机安全监控解决方案 施工升降机安…

【tableau学习笔记】tableau无法连接数据源

【tableau学习笔记】tableau无法连接数据源 背景&#xff1a; 学校讲到Tableau&#xff0c;兴奋下载Kaggle Excel&#xff0c;一看后缀CSV&#xff0c;导入Tableau发现报错“tableau无法连接数据源”&#xff0c;自作聪明改为后缀XLSX&#xff0c;bug依旧。 省流&#xff1a…

【DIY】TA7376组成的耳机放大电路

用头戴式耳机&#xff0c;尤其是小型耳机听音乐&#xff0c;总感到音乐味不够足&#xff0c;在低频段的效果更差。因此用本机增强耳机的低频特性&#xff0c;并采用立体声反相合成的办法&#xff0c;加上内藏简易矩阵环绕声电路&#xff0c;能获得强劲的低音和在较宽的范围内展…

构建一个基于Node.js的文件存储服务

随着现代web应用程序变得越来越复杂和功能强大&#xff0c;文件存储服务成为了许多应用的重要组成部分。在本篇博客中&#xff0c;我们将探讨如何构建一个基于Node.js的文件存储服务&#xff0c;让您可以轻松地上传、下载和管理文件。我们将利用Node.js的强大功能和模块来构建这…

美观的404错误页面源码

超级简单又美观的404模板&#xff0c;css文件全部集成在index.html&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地…

苍穹外卖知识点总结(一)

简介 技术选型 展示项目中使用到的技术框架和中间件。 用户层&#xff1a;node.js Vue.js ElementUI 微信小程序 apache echarts 网关层&#xff1a;nginx 应用层&#xff1a;Spring Boot Spring MVC Spring Task httpclie…

对齐了之后才舒服,matplotlib文字和字体设置

文章目录 text方法字体局部字体 matplotlib教程&#xff1a; 初步&#x1f4c8; 子图绘制&#x1f4c8; 坐标投影&#x1f4c8; 刻度设置&#x1f4c8; 共享坐标轴&#x1f4c8; 内容填充 text方法 【plt】提供了文字显示函数text&#xff0c;包含三个必不可少的参数&am…

【QT+QGIS跨平台编译】之五十八:【QGIS_CORE跨平台编译】—【qgsexpression_texts.cpp生成】

文章目录 一、Python二、生成来源三、构建过程3.1 构建qgsexpression_texts.cpp.temp3.2 构建qgsexpression_texts.cpp一、Python python.exe 是 Python 解释器的可执行文件,用于在命令行中运行 Python 脚本。它是 Python 编程语言的解释器程序,负责解析和执行 Python 代码。…

第十四届校模拟赛第一期(一)

“须知少时凌云志&#xff0c;自许人间第一流” 鄙人11月八号有幸参加学校校选拔赛&#xff0c;题型为5道填空题&#xff0c;5道编程题&#xff0c;总时间为4小时。奈何能力有限&#xff0c;只完成了5道填空和3道编程大题&#xff0c;现进行自省自纠&#xff0c;分享学习&#…