iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 14

🚀 DAY 14:影像二值化(Thresholding)|Threshold、Adaptive Threshold、Otsu

  • 分享至 

  • xImage
  •  

影像二值化(Image Thresholding)是一種將灰階影像轉換為黑白影像的技術,常用於分離前景與背景,便於後續影像分析或物體偵測。


📌 二值化的基本原理

核心原理是設定閾值(threshold)
- 大於閾值的像素設為白色(255)
- 小於閾值的像素設為黑色(0)

常見方法包括:

  1. 固定閾值(Simple Threshold)
  2. 自適應閾值(Adaptive Threshold)
  3. Otsu 自動閾值法(Otsu Thresholding)

🖼 測試圖片準備

請準備一張灰階圖片 image.jpg,並放在程式同一資料夾。

import cv2


img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original', img)

# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()

原圖灰階


🔹 1. 固定閾值 (Simple Threshold)

使用 cv2.threshold() 設定固定閾值進行二值化。

# 固定閾值 127
ret, thresh_simple = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Simple Threshold', thresh_simple)

📌 參數說明

cv2.threshold(src, thresh, maxval, type)

  • src → 輸入灰階影像
  • thresh → 閾值數值
  • maxval → 高於閾值後設置的像素值(通常 255)
  • type → 閾值類型,例如 cv2.THRESH_BINARY, cv2.THRESH_BINARY_INV

效果示意:可獲得黑白分明的二值影像

固定閾值


🔹 2. 自適應閾值 (Adaptive Threshold)

對於光照不均的影像,固定閾值容易失效,自適應閾值可根據鄰域自動計算閾值。


# 自適應閾值 - 高斯方法
thresh_adapt = cv2.adaptiveThreshold(img, 255,
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
    cv2.THRESH_BINARY, 11, 2)
cv2.imshow('Adaptive Threshold', thresh_adapt)

📌 參數說明

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

  • maxValue → 超過閾值時的像素值
  • adaptiveMethod → cv2.ADAPTIVE_THRESH_MEAN_C / cv2.ADAPTIVE_THRESH_GAUSSIAN_C
  • thresholdType → cv2.THRESH_BINARY / cv2.THRESH_BINARY_INV
  • blockSize → 鄰域大小,必須為奇數
  • C → 從平均值或加權平均減去的常數

效果示意:即使光照不均,仍能得到清晰的二值化影像

自適應閾值


🔹 3. Otsu 自動閾值法

Otsu 方法會自動計算最佳閾值,使類內方差最小化,提升分割效果。


ret2, thresh_otsu = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('Otsu Threshold', thresh_otsu)

📌 參數說明

  • 閾值設為 0,OpenCV 會自動計算
  • cv2.THRESH_BINARY+cv2.THRESH_OTSU → 啟用 Otsu 方法

效果示意:可自動選擇最佳閾值,分離前景與背景

Otsu自動閾值法


📊 方法比較

方法 優點 缺點
Simple Threshold 簡單快速 光照不均失效
Adaptive Threshold 可處理光照不均影像 計算較慢,需調整參數
Otsu Threshold 自動計算最佳閾值 對多峰影像可能失效

📖 今日結語

影像二值化是圖像處理與分析的基礎技術,廣泛應用於文字分割、物體檢測、邊緣提取等場景。選擇合適的方法並調整參數,可有效分離前景與背景,提升後續處理的精度。


上一篇
🚀 DAY 13:影像銳化(Sharpening)|filter2D、Unsharp Mask、Laplacian
系列文
OpwnCV影像處理新手村14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言