Bitmap-Filterung

Viele Bildverarbeitungsprogramme bieten Optionen an, die es erlauben, Bilder zu glätten, in Reliefdarstellung umzuwandeln oder Konturen im Bild hervorzuheben. Alle diese Effekte können durch die sogenannte Bitmap-Filterung erreicht werden, bei der die Farbe aller Bildpunkte neu berechnet wird. Zu dieser Berechnung wird jedoch nicht nur der einzelne Bildpunkt herangezogen, sondern es werden auch die Nachbarpixel des Bildpunktes verwendet. Dabei werden die Anteile der einzelnen Nachbarpixel am neuen (Ergebnis-)Bildpunkt in einer Filtermatrix festgehalten.

Die in der Praxis verwendeten Filter-Matritzen sind meist 3x3 oder 7x7 Elemente groß. Abbildung 3 zeigt die hier verwendete 3x3 Filter-Matrix zum Erreichen eines Relief-Effektes. Das rot markierte Element stellt die Wichtung des zu bearbeitenden Pixels dar.

Filter-Matrix
Abb. 3: Filter-Matrix für Relief

Der Farbwert des neuen Pixels ergibt sich demnach aus der Summe der Produkte, die sich aus Filter-Matrix und den orginalen Farbwerten der umgebenen Nachbarpixeln ergibt. Das Ergebnis muß dabei natürlich einer vorzeichenlosen Saturation unterzogen werden. Zusätzlich kann durch eine Addition mit einem konstanten Wert die entstehende Bitmap aufgehellt werden. Abbildung 4 stellt den gesamten Vorgang an einem konkreten Beispiel dar.

Beispiel
Abb. 4: Beispiel für eine Filterung

Das Beispielprogramm filter.c führt diese Filterung mit einer Bitmap durch. Dabei wird eine in C geschriebene Funktion zur Filterung mit der in der Datei mmx.asm definierten MMX-Funktion bezüglich der benötigten Laufzeit verglichen. Bei der Durchführung der Filterung sollte beachtet werden, daß an den Rändern weitere Bildpunkte benötigt werden. Die Beispielprogramme verwenden deshalb eine Bitmap, die an allen Seiten einen Rand von einem Pixel besitzen (im Beispiel, z.B. Bitmapauflösung 642x482 Pixel und Darstellung auf dem Bildschirm mit einer Auflösung von 640x480 Pixel). Das muß natürlich bei der Bearbeitung der Bildaten beachtet werden.

Weiterhin sollte beachtet werden, daß das Beispielprogramm mit True-Color Daten arbeitet und die einzelnen Farbkomponenten (Rot, Grün und Blau) getrennt gefiltert werden. Das Ergebnis wird dann auf dem Bildschirm dargestellt.

Da in der MMX-Routine zur Filterung (filtermmx) der MMX-Befehl PMADDWD verwendet werden soll, um die Multiplikationen und Additionenen möglichst effektiv durchzuführen, müssen die Quell-Bytedaten in Wörter konvertiert werden. Bei den Daten der Filter-Matrix, die auch als Byte vorliegen, muß das Vorzeichen bei der Konvertierung beachtet werden !

Auf dem verwendeten Testrechner (Pentium-166 MHz) ergab sich für die verwendete MMX-Routine etwa die 1.5 fache Geschwindigkeit der vergleichbaren C-Version.

    C   Version, Taktzyklen= 250793843
    MMX Version, Taktzyklen= 106887565


zurueck weiter
Zum Index


Probleme oder Vorschläge zu dieser Webseite, bitte per email an: hohmuth@t-online.de
Letzte Änderungen am: 02.01.1999, Jens Hohmuth.