Python实例解析图像形态学运算技术
作者:Mr.Winter` 发布时间:2021-04-14 10:34:24
1 图像形态学运算
在Python OpenCV图像处理之图像滤波特效详解中我们将图像滤波进行了以下分类:
邻域滤波
线性滤波
非线性滤波
频域滤波
低通滤波
高通滤波
在非线性滤波中,之前只介绍了中值滤波,事实上,还有一类非常常用的非线性滤波方法,称为图像形态学运算(Morphological operations)。
图像形态学运算是一类基于图像形状运算的非线性滤波技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理。这里结构元素就相当于我们在滤波中所涉及到的模板——一个给定像素的矩阵,这个矩阵形状可以任意,但一般是正方形。
接下来,我们分析一下几种经典的图像形态学运算算法,再编程测试一下~
2 腐蚀
腐蚀就是用局部灰度最小值代替目标像素值实现对高亮区域的腐蚀。
举个例子,有这样一张图像和这样一个结构元素,其中结构元素的蓝色方块表示的是模板原点。
下面我们开始遍历这张图像,到下图这个位置的时候,模板内灰度最小值是灰色方格的像素,因此替换掉模板原点中蓝色方格处的像素为灰色(原本为白色,被腐蚀了)
就这样遍历完这张图像得到
3 膨胀
膨胀就是用局部灰度最大值代替目标像素值实现对高亮区域的膨胀。
和腐蚀类似,遍历这张图像,到下图这个位置的时候,模板内灰度最大值是白色方格的像素,因此替换掉模板原点中蓝色方格处的像素为白色(原本为灰色,膨胀了)
就这样遍历完这张图像得到膨胀的最终结果为
上个实物图感受下腐蚀和膨胀的效果
4 开运算与闭运算
理解了图像腐蚀与膨胀,那么开闭运算就很容易了
开运算(Opening):先腐蚀再膨胀
闭运算(Closing):先膨胀再腐蚀
开运算能够除有效去除孤立点、毛刺和小桥;闭运算能够填平小孔,弥合缝隙。
上图假设灰色区域为高亮。
5 顶帽运算与底帽运算
顶帽运算与底帽运算是用于表征开闭运算与原图像间差异的运算,类似边缘检测的梯度差
图像顶帽运算:表征原图像与开运算得到的图像之间的区别
图像底帽运算:表征原图像与闭运算得到的图像之间的区别
6 恶魔与天使
先看看原图,一对可爱的猫咪
进行腐蚀操作,首先创建结构元
int eSize = 3; //结构元尺寸
int s = eSize * 2 + 1;
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
接着用结构元遍历原图,OpenCV
有封装好的API,直接调用即可
erode(src, dst, structureElement);
imshow("腐蚀操作后:", dst);
得到腐蚀后的图像如下所示,眼睛空洞洞的,有点恐怖片内味了,这还是原来那两只猫吗?
膨胀操作类似于腐蚀,也有OpenCV
封装好的API
dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨胀操作后:", dstImg);
膨胀出来的小猫就显得轻松很多,感觉升华了。
今后要是想有一张照片创造光与影
、正与邪
、天使与恶魔
两种反差,可以考虑采用图像腐蚀和膨胀操作。
来源:https://blog.csdn.net/FRIGIDWINTER/article/details/123439545


猜你喜欢
- 2010新的架构工具可以让我们了解应用程序和功能设计,并帮助验证设计和执行不偏离。它除了支持一般系统分析设计流程(需求→实体)外,也支持另一
- 下面方法可以用来快速生成一批数据 if(object_id('t') is not null) drop table t g
- 当你加入到一个项目,相关的CSS文件可能会看得你头昏眼花。时间一长,修改了哪些内容,增加了哪些内容,也都弄不清,维护成本相当的高。正好我们国
- 本文实例讲述了Python实现字符串反转的常用方法。分享给大家供大家参考,具体如下:下面是实现python字符串反转的四种方法:1. 切片d
- 前几天有一个需求,透视表中的年级这一列要按照一年级,二年级这样的序列进行排序,但是用过透视表的人都知道,透视表对中文的排序不是太理想,放弃p
- 变量赋值与对象赋值对比<?php // 声明一个变量并赋值 $a = 1; // 将数据类型
- format是字符串内嵌的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串。1、基本用法1. 按照{}的顺序依次匹配括号中的值s
- 代码如下:<SCRIPT LANGUAGE="JavaScript"> <!-- //说明:这里用了M
- 一.图像漫水填充图像漫水填充(FloodFill)是指用一种特定的颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效
- 以上是效果图,本图表使用d3.js v4制作。图表主要功能是在六边形格子中显示数据,点击底部图标可以切换指定格子高亮显示,图表可以随浏览器任
- 数据迁移需要从mysql导入clickhouse, 总结方案如下,包括clickhouse自身支持的三种方式,第三方工具两种。create
- 例如数据 列Namename abcd最后的结果a*b*c*d*declare @test table( namevarchar(10))&
- 查找所有数据库中没有主键的表select table_schema,table_name from information_schema.t
- 是建立一个数据集 前面应该先定义此数据集 dim rs as adodb.recordset 然后就可以用 set rs=server.Cr
- 废话不多说了,直接上代码吧:#Copyright (c)2017, 东北大学软件学院学生# All rightsreserved#文件名称:
- 本文实例讲述了Python简单I/O操作。分享给大家供大家参考,具体如下:文件:poem = '''hellowor
- ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁
- 1. 首先安装node,推荐偶数版本;好了之后检查一下: node -v;出现版本好即为安装成功;win10家庭版本的msi版本的时候出现无
- 前言d3.js 是一款上手容易的js类库,专门用于绘制svg图形图表,其关键理念为data-join 意即数据绑定.搞清这个概念非常重要,它
- 在JavaScript中有三种声明变量的方式:var、let、const。下文给大家介绍js中三种定义变量的方式const, var, le