Opencv-adaptive-threshold

提供:Dev Guides
移動先:案内検索

OpenCV-適応しきい値

  • 単純なしきい値*では、しきい値はグローバルです。つまり、画像内のすべてのピクセルで同じです。 *適応型しきい値*は、より小さい領域に対してしきい値が計算される方法であるため、領域ごとに異なるしきい値があります。

OpenCVでは、 Imgproc クラスの* adaptiveThreshold()*メソッドを使用して、画像に対して適応しきい値操作を実行できます。 このメソッドの構文は次のとおりです。

adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

このメソッドは、次のパラメータを受け入れます-

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。

  • dst -宛先(出力)イメージを表すクラス Mat のオブジェクト。

  • maxValue -ピクセル値がしきい値よりも大きい場合に与えられる値を表すdouble型の変数。

  • adaptiveMethod -使用される適応方法を表すタイプの整数の変数。 これは、次の2つの値のいずれかになります

  • ADAPTIVE_THRESH_MEAN_C -しきい値は近隣地域の平均です。

  • ADAPTIVE_THRESH_GAUSSIAN_C -しきい値は、重みがガウスウィンドウである近傍値の重み付き合計です。

    *thresholdType* -使用されるしきい値の種類を表す整数型の変数。
    *blockSize* -しきい値の計算に使用されるピクセル近傍のサイズを表す整数型の変数。
    *C* -両方の方法で使用される定数を表すdouble型の変数(平均または加重平均から減算)。

次のプログラムは、OpenCVの画像で適応しきい値操作を実行する方法を示しています。 ここでは、しきい値メソッドに binary および ADAPTIVE_THRESH_MEAN_C タイプの適応しきい値を選択しています。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class AdaptiveThresh {
   public static void main(String args[]) throws Exception {
     //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

     //Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap14/thresh_input.jpg";

     //Reading the image
      Mat src = Imgcodecs.imread(file,0);

     //Creating an empty matrix to store the result
      Mat dst = new Mat();

      Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
         Imgproc.THRESH_BINARY, 11, 12);

     //Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap14/Adaptivemean_thresh_binary.jpg", dst);

      System.out.println("Image Processed");
   }
}

上記のプログラムで指定された入力画像 thresh_input.jpg が次のものであると仮定します。

Thresh Input

出力

プログラムを実行すると、次の出力が得られます-

Image Processed

指定したパスを開くと、次のように出力画像を観察できます-

適応しきい値出力

他のタイプの適応しきい値処理

前の例で示したように、適応メソッドとしての ADAPTIVE_THRESH_MEAN_C およびしきい値タイプとしての THRESH_BINARY に加えて、これら2つの値の組み合わせをさらに選択できます。

Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
   Imgproc.THRESH_BINARY, 11, 12);

以下は、パラメータ adaptiveMethod および thresholdType の値のさまざまな組み合わせを表す値と、それぞれの出力です。

adaptiveMethod/thresholdType ADAPTIVE_THRESH_MEAN_C ADAPTIVE_THRESH_GAUSSIAN_C:
THRESH_BINARY ADAPTIVE_THRESH_BINARY ADAPTIVE_THRESH_GAUSSIAN_BINARY
THRESH_BINARY_INV ADAPTIVE_THRESH_BINARY_INV ADAPTIVE_THRESH_GAUSSIAN_BINARY_INV