1. 引言
歡迎回來,我的圖像處理愛好者們!今天,讓我們繼續研究圖像處理領域中的形態學計算。在本篇中,我們將重點介紹腐蝕操作的反向效果膨脹操作。
閑話少說,我們直接開始吧!
2. 膨脹操作原理
膨脹操作為腐蝕操作的作用相反,這是圖像處理中最常使用的另一種形態學操作,它主要通過在圖像邊界上擴展像素來實現擴寬圖像中對象的作用。膨脹操作通過考慮每個像素的鄰域并將其值設置為該鄰域中所有像素中的最大值來實現的。對于二值圖像,如果任何相鄰像素的值為1,則輸出像素也被設置為1。
接著,讓我們通過具體示例來進行講解,首先導入我們今天的圖像,代碼如下:
# Define the image
original_image = np.array([[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 1, 1, 1, 0, 0],[0, 0, 1, 1, 1, 1, 0, 0],[0, 1, 1, 1, 1, 0, 0, 0],[0, 1, 1, 1, 0, 0, 0, 0],[0, 1, 1, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0]])plt.figure(figsize=(10,10))
plt.imshow(original_image, cmap='gray', extent=[0, 8, 0, 8])
plt.title('Original Image', fontsize=20);
得到結果如下:
3. 定義結構化元素
和上一節腐蝕操作類似,我們選擇同樣的十字架結構化元素模板,代碼如下:
# Define the structuring element
selem_cross = np.array([[0,1,0],[1,1,1],[0,1,0]])
plt.figure(figsize=(9,9))
plt.imshow(selem_cross, cmap='gray')
plt.title('Structuring Element: Cross', fontsize=20);
得到結果如下:
4. 膨脹操作效果
經過上述操作,我們定義了需要操作的原始圖像和相應的結構化模板元素,接著我們使用函數apply_erosion
來將上述結構化模板元素作用于相應的圖像中,進而得到我們膨脹操作的效果,代碼如下:
def apply_erosion(image, selem):# Perform erosion on the given image using the structuring element, selemeroded_image = erosion(image, selem)# Display the original and eroded imagesfig, axes = plt.subplots(1, 3, figsize=(15, 10))ax = axes.ravel()ax[0].imshow(selem, cmap='gray', extent=[0, selem.shape[1], 0, selem.shape[0]])ax[0].set_title('Structuring Element', fontsize=20)ax[1].imshow(image, cmap='gray', extent=[0, image.shape[1], 0, image.shape[0]])ax[1].set_title('Original Image', fontsize=20)ax[2].imshow(eroded_image, cmap='gray', extent=[0, image.shape[1], 0, image.shape[0]])ax[2].set_title('Eroded Image', fontsize=20)plt.tight_layout()plt.show()apply_erosion(original_image, selem_cross)
最終膨脹操作的效果如下:
觀察上述輸出,可以看到經過膨脹操作后的圖相比原始圖像的擴大版。大家可以通過下列動圖進行更加詳細的理解,樣例圖如下:
5. 其他效果
需要注意的是,和腐蝕操作類似,膨脹操作中使用的鄰域大小或結構元素的選擇會對結果產生不同的影響。
這里,如果選擇使用上一篇節中得正方形作為測試結構元素,相應得效果如下:
6. 總結
本文重點介紹了和腐蝕操作相反作用得膨脹操作,并通過具體例子進行了原理講解,同時給出了相應得代碼示例。
您學廢了嘛?