图像形态学操作是一种用于处理图像的技术,腐蚀(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)中的坐标。
适用场景:
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)