適応的閾値処理は、グレースケール画像を2値(白黒)画像に変換するための重要な画像処理技術です。画像全体に単一の閾値を使用する単純な閾値処理とは異なり、適応的閾値処理は、異なる画像領域に対して動的に閾値を計算します。この適応性は、グローバルな閾値では前景と背景を正確に分離できない、照明が不均一な画像を扱う場合に特に有利です。
適応的閾値処理の中核となる原理は、閾値を決定する際に局所的な画像特性を考慮することです。グローバルに決定された値ではなく、アルゴリズムは画像をより小さな領域(ブロックまたはタイル)に分割します。各領域について、その領域内の画素強度に基づいて閾値が計算されます。この局所的なアプローチは、画像全体での照明の変化を効果的に補償します。局所的な閾値を計算するための一般的な方法には、領域内の画素強度の平均化や、重み付き平均(ガウス)の使用などがあります。
OpenCVの適応的閾値処理関数
強力なコンピュータビジョンライブラリであるOpenCVは、そのcv2.adaptiveThreshold()
関数で適応的閾値処理を簡素化します。この関数は、いくつかの重要なパラメータを受け入れます。
src
: 入力グレースケール画像。maxValue
: 閾値を超える画素に割り当てられる最大値(通常は白の255)。adaptiveMethod
: 閾値を計算する方法。オプションには以下が含まれます。cv2.ADAPTIVE_THRESH_MEAN_C
: 近傍の平均を閾値として使用します。cv2.ADAPTIVE_THRESH_GAUSSIAN_C
: 近傍の重み付き平均(ガウス)を閾値として使用します。
thresholdType
: 閾値処理の種類。cv2.THRESH_BINARY
がよく使用され、閾値を超える画素をmaxValue
に、閾値を下回る画素を0(黒)に設定します。blockSize
: 閾値計算に使用される近傍(領域)のサイズ。奇数である必要があります。C
: 平均または重み付き平均から減算される定数。閾値を微調整します。
Pythonによる実践的な実装
OpenCVを使用したPythonの例を以下に示します。
import cv2
import numpy as np
# グレースケール画像を読み込む
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# 適応的閾値処理を適用する
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# 結果を表示する
cv2.imshow('Original', img)
cv2.imshow('Adaptive Threshold', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
このコードは、グレースケール画像を読み込み、ガウス法(cv2.ADAPTIVE_THRESH_GAUSSIAN_C
)、ブロックサイズ11、定数2を使用して適応的閾値処理を適用します。その後、元の画像と閾値処理された画像の両方を表示します。最適な結果を得るためには、blockSize
とC
を調整することが重要であり、画像の特性に基づいて適切なadaptiveMethod
を選択することも重要です。
適切なパラメータの選択
適応的閾値処理の有効性は、パラメータの選択に依存します。より大きなblockSize
はより広い近傍を考慮するため、より滑らかな遷移になりますが、細かいディテールを見逃す可能性があります。逆に、より小さなblockSize
は局所的な変化により敏感になりますが、ノイズが発生する可能性があります。定数C
は閾値の感度を調整するのに役立ちます。C
が大きいほど、閾値が高くなります。
cv2.ADAPTIVE_THRESH_MEAN_C
とcv2.ADAPTIVE_THRESH_GAUSSIAN_C
のどちらを選択するかは、画像のノイズ特性によって異なります。ガウス重み付けによって外れ値の影響が軽減されるため、cv2.ADAPTIVE_THRESH_GAUSSIAN_C
は一般的にノイズの多い画像に適しています。
結論
適応的閾値処理は、照明が不均一な画像を2値化する堅牢なソリューションを提供し、単純な閾値処理よりも精度が大幅に向上します。OpenCVの効率的なcv2.adaptiveThreshold()
関数は、ユーザーが簡単にこの技術を実装し、パラメータを注意深く調整し、適切な適応方法を選択することで最適な結果を得ることができるようにします。その柔軟性と有効性から、さまざまなコンピュータビジョンアプリケーションにおいて不可欠なツールとなっています。
目次