图像腐蚀操作

1. 腐蚀操作

  腐蚀操作是一种图像处理操作,它可以将图像中的细小或细长的物体变细或变短。它通过将结构元素与图像进行卷积操作,将亮区域被黑色区域所腐蚀,从而减小亮区域的面积。在许多图像处理软件中,腐蚀操作通常作为一个常见的图像处理滤镜或功能提供。在图像形态学处理领域,常用的腐蚀操作是指定形状和大小的结构元素与二值图像进行卷积。结构元素通常是一个小的图像区域,可以是矩形、圆形、十字形等形状。

2.  步骤

(1)选择一个结构元素:结构元素是一个小的二进制矩阵,用于定义腐蚀的形状和大小。通常选择一个正方形或圆形的结构元素。

(2)将结构元素放置在图像的每一个像素上,并与之对应的区域进行逐元素比较。

(3)如果结构元素中的所有像素都与相应的图像区域中的像素匹配,则将该像素保留为白色(或者其他亮度)。

(4)如果结构元素中的任何一个像素与相应的图像区域中的像素不匹配,则将该像素设为黑色(或者其他暗度)。

重复步骤2至步骤4,直到对图像中的每一个像素都进行了处理。如下图所示

 

3. 代码与例子

"""
cv2.getStructuringElement有三个参数:shape, ksize, anchor=None
shape:结构元素的形状,可以是矩形(cv2.MORPH_RECT),椭圆(cv2.MORPH_ELLIPSE),或十字形(cv2.MORPH_CROSS)
ksize:结构元素的大小,通常为奇数
anchor:锚的位置,其有默认值(-1,-1),表示结构元素的中心位置。
"""
import cv2
import numpy as np
img = cv2.imread('./fushi.png', 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
# kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
erosion = cv2.erode(img, kernel)
# cv2.imshow("img",img)
# cv2.imshow("erosion",erosion)
cv2.imshow('img',np.hstack((img,erosion)))
cv2.waitKey(0)

 

  可以发现腐蚀后的图(右图),与左图相比较,变细了,而且少了很多细线噪声。如果消除噪声不理想,可以考虑增大ksize的大小。

4. 参数

cv2.getStructuringElement中的shape参数该如何选取呢?

  • 如何选择结构元素的形状和大小取决于你想要实现的效果和场景的特点:
  • 如果你想要减小物体的边界区域,可以选择一个比较小的结构元素。
  • 如果图像中的物体形状比较圆润,可以选择椭圆形的结构元素。
  • 如果物体的边界是由细线组成的,可以选择十字形的结构元素。
  • 结构元素的大小也可以根据物体的大小来选择,通常选择一个比物体尺寸稍大一些的结构元素。

 

 小结:本文介绍了图像的腐蚀操作,与之对应相反的操作为膨胀操作,膨胀操作常与腐蚀操作一起结合使用。shape参数的其它几种情况没有试过。腐蚀操作可以用于多种图像处理任务,包括图像分割、去除噪声、提取图像中的特定形状或结构等。通常,在进行腐蚀操作之前,需要对原始图像进行灰度化、二值化或其他预处理步骤。cv2.erode(img, kernel,iterations=5)中包括了迭代次数,可以多次腐蚀。

  若存在不足或错误之处,欢迎指正与评论!

 

posted @ 2023-07-14 19:46  wancy  阅读(588)  评论(0编辑  收藏  举报