【Emgu CV教程】9.1、形态学常用操作之腐蚀

2024-03-11 08:36

本文主要是介绍【Emgu CV教程】9.1、形态学常用操作之腐蚀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、相关概念
    • 1.什么叫形态学
    • 2.形态学操作的目的
    • 3.形态学都包含哪些操作
    • 4.结构元素StructuringElement
  • 二、腐蚀
    • 1.什么叫腐蚀
    • 2.腐蚀的作用
    • 3.腐蚀的函数
  • 三、演示
    • 1.原始素材
    • 2.代码
    • 3.运行结果


一、相关概念

1.什么叫形态学

形态学,英文名称morphology,根据网络上专业的说法,它是一种基于形状的图像处理技术,通过结构元素与图像进行特定运算的方式来改变图像的形态和特征。结构元素是一种小型、预定义的形状,通常是矩形、圆形或者椭圆形。

形态学操作的对象,一般是 二值化后的灰度图,对于普通灰度图、彩色图像,一般不用形态学操作。

2.形态学操作的目的

形态学操作后,可以保留二值化图像主要特征,消除噪点、孤立点的影响,更容易的获取到目标区域。这个操作在图像处理里面非常重要,基本上50%的图像处理例子都会用到。

3.形态学都包含哪些操作

腐蚀、膨胀、开运算、闭运算、形态学梯度、顶帽、黑帽,击中与击不中,名字是不是听起来都挺特殊的,别着急,咱们一个一个的举例子。

4.结构元素StructuringElement

在正式讲各种形态学操作之前,还有一个名字要解释一下,就是结构元素(Structuring Element),也可以叫卷积核。可以理解为结构元素是由值为1的矩阵组成,假设是7 * 7 的结构元素,那就是以目标点P(x,y)为中心,对周边邻域7 * 7 大小的范围内进行计算,得到的结果就是输出图像P(x,y)点的值。

二、腐蚀

1.什么叫腐蚀

二值化图片以黑色为背景,白色为前景物体。腐蚀就是收缩前景物体的边缘。其原理是将一个结构元素在图像上滑动,如果结构元素对应的原图的所有像素值为1(或者255),那么中心元素就保持原来的值,否则变为零。

假设有一副图像如下图,灰色底色是背景,黄色底色是前景物体。
在这里插入图片描述

定义一个结构元素,大小是3 * 3,也就是这样的
在这里插入图片描述

如果对左侧绿底色的255那个点做腐蚀操作,根据结构元素大小,提取出的计算区域是在这里插入图片描述

在这9个值中,存在等于0的点,因此输出图像中,这个绿底色255点的值就是0。如果对右边绿底色255进行腐蚀呢,它提取出的计算区域是
在这里插入图片描述

因为9个值都是255,因此这个点的腐蚀结果,还是255。

2.腐蚀的作用

腐蚀操作可以去除白色前景物体的边缘毛刺,也可以断开相连的白色前景。 各种形态学操作的作用要记清楚了。

3.腐蚀的函数

Emgu CV中,腐蚀的函数定义如下:

public static void Erode(IInputArray src,  // 输入图像IOutputArray dst, // 输入图像IInputArray element, // 结构元素大小Point anchor, // 锚点位置,默认为中心new Point(-1, -1)int iterations, // 腐蚀操作迭代次数BorderType borderType, // 边界填充方式,一般取默认MCvScalar borderValue // 边界值,使用时一般写成new MCvScalar()
)

三、演示

1.原始素材

原始素材定义为srcMat,是一张黑色背景,白色前景的图像。
在这里插入图片描述

2.代码

Emgu CV在背景图片中找到目标图片的黄色小球,代码如下:

Mat tempMat = srcMat.Clone();
Mat gray = new Mat();
Mat dstMat = new Mat();
int kernelX = Convert.ToInt16(TextBoxX.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,水平方向
int kernelY = Convert.ToInt16(TextBoxY.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,垂直方向
int iterations = Convert.ToInt16(TextBoxIterations.Text.Trim().ToString()); // 需要执行腐蚀的次数// 要转成灰度图
CvInvoke.CvtColor(tempMat, gray, ColorConversion.Bgr2Gray);// 定义结构元素,其中元素的形状是矩形,size大小由两个文本框决定,默认锚点new Point(-1,-1)是指在中心
Mat element = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new System.Drawing.Size(kernelX, kernelY), new System.Drawing.Point(-1, -1));// 开始腐蚀,其中锚点位置new Point(-1, -1)代表中心
CvInvoke.Erode(gray, dstMat, element, new System.Drawing.Point(-1, -1), iterations, BorderType.Default, new MCvScalar());
CvInvoke.Imshow("Gray, " + gray.Size.ToString(), gray);
CvInvoke.Imshow("Erode, " + dstMat.Size.ToString(), dstMat);

注意哈,结构元素的内核要对水平方向和垂直方向分别定义。

3.运行结果

假设kernelX = 3,kernelY =3,iterations = 1, 其腐蚀结果如下所示:

在这里插入图片描述
白色区域是不是变细了,而且白色矩形的边缘毛刺,也被腐蚀掉了。假设kernelX = 9,kernelY =1,iterations = 1, 其腐蚀结果如下所示:

在这里插入图片描述
这次就是水平方向的前景形状还能保留,垂直方向的直线(或者曲线形状),很多都被腐蚀没了,为什么呢?就是因为结构元素,其X方向是9,也就是水平方向以目标点为中心,左右9个计算区域内,有值为0的就输出。水平方向计算区域大了,只有横向的白色区间越大,目标点是255的可能性才越大。而结构元素Y方向是1,也就是垂直方向计算区域只有目标点,目标点是255结果就输出255;目标点是0结果就输出0。假设kernelX = 1,kernelY =13,iterations = 1, 其腐蚀结果如下所示:
在这里插入图片描述
是不是水平方向的前景被腐蚀了很多,但垂直方向的前景基本保留了。这个原理需要仔细理解一下,先记住腐蚀操作的结论:

1、结构元素水平方向值越大,目标图像中竖向前景越容易被腐蚀。
2、结构元素垂直方向值越大,目标图像中水平前景越容易被腐蚀。
3、iterations(执行次数)越大,目标图像被腐蚀的越多。


原创不易,请勿抄袭。共同进步,相互学习。

这篇关于【Emgu CV教程】9.1、形态学常用操作之腐蚀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797268

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github