OpenCV - Transformación de distancia

los distance transformEl operador generalmente toma imágenes binarias como entradas. En esta operación, las intensidades del nivel de gris de los puntos dentro de las regiones de primer plano se cambian para distanciar sus respectivas distancias del valor 0 más cercano (límite).

Puede aplicar la transformación de distancia en OpenCV usando el método distanceTransform(). A continuación se muestra la sintaxis de este método.

distanceTransform(src, dst, distanceType, maskSize)

Este método acepta los siguientes parámetros:

  • src - Un objeto de la clase Mat que representa la imagen de origen (entrada).

  • dst - Un objeto de la clase Mat que representa la imagen de destino (salida).

  • distanceType - Una variable de tipo entero que representa el tipo de transformación de distancia que se aplicará.

  • maskSize - Una variable de tipo entero que representa el tamaño de la máscara que se utilizará.

Ejemplo

El siguiente programa demuestra cómo realizar la operación de transformación de distancia en una imagen dada.

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

Suponga que la siguiente es la imagen de entrada input.jpg especificado en el programa anterior.

Salida

Al ejecutar el programa, obtendrá el siguiente resultado:

Image Processed

Si abre la ruta especificada, puede observar la imagen de salida de la siguiente manera:

Tipos de operaciones de transformación de distancia

Además del tipo de operación a distancia DIST_CComo se demostró en el ejemplo anterior, OpenCV ofrece otros tipos de operaciones de transformación de distancia. Todos estos tipos están representados por campos estáticos predefinidos (valores fijos) de la clase Imgproc.

Puede elegir el tipo de operación de transformación de distancia que necesita, pasando su valor predefinido respectivo al parámetro denominado distanceType del distanceTransform() método.

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

A continuación se muestran los valores que representan varios tipos de distanceTransform operaciones y sus respectivos productos.

Operación y descripción Salida
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3