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

Pixel und Arrays: ein Bild als Zahlenraster

Nach dieser Lektion: Ich kann ein Bild als Raster aus Zahlen lesen und den Helligkeitswert eines Pixels abfragen.

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

Wie ein Computer ein Bild sieht

Ein digitales Bild besteht aus Pixeln, kleinen Bildpunkten, und jedes Pixel ist nur eine Zahl oder eine kurze Liste von Zahlen. Ein Computer sieht also kein Foto, sondern ein Raster aus Zahlen.

Wer das weiß, kann Bilder mit gewöhnlichem Code lesen, messen und verändern. Das üben Sie in diesem Modul an fünf Bildern, die das Lab für Sie zeichnet.

Am Ende dieser Lektion

Notiz

Ich kann ein Bild als Raster aus Zahlen lesen und den Helligkeitswert eines Pixels abfragen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Pixelein Bildpunkt, gespeichert als Zahlen
Arrayein Raster aus Zahlen in Zeilen und Spalten
Moduswie die Zahlen eines Pixels angeordnet sindRGB
Kanaleine Ebene aus Zahlen, zum Beispiel Rot
GrauwertHelligkeit von 0 (schwarz) bis 255 (weiß)

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

Jedes Pixel ist eine Zahl oder drei Zahlen

Ein Graubild speichert pro Pixel eine Zahl von 0 bis 255. Null ist schwarz, 255 ist weiß. Ein Farbbild speichert drei Zahlen: Rot, Grün und Blau, kurz RGB. Jede dieser Zahlen heißt ein Kanal.

Ein Bild mit 320 Pixeln Breite und 240 Pixeln Höhe hat 76800 Pixel. Die Pixel liegen in Zeilen und Spalten, genau wie die Zellen einer Tabelle.

Beispiel: ein Graubild, drei Zeilen, vier Spalten

ZeileSpalte 0Spalte 1Spalte 2Spalte 3
0124020035
1182506022
210304515

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

Ein Pixel in Python lesen

Code: python
# Ein kleines Graubild: drei Zeilen, vier Spalten.
bild = [
    [12, 40, 200, 35],
    [18, 250, 60, 22],
    [10, 30, 45, 15],
]
print("Zeilen:", len(bild))
print("Spalten:", len(bild[0]))
print("Pixel in Zeile 0, Spalte 2:", bild[0][2])
# Ändern Sie Zeile und Spalte und starten Sie erneut.

Das Lab zeichnet fünf Bilder

Im Ordner images liegen coins.png, gradient.png, road.png, scan.png und shapes.png. Das Lab zeichnet sie bei jedem Start mit denselben Zahlen, daher sehen alle dieselben Werte.

Der erste Befehl listet die Dateien auf, in alphabetischer Reihenfolge. Das Terminal hat kein eigenes Python, deshalb beginnt jeder Befehl mit docker exec jupyter.

Die fünf Bilder auflisten

Befehl
docker exec jupyter ls images

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 look.py liest ein Münzbild

Die Skripte des Labs geben englische Wörter aus: size heißt Größe, mode heißt Modus, pixel at heißt Pixel bei. Auf die Zahlen kommt es an.

Das Münzbild ist 320 Pixel breit und 240 hoch, im Modus RGB. Das Pixel bei 10, 10 hat die Werte (35, 35, 35), fast schwarz, also Hintergrund. Das Pixel bei 50, 50 hat (197, 157, 62), ein Goldton: Teil einer Münze. Der mittlere Grauwert des ganzen Bildes ist 57,6, also dunkel.

Das Münzbild lesen lassen

Befehl
docker exec jupyter python3 steps/look.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.

NumPy zählt Zeile zuerst, Pillow Breite zuerst

Pillow ist die Bibliothek, die Bilddateien öffnet. NumPy macht aus dem Bild ein Array und rechnet damit schnell.

Pillow nennt die Größe als (Breite, Höhe), also (320, 240). NumPy nennt die Form als (Höhe, Breite, Kanäle), also (240, 320, 3). Die Reihenfolge ist verschieden, und das ist die häufigste Fehlerquelle am Anfang.

Die Form des Münzbildes als Array

Befehl
docker exec jupyter python3 -c "from PIL import Image; import numpy as np; print(np.array(Image.open('images/coins.png')).shape)"

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 Graubild hat nur zwei Maße

Das Bild gradient.png ist ein glatter Verlauf von Schwarz links bis Weiß rechts. Es hat 64 Zeilen und 256 Spalten und keinen Farbkanal, weil jedes Pixel nur einen Grauwert hat.

Der Befehl gibt Form, Pixel oben links und Pixel oben rechts aus. Das ist (64, 256) 0 255: schwarz und weiß an den beiden Enden.

Den Verlauf lesen

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

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, ein Pixel liege bei (Zeile, Spalte), egal in welcher Bibliothek. Pillows getpixel fragt aber nach (Spalte, Zeile), also (x, y). Ein NumPy-Array fragt bild[zeile, spalte]. Prüfen Sie im Zweifel die Form und probieren Sie ein Pixel an einem Rand aus.

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