OpenCV Bildschwellenwertverfahren

In der Bildverarbeitung ist die Schwellenwertverarbeitung eine gängige Technik, um ein Bild in ein Binärbild (d. h. ein Schwarz-Weiß-Bild) umzuwandeln. Durch Festlegen eines Schwellenwerts können die Pixel in einem Bild in zwei Kategorien eingeteilt werden: Pixel oberhalb des Schwellenwerts und Pixel unterhalb des Schwellenwerts.

OpenCV bietet mehrere Schwellenwertverfahren. In diesem Artikel werden drei gängige Schwellenwertverfahren ausführlich vorgestellt: einfaches Schwellenwertverfahren, adaptives Schwellenwertverfahren und Otsu-Binarisierung.

1. Einfache Schwellenwertbildung (cv2.threshold())

Die einfache Schwellenwertbildung ist das grundlegendste Schwellenwertverfahren. Sie teilt die Pixel eines Bildes durch Festlegen eines festen Schwellenwerts in zwei Kategorien ein.

OpenCV bietetcv2.threshold()Funktion zur Implementierung dieser Funktionalität.

Funktionsprototyp

retval, dst = cv2.threshold(src, thresh, maxval, type)

Parameterbeschreibung

  • src: Eingabebild, normalerweise ein Graustufenbild.
  • thresh: Der einzustellende Schwellenwert.
  • maxval: Der neue Wert, der zugewiesen wird, wenn der Pixelwert den Schwellenwert überschreitet (oder je nach Typ unterschreitet).
  • type: Der Schwellenwerttyp. Übliche Typen sind:
    • cv2.THRESH_BINARY: Wenn der Pixelwert größer als der Schwellenwert ist, zuweisenmaxval, andernfalls zuweisen0。
    • cv2.THRESH_BINARY_INV: Mitcv2.THRESH_BINARYhingegen: Wenn der Pixelwert größer als der Schwellenwert ist, zuweisen0, andernfalls zuweisenmaxval。
    • cv2.THRESH_TRUNC: Wenn der Pixelwert größer als der Schwellenwert ist, den Schwellenwert zuweisen; andernfalls unverändert lassen.
    • cv2.THRESH_TOZERO: Wenn der Pixelwert größer als der Schwellenwert ist, unverändert lassen; andernfalls zuweisen.0。
    • cv2.THRESH_TOZERO_INV: Mitcv2.THRESH_TOZEROhingegen: Wenn der Pixelwert größer als der Schwellenwert ist, zuweisen0, andernfalls unverändert lassen.

Rückgabewert

  • retval: Der tatsächlich verwendete Schwellenwert (kann in manchen Fällen vom festgelegten Schwellenwert abweichen).
  • dst: Das verarbeitete Bild.

Beispiel

Beispiel

import cv2
import numpy as np

# Bild einlesen
img = cv2.imread('image.jpg', 0)

# Einfache Schwellenwertsetzung
ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)

# Ergebnis anzeigen
cv2.imshow('Binary Threshold', thresh1)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. Adaptive Schwellenwertsetzung (cv2.adaptiveThreshold())

In manchen Fällen ist die Helligkeitsverteilung eines Bildes ungleichmäßig, und die Verwendung eines festen Schwellenwerts führt möglicherweise nicht zu idealen Ergebnissen. Die adaptive Schwellenwertsetzung kommt mit dieser Situation besser zurecht, indem sie unterschiedliche Schwellenwerte für verschiedene Regionen des Bildes berechnet.

Funktionsprototyp

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

Parameterbeschreibung

  • src: Eingabebild, normalerweise ein Graustufenbild.
  • maxValue: Der neue Wert, der zugewiesen wird, wenn der Pixelwert den Schwellenwert überschreitet (oder je nach Typ unterschreitet).
  • adaptiveMethod: Methode zur Berechnung des adaptiven Schwellenwerts. Häufige Typen sind:
    • cv2.ADAPTIVE_THRESH_MEAN_C: Der Schwellenwert ist der Mittelwert der Nachbarschaft minus der KonstanteC。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C: Der Schwellenwert ist der gewichtete Mittelwert der Nachbarschaft minus der KonstanteC, die Gewichte werden durch eine Gauß-Funktion bestimmt.
  • thresholdType: Schwellenwerttyp, normalerweisecv2.THRESH_BINARYodercv2.THRESH_BINARY_INV。
  • blockSize: Die Nachbarschaftsgröße, die bei der Berechnung des Schwellenwerts verwendet wird; sie muss ungerade sein.
  • C: Die Konstante, die vom Mittelwert oder gewichteten Mittelwert subtrahiert wird.

Rückgabewert

  • dst: Das verarbeitete Bild.

Beispiel

Beispiel

import cv2
import numpy as np

# Bild einlesen
img = cv2.imread('image.jpg', 0)

# Adaptives Schwellenwertverfahren
thresh2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

# Ergebnis anzeigen
cv2.imshow('Adaptive Threshold', thresh2)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. Otsu-Binarisierung (cv2.threshold() with cv2.THRESH_OTSU)

Die Otsu-Binarisierung ist ein Verfahren, das den Schwellenwert automatisch bestimmt. Sie findet den optimalen globalen Schwellenwert durch Maximierung der Zwischenklassenvarianz und eignet sich für bimodale Bilder (d. h. Bilder, deren Histogramm zwei deutlich ausgeprägte Spitzen aufweist).

Funktionsprototyp

retval, dst = cv2.threshold(src, thresh, maxval, type)

Parameterbeschreibung

  • src: Eingabebild, normalerweise ein Graustufenbild.
  • thresh: Da die Otsu-Methode den Schwellenwert automatisch bestimmt, wird dieser Parameter üblicherweise auf0。
  • maxval: Der neue Wert, der zugewiesen wird, wenn der Pixelwert den Schwellenwert überschreitet (oder je nach Typ unterschreitet).
  • type: Schwellenwerttyp, normalerweisecv2.THRESH_BINARYodercv2.THRESH_BINARY_INV, und fügen Sie hinzucv2.THRESH_OTSU。

Rückgabewert

  • retval: Der automatisch bestimmte Schwellenwert.
  • dst: Das verarbeitete Bild.

Beispiel

Beispiel

import cv2
import numpy as np

# Bild einlesen
img = cv2.imread('image.jpg', 0)

# Otsu-Binarisierung
ret, thresh3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# Ergebnis anzeigen
cv2.imshow('Otsu\'-Schwellenwert', thresh3)
cv2.waitKey(0)
cv2.destroyAllWindows()
Andere Erweiterungen