首页 > 其他分享 >膨胀与腐蚀,开运算与闭运算

膨胀与腐蚀,开运算与闭运算

时间:2024-09-08 10:52:08浏览次数:10  
标签:原图 运算 目标 腐蚀 膨胀 像素

复习一下以前学过的图像处理知识点,简单记录一下腐蚀与膨胀,开运算与闭运算的知识,本文处理均针对二值化图像。opencv二值化函数为threshold()。

一、腐蚀

1、定义与原理

腐蚀是一种消除连通域的边界点,使边界向内收缩的处理,如下图所示:

其实现原理是:首先设计一个结构元素,原点定位在待处理的目标像素上,通过判断是否覆盖,来确定是否该点被腐蚀掉

opencv 腐蚀处理接口: erode()

2、腐蚀算法步骤

1)扫描原图,找到第一个像素值为1的目标点

2)将预设好形状及原点位置的结构元素的原点移到该点

3)判断该结构元素所覆盖的像素值是否全部为1

是: 腐蚀后图像中相同位置上像素值为1

否: 腐蚀后图像中相同位置上像素值为0

4)重复2和3,直到所有原图中像素处理完成

3、作用

从上图可以看出,腐蚀运算可以将粘连在一起的不同目标物分离,并可将小的颗粒噪声去除

二、膨胀

1、定义与原理

膨胀是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理。

设计一个结构元素,结构元素的原点定位在背景像素上,判断是否覆盖有目标点,来确定是否该点被膨胀为目标点。

opencv 膨胀处理接口: dilate()

2、膨胀算法步骤

1)扫描原图,找到第一个像素值为0的背景点;

2)将预先设定好形状以及原点位置的结构元素的原点移到该点;

3)判断该结构元素所覆盖的像素值是否存在为1的目标点:

是:膨胀后图像中的相同位置上的像素值为1;

否:膨胀后图像中的相同位置上的像素值为0;

4)重复2)和3),直到所有原图中像素处理完成。

可以看出膨胀算法与腐蚀算法仅第一步有所不同,它们是一对逆运算

3、作用

容易看出,膨胀处理可以将断裂开的目标物进行合并,便于对其整体的提取。

三、开运算与闭运算

前面介绍的膨胀与腐蚀运算,对目标物的后处理有着非常好的作用。但是,腐蚀和膨胀运算改变了原目标物的大小。为保持目标物大小,考虑到腐蚀与膨胀是一对逆运算,将膨胀与腐蚀运算同时进行。就有了开运算与闭运算。

1、开运算

开运算是对原图先进行腐蚀处理,后再进行膨胀的处理,不仅可去除孤立的小点,毛刺和小桥,还可以在分离粘连目标物的同时,基本保持原目标物的大小。如下图:

2、闭运算

闭运算是对原图先进行膨胀处理,后再进行腐蚀的处理,不仅可弥合小孔,缝隙,还可以在合并断裂目标物的同时,基本保持原目标物的大小。

3、特殊处理

如果当按照常规的开运算不能分离粘连,或者是闭运算不能合并断裂:

对于开运算可以先进行N次腐蚀,再进行N次膨胀;

对于闭运算可以先进行N次膨胀,再进行N次腐蚀。

如下图所示

标签:原图,运算,目标,腐蚀,膨胀,像素
From: https://blog.csdn.net/well_fly/article/details/142023465

相关文章

  • E31.【C语言】练习:指针运算习题集(上)
    Exercise1求下列代码的运行结果#include<stdio.h>intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d",*(ptr-1)); return0;}答案速查:分析:Exercise2 求下列代码的运行结果//在x86环境下//假设结构体的大小是20个字节......
  • 【数据结构和算法实践-位运算-找出数组中出现K次的数,其他数出现M次】
    位运算-找出数组中出现K次的数,其他数出现M次题目MyThought代码示例JAVA-8题目一个数组中,一个数出现了K次,另外其他的数出现了M次,找出出现K次的数MyThought一、设置一个长度为32的int[]temp,把arr中的每个数都变成2进制,放入temp中1、设置长度为32的int数组2......
  • MySQL基础(5)- 运算符
    目录一、算数运算符1.加法运算符2.乘除运算符3.取模运算二、比较运算符1.=<=><>!=<<=>>=2.ISNULL\INNOTNULL\ISNULL3.LEAST()\GREATEST()4.BETWWEEN条件下界1AND条件上界25.in(set)\notin(set)6.LIKE:模糊查询7.REGEXP\RLIKE:正则表达......
  • 通过三元运算符让 Python 代码更简洁高效
    目录什么是三元运算符?三元运算符的基本用法三元运算符的实际应用场景深入理解:三元运算符与普通`if-else`的比较三元运算符的注意事项三元运算符在实际项目中的应用总结在编程中,代码的可读性和效率是两个至关重要的因素。而Python,作为一种以简洁和易读著称的编......
  • 算数运算符
    //+-*/%(取余)intnum=10+10;//20intnum1=10-10;//0intnum2=10*10;//100intnum3=10/10;//1intnum4=10%3;//1Console.WriteLine(num4);//算数运算符优先级和数学中是一样的//先算乘除再算加减取余运算符优先2缓和乘除一样//提升优先级使用......
  • C++入门基础知识50——【关于C++数字】之C++ 数学运算
    成长路上不孤单......
  • 3.idea 运算符
    MODULE3 idea运算符All一、Idea(一)idea的介绍1.概述:开发工具2.特点:(1)idea是java写的,所以本地上必须有正确的jdk环境(JAVA_HOME)(2)Idea自动保存(3)不用我们打开dos命令窗口执行javac和java命令(4)Idea有强大的快捷键,生成代码,纠错等(5)Idea会自动管理我们写的代码3.相关开发工具:eclipsemye......
  • Java运算符(详解)
    前言:    Java中运算符有哪些?    大致分为:    算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算符接下来,一一分析。算术运算符: 基本运算符:    加减乘除,是最基本的运算符。例子:publicstaticvoidmain(Str......
  • 新手c语言讲解及题目分享(十七)--运算符与表达式专项练习
    本文主要讲解c语言的基础部分,运算符与表达式的学习,在这一部分中,往往有许多细节的东西需要去记住。当各种运算符一起用时,就会存在优先级的关系,本文末尾有各种运算符的优先级顺序表。参考书目和推荐学习书目:通过网盘分享的文件:C语言程序设计电子教材(1).pdf链接:https://pa......
  • pgsql计算加减乘除:深入探索PostgreSQL中的数学运算
    pgsql计算加减乘除:深入探索PostgreSQL中的数学运算在数据库管理系统中,进行基本的数学运算是非常常见的需求。PostgreSQL(简称pgsql),作为一个功能强大的开源对象-关系数据库系统,提供了丰富的数学函数和操作符来支持加减乘除等基本运算。本文将深入探讨如何在PostgreSQL中执行这些运算......