腐蚀及膨胀的python实现——数字图像处理

本文介绍了形态学操作中的腐蚀和膨胀原理,以及它们在二值图像处理中的应用,包括去噪、元素分割和边界处理。通过Python和OpenCV库的示例展示了如何使用不同大小的结构元素进行腐蚀和膨胀操作,以及开运算和闭运算的实现。
摘要由CSDN通过智能技术生成

原理

像处理中的腐蚀和膨胀是形态学操作的两个基本概念,它们广泛应用于图像预处理、特征提取和其他图像分析任务。

腐蚀(Erosion)
腐蚀操作可以看作是图像中形状的"收缩"。其基本原理是使用一个结构元素(通常是一个小的矩阵,例如 3x3、5x5 的矩阵),该结构元素在输入图像上滑动,并将结构元素覆盖区域内的像素与结构元素进行比较。

二值图像:对于二值图像,如果结构元素与图像在该区域的像素完全匹配(通常意味着所有对应的像素均为1),则将输出图像中相应的像素设置为1(或保持不变);否则,设置为0(即腐蚀)。
灰度图像:对于灰度图像,腐蚀通常意味着取结构元素覆盖区域内所有像素的最小值。
腐蚀操作的效果是缩小图像中的亮区域并增大暗区域,有助于去除小的白噪声、断开相邻对象和消除细小的 protrusions。

膨胀(Dilation)
膨胀是腐蚀的对偶操作,可以看作是图像中形状的"扩张"。它同样使用一个结构元素在输入图像上滑动,但操作的效果恰恰相反。

二值图像:在二值图像中,只要结构元素与图像在该区域的像素重叠部分包含至少一个1,输出图像中相应的像素就会被设置为1(即膨胀)。
灰度图像:在灰度图像中,膨胀通常取结构元素覆盖区域内所有像素的最大值。
膨胀操作的效果是增大图像中的亮区域并减小暗区域,有助于连接近邻对象、填充对象内的小孔和增加对象边界的尺寸。

综合应用
腐蚀和膨胀通常联合使用以实现更复杂的形态学操作,如开运算(先腐蚀后膨胀)和闭运算(先膨胀后腐蚀)。这些操作对于改善图像数据的结构特征非常有效,广泛应用于图像分割、边缘检测和图像噪声过滤等领域。

代码实现下图

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

提示

结果图显示了对第一幅图采用不同大小(11,15,45)的方形结构元进行腐蚀和对第二幅图采用大小为3×3的十字形结构元进行膨胀的结果。腐蚀可以通过函数cv2.erode实现,膨胀可以通过函数cv2.dilate实现,结构元可以通过函数cv2.getStructuringElement来定义。

python代码

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

img1 = cv2.imread('Fig0905.tif')
img2 = cv2.imread('Fig0907.tif')

img_list = [img1]
img_name_list = ['original']
kernel_size = [11, 15, 45]

for size in kernel_size:
    kernel = np.ones((size, size), dtype=np.uint8) 
    img = cv2.erode(img1, kernel)
    img_list.append(img)
    img_name_list.append('size=' + str(size))

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

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

plt.savefig('erode.jpg')
plt.show()

kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
img = cv2.dilate(img2, kernel)

plt.subplot(1, 2, 1)
plt.imshow(img2, cmap='gray')
plt.axis('off')
plt.title('original')

plt.subplot(1, 2, 2)
plt.imshow(img)
plt.axis('off')
plt.title('dilate')


plt.show()

结果展示

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

总结

形态学操作主要包含:腐蚀,膨胀,开运算,闭运算,形态学梯度运算,顶帽运算,黑帽运算等操作。腐蚀操作与膨胀操作是形态学的运算基础,将腐蚀与膨胀结合,就可以实现开运算,闭运算,形态学梯度等不同形式的运算。
腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。腐蚀主要用来“收缩”或者“细化”二值图像中的前景,借此实现去噪声,元素分割等功能。
在腐蚀的过程中,通常使用一个结构元来逐个像素地扫描要被腐蚀的图像,并根据结构元和被腐蚀的图像的关系来确定腐蚀结果。膨胀与腐蚀正好相反,膨胀能对图像的边界进行扩张。膨胀操作将与当前的对象(前景)接触到的背景点合并到当前对象内,从而实现将图像边界点向外扩张。如果图像内的两个对象距离较近,可能在膨胀后连接到一起。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值