图像处理技巧形态学滤波之膨胀操作

1. 引言

欢迎回来,我的图像处理爱好者们!今天,让我们继续研究图像处理领域中的形态学计算。在本篇中,我们将重点介绍腐蚀操作的反向效果膨胀操作。

闲话少说,我们直接开始吧!

2. 膨胀操作原理

膨胀操作为腐蚀操作的作用相反,这是图像处理中最常使用的另一种形态学操作,它主要通过在图像边界上扩展像素来实现扩宽图像中对象的作用。膨胀操作通过考虑每个像素的邻域并将其值设置为该邻域中所有像素中的最大值来实现的。对于二值图像,如果任何相邻像素的值为1,则输出像素也被设置为1。

接着,让我们通过具体示例来进行讲解,首先导入我们今天的图像,代码如下:

# Define the image
original_image = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 1, 1, 1, 0, 0],
                           [0, 0, 1, 1, 1, 1, 0, 0],
                           [0, 1, 1, 1, 1, 0, 0, 0],
                           [0, 1, 1, 1, 0, 0, 0, 0],
                           [0, 1, 1, 1, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0]])

plt.figure(figsize=(10,10))
plt.imshow(original_image, cmap='gray', extent=[0, 8, 0, 8])
plt.title('Original Image', fontsize=20);

得到结果如下:
在这里插入图片描述

3. 定义结构化元素

和上一节腐蚀操作类似,我们选择同样的十字架结构化元素模板,代码如下:

# Define the structuring element
selem_cross = np.array([[0,1,0],
                        [1,1,1],
                        [0,1,0]])
plt.figure(figsize=(9,9))
plt.imshow(selem_cross, cmap='gray')
plt.title('Structuring Element: Cross', fontsize=20);

得到结果如下:
在这里插入图片描述

4. 膨胀操作效果

经过上述操作,我们定义了需要操作的原始图像和相应的结构化模板元素,接着我们使用函数apply_erosion来将上述结构化模板元素作用于相应的图像中,进而得到我们膨胀操作的效果,代码如下:

def apply_erosion(image, selem):
    # Perform erosion on the given image using the structuring element, selem
    eroded_image = erosion(image, selem)

    # Display the original and eroded images
    fig, axes = plt.subplots(1, 3, figsize=(15, 10))
    ax = axes.ravel()
    
    ax[0].imshow(selem, cmap='gray', 
                 extent=[0, selem.shape[1], 0, selem.shape[0]])
    ax[0].set_title('Structuring Element', fontsize=20)

    ax[1].imshow(image, cmap='gray', 
                 extent=[0, image.shape[1], 0, image.shape[0]])
    ax[1].set_title('Original Image', fontsize=20)

    ax[2].imshow(eroded_image, cmap='gray', 
                 extent=[0, image.shape[1], 0, image.shape[0]])
    ax[2].set_title('Eroded Image', fontsize=20)

    plt.tight_layout()
    plt.show()

apply_erosion(original_image, selem_cross)

最终膨胀操作的效果如下:
在这里插入图片描述
观察上述输出,可以看到经过膨胀操作后的图相比原始图像的扩大版。大家可以通过下列动图进行更加详细的理解,样例图如下:
在这里插入图片描述

5. 其他效果

需要注意的是,和腐蚀操作类似,膨胀操作中使用的邻域大小或结构元素的选择会对结果产生不同的影响。
这里,如果选择使用上一篇节中得正方形作为测试结构元素,相应得效果如下:
在这里插入图片描述

6. 总结

本文重点介绍了和腐蚀操作相反作用得膨胀操作,并通过具体例子进行了原理讲解,同时给出了相应得代码示例。

您学废了嘛?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建Docker容器监控系统(Cadvisor +Prometheus+Grafana)

Cadvisor PrometheusGrafana 1.1、Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 1.2、安装docker-ce [rootloc…

linux下查看谁在用显卡

一般查看显卡的使用情况使用的命令为 nvidia-smi但是这个只能输出显卡的占用及进程,看不到谁在用 信息如下 但是可以借助上面的PID信息,查看对应的进程是谁调用的, 命令为: ps -f -p 4417其中4417就是上图中的其中一个PID 输出…

Air001基于Keil环境点灯和调试输出工程配置

Air001基于Keil环境点灯和调试输出工程配置 📌官方环境搭建教程介绍:https://wiki.luatos.com/chips/air001/Air001-MDK.html🔖本人使用的是基于HAL库环境搭建的。📍SDK开发资源链接:https://gitee.com/openLuat/luato…

SQL | 过滤数据

4-过滤数据 4.1-使用WHERE子句 数据根据 WHERE 子句中指定的搜索条件进行过滤。WHERE 子句在表名( FROM 子句)之后给出。 select prod_name,prod_price from products where prod_price 3.49; 上述语句查询价格为3.49的行,然后输出名字和…

C语言学习之一级指针二级指针

一级指针:内存中每个字节都有一个编号,这个编号就是指针,也称作地址;专门用来存储地址的变量,就是指针变量;定义一级指针变量并初始化: 数据类型 *指针变量名 &普通变量名; 数据类型 *指针…

域名配置HTTPS

一、注册域名 这个可以在各大平台注册,具体看一下就会注册了,自己挑选一个自己喜欢的域名。 步骤一般也就是先实名,实名成功了才能注册域名。 二、办理SSL证书 这里使用的是阿里云的SSL免费证书 1、申请证书 二、填写申请 三、域名绑定生…

MiniPaint:在线图像编辑利器【在线PS】

MiniPaint在线图像编辑器使用 HTML5 实现图像的在线创建与编辑,在线PS,支持超过40种效果滤镜,无需本地安装,在很多应用场景中可以替代PhotopShop等传统软件。 访问地址:MiniPaint - 在线PS - 在线图像编辑。 1、打开图…

算法随笔:图论问题之割点割边

割点 定义 割点的定义:如果一个点被删除之后会导致整个图不再是一个连通图,那么这个顶点就是这个图的割点。举例: 上图中的点2就是一个割点,如果它被删除,则整个图被分为两个连通分量,不再是一个连通图。…

keil下载程序具体过程2:硬件链路

引言 本篇博客将介绍keil下载程序的过程中,镜像文件将经过哪些硬件,以及简单的介绍他们之间的协议。 一、硬件连接 图1 硬件连接 将PC、jlink、芯片使用ubs线、swd线连接好之后,在PC上的keil软件中,我们选择对应的仿真器&#xf…

力扣 518. 零钱兑换 II

题目来源:https://leetcode.cn/problems/coin-change-ii/description/ C题解(来源代码随想录): 这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。但本题和纯完全背包不一样&#xff0c…

【Tomcat】tomcat的多实例和动静分离

多实例: 在一台服务器上有多台Tomcat;就算是多实例 安装telnet服务,可以用来测试端口通信是否正常 yum -y install telnettelnet 192.168.220.112 80 tomcat的日志文件 cd /usr/local/tomcat/logsvim catalina.out Tomcat多实例部署&…

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义? 前言 MAUIBlazor其实就是浏览器套壳,我觉得很有意义,因为现在性能已经不是主要的限制了,很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…

Java课题笔记~ Servlet编程

1.Servlet编程基础 (1)什么是Servlet Servlet是基于Java语言的Web编程技术,部署在服务器端的Web容器里,获取客户端的访问请求,并根据请求生成响应信息返回给客户端。 创建Servlet的方式,有 如下图:一般创建Servlet都…

skynet 网络模块解析

文章目录 前言环境准备sneak peek线程数据结构会话对象:持有基础套接字,封装了套接字的基础操作。会话管理器:持有并管理会话池,给外部模块提供网络接口。 网络模块管理会话管理器的生命周期管理工作模式 总结技术点原子数据管道描…

opencv实战项目 手势识别-手势控制键盘

手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪(定位手部关键点) 2.opencv实战项目 实现手势跟踪并返回位置信息(封装调用&am…

计算机竞赛 - 基于机器视觉的图像拼接算法

前言 图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,…

Java基础入门篇——修饰符

在Java中,修饰符(Modifiers)是一种用于修改类、方法、变量和其他实体的访问权限、行为或特性的关键字。Java提供了一组修饰符,可以用于实现对代码的封装、继承、多态和访问控制等功能。 1、访问修饰符(Access Modifie…

【Spring Boot】夺名连环问(持续更新ing)

Spring的了解与特性 简单介绍:快速开发Spring项目的脚手架。简化Spring应用的初始搭建以及开发过程。 特性 提供了很多内置的Starter结合自动配置,对主流框架的无配置集成、开箱即用。即不需要自己去引入很多依赖。 并且管理了常用的第三方依赖的版本&…

Node.js |(二)Node.js API:fs模块 | 尚硅谷2023版Node.js零基础视频教程

学习视频:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 文章目录 📚文件写入🐇writeFile 异步写入🐇writeFileSync 同步写入🐇appendFile / appendFileSync 追加写入🐇createWriteStrea…

LeetCode150道面试经典题--验证回文串(简单)

1.题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否…