要求
對一副二值圖像進行膨脹、腐蝕、開、閉操作。
待處理圖像:
對圖片進行二值化:
ret, img_threshold = cv2.threshold(img, 240, 255, cv2.THRESH_BINARY_INV)
腐蝕
使用opencv,結構元爲50*50的方形,進行腐蝕
kernel = np.ones((50, 50), np.uint8)
erosion = cv2.erode(img_threshold, kernel)
結果
可以看到腐蝕了50
100*100的結構元時:
產生斷裂
或者使用長方形的結構元進行腐蝕,kernel1 側重水平方形,其結構元長大於寬
kernel12,側重垂直反向,其結構元長小於寬
kernel1 = np.ones((1, 200), np.uint8)
kernel2 = np.ones((90, 1), np.uint8)
erosion = cv2.erode(img_threshold, kernel1)
erosion2 = cv2.erode(img_threshold, kernel2)
不同形狀的結構元素,收縮或膨脹後的結果形狀不同
膨脹
kernel1 = np.ones((1, 200), np.uint8)
kernel2 = np.ones((90, 1), np.uint8)
dilate1 = cv2.dilate(erosion, kernel1)
dilate2 = cv2.dilate(erosion, kernel2)
開運算與閉運算
用100*100的方形結構元,進行如下操作:
def open_(img, kernel):
erosion = cv2.erode(img, kernel)
dilate = cv2.dilate(erosion, kernel)
return dilate
def close_(img, kernel):
dilate = cv2.dilate(img, kernel)
erosion = cv2.erode(dilate, kernel)
return erosion
開運算先進行腐蝕,這回導致凸起(如右上角和左下角)和狹長(中心部分)被腐蝕掉,然後再膨脹回“原來大小”
閉運算先進行膨脹,這回導致凹陷(右邊中間)被膨脹填充,然後再腐蝕回“原來大小”
形態學去噪
有兩副分別是鹽噪聲和胡椒噪聲的圖,用10 * 10的核(其實可以更小)
對鹽噪聲圖像進行開運算,先腐蝕會導致鹽噪聲被腐蝕掉,如果對其進行閉運算,中則整個圖像會被膨脹,因爲噪聲之間靠的很近,膨脹後有可能復原不了
對胡椒噪聲圖像進行閉運算,會膨脹掉胡椒噪聲,如歸對其開運算,整個圖像可能會被腐蝕,與鹽噪聲同理
錯誤的運用: