python形态学滤波:腐蚀、膨胀、开、闭运算

news2025/2/21 23:34:57

文章目录

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

最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算

二值灰度
binary_erosiongrey_erosion腐蚀
binary_dilationgrey_dilation膨胀
binary_closinggrey_closing闭(先膨胀后腐蚀)
binary_openinggrey_opening开(先腐蚀后膨胀)

二值形态学

所谓腐蚀,用数学符号表示为

A ⊖ B = { ( i , j ) ∣ B i j ⊆ A } A\ominus B=\{(i,j)|B_{ij}\subseteq A\} AB={(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。

膨胀则与之相反,可表示为

A ⊕ B = { ( i , j ) ∣ B i j ∪ A ≠ ∅ } A\oplus B=\{(i,j)|B_{ij}\cup A\not=\varnothing\} AB={(i,j)BijA=}

换言之,只要 B B B A A A的重叠区域不是空集,那么 ( i , j ) (i,j) (i,j)点就置为1。

举个例子如下

import numpy as np
import matplotlib.pyplot as plt
import scipy.ndimage as sn

x = np.zeros([20,20])
x[5:15, 5:15] = 1
x_ero = sn.binary_erosion(x)
x_dil = sn.binary_dilation(x)

fig = plt.figure()
ax = fig.add_subplot(1,3,1)
ax.imshow(x)
plt.title("original")
ax = fig.add_subplot(1,3,2)
ax.imshow(x_ero)
plt.title("erosion")
ax = fig.add_subplot(1,3,3)
ax.imshow(x_dil)
plt.title("dilation")
plt.show()

效果如下

在这里插入图片描述

开运算是先腐蚀后膨胀;闭运算是先膨胀后腐蚀,示例如下

x = np.zeros([20,20])
x[5:15, 5:15] = 1
x[10:12,10:12] = 0
x[2:4, 2:4] = 1

x_open = sn.binary_opening(x)
x_close = sn.binary_closing(x)

fig = plt.figure()
ax = fig.add_subplot(1,3,1)
ax.imshow(x)
plt.title("original")
ax = fig.add_subplot(1,3,2)
ax.imshow(x_open)
plt.title("opening")
ax = fig.add_subplot(1,3,3)
ax.imshow(x_close)
plt.title("closing")
plt.show()

效果如下,可见开运算会去除孤立的1,闭运算会去除孤立的0。

在这里插入图片描述

灰度形态学

灰度图像的腐蚀、膨胀以及开闭运算,是其二值形势下的一个扩展,采用了类似卷积的逻辑,下面直接从scipy中调取楼梯图片,并依次做腐蚀、膨胀以及开闭操作。

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,3,i+1)
    plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray)
    plt.title(key)

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.coloradmin.cn/o/410401.html

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

相关文章

快速部署专业领域AI处理网站

当前AI大型语言模型展示了很强的信息整合与处理能力,但一些专业知识方面的问答知识量还不够完善,我们在AI的基础上增加了内容训练数据库,相关内容自动添加到AI内容数据库索引。在使用时,可以实时根据对话内容进行检索调取相关上下…

谷歌发布Self-Debug方法,让大模型学会自己修bug,一次性生成正确代码

文 | 智商掉了一地你有没有想过,让一台计算机诊断和修复自己生成的错误代码?一篇最新的研究论文介绍了一种名为 Self-Debugging 的技术,通过在生成的代码中添加自解释的信息,让计算机像一个可以自己修复代码的程序员一样调试自己的…

CAN CRC校验15_CAN FD与CAN协议区别

1 概述 CAN-FD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变。 CAN与CAN-FD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。 2 传输速率不同 CAN:最大传输速率1Mbps。 CAN-FD&#xff1…

MIPI D-PHYv2.5笔记(16) -- Preamble Sequence、HS-Idle State、Sync Patterns

声明:作者是做嵌入式软件开发的,并非专业的硬件设计人员,笔记内容根据自己的经验和对协议的理解输出,肯定存在有些理解和翻译不到位的地方,有疑问请参考原始规范看 Preamble Sequence 前导码序列(Preamble …

chatGPT爆火,什么时候中国能有自己的“ChatGPT“

目录 引言 一、ChatGPT爆火 二、中国何时能有自己的"ChatGPT" 三、为什么openai可以做出chatGPT? 四、结论 引言 随着人工智能技术的不断发展,自然语言处理技术也逐渐成为了研究的热点之一。其中,ChatGPT作为一项领先的自然语言处理技术…

【ChatGPT】ChatGPT还能保持多久的神话?

文章目录引言正文ChatGPT的由来ChatGPT的影响乱象频出ChatGPT未来的走势引言 最近ChatGPT的热度持续拔高,一个功能强大的AI迅速引爆了全世界,上到技术大佬,下到平民百姓,都在讨论并使用这个“跨时代的”的技术。有人拿它聊天&…

前端已死?金三银四?你收到offer了吗?

目录 一、前言 二、“唱衰” 三、不局限于框架、前端 四、打动面试官 五、正向加成 六、小结 一、前言 最近在脉脉、知乎等平台都有人在渲染前端从业人员的危机,甚至使用“前端已死”的字眼,颇有“语不惊人死不休”的意味,对老鸟来说&a…

惊呆了,2小时我就学会了Charles抓包的详细教程

目录 一、什么是Charles 二、下载Charles 三、设置Charles代理 四、配置设备代理 五、抓包操作 六、常见问题及解决方法 抓包不到某些应用程序 Charles抓包后网站出现异常 七、总结 一、什么是Charles Charles是一个跨平台的HTTP代理服务工具,可以用来查看…

Zabbix“专家坐诊”第187期问答汇总

问题一 Q:zabbix server 5.0有办法不通过脚本监控SSL证书到期时间么? A:目前还是流行通过脚本方式去获取。 Q:如果是通配符证书应该怎么监控? A:通过解析域名获取对应的过期时间的,或者证书在…

使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo

使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo 任务需求 Imagenet数据集,由于原始图片有灰度图片、彩色图片和RGBA图片,我们的要求是将灰度图片和4通道图片通过Image.open(img_pathimg_name).convert(RGB)转换为RGB三通道…

链式二叉树及相关操作(前,中,后,层序遍历)

欢迎来到 Claffic 的博客 💞💞💞 “春来无事,只为花忙。” 前言: 上一期给大家介绍了二叉树的一种顺序结构:堆,这一期承接上一期,给大家继续介绍二叉树的另一种结构:链式结构。 目录…

深度学习部署(十九): CUDA RunTime API YOLOV5后处理cpu解码以及gpu解码

跟着杜老师学AI 看看我们干了什么, 就是把bouding box恢复成框而已 1.1 知识点和先验知识 对于模型推理后的后处理,可以直接使用cuda核函数进行解码,效率比较高nms也可以在核函数里面实现这里演示了一个yolov5的实际案例,后续其他的操作都…

反序列化渗透与攻防(四)之Fastjson反序列化漏洞

Fastjson反序列化漏洞 Fastjson介绍 Fastjson是一个阿里巴巴开源的一款使用Java语言编写的高性能功能完善的JSON库,通常被用于将Java Bean和JSON 字符串之间进行转换。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,…

leedcode刷题(4)

各位朋友们,大家好。这两天我将为大家分享我在学习栈的过程中遇到的题目,我们一起来看看。 文章目录逆波兰表达式求值题目要求用例输入提示做题思路代码实现c语言实现代码Java语言实现代码有效的括号Java代码实现逆波兰表达式求值 leedcode之逆波兰表达…

Python工程师Java之路(t)使用Shell脚本部署SpringBoot

文章目录1、概述2、在服务器上安装Maven2、在服务器上安装Git3、Shell脚本4、SpringBoot部署测试1、概述 #mermaid-svg-MhYgFNGEE2jsSopb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MhYgFNGEE2jsSopb .error-ic…

【中级软件设计师】—数据库系统考点总结篇(三)

【中级软件设计师】—数据库系统考点总结篇(三) 课程大纲与考点分布 1 数据库系统的体系结构 分布式数据库的透明性 1.1 三级模式—两级映射 1.2 数据库的设计过程 1.3 E-R模型 首先每个实体要单独转成一个关系模式,总共三个实体三个关系模式…

ubuntu20.04安装Intel核显QSV编译FFmpeg支持QSV硬件加速

Intel Video And Audio For Linux: libva: Libva is an implementation for VA-APIlibva下可以接入各种driver,以支持不同的设备 VA-API(Video Acceleration API): is an open-source library and API specification(规格说明,技术参数)libv…

现在的年轻人真会玩,开发界面都这么时尚,不服老都不行了

文章目录一、你还在用传统的开发界面吗二、年轻人的界面1.动漫型2.偶像型3.提神型三、更换背景的操作第一步第二步第三步一、你还在用传统的开发界面吗 不比不知道,一比吓一跳,都2023年了,你还在用Pycharm的默认背景写代码吗?已经…

深度学习训练营_第J5周_DenseNet+ SE-Net实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 本周进行SE模块在DenseNet上的改进实验,之后将改进思路迁移到YOLOv5模型上测试 首先是学习SE模块 SE模块:Squeeze-an…

Nuxt - 超详细 Element 组件库主题颜色进行 “统一全局“ 替换,将默认的蓝色主题色更换为其他自定义颜色(保姆级教程,简易且标准全局替换主题色)

前言 如果需要纯 Vue 版本,请访问:这篇文章。 网上的文章可以用乱七八糟来形容了,各种奇葩的引入、安装各种东西,本文提供简洁且符合官方标准的解决方案。 Element UI 默认主题色是蓝色,很可能与我们设计稿不一致(比如设计稿是绿色主题), 这时候问题就出现了,难不成每…