OpenCV-距離変換

ザ・ distance transform演算子は通常、入力としてバイナリイメージを取ります。この操作では、前景領域内のポイントのグレーレベル強度を変更して、最も近い0値(境界)からそれぞれの距離を遠ざけます。

この方法を使用して、OpenCVで距離変換を適用できます distanceTransform()。このメソッドの構文は次のとおりです。

distanceTransform(src, dst, distanceType, maskSize)

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

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

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

  • distanceType −適用される距離変換のタイプを表す整数タイプの変数。

  • maskSize −使用するマスクサイズを表す整数型の変数。

次のプログラムは、特定の画像に対して距離変換操作を実行する方法を示しています。

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

public class DistanceTransform {
   public static void main(String args[]) {
      // 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/chap19/input.jpg";
      Mat src = Imgcodecs.imread(file,0);

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

      // Converting the grayscale image to binary image
      Imgproc.threshold(src, binary, 100, 255, Imgproc.THRESH_BINARY);

      // Applying distance transform
      Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);

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

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

以下が入力画像であると仮定します input.jpg 上記のプログラムで指定されています。

出力

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

Image Processed

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

距離変換操作の種類

距離操作タイプに加えて DIST_C前の例で示したように、OpenCVは他のさまざまなタイプの距離変換操作に対応しています。これらのタイプはすべて、Imgprocクラスの事前定義された静的フィールド(固定値)によって表されます。

それぞれの事前定義された値を名前の付いたパラメータに渡すことにより、必要な距離変換操作のタイプを選択できます。 distanceTypedistanceTransform() 方法。

// Applying distance transform 
Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);

以下は、さまざまなタイプを表す値です。 distanceTransform 操作とそれぞれの出力。

操作と説明 出力
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3