图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

图像形态学中两种最基本的操作就是对图形的腐蚀和膨胀,可以说,形态学中的中高级操作都是建立在这两种操作之上。

关于图像腐蚀和膨胀的概念,不严谨的简单理解是:经过腐蚀和膨胀操作后最终的效果是对图像中物体的边界进行一层一层的腐蚀和膨胀操作,这个边界包括内边界和外边界。当然这是精枝大叶的理解,如果只知道这个,在实际的工作中是不够的。严谨的理解是这样的:图像的腐蚀和膨胀实际上是用某种形状的窗去遍历图像中的每一个元素,并用这个区域中的最大值或最小值去代替窗口中的某个元素值(一般设为中心元素),若取得是最大值,则是膨胀操作,若取得是最小值,则是腐蚀操作。这里某种形状可以是十字形、菱形、矩形、X形等。这里我要强调一点,其实所有的窗都是矩形的,那么怎么样区分不同的形状呢?是这样操作的:通过把矩形中的元素置为0或1去区分。在窗内求最大值或最小值时,只有元素值不为0的位置才参与求最大值或最小值。具体的不同形状的构造方法可以参见我写的下篇博文“用形态学的方法实现图像的角点检测”。

下面我结合OpenCV的代码介绍一下标题中提到的相关概念。

首先说腐蚀和膨胀操作:

在OpenCV中,使用erode()和dilate()函数分别用于图像形态学的腐蚀与膨胀操作,各自的函数原型如下。

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

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

可见,两个函数的参数个数和名称是一模一样的,不同的只是函数功能,所以就一起介绍了哈。

src:为输入图像,要求是二值图像或灰度图像。

dst:为输出图像,参数类型与输入图像一致。

kernel:erode()使用某种形状的窗侵蚀一个图像,dilate()也使用某种形状的窗对图像进行膨胀。参数kernel就表示这个某种形状的窗。其实和卷积核/窗口的概念类似。结合我上面提到的腐蚀和膨胀的概念可以知道,这个窗越大,显然每次对图像的腐蚀或膨胀越多,反之亦然。有下面两种构造这个窗的方法。

①使用函数getStructuringElement()来获取,原型如下:

Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));来构造,参数意思如下:

shape:设置窗的形状,MORPH_RECT为矩形,矩形中的每一个元素的值为1;MORPH_ELLIPSE为椭圆,椭圆中的每一个元素的值也为1,椭圆内切于ksize参数定义的矩形大小;MORPH_CROSS代表十字形结构,十字形的长和宽由ksize定,十字形上的元素值也为1。

ksize:表示shape设置的形状的长和宽。
          anchor表示形状中每个窗求出最大或最小值后用这个最大值或最小值要替代的元素,如果高为Point(-1,-1)即表示中心元素。

②直接用MAT类的构造函数生成,这个不好说的,具体可以参考我写得下篇博文“用形态学的方法实现图像的角点检测”的代码。

anchor:表示结构化元素的中心,如果取默认参数(-1,-1),程序会自动将其设置为结构元素的中心。这个概念其实和卷积核/窗口中的类似概念相同。

iterations:表示迭代次数,即对图像做几次腐蚀和膨胀。

borderType:边界处理方法,这个不多讲了,和卷积核/窗口中的类似概念相同,详情可见我写的博文 http://blog.csdn.net/wenhao_ir/article/details/51699064

borderValue:如果边界处理方法选为BORDER_CONSTANT,那么就需要设置这个CONSTANT值,这个参数就表示CONSTANT值

下面上使用这两个函数进行腐蚀和膨胀处理的源码:

源码中用到的图像下载链接:test.jpg_免费高速下载|百度网盘-分享无限制

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码运行结果如下图所示:

再来说形态学开操作和闭操作:

形态学开运算操作的定义是先对图像进行腐蚀操作,然后再对图像进行膨胀操作。形态学闭运算则刚好相反,先对图像进行膨胀操作,再对图像进行腐蚀操作。

形态学开运算能排除小区域物体、消除孤立点、去噪、平滑物体的轮廓。

形态学闭运算能填充目标区域内的离散小空洞和分散部分。

PS:理解上面开运算和闭运算为什么有这些作用的核心是知道腐蚀和膨胀的概念哦!

OpenCV提供了morphologyEx()用于形态学开闭运算操作,其原型和参数意义如下:

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

可见,其实这个函数的参数与上面介绍的腐蚀膨胀操作是很相似的,只多了op这个参数,所以这里就只介绍下op这个参数吧!

op为形态学操作类型选择参数,具体的可选值有以下这些:

MORPH_OPEN  形态学开操作

MORPH_CLOSE 形态学闭操作

MORPH_GRADIENT 形态学梯度操作(不急,这篇博文后面会介绍)

MORPH_TOPHAT 形态学顶帽操作(不急,这篇博文后面会介绍)

MORPH_BLACKHAT 形态学黑帽操作(不急,这篇博文后面会介绍)

使用这个函数进行形态学开、闭操作的代码如下:

源码中用到的图像下载链接:test.jpg_免费高速下载|百度网盘-分享无限制

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

运行结果如下图所示:

形态学梯度(形态学边缘提取)

对于图像来说,求得了梯度很大程度上就求得了边缘,前面博文介绍的各种边缘检测算子实际上都是在求梯度嘛,所以我在括号里写了形态学梯度实际上就是进行边缘提取。形态学梯度的原理是根据膨胀或腐蚀与原图作差来检测梯度(边缘)

上面已经介绍了,形态学梯度也是使用morphologyEx()来作操作,上面已经介绍了,这里就不介绍了。

代码如下(代码中用到的图像下载链接:building.jpg_免费高速下载|百度网盘-分享无限制):

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

代码请访问博文0038-OpenCV环境下进行图像的膨胀与腐蚀操作_清溪算法-CSDN博客获取

运行结果如下图所示:

大家可以把这个边缘检测结果和前面博文中提到的各种边缘检测算法作个对比,详情各种边缘检测算法效果对比-差分运算法、Sobel、Scharr、Laplace(拉普拉斯)、Roberts、Canny_昊虹图像算法-CSDN博客,实际上形态学也是基于窗(卷积核)来实现的,因为你腐蚀和膨胀是基于窗的操作嘛。

形态学顶帽操作和黑帽操作:

形态学顶帽操作是计算原图像与开运算结果之差,形态学黑帽操作是计算闭运算结果图与原图像之差。各自有什么作用呢?那你首先要知道开运算和闭运算分别给图像减少和增加了什么东西,它们与原图像的差就是这些增加和减少的东西吧,我引用这篇博文中上面介绍的开运算和闭运算的作用如下吧:

形态学开运算能排除小区域物体、消除孤立点、去噪、平滑物体的轮廓。
形态学闭运算能填充目标区域内的离散小空洞和分散部分。

由于时间有限,所以这里我就不给具体的代码了,反正还是使用morphologyEx函数实现,具体怎么用,上面已经介绍过了,这里就不多说了!

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

图像形态学概要-腐蚀、膨胀、开运算、闭运算、形态学梯度(形态学边缘提取)、顶帽操作、黑帽操作相关推荐

  1. Halcon中的基于区域的形态学处理(腐蚀膨胀开闭预算顶底帽运算)

    形态学处理的作用: 用于提取有意义的局部图像细节,通过改变局部区域的像素形态,对图像进行增强,为后续分割.特征提取.边缘检测做准备. 在开始之前,我们先了解一下:结构元素:StructElement ...

  2. OpenCV 形态学操作之腐蚀与膨胀,开运算与闭运算,顶帽与黑帽,图像梯度运算相关知识点回顾

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 45 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  3. 形态学滤波(2):开运算、闭运算、形态梯度、顶帽、黑帽

    不多说,先上图 1.形态学概述之二 上一篇介绍了形态学的基本操作膨胀和腐蚀,我们这一篇将利用膨胀和腐蚀操作实现对图像更高级的形态学操作,而这些都是建立在膨胀和腐蚀操作基础之上. 首先形态学的主要用途是 ...

  4. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  5. 图像形态学(腐蚀、膨胀、开运算、闭运算、梯度、顶帽、黑帽)

    一.腐蚀: 消除图像中不重要的边缘信息. 二.膨胀: 可以看作为腐蚀的逆过程. 三.开运算: 开运算(open) ,先腐蚀后膨胀的过程.开运算可以用来消除小黑点,在纤细点处分离物体.平滑较大物体的边界 ...

  6. 形态学处理:膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽

    形态学处理 一 膨胀 二 腐蚀 三 开运算 四 闭运算 五 形态学梯度 六 顶帽 七 黑帽 形态学处理 一 膨胀  代码: #include <opencv2/core/core.hpp> ...

  7. 形态学滤波:(1)腐蚀与膨胀 (2)开运算,闭运算,形态学梯度,顶帽,黑帽...

    一.形态学概述 图像处理中的形态学一般指的是数学形态学. 数学形态学是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论.其基本运算包括:二值腐蚀和膨胀,二值开闭运算,骨架抽 ...

  8. 形态学操作之腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽和黑帽

    1.腐蚀和膨胀 图像的腐蚀和膨胀实际上是用某种形状的窗去遍历图像中的每一个像素,并用这个形状中的最大值或最小值做为锚点的值.若取的是最小值,则是腐蚀操作,若取的是最大值,则是膨胀操作.这里某种形状可以 ...

  9. 膨胀 腐蚀 开运算 闭运算 matlab,11. 形态学膨胀、腐蚀、开运算、闭运算

    1. 膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程. 2. 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 3. 开运算: 先腐蚀后膨胀的过程称为开运算,作用: ...

最新文章

  1. RxJava 实现模糊搜索
  2. matlab中rat=1函数,matlab中的format rat是什么意思
  3. shell按行读取文件的常见几种方法
  4. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
  5. 新加坡建设绿色高层数据中心的构想有所争议
  6. Planar Homography (共面点成像) Epipolar Geometry(对极几何)
  7. mongodb 分组聚合_mongodb 聚合命令
  8. ajax 连接java,如何使用Ajax连接到Java servlets?
  9. 《剑指 Offer I》刷题笔记 20 ~ 30 题
  10. Sicily 1156. Binary tree 解题报告
  11. 【Prescan学习】Prescan环境配置(介绍+安装+学习资源)
  12. 一文教你如何快速高效画出技术架构图
  13. 【Java】如何导出压缩包
  14. 如何复制Google云端硬盘文件夹
  15. Live800:企业必修课|新时代的全渠道营销解析(下)
  16. Facebook投资者Peter Thiel—一个不折不扣的“魔戒”迷
  17. 5款超级无敌好用的电脑软件 建议收藏!
  18. go语言的类型之间的相互转化和float保留小数时的四舍五入
  19. 虚拟机LINUX系统下安装JKD(附详细操作过程截图)
  20. 学Linux有哪些就业方向?

热门文章

  1. python散点图拟合曲线-python曲线拟合
  2. python画饼图-从零开始学Python可视化(五): 饼图及环形图
  3. 武汉python培训哪一家好一些-武汉哪个Python培训机构比较好?
  4. 开课吧python好吗-开课吧9.9元学Python课程适合哪些人?开课吧靠谱吗?
  5. python在日常工作处理中的应用-Python全栈开发在实际工作中的应用
  6. 自学python的网站-python有哪些学习网站
  7. python报班大概多少钱-python培训班价格大概多少?
  8. python如何导入txt文件-python如何将数据写入本地txt文本文件
  9. 为什么说python是世界上最好的语言-python是世界上最好的语言
  10. 大学python用什么教材-清华大学出版社-图书详情-《Python大学教程》