Bilder und Bildverarbeitung
Bevor wir die Bildverarbeitung und andere Computervisionsfunktionen untersuchen können, ist es hilfreich, zu berücksichtigen, was ein Bild im Kontext von Daten für ein Computerprogramm tatsächlich ist.
Bilder als Pixelarrays
Für einen Computer ist ein Bild ein Array numerischer Pixelwerte . Betrachten Sie beispielsweise das folgende Array:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 255 255 255 0 0
0 0 255 255 255 0 0
0 0 255 255 255 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Das Array besteht aus sieben Zeilen und sieben Spalten, die die Pixelwerte für ein Bild von 7 x 7 Pixeln darstellen (das als Auflösung des Bildes bezeichnet wird). Jedes Pixel hat einen Wert zwischen 0 (schwarz) und 255 (weiß); mit Werten zwischen diesen Grenzen, die Graustufen darstellen. Das durch dieses Array dargestellte Bild sieht ähnlich wie das folgende (vergrößerte) Bild aus:
Das Array von Pixelwerten für dieses Bild ist zweidimensional (aus Zeilen und Spalten oder x- und y-Koordinaten ) und definiert ein einzelnes Rechteck mit Pixelwerten. Eine einzelne Ebene von Pixelwerten wie diese stellt ein Graustufenbild dar. In Wirklichkeit sind die meisten digitalen Bilder multidimensional und bestehen aus drei Ebenen (als Kanäle bezeichnet), die rote, grüne und blaue (RGB) Farbtöne darstellen. Beispielsweise könnten wir ein Farbbild darstellen, indem wir drei Kanäle mit Pixelwerten definieren, die dieselbe quadratische Form wie im vorherigen Graustufenbeispiel erstellen:
Red:
150 150 150 150 150 150 150
150 150 150 150 150 150 150
150 150 255 255 255 150 150
150 150 255 255 255 150 150
150 150 255 255 255 150 150
150 150 150 150 150 150 150
150 150 150 150 150 150 150
Green:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 255 255 255 0 0
0 0 255 255 255 0 0
0 0 255 255 255 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Blue:
255 255 255 255 255 255 255
255 255 255 255 255 255 255
255 255 0 0 0 255 255
255 255 0 0 0 255 255
255 255 0 0 0 255 255
255 255 255 255 255 255 255
255 255 255 255 255 255 255
Das Ergebnis ist das folgende Bild:
Die violetten Quadrate werden durch die Kombination dargestellt:
Red: 150
Green: 0
Blue: 255
Die gelben Quadrate in der Mitte werden durch die Kombination dargestellt:
Red: 255
Green: 255
Blue: 0
Verwenden von Filtern zum Verarbeiten von Bildern
Eine gängige Möglichkeit zum Ausführen von Bildverarbeitungsaufgaben besteht darin, Filteranzuwenden, die die Pixelwerte des Bildes ändern, um einen visuellen Effekt zu erzeugen. Ein Filter wird durch ein oder mehrere Arrays von Pixelwerten definiert, die als Filterkernel bezeichnet werden. Sie können z. B. einen Filter mit einem 3x3-Kernel definieren, wie in diesem Beispiel gezeigt:
-1 -1 -1
-1 8 -1
-1 -1 -1
Der Kernel wird dann über das Bild gefaltet, und es wird eine gewichtete Summe für jeden 3×3-Abschnitt berechnet und das Ergebnis einem neuen Bild zugeordnet. Es ist einfacher zu verstehen, wie die Filterung funktioniert, indem Sie ein Schritt-für-Schritt-Beispiel untersuchen.
Beginnen wir mit dem Graustufenbild, das wir zuvor untersucht haben:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 255 255 255 0 0
0 0 255 255 255 0 0
0 0 255 255 255 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Zuerst wenden wir den Filterkernel auf den oberen linken Patch des Bildes an, multiplizieren jeden Pixelwert mit dem entsprechenden Gewichtungswert im Kernel und fügen die Ergebnisse hinzu:
(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255
Das Ergebnis (-255) wird zum ersten Wert in einem neuen Array. Anschließend verschieben wir den Filterkernel um ein Pixel nach rechts und wiederholen den Vorgang:
(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510
Auch hier wird das Ergebnis dem neuen Array hinzugefügt, das nun zwei Werte enthält:
-255 -510
Der Prozess wird wiederholt, bis der Filter über das gesamte Bild hinweg zusammengedreht wurde, wie in dieser Animation gezeigt:
Der Filter wird über das Bild verteilt und berechnet ein neues Array von Werten. Einige der Werte befinden sich möglicherweise außerhalb des Wertebereichs von 0 bis 255 Pixeln, sodass die Werte so angepasst werden, dass sie in diesen Bereich passen. Aufgrund der Form des Filters wird der äußere Rand von Pixeln nicht berechnet, sodass ein Abstandswert (in der Regel 0) angewendet wird. Das resultierende Array stellt ein neues Bild dar, in dem der Filter das ursprüngliche Bild transformiert hat. In diesem Fall hat der Filter die Auswirkung, die Kanten von Formen im Bild hervorzuheben.
Um den Effekt des Filters deutlicher zu sehen, sehen Sie hier ein Beispiel für denselben Filter, der auf ein reales Bild angewendet wird:
Originalbild | Gefiltertes Bild |
---|---|
Da sich der Filter über das Bild erstreckt, wird diese Art von Bildmanipulation häufig als konvolutionale Filterungbezeichnet. Der in diesem Beispiel verwendete Filter ist ein bestimmter Filtertyp (als Laplace-Filter bezeichnet ), der die Kanten auf Objekten in einem Bild hervorhebt. Es gibt viele andere Arten von Filtern, mit denen Sie verschwommene Effekte, Schärfen, Farbinversion und andere Effekte erstellen können.