Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Objekte zählen und finden

Nach dieser Lektion: Ich kann die zusammenhängenden Bereiche einer Maske zählen und ihre Flächen angeben.

Lektion, 70 Min.3 BefehleComputer-Vision-Lab: Pixel, Schwellenwerte und Objekte zählen in JupyterLab

Wie ein Programm Objekte in einem Bild zählt

Ein Programm zählt Objekte in einem Bild, indem es in einer Maske zusammenhängende Bereiche sucht. Jede Gruppe von Pixeln, die sich berührt, ist ein Objekt. Das Verfahren heißt Labeling, deutsch Beschriften.

So zählt man Münzen, Zellen unter dem Mikroskop oder Pakete auf einem Band. Dazu kommt das Suchen eines Bildstücks im Bild.

Am Ende dieser Lektion

Notiz

Ich kann die zusammenhängenden Bereiche einer Maske zählen und ihre Flächen angeben.

Schlüsselwörter

BegriffWas er bedeutet
Bereicheine Gruppe von Pixeln, die sich berühren
Nachbarschaftwelche Pixel als berührend gelten, 4 oder 8
Labelingjedem Bereich eine eigene Nummer geben
Flächedie Zahl der Pixel eines Bereichs
Template Matchingein kleines Bild in einem großen suchen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Vier oder acht Nachbarn: das ändert die Zahl

Zwei Pixel berühren sich, wenn sie Nachbarn sind. Bei 4 Nachbarn zählen nur oben, unten, links und rechts. Bei 8 Nachbarn zählen auch die vier Ecken.

Das gilt für jede Zählung. Zwei Pixel, die sich nur an einer Ecke berühren, sind bei 8 Nachbarn ein Bereich und bei 4 Nachbarn zwei Bereiche.

Beispiel: ein Gitter, 4 oder 8 Nachbarn

ZeileSpalte 0Spalte 1Spalte 2Spalte 3
01100
10010
20011
Bereichemit 4 Nachbarn: 2, Flächen 2 und 3mit 8 Nachbarn: 1, Fläche 5

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

scikit-image nutzt standardmäßig 8 Nachbarn

Die Bibliothek scikit-image beschriftet mit measure.label. Ohne weitere Angabe nutzt sie 8 Nachbarn. Mit connectivity=1 nutzt sie 4.

Der Befehl beschriftet ein Gitter mit zwei Einsen, die sich nur an einer Ecke berühren, und zählt die Bereiche mit beiden Einstellungen. Er gibt 1 2 aus: erst 8, dann 4 Nachbarn.

Dieselbe Ecke mit 8 und mit 4 Nachbarn

Befehl
docker exec jupyter python3 -c "import numpy as np; from skimage import measure; g = np.array([[1, 0], [0, 1]]); print(measure.label(g).max(), measure.label(g, connectivity=1).max())"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Bereiche mit einem Stapel zählen

Code: python
# Ein kleines Gitter: 1 ist Objekt, 0 ist Hintergrund.
gitter = [
    [1, 1, 0, 0],
    [0, 0, 1, 0],
    [0, 0, 1, 1],
]
# Zähle die Einsen, die Stück für Stück zusammenhängen (4 Nachbarn).
besucht = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
anzahl = 0
for z in range(3):
    for s in range(4):
        if gitter[z][s] == 1 and besucht[z][s] == 0:
            anzahl = anzahl + 1
            stapel = [[z, s]]
            besucht[z][s] = 1
            while len(stapel) > 0:
                stelle = stapel.pop()
                for nachbar in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
                    zz = stelle[0] + nachbar[0]
                    ss = stelle[1] + nachbar[1]
                    if 0 <= zz < 3 and 0 <= ss < 4:
                        if gitter[zz][ss] == 1 and besucht[zz][ss] == 0:
                            besucht[zz][ss] = 1
                            stapel.append([zz, ss])
print("Bereiche:", anzahl)
# Die Einsen bei Zeile 0, Spalte 1 und Zeile 1, Spalte 2 berühren sich nur an der Ecke.

Das Skript count.py zählt die Münzen

Das Skript gibt englische Wörter aus: objects found heißt gefundene Objekte, areas in pixels Flächen in Pixeln. Es schneidet das Münzbild mit der Schwelle 100 zu einer Maske und beschriftet sie.

Es findet 9 Objekte, genau die neun Münzen. Die Flächen kommen in drei Größen: dreimal 657, dreimal 1313 und dreimal 2553 Pixel. Die Münzen berühren sich nicht, daher ändert sich die Zahl bei 4 Nachbarn nicht.

Die Münzen zählen und messen

Befehl
docker exec jupyter python3 steps/count.py

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 Bildstück im Bild suchen

Template Matching schiebt ein kleines Bild, die Vorlage, über das große und rechnet an jeder Stelle eine Bewertung. Eine Bewertung von 1 heißt: genau gleich.

Das Skript find.py schneidet ein Stück von 40 mal 40 Pixeln bei 30, 30 aus dem Münzbild und sucht es wieder. Es findet es bei 30 30 mit der Bewertung 1,0. Das ist kein Wunder, denn das Stück stammt aus demselben Bild. Bei einem anderen Foto läge die Bewertung unter 1.

Das ausgeschnittene Stück wiederfinden

Befehl
docker exec jupyter python3 steps/find.py

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, die Zahl der Objekte sei die Zahl der weißen Pixel. Weiße Pixel messen die Fläche, Objekte sind die Gruppen. Das Münzbild hat 13569 weiße Pixel, aber nur 9 Objekte.

Über dieses Lab und seinen Quellcode: Computer-Vision-Lab: Pixel, Schwellenwerte und Objekte zählen in JupyterLab

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.