Adaptiver Schwellenwert mit OpenCV

Sahil Bhosale 15 Februar 2024
  1. Adaptives Thresholding mit OpenCV
  2. Abschluss
Adaptiver Schwellenwert mit OpenCV

OpenCV hat zwei Arten von Schwellwertbildung, einfache Schwellwertbildung und adaptive Schwellwertbildung. In diesem Artikel werden wir sehen, was adaptive Schwellenwerte im Detail sind und wie sie mit der OpenCV-Bibliothek implementiert werden.

Adaptives Thresholding mit OpenCV

In OpenCV ist die adaptive Schwellenwertbildung der Prozess, bei dem für jede Bildregion ein anderer Schwellenwert berechnet wird. Im Gegensatz zur einfachen Schwellenwertbildung wird für alle anderen Pixel im Bild derselbe Schwellenwert verwendet.

Hat ein Pixel einen Wert kleiner als der Schwellwert, so wird 0 gesetzt; wenn das Pixel einen Wert hat, der größer ist als der Schwellwert, dann wird 255 eingestellt.

Der adaptive Schwellenwert verwendet zwei Methoden: adaptiver Schwellenwertmittelwert und Gaussian. Unten ist die Syntax für die adaptive Schwellenwertbildung.

Syntax:

cv2.adaptiveThreshold(
    inputImage,
    maximumValue,
    thresholdMethod,
    typeOfthreshold,
    sizeOfBlock,
    constantValue,
)

Nachfolgend sind die Parameter aufgeführt, die an die Methode adaptiveThreshold() übergeben werden.

  1. inputImage: Die Quelle ist das Eingangsbild.
  2. maximumValue: Maximalwert, der einem Pixel zugeordnet werden kann. Dies ist nichts anderes als der maximale Schwellenwert. Es kann höchstens 255 dauern.
  3. adaptiveMethod: Adaptive Methode legt fest, wie der Schwellwert berechnet werden soll. Es gibt zwei adaptive Verfahren zur adaptiven Schwellenwertbildung.
  4. cv2.ADAPTIVE_THRESH_MEAN_C: Nimmt den Mittelwert der Nachbarschaftsbereichswerte subtrahiert mit dem konstanten Wert, d. h. den Mittelwert der Blockgröße multipliziert mit der Blockgröße Nachbarschaft eines Punktes minus konstanten Wert.
  5. cv2.ADAPTIVE_THRESH_GAUSSIAN_C: Nimmt die Gaußsche gewichtete Summe der Nachbarschaftswerte subtrahiert mit dem konstanten Wert, d. h. es nimmt die gewichtete Summe der Blockgröße multipliziert mit der Blockgröße der Nachbarschaft eines Punktes minus konstanten Wert.
  6. typeOfthreshold: Die Art der anzuwendenden Schwelle.
  7. sizeOfBlock ist die Grösse des Nachbarbereichs.
  8. constantValue: Ein konstanter Wert, der von der durchschnittlichen oder gewichteten Summe der nahegelegenen Pixel abgezogen wird.

Nachdem wir nun die Syntax und die Parameter der Methode adaptiveThreshold() durchgegangen sind, wollen wir nun ein Beispiel nehmen und sehen, wie adaptives Thresholding in der Praxis funktioniert.

Stellen Sie zunächst sicher, dass die OpenCV-Bibliothek auf Ihrem System installiert ist. Danach müssen Sie die OpenCV-Bibliothek importieren, wie im folgenden Beispiel gezeigt.

Das adaptive Schwellwertverfahren erwartet das Quellbild als Graustufenbild. Beim Lesen des Bildes mit der Methode imread() müssen wir also 0 als zweites Argument übergeben, um ein Graustufenbild zu erhalten, und dieses Bild dann in der Variablen image speichern.

Code-Auszug:

import cv2

image = cv2.imread("text.jpg", 0)

mean = cv2.adaptiveThreshold(
    image, 250, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 25, 15
)

gaussian = cv2.adaptiveThreshold(
    image, 250, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 25, 15
)

cv2.imshow("Adaptive Thresholding Mean", mean)
cv2.imshow("Adaptive Thresholding Gaussian", gaussian)

cv2.waitKey(0)

Das Bild enthält Text aus einem Buch. Jetzt wenden wir beide Techniken mit adaptiven Schwellenwerten auf das obige Bild an und übergeben dieselben Parameter an diese beiden Techniken und sehen den Unterschied in den Ausgabebildern.

Zuerst übergeben wir das Bild und dann als zweiten Parameter 255 (weiß) und die adaptive Methode ADAPTIVE_THRESH_MEAN_C bzw. ADAPTIVE_THRESH_GAUSSIAN_C als dritten Parameter.

Für den Schwellenwerttyp übergeben wir THRESH_BINARY, das grundlegende Schwellenwerte für das Bild durchführt. Dann müssen Sie die Größe des Nachbarbereichs angeben; in diesem Fall haben wir als Blockgröße 25 übergeben.

Nun übergeben wir einen konstanten Wert als letzten Parameter an die Methode adaptiveThreshold() und speichern dann die Ergebnisse dieser beiden Operationen in den Variablen mean bzw. gaussian.

Am Ende können Sie diese resultierenden Bilder mit der Methode imshow() auf das Ausgabefenster drucken und Namen für die Registerkarten angeben. So sieht die Ausgabe von Mittelwert und Gauß aus.

Ausgang:

adaptives Threseling

Abschluss

Es gibt zwei Arten von Schwellenwerten in OpenCV: einfach und adaptiv. Bei der einfachen Schwellenwertbildung wird derselbe Schwellenwert auf alle anderen Pixel im Bild angewendet.

Diese Art der Schwellenwertbildung kann für einige Bilder gut funktionieren, bei denen die Lichtverhältnisse nicht variieren. Aber in den meisten Bildern variiert die Beleuchtung ziemlich stark.

In solchen Fällen ist die Verwendung dieser Schwellenwerttechnik möglicherweise kein guter Ansatz.

Daher verfügt die OpenCV-Bibliothek auch über eine andere Schwellwerttechnik, die als adaptive Schwellwertbildung bezeichnet wird. Bei der adaptiven Schwellenwertbildung wird für jede Region ein anderer Schwellenwert berechnet, wodurch bessere Ergebnisse erzielt werden.

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn