ich hab mich in den letzten Wochen intensiver mit dem Thema Tonwertkurven/Gradationskurven auseinandergesetzt, da diese Funktionalität bisher nur Kameras mit 10 Bit RAW's vorbehalten war. Dabei ist mir aufgefallen, dass auch einige 10 Bit Kameras die Kurven falsch ausgewertet haben. Betroffen sind höchst wahrscheinlich die a590is, a720is, ixus80, ixus860, ixus950, ixus980, ixus100is und die s5is.
Weiterhin sind für den Test besonders interessant alle 12 Bit Kameras sowie die G9, die IXUS i zoom und die SX20is.
Ich habe nun versucht das CHDK so zu erweitern, dass sowohl 12 Bit Kameras als auch alle 10 Bit Kameras mit den Kurven umgehen können.
Um sicherzustellen ob die Erweiterung nun auf allen Kameras korrekt arbeitet, brauch ich eure Hilfe.
Das bisherige Kurven-Modul:
Um eine Kurve zu erstellen musste eine Kurve mit dem Kurventool=Kurveneditor erstellt werden. Als Ergebnis entstanden 3 Dateien:
<name>.ctc = Stützpunktdatei um die Kurve im Kurveneditor später weiter zu bearbeiten
<name>.cfv = Interpolierte Kurve (10Bit) für L-Kurven
<name>.cf = Interpolierte Kurve (10Bit) für RGB-Kurven
Der Interpolationsmodus (kubische Splineinterpolation oder lineare Interpolation) konnte vor dem generieren der *.cfv und *.cf Kurvendateien gewählt werden. Der Nachteil dabei ist, dass eine Interpolierte Kurve nicht mehr so einfach nachträglich für jeden veränderbar ist, da die Stützpunkte nicht mehr als solche zu identifizieren sind. Das macht das System sehr statisch.
Die Kamera hat beim Start die Kurvendaten aus der Datei gelesen und bei Bedarf angewandt.
Das überarbeitete Kurven-Modul:
Technische Infos:
Was hat sich verändert?
Die Kurven werden nicht wie bisher von einem externen Programm interpoliert, sondern von der Kamera selbst. Dies hat den Vorteil, dass die Granularität der Interpolation genau auf den Sensortyp (10/12Bit) abgestimmt ist. Als Berechnungsgrundlage ließt die Kamera Stützpunktdateien (*.CTC) ein, deren Koordinatenpunkte gegebenenfalls skaliert (von 10Bit auf 12Bit oder von 12Bit auf 10Bit) und/oder von linearem Maßstab zu logarithmischen Maßstab umgerechnet werden (noch nicht vollständig umgesetzt) (Der Bildsensor hat eine logarithmische Wahrnehmung). Mit Hilfe dieser Stützpunkte kann die Kamera entweder eine kubische Splineinterpolation oder eine lineare Interpolation durchführen. Das Ergebnis ist bei 10Bit gleich zu den früheren Daten aus den *.CFV bzw. *.CF.
Vorteile des überarbeiteten Kurven-Moduls (wenn der Test erfolgreich ist):
- alle 12 Bit Kameras beherrschen die Bildmanipulation über Kurven
- alle 10 Bit Kameras interpretieren die Kurven korrekt
- Kurven können wie bisher mit dem Kurventool erstellt werden
- mehr Transparenz
- jeder kann die Kurven (Stützpunktdateien) nachträglich und zu jeder Zeit nach seinen Wünschen bzw. an seine Kamera anpassen
- Skripte die Kurven benutzen können diese jetzt selbst erstellen und sind somit unabhängig von der CHDK Konfiguration (siehe Testskript)
- theoretisch ist das System später auf bis zu 16 Bit Kurven erweiterbar
- Ein kamerainterner Kurveneditor ist möglich
- Das System ist um weitere Stützpunktdateiformate erweiterbar (Photoshop, ...)
- Kurven werden erst berechnet und in den Speicher geladen, wenn sie wirklich benötigt werden (ermöglicht eine schnellere Bereitzeit der Kamera)
- Verzögerung der Bilderstellung bei dem ersten Bild einer neu geladenen Kurve (nur wenn Kurven verwendet werden)
- noch nicht ausgiebig, mit realen praxisrelevanten Kurven getestet
Im Hauptmenü des CHDK's steht der Menüpunkt "Tonwertkuven" unter welchem man die Kurven laden und konfigurieren kann. Zur Konfiguration stehen sowohl der Kurventyp als auch der Interpolationsmodus. Mögliche Kurventypen sind "RGB-Curves" und "L-Curves" oder "AUTO". RGB Kurven sind eine 1:1 Abbildung des Sensorwertes auf den durch die Kurve vorgegebenen neuen Wert. Die L-Kurven (wahrscheinlich steht das L für Luminanz, wenn ich da falsch liege bitte ich um einen Hinweis) wichten die Farben Rot und Blau mit den nächsten Grünwert zu dem neuen Farbwert. Genaueres zur Erstellung von Kurven muss uns mal ein Insider für Kurvenerstellung verraten. Der Interpolationsmodus gibt an, ob ein kubischer Spline oder eine lineare Funktion die Stützpunkte verbindet. Wenn "AUTO" eingestellt ist, sucht die Kamera in den Stützpunktdateien bzw. im Dateinamen nach Schlüsselwörtern, mit denen sich das System konfigurieren lässt (funktioniert bisher nur bei den CHDK-Kurves (*.ctc))
Infos zur Kurvenkonfiguration bei der Kurvenerstellung:
Schlüsselwörter für den Interpolationsmodus sind:
Spline:
"spline", "cub", "kub"
Linear:
"lin"
Schlüsselwörter für den Kurventyp sind:
RGB-Kurve:
"rgb"
L-Kurve:
"lum", "lcurve"
Dabei ist die Groß/Kleinschreibung sowie die Position bei den Schlüsselwörtern egal.
Bsp:
linear enthält die Phrase "lin" und wird somit linear Interpoliert werden
Test:
DNG-Rohformat muss deaktiviert sein!
Um den Test so einfach wie nur möglich zu machen habe ich für alle momentan verfügbaren Kameras ein Testbuild kompiliert, welches hier zu finden ist. Vor dem starten eines Testbuilds empfehle ich das sichern der Konfigurationsdatei ("CHDK/CCHDK.CFG"). Außerdem habe ich ein kleines Testskript geschrieben, welches einen vollautomatischen Testlauf durchführt (siehe Anhang). Die Reihenfolge der Bilder ist leider unlogisch, dies bitte ich zu entschuldigen. Der Testlauf dauert ca. 3 min. Als Ergebnis sollten Bilder entstehen, deren Charakteristik mit folgen Bildern vergleichbar ist:
Vergleichsbilder meiner A610:
Originalbild (mit Absicht etwas zu dunkel, damit die Kurven ev1, ev2, ev3 noch sinnvolle Ergebnisse liefern):
- Die nachfolgenden Bilder sind über eine kubische Splineinterpolation Interpoliert und L-Kurven (sind die ersten 7 Bilder, die das Testskript macht, logisch sortiert):
7.Bild - red:
3.Bild - green1:
1.Bild - green2:
2.Bild - blue:
6.Bild - ev1:
4.Bild - ev2:
Zum Vergleich das Originalbild am PC um 2 EV korrigiert - ev2_pc:
5.Bild - ev3: - Die nachfolgenden Bilder sind linear Interpoliert und RGB-Kurven (sind die letzten 7 Bilder, die das Testskript macht, logisch sortiert):
14.Bild - red (linear,rgb):
10.Bild - green1 (linear,rgb):
8.Bild - green2 (linear,rgb):
9.Bild - blue (linear,rgb):
13.Bild - ev1 (linear,rgb):
11.Bild - ev2 (linear,rgb):
12.Bild - ev3 (linear,rgb):
Mögliche Abweichungen rühren meiner Meinung nach daher, das die Kamera bei der JPG Erstellung einige Farbraumkorrekturen vornimmt. Demzufolge gibt es Unterschiede von Kamera zu Kamera, da diese Korrekturen Kameraabhängig sind. Wenn man mehr darüber weiß, könnte man versuchen solchen Effekten entgegenzuwirken.
Danke für eure Unterstützung, CHDKLover
erfolgreich getestet:
10 Bit: A590, a610, SX100
12 Bit: IXUS 870, IXUS 970, SX20, SX200
nicht erfolgreich getestet:
10 Bit: -
12 Bit: -