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

閱讀時間約 6 分鐘

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

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

結構元素的常見類型

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


基本形態學操作

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


實驗圖片

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

raw-image

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

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 顯示原始圖片和經過不同結構元素處理後的結果。

結果分析

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

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

結構元素 55

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

raw-image

結構元素 23

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

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

raw-image

總結:

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


120會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
cv2.fastNlMeansDenoising() 是 OpenCV 中一個非常有效的去噪函數,基於非局部均值濾波算法(Non-Local Means Filtering)。它能夠有效地去除圖像中的隨機噪聲(如高斯噪聲),並保留圖像的細節,特別適合處理含有隨機噪聲的圖像,如拍攝時產生的感光元件噪聲
當影像中有雜訊時,使用直方圖均衡化來增強對比就會受雜訊的影響,從而影響到整體的結果。應對這個問題,可以考慮使用自適應直方圖均衡化來減少雜訊的影響,並增強對比度。 本文將比較直方圖均衡化與自適應直方圖均衡化的差異性。 [OpenCV基礎][Python]影像增強_直方圖均衡處理 直方圖均衡化的
在 OpenCV 中,將圖片從 BGR 色彩空間轉換為灰階圖像時常用cv2.COLOR_BGR2GRAY ,此函數使用了特定的權重來計算灰階值。這些權重是基於人眼對不同顏色的敏感度進行調整的。 Gray=0.299×R+0.587×G+0.114×B 本文介紹了用其他方式來提取色彩通道
cv2.countNonZero 是 OpenCV 中的一個函數,用來計算二值圖像(或單通道圖像)中非零像素的數量。這個函數對於圖像處理中的許多操作非常有用,例如計算某個區域內的白色像素數量,從而幫助我們了解圖像的內容或進行進一步的分析。 使用範例 假設您有一個二值圖像,其中白色像素
局部二值化(Local Thresholding)是一種影像處理技術,用來根據局部區域的像素值動態地將影像轉換為二值影像。這在處理光照不均勻的影像時特別有用。 與常見的兩種二值化(Otsu's與固定閥值)方法做比較。 實現局部二值化的範例: import cv2 import numpy
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
cv2.fastNlMeansDenoising() 是 OpenCV 中一個非常有效的去噪函數,基於非局部均值濾波算法(Non-Local Means Filtering)。它能夠有效地去除圖像中的隨機噪聲(如高斯噪聲),並保留圖像的細節,特別適合處理含有隨機噪聲的圖像,如拍攝時產生的感光元件噪聲
當影像中有雜訊時,使用直方圖均衡化來增強對比就會受雜訊的影響,從而影響到整體的結果。應對這個問題,可以考慮使用自適應直方圖均衡化來減少雜訊的影響,並增強對比度。 本文將比較直方圖均衡化與自適應直方圖均衡化的差異性。 [OpenCV基礎][Python]影像增強_直方圖均衡處理 直方圖均衡化的
在 OpenCV 中,將圖片從 BGR 色彩空間轉換為灰階圖像時常用cv2.COLOR_BGR2GRAY ,此函數使用了特定的權重來計算灰階值。這些權重是基於人眼對不同顏色的敏感度進行調整的。 Gray=0.299×R+0.587×G+0.114×B 本文介紹了用其他方式來提取色彩通道
cv2.countNonZero 是 OpenCV 中的一個函數,用來計算二值圖像(或單通道圖像)中非零像素的數量。這個函數對於圖像處理中的許多操作非常有用,例如計算某個區域內的白色像素數量,從而幫助我們了解圖像的內容或進行進一步的分析。 使用範例 假設您有一個二值圖像,其中白色像素
局部二值化(Local Thresholding)是一種影像處理技術,用來根據局部區域的像素值動態地將影像轉換為二值影像。這在處理光照不均勻的影像時特別有用。 與常見的兩種二值化(Otsu's與固定閥值)方法做比較。 實現局部二值化的範例: import cv2 import numpy
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
Thumbnail
視覺層級並不侷限於平面設計,在用戶體驗及介面上更是一個重要的核心之一。視覺層級除了讓畫面的視覺編排更加精緻好看,更重要的功能是能讓畫面有效地被組織,讓觀者更容易理解。
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
攝影構圖會影響畫面的視覺平衡和觀感,像是運用三分法則等技法,能夠精準地引導觀眾的視線,使畫面更加動人。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
Thumbnail
視覺層級並不侷限於平面設計,在用戶體驗及介面上更是一個重要的核心之一。視覺層級除了讓畫面的視覺編排更加精緻好看,更重要的功能是能讓畫面有效地被組織,讓觀者更容易理解。
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
攝影構圖會影響畫面的視覺平衡和觀感,像是運用三分法則等技法,能夠精準地引導觀眾的視線,使畫面更加動人。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉