今天,我们一起来学习图像形态学操作中两种最基本的形态学操作,即腐蚀与膨胀。

一、理论

数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。

腐蚀与膨胀主要实现以下功能:

  • 消除噪声
  • 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。
  • 寻找图像中的明显的极大值区域或极小值区域
  • 求出图像的梯度

1、腐蚀

腐蚀对图像求局部最小值;腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与卷积核(我们称之为B)进行卷积。

核可以是任何的形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点。多数情况下,核是一个小的中间带有参考点和实心正方形或者圆盘,其实,我们可以把核视为模板或者掩码。

1)腐蚀的数学表达式

腐蚀的数学表达式

2)腐蚀效果演示

腐蚀效果演示

3)腐蚀的作用:

  • 对象大小减小一个像素(3x3)
  • 平滑对象边缘
  • 弱化或者分割图像之间的半岛型连接

2、膨胀

膨胀对图像求局部的最大值;核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素;这样就会使图像中的高亮区域逐渐增长。

核可以是任何的形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点。多数情况下,核是一个小的中间带有参考点和实心正方形或者圆盘,其实,我们可以把核视为模板或者掩码。

1)膨胀的数学表达式

膨胀的数学表达式

膨胀效果演示

膨胀的作用:

  • 对象大小增加一个像素(3x3)
  • 平滑对象边缘
  • 减少或者填充对象之间的距离

小结:

可以看做膨胀是将白色区域扩大,腐蚀是将黑色区域扩大。

二、OpenCV腐蚀与膨胀API函数详解

1、腐蚀

1)函数原型:

void erode(InputArray src,  OutputArray dst,  InputArray kernel, Point anchor = Point(-1, -1),  int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue =  morphologyDefaultBorderValue());

2)函数功能:

用指定的卷积核腐蚀图像,使用像素邻域内的局部极小运算符来腐蚀一张图片,从src输入,由dst输出,支持就地(in-place)操作。

3)参数详解:

  • 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像通道的数量可以是任意的,但图像深度应为CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F其中之一;
  • 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型;
  • 第三个参数,InputArray类型的kernel,腐蚀操作的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵);
  • 第四个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于单位(element)的中心,我们一般不用管它;
  • 第五个参数,int类型的iterations,迭代使用erode()函数的次数,默认值为1;
  • 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT;
  • 第七个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般我们不用去管他。

第三个参数一般用getStructuringElement()函数获取卷积核的大小;getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。

其中,getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一:

  • 矩形: MORPH_RECT
  • 交叉形: MORPH_CROSS
  • 椭圆形: MORPH_ELLIPSE

而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。

我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1, -1),表示锚点位于中心;并且需要注意,十字形的element形状唯一依赖于锚点的位置;而在其他情况下,锚点只是影响了形态学运算结果的偏移。

4)实例:

#include #include #include #include using namespace std;using namespace cv;int main(){ //载入原图  Mat image = imread("lena.png"); if (image.empty()) { printf("image error!"); return -1; } //创建窗口  namedWindow("【原图】腐蚀操作"); namedWindow("【效果图】腐蚀操作"); //显示原图 imshow("【原图】腐蚀操作

matlab图像的腐蚀和膨胀_OpenCV图像处理系列八 --- 腐蚀与膨胀相关推荐

  1. matlab图像去毛刺_警微圈 图像处理第三讲CLAHE

    警微圈 图像处理100讲 第三讲 <限制对比度自适应直方图均衡化> - 圈语 - 为给圈粉们提供一些结合公安工作的实用图像处理方法,小编为大家准备了一些程序处理算法(附带代码).小编使用的 ...

  2. c++gdal如何在大图像中截取小图像并获取其图像信息_OpenCV 图像处理大纲

    图像的取样和量化 取样就是取像素点,量化把灰度值量化到256个灰度级 数字图像的表示 图像定义为二位函数f(x, y),x,y是空间坐标f(x, y)是点的幅值 数字图像的质量 灰度级:表明像素明暗程 ...

  3. 图像的膨胀(dilation)和腐蚀(erosion)

    晶晨半导体笔试时有道题是关于图像膨胀和腐蚀的,但没有具体看过,这里总结一下,唉嗐. 咳咳,今天的po小标题有些做作,请忽略. 不对,这是我的po我爱咋写咋爱,就要做作,love look don't ...

  4. 什么叫做形态学图像处理_形态学腐蚀和膨胀原理和python实现

    这篇笔记为形态学膨胀(dilate)和腐蚀(erode),一种在数字图像处理中常用的基本算法. 形态学图像处理的理论根基是数学形态学(Mathematical Morphology),可以通过形态学处 ...

  5. 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23710721 作者:毛星云(浅墨) ...

  6. 转:【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23710721 作者:毛星云(浅墨) ...

  7. matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21

    数字图像处理期末复习2018-12-21 愉快先生 0.204 · 字数 5547 · 阅读 1834 2018-12-22 19:35 (数字图像冈萨雷斯第二版教材) 一.基本原理 图像的读取.存储 ...

  8. matlab图像隐写,matlab软件图像处理相关内容.ppt

    内容主要分为以下四个篇章: 一.介绍应用matlab处理图像问题 (以一个图像隐写的简单例子为说明线索) 二.应用matlab解决三维血管重建中的图像处理问题 三.图像处理练习(应用matlab解决双 ...

  9. 数字图像处理---通俗理解腐蚀与膨胀

    本人已经打算将这一系列博文做成动画趣味科普的形式来呈现,感兴趣的话可以点这里. 0.腐蚀与膨胀有什么卵用? 腐蚀与膨胀是数字形态学里的两个基本操作,一般用于二值图像(当然RGB图也可以用).腐蚀的作用 ...

最新文章

  1. ubuntu windows 终端清理、清空 屏幕命令 清屏
  2. 项目管理中的组织计划
  3. 简单Nlp分析套路,获取数据(爬虫),数据处理(分词,词频,命名实体识别与关键词抽取),结果展现
  4. 苹果cms V10模板 仿特视网自适应模板
  5. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
  6. Kali Linux工具文档翻译计划
  7. Mysql学习总结(26)——MySQL子查询
  8. RecyclerView之自定义LayoutManager和SnapHelper
  9. python技巧——list comprehension vs map
  10. YLMF OS 发布
  11. C语言match函数的定义与用法,Match函数的基本用法
  12. 2016(第三届)智能家居世界大会
  13. android 英语词库
  14. 简单的理解unicode和utf-8的关系
  15. 【C语言】万字讲解 从零到精通 (文件操作与文件函数)
  16. Bugzilla 使用教程
  17. ansible部署LAMP架构
  18. Jeesite 4.0 学习笔记
  19. Tomcat 7.0安装与配置
  20. 透视变换原理实例代码详解

热门文章

  1. 触摸屏通常接在微型计算机,计算机应用基础习题答案.doc
  2. 左操作数必须为左值_进入“左转弯待转区”被罚怎么回事?
  3. mysql5.5源码包安装_mysql的源码包方式安装(mysql5.5)
  4. linux fedora14 u盘运行,用U盘安装Fedora的详细步骤
  5. 里面怎么缓存图片_浏览器缓存原理总结
  6. android屏幕适配详解
  7. flutter 导航页面转换动画效果
  8. POJ--2104 K-th Number (主席树模版题)
  9. 培训补坑(day1:最短路two-sat)
  10. Get SQL String From Query Object In Entity Framework