基礎理論: 形態學是一組基於圖像形狀的工具和操作,主要用於分析和處理二值圖像。這些操作依賴於一個結構元素(或稱為核),它是一個小的二值或灰度圖像,用於在輸入圖像上進行局部操作。
主要的二值形態學操作包括:
- 腐蝕 (Erosion): 這會縮小前景對象(即白色像素)。只有當結構元素完全包含在圖像的前景對象中時,結果圖像的中心像素才會為白色。
- 膨脹 (Dilation): 這會擴大前景對象。如果結構元素與圖像的前景對象至少有一個像素重疊,則結果圖像的中心像素將為白色。
- 開運算 (Opening): 腐蝕後再膨脹。這有助於去除小的對象。
- 閉運算 (Closing): 膨脹後再腐蝕。這有助於填充對象內的小洞。
Python舉例: 我將對您上傳的圖像進行基本的二值形態學操作,並展示結果。讓我們開始進行操作並顯示結果。
# Binarize the image for morphological operations
_, binarized_image = cv2.threshold(new_uploaded_image, 127, 255, cv2.THRESH_BINARY)
# Define a 3x3 square structuring element
kernel = np.ones((3,3), np.uint8)
# Perform morphological operations
erosion = cv2.erode(binarized_image, kernel, iterations=1)
dilation = cv2.dilate(binarized_image, kernel, iterations=1)
opening = cv2.morphologyEx(binarized_image, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(binarized_image, cv2.MORPH_CLOSE, kernel)
# Display results
fig, axes = plt.subplots(1, 5, figsize=(20, 6))
axes[0].imshow(binarized_image, cmap='gray')
axes[0].axis('off')
axes[0].set_title('Original Binary Image')
axes[1].imshow(erosion, cmap='gray')
axes[1].axis('off')
axes[1].set_title('Erosion')
axes[2].imshow(dilation, cmap='gray')
axes[2].axis('off')
axes[2].set_title('Dilation')
axes[3].imshow(opening, cmap='gray')
axes[3].axis('off')
axes[3].set_title('Opening')
axes[4].imshow(closing, cmap='gray')
axes[4].axis('off')
axes[4].set_title('Closing')
plt.tight_layout()
plt.show()
以上是對圖像進行基本二值形態學操作的結果。
- 原始二值圖像:這是經過二值化的上傳圖像。
- 腐蝕:這顯示了使用3x3結構元素腐蝕的結果。
- 膨脹:這顯示了使用3x3結構元素膨脹的結果。
- 開運算:這顯示了腐蝕後再膨脹的結果。
- 閉運算:這顯示了膨脹後再腐蝕的結果。
透過這些操作,您可以看到圖像中的形狀如何被修改和強化。形態學操作在二值圖像分析、物件檢測和圖像預處理中是非常有用的。