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

Kanten in Bildern finden

Nach dieser Lektion: Ich kann aus den Differenzen der Nachbarpixel eine Kantenkarte eines Bildes berechnen.

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

Wie ein Programm Kanten in einem Bild findet

Eine Kante ist eine Stelle im Bild, an der sich die Helligkeit stark ändert, zum Beispiel am Rand eines Objekts. Ein Programm findet sie, indem es Nachbarpixel voneinander abzieht.

Kanten zeigen Umrisse. Damit lassen sich Fahrbahnlinien, Formen und Ränder von Münzen vermessen, ohne ein Objekt zu verstehen.

Am Ende dieser Lektion

Notiz

Ich kann aus den Differenzen der Nachbarpixel eine Kantenkarte eines Bildes berechnen.

Schlüsselwörter

BegriffWas er bedeutet
Kanteeine Stelle, an der sich die Helligkeit stark ändert
Gradientder Unterschied zwischen zwei Nachbarpixeln
Kantenstärkewie stark sich die Helligkeit an einer Stelle ändert
Kantenkarteein Bild aus 0 und 1, das die Kantenpixel markiert
Umrissdie Linie rund um ein Objekt

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

Ein Gradient ist der Unterschied zweier Nachbarn

Der waagerechte Gradient eines Pixels ist der Wert rechts von ihm minus der Wert links von ihm. Der senkrechte ist der Wert unter ihm minus der Wert über ihm.

Die Kantenstärke addiert die Beträge beider: abs(gx) + abs(gy). Ein Betrag ist die Zahl ohne Vorzeichen. Ist die Stärke größer als eine Schwelle, ist das Pixel ein Kantenpixel.

Beispiel: eine Zeile mit einer Kante

SpalteWert linksWert rechtsGradient gx
110100
210200190
310200190
42002000

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

Den Gradienten einer Zeile rechnen

Code: python
# Eine Zeile mit einer Kante zwischen Spalte 2 und Spalte 3.
zeile = [10, 10, 10, 200, 200, 200]
for s in range(1, len(zeile) - 1):
    gx = zeile[s + 1] - zeile[s - 1]
    print("Spalte", s, "Gradient", gx)
# Ändern Sie die 200 in 20 und starten Sie erneut.

Ein glatter Verlauf hat keine Kante

Das Bild gradient.png steigt von Schwarz links bis Weiß rechts, in jeder Spalte um 1. Zwei Spalten weiter liegt der Wert um 2 höher.

Der Befehl rechnet den Wert in Spalte 12 minus den Wert in Spalte 10 und gibt 2 aus. Ein Gradient von 2 ist überall gleich klein, also ist das keine Kante.

Den Gradienten eines Verlaufs lesen

Befehl
docker exec jupyter python3 -c "from PIL import Image; import numpy as np; z = np.array(Image.open('images/gradient.png')).astype(int); print(z[0, 12] - z[0, 10])"

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

Das Skript edges.py nutzt ein genaueres Verfahren

Das Skript gibt englische Wörter aus: picture pixels heißt Bildpixel, edge pixels Kantenpixel. Es nutzt canny, ein bekanntes Verfahren von scikit-image: Es glättet zuerst leicht und sucht dann die stärksten Stellen.

shapes.png hat 60000 Pixel, davon sind 1326 Kantenpixel. Sie liegen als dünne Linien rund um die Rechtecke, Kreise und Dreiecke. Das Skript speichert die Karte als shapes_edges.png.

Die Kanten der Formen zählen

Befehl
docker exec jupyter python3 steps/edges.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, Kanten lägen dort, wo es hell ist. Eine Kante liegt dort, wo sich der Wert ändert. Auch ein sehr heller Bereich hat in seiner Mitte keine Kante, nur an seinem Rand.

Ü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.