OpenCV - Dilatazione

Erosione e dilatazione sono i due tipi di operazioni morfologiche. Come suggerisce il nome, le operazioni morfologiche sono l'insieme di operazioni che elaborano le immagini in base alle loro forme.

Sulla base dell'immagine di input fornita viene sviluppato un "elemento strutturale". Questo potrebbe essere fatto in una qualsiasi delle due procedure. Questi hanno lo scopo di rimuovere il rumore e sistemare le imperfezioni, per rendere l'immagine chiara.

Dilatazione

Questa procedura segue la convoluzione con un nucleo di una forma specifica come un quadrato o un cerchio. Questo kernel ha un punto di ancoraggio, che ne indica il centro.

Questo kernel è sovrapposto all'immagine per calcolare il valore massimo dei pixel. Dopo il calcolo, l'immagine viene sostituita con l'ancora al centro. Con questa procedura, le aree delle regioni luminose crescono di dimensioni e quindi la dimensione dell'immagine aumenta.

Ad esempio, la dimensione di un oggetto in tonalità bianca o tonalità chiara aumenta, mentre la dimensione di un oggetto in tonalità nera o tonalità scura diminuisce.

È possibile eseguire l'operazione di dilatazione su un'immagine utilizzando il dilate() metodo del imgprocclasse. Di seguito è riportata la sintassi di questo metodo.

dilate(src, dst, kernel)

Questo metodo accetta i seguenti parametri:

  • src - A Mat oggetto che rappresenta la sorgente (immagine in ingresso) per questa operazione.

  • dst - A Mat oggetto che rappresenta la destinazione (immagine di output) per questa operazione.

  • kernel - A Mat oggetto che rappresenta il kernel.

Esempio

È possibile preparare la matrice del kernel utilizzando il getStructuringElement()metodo. Questo metodo accetta un numero intero che rappresenta il filemorph_rect tipo e un oggetto del tipo Size.

Imgproc.getStructuringElement(int shape, Size ksize);

Il seguente programma mostra come eseguire l'operazione di dilatazione su una data immagine.

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

Ingresso

Supponiamo che la seguente sia l'immagine in ingresso sample.jpg specificato nel programma di cui sopra.

Produzione

All'esecuzione del programma, otterrai il seguente output:

Image Processed

Se apri il percorso specificato, puoi osservare l'immagine di output come segue: