2024-10-03|閱讀時間 ‧ 約 0 分鐘

[OpenCV][Python]形態學結構元素在影像處理中的應用

在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。

  • 程式範例為做開運算去除小物體

結構元素的常見類型

  1. 矩形結構元素cv2.MORPH_RECT
    • 矩形結構元素是一種最常見的形態學結構元素,能夠進行較大區域的處理,適合處理方形或矩形區域的噪點和結構。
  2. 橢圓形結構元素cv2.MORPH_ELLIPSE
    • 橢圓形結構元素接近圓形,適合處理圓形或圓滑邊緣的噪點。它能有效去除圓形的噪點而不破壞圖像中的圓形特徵。
  3. 十字形結構元素cv2.MORPH_CROSS
    • 十字形結構元素是一種特殊的形態學結構元素,通常用來處理圖像中的交叉點或角點。


基本形態學操作

  • 開運算(Opening):先進行腐蝕,再進行膨脹。主要用來去除小物體,適合去除前景中的小噪點。
  • 閉運算(Closing):先進行膨脹,再進行腐蝕。主要用來填補背景中的小孔洞,適合去除背景中的小噪點。


實驗圖片

我們使用包含多種噪點和形狀的圖像來進行測試,這張圖片包含小圓形雜點、矩形區域和其他不規則噪點。

程式範例:使用不同結構元素進行處理

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 讀取測試圖片
image = cv2.imread('圖片路徑', cv2.IMREAD_GRAYSCALE)
_, binary = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# 定義不同形狀的結構元素
kernel_size = 55
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (kernel_size, kernel_size))
ellipse_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (kernel_size, kernel_size))
cross_kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (kernel_size, kernel_size))

# 開運算
rect_opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, rect_kernel)
ellipse_opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, ellipse_kernel)
cross_opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, cross_kernel)

# 顯示結果
titles = ['binary', 'Rect Kernel Opening', 'Ellipse Kernel Opening', 'Cross Kernel Opening']
images = [binary, rect_opening, ellipse_opening, cross_opening]

plt.figure(figsize=(5, 5)) # 調整窗口的大小,避免圖片被壓縮


for i in range(4):
plt.subplot(2, 2, i+1)
plt.imshow(images[i], cmap='gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])

plt.tight_layout() # 自動調整子圖的間距,避免重疊
plt.show()

逐步講解

  1. 讀取圖像:首先,我們讀取了一張包含多種噪點和形狀的圖片(上面的範例圖片),轉換成二值化的圖,用來進行形態學處理。
  2. 定義不同的結構元素
  3. 形態學操作(開運算):我們對每一種結構元素都執行了開運算ㄏㄧㄠˇ
  4. 顯示結果:通過 matplotlib 顯示原始圖片和經過不同結構元素處理後的結果。

結果分析

  • 矩形結構元素:能夠更好地處理方形和大範圍的噪點,但對於圓形噪點,可能會損失一些細節。
  • 橢圓形結構元素:對圓形噪點有更好的效果,它能保留圖像中的圓形特徵,同時有效去除圓形噪點。
  • 十字形結構元素:適合處理角點或交叉點,但對於圓形或矩形的噪點處理不如其他結構元素。

在形態學操作中,結構元素的大小和形狀對結果有著決定性的影響。當你使用較大的結構元素時,形態學操作會對圖像產生更強烈的作用,只保留與結構元素大小和形狀相似的物體

結構元素 55

如下圖,使用比較大的結構元素時,只保留了相似形狀的物體其他都濾除掉了。

結構元素 23

矩形結構元素幾乎把全部都快濾除掉了,十字形結構元素都留下了邊邊角角,

橢圓形結構保留了圓形的物件。

總結:

  • 矩形結構元素:適合去除大範圍的噪點,保留方形特徵較好,但對圓形特徵會有一定削減。
  • 橢圓形結構元素:在保護圓形和圓滑特徵方面表現最佳,且對方形特徵的影響也較小,適合處理混合噪點。
  • 十字形結構元素:對於交叉點或線狀特徵的保留效果非常好,但對於圓形或方形特徵,可能會造成邊緣變形。


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.