Python实例解析图像形态学运算技术

作者:Mr.Winter` 时间:2021-04-14 10:34:24 

Python实例解析图像形态学运算技术

1 图像形态学运算

在Python OpenCV图像处理之图像滤波特效详解中我们将图像滤波进行了以下分类:

邻域滤波

  • 线性滤波

  • 非线性滤波

频域滤波

  • 低通滤波

  • 高通滤波

在非线性滤波中,之前只介绍了中值滤波,事实上,还有一类非常常用的非线性滤波方法,称为图像形态学运算(Morphological operations)。

图像形态学运算是一类基于图像形状运算的非线性滤波技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理。这里结构元素就相当于我们在滤波中所涉及到的模板——一个给定像素的矩阵,这个矩阵形状可以任意,但一般是正方形。

接下来,我们分析一下几种经典的图像形态学运算算法,再编程测试一下~

2 腐蚀

腐蚀就是用局部灰度最小值代替目标像素值实现对高亮区域的腐蚀。

举个例子,有这样一张图像和这样一个结构元素,其中结构元素的蓝色方块表示的是模板原点。

Python实例解析图像形态学运算技术

下面我们开始遍历这张图像,到下图这个位置的时候,模板内灰度最小值是灰色方格的像素,因此替换掉模板原点中蓝色方格处的像素为灰色(原本为白色,被腐蚀了)

Python实例解析图像形态学运算技术

就这样遍历完这张图像得到

Python实例解析图像形态学运算技术

3 膨胀

膨胀就是用局部灰度最大值代替目标像素值实现对高亮区域的膨胀。

和腐蚀类似,遍历这张图像,到下图这个位置的时候,模板内灰度最大值是白色方格的像素,因此替换掉模板原点中蓝色方格处的像素为白色(原本为灰色,膨胀了)

Python实例解析图像形态学运算技术

就这样遍历完这张图像得到膨胀的最终结果为

Python实例解析图像形态学运算技术

上个实物图感受下腐蚀和膨胀的效果

Python实例解析图像形态学运算技术

4 开运算与闭运算

理解了图像腐蚀与膨胀,那么开闭运算就很容易了

  • 开运算(Opening):先腐蚀再膨胀

  • 闭运算(Closing):先膨胀再腐蚀

开运算能够除有效去除孤立点、毛刺和小桥;闭运算能够填平小孔,弥合缝隙。

Python实例解析图像形态学运算技术

上图假设灰色区域为高亮。

5 顶帽运算与底帽运算

顶帽运算与底帽运算是用于表征开闭运算与原图像间差异的运算,类似边缘检测的梯度差

  • 图像顶帽运算:表征原图像与开运算得到的图像之间的区别

  • 图像底帽运算:表征原图像与闭运算得到的图像之间的区别

6 恶魔与天使

先看看原图,一对可爱的猫咪

Python实例解析图像形态学运算技术

进行腐蚀操作,首先创建结构元


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);

得到腐蚀后的图像如下所示,眼睛空洞洞的,有点恐怖片内味了,这还是原来那两只猫吗?

Python实例解析图像形态学运算技术

膨胀操作类似于腐蚀,也有OpenCV封装好的API


dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨胀操作后:", dstImg);

膨胀出来的小猫就显得轻松很多,感觉升华了。

Python实例解析图像形态学运算技术

今后要是想有一张照片创造光与影正与邪天使与恶魔两种反差,可以考虑采用图像腐蚀和膨胀操作。

来源:https://blog.csdn.net/FRIGIDWINTER/article/details/123439545

标签:Python,图像形态学,运算
0
投稿

猜你喜欢

  • python 将dicom图片转换成jpg图片的实例

    2023-08-24 11:12:27
  • MySQL之存储过程按月创建表的方法步骤

    2024-01-25 02:40:40
  • 设计提升满意度

    2010-05-16 15:00:00
  • MySql的事务使用与示例详解

    2024-01-27 17:24:50
  • CentOS安装mysql5.7 及简单配置教程详解

    2024-01-21 08:18:51
  • Python 多进程和数据传递的理解

    2021-06-01 02:30:07
  • js键盘事件全面控制

    2008-02-21 12:51:00
  • 《设计网事》前言

    2009-07-15 17:19:00
  • Javascript(es2016) import和require用法和区别详解

    2024-04-19 09:57:04
  • MySQL数据库查询性能优化策略

    2024-01-14 17:53:41
  • python使用opencv在Windows下调用摄像头实现解析

    2021-01-08 04:13:01
  • Python实现账号密码输错三次即锁定功能简单示例

    2023-07-22 07:40:21
  • SQL SERVER备份数据库存储过程的方法

    2024-01-16 14:38:56
  • 深入讲解Go语言中函数new与make的使用和区别

    2023-06-16 17:52:29
  • php 参数过滤、数据过滤详解

    2023-11-17 17:36:56
  • swiper 自动图片无限轮播实现代码

    2024-06-09 17:26:12
  • Python 列表(List)操作方法详解

    2023-06-15 10:10:04
  • vue项目中全局引入1个.scss文件的问题解决

    2024-05-29 22:44:38
  • Python中字符串对象语法分享

    2022-04-19 14:48:34
  • pytorch MSELoss计算平均的实现方法

    2021-07-31 18:44:15
  • asp之家 网络编程 m.aspxhome.com