Erzeugung von HDR-Bildern in CinePaint

von Hartmut Sbosny

Letzte Änderung: 03. 11. 2005

Zusammenfassung
Es wird beschrieben, wie mit einem CinePaint-Werkzeug aus einer Belichtungsreihe ein Bild mit hohem Dynamikumfang (HDR-Bild) erzeugt wird.

Inhaltsverzeichnis

Einführung

HDR-Bilder

Denken wir an ein fotografisches Motiv mit außergewöhnlichem Helligkeitskontrast, etwa eine Nachmittagssonne im Gegenlicht über einem weiß gekalkten Stallgebäude, darin ein offenes Tor, einen Blick freigebend in das dunkle, kühle Innere des Baues. Naturgemäß wird sich der Fotograf durch passende Wahl von Belichtungszeit und Blende hier zu entscheiden haben, in welche Teile des Motivs: Sonne oder Hauswand oder Innenraum, er Zeichnung bekommen will, der Rest wird ihm wohl oder übel stark überbelichtet (weiß) oder unterbelichtet (schwarz) geraten. Gleichwohl könnte jedes Teilmotiv für sich mit der ihm zugemessenen Belichtungszeit durchaus in den Arbeitsbereich der Kamera gerückt und kontrastreich abgebildet werden. Eine Belichtungsreihe hätte jedes Teilmotiv optimal getroffen — nur jeweils in einem anderen Bild! Der Gedanke ist nun, aus einer Belichtungsreihe ein einziges Bild zu fertigen, darin die "wirklichen" Helligkeitsverhältnisse in ihrem ganzen Umfang, die gewissermaßen physikalischen Strahlungsdaten niedergelegt sind. Praktischerweise wird man solche Daten nicht wie bei gewöhnlichen Digitalbildern durch Ganzzahlen (Integer), sondern durch Gleitkommazahlen (Float) repräsentieren, deren Exponent es leichtmacht, Größenordnungsunterschiede über viele Zehnerpotenzen hinweg auszudrücken. Derartige Bilder werden auch HDR-Bilder genannt, das Kürzel "HDR" steht für "High Dynamic Range", zu deutsch "hoher Dynamikumfang". Eine erste quantitative Orientierung über der Helligkeitsdynamik eines Bildes bietet das Verhältnis des hellsten Wertes zum (nichtverschwindenden) dunkelsten Wert. Bei einem 8-Bit Integer-Bild kann in einem Farbkanal dieses Verhältnis maximal 255 : 1 betragen, bei 16-Bit Integerzahlen 65535 : 1, bei einem 32-Bit Floatzahl-Bild ungefähr 10^32 : 10^-32 = 10^64.

Die an Kontrast und Detailreichtum in HDR-Bildern kodierte Helligkeitsinformation übersteigt in der Regel das durch normale Wiedergabemedien wie Bildschirm oder Papier noch Auflösbare. Wird die gekalkte Wand bspw. mit dem hellsten, d.h. unvergrautem Weiß wiedergeben, kann die Sonne nur noch maximal ebenso weiß ("hell") erscheinen — das Weiß des Papieres oder Bildschirms eben, wohingegen an meßbarer Strahlungsintensität der Wand vielleicht ein Wert (in irgendeinem Maßstabe) von 1, dem Sonnenzentrum aber von 1000 zukam! Einer der Vorteile von HDR-Bildern ist, daß erst im Moment des Betrachtens und nicht schon zum Aufnahmezeitpunkt entschieden werden muß, welche Informationen interessieren. Ein anderer, daß sie eine Basis darbieten, um gezielt Bildstellen mit mehr Zeichnung zu versehen oder auch, um durch Algorithmen, die den automatischen Helligkeitsausgleich unsers Sehsinnes nachempfinden, Bilder zu generieren, die dem subjektiven Seheindruck kontrastreicher Szenen näher kommen als gewöhnliche Fotos.

Über diesen Text

Der weitere Text gliedert sich in zwei Teile, einen theoretischen und einen praktischen. Zur Arbeit mit dem Programm ist das volle Verständnis des theoretischen Teils nicht erforderlich, eine ungefähre Ahnung gleichwohl der zugrundeliegenden theoretischen Vorstellungen erleichtert eine kritische Wertung der Ergebnisse. Wer möchte, kann jetzt gleich zum praktischen Teil übergehen.

Theoretischer Hintergrund

Erstmals beschrieben wurde das hier benutzte Verfahren meines Wissens von P. E. Debevec and J. Malik in [1].

Die von den Objekten einer Szene ausgesandte bzw. reflektierte Strahlung läßt nach Durchgang durch die Blende und das Linsensystem in der Ebene der Fotoelemente ("Pixel") eine gewisse Lichtintensität E (Strahlungsleistung) an einem Pixel anliegen; — während einer Aufnahme wird E als konstant unterstellt. Aufintegriert über die Belichtungszeit Δt erhalten wir aus E die für ein Belichtungsergebnis maßgebliche Lichtmenge X = E⋅Δt. In einem anschließenden Digitalisierungsprozeß wird X nach einer uns zunächst unbekannten nichtlinearen Funktion z=f(X) in einen ganzzahligen Wert z überführt (z.B. z=0...255 für 8-Bit-Wandler) — jene Werte, die wir später als die digitalen RGB-Daten auslesen. Die "Antwortfunktion" z = f(X) ist ein Gerätespezifikum, sie charakterisiert einen ganzen Digitalisierungsprozeß X --> z eines Farbkanals inklusive Fotoelementcharakteristik und eventueller kamerainterner Korrekturalgorithmen, ja selbst der Zwischenschritt eines zunächst naßchemisch entwickelten Filmmaterials, das anschließend digitalisiert wurde, kann hierunter befaßt werden. Im folgenden gilt es, aus den gegebenen z-Werten einer Belichtungsreihe und den bekannten Belichtungszeiten die Funktion z=f(X)=f(E⋅Δt) bzw. deren Inverse zu rekonstruieren, um anschließend die E-Werte zu ermitteln. Die Intensitätswerte E bilden hierdann den Inhalt eines HDR-Bildes.

Dazu werden vier Annahmen gemacht:

  1. Daß die Antwortfunktion z=f(X) streng monoton sei, d.h. daß eine Erhöhung der Lichtmenge X stets auch eine Erhöhung von z zur Folge habe — zumindest im Arbeitsbereich eines Fotoelementes eine vernünftige Annahme. Dann existiert die Umkehrfunktion f^{-1}(z) = X.
  2. Daß in allen Aufnahmen einer Belichtungsreihe dieselbe Antwortfunktion wirksam war. (Natürlich, da ja sonst gar kein Zusammenhang zwischen den Aufnahmen, könnte aber unterlaufen werden, falls kameraintern in Abhängigkeit von der Belichtungssituation verschiedene Korrekturalgorithmen zum Einsatz kämen.)
  3. Daß sämtliche Fotoelemente eines Bildsensors (innerhalb eines Farbkanals) identische Antwortfunktionen besitzen. Räumlich über das Bild variierende z-Werte können dann interpretiert werden als Blick auf verschiedene Arbeitspunkte ein und derselben Funktion z=f(X) zu lediglich verschiedenen Argumentwerten X.
  4. Daß die an einem festgehaltenen Pixel anliegende Lichtintensität E in sämtlichen Aufnahmen einer Belichtungsreihe dieselbe war (statische Szene + identische Kamerapositionen).
Möge unsere Belichtungsreihe P Aufnahmen umfassen. Denken wir uns herausgegriffen jetzt N Pixel mit den zugehörigen (unbekannten) Lichtintensitäten E_i (i=1,...,N). In der j-ten Aufnahme (j=1,...,P) zeitige der i-te Pixel den Ausgabewert z_ij. Gemäß z=f(X)=f(E⋅Δt) muß dann gelten
  z_ij = f(E_i⋅Δt_j)   für alle i=1...N, j=1...P
oder invertiert und logarithmiert
  g(z_ij) = ln(E_i) + ln(Δt_j)  für alle i=1...N, j=1...P,
wobei die Abkürzung
  g(z) := ln[f^{-1}(z)] 
eingeführt wurde. Bekannt sind darin die Zeiten Δt_j, unbekannt sind die ln(E_i) sowie die Funktion g(z). Der Wertebereich der Integervariable z ist endlich, seien es die M Zahlen z_1,..., z_M (z.B. 0,...,255 für 8-Bit-Wandler). Die Funktion g(z) ermitteln heißt daher, für die M möglichen Argumentstellen z_k die zugehörigen Funktionswerte g(z_k) zu finden. — Das ganze Problem formulieren wir nun als die Aufgabe, die M Werte g(z_k) und die N Werte ln(E_i) so zu bestimmen, daß die quadratische Zielfunktion
      N  P
  Ω = ∑ ∑ [g(z_ij) - ln(E_i) - ln(Δt_j)]^2 + λ ∑ g''(z)^2
      i  j                                     z
minimiert wird. Der erste Term sichert die Erfüllung obiger Gleichungen im quadratischen Mittel, der zweite Term ist ein Glättungsterm, er enthält die Summe der quadrierten zweiten Ableitungen und bestraft Krümmungen von g(z). Mit dem Parameter λ>0 kann die Balance zwischen beiden Termen verschoben werden, hohes λ läßt Krümmungen stärker zu Buche schlagen und befördert glattere Kurven auf Kosten der Akkuratesse des ersten Terms.

Da die Zielfunktion Ω quadratisch in den Unbekannten g(z_k) und ln(E_i), führt die Minimierung von Ω auf ein lineares Quadratmittelproblem, das mit Standardverfahren wie QR-Zerlegung oder Singulärwertzerlegung (SVD) geradlinig gelöst werden kann.

Nachdem auf diese Weise die Funktion g(z) und damit auch exp(g(z)) = f^{-1}(z) gefunden, lassen sich vermöge f^{-1}(z) = E⋅Δt die z-Bilddaten in die zugehörigen Intensitätswerte E umrechnen: E_i = f^{-1}(z_ij) / Δt_j.

Drei Bemerkungen:

1.) Die Lösungen für E und f^{-1}(z) sind soweit eindeutig nur bis auf einen konstanten Faktor α>0, denn die Gleichungen bleiben erfüllt, wird ln(E) durch ln(E)+ln(α) und g(z) durch g(z)+ln(α) ersetzt. Die Sache eindeutig zu machen, wird die zusätzliche Forderung g(z_mid)=0, also f^{-1}(z_mid)=1 erhoben, wo z_mid der mittlere z-Wert. D.h. es wird festgesetzt, daß der mittlere z-Wert der Lichtmenge X=1 entspreche. Das ist zunächst eine rein willkürliche Festsetzung über die absolute Höhe der X- bzw. E-Werte, die als solche dann auch nur relativen — aufeinander bezogenen — Gehalt haben. Für absolute Strahlungsdaten müßte umskaliert werden. Zudem erfolgt diese Normierung für jeden Farbkanal unabhängig, so daß definitorisch an dieser Stelle ein Grauton behauptet wird. Aber insbesondere für Kamera-Rohdaten muß ein Sensor-Output von (z_mid, z_mid, z_mid) nicht unbedingt einen Grauton repräsentieren, und eine nachträgliche Farbkorrektur würde erforderlich.

2.) Digitalkameras arbeiten zuweilen mit motivabhängigen Korrekturalgorithmen (wozu auch schon ein automatischer Weißabgleich gehört). Solange für alle Aufnahmen einer Belichtungsreihe derselbe Algorithmus zum Einsatz kommt, stellt das noch kein Problem dar, lediglich wird man je nach Motiv u.U. verschiedene Antwortfunktionen erhalten. Problematisch aber wären verschiedene Algorithmen innerhalb einer Belichtungsreihe (Annahme 2 verletzt) oder auch, wenn Zonen innerhalb eines Bildes unterschiedlich nachbearbeitet würden (Annahme 3 verletzt). Irgendein Ergebnis würde dann trotzdem zwar erzielt, schließlich handelt es sich um eine Minimierungsaufgabe, aber vermutlich kein gutes. Auf der sicheren Seite sollte man mit Kamera-Rohdaten liegen.

3.) Die unterstellte Monotonie der Antwortfunktion wird im numerischen Verfahren selbst nicht erzwungen, es können auch nichtmonotene Verläufe herauskommen. Es ist das oft ein Hinweis auf problematische ("regelwidrige") Ausgangsdaten.

Das CinePaint-Werkzeug

Das jetzt vorzustellende CinePaint-Werkzeug zur Erzeugung von HDR-Bildern gehört seit der CinePaint-Version 0.20-0 zum offiziellen Distributionsbestand. Das Bildbearbeitungsprogramm CinePaint bot sich als Plattform für eine quellenoffene Lösung hier deshalb an, weil es — anders als z.B. GIMP — von Hause aus intern mit Float-Daten (32 Bit) umgehen kann. Im folgenden beschreibe ich einige wesentliche Aspekte des neuen Plugins.

Gestartet aus CinePaint heraus wird das Programm im <Toolbox>-Menü "File" -> "New From" -> "Bracketing to HDR". Im sich öffnenden Hauptfenster sind unter "File" -> "Open" sodann die Bilder einer Belichtungsreihe zu laden, erlaubt sind alle von CinePaint unterstützen Dateiformate. Die Bilder werden automatisch nach mittlerer Helligkeit je Pixel sortiert, oben das dunkelste, das also anzunehmen kürzest belichtete.

[scrshot_images.jpg]

Aufnahmedaten

Zur Zeit wird das Lesen von EXIF-Metainformationen (Blende, Belichtungszeit, Empfindlichkeit, ...) noch nicht unterstützt. Zur Zeit werden aber ohnehin nur relative Intensitätsdaten in Sinne von Bemerkung 1 erstellt, keine absoluten. Für diese Zwecke reicht die Angabe des Verhältnisses der Lichtmengen bzw. Belichtungszeiten der einzelnen Aufnahmen. Z.B. kann die Belichtungszeit der kürzest belichteten willkürlich gleich Eins gesetzt werden, und die übrigen beziehen sich dann auf diese. Mittels des "Stops"-Wählers lassen sich nach einem festen Faktor wachsende Belichtungszeiten generieren. Nach fotografischem Brauch wird dabei nicht dieser Faktor F selbst, sondern gemäß F = 2^stop der Zweierexponent "stop" angegeben (stop=1 bedeutet also einen Faktor Zwei). Der stop-Wert korrespondiert nämlich gerade auch den Differenzen von Blendenwerten, eine Änderung um eine Blendenstufe halbiert bzw. verdoppelt bekanntlich die Blendenöffnung und also die Lichtmenge X. Mit einem anderen Wort, Halbierung der Blendenöffnung und Halbierung der Belichtungszeit werden in diesem Kontext als äquivalent betrachtet. War die Belichtungsreihe also nicht durch Verlängern der Belichtungszeit, sondern durch sukzessives Vergrößern der Blendenöffnung (=Verringern der Blendenzahl) zu Stande gekommen, so kann das ebensogut hier eingestellt werden: Schritte von einer Blendenstufe entsprechen stop=1, Drittelschritte stop=1/3 usf. — Bei Bedarf sind die Belichtungszeiten auch einzeln zu editieren.

Numerische Parameter

Im Eingabefeld "Stützstellen" ("grid points") ist die Anzahl N aus einem Bild herauszugreifender Pixel anzugeben, Werte zwischen 50 und 100 sind eine gute Wahl. Je größer N, desto engmaschiger wird eine Antwortfunktion berechnet, desto länger aber auch dauert dieses. (Präziser gesagt ist N nicht einfach dann eine Anzahl von Pixeln, sondern abstrakter von Zahlentupeln, mehr dazu im nächsten Abschnitt.)

Im Eingabefeld "Glättungskoeffizient" ("smoothing") ist der oben erwähnte Parameter λ zu justieren. Ziel sollte sein, eine monotone, glatte Antwortfunktion mit möglichst kleinem λ zu erhalten. Hier kann man etwas probieren. Für gute Ausgangsdaten erhielt ich mit λ=10...20 vernünftige Ergebnisse. Mit hinreichend großem λ>200...500 lassen sich wohlverstanden selbst aus irregulärsten Ausgangsdaten (vgl. Abschnitt "Folgekurven"), deren Antwortfunktionen für λ=20 wild oszillierten, noch glatte, montone Kurven erzwingen, doch Substanz besitzen solchen Kurven natürlich dann kaum mehr.

Folgekurven

Jetzt zur Erläuterung der von mir "Folgekurven" genannten Diagramme. Möge eine Belichtungsreihe drei Aufnahmen umfassen. Das numerische Verfahren erwartet dann als Eingangsinformation N Tripel [2] (N = Stützstellenzahl) von z-Werten, sagen wir
  (9,43,122), (15,55,135), ...  (N Stück)
des folgenden Inhalts: Dem z-Wert 9 in Aufnahme Eins korrespondiert in Aufnahme Zwei der z-Wert 43 und in Aufnahme Drei der z-Wert 122. In der Weise dieses Anwachsens mit der Belichtungszeit steckt gerade die Charakteristik z=f(E⋅Δt), die das Verfahren zu extrahieren sucht. Angenommen nun, ein einzelner Pixel zeige in den drei Aufnahmen in der Tat die z-Werte (9, 43, 122). Es gebe im ersten Bild aber insgesamt 1000 Pixel mit z=9. Theoretisch, wenn alle Annahmen ideal erfüllt, sollten dann alle diese 1000 Punkte im zweiten Bild den Wert 43 und im dritten den Wert 122 aufweisen. Tatsächlich aber werden diese "Folgewerte" streuen, sei es, daß sich entgegen Annahme 4 im Motiv dennoch einige Objekte bewegten (Blätter im Wind, ziehende Wolken), sei es, daß die Kamerapositionen doch nicht gänzlich identisch waren, von Toleranzen der Fotoelemente noch ganz abgesehen. Auch spielt die Umgebung eine Rolle. Ein einzelner z=9 Wert umringt von z=0 und z=200 Werten dürfte das Opfer einer Überstrahlung sein und läßt auch seine Folgewerte weniger vertrauensweckend wirken als Werte in flacher Umgebung. In der intelligenten Bereitstellung dieser N Zahlentupel liegt also einiger Gestaltungsspielraum.

Derzeit wird diesbzgl. so verfahren: Zunächst werden die "Folgekurven" ermittelt, worunter ich nun dies verstehe: Für alle (z=0)-Punkte in Bild 1 wird ihr zugehöriger Folgewert in Bild 2 aufgesucht und der Mittelwert <z> all dieser sowie ihre Streuung Δz bestimmt. Das gibt für z=0 das Tripel (0, <z>, Δz). Und so für alle z-Werte 0, 1, ..., z_max im ersten Bild. Diese Mittelwerte <z> aufgetragen über z gibt die Folgekurve des Bildes 2 zum Referenzbild 1. Natürlich ist auch jedes andere Bild als Referenzbild möglich. Solche Kurven sind aufgeführt in der Karteikarte "Folgekurven", die Streuung Δz dabei angezeigt durch vertikale Balken. Folgekurven sind ein guter Indikator für die Qualität einer Datenbasis. Ideal sollte die Streuung minimal und der Anstieg möglichst gleichmäßig sein. Unten linkerhand ein Beispiel, wobei das mittlere Bild (grün) das Referenzbild gab. (Die "Pseudo-Folgekurve" des Referenzbildes selbst ist immer eine Gerade und ohne Streuung und wird nur der besseren Orientierung wegen mit eingetragen.) Rechts daneben sehen wir dieselben Aufnahmen, nur diesmal war das blaue Bild willkürlich um 20 Pixel gegen die beiden anderen verschoben worden. Die Streuung der blauen Kurve ist jetzt erheblich und der Verlauf nichtmonoton. Klar, daß eine auf solcher Datenbasis errechnete Antwortfunktion seltsam aussehen wird und das HDR-Bild mit kuriosen Farbverläufen das Auge beleidigen dürfte. Man bemerke ferner auch dies: Würde in dieser Situation das blaue Bild zum Referenzbild erhoben, wären beide Folgekurven (grün und rot) miserabel, statt nur der einen blauen. Die schwarze Linie zeigt übrigens das Histogramm: die Anzahl von Punkten im Referenzbild zum entsprechenden z-Wert; was noch fehlt ist der zugehörige Maßstab am rechten Rand.
[scrshot_follpanA.jpg] [scrshot_follpanB.jpg]

Aus den Folgekurven, und zwar für das aktuell gewählte Referenzbild, werden intern dann die oben erwähnten N Tupel ausgewählt (N vertikale Schnitte durch ein Folgekurven-Diagramm). Eine Bewertung der Umgebung der Pixel erfolgt gegenwärtig also nicht. Hier bleibt noch Raum für alternative Algorithmen.

Verschiebungen

Das Modul "Shift" ist vorgesehen, um geringfügige Verschiebungen der Bilder gegeneinander, wie sie bei amateurtölpelhaften Versuchen ohne Dreibein, Kamera auf dem Spatenstiel, wovon der Programmautor selbst das hohe Lied zu singen weiß, auftreten, wiederholt auftreten, ja, zu korrigieren und ungeschehen zu machen. Weil dieses Modul bisher nur in einer Rohversion vorhanden, erwähne ich es nur im Vorübergehen.

Arbeitsablauf

Zunächst eine typische Belichtungsreihe. Die hellsten Teile des Glühfadens liegen nebenbei bemerkt auch im dunkelsten Foto hier noch auf dem Sättigungswert (also außerhalb des Arbeitsbereiches) und würden weitere Abdunklungen durchaus vertragen:

[scrshot_reihe_klein.jpg]

Sobald mindestens zwei Bilder geladen sind, kann jederzeit über die "HDR"-Taste ein HDR-Bild — unter Benützung der gerade aktuellen numerischen Parameter — erzeugt werden. Besser geht man aber etwas systematischer vor, ungefähr so:

Nach dem Laden der Bilder und Abgleich der Aufnahmedaten wird im Folgekurven-Diagramm ein erster Blick auf die Qualität der Datenbasis geworfen; man spiele mit verschiedenen Referenzbildern! Gegebenenfalls können mit dem "Shift"-Modul, so es denn fertig sein wird, kleine Verschiebung der Bilder korrigiert werden, welcher Versuch insbesondere dann empfehlenswert, wenn die ursprünglichen Folgekurven bereits bedenklich stimmten.

Nun ist über die Methode zur Generierung der N Tupel zu entscheiden. Gegenwärtig beschränkt sich das darauf, in der "Folgekurven"-Karte ein solches Referenzbild festzulegen, für das die Folgekurven ein günstiges Gepräge annehmen. Später könnten hier alternative Algorithmen angeboten werden, noch wahrscheinlicher aber, daß dieser ganze Posten, zumindest in einer Standardvariante, später automatisiert sein wird.

[scrshot_ccd.jpg] Mit der "Compute Response"-Taste wird jetzt die Berechnung dreier Antwortfunktionen gestartet, für jeden Farbkanal eine, die in einem sich öffnenden Fenster beurteilt werden können. Nichtmonotone Verläufe wären in jedem Fall ein Grund zur Sorge, man überprüfe noch einmal die Wahl des Referenzbildes oder versuche es mit einem größeren Glättungskoeffizienten und berechene die Antwortfunktionen erneut. Sollten vernünftige Kennlinien mit maßvollen Glättungskoeffizienten λ ≤ 50 dennoch nicht zu erzielen sein, liegt möglicherweise ein Problem in den Ausgangsdaten vor. Es sind gegenwärtig vier Größen, die bei gegebenen Bilddaten die Antwortfunktion beeinflussen: 1) die Belichtungszeiten, 2) die Stützstellenzahl N, 3) der Glättungskoeffizient, 4) das Referenzbild. Jede Änderung einer der vier läßt eine dargestellte Kennlinie augenblicklich veralten und machte eine Neuberechnung erforderlich. Weil die Kennlinienberechnung aber der zeitaufwendigste Schritt, erfolgt diese Aktualisierung nicht automatisch, sondern immer erst nach ausdrücklicher Aufforderung durch die "Compute Response"-Taste.

[scrshot_hdr.jpg] Ein Klick auf die "HDR"-Taste berechnet — mit den zuletzt ermittelten Antwortfunktionen — schließlich ein HDR-Bild. Es prangt auf in einem eigenen Fenster als CinePaint-Bild. Das "32-bit IEEE Float" im Fenstertitel gibt kund, daß tatsächlich ein Gleitkommazahlen-Bild erzeugt wurde. Mit dem CinePaint-Farbenpflücker <Bildmenü> -> "Tools" -> "Color Picker" lassen sich die RGB-Daten auslesen, man bemerkt die Floatzahlen, per Konvention ist 1.0 der hellste darstellbare Wert jedes Farbkanals, in einem HDR-Bild können wohlverstanden jetzt auch Werte über 1.0 dabei sein.

[scrshot_hdr_gamma.jpg] [scrshot_gammaexpose.jpg]
Das im <Bildmenü> unter "Image" -> "Colors" -> "Gamma-Expose" aufzurufende CinePaint-Utensil [3] erlaubt mit dem "expose"-Regler verschiedene Belichtungen zu simulieren und gewissermaßen die Lichtsituationen der Ausgangsbilder noch einmal zu durchlaufen, allein diesmal kontinuierlich. Mit dem "gamma"-Regler kann von der Linearität (γ=1) des Helligkeitsübertragungsprofils abgewichen werden. Werte über 1.0 betonen die dunklen und die hellen Bereiche und rücken Helligkeitsdifferenzen, die bisher im Schwarzen oder Weißen untergingen, ins Sichtbare, auf Kosten natürlich der Auflösung der bisherigen Mitten. Damit lassen sich z.B. Feinheiten des Glühfadens zusammen mit Nuancen aus dunklen Bildstellen in einem einzigen Bild sichtbar machen, wie obiges Beispiel demonstriert. Anspruchsvollere Manipulationen werden natürlich dann auch die Vergrauung noch vermeiden, doch ist das bereits nicht mehr unser Thema hier, hier generieren wir die Ausgangsdaten für derlei.

Das Farbenspiel der Knöpfe

Bestimmte Anwenderaktionen lassen die Knöpfe "Init" und "Compute Response" eine gelbe oder blaue Farbe annehmen und manchmal auch inaktiv werden (ausgrauen). Darin werden nützliche Information über innere Programmzustände und die Aktualität präsentierter Daten mitgeteilt.

Bilder de/aktivieren

Es gibt im Programmkern zwei zentrale Instanzen, nennen wir sie den "Bildbehälter" und den "HDR-Kalkulator". Der Bildbehälter enthält alle aktuell geladenen und in der Tabelle gelisteten Bilder. Häufig jedoch will man, gerade beim Experimentieren und Ausprobieren, die HDR-Rechnungen (Antwortfunktion und Bild) nicht mit all diesen Bildern durchführen, sondern nur mit einigen von ihnen. Dies einfach zu gewähren dienen die grünen Aktivierungsknöpfe, damit lassen sich einzelne Bilder deaktivieren. Ein deaktiviertes Bild erscheint ausgegraut.

Neu geladene Bilder sind standardmäßig zunächst immer aktiviert.

Der "Init"-Knopf

Der HDR-Kalkulator führt die eigentlichen Rechnungen durch. Er muß initialisiert werden, und er wird initialisiert sozwar nur mit den aktivierten Bildern. Betätigung des "Init"-Knopfes veranlaßt händisch eine solche Initialisierung, einen solchen Abgleich auf den momentanen Zustand des Bildbehälters. Weil jede HDR-Rechnung stets mindestens zwei Eingangsbilder benötigt, kann auch der HDR-Kalkulator demgemäß nur initialisiert werden, sofern wenigstens zwei aktivierte Bilder im Bildbehälter präsent sind. Ist eine Initialisierung im gegenwärtigen Programmzustand unmöglich, zeigt sich der "Init"-Knopf inaktiv (ausgegraut). — Beim (Nach)Laden von Bildern wird stets versucht, den Kalkulator automatisch zu (re)initialisieren. Wird in einen leeren Bildbehälter hinein jedoch zunächst nur ein Bild geladen, kann nicht automatisch initialisiert werden, die "Init"-Taste erscheint danach ausgegraut — und blau. Blau bedeutet, daß gewissermaßen noch gar kein HDR-Kalkulator erzeugt werden konnte. — Existiert bereits ein HDR-Kalkulator und wird nun ein Bild de/aktiviert, färbt sich der "Init"-Knopf gelb. Gelb macht darauf aufmerksam, daß die im HDR-Kalkulator benutzten Bilder nicht mehr mit den momentan aktivierten Bildern übereinstimmen: eine Neuinitialisierung wäre erforderlich, sollten Ergebnisse tatsächlich für den jetztigen Satz aktivierter Bilder gewünscht sein.

Zusammengefaßt: Der "Init"-Knopf ist blau, wenn noch gar kein HDR-Kalkulator existiert, er hat Normalfarbe, wenn ein initialisierter HDR-Kalkulator existiert und die benutzten Bilder mit den momentan aktivierten übereinstimmen, er ist gelb, wenn diesbezüglich eine Differenz eingetreten ist; und er ist — gleich in welcher Farbe — inaktiv (ausgegraut), falls eine (Re)Initialisierung auf den gegewärtigen Satz aktivierter Bilder unmöglich ist.

Der "Compute Response"-Knopf

Ganz ähnlich verhält es sich mit dem Farbenspiel des "Compute Response"-Knopfes: Er ist blau, wenn noch überhaupt keine Kennlinie berechnet wurde — oder schon wieder vernichtet ward, wie das nach jeder Kalkulator-Reinitialisierung der Fall, er ist normalfarben, wenn eine solche Kennlinie vorliegt (dargestellt dann stets im Kennlinien-Fenster) und diese den aktuellen Parametern zugehört, er färbt sich gelb, sobald Parameteränderungen vorgenommen wurden, die aller Voraussicht nach zu einer anderen Kennlinie als der bestehenden führen würden. Gelb bedeutet also immer, daß etwas veraltete und einer Aktualisierung bedürfte. Und er wird inaktiv (ausgegraut), wenn der momentane Programmzustand eine Neuberechnung nicht zuläßt — z.B. weil noch gar kein HDR-Kalkulator erzeugt werden konnte.

Der "HDR"-Knopf

Der "HDR"-Knopf bewahrt sich gegenwärtig noch sein einheitlich graues Gepräge (obgleich ein analoges Prozedere sich auch hier anböte, ließe sich doch so über die Aktualität eines gezeigten HDR-Bildes berichten). Eine Betätigung des "HDR"-Knopfes veranlaßt die Erstellung eines HDR-Bildes und zwar nur die reine Bildberechnung unter Benützung der zuletzt ermittelten Antwortfunktionen, wenn solche existieren, oder aber die vollständige Neuberechnung, wenn keine solche angetroffen werden. Aus den Farben des links daneben befindlichen "Compute Response"-Knopfes läßt sich dabei ablesen, was jeweils passieren wird: Ist dieser grau, wird nur das HDR-Bild erstellt; ist dieser gelb, ebenfalls, allerdings mit veralteten Kennlinien, die schon nicht mehr den aktuellen Parametersatz repräsentieren; ist dieser blau, muß die komplette Rechnung ausgeführt werden, und es dauert entsprechend länger.

Schluß

Es handelt sich um die erste Version des Programms, Fehler und Mißgeschicke sind zu erwarten. Kommentare, Anregungen, Berichtigungen sowohl zum Programm selbst als auch zu diesem Text sind herzlich willkommen!


Hartmut Sbosny    <hartmut.sbosny@gmx.de>
Chemnitz, 2005


Fußnoten

[1] P. E. Debevec und J. Malik: "Recovering High Dynamic Range Radiance Maps from Photographs", in SIGGRAPH 97; [pdf document, 1.4 MB]. Link zu Debevecs HDR-Website.   (zurück zum Text)
[2] Tripel bei 3 Aufnahmen, P-Tupel bei P Aufnahmen   (zurück zum Text)
[3] In Version 0.20-0 ist unter "View" -> "Expose" eine zweite Variante hinzugekommen. Während mit dem althergebrachten "Gamma-Expose" die Bilddaten auch selbst geändert werden können, behelligt das neue "Expose" strikt nur noch die Ansicht.   (zurück zum Text)