Java DIP - Soglia di base

La soglia consente di ottenere la segmentazione dell'immagine nel modo più semplice. La segmentazione dell'immagine significa dividere l'intera immagine in una serie di pixel in modo tale che i pixel in ogni serie abbiano alcune caratteristiche comuni. La segmentazione delle immagini è molto utile per definire gli oggetti e i loro confini.

In questo capitolo vengono eseguite alcune operazioni di soglia di base sulle immagini.

Noi usiamo OpenCV funzione threshold. Può essere trovato sottoImgprocpacchetto. La sua sintassi è data di seguito:

Imgproc.threshold(source, destination, thresh , maxval , type);

I parametri sono descritti di seguito:

Sr.No. Parametro e descrizione
1

source

È l'immagine di origine.

2

destination

È l'immagine di destinazione.

3

thresh

È il valore di soglia.

4

maxval

È il valore massimo da utilizzare con i tipi di soglia THRESH_BINARY e THRESH_BINARY_INV.

5

type

I tipi possibili sono THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC e THRESH_TOZERO.

Oltre a questi metodi di soglia, ci sono altri metodi forniti dalla classe Imgproc. Sono descritti brevemente:

Sr.No. Metodo e descrizione
1

cvtColor(Mat src, Mat dst, int code, int dstCn)

Converte un'immagine da uno spazio colore a un altro.

2

dilate(Mat src, Mat dst, Mat kernel)

Dilata un'immagine utilizzando uno specifico elemento strutturante.

3

equalizeHist(Mat src, Mat dst)

Equalizza l'istogramma di un'immagine in scala di grigi.

4

filter2D(Mat src, Mat dst, int ddepth, Mat kernel, Point anchor, double delta)

Convolge un'immagine con il kernel.

5

GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX)

Sfoca un'immagine usando un filtro gaussiano.

6

integral(Mat src, Mat sum)

Calcola l'integrale di un'immagine.

Esempio

L'esempio seguente mostra l'uso della classe Imgproc per eseguire operazioni di soglia per un'immagine:

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class main {
   public static void main( String[] args ) {
   
      try{

         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source = Highgui.imread("digital_image_processing.jpg",  Highgui.CV_LOAD_IMAGE_COLOR);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());

         destination = source;
         Imgproc.threshold(source,destination,127,255,Imgproc.THRESH_TOZERO);
         Highgui.imwrite("ThreshZero.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error: " + e.getMessage());
      }
   }
}

Produzione

Quando esegui il codice dato, viene visualizzato il seguente output:

Immagine originale

Sull'immagine originale sopra, vengono eseguite alcune operazioni di soglia, mostrate nell'output sotto:

Thresh Binary

Thresh Binary Invert

Thresh Zero