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: