OpenCV - Dilatation

L'érosion et la dilatation sont les deux types d'opérations morphologiques. Comme son nom l'indique, les opérations morphologiques sont l'ensemble des opérations qui traitent les images en fonction de leurs formes.

Sur la base de l'image d'entrée donnée, un "élément structurel" est développé. Cela peut être fait dans l'une des deux procédures. Celles-ci visent à éliminer le bruit et à corriger les imperfections, pour rendre l'image claire.

Dilatation

Cette procédure suit la convolution avec un noyau d'une forme spécifique telle qu'un carré ou un cercle. Ce noyau a un point d'ancrage, qui désigne son centre.

Ce noyau est superposé sur l'image pour calculer la valeur maximale des pixels. Après le calcul, l'image est remplacée par l'ancre au centre. Avec cette procédure, la taille des zones des régions lumineuses augmente et donc la taille de l'image augmente.

Par exemple, la taille d'un objet en teinte blanche ou en teinte claire augmente, tandis que la taille d'un objet en teinte noire ou en teinte foncée diminue.

Vous pouvez effectuer l'opération de dilatation sur une image en utilisant le dilate() méthode de la imgprocclasse. Voici la syntaxe de cette méthode.

dilate(src, dst, kernel)

Cette méthode accepte les paramètres suivants -

  • src - Un Mat objet représentant la source (image d'entrée) de cette opération.

  • dst - Un Mat objet représentant la destination (image de sortie) de cette opération.

  • kernel - Un Mat objet représentant le noyau.

Exemple

Vous pouvez préparer la matrice du noyau en utilisant le getStructuringElement()méthode. Cette méthode accepte un entier représentant lemorph_rect type et un objet du type Size.

Imgproc.getStructuringElement(int shape, Size ksize);

Le programme suivant montre comment effectuer l'opération de dilatation sur une image donnée.

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

Contribution

Supposons que ce qui suit est l'image d'entrée sample.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 -