形态学操作—腐蚀

  图像形态学操作是一种用于处理图像的技术,腐蚀(Erosion)是其中之一,它可以使图像中的物体边缘变得模糊或缩小。腐蚀操作利用结构元素(Kernel)在图像上滑动,将该结构元素覆盖区域内的像素值更新为邻域内像素值的最小值。这样可以减少图像中物体边缘的尺寸,去除小的噪点或连接物体等。结构元素的大小和形状会影响腐蚀的效果,更大的结构元素会导致更明显的腐蚀效果,而不同形状的结构元素也会对腐蚀产生不同的影响。
  在数学上,腐蚀操作可以用数学形式表示为:
Output ( x , y ) = min ⁡ ( s , t ) ∈ kernel Input ( x + s , y + t ) \text{Output}(x, y) = \min_{(s, t) \in \text{kernel}} \text{Input}(x + s, y + t) Output(x,y)=(s,t)kernelminInput(x+s,y+t)
  其中 Input ( x , y ) \text{Input}(x, y) Input(x,y) 是原始图像在位置 ( x , y ) (x, y) (x,y) 的像素值, Output ( x , y ) \text{Output}(x, y) Output(x,y) 是腐蚀后的图像在位置 ( x , y ) (x, y) (x,y) 的像素值。 ( s , t ) (s, t) (s,t) 是结构元素(Kernel)中的坐标。
适用场景:

  • 去除小的噪点或细小的物体;
  • 缩小物体的尺寸或断开连接的部分;
  • 分割图像中的物体。
      下面是使用 Python 和 OpenCV 库进行腐蚀操作的示例代码:
import cv2
import numpy as np

def show_images(image):
    cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)
    cv2.imshow('image',image)
    cv2.waitKey()
    cv2.destroyAllWindows()

def Erosion(image):
    # 定义结构元素(这里使用一个 5x5 的正方形结构元素)
    kernel = np.ones((5, 5), np.uint8)
    # 进行腐蚀操作
    erosion = cv2.erode(image, kernel, iterations=1)
    return erosion

if __name__ == '__main__':
    # 读取图像
    img = cv2.imread('cat-dog.png', flags=0)
    re_img=Erosion(img)
    # top_row = np.hstack((img, re_img[0]))
    # bottom_row = np.hstack((re_img[1], re_img[2])) #水平
    # combined_img = np.vstack((img, re_img))# 垂直
    combined_img=np.hstack((img,re_img))
    show_images(combined_img)

猜你喜欢

转载自blog.csdn.net/qq_50993557/article/details/134560897