[Lua] Dark Frame per Skript erzeugen

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

Dark Frame per Skript erzeugen

Beitragvon msl » 17.11.2010, 18:48

Hallo CHDK-Bastler,

oft wird die Frage gestellt, wie man ein Dark Frame (Dunkelbild) erzeugt. Meistens wird dann ein Foto mit abgedunkeltem Objektiv erstellt. Aber warum wollen wir nicht auch für diesen Anwendungsfall CHDK benutzen. Man schließt einfach den mechanischen Verschluss am Objektiv der Kamera während der Aufnahme.

Wie geht das nun aber? In CHDK ist eine Möglichkeit eingebaut, per Lua-Skript-Befehl direkt auf kameraeigene Funktionen bzw. Prozeduren zuzugreifen. Diese Möglichkeit stellt auch eine gewisse Gefahr dar. Man sollte sich genau überlegen, was man macht. Mit dieser Methode ist durchaus auch möglich, das kameraeigene Betriebssystem zu zerstören! Aus diesem Grund ist diese Möglichkeit in der Standard-CHDK-Version auch nicht aktiviert.

Erstellt man sich mit der CHDK-Shell aber selbst eine CHDK-Version (selbst compilieren), hat man die Möglichkeit, die beschriebene Funktionalität freizuschalten. Es handelt sich dabei um die Funktion OPT_LUA_CALL_NATIVE, die man aktivieren muss. Auf den CHDK-Wiki-Seiten kann man mehr zu "Call Native Function" nachlesen.

Edit: Die Funktion ist ab Revision 465 CHDK-DE standardmäßig verfügbar!

Steht eine entsprechende CHDK-Version zur Verfügung, kann das nachfolgende Skript benutzt werden. Es wurde von fudgey entwickelt und in diesem Thema im int. Forum beschrieben. Ich habe lediglich Konsolenausgaben und Kommentare auf deutsch angepasst sowie eine Restore-Funktion hinzugefügt.

Das Skript erkennt das Betriebssystem der Kamera und richtet danach die notwendigen Funktionen zum Schließen und Öffnen des mechanischen Verschlusses ein. Sollte eine entsprechende Prozedur nicht verfügbar sein, wird das Skript mit einer Fehlermeldung abbrechen.

Es wird nun ein Foto mit abgeschalteter Rauschreduktion erstellt. Anschließend macht die Kamera ein weiteres Foto - aber mit geschlossenem mechanischen Verschluss - mit den Einstellungen des ersten Fotos. Es wird jeweils ein RAW/DNG und ein JPG erzeugt. Man kann vor dem eigentlichen Skriptablauf die entsprechenden Kameraeinstellungen vornehmen, so z.B. (längere) Verschlusszeiten. Das Skript selbst benötigt keine Parametereinstellungen.


Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
@title Foto + Dark-Frame
by fudgey 2010/11/16
zzgl. DE-Anpassung + Restore by msl
--]]


propcase=require("propcase")

-- Speichere Einstellungen RAW + Rauschreduktion
rawmode=get_raw()
dfrmode=get_raw_nr()

-- Verschluss-Kontrolle-Prozedur abhängig vom Kamera-betriebssystem
-- openshutter() und closeshutter() zur Steuerung des mech. Verschlusses
function init()
    -- Überprüfung Native-Call-Interface:
    if (type(call_event_proc) ~= "function" ) then
        error("Dein CHDK unterstützt Native Calls nicht")
    end    
 
    local bi=get_buildinfo()
 
    if bi.os=="vxworks" then
        closeproc="CloseMShutter"
        openproc="OpenMShutter"
        if (call_event_proc("InitializeAdjustmentFunction") == -1) then
            error("InitAdjFunc fehlt")
        end
    elseif bi.os=="dryos" then
        closeproc="CloseMechaShutter"
        openproc="OpenMechaShutter"
        if (call_event_proc("Mecha.Create") == -1) then
            error("Mecha.Create fehlt")
        end    
    else
        error("Unbekanntes OS:" .. bi.os)
    end

    -- mech. Verschluss schließen
    function closeshutter()
        if (call_event_proc(closeproc) == -1) then
            print("closeshutter fehlt")
        end
    end

    -- mech. Verschluss öffnen
    function openshutter()
        if (call_event_proc(openproc) == -1) then
            print("openshutter fehlt")
        end
    end

    -- Ist Aufnahmenahme-Modus Foto aktiviert?
    rec,vid=get_mode()
    if rec ~= true then
        error("Kein Aufnahme-Modus")
    elseif vid == true then
        error("Video nicht unterstützt")
    end
end -- Ende init()

-- Diese Funktion wird auch bei Skriptabbruch aufgerufen.
function restore()
    -- Wiederherstellung der Einstellungen für RAW und Rauschreduzierung
    set_raw(rawmode)
    set_raw_nr(dfrmode)
    -- möglicherweise muss der Verschluss bei Skriptabbruch wieder geöffnet werden.
    if (type(openshutter) == "function" ) then
        openshutter()
    end
end

-- Speichere aktuelle Belichtungswerte (nach halbgedrücktem Auslöser und automatischer Berechnung)
function get_exposure_params()
    print("Werte speichern")
    --tv96=get_tv96() -- Verschlusszeit
    --sv96=get_sv96() -- ISO
    tv96=get_prop(propcase.TV) -- Verschlusszeit
    sv96=get_prop(propcase.SV) -- ISO
    if get_nd_present() ~= 1 then -- Av-Wert wenn Kamera Irisblende hat
        --av96=get_av96()
        av96=get_prop(propcase.AV)
    end
end

-- Setze gespeicherte Belichtungswerte (nach halbgedrücktem Auslöser und automatischer Berechnung)
function set_exposure_params()
    print("Werte setzen")
    --set_tv96_direct(tv96) -- Verschlusszeit
    --set_sv96(sv96) -- ISO
    set_prop(propcase.TV,tv96) -- Verschlusszeit
    set_prop(propcase.SV,sv96) -- ISO
    if get_nd_present() ~= 1 then -- Av-Wert wenn Kamera Irisblende hat
        --set_av96_direct(av96)
        set_prop(propcase.AV,av96)
    end
end

function expcontrol_shoot(dark)
    -- halber Auslöser und warten Belichtungswerte ermittelt sind
    press("shoot_half")
    repeat
        sleep(1)
    until get_shooting() == true
 
    if dark == true then -- wenn Dark-Frame
        set_exposure_params() -- Setze gespeicherte Werte
        closeshutter() -- Schließe Verschluss
        sleep(1) -- möglicherweise nicht notwendig
    end
 
    -- Foto machen
    press("shoot_full")
    sleep(1)

    if dark ~= true then -- Foto machen und Werte speichern
        get_exposure_params()
    end
    -- Shooting abschließen
    release("shoot_full")
    sleep(1)
    release("shoot_half")
    repeat
        sleep(1)
    until get_shooting() ~= true
end

-- Skript-Start
init()

set_raw(1) -- aktiviere RAW/DNG
set_raw_nr(1) -- Rauschreduktion (Dark-Frame-Subtraktion) ausschalten

print("Shooting RAW+JPG")
expcontrol_shoot(false) -- Foto machen und Werte speichern
print("Shooting Dark Frame")
expcontrol_shoot(true) -- Dark-Frame mit gespeicherten Werten machen

restore() -- Wiederherstellung von Voreinstellungen
Erstellt in 0.011 Sekunden, mit GeSHi 1.0.8.9


Das Skript könnte sicherlich ein guter Ansatz sein, Langzeitbelichtungen mit passendem Dark Frame zu organisieren.

Gruß msl
Dateianhänge
DFshoot.lua
Dark Frame Shooting mit deutscher Kommentierung
(4.04 KiB) 477-mal heruntergeladen
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Dark Frame per Skript erzeugen

Beitragvon Herr Nelius » 18.11.2010, 00:06

Hallo msl

Hab ma bissl drüber nachgedacht und dabei rausgekommen is dat hier:
1) Bei meiner Spiegelreflex funktioniert das doch genau so....da bleibt einfach der vorhang zu;)
2) haben überhaupt alle kompakten von canon einen mechanischen verschluss? Ich glaub zu wissen, dass anderen Firmen teilweise gar keinen mehr einbauen
3) Kann ich mir nicht wirklich vorstellen, dass dadurch die Mechanik Schadem nehmen könnte, wenn, dann kann vielleicht die Software rumzicken, falls sie den veränderten Vorgang als Fehler identifiziert

So und dann is mein Gehirn hängen geblieben......
Liebe Grüße
Herr Nelius
A620 + 40D
erste mit neuster CHDK Version
Herr Nelius
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 79
Registriert: 08.06.2008, 11:57
Wohnort: Stuttgart

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 18.11.2010, 00:45

Hallo Herr Nelius,

2) haben überhaupt alle kompakten von canon einen mechanischen verschluss?


darüber bin ich auch gestolpert, ich weiss es aber nicht, ich denke nicht.(ich halte das für eine (pseudo) Funktion), da wird wohl der output des Sensor gelöscht und dann minimal Belichtet.

Ich kenne aus dem Low-Cost Bereich keine Kamena die das macht, Im High-End Bereich gibt es das LEAF,Phaseone, Hasselblad aber die können dann "nur" mit mechanischen Verschluss arbeiten was auch sehr lästig ist, da man nicht mit jedem Objektiv arbeiten kann. (Verschluss ist in das Objektiv integriert)

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon msl » 18.11.2010, 16:34

Bevor man hier orakelt, sollte man das Skript erst mal ausprobieren.

Fakt ist, dass alle Kameras, die ein Live-Bild auf dem Monitor liefern, den Sensor offen halten müssen. Deshalb ist bei DLSRs ein Live-Bild auch schwieriger zu organisieren. Meistens kommt hier ein zweiter Sensor für das Live-Bild zum Einsatz. Wir reden aber von Kompaktkameras. Bei denen wird das Verschließen zur Fotoerstellung fast immer elektronisch erledigt. Nur so können u.a. auch ultra-kurze Verschlusszeiten durch CHDK möglich gemacht werden.

Trotzdem gibt es aber auch einen mechanischen Verschluss. Dieser kommt z.B. zumindest bei Kameras mit zusätzlichen optischen Suchern zum Einsatz, wenn die LCD-Anzeige ausgeschaltet wird. In Ermanglung einer Kamera ohne optischen Sucher kann ich nicht sagen, ob dieser mechanische Verschluss auch bei diesen Kameras verfügbar ist. Die kameraspezifische Funktion zum Öffnen und Schließen des mechanischen Verschlusses wird es zeigen. Wenn nicht verfügbar, wird das Skript eine entsprechende Fehlermeldung ausgeben.

Und warum haben die Canon-Ingenieure die Funktionen OpenMechaShutter bzw. CloseMechaShutter genannt ...

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 19.11.2010, 00:53

Hallo msl,

finde ich schon Interressant, habe das Script herunter geladen. Geht auf der IXUS100, macht 2 Bilder hintereinander. Ergebniss schaue ich mir morgen an.

Ein mechanischer Shutter hätte ich nicht erwartet, kenne hauptsächlich "Industrie" Kameras.

Den zusätzlichen optischen Suchern hat die IXUS100.

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 19.11.2010, 09:27

Hallo Zusammen,

Das 2. Bild DarkFrame:

Histogram:

Value Count
0 7691107
1 2866203
2 974445
3 332448
4 101880
5 26516
6 6034
7 1135
8 193
9 25
10 7
11 1
12 1
13 4
14 1
15 0

Hier das Bild um den Faktor 10 verstärkt:

Bild

Beide Aufnahmen wurden mit 1/60 sec gemacht. Den Blitz hätte man wohl bei geschlossen Verschlus nicht gebraucht.

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 22.11.2010, 23:07

Hallo Zusammen,

Trotzdem gibt es aber auch einen mechanischen Verschluss. Dieser kommt z.B. zumindest bei Kameras mit zusätzlichen optischen Suchern zum Einsatz, wenn die LCD-Anzeige ausgeschaltet wird.


Das Ergebniss zeigt das das wohl der Fall ist. Gerne würde ich probieren wie ich das geht (LCD-Anzeige ausgeschaltet).

Das obige Histogramm war aus den von der Kamera erzeugten Darkframe JPEG erstellt, Schön zu sehen wie das Rauschen (bei einer 12 BIT A/D-Wandler Kamera) auch immer noch bei 8 Bit zu sehen ist. Bestätigt mich in etwa, in meiner Meinung das die Kamera max. 7 Bit auflöst. Eine RAW-Bild mit 8 Bit würde es da doch auch tun und könnte etwas an kürzerer Speicherzeit bringen. Was sich noch aus dem Darkframe herausholen läst, weis ich nicht, evtl. wohin ich den Schwarz-Wert legen sollte.

Interressant wäre dazu ob das über die gesamte Sensorfläche rel. konstant ist, oder ob es Bereiche gibt, die ein unterschiedliches Rauschverhalten haben, dann könnte man mit dieser Information schon etwas anfangen. Bei meiner Aufnahme war das offentsichtlich nicht der Fall, könnte aber bei Langzeitaufnahmen anderst aussehen.

Das sollte man sich mal genauer anschauen.

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon tier » 24.11.2010, 00:16

Wenn die Cams einen meschanischen Verschluss haben, dann kann man den auch hören!
Warscheinlicher ist, dass die belichteten CCD-Zellen in abgeschattete Zellen verschoben werden und erst dann ausgelesen werden.
Besser beschrieben in:
http://de.wikipedia.org/wiki/CCD-Sensor ... 8IT_CCD.29

Ein DarkFrame ist dann das Abbild( Falschlicht/Rauschen) der SchattenZellen. Durchaus nützlich um Rauschen zu minimieren und wenn dadurch die Bildqualität besser wird, dann macht die Cam es mit Sicherheit auch, denn sie soll ja gute Bilder( JPG) liefern.
Wo der DarkFram was bringen, kann ist die RAW Aufnahme.
Fuji F70, Canon a495-100f-1.1.0_ALPHA_rev_531
tier
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 21.09.2010, 23:56

Re: Dark Frame per Skript erzeugen

Beitragvon msl » 24.11.2010, 00:42

tier hat geschrieben:Wenn die Cams einen meschanischen Verschluss haben, dann kann man den auch hören!

So ist es. Also wie gesagt nicht orakeln, sondern Skript testen (wenn man denn eine CHDK-taugliche Kamera hat ;) ), dann hört man auch das entsprechende Geräusch.

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Dark Frame per Skript erzeugen

Beitragvon tier » 24.11.2010, 01:35

msl hat geschrieben:
tier hat geschrieben:Wenn die Cams einen meschanischen Verschluss haben, dann kann man den auch hören!

So ist es.


Haben alle Canon Kammaras d.H. auch die 'Einfachen' z.Z.: A490, ... einen Verschluss?

Gruß tier

edit: tier ist zu doof für 'quote'

 ! msl hat geschrieben:
Das tier ist nicht zu doof. Man darf nur nicht unterhalb des Editorfenster unter Optionen "BBCode ausschalten" aktivieren. ;)
Fuji F70, Canon a495-100f-1.1.0_ALPHA_rev_531
tier
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 24
Registriert: 21.09.2010, 23:56

Re: Dark Frame per Skript erzeugen

Beitragvon msl » 24.11.2010, 10:39

Ich kann nur für meine Kamera bzw. alle Kameras mit optischem Sucher sprechen. Da trifft es bestimmt zu.

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 25.11.2010, 01:13

Hallo msl,

Ich denke man sollte mal mehrere (20-50) der DarkFrames erzeugen und schauen ob man daraus zusätzliche Informationen gewinnen kann. Z.B. die Entfindlichkeit der einzelnen Pixel. Wenn Charateristische Informationen enthalten sind, sollte man das bei einer Summenbildung der DarkFrames sehen.

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 25.11.2010, 22:13

Hallo msl,

es evtl. recht einfach möglich in dein Script eine Schleife einzubauen, damit man N Aufnahmen hintereinander machen kann. Leider kenne ich LUA nicht, würde aber gerne mal testen, was für Charakteristiken ein aufsummiertes DarkFrame aufweist.

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 28.11.2010, 01:40

Hallo msl,

Wie ist das Script von Dir codiert. Leider nicht in ASCII/UTF-8, Welches encoding ? Wäre schöne wenn man das auch unter LINUX leicht edititeren/ändern könnte.

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, 21:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: Dark Frame per Skript erzeugen

Beitragvon TaiJiGong » 03.01.2011, 22:17

Hallo msl,

gibt es eine leichte Möglichkeit z.Bsp. per PTP (lua) eine Dark Frame Aufnahme zu machen ?

Ich würde gerne eine größere Reihe von Dark Frame's erzeugen und diese dann mal auswerten.


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, 21: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 1 Gast