Wie ein Schwellenwert Objekt und Hintergrund trennt
Ein Schwellenwert (englisch Threshold) teilt die Pixel eines Graubildes in zwei Gruppen: heller als eine gewählte Zahl und nicht heller. So trennt ein Programm ein Objekt vom Hintergrund.
Ein Histogramm zählt, wie viele Pixel zu jedem Grauwert gehören. Mit ihm finden Sie eine Zahl, die wirklich trennt, statt zu raten.
Am Ende dieser Lektion
Notiz
Ich kann mit einem Histogramm einen Schwellenwert wählen und die Pixel über ihm zählen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Schwellenwert | ein Grauwert, der die Pixel in zwei Gruppen teilt | 100 |
| Histogramm | eine Zählung der Pixel je Gruppe von Grauwerten | |
| Maske | ein Bild aus 0 und 1, das ein Objekt markiert | |
| Hintergrund | alles im Bild, was kein Objekt ist | |
| Rauschen | zufällige kleine Schwankungen der Pixel |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Histogramm zeigt, wo die Pixel liegen
Man teilt die Grauwerte 0 bis 255 in Gruppen und zählt die Pixel jeder Gruppe. Beim Münzbild nehmen wir vier gleich breite Gruppen und erhalten zwei große Häufungen.
Dunkel liegt der Hintergrund, hell liegen die Münzen. In der Mitte ist fast nichts. Genau dort passt ein Schwellenwert hin.
Beispiel: das Münzbild in vier Grauwert-Gruppen
| Grauwerte | Pixel | Was dort liegt |
|---|---|---|
| 0 bis 63 | 63231 | der Hintergrund |
| 64 bis 127 | 0 | nichts: die Lücke |
| 128 bis 191 | 13566 | die Münzen |
| 192 bis 255 | 3 | fast nichts |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Pixel über einer Schwelle zählen
# Ein kleines Graubild und ein Schwellenwert.
bild = [
[12, 40, 200, 35],
[18, 250, 60, 22],
[10, 30, 45, 15],
]
schwelle = 100
anzahl = 0
for zeile in bild:
for wert in zeile:
if wert > schwelle:
anzahl = anzahl + 1
print("Pixel über der Schwelle:", anzahl)
# Probieren Sie die Schwelle 40 und dann 30.
Drei Schwellenwerte am Münzbild probieren
Das Skript threshold.py gibt englische Wörter aus: keeps heißt behält, pixels of heißt Pixel von. Es probiert die Schwellen 30, 100 und 160 an 76800 Pixeln.
Bei 30 bleiben 58806 Pixel, fast das ganze Bild, denn der Hintergrund schwankt um 35. Bei 100 bleiben 13569, das sind die Münzen. Bei 160 bleiben 10062, die Schwelle schneidet in die Münzen. Es speichert die Maske für 100 als coins_mask.png.
Drei Schwellenwerte vergleichen
docker exec jupyter python3 steps/threshold.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine feste Schwelle scheitert bei ungleichem Licht
Das Bild scan.png ist eine Seite mit Textzeilen, links hell beleuchtet und rechts dunkler. Der Befehl gibt den Mittelwert der linken und der rechten 40 Spalten aus.
Die Ausgabe ist 191.2 155.6. Das Papier ist links also im Mittel heller. Eine Schwelle, die links Text von Papier trennt, trennt rechts womöglich nichts mehr.
Links und rechts vergleichen
docker exec jupyter python3 -c "from PIL import Image; import numpy as np; a = np.array(Image.open('images/scan.png')); print(a[:, :40].mean().round(1), a[:, -40:].mean().round(1))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, der Computer finde den richtigen Schwellenwert von allein. Sie haben 100 gewählt, weil Sie die Lücke im Histogramm gesehen haben. Prüfen Sie jede Maske mit dem Auge, bevor Sie einer Zahl trauen.