OpenCV - Dilatación

La erosión y la dilatación son los dos tipos de operaciones morfológicas. Como su nombre lo indica, las operaciones morfológicas son el conjunto de operaciones que procesan imágenes según sus formas.

Basado en la imagen de entrada dada, se desarrolla un "elemento estructural". Esto se puede realizar en cualquiera de los dos procedimientos. Estos tienen como objetivo eliminar el ruido y asentar las imperfecciones, para aclarar la imagen.

Dilatación

Este procedimiento sigue a la convolución con algún núcleo de una forma específica, como un cuadrado o un círculo. Este núcleo tiene un punto de anclaje, que denota su centro.

Este núcleo se superpone sobre la imagen para calcular el valor máximo de píxeles. Después de calcular, la imagen se reemplaza con un ancla en el centro. Con este procedimiento, las áreas de las regiones brillantes aumentan de tamaño y, por lo tanto, aumenta el tamaño de la imagen.

Por ejemplo, el tamaño de un objeto en tono blanco o tono brillante aumenta, mientras que el tamaño de un objeto en tono negro o tono oscuro disminuye.

Puede realizar la operación de dilatación en una imagen utilizando el dilate() método del imgprocclase. A continuación se muestra la sintaxis de este método.

dilate(src, dst, kernel)

Este método acepta los siguientes parámetros:

  • src - A Mat objeto que representa la fuente (imagen de entrada) para esta operación.

  • dst - A Mat objeto que representa el destino (imagen de salida) para esta operación.

  • kernel - A Mat objeto que representa el kernel.

Ejemplo

Puede preparar la matriz del kernel utilizando el getStructuringElement()método. Este método acepta un número entero que representa elmorph_rect tipo y un objeto del tipo Size.

Imgproc.getStructuringElement(int shape, Size ksize);

El siguiente programa demuestra cómo realizar la operación de dilatación en una imagen determinada.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class DilateTest {
   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 ="C:/EXAMPLES/OpenCV/sample.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      // Preparing the kernel matrix object 
      Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, 
         new  Size((2*2) + 1, (2*2)+1));

      // Applying dilate on the Image
      Imgproc.dilate(src, dst, kernel);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap10/Dilation.jpg", dst);

      System.out.println("Image Processed");
   } 
}

Entrada

Suponga que la siguiente es la imagen de entrada sample.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: