形态学操作之开操作与闭操作的python实现——数字图像处理

原理

图像处理中的开操作(Opening)和闭操作(Closing)是形态学(Morphological)操作的两个基本类型,它们都是基于膨胀(Dilation)和腐蚀(Erosion)操作。这些操作通常用于二值化图像,但也可以应用于灰度图像。

腐蚀(Erosion)
腐蚀操作的目的是缩小或消除图像中的前景(通常是白色)对象。在腐蚀操作中,使用一个结构元素(或核)在图像上滑动。如果结构元素在某个位置下的所有像素都是前景像素,则保留该位置的中心像素;否则,该像素被消除(通常设置为背景色)。这导致对象边缘向内收缩或者较小的对象被完全消除。

腐蚀是一种缩小图像区域的操作,
其数学表达为:(A⊖B)={z∣B z​ ⊆A}
其中,A 是原始图像,B 是结构元素,z表示结构元素B中心在位置z的平移,⊖ 表示腐蚀操作。这个公式的含义是,只有当B完全位于A的内部时,A在z的位置才被保留。这通常导致图像中较小的物体消失,边界向内收缩。

膨胀(Dilation)
膨胀操作与腐蚀相反,其目的是扩大图像中的前景对象。使用相同的结构元素滑动操作,但只要结构元素下的任何一个像素是前景像素,就将该位置的中心像素设置为前景。这导致对象的边缘向外扩张。
膨胀是扩大图像区域的操作,
其数学表达为:
(A⊕B)={z∣(B z ∩A)=∅}
其中,A 是原始图像,B 是结构元素,B z表示结构元素B中心在位置z的平移,⊕ 表示膨胀操作。这意味着,只要
B与A在至少一个点上重叠,A在z的位置就被设置为前景。这通常导致边界向外扩张。

开操作(Opening)
开操作是先进行腐蚀后进行膨胀的操作。开操作可以去除小对象或细节(例如噪声),同时保持较大对象的大小和形状不变。因此,它通常用于去噪声和平滑对象的边界,同时不明显改变其面积。
开操作是腐蚀后紧随膨胀的过程,其数学表达为:
A∘B=(A⊖B)⊕B
开操作可以移除小的物体或细节(如噪声点),而不显著改变较大物体的大小。它在数学上表示为先对图像A应用结构元素B的腐蚀操作,然后对结果应用B的膨胀操作。

闭操作(Closing)
闭操作是先进行膨胀后进行腐蚀的操作。闭操作可以填充对象内部的小孔和断裂,同时基本保持对象的大小和形状。因此,它通常用于桥接邻近对象、填充小孔和缝隙,同时不显著改变对象的面积。
闭操作是膨胀后紧随腐蚀的过程,其数学表达为:
A∙B=(A⊕B)⊖B
闭操作可以填充小孔和断裂,而不显著改变较大物体的大小。它在数学上表示为先对图像A应用结构元素B的膨胀操作,然后对结果应用B的腐蚀操作。

应用
在实际应用中,开闭操作对于图像预处理非常有用,如在进行对象识别、特征提取前的噪声去除、边界平滑等。通过选择合适的结构元素和大小,可以对这些操作的效果进行精细控制。

开操作和闭操作的数学原理允许精确地控制图像中的结构,提供了一种强大的工具来增强图像、去除噪声、填充间断以及连接近邻物体。通过选择合适的结构元素(形状和大小),可以对这些操作的效果进行细致的调节,以满足特定的图像处理需求。

python实现下图

在这里插入图片描述
结果图显示了对指纹图像先进行开操作再进行闭操作的结果。所用结构元为3×3的方形结构元,开闭操作可以通过函数cv2.morphologyEx(img, op, kernel)实现,op取cv2.MORPH_OPEN和cv2.MORPH_CLOSE分别对应着开闭操作。

代码实现

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('Fig0911.tif')

img_list = [img]
img_name_list = ['original']

kernel = np.ones((3, 3), dtype=np.uint8)
img1 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
img_list.append(img1)
img_name_list.append('open')

img2 = cv2.morphologyEx(img1, cv2.MORPH_CLOSE, kernel)
img_list.append(img2)
img_name_list.append('close')

_, axs = plt.subplots(1, 3)

for i in range(3):
    axs[i].imshow(img_list[i], cmap='gray')
    axs[i].set_title(img_name_list[i])
    axs[i].axis('off')


plt.show()


结果展示

在这里插入图片描述
在这里插入图片描述

开操作:先用B对A进行腐蚀得到AA,然后再用B对AA进行膨胀得到C。
先用B对A进行腐蚀,再用B对其结果进行膨胀,并不会得到原来的A,即膨胀与腐蚀并不像+和-一样是一对完全互补的操作。
作用:先用B对A进行腐蚀,将A中的小细节,小连通区域消除(注意这里是彻底消除),然后用B将A中没有被消除的地方恢复成原来的样子,最终只有被B完全消除掉的小细节没有了,A中其余的部分并没有改变。所以该操作被称为开操作(将两个藕断丝连的部分拉开)。

闭操作作用:先用B对A进行膨胀,将A的细节放大,将A中本不能够连接起来的地方连接起来,然后用B对结果进行腐蚀,将被放大的地方还原(注意,已经被连接起来的地方不会在被腐蚀抹掉)

  • 37
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值