Bilder sind Arrays von Zahlen#
Numpy ist eine Bibliothek zur Verarbeitung mehrdimensionaler Listen von Zahlen, von denen mikroskopische Bilder (Stapel, Mehrkanal, Zeitraffer usw.) ein prominentes Beispiel sind. Hier geben wir eine Einführung in diese Bibliothek.
Siehe auch
import numpy as np
from matplotlib.pyplot import imshow
Numpy Arrays#
Ein Bild ist einfach eine zweidimensionale Liste von Pixelwerten, mit anderen Worten eine Matrix, mit einer bestimmten Anzahl von Zeilen und Spalten. Daher können wir es als Liste von Listen definieren, wobei jede Liste eine Zeile von Pixeln darstellt:
raw_image_array = [
[1, 0, 2, 1, 0, 0, 0],
[0, 3, 1, 0, 1, 0, 1],
[0, 5, 5, 1, 0, 1, 0],
[0, 6, 6, 5, 1, 0, 2],
[0, 0, 5, 6, 3, 0, 1],
[0, 1, 2, 1, 0, 0, 1],
[1, 0, 1, 0, 0, 1, 0]
]
raw_image_array
[[1, 0, 2, 1, 0, 0, 0],
[0, 3, 1, 0, 1, 0, 1],
[0, 5, 5, 1, 0, 1, 0],
[0, 6, 6, 5, 1, 0, 2],
[0, 0, 5, 6, 3, 0, 1],
[0, 1, 2, 1, 0, 0, 1],
[1, 0, 1, 0, 0, 1, 0]]
imshow(raw_image_array)
<matplotlib.image.AxesImage at 0x1f9fbdb4b80>
Diese Ausgabe ist fast dieselbe wie oben, mit dem Unterschied, dass jetzt angegeben wird, dass wir es mit einem Numpy array
zu tun haben. Solche Numpy-Arrays können nun als eine Einheit behandelt werden, und wir können die Berechnungen durchführen, die wir vorher nicht konnten:
image = np.asarray(raw_image_array)
image - 2
array([[-1, -2, 0, -1, -2, -2, -2],
[-2, 1, -1, -2, -1, -2, -1],
[-2, 3, 3, -1, -2, -1, -2],
[-2, 4, 4, 3, -1, -2, 0],
[-2, -2, 3, 4, 1, -2, -1],
[-2, -1, 0, -1, -2, -2, -1],
[-1, -2, -1, -2, -2, -1, -2]])
Beachten Sie, dass diese Berechnungen sehr effizient sind, da sie vektorisiert sind, d.h. sie können prinzipiell parallel ausgeführt werden.
Zwei wichtige Eigenschaften#
Arrays wie image
haben verschiedene Eigenschaften. Zwei der wichtigsten sind:
die
shape
des Arrays, d.h. die Anzahl der Zeilen, Spalten (und Kanäle, Ebenen usw. für mehrdimensionale Bilder)der
dtype
des Arrays, d.h. ein Bild vom Typint64
hat 2 hoch 64 verschiedene Grauwerte.
image.shape
(7, 7)
image.dtype
dtype('int32')
Andere Möglichkeiten, Arrays zu erstellen#
Bei der Arbeit mit Bildern erstellen wir oft künstliche Bilder, um zu sehen, was Filter mit ihnen machen. Zum Beispiel können wir ein Bild erstellen, bei dem alle Pixel den Wert 0
haben, außer einem einzigen, indem wir die Numpy-Funktion np.zeros
verwenden. Dafür muss eine Bildgröße angegeben werden.
image_size = (6, 5)
image1 = np.zeros(image_size)
image1
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
imshow(image1)
<matplotlib.image.AxesImage at 0x1f9fc000f10>
Da Bilder einfach Arrays sind, setzen wir Pixelwerte so, als würden wir auf Arrays zugreifen. Daraus lernen Sie auch, dass die erste Achse (Koordinate 0) von oben nach unten verläuft, während die zweite Achse (Koordinate 3) von links nach rechts geht.
image1[0,3] = 1
imshow(image1)
<matplotlib.image.AxesImage at 0x1f9fbe7ad90>
Um Rauschen zu untersuchen, können wir zum Beispiel ein Bild mit zufälligen Werten erstellen, indem wir np.random.random
verwenden.
image_random = np.random.random((6, 5))
imshow(image_random)
<matplotlib.image.AxesImage at 0x1f9fbef72e0>