Bilder und Bildverarbeitung

Abgeschlossen

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:

Diagram of a grayscale image.

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:

Diagram of a color image.

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:

Diagram of a filter.

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
Diagram of a banana. Diagram of a filtered banana.

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.