当前位置:   article > 正文

【OpenCV-系列2】05 形态学操作_python 邻接性、联通性、区域和边界 在形态学上应用

python 邻接性、联通性、区域和边界 在形态学上应用

  目标:
  理解图像的邻域,连通性
  了解不同的形态学操作:腐蚀、膨胀、开闭运算,礼帽和黑帽等,以及不同操作之间的关系。
在这里插入图片描述

1 连通性

1.1 邻接关系

  在图像中,最小的单位是像素,每个像素周围有8个临接相思树,常见的邻接关系有3种:4邻域、8邻域、D邻域。
在这里插入图片描述

1.2 连通性

  定义: 是描述区域和边界的重要概念,两个像素连通的两个必要条件是:1)两个像素位置是否相邻;2)两个像素的灰度值是否满足特定的相似性准则。
  连通分类:
  有4联通、8联通和m连通三种
  (1)4连通:对于具有值V的像素p和q,如果q在集合N4(p)中,则称这两个像素是四连通的。
  (2)8连通:对于具有值V的像素p和q,如果q在集合N8(p)中,则称这两个像素是8连通的。
在这里插入图片描述
  (3)m连通:对于具有值V的像素p和q,如果1)q在集合N4§中,或q在集合ND(p)中;2)且N4(p)与N4(q)的交集为空,则称两个像素是m连通的,既4连通和D连通的混合连通。
在这里插入图片描述

2 形态学操作

  定义: 形态学转换是基于图像形状的一些简单操作,它通常在二进制图像(二值图像,值为0或者1)上执行。
  腐蚀和膨胀是两个基本的形态学运算符。然后它的变体形式,如开运算,闭运算,礼帽黑帽等

2.1 腐蚀和膨胀

  腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的。
  (1)膨胀:
  是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域;是求局部最大值的操作.
  具体操作: 用一个结构元素扫描图像中的每个像素,用结构元素中的每个像素与其覆盖的像素做‘与’操作,如果都为0,则该像素为0,否则为1。
在这里插入图片描述
  作用: 将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞
  API: cv2.dilate(img,kernel,iterations)
  参数:
    img:要处理的图像
    kernel:核结构
    iterations:膨胀的次数,默认是1

  (2)腐蚀:
  是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域;是求局部最小值的操作。
  具体操作: 用一个结构元素扫描图像中的每个像素,用结构元素中的每个像素与其覆盖的像素做‘与’操作,如果都为1,则该像素为1,否则为0。
在这里插入图片描述
  作用: 消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
  API: cv2.erode(img,kernel,iterations)
  参数:
    img:要处理的图像
    kernel:核结构
    iterations:腐蚀的次数,默认是1

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('erode.png')

#2. 腐蚀和膨胀

# 2.1 创建核结构
kenel=np.ones((5,5),np.uint8)

# 2.2 腐蚀和膨胀
erode_img=cv2.erode(img,kenel,1)
dilate_img=cv2.dilate(img,kenel,1)

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('erode',erode_img)
cv2.imshow('dilate',dilate_img)
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.2 开、闭运算

  (1)开运算:
  定义: 先腐蚀后膨胀,其作用是:分离物体,消除小区域。
  特点: 消除噪点,去除小干扰,而不影响原来的图像
在这里插入图片描述
  (2)闭运算
  定义: 先膨胀后腐蚀,其作用是:消除闭合物体里面的孔洞
  特点: 可以填充闭合区域
在这里插入图片描述
  (3)API:
  cv2.morphologyEx(img,op,kernel)
  参数:
    img:要处理的图像
    op:处理方式,若进行开运算,则设为cv2.MORPH_OPEN;若进行闭运算,则设为cv2.MORPH_CLOSE
    kernel:核结构

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('open_close.png')

#2. 开运算和闭运算

# 2.1 创建核结构
kenel=np.ones((10,10),np.uint8)

# 2.2 开运算和闭运算
open_img=cv2.morphologyEx(img,cv2.MORPH_OPEN,kenel)#开运算
close_img=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kenel)#闭运算

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('open',open_img)
cv2.imshow('close',close_img)
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.3 礼帽和黑帽

  (1)礼帽运算:
  原图像与开运算之差
  (2)黑帽运算:
  闭运算与原图像之差
  API:
  cv2.morphlogyEx(img,op,kernel)
  参数:
    img:要处理的图像
    op:处理方式
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/407204
推荐阅读
相关标签
  

闽ICP备14008679号