しきい値処理を始める

Pythonで学ぶ画像処理

Rebeca Gonzalez

Data Engineer

しきい値処理

画像を前景と背景に分割

画像を白黒にすることで

各ピクセルを次で設定:

  • ピクセルがしきい値より大きいなら 255(白)
  • ピクセルがしきい値より小さいなら 0(黒)

カメラを持つ男性のしきい値画像

Pythonで学ぶ画像処理

しきい値処理

最も簡単な画像セグメンテーション手法

  • オブジェクトを分離
    • 物体検出
    • 顔検出
    • など

ドミノ駒のしきい値画像

Pythonで学ぶ画像処理

しきい値処理

グレースケール画像にのみ適用

ドミノ駒で示すしきい値処理の手順。RGB(3色)→グレースケール→しきい値

Pythonで学ぶ画像処理

適用してみる

# 最適なしきい値を取得
thresh = 127

# 画像にしきい値処理を適用 binary = image > thresh
# 元画像としきい値処理後を表示 show_image(image, 'Original') show_image(binary, 'Thresholded')

カメラを持つ男性のしきい値画像

Pythonで学ぶ画像処理

反転しきい値処理

# 最適なしきい値を取得
thresh = 127

# 画像にしきい値処理を適用 inverted_binary = image <= thresh
# 元画像としきい値処理後を表示 show_image(image, 'Original') show_image(inverted_binary, 'Inverted thresholded')

カメラを持つ男性の反転しきい値画像

Pythonで学ぶ画像処理

分類

  • グローバル/ヒストグラム型: 均一な背景に有効

  • ローカル/適応型: 不均一な照明に有効

グローバルとローカルしきい値の比較

Pythonで学ぶ画像処理

他のしきい値アルゴリズムを試す

from skimage.filters import try_all_threshold

# すべての結果画像を取得 fig, ax = try_all_threshold(image, verbose=False)
# 結果のプロットを表示 show_plot(fig, ax)
Pythonで学ぶ画像処理

他のしきい値アルゴリズムを試す

テキストページのグレースケール画像で試した全グローバルしきい値法

Pythonで学ぶ画像処理

最適なしきい値

グローバル

均一な背景
# Otsuのしきい値関数をインポート
from skimage.filters import threshold_otsu

# 最適なしきい値を取得 thresh = threshold_otsu(image)
# 画像にしきい値処理を適用 binary_global = image > thresh
Pythonで学ぶ画像処理

最適なしきい値

グローバル

# 元画像と二値化画像を表示
show_image(image, 'Original')
show_image(binary_global, 'Global thresholding')

カメラを持つ男性の元画像、しきい値画像、ヒストグラム(最適しきい値に赤線)

Pythonで学ぶ画像処理

最適なしきい値

ローカル

不均一な背景
# ローカルしきい値関数をインポート
from skimage.filters import threshold_local

# ブロックサイズを35に設定 block_size = 35
# 最適なローカルしきい値を取得 local_thresh = threshold_local(text_image, block_size, offset=10)
# ローカルしきい値処理を適用して二値画像を得る binary_local = text_image > local_thresh
Pythonで学ぶ画像処理

最適なしきい値

ローカル

# 元画像と二値化画像を表示
show_image(text_image, 'Original')
show_image(binary_local, 'Local thresholding')

テキストページのローカルしきい値画像

Pythonで学ぶ画像処理

演習に進みましょう!

Pythonで学ぶ画像処理

Preparing Video For Download...