OpenCV - Adaptive Threshold
Im simple thresholdingDer Schwellenwert ist global, dh er ist für alle Pixel im Bild gleich. Adaptive thresholding ist die Methode, bei der der Schwellenwert für kleinere Regionen berechnet wird und daher unterschiedliche Schwellenwerte für verschiedene Regionen vorliegen.
In OpenCV können Sie mit der Methode eine adaptive Schwellenwertoperation für ein Bild ausführen adaptiveThreshold() des ImgprocKlasse. Es folgt die Syntax dieser Methode.
adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)
Diese Methode akzeptiert die folgenden Parameter:
src - Ein Objekt der Klasse Mat Darstellen des Quellbildes (Eingabebildes).
dst - Ein Objekt der Klasse Mat Darstellen des Zielbildes (Ausgabebildes).
maxValue - Eine Variable vom Doppeltyp, die den Wert darstellt, der angegeben werden soll, wenn der Pixelwert größer als der Schwellenwert ist.
adaptiveMethod- Eine Ganzzahlvariable des Typs, der die zu verwendende adaptive Methode darstellt. Dies ist einer der beiden folgenden Werte
ADAPTIVE_THRESH_MEAN_C - Der Schwellenwert ist der Mittelwert der Nachbarschaftsfläche.
ADAPTIVE_THRESH_GAUSSIAN_C - Der Schwellenwert ist die gewichtete Summe der Nachbarschaftswerte, wobei Gewichte ein Gaußsches Fenster sind.
thresholdType - Eine Variable vom Typ Integer, die den Typ des zu verwendenden Schwellenwerts darstellt.
blockSize - Eine Variable vom Typ Integer, die die Größe der Pixelumgebung darstellt, die zur Berechnung des Schwellenwerts verwendet wird.
C - Eine Variable vom Doppeltyp, die die in beiden Methoden verwendete Konstante darstellt (vom Mittelwert oder gewichteten Mittelwert abgezogen).
Beispiel
Das folgende Programm zeigt, wie eine adaptive Schwellenwertoperation für ein Image in OpenCV ausgeführt wird. Hier wählen wir die adaptive Typschwellebinary und ADAPTIVE_THRESH_MEAN_C für Schwellenwertmethode.
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class AdaptiveThresh {
public static void main(String args[]) throws Exception {
// 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/chap14/thresh_input.jpg";
// Reading the image
Mat src = Imgcodecs.imread(file,0);
// Creating an empty matrix to store the result
Mat dst = new Mat();
Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
Imgproc.THRESH_BINARY, 11, 12);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap14/Adaptivemean_thresh_binary.jpg", dst);
System.out.println("Image Processed");
}
}
Angenommen, das Folgende ist das Eingabebild thresh_input.jpg im obigen Programm angegeben.
Ausgabe
Beim Ausführen des Programms erhalten Sie folgende Ausgabe:
Image Processed
Wenn Sie den angegebenen Pfad öffnen, können Sie das Ausgabebild wie folgt beobachten:
Andere Arten der adaptiven Schwellenwertbildung
Zusätzlich zu ADAPTIVE_THRESH_MEAN_C als adaptive Methode und THRESH_BINARY Als Schwellenwerttyp, wie im vorherigen Beispiel gezeigt, können wir weitere Kombinationen dieser beiden Werte auswählen.
Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 11, 12);
Es folgen die Werte, die verschiedene Wertekombinationen für die Parameter darstellen adaptiveMethod und thresholdType und ihre jeweiligen Ausgänge.
adaptiveMethod / Schwellwerttyp | ADAPTIVE_THRESH_MEAN_C | ADAPTIVE_THRESH_GAUSSIAN_C: |
---|---|---|
THRESH_BINARY |
|
|
THRESH_BINARY_INV |
|
|