HOWTO · OpenCV
OpenCV を使用した適応しきい値
この記事では、OpenCV を使用して適応しきい値処理とは何かを詳しく説明します。
このページの内容
OpenCV には、単純なしきい値処理と適応的なしきい値処理の 2 種類のしきい値処理があります。 この記事では、適応しきい値処理の詳細と、OpenCV ライブラリを使用してそれを実装する方法について説明します。
OpenCV を使用した適応しきい値処理
OpenCV では、適応しきい値処理は、画像領域ごとに異なるしきい値が計算されるプロセスです。 単純なしきい値処理とは異なり、画像内の他のすべてのピクセルに同じしきい値が使用されます。
ピクセルの値がしきい値より小さい場合、0 が設定されます。 ピクセルの値がしきい値よりも大きい場合、255 が設定されます。
適応しきい値は、適応しきい値平均とガウスの 2つの方法を使用します。 以下は、適応しきい値処理の構文です。
構文:
cv2.adaptiveThreshold(
inputImage,
maximumValue,
thresholdMethod,
typeOfthreshold,
sizeOfBlock,
constantValue,
)
以下は、adaptiveThreshold() メソッドに渡されるパラメーターです。
inputImage: ソースは入力画像です。maximumValue: ピクセルに割り当てることができる最大値。 これは、最大のしきい値に他なりません。 せいぜい 255 です。adaptiveMethod: アダプティブ メソッドは、しきい値の計算方法を決定します。 適応しきい値処理には 2つの適応方法があります。cv2.ADAPTIVE_THRESH_MEAN_C: 近隣エリアの値の平均から定数値を引いたもの、つまり、ブロック サイズの平均に点のブロック サイズの近隣から定数値を引いた値を掛けた値を取ります。cv2.ADAPTIVE_THRESH_GAUSSIAN_C: 近傍値のガウス加重和から定数値を引いた値をとります。つまり、ブロック サイズに点の近傍ブロック サイズを乗じた加重和から定数値を引いた値を取ります。typeOfthreshold: 適用されるしきい値のタイプ。sizeOfBlockは隣接エリアのサイズです。constantValue: 近くのピクセルの平均または加重合計から差し引かれた定数値。
adaptiveThreshold() メソッドの構文とパラメーターを確認したので、例を挙げて、適応しきい値処理が実際にどのように機能するかを見てみましょう。
まず、システムに OpenCV ライブラリがインストールされていることを確認します。 その後、以下の例に示すように、OpenCV ライブラリをインポートする必要があります。
適応しきい値法では、ソース イメージがグレースケール イメージであることが想定されます。 そのため、imread() メソッドで画像を読み取るときに、2 番目の引数として 0 を渡してグレースケール画像を取得し、その画像を image 変数内に格納する必要があります。
コードスニペット:
import cv2
image = cv2.imread("text.jpg", 0)
mean = cv2.adaptiveThreshold(
image, 250, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 25, 15
)
gaussian = cv2.adaptiveThreshold(
image, 250, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 25, 15
)
cv2.imshow("Adaptive Thresholding Mean", mean)
cv2.imshow("Adaptive Thresholding Gaussian", gaussian)
cv2.waitKey(0)
画像には本のテキストが含まれています。 ここで、両方の適応しきい値手法を上記の画像に適用し、これらの両方の手法に同じパラメーターを渡し、出力画像の違いを確認します。
最初に画像を渡し、次に 2 番目のパラメータとして 255 (白) を渡し、適応メソッド ADAPTIVE_THRESH_MEAN_C と ADAPTIVE_THRESH_GAUSSIAN_C をそれぞれ 3 番目のパラメータとして渡します。
しきい値タイプには、画像に対して基本的なしきい値処理を実行する THRESH_BINARY を渡します。 次に、隣接する領域のサイズを指定する必要があります。 この場合、ブロックサイズとして 25 を渡しました。
次に、adaptiveThreshold() メソッドの最後のパラメーターとして何らかの定数値を渡し、これら両方の操作の結果を変数 mean と gaussian にそれぞれ格納します。
最後に、imshow() メソッドを使用してこれらの結果の画像を出力ウィンドウに出力し、タブの名前を指定できます。 これは、平均とガウスの両方の出力がどのように見えるかです。
出力:
まとめ
OpenCV には、シンプルと適応型の 2 種類のしきい値処理があります。 単純なしきい値処理では、画像内の他のすべてのピクセルに同じしきい値が適用されます。
このタイプのしきい値処理は、照明条件が変化しない一部の画像でうまく機能する場合があります。 しかし、ほとんどの画像では、照明が大きく異なります。
このような場合、このしきい値処理手法を使用することは適切なアプローチではない可能性があります。
したがって、OpenCV ライブラリには、適応しきい値処理と呼ばれる別のしきい値処理手法もあります。 適応しきい値処理では、領域ごとに異なるしきい値が計算され、より良い結果が得られます。