OpenCV - Trasformazione della distanza
Il distance transformL'operatore generalmente prende le immagini binarie come input. In questa operazione, le intensità del livello di grigio dei punti all'interno delle regioni in primo piano vengono modificate per distanziare le rispettive distanze dal valore 0 più vicino (confine).
È possibile applicare la trasformazione della distanza in OpenCV utilizzando il metodo distanceTransform(). Di seguito è riportata la sintassi di questo metodo.
distanceTransform(src, dst, distanceType, maskSize)
Questo metodo accetta i seguenti parametri:
src - Un oggetto della classe Mat che rappresenta l'immagine sorgente (ingresso).
dst - Un oggetto della classe Mat che rappresenta l'immagine di destinazione (output).
distanceType - Una variabile di tipo intero che rappresenta il tipo di trasformazione della distanza da applicare.
maskSize - Una variabile di tipo intero che rappresenta la dimensione della maschera da utilizzare.
Esempio
Il seguente programma mostra come eseguire un'operazione di trasformazione della distanza 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 DistanceTransform {
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/chap19/input.jpg";
Mat src = Imgcodecs.imread(file,0);
// Creating an empty matrix to store the results
Mat dst = new Mat();
Mat binary = new Mat();
// Converting the grayscale image to binary image
Imgproc.threshold(src, binary, 100, 255, Imgproc.THRESH_BINARY);
// Applying distance transform
Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap19/distnceTransform.jpg", dst);
System.out.println("Image Processed");
}
}
Supponiamo che la seguente sia l'immagine in ingresso 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:
Tipi di operazioni di trasformazione della distanza
Oltre al tipo di operazione a distanza DIST_Cdimostrato nell'esempio precedente, OpenCV soddisfa vari altri tipi di operazioni di trasformazione della distanza. Tutti questi tipi sono rappresentati da campi statici predefiniti (valori fissi) della classe Imgproc.
È possibile scegliere il tipo di operazione di trasformazione della distanza necessaria, passando il rispettivo valore predefinito al parametro denominato distanceType del distanceTransform() metodo.
// Applying distance transform
Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);
Di seguito sono riportati i valori che rappresentano vari tipi di distanceTransform operazioni e le rispettive uscite.
Funzionamento e descrizione | Produzione |
---|---|
DIST_C | |
DIST_L1 | |
DIST_L2 | |
DIST_LABEL_PIXEL | |
DIST_MASK_3 |