??在 OpenCV 中,圖像形態學操作是一組基于圖像形狀的處理技術,其中膨脹(Dilation)是其中之一。膨脹操作可用于圖像處理中的特征增強、去噪、分割和邊緣檢測等。其基本原理是利用結構元素(Kernel 或 Structuring Element)對圖像進行局部區域的最大值操作,將核與圖像進行卷積,用核的最大值替代當前像素值,從而使目標物體區域擴張。膨脹操作可以根據具體的應用場景選擇不同的結構元素大小和形狀,以達到最佳效果。
??膨脹操作的數學定義為:對于圖像 A A A 和結構元素 B B B,膨脹操作可表示為 A ⊕ B A \oplus B A⊕B,其中膨脹操作可以用以下數學公式表示:
( A ⊕ B ) ( x , y ) = ? ( i , j ) ∈ B A ( x + i , y + j ) (A \oplus B)(x, y) = \bigcup_{(i, j) \in B} A(x + i, y + j) (A⊕B)(x,y)=(i,j)∈B??A(x+i,y+j)
??其中, ( x , y ) (x, y) (x,y) 是圖像 A A A 上的像素坐標, ( i , j ) (i, j) (i,j) 是結構元素 B B B 的坐標。
??在 OpenCV 中,你可以使用 cv2.dilate()
函數來進行圖像的膨脹操作。以下是一個簡單的 Python 代碼示例,演示如何使用 OpenCV 進行圖像膨脹操作:
import cv2
import numpy as npdef show_images(image):cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)cv2.imshow('image',image)cv2.waitKey()cv2.destroyAllWindows()def Dilated(image):# 定義膨脹操作的結構元素(這里使用3x3的矩形結構元素)kernel = np.ones((3, 3), np.uint8)# 進行膨脹操作dilated_image = cv2.dilate(image, kernel, iterations=1)return dilated_imageif __name__ == '__main__':# 讀取圖像img = cv2.imread('cat-dog.png', flags=0)re_img=Dilated(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)
適用場景:
- 邊緣檢測:膨脹操作可以使邊緣更加連續和明顯,有助于后續的邊緣檢測。
- 填充小的空洞:對于目標物體中的小空洞或斷裂區域,膨脹操作可以幫助連接這些區域,使其更加完整。
- 去除小的噪點:可以通過合適的結構元素尺寸,去除圖像中的小噪點。