Morphological Gradient は、画像の膨張操作と収縮操作の違いによって画像内のエッジ情報を強調する、画像の形態学的処理における操作です。この操作は、画像内のオブジェクトの境界を強調し、オブジェクトをより目立たせるのに役立ちます。
数学的には、形態学的勾配の計算は次の方法で実行できます。
構造要素 (通常は小さな長方形または円形のコア) を設定し、画像に対して膨張操作と腐食操作を実行します。形態学的勾配は、画像上の膨張操作から侵食操作を差し引いた結果として定義されます。
形態学的グラデーションの役割は、画像内のオブジェクトのエッジや輪郭を強調表示することです。形態学的勾配は、画像内のオブジェクトのセグメンテーション、エッジ検出、または特徴抽出を実行するときに役立ちます。これは、オブジェクトの境界を特定したり、輪郭情報を抽出したり、画像前処理のステップの 1 つで使用したりするのに役立ちます。
形態学的勾配の公式は次のとおりです:
形態学的勾配: 勾配 = 膨張 ( f ) − 侵食 ( f ) \text{グラデーション} = \text{膨張}(f) - \text{侵食}(f) 勾配=拡張(f)−浸食(f)
その中、 膨張 ( f ) \text{膨張}(f) Dilation(f) 表示对图像 f f f 进行膨胀操作, Erosion ( f ) \text{Erosion}(f) Erosion(f)表示对图像 f f f腐食操作を実行します。
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 Morphological_Gradient(image):
# 定义结构元素(这里使用3x3的矩形核)
kernel = np.ones((3, 3), np.uint8)
# 对图像进行膨胀和腐蚀操作
dilated_image = cv2.dilate(image, kernel, iterations=1)
eroded_image = cv2.erode(image, kernel, iterations=1)
# 计算形态学梯度
gradient = cv2.subtract(dilated_image, eroded_image)
return gradient
if __name__ == '__main__':
# 读取图像
img = cv2.imread('cat-dog.png', flags=0)
re_img=Morphological_Gradient(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)