??圖像形態學操作中的提取連通分量是一種用于分離圖像中相互連接的像素區域的技術。這些像素區域通常代表著圖像中的不同物體、目標或者區域。連通分量提取通常用于圖像分割、對象識別、特征提取等領域。
原理:
??連通分量提取基于圖像中像素的連接性。在這個過程中,通過尋找像素點之間的連接關系,將相鄰的像素組合成具有特定特征的區域。
作用:
??連通分量提取可以幫助識別圖像中的獨立對象或區域,從而有助于進行物體檢測、圖像分割、特征提取等任務。通過標記不同的連通分量,可以分離出圖像中不同的目標。
適用場景:
- 目標檢測與識別:可以用于找出圖像中的不同物體或目標。
- 圖像分割:將圖像分割成具有連通性的區域。
- 特征提取:提取圖像中各個連通分量的特征,如面積、周長等。
在OpenCV中,可以使用函數如connectedComponents
來實現提取連通分量。
數學公式:
連通分量提取假設有一個圖像 I I I,可以表示為一個二值化矩陣。 I ( x , y ) I(x, y) I(x,y) 表示圖像中坐標為 ( x , y ) (x, y) (x,y) 處的像素值,通常是 0 或 1。
提取連通分量的過程可以用以下數學表示:
- 找到所有連通的像素區域,并為每個區域分配一個唯一的標簽。
- 將具有相同標簽的像素歸為同一個連通分量。
Python代碼示例:
import cv2
import numpy as npdef show_images(image):cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)cv2.imshow('image',image)cv2.waitKey()cv2.destroyAllWindows()def connectedComponents(image):_, binary_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) # 二值化圖像# 提取連通分量num_labels, labels = cv2.connectedComponents(binary_image)# 創建一個與原圖像相同大小的彩色圖像以顯示連通分量output = np.zeros_like(image)for i in range(1, num_labels):output[labels == i] = np.random.randint(0, 255) # 為每個分量隨機賦予顏色return outputif __name__ == '__main__':# 讀取圖像img = cv2.imread('cat-dog.png', flags=0)re_img=connectedComponents(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)