OpenCV - Pyramides d'images

Pyramide est une opération sur une image où,

  • Une image d'entrée est d'abord lissée à l'aide d'un filtre de lissage particulier (ex: gaussien, laplacien), puis l'image lissée est sous-échantillonnée.

  • Ce processus est répété plusieurs fois.

Pendant l'opération pyramidale, la fluidité de l'image est augmentée et la résolution (taille) est diminuée.

Pyramide vers le haut

Dans Pyramid Up, l'image est initialement suréchantillonnée, puis floue. Vous pouvez effectuer une opération Pyramid Up sur une image à l'aide depyrUP() méthode de la imgprocclasse. Voici la syntaxe de cette méthode -

pyrUp(src, dst, dstsize, borderType)

Cette méthode accepte les paramètres suivants -

  • src - Un objet de la classe Mat représentant l'image source (entrée).

  • mat - Un objet de la classe Mat représentant l'image de destination (sortie).

  • size - Un objet de la classe Size représentant la taille à laquelle l'image doit être augmentée ou diminuée.

  • borderType - Une variable de type entier représentant le type de bordure à utiliser.

Exemple

Le programme suivant montre comment effectuer l'opération Pyramid Up sur une image.

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 PyramidUp {
   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/chap13/pyramid_input.jpg";
      Mat src = Imgcodecs.imread(file);

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

      // Applying pyrUp on the Image
      Imgproc.pyrUp(src, dst, new Size(src.cols()*2,  src.rows()*2), Core.BORDER_DEFAULT);

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

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

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

Pyramide vers le bas

Dans Pyramid Down, l'image est d'abord floue, puis sous-échantillonnée. Vous pouvez effectuer une opération Pyramid Down sur une image à l'aide depyrDown() méthode de la imgprocclasse. Voici la syntaxe de cette méthode -

pyrDown(src, dst, dstsize, borderType)

Cette méthode accepte les paramètres suivants -

  • src - Un objet de la classe Mat représentant l'image source (entrée).

  • mat - Un objet de la classe Mat représentant l'image de destination (sortie).

  • size - Un objet de la classe Size représentant la taille à laquelle l'image doit être augmentée ou diminuée.

  • borderType - Une variable de type entier représentant le type de bordure à utiliser.

Exemple

Le programme suivant montre comment effectuer l'opération Pyramid Down sur une image.

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 PyramidDown {
   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/chap13/pyramid_input.jpg";
      Mat src = Imgcodecs.imread(file);

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

      // Applying pyrDown on the Image
      Imgproc.pyrDown(src, dst, new Size(src.cols()/2,  src.rows()/2),
         Core.BORDER_DEFAULT);

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

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

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

Filtrage par décalage moyen

Dans l'opération pyramidale à décalage moyen, une étape initiale de segmentation par décalage moyen d'une image est effectuée.

Vous pouvez effectuer une opération de filtrage pyramidal Mean Shift sur une image à l'aide de pyrDown() méthode de la imgprocclasse. Voici la syntaxe de cette méthode.

pyrMeanShiftFiltering(src, dst, sp, sr)

Cette méthode accepte les paramètres suivants -

  • src - Un objet de la classe Mat représentant l'image source (entrée).

  • mat - Un objet de la classe Mat représentant l'image de destination (sortie).

  • sp - Une variable de type double représentant le rayon de la fenêtre spatiale.

  • sr - Une variable de type double représentant le rayon de la fenêtre de couleur.

Exemple

Le programme suivant montre comment effectuer une opération de filtrage par décalage moyen sur une image donnée.

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

public class PyramidMeanShift {
   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/chap13/pyramid_input.jpg";
      Mat src = Imgcodecs.imread(file);

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

      // Applying meanShifting on the Image
      Imgproc.pyrMeanShiftFiltering(src, dst, 200, 300);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap13/meanShift_output.jpg", dst);
      
      System.out.println("Image Processed");
   } 
}

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