AV- / TV-Informationen für RAW-Bracketing-Files

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

AV- / TV-Informationen für RAW-Bracketing-Files

Beitragvon rr807 » 10.11.2008, 12:14

Hallo Enwtwickler,

ich bin gerade dabei, ein neues Feater zu implementieren:

Bei meinen Versuchen mit Belichtungsreihen bin ich auf PFScalibration zur Erzeugung von HDR-Files gestoßen. PFScalibration gehört zu den PFS-Tools, ist für Windows(MinGW), Linux und Mac als Open Source verfügbar, und hat bei mir bisher die besten Ergebnisse erzielt.
Für dieses PFScalibration wird normalerweise mit "jpeg2hdrgen" ein Script-File erzeugt, welches die Belichtungsinformationen aus den JPEGs extrahiert. Bei CRW muss man das Script manuell erstellen.

Das hat mich auf die Idee gebracht, dieses Script direkt in der Kamera zu erzeugen. Die dafür nötigen Informationen stehen ja zur Verfügung.

Hier ein Beispiel (CRW_7664.HDG):
Code: Alles auswählen
CRW_7664.CRW 12.987 2.7 100 0
CRW_7665.CRW 5.98802 2.7 100 0
CRW_7666.CRW 25 2.7 100 0
CRW_7667.CRW 3.33333 2.7 100 0
CRW_7668.CRW 50 2.7 100 0
CRW_7669.CRW 1.66667 2.7 100 0
CRW_7670.CRW 100 2.7 100 0

Aufbau: image_filename inverse_of_exposure_time_in_seconds aperture_size iso_speed 0
Der Name der Scripdatei wird von der ersten Aufnahme der Reihe übernommen: CRW_7664.HDG

Mit folgendem Shell-Befehl (Linux oder Windows-MinGW) wird dann automatisch ein HDR im openEXR-Format erzeugt:
Code: Alles auswählen
pfsinhdrgen CRW_7664.HDG | pfshdrcalibrate -v -b16 | pfsoutexr CRW_7664.HDR.EXR

oder mit einem Shell-Script ...
Code: Alles auswählen
for h in *.HDR
  do fsinhdrgen $h | pfshdrcalibrate -v -b16 | pfsoutexr ${h/.HDG/_HDR.EXR}
done

... werden automatisch aus ALLEN Belichtungsreihen die HDR-Files erzeugt.

fügt man dann z.B. noch ...
Code: Alles auswählen
pfsin ${h/.HDG/_HDR.EXR} | pfstmo_mantiuk06 | pfsout ${h/.HDG/_LDR.JPG}

... ein, so wird auch gleich zu jedem HDR per Tonemapping ein JPG erzeugt.

Wenn die Sache läuft, dann werde ich das Script noch verfeinern, so dass z.B. auch automatisches Ausrichten möglich ist, aber zuvor kämfe ich noch mit folgendem Problem:


Da ich noch nicht allzu erfahren mit dem CHDK-Code bin, bin ich bezüglich der Funktionen zur Rückgabe von Av und Tv etwas verwirrt. Welche Funktion liefert mir im Bracket-Mode die tatsechlich verwendeten Tv- und Av-Werte? Mit ISO war es einfach, da gibt es eine Funktion "shooting_get_iso_real()". Leider gibt's keine shooting_get_tv_real()"!
Für Tv benötige ich dem Wert dezimal in Sekunden als float .
Für Av die Blende ebenfalls als float.


Vielen Dank für Eure Hilfe!
Randolf
EOS 500D
Ixus 950IS mit CHDK
rr807
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 28.08.2008, 10:54

Beitragvon PhyrePhoX » 10.11.2008, 14:32

könnte hinfällig werden wenn ewavr den in-camera DNG modus erstellt. imo sind da auch die exif werte drin, die dann wiederum nativ von allen programmen ausgelesen und für hdrs verwendet werden können.
ansonsten zu der frage mit dem bracketing - hab ich keine ahnung, mit diesen funktionen hab ich mich bisher im chdk code garnicht beschäftigt.
btw kennste http://chdk.kernreaktor.org/documentation/ schon? coole sache :D
glaub in der shooting.c müsste alles sein ( http://chdk.kernreaktor.org/documentati ... 00526.html )
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31

Beitragvon rr807 » 10.11.2008, 17:34

Hallo PhyrePhoX,

anhand der Dokumentation sehe ich die verfügbaren Funktionen, Strukturen, etc...
Leider findet man keine Beschreibung, was da jeweils zurückgegeben wird.
Ich habe mal alle Tv-Funktionen ausprobiert, irgendwie habe ich aber aus keinem Rückgabewert eine sinnvolle Verschlusszeit ableiten können. Ich muss mal sehen, ob ich eine Zuordnung über die Tabelle "shutter_speeds_table[]" finde.

Randolf
EOS 500D
Ixus 950IS mit CHDK
rr807
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 28.08.2008, 10:54

Beitragvon CHDKLover » 10.11.2008, 18:09

Hallo rr807,
ich hab mir das gerade mal angesehen und folgendes geschrieben (ist nur ein Ansatz).
Der folgende Quellcodeauszug ersetzt das fi Konstrukt ab Zeile 60 in der raw.c.
Syntax: [ Download ] [ Verstecken ]
Benutze C Syntax Highlighting
    if(conf.tv_bracket_value || conf.av_bracket_value || conf.iso_bracket_value || conf.subj_dist_bracket_value) {

        if(state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) {

          br_counter = 1;

          memcpy(fn2,fn,sizeof(fn2));

          if(br_counter && conf.bracketing_add_raw_suffix && (shooting_get_prop(PROPCASE_DRIVE_MODE)!=0))

            sprintf(fn2+strlen(fn), RAW_BRACKETING_FILENAME, img_prefixes[conf.raw_prefix], get_target_file_num(), br_counter, ".HDG\0");

          else

            sprintf(fn2+strlen(fn), RAW_TARGET_FILENAME, img_prefixes[conf.raw_prefix], get_target_file_num(), ".HDG\0");

        } else

          br_counter++;

        if(br_counter && conf.bracketing_add_raw_suffix && (shooting_get_prop(PROPCASE_DRIVE_MODE)!=0))

          sprintf(fn, RAW_BRACKETING_FILENAME, img_prefixes[conf.raw_prefix], get_target_file_num(), br_counter, img_exts[conf.raw_ext]);

        else

          sprintf(fn, RAW_TARGET_FILENAME, img_prefixes[conf.raw_prefix], get_target_file_num(), img_exts[conf.raw_ext]);        

        fd = open(fn2, O_WRONLY|O_CREAT|O_APPEND, 0777);

        if (fd>=0) {

          sprintf(dir,"%s %f %d 100 0\n", fn, 1/shooting_get_shutter_speed_from_tv96(shooting_get_tv96()),shooting_get_av96);

          write(fd,dir,strlen(dir));

          close(fd);

        }

    }

    else

        br_counter=0;
Erstellt in 0.013 Sekunden, mit GeSHi 1.0.8.9


Aber die Blende wird noch nicht richtig ermittelt und auch sonst bin ich mir nicht sicher ob die richtigen Werte geschrieben werden.

CHDKLover
Zuletzt geändert von CHDKLover am 17.11.2008, 12:29, insgesamt 2-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 rr807 » 10.11.2008, 18:32

Hallo CHDKLover,

verwendest Du einen anderen Stand von CHDK?
Bei mir funktioniert das %f in sprintf() nicht! Ich mache da immer mit Divisor und Rest zweit Teile aus einem float.
Außerdem war bei mir O_APPEND nicht definiert.

"1/shooting_get_shutter_speed_from_tv96(shooting_get_tv96())" habe ich auch versucht. Irgendwie erkenne ich darin nicht die Verschlusszeit, bzw deren Kehrwert.
Den Rückgabewert von "shooting_get_tv96()" findet man in der Tabelle "shutter_speeds_table[]". Das wäre ja ein brauchbarer Ansatz, allerdings ist tv96 immer um einen Shoot versetzt!? Hier habe ich den Verdacht, dass beim Speichern des RAW der nächste Tv-Wert schon eingestellt ist. Das würde die Sache deutlich schwieriger machen.

AV funktioniert inzwischen mit "shooting_get_real_aperture()".
ISO funktioniert mit "shooting_get_iso_real()".

Gruß
Randolf
EOS 500D
Ixus 950IS mit CHDK
rr807
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 28.08.2008, 10:54

Beitragvon CHDKLover » 10.11.2008, 18:44

Nö, ich nutze das Standard dev-Kit für Windows. gcc 3.X
Vielleicht muss man einfach das ganze if Konstrukt vor "shooting_bracketing();" setzen.
O_APPEND geht bei mir auch nicht ich habe gerade versucht mit seek zu arbeiten aber auch das fruchtet bisher noch nicht.

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 rr807 » 11.11.2008, 15:00

Hallo CHDKLover,

Dein Tip war richtig. Liest man die EV-Werte vor "shooting_bracketing()", dann gibt "shooting_get_shutter_speed_from_tv96(shooting_get_tv96())" auch den korrekten Wert zurück.

Damit funktioniert die "hdrgen" Scripterstellung jetzt. Werde mal ein bischen testen, und mich wieder melden...

Danke
Randolf
EOS 500D
Ixus 950IS mit CHDK
rr807
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 28.08.2008, 10:54

Beitragvon CHDKLover » 17.11.2008, 12:28

Hallo rr807,
seit dem Build 566 scheint das O_APPEND für dryOS Kameras integriert zu sein. Ich hab es gerade für VxWorks getestet und es geht, wenn man in der "stdlib.h" in Zeile 18 folgendes einfügt (1:1 dryOS):
Syntax: [ Download ] [ Verstecken ]
Benutze C Syntax Highlighting
#define O_APPEND        0x8
Erstellt in 0.002 Sekunden, mit GeSHi 1.0.8.9

Achja, O_TRUNC solltest du dabei auf keinen Fall verwenden :D

Viel Spaß, 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 rr807 » 17.11.2008, 14:42

Hallo CHDKlover,

ich hatte die richtige Konstante für O_APPEND schon gefunden. Funktioniert mit S3IS und IXUS950, beides VXWORKS.

Meine Ergänzung funktioniert bei mir schon tadellos. Komme greade von einem Kurztrip aus Spanien zurück, auf dem ich kräftig testen konnte. Das automatische Erstellen der HDRs nach Übertragung auf den PC klappt im Prinzip wunderbar. Nur das Ausrichten von Belichtungsreihen, die aus der Hand geschossen wurden, klappt noch nicht so recht. PFSCalibrate kann nur leichte Verschiebungen ausgleichen. Vielleicht klappt es mit Hugin Image Align besser...

Wenn ich dann noch eine Option zum Ein- und Ausschalten im CHDK-Menü eingebaut habe, veröffentliche ich den ganzen Kram.

Bis dahin, hier ein paar meiner ersten automatisch erstellten HDRs:

Bild Bild Bild
Bild Bild
Bild Bild
Bild

Randolf
EOS 500D
Ixus 950IS mit CHDK
rr807
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 28.08.2008, 10:54

Beitragvon rr807 » 21.12.2008, 16:32

Ich habe mir jetzt auch mal DNG angesehen: KLASSE!
QTPFSGui kann alle Nötigen Infos daraus ziehen. Damit ist meine obige Ergänzung in der Tat nicht mehr von Nöten. Schade um die Arbeit, aber dafür gibt's eine bessere Lösung...

Randolf
EOS 500D
Ixus 950IS mit CHDK
rr807
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 28.08.2008, 10:54

Beitragvon PhyrePhoX » 22.12.2008, 23:12

inwiefern kann QTPFSGui alle informationen rausziehen? wie genau sieht jetzt dein workflow aus?
die "rename bracketed shots" erweiterung von dir nutzt du aber weiterhin?
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31


Zurück zu Code-Ecke

Wer ist online?

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