Was macht eigentlich ein digitales Bild scharf? Eine verständliche Erklärung der Prinzipien und ein Perl-Plugin für Gimp helfen dem digitalen Hobbyfotografen dabei, Schnappschüsse professionell aufzupolieren .
Wer eine Fotografie betrachtet, für den ist offensichtlich, ob sie scharf ist oder nicht. Doch was ist das eigentlich: Bildschärfe? Ein scharfes Bild weist klar identifizierbare Übergänge von Hell nach Dunkel auf. Eine schwarze Linie von einigen Pixeln Breite auf weißem Grund ist der Gipfel der Schärfe. Weicht man den Übergang von Schwarz nach Weiß hingegen auf, indem man von Schwarz über Dunkelgrau nach Hellgrau und Weiß wechselt, erscheint die Linie nicht mehr scharf. Schärfe bedeutet also, dass Hell-Dunkel-Übergänge in einem Bild auf einen möglichst kleinen Raum begrenzt und möglichst kontrastreich sind.
Scharfes Original
Wer scharfe digitale Bilder möchte, kann schon beim Fotografieren wertvollen Vorsprung gewinnen: Starkes, direktes Sonnenlicht erzeugt kontrastreichere Konturen als ein bedeckter Himmel, der Übergänge sanfter erscheinen lässt. Viel Licht gestattet auch niedrige ISO-Einstellungen an der Kamera – bei hohen ISO-Werten liefert der Sensor dagegen verrauschte Bilder, die neben störender Körnigkeit den Eindruck von Unschärfe vermitteln. Auch hilft es, auf die richtigen Bildteile scharf zu stellen: Das, was der Betrachter als Erstes sieht, sollte scharf sein – andere Teile sind nebensächlich und können ruhig etwas verschwimmen, ohne dass der Eindruck eines unscharfen Bildes entsteht. Sind bei einem Portrait zum Beispiel die Augen scharf, stört eine leicht unscharfe Nase kaum.
Oft entsteht auch ungewollt Schärfe an den falschen Stellen. Besonders die Damenwelt legt keinerlei Wert darauf, Details faltiger Gesichtshaut besonders scharf ablichten zu lassen. Hier ist stattdessen Unschärfe gewünscht: Niemals in der prallen Sonne fotografieren, sondern immer ein schattiges Plätzchen suchen. Sanfte Übergänge und wenig Kontrast sind hier gefragt, nachträgliches Schärfen allenfalls in den Augen- und Mundpartien denkbar.
Wer mit einer teuren digitalen Spiegelreflexkamera schon einmal Bilder im Raw-Format geschossen hat, schätzt die Vorzüge dieses verlustlosen Speicherverfahrens. Der Schärfeunterschied tritt besonders dann zutage, wenn man nicht das Gesamtbild, sondern nur einen Ausschnitt bearbeitet. Dann lässt das Jpeg-Format in den feinen Details sehr zu wünschen übrig. Eine elegante Methode, aus einer Serie von gleichartigen Schnappschüssen den schärfsten herauszufinden, ist übrigens, auf die Dateigrößen zu achten. Weil scharfe, detaillierte Übergänge schwerer zu komprimieren sind als verwaschene Szenen, belegen schärfere Jpeg-Bilder meist mehr Speicherplatz. Die größte Datei aus einer Serie enthält meist das schärfste Bild.
Nachträglich schärfen
Um Bildteile schärfer hervortreten zu lassen, eignet sich Gimps Funktion »Schärfen«, die unter dem Menüpunkt »Filters | Enhance | Schärfen« zu finden ist (Abbildung 3). Besonders nach dem Verkleinern eines Bildes fürs Web verliert es oft an Schärfe und sieht kontrastarm und verwaschen aus. Der Regler in Gimps »Schärfen«-Menü bewegt sich von 0 bis 100, die Werte 20 bis 40 erzielen üblicherweise die besten Resultate (Abbildung 2). Sie verkürzen die Farb- und Helligkeitsübergänge an kontrastreichen Bildstellen und vermeiden zu viel Rauschen sowie unnatürlich oder “digital” aussehende Helligkeitssprünge, die bei zu hohen Werten auftreten.

Abbildung 2: Mit dem Schärfen-Filter und dem eingestellten Wert 40 kommen kontrastreiche Linien schärfer hervor.
Alle Schärfungsmethoden arbeiten nach demselben Prinzip: Ein Algorithmus spürt Kanten und Ecken in einem Bild auf, verkürzt deren Hell-Dunkel-Übergänge und betont sie eventuell noch, indem er die hellen Seiten heller und die dunklen dunkler macht. Das Aufspüren von Ecken und Kanten ist wichtig, denn flächendeckendes Schärfen führt zu unnatürlichen Holperstrecken in sanften tonalen Übergängen wie etwa im Gesicht.
Wer ganz genau hinsieht, bemerkt in Abbildung 1 eine künstlich eingesetzte, senkrechte rote Linie in der linken Bildhälfte. Die Helligkeitswerte der Pixel dieser Teststrecke stellt weiter hinten die Abbildung 8 dar, und zwar vor und nach der Schärfung. Der Kurvenverlauf im Original ist grün, die geschärften Pixel sind rot dargestellt. Gimps »Schärfen« hat den Übergang von Hell nach Dunkel offensichtlich pointierter gestaltet, statt eines flachen Sattels ist nun ein spitzer Umkehrpunkt im Graphen sichtbar.

Abbildung 1: Das Originalbild: Der Steg einer Gitarre. Wegen zu großer Blendenöffnung haben sich Unschärfen eingeschlichen.

Abbildung 8: Das mit »Schärfen« geschärfte Bild weist zackigere Übergänge von Hell nach Dunkel auf. Die grüne Kurve gehört zum Original, die rote zum geschärften Bild.
Unscharfe Masken mit drei Parametern
Das Verfahren »Unscharf Maskieren« geht sogar noch einen Schritt weiter: Es findet selbstständig Hell-Dunkel-Übergänge und macht deren dunkle Seiten dunkler und die hellen heller. So überhöht es die Farb- oder Helligkeitsänderung an Kanten und Ecken künstlich und erzeugt damit den Eindruck besserer Schärfe. Der wahre Vorteil des Verfahrens liegt allerdings vor allem in der Möglichkeit, an drei verschiedenen Parameterknöpfen drehen zu können, um damit die Effektstärke einzustellen.
Abbildung 4 zeigt den Gimp-Dialog mit den veränderbaren Werten Amount, Radius und Threshold, Abbildung 6 das Resultat. Der Amount-Wert gibt die anteilsmäßige Kontrastverbesserung an. So bestimmt 0.5, dass die Helligkeit an einer Kante auf der dunklen Seite um 50 Prozent zu reduzieren und auf der hellen um 50 Prozent zu erhöhen ist.

Abbildung 6: Nach der Anwendung von »Unsharp Mask« mit den Werten Radius 3, Amount 0.65 und Threshold 2: Kontraste treten deutlicher hervor.
Ein Radius von 1 oder mehr weitet den Einfluss des Filters auf Umgebungspixel aus. Stellt man 0 ein, wirkt das Resultat unnatürlich und digital, bei Werten größer als 2 können dagegen wertvolle Bilddetails verloren gehen, denn Gimp appliziert Rauschen, um die Ausweitung des Effekts zu errechnen.
Der Wert für den Threshold legt fest, auf welche Bildteile Gimp den Filter überhaupt anwendet. Hierzu erzeugt Gimp intern eine unscharfe Kopie des Bildes und vergleicht sie pixelweise mit dem Original. Weichen beide Pixel um mehr als den Threshold-Wert voneinander ab, wirft Gimp den Filter an und verbessert den Kontrast zu benachbarten Pixeln. Andernfalls belässt es die Pixel im Originalzustand.
Hohe Threshold-Werte beschränken die Wirkung des Filters also auf wenige Bildstellen mit hohen Kontrastschwankungen, während ein Threshold von 0 das gesamte Bild schärft, was aber meist zu erhöhtem Rauschen und unnatürlichem, treppenartigem Geholper bei sanften Übergängen im Original führt, besonders in Himmelsfarben oder Hauttönen. Gerade mit dem Amount-Wert sollte man geizen, denn 1 entspricht schon einer Übersteuerung von 100 Prozent.
Nicht übertreiben
Der Graph in Abbildung 9 zeigt die rote Pixelstrecke von Abbildung 1 vor und nach dem Aufruf von »Unscharf Maskieren« mit zwei verschieden starken Parametersätzen. Der grüne Graph stellt die Helligkeit der Originalpixel dar. Mit dem Amount-Wert 65 Prozent ergibt sich die orange Linie, die deutlich die Übersteuerung des Hell-Dunkel-Kontrasts an den Kanten aufzeigt. Die rote Linie schließlich übertreibt den Effekt mit einem Amount-Wert von 150 Prozent und führt zu einem überscharfen Bild wie es Abbildung 7demonstriert.

Abbildung 9: »Unsharp Mask« überhöht die Übergänge künstlich, indem sie deren helle Seite heller und deren dunkle Seite dunkler macht. Grün: Original, orange: Unsharp Mask 3/0.65/2, rot: 3/1.5/2.

Abbildung 7: Wer’s übertreibt, bekommt störende Artefakte: »Unsharp Mask« mit Radius 3, Amount 1.5, Threshold 2.
Verschiedene Motive verlangen unterschiedliche Einstellungen von »Unscharf Maskieren«. So empfiehlt der große Foto-Zampano Scott Kelby in [2], Portraits mit Radius 1, Amount 1.5 und Threshold 10 zu bearbeiten. Der hohe Threshold greift dabei nur Bereiche an, in denen eh schon hohe Kontraständerungen vorherrschen. Glatte Pfirsichhaut hingegen bleibt unberührt. Für urbane Strukturen wie Gebäude hingegen empfiehlt er R=3, A=0.65, T=2. Alles andere fällt bei ihm in die Kategorie R=1, A=0.85, T=4. Diese Werte verstehen sich jedoch lediglich als Startpunkt für weitere Experimente, zumal Herr Kelby von Photoshop und nicht Gimp spricht und optimale Schärfe auch stark von persönlichen Vorlieben abhängt.
Die Funktion »Unscharf Maskieren« im Gimp-Vorbild Photoshop erzielt allerdings ähnliche Ergebnisse mit den gleichen Werten, wie Abbildung 10 zeigt. Photoshop CS3 kommt noch dazu mit neuen revolutionären Bordmitteln wie »Smart Schärfen« daher, deren Algorithmen jedoch nicht offenliegen.
Besteht ein Bild aus verschieden scharfen Teilen, ist es meist nicht ratsam, das gesamte Bild einer Schärfung zu unterwerfen, da die relativ hohe Übersteuerung, die notwendig ist, um die unscharfen Stellen zu schärfen, zu Artefakten (dem so genannten Halo, einem “Heiligenschein”) in den schon relativ scharfen Stellen führt. In diesem Fall bietet Gimp eine selektive Schärfung an, die sich mit Skriptmitteln allerdings nicht so einfach realisieren lässt, da der Benutzer bestimmen muss, was schärfer und was weniger scharf sein soll.

Abbildung 10: Photoshop macht’s ähnlich: Ein mit Radius 3, Amount 65 Prozent und Threshold 2 mit Photoshops »Unsharp mask« geschärftes Bild.
Automatisches Schärfen
Zur Automatisierung bietet sich allerdings eine Filtertechnik an: Siebt ein Hochpass Bildelemente mit stark wechselnden Hell-Dunkel-Übergängen aus, kann das nachfolgende »Unscharf Maskieren« sich auf diese Bildteile konzentrieren und den Rest des Bildes ungeschärft lassen. Das Gimp-Skript »smartsharp« in Listing 1 implementiert ein Schärfungsverfahren der Marke Eigenbau. Es erzeugt in Zeile 16 einen Menü-Eintrag ganz unten in Gimps Image-Dialog, der aufpoppt, wenn der Benutzer in einem Bild die rechte Maustaste drückt (Abbildung 11). Das »exit main()« in Zeile 22 ist ein Artefakt des Gimp-API, das frühere Gimp-Artikel dieser Reihe ([3], [4]) schon einmal erklärt haben.

Abbildung 11: Der neue Menüpunkt »Smartsharp« für das selbst geschriebene Plugin taucht am Ende von Gimps Image-Kontext auf.
Die Funktion »smartsharp« ab Zeile 25 erledigt die eigentliche Arbeit und holt in Zeile 30 zunächst eine Referenz auf den aktiven Layer des gegenwärtig bearbeiteten Bildes. Die Schärfung findet anschließend nicht im Original, sondern in einer Layer-Kopie statt, auf die die Variable »$sharp_layer« verweist. Hierzu kopiert die Methode layer_copy() den gerade aktiven Layer in einen neuen, der aber erst mit dem Aufruf von »image_add_layer()« im Layer-Dialog erscheint. Den Überlagerungsmodus des neuen Layers setzt Zeile 35 auf »OVERLAY_MODE«.
Die Funktion »plug_in_unsharp_mask()« in Zeile 39 führt auf der »sharp« benannten Layer-Kopie eine Unsharp-Mask-Transformation mit den Parametern Radius 1, Amount 1.0 und Threshold 0 durch, also flächendeckend. Denn nicht Gimps Unsharp-Mask-Algorithmus soll die Anwendungsbereiche der Schärfung bestimmen, sondern eine Hochpass-Maske.
Diese erzeugt Zeile 42 zunächst in einem neuen temporären Layer, den Zeile 46 mit »mask« beschriftet. Die Variable »$mask_layer« hält eine Referenz darauf. Anschließend filtert die Methode »plug_in_neon()«, ein Edge-Detector, mit einem Radius von 10 und einer Effektverstärkung von 0.1 die Bildanteile heraus, in denen starke örtliche Hell-Dunkel-Schwankungen vorherrschen. Die nachfolgend aufgerufene Methode »plug_in_gauss_irr()« weitet das Filterresultat mit einem Gaußschen Rauschen aus und lässt die Kanten verschwimmen, damit die Maske später nicht ruckartig ansetzt (Abbildung 12).

Abbildung 12: Ein Hochpass filtert kantige Bildbereiche aus, ein Rauschgenerator weitet die gefundenen Bereiche aus und schmiert das Ergebnis glatt. Es dient später als Layer Mask.
Jetzt müssen die Zeilen 55 bis 61 den Masken-Layer nur noch als Layer-Maske des Sharp-Layers einsetzen, damit Gimp die Schärfung nur dort appliziert, wo die Maske wahre Werte aufweist. Ein »edit_paste()« mit anschließendem »floating_sel_anchor()« tut genau dies. Abbildung 5 zeigt alle zu diesem Zeitpunkt definierten Layer. Nun ist der Masken-Layer ganz oben überflüssig und Zeile 64 kann ihn löschen.

Abbildung 5: Die vom Skript erzeugten Layer vor dem Aufräumen, von oben nach unten: der temporäre Mask-Layer, der geschärfte Layer mit applizierter Maske, der Original-Layer.
Um die beiden verbliebenen Layer, den maskierten Sharp-Layer und das Originalbild, miteinander zu mischen, schiebt die Methode »image_merge_down()« den oberen Layer in den unteren. Als Resultat bleibt der nun modifizierte Original-Layer übrig. Wichtig ist noch, dass die aus dem Gimp-Menü aufgerufene Funktion »smartsharp« eine Referenz auf das manipulierte Image-Objekt zurückgibt, sonst hagelt\’s Warnmeldungen im Gimp. Fertig ist das scharfe Bild in Abbildung 13.

Abbildung 13: Das Ergebnis des hausbackenen Schärfens: Kantige Bildbereiche scharf, außerdem weniger Artefakte auf den glatten Flächen. Das selbst geschriebene Skript war erfolgreich.
Installation
Damit Gimp das Skript »smartsharp« beim Hochfahren einliest, installiert man es mit der Kommandozeile
gimptool-2.0 --install-bin smartsharp
in Gimps Plugin-Verzeichnis. Die Utility »gimptool-2.0« liefert das Debian-Paket »libgimp2.0-dev« bereits mit. Des Weiteren sind »libgimp2.0« und »libgimp-perl« zu installieren, damit Gimp auch Perl-Skripte versteht.
Reihenfolge wichtig
Wer auch noch weitere Manipulationen am Bild vornimmt, es entweder verkleinert oder die Farben korrigiert, sollte darauf achten, dass das Scharfstellen immer als letzter Schritt in der Verarbeitungskette erfolgt. Andernfalls kommen sich die verschiedenen Verfahren in die Quere und machen im ungünstigsten Fall die Schärfenverbesserung wieder rückgängig.
Aus einem unscharfen Bild lässt sich allerdings nie ein scharfes Meisterwerk zaubern, Tricks wie die oben beschriebenen bleiben immer nur Stückwerk. Unscharfe Bilder enthalten weniger Information als scharfe. Es ist einfach, einem Bild Information zu entziehen, aber fehlende Information hinzuzufügen, ist etwa genauso schwer wie Zahnpasta wieder in die Tube zurückzudrücken. (jcb)
|
Listing 1: |
|---|
01 #!/usr/bin/perl
02 use warnings;
03 use strict;
04
05 use Gimp qw(:auto);
06 use Gimp::Fu;
07 use Log::Log4perl qw(:easy);
08
09 register(
10 "perl_fu_smartsharp", # Name
11 "Sharpen an Image", # Explain
12 "It's easy!", # Help
13 "Mike Schilli", # Author
14 "GPL", # Copyright
15 "2009/06/30", # Date
16 "<Image>/Smartsharp",# Menu
17 "*", # Images accepted
18 [],
19 &smartsharp # Function
20 );
21
22 exit main();
23
24 ###########################################
25 sub smartsharp {
26 ###########################################
27 my($img) = @_;
28
29 my $layer =
30 $img->image_get_active_layer();
31
32 # Create a copy to sharpen
33 my $sharp_layer = $layer->layer_copy(0);
34 $sharp_layer->layer_set_mode(
35 OVERLAY_MODE);
36 $sharp_layer->drawable_set_name("sharp");
37 $img->image_add_layer($sharp_layer, -1);
38
39 $img->plug_in_unsharp_mask($sharp_layer,
40 1, 1.0, 0);
41 # Create a mask layer
42 my $mask_layer = $layer->layer_copy(0);
43 $mask_layer->layer_set_mode(
44 OVERLAY_MODE);
45 $img->image_add_layer($mask_layer, -1);
46 $mask_layer->drawable_set_name("mask");
47
48 # High Pass Filter, blur result
49 $img->plug_in_neon($mask_layer,
50 10.0, .1);
51 $img->plug_in_gauss_iir($mask_layer,
52 20.0, 1, 1);
53
54 # Add mask layer as mask to sharp layer
55 my $sharp_mask =
56 $sharp_layer->layer_create_mask(0);
57 $sharp_layer->layer_add_mask(
58 $sharp_mask );
59 $mask_layer->edit_copy();
60 my $float = $sharp_mask->edit_paste(0);
61 $float->floating_sel_anchor();
62
63 # Clean up
64 $img->image_remove_layer($mask_layer);
65 $img->image_merge_down($sharp_layer, 0);
66 return $img;
67 }
|
|
Infos |
|---|
|
[1] Listings zu diesem Artikel: [ftp://www.linux-magazin.de/pub/listings/magazin/2009/09/Perl] [2] Scott Kelby, “The Digital Photography Book”: 2006 [3] Michael Schilli, “Alter geht vor Schönheit”: [https://www.linux-magazin.de/heft_abo/ausgaben/2009/04/alter_geht_vor_schoenheit] [4] Michael Schilli, “Farbenspiel”:[https://www.linux-magazin.de/heft_abo/ausgaben/2008/07/farbenspiel] |
|
Der Autor |
|---|
|
Michael Schilli arbeitet als Software-Engineer bei Yahoo! in Sunnyvale, Kalifornien. Er hat “Goto Perl 5” (deutsch) und “Perl Power” (englisch) für Addison-Wesley geschrieben und ist unter [mschilli@perlmeister.com] zu erreichen. |







