OpenCV - Piramidi di immagini

Pyramid è un'operazione su un'immagine in cui,

  • Un'immagine in ingresso viene inizialmente levigata utilizzando un particolare filtro di levigatura (es: gaussiano, laplaciano) e quindi l'immagine levigata viene sottocampionata.

  • Questo processo viene ripetuto più volte.

Durante l'operazione piramidale, la levigatezza dell'immagine viene aumentata e la risoluzione (dimensione) viene ridotta.

Pyramid Up

In Pyramid Up, l'immagine viene inizialmente sovracampionata e quindi sfocata. È possibile eseguire l'operazione Pyramid Up su un'immagine utilizzando ilpyrUP() metodo del imgprocclasse. Di seguito è riportata la sintassi di questo metodo:

pyrUp(src, dst, dstsize, borderType)

Questo metodo accetta i seguenti parametri:

  • src - Un oggetto della classe Mat che rappresenta l'immagine sorgente (ingresso).

  • mat - Un oggetto della classe Mat che rappresenta l'immagine di destinazione (output).

  • size - Un oggetto della classe Size che rappresenta la dimensione alla quale l'immagine deve essere aumentata o diminuita.

  • borderType - Una variabile di tipo intero che rappresenta il tipo di bordo da utilizzare.

Esempio

Il seguente programma mostra come eseguire l'operazione Pyramid Up su un'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 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");
   }
}

Supponiamo che la seguente sia l'immagine in ingresso pyramid_input.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:

Pyramid Down

In Pyramid Down, l'immagine è inizialmente sfocata e poi sottocampionata. È possibile eseguire l'operazione Pyramid Down su un'immagine utilizzando ilpyrDown() metodo del imgprocclasse. Di seguito è riportata la sintassi di questo metodo:

pyrDown(src, dst, dstsize, borderType)

Questo metodo accetta i seguenti parametri:

  • src - Un oggetto della classe Mat che rappresenta l'immagine sorgente (ingresso).

  • mat - Un oggetto della classe Mat che rappresenta l'immagine di destinazione (output).

  • size - Un oggetto della classe Size che rappresenta la dimensione alla quale l'immagine deve essere aumentata o diminuita.

  • borderType - Una variabile di tipo intero che rappresenta il tipo di bordo da utilizzare.

Esempio

Il seguente programma mostra come eseguire l'operazione Pyramid Down su un'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 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");
   } 
}

Supponiamo che la seguente sia l'immagine in ingresso pyramid_input.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:

Filtro a spostamento medio

Nell'operazione piramidale Mean Shifting, viene eseguita una fase iniziale di segmentazione dello spostamento medio di un'immagine.

È possibile eseguire l'operazione di filtraggio a spostamento medio piramidale su un'immagine utilizzando il pyrDown() metodo del imgprocclasse. Di seguito è riportata la sintassi di questo metodo.

pyrMeanShiftFiltering(src, dst, sp, sr)

Questo metodo accetta i seguenti parametri:

  • src - Un oggetto della classe Mat che rappresenta l'immagine sorgente (ingresso).

  • mat - Un oggetto della classe Mat che rappresenta l'immagine di destinazione (output).

  • sp - Una variabile del tipo double che rappresenta il raggio della finestra spaziale.

  • sr - Una variabile del tipo double che rappresenta il raggio della finestra del colore.

Esempio

Il seguente programma mostra come eseguire un'operazione di filtro a spostamento medio su una data immagine.

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

Supponiamo che la seguente sia l'immagine in ingresso pyramid_input.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: