OpenCV - Transformacja odległości

Plik distance transformoperator zazwyczaj przyjmuje obrazy binarne jako dane wejściowe. W tej operacji intensywność szarości punktów wewnątrz obszarów pierwszego planu jest zmieniana w celu oddalenia ich odpowiednich odległości od najbliższej wartości 0 (granicy).

Możesz zastosować transformację odległości w OpenCV za pomocą metody distanceTransform(). Poniżej znajduje się składnia tej metody.

distanceTransform(src, dst, distanceType, maskSize)

Ta metoda akceptuje następujące parametry -

  • src - Przedmiot z klasy Mat reprezentujący obraz źródłowy (wejściowy).

  • dst - Przedmiot z klasy Mat reprezentujący obraz docelowy (wyjściowy).

  • distanceType - zmienna typu integer reprezentująca typ zastosowanej transformacji odległości.

  • maskSize - zmienna typu całkowitego reprezentująca rozmiar maski, która ma być używana.

Przykład

Poniższy program demonstruje, jak wykonać operację transformacji odległości na danym obrazie.

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

Załóżmy, że poniżej jest obraz wejściowy input.jpg określone w powyższym programie.

Wynik

Podczas wykonywania programu otrzymasz następujący wynik -

Image Processed

Jeśli otworzysz określoną ścieżkę, możesz obserwować obraz wyjściowy w następujący sposób -

Rodzaje operacji przekształcania odległości

Oprócz typu operacji na odległość DIST_Cpokazane w poprzednim przykładzie, OpenCV obsługuje różne inne typy operacji przekształcania odległości. Wszystkie te typy są reprezentowane przez predefiniowane pola statyczne (wartości stałe) klasy Imgproc.

Możesz wybrać typ operacji transformacji odległości, której potrzebujesz, przekazując odpowiednią wstępnie zdefiniowaną wartość do nazwanego parametru distanceType z distanceTransform() metoda.

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

Poniżej przedstawiono wartości reprezentujące różne typy plików distanceTransform operacje i ich odpowiednie wyniki.

Działanie i opis Wynik
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3