影像形態學運算是一種根據影像中物體形狀進行處理的方法,常用於去除雜訊、分離物體、填補空洞,主要應用於二值化影像。這些運算能夠強化影像結構,提升後續分析的準確性。
形態學運算依賴「卷積核(Kernel)」進行像素區域的操作。常見運算包括:
import cv2
import numpy as np
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 進行二值化處理
_, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Binary', binary)
# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()
# 建立 5x5 的卷積核
kernel = np.ones((5,5), np.uint8)
dilation = cv2.dilate(binary, kernel, iterations=1)
cv2.imshow('Dilation', dilation)
iterations
代表膨脹的次數,數值越大效果越明顯。效果示意:
# 建立 5x5 的卷積核
kernel = np.ones((5,5), np.uint8)
erosion = cv2.erode(binary, kernel, iterations=1)
cv2.imshow('Erosion', erosion)
kernel
越大,侵蝕效果越明顯,但也可能損失細節。效果示意:
# 開運算:先侵蝕再膨脹
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
cv2.imshow('Opening', opening)
效果示意:
# 閉運算:先膨脹再侵蝕
closing = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
cv2.imshow('Closing', closing)
效果示意:
方法 | 特點 | 應用場景 |
---|---|---|
Dilation | 擴大白色區域,填補黑洞 | 補洞、連接區域 |
Erosion | 縮小白色區域,去除雜點 | 消除雜訊、分離物體 |
Opening | 去除小白點雜訊 | 清理影像背景 |
Closing | 填補白色區域小黑洞 | 增強物體完整性 |
形態學運算能有效改善二值化影像的品質,使物體邊界更清晰、雜訊更少。這些方法在影像前處理與電腦視覺任務中扮演關鍵角色,能提升物體偵測、分割等後續工作的精度與穩定性。