|
Grafikbearbeitungvon Olaf Piesche und Christian Eyrich Inhaltsübersicht:
Wie alles anfingNehmen wir einmal an, Sie hätten ein wunderschönes Bild (z.B. von Ihrer Frau oder Freundin / Ihrem Mann / Freund / Lebensabschnittsgefährten, oder wasauchimmer, ganz nach persönlicher Neigung), das Sie gerne mit dem heimischen Scanner in Ihren Rechner bringen möchten. Dieses Bild wurde auf der letzten Silvesterparty im düsteren Partykeller aufgenommen - im wahrsten Sinne des Wortes fünf vor zwölf und der Mensch am Drücker hatte nicht die Ruhe für eine gute Belichtung. Das Motiv zeigt leider Gottes nicht besonders viel Kontrast und ist zudem noch unterbelichtet (das Bild, nicht die Person!). Was tun? Um diesem und ähnlichen Problemen zu Leibe zu rücken, wurde die EBV entwickelt, die elektronische Bildverarbeitung. Das Bild wird also eingescannt und in der EBV-Software genügen wenige Mausklicks, um Helligkeit und Kontrast so anzugleichen, daß selbst aus einem schlechten Foto eine durchaus brauchbare Aufnahme gemacht werden kann. Es folgten natürlich, dem Spieltrieb des Menschen folgend, weitere Bearbeitungsmöglichkeiten, mit denen man ein Bild auf verschiedenste Art und Weise verfremden kann - Mosaikeffekt, Verzerrungseffekte, Farbveränderungen undsoweiterundsofort. Wir wollen heute einmal ein wenig Licht in die Funktionsweise solcher Bearbeitungsmöglichkeiten, und wie es programmiertechnisch damit aussieht, bringen. GradiationUm zu wissen, wie man auf digitalem Wege z.B. Helligkeit und Kontrast eines Bildes verändern kann, ist es hilfreich zu wissen, was eine Gradiationskurve ist. Die Gradiation ist eines der wichtigsten lithografischen Hilfsmittel zur Korrektur von Farbverfälschungen, Tonerveränderungen bei der Reproduktion. Man kann die Gradiationskurven aber auch sehr schön zum Umfärben und Verfremden von Bildern benutzen und sie so als kreatives Werkzeug einsetzen. Die Gradiation ist praktisch eine Zuordnungstabelle für einen Farbkanal: jedem Farbwert im Bild entspricht ein Eintrag in dieser Tabelle. So kann jedem Farbwert (zwischen 0 und 255) ein beliebiger anderer zugeordnet werden. Grafisch wird dies über die Gradiationskurve dargestellt, die auch grafisch bearbeitet werden kann (sicherlich einfacher und intuitiver, als wenn man selbst die Tabellen ausfüllen müßte). Für die Beispielbilder zeigen wir nur eine Kurve. Normalerweise bekommt jeder der drei (RGB- oder CMY-Farbraum), bzw. vier (CMYK-Farbraum) Farbkanäle eine eigene Tabelle (Kurve) verpaßt. Allerdings ist es meistens auch möglich, alle Kurven gleichzeitig zu verändern. Defaultmäßig verlaufen die Kurven linear von links unten nach rechts oben (d.h. die Kurve ist gar keine, sondern eine Gerade), die Bilddarstellung wird nicht von der Gradiation beeinflußt. Die genaue Bedienung eines solchen Editors ist von Programm zu Programm leicht unterschiedlich, Freihandzeichnen wird aber auf jeden Fall vorhanden sein, vielleicht sogar das Aufziehen von Splines. In folgendem Bild wurde einfach freihändig eine Kurve eingezeichnet. Diese bewirkt, daß die Kurve flacher verläuft, als normal, d.h. den Quellpixeln (horizontal) wird jeweils ein Zielpixel (vertikal) zugeordnet, welches weniger Farbwert besitzt -> das Bild wird dunkler. Ganz leicht läßt sich mit dem Gradiationseditor auch ein Bild invertieren. Damit jetzt niemand aus Versehen die Lösung sieht, gibt es kein Bild dazu, sondern nur folgende Sätze. Die Kurve muß für dieses Ziel einfach nicht von links unten nach rechts oben verlaufen, sondern an der vertikalen gespiegelt werden. Somit wird dem Quellpixel mit dem Wert 255 (ganz rechts) der Zielwert 0 (ganz unten) zugeordnet. Und so verläuft die Gerade weiter durch den Mittelpunkt (127 bleibt 127) bis Quelle 0 (ganz links) auf Ziel 255 (ganz oben) fällt. Und schon ist das Bild invertiert - eine ruhige Hand vorausgesetzt, aber vielleicht bietet das Programm ja auch das Zeichnen von Geraden an. Ebenso leicht ist es, Helligkeit und Kontrast zu beeinflußen. Die nächste Abbildung zeigt das Aufdrehen der Helligkeit. Hierzu wurde einfach die Normalgerade nach oben verschoben, jedem Quellpunkt wird ein um den Betrag der Helligkeitssteigerung größerer Punkt zugewiesen. Oben bzw. unten beim Abdunkeln muß natürlich geclippt werden. D.h. 250 + 15 ergäbe ja 265, was einen Überlauf im Programm ergeben würde, da der größtmögliche Wert 255 ist, also werden Werte größer als 255 auf 255 gesetzt. Das führt natürlich zum Verschwinden, bzw. Verschmelzen von Bildteilen im weißen Bereich. Das macht zunächst zwar wenig, macht es aber unmöglich, vom aufgehellten Bild wieder auf das Ausgangsbild zurückgerechnen - einmal verschwundene Bildteile kann man nicht wieder rekonstruieren. Das Ändern des Kontrasts geschieht fast ebenso einfach durch eine Änderung in der Steigung der Geraden: verstärken der Steigung erhöht den Kontrast, abflachen der Steigung verringert den Kontrast. Für diese drei zuletzt genannten Fälle gibt es freilich meistens auch spezielle Module Helligkeit/Kontrast und Invertieren. Diese sind einfacher und ohne Vorwissen anzuwenden. Allerdings gibt es auch Fälle, in denen das Zurückgreifen auf den Gradiationseditor trotzdem nötig wird. Oft würde man sich das Foto nur kaputtmachen, wenn es insgesamt aufgehellt würde, da helle Stellen verschmelzen und verschwinden würden und Bereiche mit korrekter Helligkeit oder eben auch Kontrast überbelichtet/überkontrastiert würden. Es sollen nur die dunklen Stellen ein wenig aufgehellt werden, die Helligkeitswerte die in der Mitte und oben liegen aber gleich bleiben. Das läßt sich mit einer Gradiationskurve problemlos bewerkstelligen: Extrembeispiel Und ansonsten bietet der Gradiationseditor auch jede Menge Möglichkeiten zum Spielen und Verfälschen von Bildern. Besonders wenn die Farbkanäle unabhängig voneinander manipuliert werden, kommen sehr nette Ergebnisse dabei heraus. :-) WeichzeichnerGerade in der Bildmontage ist es oft hilfreich, Bilder, die als Hintergrund für irgendetwas anderes dienen sollen, weichzuzeichnen, so als würde der Focus der Kamera bei der Aufnahme ein paar Meter davor oder dahinter liegen. Auch, um beim Einmontieren von Objekten vor einen Hintergrund scharfe Kanten zu vermeiden, kann man den Weichzeichner auf diese anwenden. Wie funktioniert das ganze aber? Wenn wir uns mal eine einfache Optik aus einer Linse und einem Film ansehen, wird recht deutlich, warum Objekte in einer Kamera eigentlich unscharf erscheinen: Abb. 1: Die von einer Stelle des Objekts ausgesandten Lichtstrahlen treffen auf einer Stelle des Filmes auf - das Objekt ist scharfgestellt. Abb. 2: Die Lichtstrahlen von einer Stelle des Objektes treffen verteilt über eine relativ große Fläche des Filmes auf - das Objekt erscheint unscharf. Genau dies versucht nun der digitale Weichzeichner nachzuahmen. Hier wird versucht, die Farbwerte eines Pixels im Bild über mehrere Pixel zu verteilen. Im Prinzip basiert das Weichzeichnen eines Pixels darauf, seine Farbe mit den umliegenden Farben zu vermischen und das Ergebnis als Ersatz für das weichzuzeichnende Pixel zu setzen. Nehmen wir einmal einen Block von drei mal drei Pixeln als Beispiel, zur Verdeutlichung einfach schwarze und weiße Pixel. Unsere Aktuelle Position beim Weichzeichnen ist das mittlere Pixel (x)- dies würde einem Weichzeichner mit einer 3*3-Matrix entsprechen: Um das mittlere Pixel nun weichzuzeichnen, nimmt man einfach die Summe der Farbwerte aller 9 Pixel, teilt diese durch neun und setzt das Ergebnis an der Stelle x. Hieraus würde sich folgende Berechnung ergeben, wenn wir das Schwarz einfach mal mit 0 und das weiß mit 255 ansetzen: 0+0+0+255+255+255+255+0+255 = 1275/9 = 141.6 Das Ergebnis würde also etwa so aussehen: Dies ist nun bei einem Pixel nicht besonders aussagekräftig, aber auf ein ganzes Bild angewendet hat es den gewünschten Effekt. Um die Qualität des Weichzeichnens noch etwas zu steigern, verwendet man normalerweise eine Gewichtung der einzelnen Werte je nach Entfernung vom weichzuzeichnenden Pixel. Mit anderen Worten, je weiter ein Pixel von unserem Pixel X entfernt liegt, desto weniger wird sein Farbwert in die Berechnung mit einbezogen. Besonders bei einer 5*5- oder 7*7-Matrix sieht dies schon etwas besser aus, ist allerdings - natürlich - auch rechenaufwendiger. Wichtig ist beim digitalen Weichzeichnen, daß die weichgezeichneten Pixel unbedingt in ein neues Bild geschrieben werden müssen. Da die Pixel, die um das zu bearbeitende Pixel außen herum liegen, mit in die Berechnung einbezogen werden, würden hier auch bereits weichgezeichnete Pixel in die Berechnung des nächsten Bildpunktes mitgenommen werden - das verfälscht das Ergebnis, und zwar nicht zu knapp. SchärferHier wird das ganze schon ein wenig komplizierter. Weichzeichnen ist ja eigentlich kein Problem, aber wo soll Schärfe herkommen, wo keine ist? In einem unscharfen Bild fehlen einfach feinere Details. Um es gleich vorwegzunehmen: Auch mit einem noch so guten Schärfungsalgorithmus können wirklich fehlende Details nicht richtig sichtbar gemacht werden - die Information für diese fehlt einfach im digitalisierten Bild. Dennoch können unscharfe Bilder mit einem solchen Schärfer um einiges verbessert werden. Schärfungsalgorithmen verwenden normalerweise einen Algorithmus, der kontrastierte Stellen im Bild verstärkt. Dies funktioniert folgendermaßen: Wie beim Weichzeichnen bearbeiten wir das Bild mit einer Matrix. Nehmen wir als Beispiel eine Stelle, in der Grauwerte, die eigentlich eine scharfe Kante bilden sollten, verwaschen sind: x ist wieder das Pixel, das gerade bearbeitet werden soll. Nun negieren wir einfach die Pixelwerte, die sich links, rechts, über und unter Pixel x befinden, und multiplizieren x mit, sagen wir mal, 5. Danach zählen wir alle Werte zusammen: 128 -64 +64 -64 + 32*5 -0 +32 -0 +0 = 256 So. Diesen Wert clippen wir nun auf 255 (einen Wertebereich von 8 Bit mit 0-255 angenommen) und setzen ihn auf Pixel x: Im Vergleich zu vorher also ein stärkerer Kontrast zu den umliegenden Pixeln links und oben. Dies funktioniert bei allen Stellen im Bild, bei denen bereits Kontraste vorhanden sind, gleichfarbige Flächen bleiben jedoch gleich. Warum? Dadurch, daß die x umgebenden Pixel negiert und der Wert von x erhöht wird, wird die Differenz zwischen den Werten vergrößert. Beim Zusammenrechnen wird also die Differenz zu den umliegenden Farbwerten erhöht, was zu einem Schärfen der Kanten führt, ohne jedoch die Farben allzusehr zu verfälschen. Auch beim Schärfen wirkt es bei höheren Matrixgrößen (5*5 oder 7*7) besser, wenn die Pixel mit zunehmender Entfernung zu x schwächer gewichtet werden. Ebenso wie beim Weichzeichnen müssen die berechneten Pixel in ein neues Bild geschrieben werden, und zwar aus genau dem gleichen Grund. Die wundersame MatrixEuch wird aufgefallen sein, daß sowohl das Weichzeichnen als auch das Schärfen digitaler Bilddaten über eine Art Matrix geregelt wird, und zwar beide Male mit einem ähnlichen Verfahren. Irgendwann wurde von ein paar findigen Programmierern eine Methode entwickelt, die die verschiedensten Filterungen ermöglicht - und das mit nur einem einzigen Algorithmus. Der Trick an der Sache ist eben diese Matrix. In sie werden bestimmte Gewichtungsfaktoren eingegeben, die angeben, wie stark welche Pixel aus der Matrix in das mittlere mit eingerechnet werden sollen. Und nur hierdurch kann man beinahe Wunder wirken: Relieffilter, Weichzeichner, Schärfer, Falschfärbungen, all das kann mit diesem einen Algorithmus erledigt werden. Dabei geht man folgendermaßen vor: in eine Matrix trägt man Werte ein und "legt" diese Matrix Pixel für Pixel über das Bild. Dann multipliziert man jeden Wert in der Matrix mit dem referenzierenden Pixelwert und addiert alle zusammen. Nun wird noch das Ergebnis durch einen weiteren Wert, meist "Div" genannt, dividert (hier fällt bereits die Ähnlickeit zu einer Durchschnittsberechnung auf). Danach kann man noch einen Wert ("Bias") aufaddieren, um eine Verschiebung der Farben zu erreichen, und das Ergebnis clippen, damit z.B. in einem 24 Bit-Bild die Werte nicht über 255 laufen können (das kann man aber auch weglassen, ohne Clipping können sich ebenfalls interessante Resultate ergeben). So konfus sich das jetzt auch anhört, es funktioniert. Mit einer solchen Filtermatrix z.B.: und 15 als Divisionswert, mit eingeschaltetem Clipping, hat man einen Weichzeichnungsfilter. BewegungsunschärfeIhr habt doch sicher alle schon mal ein Foto von einem vorbeifahrenden Auto gesehen. Das Auto sieht auf diesem Bild sicherlich unscharf aus, ist aber nur in dessen Fahrtrichtung verwaschen. Das ist prinzipiell derselbe Effekt wie bei unserem unscharf gestellten Objekt. Während der Belichtungszeit des Fotos befindet sich dieselbe Stelle des Autos an verschiedenen Stellen auf der Straße und somit auch auf dem Film. Und auch diesen Effekt kann man nachbilden. Hierzu gibt man dem Weichzeichner einfach eine Richtung vor, in der die Farbwerte der Pixel miteinander verwischt werden sollen: Die mit x markierten Pixel werden in diesem Beispiel einfach addiert und durch 3 dividiert, um den Durchschnitt zu errechnen, und in der Mitte gesetzt. Damit ergibt sich eine "Verschmierung" der Pixel im 45-Grad-Winkel. Je nachdem, wie lang die "Kette" aus Pixeln ist, die man hier bearbeitet, ist der Unschärfeeffekt stärker oder schwächer, die Richtung der Pixel gibt eben die Richtung des Weichzeichnens an. Der StrudeleffektWohl einer der berühmtesten Verzerrungseffekte überhaupt ist der Strudeleffekt. Er soll den Eindruck vermitteln, man hätte das Bild in den Ausguß geschüttet. Auch dieser Effekt ist im Grunde recht einfach zu erreichen. Zuerst aber eine Überlegung, was bei so einem Strudel denn überhaupt passiert. Einfach gesagt dreht sich das Bild, jedoch nicht an jeder Stelle gleich stark. Die Bildmitte wird als erstes von der Strudelwirkung erfaßt und in Folge dessen das Bild hier am stärksten gedreht. Nach außen hin nimmt die Strudelwirkung ab und damit der Drehwinkel bis die äußeren Bildkanten sich überhaupt nicht mehr im Einfluß des Strudels befinden. Der Winkel der Verstrudelung wird am innersten Punkt gemessen, unser Beispielraster wurde mit einem Winkel von 90 Grad verstrudelt. Die vertikal verlaufende Linie durch den Mittelpunkt wird so stark abgelenkt, daß sie von rechts kommend durch den Mittelpunkt läuft. Der "blinde Fleck" in der Mitte ist leider einer Ungenauigkeit im Code anzuhängen Da der Winkel überall im Bild unterschiedlich ist, kann nicht das Bild als Gesamtwerk gedreht werden, sondern es muß jeder Pixel einzeln angefaßt werden. Der aktuelle Drehwinkel wird mittels Abstand vom Mittelpunkt (Stichwort Pythagoras) ermittelt. Wie stark der Drehwinkel bei einem bestimmten Abstand ist läßt sich am einfachsten feststellen, indem man den größtmöglichen Abstand nimmt und den Winkel linear abnehmen läßt, d.h. auf der Hälfte der Strecke zum Rand ist der Winkel noch halb so groß, nach Dreiviertel des Weges nach außen noch ein Viertel so groß usw. Damit, wie in dieser Abbildung, die Ränder des Strudels aber sanft auslaufen, sollte man den Winkel nach außen hin nicht linear, sondern logarithmisch abnehmen lassen, d.h., zuerst nimmt der Winkel recht schnell ab und nach außen hin immer weniger. Hiermit wird die Bildung scharfer Kanten an den Strudelrändern vermindert. Welcher Logarithmus genommen wird und wie stark die Abnahme anfänglich sein sollte, das muß jeder für sich rausfinden und ausprobieren - das ist das Geheimnis eines guten Strudels. :-) So, das wars auch schon wieder. Wir hoffen, auch ein wenig nützliche Information in dieses Buchstabentohuwabohu gepackt zu haben. Zwar mag es am Ende dieser vierteiligen Trilogie schon etwas spät erscheinen, jedoch würden wir uns über etwas Resonanz von der Leserschaft sehr freuen. Für uns ist es nämlich immer interessant zu wissen, wie erstens das Thema und zweitens der Stil angekommen ist. Auch wird das höchstwahrscheinlich nicht der letzte Artikel von uns gewesen sein und wenn wir dafür unseren Stil verbessern könnten, kommt das sicherlich auch der Leserschaft zugute. Für Fragen und Antworten stehen wir natürlich gerne zur Verfügung. Olaf Piesche, Christian Eyrich |
|
Rainer Wiesenfeller Letzte Änderung am 1. August 1997 |