數字圖像處理:形態學

要求

對一副二值圖像進行膨脹、腐蝕、開、閉操作。

待處理圖像:

對圖片進行二值化:

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的核(其實可以更小)
在這裏插入圖片描述
對鹽噪聲圖像進行開運算,先腐蝕會導致鹽噪聲被腐蝕掉,如果對其進行閉運算,中則整個圖像會被膨脹,因爲噪聲之間靠的很近,膨脹後有可能復原不了

對胡椒噪聲圖像進行閉運算,會膨脹掉胡椒噪聲,如歸對其開運算,整個圖像可能會被腐蝕,與鹽噪聲同理

錯誤的運用:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章