OpenCV - Transformation à distance

le distance transformL'opérateur prend généralement des images binaires comme entrées. Dans cette opération, les intensités de niveau de gris des points à l'intérieur des régions de premier plan sont modifiées pour éloigner leurs distances respectives de la valeur 0 la plus proche (limite).

Vous pouvez appliquer la transformation de distance dans OpenCV en utilisant la méthode distanceTransform(). Voici la syntaxe de cette méthode.

distanceTransform(src, dst, distanceType, maskSize)

Cette méthode accepte les paramètres suivants -

  • src - Un objet de la classe Mat représentant l'image source (entrée).

  • dst - Un objet de la classe Mat représentant l'image de destination (sortie).

  • distanceType - Une variable de type entier représentant le type de transformation de distance à appliquer.

  • maskSize - Une variable de type entier représentant la taille du masque à utiliser.

Exemple

Le programme suivant montre comment effectuer une opération de transformation de distance sur une image donnée.

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

Supposons que ce qui suit est l'image d'entrée input.jpg spécifié dans le programme ci-dessus.

Production

Lors de l'exécution du programme, vous obtiendrez la sortie suivante -

Image Processed

Si vous ouvrez le chemin spécifié, vous pouvez observer l'image de sortie comme suit -

Types d'opérations de transformation de distance

En plus du type d'opération à distance DIST_Cdémontré dans l'exemple précédent, OpenCV prend en charge divers autres types d'opérations de transformation de distance. Tous ces types sont représentés par des champs statiques prédéfinis (valeurs fixes) de la classe Imgproc.

Vous pouvez choisir le type d'opération de transformation de distance dont vous avez besoin, en passant sa valeur prédéfinie respective au paramètre nommé distanceType du distanceTransform() méthode.

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

Voici les valeurs représentant différents types de distanceTransform opérations et leurs résultats respectifs.

Fonctionnement et description Production
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3