OpenCV - Dilatazione
Erosione e dilatazione sono i due tipi di operazioni morfologiche. Come suggerisce il nome, le operazioni morfologiche sono l'insieme di operazioni che elaborano le immagini in base alle loro forme.
Sulla base dell'immagine di input fornita viene sviluppato un "elemento strutturale". Questo potrebbe essere fatto in una qualsiasi delle due procedure. Questi hanno lo scopo di rimuovere il rumore e sistemare le imperfezioni, per rendere l'immagine chiara.
Dilatazione
Questa procedura segue la convoluzione con un nucleo di una forma specifica come un quadrato o un cerchio. Questo kernel ha un punto di ancoraggio, che ne indica il centro.
Questo kernel è sovrapposto all'immagine per calcolare il valore massimo dei pixel. Dopo il calcolo, l'immagine viene sostituita con l'ancora al centro. Con questa procedura, le aree delle regioni luminose crescono di dimensioni e quindi la dimensione dell'immagine aumenta.
Ad esempio, la dimensione di un oggetto in tonalità bianca o tonalità chiara aumenta, mentre la dimensione di un oggetto in tonalità nera o tonalità scura diminuisce.
È possibile eseguire l'operazione di dilatazione su un'immagine utilizzando il dilate() metodo del imgprocclasse. Di seguito è riportata la sintassi di questo metodo.
dilate(src, dst, kernel)
Questo metodo accetta i seguenti parametri:
src - A Mat oggetto che rappresenta la sorgente (immagine in ingresso) per questa operazione.
dst - A Mat oggetto che rappresenta la destinazione (immagine di output) per questa operazione.
kernel - A Mat oggetto che rappresenta il kernel.
Esempio
È possibile preparare la matrice del kernel utilizzando il getStructuringElement()metodo. Questo metodo accetta un numero intero che rappresenta il filemorph_rect tipo e un oggetto del tipo Size.
Imgproc.getStructuringElement(int shape, Size ksize);
Il seguente programma mostra come eseguire l'operazione di dilatazione su una data 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 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");
}
}
Ingresso
Supponiamo che la seguente sia l'immagine in ingresso sample.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: