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

news2024/9/26 19:56:28

文章目录

  • 一、相关概念
    • 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(执行次数)越大,目标图像被腐蚀的越多。


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

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

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

相关文章

无需编程技能:Python爬虫与数据可视化毕业论文代写服务

引言 作为一名在软件技术领域深耕多年的专业人士,我不仅在软件开发和项目部署方面积累了丰富的实践经验,更以卓越的技术实力获得了🏅30项软件著作权证书的殊荣。这些成就不仅是对我的技术专长的肯定,也是对我的创新精神和专业承诺…

网络协议常见问题

网络协议常见问题 OSI(Open Systems Interconnection)模型OSI 封装 TCP/IP协议栈IP数据报的报头TCP头格式UDP头格式TCP (3-way shake)三次握手建立连接:为什么三次握手才可以初始化 Socket、序列号和窗口大小并建立 TCP 连接。每次建立TCP连接…

揭秘海外媒体运营:扩大影响力、跨越边界的创新之道

导语:随着全球化的不断深入,海外市场对于企业和个人的影响力已变得至关重要。在这一背景下,海外媒体运营崭露头角,成为扩大影响力、跨越边界的创新方式。本文将揭秘海外媒体运营的真正含义和功能,以及它如何通过原创内…

easyexcel文件上传

easyexcel文件上传 前言&#xff1a;功能开发中&#xff0c;难免碰到数据上传下载功能&#xff0c;excel上传常见用于报表上传&#xff0c;绩效上传&#xff0c;考勤上传… 使用步骤&#xff1a; 1&#xff0c;编写业务层&#xff1a; 1&#xff0c;添加easyexcel依赖 <…

linux:线程的控制

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的总结1. 线程的优点2. 线程的缺点3. 线程异常4.线程和进程 二、线程的控制创建线程线程终止线程等待获取返回值 线程分离 总结 前言 本文作为我对于线程的…

基于美洲狮优化算法(Puma Optimizar Algorithm ,POA)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

架构学习总结:企业架构=业务+数据+技术+应用架构

最近再次研读DAMA数据管理知识体系,结合工作对什么是企业架构?如何开展企业架构设计工作有一些新的认识,供大家参考。企业架构包括企业的业务架构、数据架构、技术架构和应用架构,要想做好企业的信息化数字化建设规划,这四个架构都不可缺少,这四个方面的内容共同组成了企…

药品管理系统|基于SSM 框架+ Mysql+Java+的药品管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

目录 文末获取源码 系统实现 前台首页功能 用户功能模块 管理员功能 员工功能模块 系统设计 数据库设计 lunwen参考 概述 源码获取 文末获取源码 系统实现 前台首页功能 用户功能模块 管理员功能 员工功能模块 系统设计 数据库设计 lunwen参考 概述 随着科学技术的…

区块链和人工智能的关系以及经典案例

目录 1.区块链与人工智能的关系 2.应用案例&#xff1a;基于区块链的医疗数据共享平台 2.1背景 2.2方案 2.3优势 2.4挑战 区块链技术和人工智能&#xff08;AI&#xff09;是两种不同的技术&#xff0c;但它们之间存在着互补关系。区块链技术提供了一种安全、透明、去中心…

设置文件管理器默认列宽 - Win系统

问题 当我们使用Windows系统自带的文件管理器时&#xff0c;手动调整列宽后&#xff0c;进入其他文件夹并不会生效更改&#xff0c;下文介绍解决方案&#xff0c;即如何设置文件管理器默认列宽。 解决方案 打开文件管理器&#xff0c;调整好每一列的列宽&#xff0c;然后点击…

vim基础命令

目录 前言 一.vim基础命令大全 二.vim熟练的好处 三.入门使用命令 四.使用案例 4.1 gg和G 4.2 i 和 u 和 ESC使用 4.3 y$ 和 p 和 u 使用 五.注意事项 前言 启动vim编辑器后自动进入编辑模式&#xff0c;在此模式中输入命令对应vim一个动作&#xff0c;比如&#xff1a;进入编辑…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行&#xff0c;就会导致顺序不同&#xff0c;同时就会导致出现问题&#xff0c;就比如俩个线程同时对同一个变量进行修改&#xff0c;我们难以预知执行顺序。 但在实际开发中&#xff0c;我们希望代码按一定的逻辑顺序执行&am…

Visual Basic6.0零基础教学(2)—vb中类的介绍和基本控件的属性

Visual Basic 6.0中类的介绍和基本控件的属性 文章目录 Visual Basic 6.0中类的介绍和基本控件的属性前言一、对象的有关概念1.类2.对象3.对象的三要素4.5. VB程序的执行步骤 二、基本控件属性1.修改控件属性的练习案例 总结 前言 大家好&#xff0c;昨天我们学习了vb的简单介…

elasticsearch 深度分页查询 Search_after(图文教程)

Search_after使用 一. 简介二. 不带PIT的search_after查询2.1 构造数据2.2 search_after分页查询2.2 问题 三. 带PIT的search_after查询3.1 构建第一次查询条件3.2 进行下一页查询3.3 删除PIT 四.参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注…

opencv解析系列 - 基于DOM提取大面积植被(如森林)

Note&#xff1a;简单提取&#xff0c;不考虑后处理&#xff08;填充空洞、平滑边界等&#xff09; #include <iostream> #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <opencv2/opencv.hpp> using namespace cv…

Feign远程调用错误

说明&#xff1a;记录一次使用Feign远程调用的错误&#xff0c;错误信息如下&#xff1a; },Server stats: [[Server:192.168.222.1:8082; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:…

spring-boot-maven-plugin springboot打包配置问题

目录 一、打包可执行jar 二、打包非可执行jar 三、两种jar对比 springboot项目的pom文件中一般都配置了spring-boot-maven-plugin打包插件。 <!-- 打包插件依赖 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-b…

论文阅读:Iterative Denoiser and Noise Estimator for Self-Supervised Image Denoising

这篇论文是发表在 2023 ICCV 上的一篇工作&#xff0c;主要介绍利用自监督学习进行降噪的。 Abstract 随着深度学习工具的兴起&#xff0c;越来越多的图像降噪模型对降噪的效果变得更好。然而&#xff0c;这种效果的巨大进步都严重依赖大量的高质量的数据对&#xff0c;这种对…

栈和队列——超详细

一、定义 1.栈的定义&#xff1a; 栈是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&#xff08;Top&#xff09;:线性表允许进行插入删除的那一端&#xff1b;栈底 (Bottom) &#xff1a;固…

vs2022的下载及安装教程(Visual Studio 2022)

vs简介 Visual Studio在团队项目开发中使用非常多且功能强大&#xff0c;支持开发人员编写跨平台的应用程序;Microsoft Visual C 2022正式版(VC2022运行库)&#xff0c;具有程序框架自动生成&#xff0c;灵活方便的类管理&#xff0c;强大的代码编写等功能&#xff0c;可提供编…