大津の手法(Otsu’s method)は、画像のヒストグラムを利用して最適なしきい値(threshold)を自動的に決定するアルゴリズムです。1979年に大津展之氏によって提案され、今では画像処理分野で非常に広く使われています。
目次
🎯 目的
前景(対象)と背景を最もよく分離できるしきい値をヒストグラムから自動で求める。
🧠 大津の手法の原理(数学的な考え方)
ヒストグラムから全ての可能なしきい値 tt を試して、それぞれについて次の値を計算します:
1. クラス分け(しきい値 tt による2クラス分類):
- クラス1:画素値 ≤t\leq t(背景)
- クラス2:画素値 >t> t(前景)
2. クラスの重み(出現確率):
- ω1(t)\omega_1(t):背景の割合
- ω2(t)=1−ω1(t)\omega_2(t) = 1 – \omega_1(t):前景の割合
3. クラスの平均値(輝度の平均):
- μ1(t)\mu_1(t):背景の平均輝度
- μ2(t)\mu_2(t):前景の平均輝度
4. クラス間分散(between-class variance):
σb2(t)=ω1(t)⋅ω2(t)⋅(μ1(t)−μ2(t))2\sigma_b^2(t) = \omega_1(t) \cdot \omega_2(t) \cdot \left( \mu_1(t) – \mu_2(t) \right)^2
✅ 最適なしきい値
すべての tt について σb2(t)\sigma_b^2(t) を計算し、
- 最大になる tt を「最適なしきい値」とする。
→ クラス間の「分離」が最大になる=前景と背景の差が一番はっきりする!
📈 イメージ図(概念)
輝度ヒストグラム(例) 輝度 → ┌─────────────────────┐ │ ▲ ▲ │ │ ▲▲ ▲▲ │ │ ▲▲▲ ▲▲▲ │ │ ▲▲▲▲ ▲▲▲▲ │ └─────────────────────┘ | | 背景 前景 μ1 μ2 ↓ ↓ ←------t------→ ← ここがしきい値(t)
✅ 実装(OpenCV)
import cv2 img = cv2.imread('image.jpg', 0) # グレースケール画像 # しきい値を0にして、Otsu's methodを有効にする _, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) cv2.imshow("Otsu Thresholding", binary) cv2.waitKey(0) cv2.destroyAllWindows()
🧪 メリットと注意点
項目 | 内容 |
---|---|
✅ 長所 | 完全に自動(パラメータ不要)、高速 |
⚠️ 短所 | ピークが1つの画像(ノイズ多い、コントラスト低い)では効果が薄い |
📌 応用 | OCR前処理、医用画像、輪郭検出など |
もっと深く、Pythonで「大津法の実装を手作業でやってみる」コードも用意できますよ!興味ありますか?