OpenCV - Mesafe Dönüşümü

distance transformoperatör genellikle ikili görüntüleri girdi olarak alır. Bu işlemde, ön plan bölgeleri içindeki noktaların gri seviye yoğunlukları, ilgili mesafeleri en yakın 0 değerinden (sınır) uzaklaşacak şekilde değiştirilir.

Yöntemi kullanarak OpenCV'de mesafe dönüşümü uygulayabilirsiniz distanceTransform(). Bu yöntemin sözdizimi aşağıdadır.

distanceTransform(src, dst, distanceType, maskSize)

Bu yöntem aşağıdaki parametreleri kabul eder -

  • src - Sınıfın bir nesnesi Mat kaynak (giriş) görüntüsünü temsil eder.

  • dst - Sınıfın bir nesnesi Mat hedef (çıktı) görüntüsünü temsil eder.

  • distanceType - Uygulanacak mesafe dönüşümünün türünü temsil eden tam sayı türünde bir değişken.

  • maskSize - Kullanılacak maske boyutunu temsil eden tam sayı tipi bir değişken.

Misal

Aşağıdaki program, belirli bir görüntü üzerinde mesafe dönüştürme işleminin nasıl gerçekleştirileceğini gösterir.

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");
   }
}

Aşağıdakinin giriş görüntüsü olduğunu varsayalım input.jpg yukarıdaki programda belirtilmiştir.

Çıktı

Programı çalıştırırken aşağıdaki çıktıyı alacaksınız -

Image Processed

Belirtilen yolu açarsanız, çıktı görüntüsünü aşağıdaki gibi gözlemleyebilirsiniz -

Mesafe Dönüşümü İşlemlerinin Türleri

Mesafe işlem tipine ek olarak DIST_Cönceki örnekte gösterildiği gibi, OpenCV çeşitli diğer mesafe dönüştürme işlemlerini de sunar. Tüm bu türler, Imgproc sınıfının önceden tanımlanmış statik alanları (sabit değerler) ile temsil edilir.

İhtiyacınız olan mesafe dönüştürme işleminin türünü, ilgili önceden tanımlanmış değerini adlı parametreye ileterek seçebilirsiniz. distanceType of distanceTransform() yöntem.

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

Aşağıda, çeşitli türlerini temsil eden değerler verilmiştir. distanceTransform işlemler ve ilgili çıktıları.

Kullanım ve Açıklama Çıktı
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3