Repräsentation von Grauwertbildern¶
Bilder werden häufig in Form von Rastergrafiken gespeichert. Dies bedeutet, dass ein Bild mit einer Breite \(m\) und einer Höhe \(n\) dann \(m \times n\) Pixel groß ist. Ein Pixel ist ein „Picture Element“, also die Farbe an einer bestimmten Stelle. Ein Bild kann somit als eine Matrix von Pixeln dargestellt werden.
[1]:
import pandas as pd
import imageio.v2 as imageio
import matplotlib.pyplot as plt
/tmp/ipykernel_1472/1441957223.py:1: DeprecationWarning:
Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),
(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)
but was not found to be installed on your system.
If this would cause problems for you,
please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466
import pandas as pd
Die Bibliothek imageio
enthält eine Reihe von Beispielbildern.
[2]:
gray_image = imageio.imread("imageio:camera.png")
plt.imshow(gray_image, cmap="gray")
plt.show()
Imageio: 'camera.png' was not found on your computer; downloading it now.
Try 1. Download from https://github.com/imageio/imageio-binaries/raw/master/images/camera.png (136 kB)
Downloading:
8192/139512 bytes (5.9%)
139512/139512 bytes (100.0%)
Done
File saved as /home/docs/.imageio/images/camera.png.
Ein Bild verfügt über eine Breite und eine Höhe. Wie man oben an der X- und Y-Achse sieht, ist das Bild etwas über 500 Pixel hoch und breit. Grauwertbilder haben nur einen Zahlenwert je darzustellenden Pixel, den Intensitätswert an der jeweiligen Position.
Das Bild wird intern als eine zweidimensionale Matrix abgespeichert.
[3]:
gray_image.ndim
[3]:
2
Im Hintergrund ist das Bild ein Array von Arrays mit Intensitätswerten.
[4]:
gray_image
[4]:
array([[200, 200, 200, ..., 189, 190, 190],
[200, 199, 199, ..., 190, 190, 190],
[199, 199, 199, ..., 190, 190, 190],
...,
[ 25, 25, 27, ..., 139, 122, 147],
[ 25, 25, 26, ..., 158, 141, 168],
[ 25, 25, 27, ..., 151, 152, 149]], dtype=uint8)
Es gibt viele Standards für die Intensitätswerte. Deswegen sollte man jedes Mal überprüfen, in welchem Format ein Bild vorliegt. Dafür werden die kleinsten und größten Intensitätswerte betrachtet.
[5]:
gray_image.min(), gray_image.max()
[5]:
(0, 255)
Die Pixel rangieren zwischen 0 und 255, sprich insgesamt 256 verschiedene Werte.
Ausschneiden von Bildteilen¶
Wir können auf die Matrix über die Standard-Operatoren von Python zugreifen. Einer davon ist der Doppelpunkt zur Bestimmung von Abschnitten. So können wir z. B. die abgebildete Kamera ausschneiden. Der Zugriff erfolgt über BILDMATRIX[Y-Achse, X-Achse]
.
[6]:
plt.imshow(
gray_image[100:200, 250:350], # [ymin:ymax, xmin:xmax] beschreibt den Zuschnitt
cmap="gray", # visuelle Darstellung in Grauwerten
vmin=0, # 0 entspricht schwarz
vmax=255 # 255 entspricht weiß
)
plt.show()
Der Doppelpunkt beschreibt hier eine Range. Auf der Y-Achse werden die Werte von 100 bis 200 und auf der X-Achse die Werte von 250 bis 350 ausgewählt.
Nun betrachten wir das Kamera-Rohr genauer.
[7]:
plt.imshow(
gray_image[135:150, 305:335], # [ymin:ymax, xmin:xmax] beschreibt den Zuschnitt
cmap="gray", # visuelle Darstellung in Grauwerten
vmin=0, # 0 entspricht schwarz
vmax=255 # 255 entspricht weiß
)
plt.show()
Die Zahlen-Matrix, mithilfe der dieses Bild intern repräsentiert wird, lässt sich auch direkt einsehen. Mit pd.DataFrame
wird der Datentyp als eine hübsche Tabelle dargestellt.
[8]:
pd.DataFrame(gray_image[140:160, 320:340])
[8]:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 67 | 79 | 88 | 95 | 183 | 212 | 213 | 212 | 213 | 213 | 213 | 212 | 212 | 212 | 212 | 212 | 211 | 212 | 212 | 212 |
1 | 73 | 85 | 89 | 106 | 157 | 214 | 212 | 212 | 213 | 213 | 213 | 212 | 213 | 213 | 212 | 212 | 211 | 213 | 212 | 212 |
2 | 93 | 105 | 106 | 125 | 138 | 215 | 212 | 212 | 212 | 212 | 211 | 212 | 211 | 213 | 212 | 213 | 212 | 213 | 213 | 212 |
3 | 129 | 132 | 132 | 155 | 130 | 214 | 212 | 212 | 213 | 213 | 213 | 213 | 213 | 214 | 213 | 213 | 212 | 214 | 213 | 212 |
4 | 163 | 163 | 164 | 194 | 133 | 216 | 213 | 212 | 213 | 213 | 213 | 213 | 213 | 212 | 213 | 212 | 214 | 214 | 213 | 212 |
5 | 179 | 196 | 196 | 242 | 152 | 216 | 212 | 213 | 214 | 214 | 213 | 214 | 212 | 213 | 213 | 213 | 214 | 214 | 213 | 213 |
6 | 171 | 214 | 215 | 214 | 126 | 217 | 213 | 213 | 214 | 213 | 213 | 213 | 213 | 213 | 214 | 213 | 213 | 212 | 213 | 214 |
7 | 120 | 102 | 113 | 122 | 120 | 216 | 213 | 214 | 213 | 213 | 213 | 213 | 213 | 212 | 213 | 214 | 212 | 213 | 213 | 213 |
8 | 76 | 87 | 90 | 97 | 124 | 215 | 213 | 213 | 213 | 213 | 213 | 214 | 213 | 213 | 213 | 213 | 213 | 213 | 213 | 213 |
9 | 56 | 62 | 64 | 89 | 142 | 214 | 213 | 213 | 213 | 213 | 213 | 213 | 214 | 214 | 214 | 213 | 213 | 213 | 213 | 213 |
10 | 50 | 76 | 76 | 92 | 141 | 214 | 212 | 213 | 214 | 214 | 213 | 213 | 213 | 214 | 213 | 213 | 213 | 213 | 214 | 213 |
11 | 46 | 79 | 84 | 88 | 144 | 215 | 214 | 213 | 214 | 214 | 214 | 213 | 213 | 213 | 213 | 213 | 213 | 214 | 214 | 214 |
12 | 40 | 62 | 93 | 93 | 153 | 215 | 213 | 214 | 214 | 213 | 213 | 214 | 213 | 213 | 213 | 213 | 213 | 212 | 213 | 213 |
13 | 33 | 43 | 51 | 71 | 165 | 213 | 214 | 214 | 214 | 214 | 213 | 213 | 213 | 214 | 213 | 214 | 213 | 214 | 214 | 213 |
14 | 30 | 33 | 38 | 63 | 181 | 213 | 213 | 214 | 214 | 213 | 214 | 214 | 214 | 213 | 213 | 214 | 213 | 213 | 213 | 213 |
15 | 41 | 58 | 64 | 79 | 204 | 214 | 214 | 214 | 215 | 214 | 214 | 214 | 213 | 214 | 213 | 213 | 213 | 213 | 214 | 214 |
16 | 187 | 193 | 195 | 194 | 213 | 213 | 214 | 214 | 214 | 214 | 213 | 214 | 214 | 214 | 214 | 213 | 213 | 214 | 213 | 213 |
17 | 214 | 214 | 214 | 214 | 214 | 214 | 215 | 214 | 214 | 214 | 214 | 213 | 214 | 214 | 214 | 214 | 214 | 214 | 214 | 213 |
18 | 214 | 215 | 215 | 215 | 215 | 215 | 214 | 215 | 215 | 215 | 215 | 215 | 214 | 215 | 214 | 214 | 214 | 215 | 215 | 214 |
19 | 216 | 215 | 215 | 214 | 216 | 216 | 216 | 215 | 215 | 215 | 216 | 215 | 214 | 215 | 215 | 215 | 215 | 215 | 215 | 215 |
Aufgabe
Vergleichen Sie die Matrix mit dem Bild. Was repräsentieren hier die kleinen, was die großen Zahlen?
Antwort: …
Dieses Werk von Marvin Kastner ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz.