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 |
|