Rüdiger Timpe Alexander Bertschik Filterprogrammierung in Gimp Ein Vortrag im Rahmen des Seminars Manipulation und Verarbeitung digitaler Bilder
Inhalt Aufgabenstellung und Motivation...3 Auswahl der Filter...3 Funktionsweise der Filter...4?Standardaufrufe für Perl-Scripte in Gimp...4?Koordinatentransformation im Script...5? Filterspezifische Funktionen...6 Beispiele...7 2
Aufgabenstellung und Motivation Im Rahmen des Seminars Verarbeitung und Manipulation digitaler Bilder wurden verschiedene Aufgaben gestellt. Unsere Wahl fiel auf eine praktische Umsetzung des in den ersten Seminarstunden präsentierten Wissens. Das Ziel dieser praktischen Arbeit war, die zugrundeliegende Mathematik des Themas in zwei Filtern anzuwenden, welche dann schliesslich zur Bildmanipulation verwendet werden können. Als Bildbearbeitungsprogramm wurde Gimp gewählt, da dieses, dank des enthaltenen Perl-Script Interpreters, eine einfache Implementierung solcher Filter zulässt. Grundlegende mathematische Verfahren wurden ausführlich im Seminar besprochen. Dazu zählt vor allem die Koordinatentransformation und die Prinzipien der linearen Interpolation. Gimp und das Perl-Script wurden im Seminar in diesem Fall von anderen Teilnehmern, präsentiert. Weitere Materialen wie Fachliteratur und Tutorials wurden ebenfalls bereitgestellt. Auswahl der Filter Die Auswahl der Filter gestaltete sich recht schwierig. Bekannte Bildverarbeitungsprogramme haben meist eine grosse Palette nützlicher und optimierter Filter, doch die Komplexität dieser Filter würde meist den Rahmen eines Grundstudiumseminars sprengen. Dennoch sind zwei Ideen gefunden und umgesetzt worden. Die entstandenen Scripte sind vom Standpunkt der Nützlichkeit zu vernachlässigen, dennoch lassen sich zugrundeliegene Mathematik und die Funktionsweise von Perl und Gimp gut erkennen und erlernen. Der erste ist der Antigrav -Filter. Dieser generiert ein Loch beliebiger Grösse, Position und Farbe im Bild und verdrängt die umliegenden Pixel. Beim Zweiten, dem Modern-Art Filter, wird das Bild beliebig grob radial gerastert. 3
Funktionsweise der Filter Im folgenden Abschnitt werden die Filter und ihre Funktionsweise anhand von Beispielen des Quellcodes erläutert. Zunächst werden dabei Filterunabhängige Standardaufrufe in Gimp erklärt, da diese eine unverzichtbare Basis darstellen. Danach folgt ein kurzer Kommentar zur Koordinatentransformation im Script und zum Schluss die für die beiden Filter spezifischen mathematischen Funktionen.? Standardaufrufe im Perl-Script für Gimp Das hier vorliegende Bild ist ein Ausschnitt aus dem programmierten Script, welcher bei beiden Filtern nahezu gleich ausfällt und hier exemplarisch besprochen werden soll. 4
Als erstes werden, wie in dem mit # eingeleiteten Kommentar zu sehen, die Übergabeparameter ausgelesen. Die in Perl mit dem $-Zeichen gekennzeichneten Variablen enthalten von Gimp übergebene Informationen wie: das Bild selbst, die Ebene innerhalb des Bildes und das gewünschte x und y-zentrum. Diese grundlegenden Informationen werden zur weiteren Bearbeitung benötigt. Die ersten beiden Parameter sind festgelegt, alle weiteren frei definiert und bei Benutzung des Filters vom Benutzer einzugeben. Mit vorhandenen Gimp-Funktionen wird nun Breite und Höhe des Bildes ermittlet.die Variablen $breite und $hoehe werden intialisiert und erhalten durch das spezifische Gimp-Plugins (gimp_image_width, gimp_image_height) die dem Bild entsprechende Ausmasse. Nun wird eine neue Ebene erzeugt, die später das bearbeitete Bild darstellen wird. Diese Ebene erhält einen neuen Namen, der Informationen zum angewendeten Filter enthält und wird mit der vom Benutzer eingegebenen Hintergrundfarbe gefüllt.? Koordinatentransformation im Script Die Koordinaten des Bildes werden in Zähl-Schleifen in x- und y-richtung durchlaufen, dabei wird jedem Pixel im neuen Bild ein Pixel (bzw. ein Farbwert) im Originalbild zugeordnet. In den erstellten Filtern wurde das Pull-Verfahren verwendet, d.h. es werden aus den Koordinaten im neuen Bild die Original-Koordinate im alten Bild berechnet. Auf diese Weise gehen weniger Farbinformationen verloren und somit werden weniger Fehler erzeugt. Um die Filter erfolgreich anwenden zu können, ist eine Transformation des Koordinatensystems des Bildes vom kartesischen zum polaren unverzichtbar. Dies wird in dem oben gezeigten Ausschnitt das Quellcodes vorgenommen. Dabei wird zuerst die Variable $radius initialisiert, welche mit Hilfe des Satzes des Pythagoras den Wert erhält, der sich aus der Wurzel der Summe der Quadrate der x und y-koordinaten ergibt. Der daraus errechnete Abstand zum Mittelpunkt wird nun durch die Berechnung des Winkels zwischen Radius und x-achse mit Hilfe der Arcustangens-Funktion spezifiziert. 5
Nach abgeschlossenener Bearbeitung müssen die Polaren in Kartesische Koordinaten zurücktransformiert werden. Dies geschieht durch entsprechende Cosinus und Sinus Funktionen. Nachdem die Filter das Bild entsprechend bearbeitet haben, wird das Bild, wiederum durch vorhandene Gimp-Funktionen, in der neuen Ebene ausgegeben und für den User sichtbar gemacht.? Filterspezifische Funktionen 1) Anti-Grav-Filter Dieser Auschnitt aus dem Anti-Grav Filter stellt die eigentliche Bearbeitung der Koordinaten dar. Der Radius im Originalbild wird um einen vom Abstand zum Bildrand abhängigen Faktor verkürzt, durch das Pull- Verfahren ergibt sich dadurch letztlich eine Vergrößerung des Radius im neuen Bild. Die Variable $rges enthält den Abstand des Punktes vom Bildrand, gemessen auf der Geraden Zentrum-AktuellerPunkt-Bildrand. Die beiden Radien werden in Verhältnis zueinander gesetzt, der entstehende Faktor ($faktor) ist der Verschiebungsfaktor, welcher zum Rand hin immer geringer ausfällt um ein Wegfallen der Pixel aus dem Bild zu verhindern. 2) Modern-Art-Filter 6
Dieser Abschnitt stellt den funktionalen Teil des Modern-Art Filters dar. Für diesen wurde die Neuberchnung des Radius mit Hilfe der Modulo- Operation vorgenommen. Dabei wird der Radius ($radius) per modulo- Operation mit dem beim Filterstart einegegeben Faktor ($faktor) verrechnet und vom Radius subtrahiert. Der im folgenden Beispiel zu sehende Kacheleffekt kommt dadurch zustande, das der Farbwert eines Pixels auf eine ganzes Arreal übertragen wird. Die Grösse des Arreals wird durch den Faktor bestimmt, welcher Einfluss auf die durch die Modulo- Operation erzeugten Restwertgruppen hat. Mathematisch gesehen wird das Bild in Restklassenringe Z n eingeteilt. Beispiele Beispiel Anti-Grav: Beispiel für Modern-Art: 7