Kurven für alle (Curves for all)

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Kurven für alle (Curves for all)

Beitragvon CHDKLover » 10.06.2010, 08:51

Hallo,

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)
Nachteile des Systems:
  • 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
Anwendung der neuen Kurvenfunktion:
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):
Bild

  • 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:
    Bild

    3.Bild - green1:
    Bild

    1.Bild - green2:
    Bild

    2.Bild - blue:
    Bild

    6.Bild - ev1:
    Bild

    4.Bild - ev2:
    Bild
    Zum Vergleich das Originalbild am PC um 2 EV korrigiert - ev2_pc:
    Bild

    5.Bild - ev3:
    Bild

  • 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):
    Bild

    10.Bild - green1 (linear,rgb):
    Bild

    8.Bild - green2 (linear,rgb):
    Bild

    9.Bild - blue (linear,rgb):
    Bild

    13.Bild - ev1 (linear,rgb):
    Bild

    11.Bild - ev2 (linear,rgb):
    Bild

    12.Bild - ev3 (linear,rgb):
    Bild

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: -
Dateianhänge
curves_for_all_public_beta.diff
BETA diff curves for all 1.0
(57.9 KiB) 776-mal heruntergeladen
curve1.lua
Testskript 2.0
(5.44 KiB) 780-mal heruntergeladen
Zuletzt geändert von CHDKLover am 29.07.2010, 20:20, insgesamt 7-mal geändert.
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Test mit IXUS100sd

Beitragvon TaiJiGong » 10.06.2010, 14:21

Hallo CHDKLover,

Ich habe Dein Testbuild für meine Kamera und das script installiert.

- Nach dem Starten des scripts wird ein Bild aufgenommen
- Anzeige wird schwarz
- Bild wird angezeigt
- Anzeige wieder schwarz und dann keine weitere Reaktion (15 Minuten gewartet)
- Objektiv bleibt ausgefahren
- Kamera aus ?

Neustart

Das aufgenommene Bild ist gespeichert, weitere Bilder sind nicht zu finden.


Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon CHDKLover » 10.06.2010, 14:46

Hallo TaiJiGong,
danke für deinen ersten Test!
Da wollte ich es so einfach wie möglich machen, wahrscheinlich hätte ich im Skript noch Wartezeiten einplanen sollen.

Kannst du bitte mal manuell (ohne Skript) versuchen eine Kurve zu verwenden?

Im Anhang hab ich meine rote Testkurve (red.ctc). Die musst du nur im Menüpunkt "Tonwertkuven" laden und Kurven aktivieren. Für alle nachfolgenden Bilder sollte die Kurve angewandt werden. Ich hoffe das funktioniert wenigstens.

Danke, CHDKLover
Dateianhänge
red.CTC
rote Testkurve
(115 Bytes) 754-mal heruntergeladen
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon TaiJiGong » 10.06.2010, 15:23

Hallo CHDKLover,

Mit dem file "red.ctc" geht es, dann wird der Rest wohl kein so grosses Problem sein/werden.

Vielleicht ein paar Wartezeiten hinzufügen und wenn möglich nach jedem Schritt eine Ausgabe auf dem Display, damit man weiss wie weit man gekommen ist.

Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon CHDKLover » 10.06.2010, 15:25

Hallo TaiJiGong,
das Script schreibt eigentlich ein Log zu finden unter CHDK/LOGS/

Ich hab noch paar Wartezeiten eingebaut. Kannst ja nochmal probieren, wenn du Zeit und Lust hast.

Danke für deine Hilfe, CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon TaiJiGong » 10.06.2010, 15:41

Hallo CHDKLover,

Das bearbeiten des Bildes braucht ca. 5-6 sec.

"CURVE_"1.LOG" hat 0 byte, Soll das Hochkomma nach dem "CURVE_" im filename enthalten sein ?

Im script denke ich ist es in Ordnung "curve_test.log", dann ist das wohl eine Anzeigeproblem. Wid auch so in LOGS Directory angelegt.

OK, Erneuter test habe das script nochmal heruntergeladen.

- Bild wird aufgenommen
- Display aus ca. 5-7 sec
- Display geht kurz an, und zeigt die Meldung:
- savigtime 1830ms
- Erstellungszeit = 4960 ms
- Display geht aus, dann keine weitere Reaktion.

Nur ein Neustart der Kamera ist dann möglich.

logfile wurde angelegt, aber nach wie vor 0 byte.

- wurde nicht erzeugt: curve_file_name="A/CHDK/CURVES/curve_test.ctc"
- Habe mal aus sleep (100) --> sleep (1000) gemacht, jedoch auch keine Änderung.



Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon Belichter » 10.06.2010, 20:49

Hallo CHDKLover,
also ein großes Lob und vielen Dank für die Kurvenanpassung an die 12bit Kameras.

Das musste ich so schnell wie möglich testen.

Die Aufnahme mit rot.ctc bringt ... ein rotes Bild. :D

Das Script curve1.lua startet, macht ein Bild, Screen dunkel,blaue LED an,
dann (Das Bild ist auch gespeichert)
nach kurzer Zeit:
Erstellungszeit = 6950ms
:115 bad argument #1 to
'sub' ( string expected,got nil)


Weitere Tests hoffentlich am Wochenende.

bis dann
IXUS 970 IS 100b
Belichter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 170
Bilder: 11
Registriert: 21.05.2009, 09:21
Wohnort: Solingen
Kamera(s): ixus 970 IS 100b

Beitragvon Hamster.78 » 10.06.2010, 21:18

Hallo CHDKLover,

ich habe einmal einen Test gestartet. Aufgefallen ist mir das immer das erste RAW Bild im \DCIM\10XCANON\ Ordner für die Berechnung genommen wird.
Nachdem ich alle RAW's gelöscht habe - hier einmal das Ergebnis von meiner SX100.

Galerie SX100 @curve1.lua

Die Resultate lassen sich schon sehen. Ich habe bisher keinen Fehler festgestellt, die Log wird sauber geschrieben. Und das Script läuft ohne Probleme durch.

Werde mich bei Gelegenheit einmal mit den Kurven-Generator beschäftigen.

gruß Hamster Bild
Dateianhänge
curve_test.log.txt
(573 Bytes) 754-mal heruntergeladen
◄ SX100 v100c ◄ Samsung NX10

CHDK DEThe Canon Camera Hackers Manual schon gelesen?
Benutzeravatar
Hamster.78
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 318
Registriert: 24.01.2009, 11:21
Wohnort: Sachsen / Chemnitz

Beitragvon CHDKLover » 10.06.2010, 21:26

Hallo ihr und danke für eure Hinweise,
das Problem liegt in der Suchrutiene, die das zuvor aufgenommene RAW-Fotos sucht, zu liegen. Dieses RAW Foto dient als Grundlagefür die nachfolgenden Berechnungen. Ihr könnt mal probieren statt (Zeile 179):
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
raw=getLastRAW()
Erstellt in 0.006 Sekunden, mit GeSHi 1.0.8.9

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
raw="A/DCIM/XXXCANON/<ein RAW Foto>.CRW"
Erstellt in 0.005 Sekunden, mit GeSHi 1.0.8.9

zu schreiben.

Es tut mir Leid, dass es doch solche Probleme mit dem Skript gibt.

CHDKLover
Zuletzt geändert von CHDKLover am 11.06.2010, 16:34, insgesamt 1-mal geändert.
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon TaiJiGong » 10.06.2010, 21:40

Hallo CHDKLover,

Endung muss wohl "CRW" sein, "DNG" geht nicht, habe ich also deaktiviert. Jetzt geht die Kamera nur noch nach dem entfernen des Akus. Werde ein anderes System booten und erst mal ein "CRW" file erzeugen,... dann mehr ...

Na wer sagt es denn, nun werden mehrer Bilder aufgenommen ...

Aber die erzeugten Bilder sehen alle gleich aus. Probiere es noch mal.

Viele Grüße, TaiJiGong
Dateianhänge
didi.log.txt
(593 Bytes) 756-mal heruntergeladen
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon CHDKLover » 10.06.2010, 22:00

Hallo TaiJiGong,
ja es dürfen keine DNG-RAWs sein!
Die Erstellungszeiten sind bei den ersten 7 Bilder fast genau so lange, wie die Erstellungszeiten, der letzten 7 Bilder. Das ist ungewöhnlich, oder hast du das Skript noch weiter modifiziert? Sehen deine Ergebnisse in etwa so aus wie meine Beispiele?

Danke für eure Hilfsbereitschaft, CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon TaiJiGong » 10.06.2010, 22:10

Hallo CHDKLover,

ich werde es morgen noch mal probieren (ausgehend von Deinem original script). Ich hatte im script den namen des log-files geändert, die sleep(), zusätzliche einträge ins log. Kann schon sein das ich dabei etwas zerstört habe. Kenne die Syntax der scripte auch noch nicht.

Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon h3px » 10.06.2010, 22:22

Hi Ho,

auf die Schnelle hier mal die Ergebnisse für die:

IXUS 870 --> http://picasaweb.google.de/h3px1a/Curves_Ixus870?feat=directlink
A590 --> http://picasaweb.google.de/h3px1a/Curves_A590?feat=directlink

Die für die A590 sehen irgendwie nicht so toll aus :)

Und für den Test habe ich eine "alte" Karte genommen.
Schnell formatiert. CHDK drauf, dann die neue DISKBOOT.BIN und das Script drauf.
Script laden und laufen lassen. Dann gibt es auch keine Fehlermeldung wegen der RAW-Datei.


Gruß h3px (der erst am Montag weitertesten kann)

Edit sagt: Habe auf der A590 noch mal schnell einen weiteren Versuch (mal mit Licht :-)) gestartet.
Bilder sehen aber genau so aus. Variationen von körnigem Schwarz-Weiß...
Benutzeravatar
h3px
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 365
Bilder: 10
Registriert: 15.01.2009, 20:38
Wohnort: ~ MUC
Kamera(s): S 110 103a - SX 260 101a
Ixus 870 101a - A590 101b

Beitragvon TaiJiGong » 11.06.2010, 08:52

Erneuter Test mit dem original script, nur path to RAW angepasst.

Bilder schauen fast alle gleich aus. (es sind nur 11)

Test:blue
Erstellungszeit = 30ms
Test:green1
Erstellungszeit = 30ms


Diese wurden wohl nicht erzeugt. Die anderen Bilder unterscheiden sich etwas (kann ja evtl. schon etwas Richtig sein)

Viele Grüße, TaiJiGong
Dateianhänge
imul.zip
Bilder
(595.43 KiB) 726-mal heruntergeladen
curve_test.log.txt
(562 Bytes) 724-mal heruntergeladen
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon TaiJiGong » 11.06.2010, 09:52

Hallo CHDKLover,

Und nun nochmal mit gutem Ergebnissen.

- Canon Kamera Settings zurückgesetzt.
- CCHDK.cfg gelöscht
- alle Bilder gelöscht
- Kurven an
- RAW Modus (ohne buffer option)
- Original script
- Akku entfernen und einsetzen
- log-file gelöscht

dann schauen die Bilder wohl in Ordnung aus.

Aber beim erneuten Versuch kommt folgender Fehler: (hat wohl das RAW-Bild nicht gefunden)

115: bad argument #1 to 'sub' (string expected, got nil)

Ein weiter Test Durchlauf ist nicht möglich, jetzt probiere ich es noch mal mit dem oben beschrieben komplett. Aber leider auch erst mal ohne Erfolg...

So schnell gibt man ja nicht auf, Jetzt geht es mal wieder (Warum ?), danach wieder nicht mehr ...



Die obigen Problem habe ja evtl. nichts mit den Kurven zu tun, vielleicht mehr mit dem TestScript.

Frage: Wo findet man ein paar Stützpunktdateien (*.CTC) zum testen ? Vielleicht kannst Du die von Dir erstellten uploaden.

Viele Grüße, TaiJiGong
Dateianhänge
imul.zip
Bilder
(1 MiB) 723-mal heruntergeladen
curve.log.txt
(580 Bytes) 744-mal heruntergeladen
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Nächste

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron