美文网首页
解析形态学基本操作:腐蚀、膨胀、开/闭运算

解析形态学基本操作:腐蚀、膨胀、开/闭运算

作者: LiBiscuit | 来源:发表于2019-03-18 15:55 被阅读0次

时隔一个月 小李又上线了!拖延症晚期实锤了。
原本教资考完要更 结果考完心态不是很好 所以拖了…上礼拜要更 结果头摔破了 所以又拖到了这周…三月是没有断更了,但过得太艰难了,希望接下来都顺利!
今天就记录一下在图像处理中形态学的几个操作。

图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。
膨胀类似“领域扩张”,将图像的高亮区域或白色部分扩张,运行结果图比原图的高亮区域更大;
腐蚀类似“领域被蚕食”,将图像的高亮区域或白色部分缩减细化,运行结果图比原图的高亮区域更小。

1.图像膨胀

公式:


膨胀原理:求局部最大值
①定义一个卷积核B,
核可以是任何的形状和大小,且拥有一个单独定义出来的参考点-锚点(anchorpoint);
通常和为带参考点的正方形或者圆盘,可将核称为模板或掩膜;
②将核B与图像A进行卷积,计算核B覆盖区域的像素点最大值;
③将这个最大值赋值给参考点指定的像素;

因此,图像中的高亮区域逐渐增长。也可理解为把图像变胖
二值化图,只有0和255,所以小区域内有一个是局部最大像素点就为255:

2.图像腐蚀

公式:


腐蚀:局部最小值(与膨胀相反);
①定义一个卷积核B,
核可以是任何的形状和大小,且拥有一个单独定义出来的参考点-锚点(anchorpoint);
通常和为带参考点的正方形或者圆盘,可将核称为模板或掩膜;
②将核B与图像A进行卷积,计算核B覆盖区域的像素点最小值;
③将这个最小值赋值给参考点指定的像素;
因此,图像中的高亮区域逐渐减小。也可理解为图像变瘦
二值化图,只有0和255,所以小区域内有一个是0该像素点就为0:

对比效果(膨胀VS腐蚀)

3.图像开/闭运算

开运算和闭运算就是将腐蚀和膨胀按照一定的次序进行处理。但这两者并不是可逆的,即先开后闭并不能得到原先的图像。

开运算:先腐蚀后膨胀
作用:分离物体,消除小区域,常用于去除噪声
闭运算:先膨胀后腐蚀
作用:常用于填充前景物体中的小洞,或者前景物体上的小黑点.

代码

"""
腐蚀
cv2.erode(src,                     # 输入图像
      kernel,                  # 卷积核
      dst=None, 
      anchor=None,
      iterations=None,         # 迭代次数,默认1
      borderType=None,
      borderValue=None) 

膨胀
cv2.dilate(src,                    # 输入图像
           kernel,                 # 卷积核
           dst=None, 
           anchor=None, 
           iterations=None,        # 迭代次数,默认1
           borderType=None, 
           borderValue=None)
"""

import cv2
import numpy as np
original_img = cv2.imread('F:/image/8.jpg')
res = cv2.resize(original_img,None,fx=0.6, fy=0.6,
                 interpolation = cv2.INTER_CUBIC) #图形太大了缩小一点
B, G, R = cv2.split(res)                    #获取红色通道
img = R
_,RedThresh = cv2.threshold(img,160,255,cv2.THRESH_BINARY)
#OpenCV定义的结构矩形元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
eroded = cv2.erode(RedThresh,kernel)        #腐蚀图像
dilated = cv2.dilate(RedThresh,kernel)      #膨胀图像
cv2.imshow("original_img", res)             #原图像
cv2.imshow("Eroded Image",eroded)           #显示腐蚀后的图像
cv2.imshow("Dilated Image",dilated)         #显示膨胀后的图像

#NumPy定义的结构元素
NpKernel = np.uint8(np.ones((3,3)))
Nperoded = cv2.erode(RedThresh,NpKernel)       #腐蚀图像
cv2.imshow("Eroded by NumPy kernel",Nperoded)  #显示腐蚀后的图像
cv2.waitKey(0)
cv2.destroyAllWindows()

original_img = cv2.imread('F:/image/8.jpg',0)
gray_res = cv2.resize(original_img,None,fx=0.8,fy=0.8,
                 interpolation = cv2.INTER_CUBIC)                #图形太大了缩小一点
# B, G, img = cv2.split(res)
# _,RedThresh = cv2.threshold(img,160,255,cv2.THRESH_BINARY)     #设定红色通道阈值160(阈值影响开闭运算效果)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))         #定义矩形结构元素

closed1 = cv2.morphologyEx(gray_res, cv2.MORPH_CLOSE, kernel,iterations=1)    #闭运算1
closed2 = cv2.morphologyEx(gray_res, cv2.MORPH_CLOSE, kernel,iterations=3)    #闭运算2
opened1 = cv2.morphologyEx(gray_res, cv2.MORPH_OPEN, kernel,iterations=1)     #开运算1
opened2 = cv2.morphologyEx(gray_res, cv2.MORPH_OPEN, kernel,iterations=3)     #开运算2
gradient = cv2.morphologyEx(gray_res, cv2.MORPH_GRADIENT, kernel)             #梯度

#显示如下腐蚀后的图像
cv2.imshow("Close1",closed1)
cv2.imshow("Close2",closed2)
cv2.imshow("Open1", opened1)
cv2.imshow("Open2", opened2)
cv2.waitKey(0)
cv2.destroyAllWindows()

END 三月顺利鸭~
参考(https://www.jianshu.com/p/05ef50ac89ac
https://blog.csdn.net/wsp_1138886114/article/details/82917661
https://www.aiuai.cn/aifarm350.html

相关文章

  • 形态学操作

    · 形态学操作主要包括:腐蚀,膨胀,开运算,闭运算,形态学梯度运算,顶帽运算,黑帽运算,击中击不中 腐蚀 将图像的...

  • 解析形态学基本操作:腐蚀、膨胀、开/闭运算

    时隔一个月 小李又上线了!拖延症晚期实锤了。原本教资考完要更 结果考完心态不是很好 所以拖了…上礼拜要更 结果头摔...

  • DIP

    常用的图像形态学操作包括膨胀、腐蚀、闭运算、开运算。 膨胀操作会扩大(粗化)图像中物体的轮廓,可以用来弥补(填充)...

  • 形态学算法

    上海交通大学 医学图像处理技术 形态学的二值运算 形态学二值运算包括膨胀,腐蚀,开运算和闭运算基本方法,如下图所示...

  • 形态学运算(腐蚀,膨胀,开运算和闭运算)

    形态学运算中腐蚀(erode),膨胀(dilate),开运算(open)和闭运算(close)。 1. 腐蚀是一种...

  • Opencv第七课--形态学滤波

    形态学滤波 形态学滤波包括腐蚀、膨胀、开运算、闭运算、形态学梯度、礼帽、黑帽下面针对这四种形态学操作,说明一下其原...

  • 形态学转换(OpenCV-Python)

    本文内容是对Opencv官方文档的学习笔记内容:学习不同的形态学操作,包括腐蚀,膨胀,开运算,闭运算,礼帽,黑帽。...

  • opencv+python -- 开闭操作、顶帽、黑帽、形态学

    开操作 (Open) 闭操作(Close) 图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的 主要是应...

  • opencv+python学习记录(十九)形态学处理

    形态学处理包括:腐蚀、膨胀、开运算、闭运算、顶帽运算、底帽运算。 具体参考https://blog.csdn.ne...

  • 通用形态学函数---OpenCV-Python开发指南(19)

    通用形态学函数 上篇博文,我们介绍了形态学的基础腐蚀与膨胀操作,而将腐蚀与膨胀结合起来进行组合,我们就能实现开运算...

网友评论

      本文标题:解析形态学基本操作:腐蚀、膨胀、开/闭运算

      本文链接:https://www.haomeiwen.com/subject/ndivmqtx.html