enfuse_pro-2.1.2/ 0000775 0001750 0001750 00000000000 13070514464 013203 5 ustar klemmh klemmh enfuse_pro-2.1.2/de_DE/ 0000775 0001750 0001750 00000000000 13063533620 014140 5 ustar klemmh klemmh enfuse_pro-2.1.2/de_DE/LC_MESSAGES/ 0000775 0001750 0001750 00000000000 13066523520 015726 5 ustar klemmh klemmh enfuse_pro-2.1.2/de_DE/LC_MESSAGES/enfuse_pro.po 0000664 0001750 0001750 00000042433 13066523520 020441 0 ustar klemmh klemmh msgid ""
msgstr ""
"Project-Id-Version: Lua image path\n"
"POT-Creation-Date: 2017-03-19 20:33+0100\n"
"PO-Revision-Date: 2017-03-19 21:32+0100\n"
"Last-Translator: Holger Klemm\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.4\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-KeywordsList: \n"
"X-Poedit-SearchPath-0: .\n"
#: enfuse_pro.lua:10
msgid "image align options"
msgstr "Bildausrichtungs-Optionen"
#: enfuse_pro.lua:10
msgid "image fusion options"
msgstr "Bildverschmelzungs-Optionen"
#: enfuse_pro.lua:10
msgid "target file"
msgstr "Speicherziel"
#: enfuse_pro.lua:10
msgid "directory"
msgstr "Verzeichnis"
#: enfuse_pro.lua:10
msgid "optimize radial distortion for all images"
msgstr "Optimierung der radialen Verzerrung"
#: enfuse_pro.lua:10
msgid "optimize radial distortion for all images, \nexcept for first"
msgstr "Optimierung der radialen Verzerrung für \nalle Bilder, mit Ausnahme des ersten Bildes"
#: enfuse_pro.lua:10
msgid "optimize field of view for all images"
msgstr "Optimierung des Bildausschnitts"
#: enfuse_pro.lua:10
msgid "optimize field of view for all images, except for first. \nUseful for aligning focus stacks (DFF) with slightly \ndifferent magnification."
msgstr "Optimiere das Bildausschnitts für alle Bilder, \nmit Ausnahme des ersten Bildes. Die Option ist \nnützlich zum Ausrichten von DFF Bildern \n(Focus Stacking) mit leicht unterschiedlicher\n Abbildungsverhältnissen."
#: enfuse_pro.lua:10
msgid "optimize image center shift for all images"
msgstr "Optimierung der Bildmittenverschiebung"
#: enfuse_pro.lua:10
msgid "optimize image center shift for all images, \nexcept for first."
msgstr "Optimiere die Bildmittenverschiebung für alle Bilder,\n mit Ausnahme des ersten Bildes"
#: enfuse_pro.lua:10
msgid "auto crop the image"
msgstr "Bilder automatisch zuschneiden"
#: enfuse_pro.lua:10
msgid "auto crop the image to the area covered by all images."
msgstr "Automatisches Zuschneiden von allen Bildern über den Schnittmengen Bereich."
#: enfuse_pro.lua:10
msgid "load distortion from lens database"
msgstr "Objektivkorrektur aus der Datenbank laden"
#: enfuse_pro.lua:10
msgid "try to load distortion information from lens database"
msgstr "Versucht die Informationen zur Objektivverzeichnung\n aus der Datenbank zu laden"
#: enfuse_pro.lua:10
msgid "hard mask"
msgstr "Harte Maske"
#: enfuse_pro.lua:10
msgid "force hard blend masks on the finest scale. this avoids \naveraging of fine details (only), at the expense \nof increasing the noise. this improves the \nsharpness of focus stacks considerably.\ndefault (soft mask)"
msgstr "Erzwingt die verschmelzung über die Harte Maske\n auf der feinsten Skala. Dies vermeidet die \nVermittelung feiner Details, zu ungunsten \nerhöhten Bildrauschens. Die Option sollte \nbei DFF (Focus Stacking) angewendet werden. \nStandard (Weiche Maske)"
#: enfuse_pro.lua:10
msgid "save masks"
msgstr "Masken speichern"
#: enfuse_pro.lua:10
msgid "Save the generated weight masks to your home directory,\nenblend saves masks as 8 bit grayscale, \ni.e. single channel images. \nfor accuracy we recommend to choose a lossless format."
msgstr "Speichert die erzeugte Gewichtungsmaske in Ihren Home\n Verzeichnis. Enfuse speichert die Maske als \n8-Bit Graustifenbild, d.h. Einkanal-Bild. \nWegen der Genauigkeit wird von Enfuse ein \nverlustfreies Bildformat empfohlen. Das \nPlugin speichert daher die Masken im TIFF Format."
#: enfuse_pro.lua:10
msgid "exposure weight"
msgstr "Belichtungsgewichtung"
#: enfuse_pro.lua:10
msgid "set the relative weight of the well-exposedness criterion \nas defined by the chosen exposure weight function. \nincreasing this weight relative to the others will\n make well-exposed pixels contribute more to\n the final output. \ndefault: (1.0)"
msgstr "Setzt die relative Gewichtung des Kriteriums \nrichtig Belichtet, wie es die gewählte \nFunktion definiert hat. Erhöhung dieser \nGewichtung in relation zu den anderen wird\n richtig belichteten Pixel helfen. \nStandardwert: (1.0)"
#: enfuse_pro.lua:10
msgid "saturation weight"
msgstr "Sättigungsgewichtung"
#: enfuse_pro.lua:10
msgid "set the relative weight of high-saturation pixels. \nincreasing this weight makes pixels with high \nsaturation contribute more to the final output. \ndefault: (0.2)"
msgstr "Setzt die relative Gewichtung von hoch \ngesättigten Pixeln. Erhöhung dieser \nWichtung führt zu höher gesättigten \nPixeln die zum endgültigen Bild \nbeitragen. \nStandardwert: (0.2)"
#: enfuse_pro.lua:10
msgid "contrast weight"
msgstr "Kontrastgewichtung"
#: enfuse_pro.lua:10
msgid "sets the relative weight of high local-contrast pixels. \ndefault: (0.0)."
msgstr "Setzt die relative Gewichtung von hohen, \nlokalen Kontrast Pixel. \nStandardwert: (0.0) "
#: enfuse_pro.lua:10
msgid "exposure optimum"
msgstr "Feinabstimming Belichtungsgewichtung"
#: enfuse_pro.lua:10
msgid "determine at what normalized exposure value\n the optimum exposure of the input images\n is. this is, set the position of the maximum\n of the exposure weight curve. use this \noption to fine-tune exposure weighting. \ndefault: (0.5)"
msgstr "Die Funktion legt fest, bei welchem normalisierten\n Belichtungswert die optimale Belichtung \ndes Eingangsbildes liegt. Dies stellt, \ndie Position vom Maximum der Belichtungkurve\n ein. Benutzen Sie diese Funktion zur \nFeinabstimmung der Belichtungsgewichtung. \nStandardwert: (0.5) "
#: enfuse_pro.lua:10
msgid "exposure width"
msgstr "Belichtungsweite"
#: enfuse_pro.lua:10
msgid "set the characteristic width (FWHM) of the exposure \nweight function. low numbers give less weight to \npixels that are far from the user-defined \noptimum and vice versa. use this option to \nfine-tune exposure weighting. \ndefault: (0.2)"
msgstr "Setzt die charakteristische Breite (FWHM) der \nBelichtungswichtungsfunktion. Niedrige \nWerte geben weniger Wichtung auf Pixel, \ndie weit von Opimim entfernd und \numgekehrt. Verwenden Sie diese Funktion\n zur Feinabstimming der Belichtungsgewichtung. \nStandardwert: 0.2)"
#: enfuse_pro.lua:10
msgid "Select export path"
msgstr "Wählen Sie das Ausgabeverzeichnis"
#: enfuse_pro.lua:10
msgid "select the target directory for the fused image. \nthe filename is created automatically."
msgstr "Setzt das ausgewählte Zielverzeichnis \nfür das verschmolzene Bild. Der Dateiname \nwird automatisch vergeben."
#: enfuse_pro.lua:10
msgid "image grid size"
msgstr "Rastergröße für die Kontrollpunkte"
#: enfuse_pro.lua:10
msgid "break image into a rectangular grid \nand attempt to find num control points in each section.\ndefault: (5x5)"
msgstr "Unterteilt das Bild in rechteckige Raster\n und versucht Kontrollpunkte in jedem \nRasterabschnitt zu finden. \nStandardwert: (5x5 Pixel)"
#: enfuse_pro.lua:10
msgid "control points/grid"
msgstr "Kontrollpunkte pro Raster"
#: enfuse_pro.lua:10
msgid "number of control points (per grid, see option -g) \nto create between adjacent images \ndefault: (8)."
msgstr "Anzahl der Kontrollpunkte pro Rasterabschnitt \n die zur Ausrichtung der Bilder untereinander\n dienen. \nStandardwert: (8)"
#: enfuse_pro.lua:10
msgid "remove control points with error"
msgstr "Entferne Kontrollpunkte mit Fehlern"
#: enfuse_pro.lua:10
msgid "remove all control points with an error higher \nthan num pixels \ndefault: (3)"
msgstr "Entferne alle Kontrollpunkte mit Fehlern höher als Pixelanzahl. \nStanddardwert: (3)"
#: enfuse_pro.lua:10
msgid "correlation threshold for control points"
msgstr "Korrelationsschwelle für Kontrollpunkte"
#: enfuse_pro.lua:10
msgid "correlation threshold for identifying \ncontrol points \ndefault: (0.9)."
msgstr "Korrelationsschwelle zur Identifizierung von Kontrollpunkten. \nStandardwert: (0.9)."
#: enfuse_pro.lua:10
msgid "contrast window size"
msgstr "Fenstergröße lokaler Kontrast"
#: enfuse_pro.lua:10
msgid "set the window size for local contrast analysis. \nthe window will be a square of size × size pixels. \nif given an even size, Enfuse will \nautomatically use the next odd number.\nfor contrast analysis size values larger \nthan 5 pixels might result in a \nblurry composite image. values of 3 and \n5 pixels have given good results on \nfocus stacks. \ndefault: (5) pixels"
msgstr "Hier stellen Sie die Fenstergröße für die lokale \nKontrastanalyse ein. Für Kontrastanalyse können\n Größenwerte größer als 5 Pixel zu einem mit \nperfekt zusammengesetzten Bild führen. Werte \nvon 3 und 5 Pixeln haben gute Ergebnisse \nbeim DFF (Fokus-Stacking) gegeben. \nStandardwert: (5) Pixel"
#: enfuse_pro.lua:10
msgid "contrast edge scale"
msgstr "Gaussian Radius für Kantenerkennung"
#: enfuse_pro.lua:10
msgid "a non-zero value for EDGE-SCALE switches on the \nLaplacian-of-Gaussian (LoG) edge detection algorithm.\n edage-scale is the radius of the Gaussian used \nin the search for edges. a positive LCE-SCALE \nturns on local contrast enhancement (LCE) \nbefore the LoG edge detection. \nDefault: (0.0) pixels."
msgstr "Ein Wert ungleich Null schaltet den Laplace-of-Gaußschen\n (LoG) Kantenerfassungsalgorithmus ein. \nEdage-Skala ist der Gaussian Radius, der \nbei der Suche nach Kanten verwendet wird. \nEine positive LCE-SCALE schaltet die lokale\n Kontrastverstärkung (LCE) vor der LoG-Kantenerkennung ein. \nVoreinstellung: (0.0) Pixel."
#: enfuse_pro.lua:10
msgid "contrast min curvature"
msgstr "Min. Krümmung für LoG Kantenerkennung"
#: enfuse_pro.lua:10
msgid "define the minimum curvature for the LoG edge detection. Append a ‘%’ to specify the minimum curvature relative to maximum pixel value in the source image. Default: (0.0%)"
msgstr "Definieren die minimale Krümmung für die\n LoG-Kantenerkennung. Der Wert gibt die\n minimale Krümmung relativ zum maximalen\n Pixelwert vom Quellbild an. \nStandard: (0,0%)"
#: enfuse_pro.lua:10
msgid "on conflict"
msgstr "bei Konflikten"
#: enfuse_pro.lua:10
msgid "create unique filename"
msgstr "umbennen"
#: enfuse_pro.lua:10
msgid "overwrite"
msgstr "überschreiben"
#: enfuse_pro.lua:10
msgid "create image variants with saved presets"
msgstr "Erstelle Bildvarianten mit Voreinstellungen"
#: enfuse_pro.lua:10
msgid "creates image variants with the three \nsaved HDR or DFF presets"
msgstr "Erstellt Bildvarianten mit Hilfe der drei \nabgespeicherten HDR oder DFF Voreinstellungen"
#: enfuse_pro.lua:10
msgid "save fusion preset"
msgstr "Voreinstellungen speichern"
#: enfuse_pro.lua:10
msgid "save the selected fusion preset"
msgstr "Speichert die aktuelle Voreinstellung \nzum Verschmelzung ab"
#: enfuse_pro.lua:10
msgid "preset HDR 1 saved"
msgstr "Voreinstellung HDR 1 wurde gespeichert"
#: enfuse_pro.lua:10
msgid "preset HDR 2 saved"
msgstr "Voreinstellung HDR 2 wurde gespeichert"
#: enfuse_pro.lua:10
msgid "preset HDR 3 saved"
msgstr "Voreinstellung HDR 3 wurde gespeichert"
#: enfuse_pro.lua:10
msgid "preset DFF 1 saved"
msgstr "Voreinstellung DFF 1 wurde gespeichert"
#: enfuse_pro.lua:10
msgid "preset DFF 2 saved"
msgstr "Voreinstellung DFF 2 wurde gespeichert"
#: enfuse_pro.lua:10
msgid "preset DFF 3 saved"
msgstr "Voreinstellung DFF 3 wurde gespeichert"
#: enfuse_pro.lua:10
msgid "preset free saved"
msgstr "Voreinstellung FREE wurde gespeichert"
#: enfuse_pro.lua:10
msgid "unkown error"
msgstr "Ein unbekannter Fehler ist aufgetreten"
#: enfuse_pro.lua:10
msgid "load fusion preset defaults"
msgstr "Voreinstellungen auf Standard zurücksetzen"
#: enfuse_pro.lua:10
msgid "load the default fusion preset settings"
msgstr "Setzt die aktuelle Voreinstellung auf \ndie Standardwerte zurück"
#: enfuse_pro.lua:10
msgid "file format"
msgstr "Dateiformat"
#: enfuse_pro.lua:10
msgid "fusion preset"
msgstr "Voreinstellung"
#: enfuse_pro.lua:10
msgid "select the preset and save the preset\n if you want to reuse it or create an image\n variant"
msgstr "Wählen Sie eine Voreinstellung aus und \nspeichern die Änderung ab, wenn Sie die \nEinstellungen wiederverwenden wollen \noder Bildvariante erstellen möchten"
#: enfuse_pro.lua:10
msgid "process successfully completed"
msgstr "Prozess erfolgreich abgeschlossen"
#: enfuse_pro.lua:10
msgid "ERROR: exiftool doesn't work. for more informations see terminal output"
msgstr "ERROR: exiftool funktioniert nicht. Für weitere Informationen siehe Terminalfenster"
#: enfuse_pro.lua:10
msgid "ERROR: enfuse doesn't work. for more informations see terminal output"
msgstr "ERROR: enfuse funktioniert nicht. Für weitere Informationen siehe Terminalfenster"
#: enfuse_pro.lua:10
msgid "export TIFF for image fusion "
msgstr "Exportiere TIFF Bilder für Bildverschmelzung "
#: enfuse_pro.lua:10
msgid "ERROR: align_image_stack not found. please install hugin."
msgstr "ERROR: align_image_stack wurde nicht gefunden. Bitte installieren Sie hugin"
#: enfuse_pro.lua:10
msgid "ERROR: enfuse not found. please install enfuse."
msgstr "ERROR: enfuse wurde nicht gefunden. Bitte installieren Sie enfuse"
#: enfuse_pro.lua:10
msgid "ERROR: wrong enfuse version found. the plugin works only with enfuse 4.2! please install enfuse version 4.2"
msgstr "ERROR: Es wurde eine falsche enfuse Version gefunden. \nDas Plugin funktioniert nur mit enfuse Version 4.2. \nBitte installieren Sie enfuse in Version 4.2"
#: enfuse_pro.lua:10
msgid "ERROR: no target directory selected"
msgstr "ERROR: Es wurde kein Zielverzeichnis ausgewählt"
#: enfuse_pro.lua:10
msgid "aligning images"
msgstr "Richte Bilder aus"
#: enfuse_pro.lua:10
msgid "ERROR: not enough pictures selected. please select two or more images\nfrom the same object, but with different camera settings."
msgstr "ERROR: Es wurden nicht genug Bilder ausgewählt. \nBitte wählen Sie zwei oder mehr Bilder vom selben Objekt, \naber mit unterschiedlichen Kameraeinstellungen aus."
#: enfuse_pro.lua:10
msgid "you have selected more then 20 images. the align and fuse process could take a very long time! \nhave a nice beake."
msgstr "Sie haben mehr als 20 Bilder ausgewählt. Die \nAusrichtung und der Verschmelzungsprozess \nkann sehr lange dauern! \nHaben Sie eine schöne Pause."
#: enfuse_pro.lua:10
msgid "aligning complete"
msgstr "Bildausrichtung komplett"
#: enfuse_pro.lua:10
msgid "fuse image with HDR 1 presete"
msgstr "Verschmelze Bild mit Voreinstellung HDR 1"
#: enfuse_pro.lua:10
msgid "fuse image with HDR 2 presete"
msgstr "Verschmelze Bild mit Voreinstellung HDR 2"
#: enfuse_pro.lua:10
msgid "fuse image with HDR 3 presete"
msgstr "Verschmelze Bild mit Voreinstellung HDR 3"
#: enfuse_pro.lua:10
msgid "fuse image with DFF 1 presete"
msgstr "Verschmelze Bild mit Voreinstellung DFF 1"
#: enfuse_pro.lua:10
msgid "fuse image with DFF 2 presete"
msgstr "Verschmelze Bild mit Voreinstellung DFF 2"
#: enfuse_pro.lua:10
msgid "fuse image with DFF 3 presete"
msgstr "Verschmelze Bild mit Voreinstellung DFF 3"
#: enfuse_pro.lua:10
msgid "ERROR: align_image_stack doesn't work. For more information see terminal output"
msgstr "ERROR: align_image_stack funktioniert nicht. Für weitere Informationen siehe Terminalfenster"
#: enfuse_pro.lua:10
msgid "enfuse pro: use GPU for remaping"
msgstr "enfuse pro: Verwende GPU für Bildausrichtung"
#: enfuse_pro.lua:10
msgid "set the GPU remapping for image align"
msgstr "Beschleunigt die Bildausrichtung in dem es Rechenoperatoren auf die Grafikkarte auslagert"
#: enfuse_pro.lua:10
msgid "enfuse pro: copy exiv tags"
msgstr "enfuse pro: Kopieren der exiv Tags"
#: enfuse_pro.lua:10
msgid "copy the exiv tags from the first image to the target"
msgstr "Kopiert die exiv Tags vom ersten Bild aus das Ausgabebild"
#: enfuse_pro.lua:10
msgid "enfuse pro: add fused image to database"
msgstr "enfuse pro: Verschmolzenes Bild in die Datenbank einfügen"
#: enfuse_pro.lua:10
msgid "add the fused image to the darktable database"
msgstr "Fügt das fertig verschmolzene Bild in die Darktable Datenbank ein"
#: enfuse_pro.lua:10
msgid "enfuse pro: JPEG compression"
msgstr "enfuse pro: JPEG Kompression"
#: enfuse_pro.lua:10
msgid "set the compression for JPEG files"
msgstr "Setzt die Kompression vom JPEG Dateien"
#: enfuse_pro.lua:10
msgid "enfuse pro: TIFF compression"
msgstr "enfuse pro: TIFF Kompressionsverfahren"
#: enfuse_pro.lua:10
msgid "set the compression type for tiff files"
msgstr "Setzt den Kompressionstyp von TIFF Dateien"
#: enfuse_pro.lua:10
msgid "enfuse pro: image color depth (bit)"
msgstr "enfuse pro: Farbtiefe (bit)"
#: enfuse_pro.lua:10
msgid "set the output color depth"
msgstr "Setzt die Farbtiefe der Ausgabedatei"
#: enfuse_pro.lua:10
msgid "fusion to hdr or dff photo"
msgstr "verschmelzen als HDR oder DFF Foto"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset HDR 1"
msgstr "verschmelze mit Voreinstellungen von HDR 1"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset HDR 2"
msgstr "verschmelze mit Voreinstellungen von HDR 2"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset HDR 3"
msgstr "verschmelze mit Voreinstellungen von HDR 3"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset DFF 1"
msgstr "verschmelze mit Voreinstellungen von DFF 1"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset DFF 2"
msgstr "verschmelze mit Voreinstellungen von DFF 2"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset DFF 3"
msgstr "verschmelze mit Voreinstellungen von DFF 3"
#: enfuse_pro.lua:10
msgid "enfuse with value from free preset"
msgstr "verschmelze mit Voreinstellungen von FREE"
#: enfuse_pro.lua:10
msgid "creating HDR or DFF image"
msgstr "Erstelle HDR oder DFF Bild"
enfuse_pro-2.1.2/README 0000664 0001750 0001750 00000010565 13070514464 014072 0 ustar klemmh klemmh The script enfuse_pro.lua version 2.1.1 works with darktable 2.2.X and 2.3
Darktable Plugin Enfuse Professional Version 2.1.2
License: GPL
Script dependencies:
- darktable 2.2.X or 2.3
- Lua 5.2 / Lua 5.3
- align_image_stack (hugin)
- enfuse 4.2
- exivtool
Installation on e.g. Ubuntu:
1.) First, the Lua script language must be installed with the following commands:
sudo apt-get update
sudo apt-get install liblua5.2-0 liblua5.2-dev lua5.2 lua5.2-doc
2.) The program align_image_stack (contained in hugin-tools), enfuse in version 4.2 and exivtool is required for the creation of the HDR and DFF (Focus Stacking) images.
Install the software with the command:
sudo apt-get install hugin-tools enfuse libimage-exiftool-perl
3.) If it does not already exist, create the following directories:
~/.config/darktable/lua/contrib
~/.config/darktable/lua/de_DE/LC_MESSAGES
4.) Copy the Lua script enfuse_pro.lua
~/.config/darktable/lua/contrib
5.) To start the script the luarc file has to be created or edited. The text file ~ / .config / darktable / luarc has to be opened or created with a text editor.
Add the following to the luarc file:
require "contrib/enfuse_pro"
6.) If you want to have the script in German, you have to compile the file enfuse_pro.po from the folder de_DE / LC_MESSAGES. This is done with the following command:
msgfmt -v enfuse_pro.po -o enfuse_pro.mo
Copy or move the enfuse_pro.mo file to the directory ~/.config/darktable/lua/de_DE/LC_MESSAGES
Translations into other languages are welcome! Just send the po file with the language to darktable@multimedia4linux.de.
After a restart of darktable the plugin under the name "pseudo hdr or dff image" or "merge as HDR or DFF photo" should appear in the export function from the lettuce.
In the global presets under the tab Lua Options there are further settings for the plug-in.
Have fun
Updates can be found on the Multimedia4Linux homepage
http://www.multimedia4linux.de
-----------------------------------------------------------------------------------------------------------------------------
Das Skript enfuse_pro.lua funktioniert ab Version 2.1.1 mit darktable 2.2.X und 2.3
Darktable Plugin Enfuse Professional Version 2.1.2
Lizenz: GPL
Skript Abhänigkeiten:
- darktable 2.2.X oder 2.3
- Lua 5.2 bzw. Lua 5.3
- align_image_stack (hugin)
- enfuse 4.2
- exivtool
Installation auf z.B. Ubuntu:
1.) Zuerst muss die Lua Skriptsprache mit den folgenden Befehlen installiert werden:
sudo apt-get update
sudo apt-get install liblua5.2-0 liblua5.2-dev lua5.2 lua5.2-doc
2.) Für die Erzeugung der HDR und DFF (Focus Stacking) Bilder wird das Programm align_image_stack (enthalten in hugin-tools), enfuse in Version 4.2 und exivtool benötigt.
ACHTUNG: Es wird nur Enfuse in Version 4.2 unterstützt!
Installien Sie die Software mit dem Befehl:
sudo apt-get install hugin-tools enfuse libimage-exiftool-perl
3.) Falls noch nicht vorhanden erstellen Sie die folgende Verzeichnise:
~/.config/darktable/lua/contrib
~/.config/darktable/lua/de_DE/LC_MESSAGES
4.) Kopieren Sie das Lua Skript enfuse_pro.lua nach
~/.config/darktable/lua/contrib
5.) Zum starten vom Skript muss jetzt noch die luarc Datei angelegt bzw. editiert werden. Die Textdatei ~/.config/darktable/luarc ist mit einen Texteditor zu öffnen bzw. anzulegen.
Fügen Sie in die luarc Datei folgendes ein:
require "contrib/enfuse_pro"
6.) Wenn Sie das Skript in deutsch haben wollen, dann müssen Sie die Datei enfuse_pro.po aus dem Ordner de_DE/LC_MESSAGES noch kompilieren. Das geht mit dem folgenden Befehl:
msgfmt -v enfuse_pro.po -o enfuse_pro.mo
Die Datei enfuse_pro.mo kopieren oder verschieben Sie dann ins Verzeichnis ~/.config/darktable/lua/de_DE/LC_MESSAGES
Übersetzungen in andere Sprachen sind herzlich willkommen! Einfach die po Datei mit der Sprachangabe an darktable@multimedia4linux.de schicken.
Nach einem Neustart von darktable sollte das Plugin unter der Bezeichnung "fusion to hdr or dff image" bzw. "verschmelzen als HDR oder DFF Foto" in der Export Funktion vom Leuttisch erscheinen.
In den globalen Voreinstellungen unter dem Reiter Lua-Optionen gibt es weitere Einstellmöglichkeiten zum Plugin.
Ein deutsches Benutzerhandbuch finden Sie unter:
http://www.multimedia4linux.de/index.php/bildbearbeitung/darktable/darktable-plugin-enfuse-professional
Viel Spass
Updates finden Sie auf der Multimedia4Linux Homepage
http://www.multimedia4linux.de enfuse_pro-2.1.2/enfuse_pro.lua 0000664 0001750 0001750 00000225152 13067235577 016075 0 ustar klemmh klemmh --[[
Enfuse professional plugin for darktable 2.2.X and 2.3.X
copyright (c) 2017 Holger Klemm
darktable is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
darktable is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with darktable. If not, see .
]]
--[[
Version 2.1.2 for darktable 2.2.X
Known bugs:
Change report:
- fix exif option
- fix re-import option
- add proess bar
- add french translation
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
* align_image_stack
* enfuse
* exiftool
USAGE
* require this file from your main luarc config file.
This plugin will add the new export modul "fusion to HDR or DFF image".
]]
local dt = require "darktable"
local gettext = dt.gettext
-- work with LUA API version 4.0.0 and 5.0.0
dt.configuration.check_version(...,{4,0,0},{5,0,0})
-- Tell gettext where to find the .mo file translating messages for a particular domain
gettext.bindtextdomain("enfuse_pro",dt.configuration.config_dir.."/lua/")
local function _(msgid)
return gettext.dgettext("enfuse_pro", msgid)
end
-- command variables
-- align
cmd_align_radial_distortion=""
cmd_align_optimize_field=""
cmd_align_optimize_center=""
cmd_align_auto_crop=""
cmd_align_distortion=""
cmd_align_grid_size=""
cmd_align_control_points=""
cmd_align_control_points_remove=""
cmd_align_correlation=""
cmd_align_use_gpu=""
-- enfuse
cmd_enfuse_exposure_weight=""
cmd_enfuse_saturation_weight=""
cmd_enfuse_contrast_weight=""
cmd_enfuse_exposure_optimum_weight=""
cmd_enfuse_exposure_width_weight=""
cmd_enfuse_hard_masks=""
cmd_enfuse_save_masks=""
cmd_enfuse_contrast_window_size=""
cmd_enfuse_contrast_edge_scale=""
cmd_enfuse_contrast_min_curvature=""
cmd_enfuse_color_depth=""
cmd_enfuse_compression=""
first_imagefile=""
last_imagefile=""
cmd_tmp_path=""
cmd_output_path=""
cmd_output_image=""
cmd_output_image_index=0
path_with_filename=""
homepath=os.getenv("HOME")
tmppath=homepath.."/.local/tmp"
-- exif
cmd_exif_copy_exif=""
-- output
cmd_suffix_output_format=""
-- commands
alignStartCommand=""
enfuseStartCommand=""
exixStartCommand=""
outputindex=0
job=0
-- initialize combobox and checkbox value for default
if (dt.preferences.read("enfuse_pro", "selected_fusion", "integer") == 0) or (dt.preferences.read("enfuse_pro", "selected_overwrite", "integer") == 0) then
-- align defaults
dt.preferences.write("enfuse_pro", "selected_fusion", "integer", 1) --Typ HDR
dt.preferences.write("enfuse_pro", "checked_radial_distortion", "bool", false)
dt.preferences.write("enfuse_pro", "checked_optimize_field", "bool", false)
dt.preferences.write("enfuse_pro", "checked_optimize_image_center", "bool", true)
dt.preferences.write("enfuse_pro", "checked_auto_crop", "bool", true)
dt.preferences.write("enfuse_pro", "checked_distortion", "bool", true)
dt.preferences.write("enfuse_pro", "selected_grid_size", "integer", 5)
dt.preferences.write("enfuse_pro", "selected_control_points", "integer", 8)
dt.preferences.write("enfuse_pro", "selected_control_points_remove", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_correlation", "integer", 9)
-- enfuse defaults
dt.preferences.write("enfuse_pro", "selected_fusion_type", "integer", 1)
dt.preferences.write("enfuse_pro", "checked_image_variants", "bool", false)
dt.preferences.write("enfuse_pro", "checked_hard_masks", "bool", false)
dt.preferences.write("enfuse_pro", "checked_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_exposure_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_saturation_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_contrast_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_exposure_width_weight", "float",0.2)
dt.preferences.write("enfuse_pro", "selected_overwrite", "integer",1)
dt.preferences.write("enfuse_pro", "sentitiv_overwrite", "bool",true)
-- preset HDR 1
dt.preferences.write("enfuse_pro", "checked_hdr1_hard_masks", "bool", false)
dt.preferences.write("enfuse_pro", "checked_hdr1_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_hdr1_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_hdr1_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_hdr1_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_hdr1_exposure_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_hdr1_saturation_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_hdr1_contrast_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_hdr1_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_hdr1_exposure_width_weight", "float",0.2)
-- preset HDR 2
dt.preferences.write("enfuse_pro", "checked_hdr2_hard_masks", "bool", false)
dt.preferences.write("enfuse_pro", "checked_hdr2_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_hdr2_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_hdr2_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_hdr2_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_hdr2_exposure_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_hdr2_saturation_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_hdr2_contrast_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_hdr2_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_hdr2_exposure_width_weight", "float",0.2)
-- preset HDR 3
dt.preferences.write("enfuse_pro", "checked_hdr3_hard_masks", "bool", false)
dt.preferences.write("enfuse_pro", "checked_hdr3_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_hdr3_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_hdr3_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_hdr3_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_hdr3_exposure_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_hdr3_saturation_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_hdr3_contrast_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_hdr3_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_hdr3_exposure_width_weight", "float",0.2)
-- preset DFF 1
dt.preferences.write("enfuse_pro", "checked_dff1_hard_masks", "bool", true)
dt.preferences.write("enfuse_pro", "checked_dff1_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_dff1_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_dff1_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_dff1_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_dff1_exposure_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_dff1_saturation_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_dff1_contrast_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_dff1_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_dff1_exposure_width_weight", "float",0.2)
-- preset DFF 2
dt.preferences.write("enfuse_pro", "checked_dff2_hard_masks", "bool", true)
dt.preferences.write("enfuse_pro", "checked_dff2_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_dff2_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_dff2_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_dff2_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_dff2_saturation_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_dff2_contrast_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_width_weight", "float",0.2)
-- preset DFF 3
dt.preferences.write("enfuse_pro", "checked_dff3_hard_masks", "bool", true)
dt.preferences.write("enfuse_pro", "checked_dff3_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_dff3_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_dff3_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_dff3_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_dff3_exposure_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_dff3_saturation_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_dff3_contrast_weight", "float", 1.0)
dt.preferences.write("enfuse_pro", "set_dff3_exposure_optimum_weight", "float", 0.5)
dt.preferences.write("enfuse_pro", "set_dff3_exposure_width_weight", "float",0.2)
-- preset FREE
dt.preferences.write("enfuse_pro", "checked_free_hard_masks", "bool", false)
dt.preferences.write("enfuse_pro", "checked_free_save_masks", "bool", false)
dt.preferences.write("enfuse_pro", "selected_free_contrast_window_size", "integer", 3)
dt.preferences.write("enfuse_pro", "selected_free_contrast_edge_scale", "integer", 1)
dt.preferences.write("enfuse_pro", "selected_free_contrast_min_curvature", "integer", 1)
dt.preferences.write("enfuse_pro", "set_free_exposure_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_free_saturation_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_free_contrast_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_free_exposure_optimum_weight", "float", 0.0)
dt.preferences.write("enfuse_pro", "set_free_exposure_width_weight", "float",0.0)
-- output
dt.preferences.write("enfuse_pro", "selected_output_format", "integer", 2)
end
--GUI
local separator1 = dt.new_widget("separator")
{
}
local separator1b = dt.new_widget("separator")
{
}
local separator2 = dt.new_widget("separator")
{}
local separator2b = dt.new_widget("separator")
{}
local label_line1= dt.new_widget("label")
{
label = "_______________________________________________",
ellipsize = "start",
halign = "end"
}
local label_line2= dt.new_widget("label")
{
label = "_______________________________________________",
ellipsize = "start",
halign = "end"
}
local label_line3= dt.new_widget("label")
{
label = "_______________________________________________",
ellipsize = "start",
halign = "end"
}
local label_align_options= dt.new_widget("label")
{
label = _('image align options'),
ellipsize = "start",
halign = "end"
}
local label_enfuse_options= dt.new_widget("label")
{
label = _('image fusion options'),
ellipsize = "start",
halign = "end"
}
local label_output_format= dt.new_widget("label")
{
label = _('target file'),
ellipsize = "start",
halign = "end"
}
local label_path = dt.new_widget("label")
{
label = _('directory'),
ellipsize = "start",
halign = "start"
}
check_button_radial_distortion = dt.new_widget("check_button")
{
label = _('optimize radial distortion for all images'),
value = dt.preferences.read("enfuse_pro", "checked_radial_distortion", "bool"),
tooltip =_('optimize radial distortion for all images, \nexcept for first'),
clicked_callback = function(distortion)
if (distortion.value) then
dt.preferences.write("enfuse_pro", "checked_radial_distortion", "bool", true)
cmd_align_radial_distortion="-d"
-- return
else
dt.preferences.write("enfuse_pro", "checked_radial_distortion", "bool", false)
cmd_align_radial_distortion=""
-- return
end
end,
}
check_button_optimize_field = dt.new_widget("check_button")
{
label = _('optimize field of view for all images'),
value = dt.preferences.read("enfuse_pro", "checked_optimize_field", "bool"),
tooltip =_('optimize field of view for all images, except for first. \nUseful for aligning focus stacks (DFF) with slightly \ndifferent magnification.'),
clicked_callback = function(field)
if (field.value) then
dt.preferences.write("enfuse_pro", "checked_optimize_field", "bool", true)
cmd_align_optimize_field="-m"
-- return
else
dt.preferences.write("enfuse_pro", "checked_optimize_field", "bool", false)
cmd_align_optimize_field=""
-- return
end
end,
}
check_button_optimize_image_center = dt.new_widget("check_button")
{
label = _('optimize image center shift for all images'),
value = dt.preferences.read("enfuse_pro", "checked_optimize_image_center", "bool"),
tooltip =_('optimize image center shift for all images, \nexcept for first.'),
clicked_callback = function(center)
if (center.value) then
dt.preferences.write("enfuse_pro", "checked_optimize_image_center", "bool", true)
cmd_align_optimize_center="-i"
-- return
else
dt.preferences.write("enfuse_pro", "checked_optimize_image_center", "bool", false)
cmd_align_optimize_center=""
-- return
end
end,
}
check_button_auto_crop = dt.new_widget("check_button")
{
label = _('auto crop the image'),
value = dt.preferences.read("enfuse_pro", "checked_auto_crop", "bool"),
tooltip =_('auto crop the image to the area covered by all images.'),
clicked_callback = function(auto)
if (auto.value) then
dt.preferences.write("enfuse_pro", "checked_auto_crop", "bool", true)
cmd_align_auto_crop="-C"
-- return
else
dt.preferences.write("enfuse_pro", "checked_auto_crop", "bool", false)
cmd_align_auto_crop=""
-- return
end
end,
}
check_button_distortion = dt.new_widget("check_button")
{
label = _('load distortion from lens database'),
value = dt.preferences.read("enfuse_pro", "checked_distortion", "bool"),
tooltip =_('try to load distortion information from lens database'),
clicked_callback = function(distortion)
if (distortion.value) then
dt.preferences.write("enfuse_pro", "checked_distortion", "bool", true)
cmd_align_distortion="--distortion"
-- return
else
dt.preferences.write("enfuse_pro", "checked_distortion", "bool", false)
cmd_align_distortion=""
-- return
end
end,
}
check_button_hard_masks = dt.new_widget("check_button")
{
label = _('hard mask'),
value = dt.preferences.read("enfuse_pro", "checked_hard_masks", "bool"),
tooltip =_('force hard blend masks on the finest scale. this avoids \naveraging of fine details (only), at the expense \nof increasing the noise. this improves the \nsharpness of focus stacks considerably.\ndefault (soft mask)'),
reset_callback = function(self_hard_mask)
self_hard_mask.value = dt.preferences.read("enfuse_pro", "checked_hard_masks", "bool")
end
}
check_button_save_masks = dt.new_widget("check_button")
{
label = _('save masks'),
value = dt.preferences.read("enfuse_pro", "checked_save_masks", "bool"),
tooltip =_('Save the generated weight masks to your home directory,\nenblend saves masks as 8 bit grayscale, \ni.e. single channel images. \nfor accuracy we recommend to choose a lossless format.'),
reset_callback = function(self_save_mask)
self_save_mask.value = dt.preferences.read("enfuse_pro", "checked_save_masks", "bool")
end
}
slider_exposure_weight = dt.new_widget("slider")
{
label = _('exposure weight'),
tooltip = _('set the relative weight of the well-exposedness criterion \nas defined by the chosen exposure weight function. \nincreasing this weight relative to the others will\n make well-exposed pixels contribute more to\n the final output. \ndefault: (1.0)'),
hard_min = 0,
hard_max = 1,
value = dt.preferences.read("enfuse_pro", "set_exposure_weight", "float") --1 default
}
slider_saturation_weight = dt.new_widget("slider")
{
label = _('saturation weight'),
tooltip = _('set the relative weight of high-saturation pixels. \nincreasing this weight makes pixels with high \nsaturation contribute more to the final output. \ndefault: (0.2)'),
hard_min = 0,
hard_max = 1,
value = dt.preferences.read("enfuse_pro", "set_saturation_weight", "float"), --0.5
}
slider_contrast_weight = dt.new_widget("slider")
{
label = _('contrast weight'),
tooltip = _('sets the relative weight of high local-contrast pixels. \ndefault: (0.0).'),
hard_min = 0,
hard_max = 1,
value = dt.preferences.read("enfuse_pro", "set_contrast_weight", "float")--0 default
}
slider_exposure_optimum_weight = dt.new_widget("slider")
{
label = _('exposure optimum'),
tooltip = _('determine at what normalized exposure value\n the optimum exposure of the input images\n is. this is, set the position of the maximum\n of the exposure weight curve. use this \noption to fine-tune exposure weighting. \ndefault: (0.5)'),
hard_min = 0,
hard_max = 1,
value = dt.preferences.read("enfuse_pro", "set_exposure_optimum_weight", "float")--0.5 default0
}
slider_exposure_width_weight = dt.new_widget("slider")
{
label = _('exposure width'),
tooltip = _('set the characteristic width (FWHM) of the exposure \nweight function. low numbers give less weight to \npixels that are far from the user-defined \noptimum and vice versa. use this option to \nfine-tune exposure weighting. \ndefault: (0.2)'),
hard_min = 0,
hard_max = 1,
value = dt.preferences.read("enfuse_pro", "set_exposure_width_weight", "float") --0.2 default
}
file_chooser_button_path = dt.new_widget("file_chooser_button")
{
title = _('Select export path'), -- The title of the window when choosing a file
is_directory = true, -- True if the file chooser button only allows directories to be selecte
tooltip =_('select the target directory for the fused image. \nthe filename is created automatically.')
}
combobox_grid_size = dt.new_widget("combobox")
{
label = _('image grid size'),
tooltip =_('break image into a rectangular grid \nand attempt to find num control points in each section.\ndefault: (5x5)'),
value = dt.preferences.read("enfuse_pro", "selected_grid_size", "integer"),
changed_callback = function(sel_grid_size)
end,
"1", "2", "3","4","5","6","7","8","9",
reset_callback = function(self_grid)
self_grid.value = dt.preferences.read("enfuse_pro", "selected_grid_size", "integer")
end
}
combobox_control_points = dt.new_widget("combobox")
{
label = _('control points/grid'),
tooltip =_('number of control points (per grid, see option -g) \nto create between adjacent images \ndefault: (8).'),
value = dt.preferences.read("enfuse_pro", "selected_control_points", "integer"), --8, "1", "2", "3","4","5","6","7","8","9",
changed_callback = function(sel_control_points)
end,
"1", "2", "3","4","5","6","7","8","9",
reset_callback = function(self_points)
self_points.value = dt.preferences.read("enfuse_pro", "selected_control_points", "integer")
end
}
combobox_control_points_remove = dt.new_widget("combobox")
{
label = _('remove control points with error'),
tooltip =_('remove all control points with an error higher \nthan num pixels \ndefault: (3)'),
value = dt.preferences.read("enfuse_pro", "selected_control_points_remove", "integer"), --3, "1", "2", "3","4","5","6","7","8","9",
changed_callback = function(sel_control_points_remove)
end,
"1", "2", "3","4","5","6","7","8","9",
reset_callback = function(self_points_error)
self_points_error.value = dt.preferences.read("enfuse_pro", "selected_control_points_remove", "integer")
end
}
combobox_correlation = dt.new_widget("combobox")
{
label = _('correlation threshold for control points'),
tooltip =_('correlation threshold for identifying \ncontrol points \ndefault: (0.9).'),
value = dt.preferences.read("enfuse_pro", "selected_correlation", "integer"), --9, "0,1", "0,2", "0,3","0,4","0,5","0,6","0,7","0,8","0,9",
changed_callback = function(sel_correlation)
end,
"0.1", "0.2", "0.3","0.4","0.5","0.6","0.7","0.8","0.9","1.0",
reset_callback = function(self_correlation)
self_correlation.value = dt.preferences.read("enfuse_pro", "selected_correlation", "integer")
end
}
combobox_contrast_window_size = dt.new_widget("combobox")
{
label = _('contrast window size'),
tooltip =_('set the window size for local contrast analysis. \nthe window will be a square of size × size pixels. \nif given an even size, Enfuse will \nautomatically use the next odd number.\nfor contrast analysis size values larger \nthan 5 pixels might result in a \nblurry composite image. values of 3 and \n5 pixels have given good results on \nfocus stacks. \ndefault: (5) pixels'),
value = dt.preferences.read("enfuse_pro", "selected_contrast_window_size", "integer"), --3, "3","4","5","6","7","8","9","10",
changed_callback = function(sel_window_size)
cmd_enfuse_contrast_window_size="--contrast-window-size="..sel_window_size.value
end,
"3", "4", "5","6","7","8","9","10",
}
combobox_contrast_edge_scale = dt.new_widget("combobox")
{
label = _('contrast edge scale'),
tooltip =_('a non-zero value for EDGE-SCALE switches on the \nLaplacian-of-Gaussian (LoG) edge detection algorithm.\n edage-scale is the radius of the Gaussian used \nin the search for edges. a positive LCE-SCALE \nturns on local contrast enhancement (LCE) \nbefore the LoG edge detection. \nDefault: (0.0) pixels.'),
value = dt.preferences.read("enfuse_pro", "selected_contrast_edge_scale", "integer"), --1, "0:0:0",
changed_callback = function(sel_contrast_edge_scale)
cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..sel_contrast_edge_scale.value
end,
"0.0","0.1","0.2","0.3","0.4","0.5",
}
combobox_contrast_min_curvature = dt.new_widget("combobox")
{
label = _('contrast min curvature'),
tooltip =_('define the minimum curvature for the LoG edge detection. Append a ‘%’ to specify the minimum curvature relative to maximum pixel value in the source image. Default: (0.0%)'),
value = dt.preferences.read("enfuse_pro", "selected_contrast_min_curvature", "integer"), --1, "0.0%","0.1%", "0.2%", "0.3%","0.4%","0.5%","0.6%","0.7%","0.8%","0.9%","1.0%",
changed_callback = function(sel_contrast_min_curvature)
cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..sel_contrast_min_curvature.value
end,
"0.0%", "0.1%", "0.2%","0.3%","0.4%","0.5%","0.6%","0.7%","0.8%","0.9%","1.0%",
}
combobox_existing_file = dt.new_widget("combobox")
{
label = _('on conflict'),
value = dt.preferences.read("enfuse_pro", "selected_overwrite", "integer"), --1,
sensitive= dt.preferences.read("enfuse_pro", "sentitiv_overwrite", "bool"), --1,
changed_callback = function(sel_overwrite)
dt.preferences.write("enfuse_pro", "selected_overwrite", "integer", sel_overwrite.selected)
end,
_('create unique filename'),_('overwrite'),
reset_callback = function(self_overwrite)
self_overwrite.value = dt.preferences.read("enfuse_pro", "selected_overwrite", "integer")
end
}
check_button_image_variations = dt.new_widget("check_button")
{
label = _('create image variants with saved presets'),
value = dt.preferences.read("enfuse_pro", "checked_image_variants", "bool"),
tooltip =_('creates image variants with the three \nsaved HDR or DFF presets'),
sensitive=true,
clicked_callback = function(variations)
if (variations.value) then
dt.preferences.write("enfuse_pro", "checked_image_variants", "bool", true)
dt.preferences.write("enfuse_pro", "sentitiv_overwrite", "bool",false)
combobox_existing_file.value=1
combobox_existing_file.sensitive=false
else
dt.preferences.write("enfuse_pro", "checked_image_variants", "bool", false)
dt.preferences.write("enfuse_pro", "sentitiv_overwrite", "bool",true)
combobox_existing_file.sensitive=true
end
end,
reset_callback = function(self_image_variations)
dt.preferences.write("enfuse_pro", "checked_image_variants", "bool", false)
dt.preferences.write("enfuse_pro", "sentitiv_overwrite", "bool",true)
self_image_variations.value = false
combobox_existing_file.sensitive=true
end
}
button_save_preset = dt.new_widget("button")
{
label = _('save fusion preset'),
tooltip =_('save the selected fusion preset'),
clicked_callback = function(save_fusion_type)
if (combobox_fusion_type.value == "1 - high dynamic range image") then
-- preset HDR 1
dt.preferences.write("enfuse_pro", "checked_hdr1_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_hdr1_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_hdr1_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_hdr1_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_hdr1_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_hdr1_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr1_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr1_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr1_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr1_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset HDR 1 saved'))
elseif (combobox_fusion_type.value == "2 - high dynamic range image") then
-- preset HDR 2
dt.preferences.write("enfuse_pro", "checked_hdr2_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_hdr2_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_hdr2_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_hdr2_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_hdr2_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_hdr2_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr2_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr2_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr2_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr2_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset HDR 2 saved'))
elseif (combobox_fusion_type.value == "3 - high dynamic range image") then
-- preset HDR 3
dt.preferences.write("enfuse_pro", "checked_hdr3_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_hdr3_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_hdr3_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_hdr3_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_hdr3_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_hdr3_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr3_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr3_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr3_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_hdr3_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset HDR 3 saved'))
elseif (combobox_fusion_type.value == "1 - deep focus fusion image") then
-- preset DFF 1
dt.preferences.write("enfuse_pro", "checked_dff1_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_dff1_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_dff1_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_dff1_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_dff1_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_dff1_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_dff1_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_dff1_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_dff1_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset DFF 1 saved'))
elseif (combobox_fusion_type.value == "2 - deep focus fusion image") then
-- preset DFF 2
dt.preferences.write("enfuse_pro", "checked_dff2_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_dff2_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_dff2_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_dff2_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_dff2_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_dff2_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_dff2_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_dff2_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset DFF 2 saved'))
elseif (combobox_fusion_type.value == "3 - deep focus fusion image") then
-- preset DFF 3
dt.preferences.write("enfuse_pro", "checked_dff3_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_dff3_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_dff3_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_dff3_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_dff3_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_dff3_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_dff3_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_dff3_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_dff3_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_dff3_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset DFF 3 saved'))
elseif (combobox_fusion_type.value == "free preset") then
-- preset FREE
dt.preferences.write("enfuse_pro", "checked_free_hard_masks", "bool", check_button_hard_masks.value)
dt.preferences.write("enfuse_pro", "checked_free_save_masks", "bool", check_button_save_masks.value)
dt.preferences.write("enfuse_pro", "selected_free_contrast_window_size", "integer", combobox_contrast_window_size.selected)
dt.preferences.write("enfuse_pro", "selected_free_contrast_edge_scale", "integer", combobox_contrast_edge_scale.selected)
dt.preferences.write("enfuse_pro", "selected_free_contrast_min_curvature", "integer", combobox_contrast_min_curvature.selected)
dt.preferences.write("enfuse_pro", "set_free_exposure_weight", "float", slider_exposure_weight.value)
dt.preferences.write("enfuse_pro", "set_free_saturation_weight", "float", slider_saturation_weight.value)
dt.preferences.write("enfuse_pro", "set_free_contrast_weight", "float", slider_contrast_weight.value)
dt.preferences.write("enfuse_pro", "set_free_exposure_optimum_weight", "float", slider_exposure_optimum_weight.value)
dt.preferences.write("enfuse_pro", "set_free_exposure_width_weight", "float",slider_exposure_width_weight.value)
dt.print(_('preset free saved'))
else
dt.print(_('unkown error'))
end
end
}
button_load_preset = dt.new_widget("button")
{
label = _('load fusion preset defaults'),
tooltip =_('load the default fusion preset settings'),
clicked_callback = function(preset_default)
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_exposure_width_weight", "float")
end
}
combobox_output_format = dt.new_widget("combobox")
{
label = _('file format'),
value = dt.preferences.read("enfuse_pro", "selected_output_format", "integer"), --2, "TIFF", "JPEG", "PNG","PNM","PBM","PGM","PPM",
changed_callback = function(sel_output_format)
dt.preferences.write("enfuse_pro", "selected_output_format", "integer", sel_output_format.selected)
end,
"TIFF", "JPEG", "PNG","PNM","PBM","PPM",
reset_callback = function(self_output_format)
self_output_format.value = dt.preferences.read("enfuse_pro", "selected_output_format", "integer")
end
}
combobox_fusion_type = dt.new_widget("combobox")
{
label = _('fusion preset'),
tooltip =_('select the preset and save the preset\n if you want to reuse it or create an image\n variant'),
value = dt.preferences.read("enfuse_pro", "selected_fusion_type", "integer"), --1, "high dynamic range image", "deep focus fusion image", "without preset",
changed_callback = function(sel_fusion)
dt.preferences.write("enfuse_pro", "selected_fusion_type", "integer", sel_fusion.selected)
-- preset HDR 1
if (sel_fusion.value == "1 - high dynamic range image") then
-- defaults for hdr images
check_button_hard_masks.sensitive=false
check_button_hard_masks.value=false
slider_contrast_weight.sensitive=true
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_hdr1_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_hdr1_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_hdr1_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_hdr1_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_hdr1_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_hdr1_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_hdr1_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_hdr1_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_hdr1_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_hdr1_exposure_width_weight", "float")
-- preset HDR 2
elseif (sel_fusion.value == "2 - high dynamic range image") then
-- defaults for hdr images
check_button_hard_masks.sensitive=false
check_button_hard_masks.value=false
slider_contrast_weight.sensitive=true
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_hdr2_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_hdr2_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_hdr2_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_hdr2_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_hdr2_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_hdr2_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_hdr2_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_hdr2_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_hdr2_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_hdr2_exposure_width_weight", "float")
-- preset HDR 3
elseif (sel_fusion.value == "3 - high dynamic range image") then
-- defaults for hdr images
check_button_hard_masks.sensitive=false
check_button_hard_masks.value=false
slider_contrast_weight.sensitive=true
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_hdr3_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_hdr3_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_hdr3_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_hdr3_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_hdr3_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_hdr3_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_hdr3_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_hdr3_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_hdr3_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_hdr3_exposure_width_weight", "float")
-- preset DFF 1
elseif (sel_fusion.value == "1 - deep focus fusion image") then
-- defaults for focus stacking images
check_button_hard_masks.sensitive=false
check_button_hard_masks.value=true
slider_contrast_weight.sensitive=false
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_dff1_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_dff1_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_dff1_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_dff1_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_dff1_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_dff1_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_dff1_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_dff1_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_dff1_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_dff1_exposure_width_weight", "float")
-- preset DFF 2
elseif (sel_fusion.value == "2 - deep focus fusion image") then
-- defaults for focus stacking images
check_button_hard_masks.sensitive=false
check_button_hard_masks.value=true
slider_contrast_weight.sensitive=false
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_dff2_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_dff2_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_dff2_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_dff2_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_dff2_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_dff2_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_dff2_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_dff2_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_dff2_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_dff2_exposure_width_weight", "float")
-- preset DFF 3
elseif (sel_fusion.value == "3 - deep focus fusion image") then
-- defaults for focus stacking images
check_button_hard_masks.sensitive=false
check_button_hard_masks.value=true
slider_contrast_weight.sensitive=false
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_dff3_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_dff3_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_dff3_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_dff3_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_dff3_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_dff3_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_dff3_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_dff3_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_dff3_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_dff3_exposure_width_weight", "float")
-- preset FREE
elseif (sel_fusion.value == "free preset") then
-- enfuse defaults
check_button_hard_masks.sensitive=true
check_button_hard_masks.value=false
slider_contrast_weight.sensitive=true
check_button_hard_masks.value=dt.preferences.read("enfuse_pro", "checked_free_hard_masks", "bool")
check_button_save_masks.value=dt.preferences.read("enfuse_pro", "checked_free_save_masks", "bool")
combobox_contrast_window_size.value=dt.preferences.read("enfuse_pro", "selected_free_contrast_window_size", "integer")
combobox_contrast_edge_scale.value=dt.preferences.read("enfuse_pro", "selected_free_contrast_edge_scale", "integer")
combobox_contrast_min_curvature.value=dt.preferences.read("enfuse_pro", "selected_free_contrast_min_curvature", "integer")
slider_exposure_weight.value=dt.preferences.read("enfuse_pro", "set_free_exposure_weight", "float")
slider_saturation_weight.value=dt.preferences.read("enfuse_pro", "set_free_saturation_weight", "float")
slider_contrast_weight.value=dt.preferences.read("enfuse_pro", "set_free_contrast_weight", "float")
slider_exposure_optimum_weight.value=dt.preferences.read("enfuse_pro", "set_free_exposure_optimum_weight", "float")
slider_exposure_width_weight.value=dt.preferences.read("enfuse_pro", "set_free_exposure_width_weight", "float")
end
end,
"1 - high dynamic range image", "2 - high dynamic range image","3 - high dynamic range image","1 - deep focus fusion image", "2 - deep focus fusion image","3 - deep focus fusion image","free preset",
reset_callback = function(self_type)
combobox_fusion_type.value = dt.preferences.read("enfuse_pro", "selected_fusion_type", "integer")
end
}
--FUNCTION
local widget = dt.new_widget("box") {
orientation = "vertical",
label_align_options,
label_line2,
check_button_radial_distortion,
check_button_optimize_field,
check_button_optimize_image_center,
check_button_auto_crop,
check_button_distortion,
combobox_grid_size,
combobox_control_points,
combobox_control_points_remove,
combobox_correlation,
separator1,
separator1b,
label_enfuse_options,
label_line3,
combobox_fusion_type,
check_button_image_variations,
slider_exposure_weight,
slider_saturation_weight,
slider_contrast_weight,
slider_exposure_optimum_weight,
slider_exposure_width_weight,
check_button_hard_masks,
check_button_save_masks,
combobox_contrast_edge_scale,
combobox_contrast_min_curvature,
combobox_contrast_window_size,
button_save_preset,
button_load_preset,
separator2,
separator2b,
label_output_format,
label_line1,
combobox_output_format,
label_path,
file_chooser_button_path,
combobox_existing_file,
}
local function GetFileName(full_path)
local filename_with_suffix=full_path:match("[^/]+$" )
return string.sub(filename_with_suffix,1, -5)
end
local function truncate(x)
return x<0 and math.ceil(x) or math.floor(x)
end
local function replace_comma_to_dot(s)
return string.gsub(s, "%,", ".")
end
local function checkIfBinExists(bin)
local handle = io.popen("which "..bin)
local result = handle:read()
local ret
handle:close()
if (result) then
ret = true
else
ret = false
end
return ret
end
local function file_exists(name)
local f=io.open(""..name.."","r")
if f~=nil then
io.close(f)
return true
else
return false
end
end
local function remove_temp_files()
dt.print_error("rm "..images_to_align)
result_to_align_images=dt.control.execute("rm "..images_to_align)
dt.print_error("rm "..tmppath.."/aligned_*.tif")
result_aligned_images=dt.control.execute("rm "..tmppath.."/aligned_*.tif")
end
local function create_enfuse_command()
-- create enfuse command
enfuseStartCommand="enfuse "..cmd_enfuse_exposure_weight.." "..cmd_enfuse_saturation_weight.." "..cmd_enfuse_contrast_weight.." "..cmd_enfuse_exposure_optimum_weight.." "..cmd_enfuse_exposure_width_weight.." "..cmd_enfuse_hard_masks.." "..cmd_enfuse_save_masks.." "..cmd_enfuse_contrast_window_size.." "..cmd_enfuse_contrast_edge_scale.." "..cmd_enfuse_contrast_min_curvature.." "..cmd_enfuse_color_depth.." "..cmd_enfuse_compression.." "..cmd_output_image.." "..tmppath.."/aligned_*.tif"
dt.print_error(enfuseStartCommand)
-- execute enfuse
resultenfuse=dt.control.execute(enfuseStartCommand)
job.percent = job.percent + 0.10
if (resultenfuse == 0) then
--copy exif tasgs
if (dt.preferences.read("module_enfuse_pro", "exiftool_copy_tags", "bool")) then
-- create exif command
exixStartCommand="exiftool -TagsFromFile \""..first_imagefile.."\" -exif:all --subifd:all -overwrite_original \""..cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."."..cmd_suffix_output_format.."\""
dt.print_error(exixStartCommand)
-- execute exif
resultexif=dt.control.execute(exixStartCommand)
if (dt.preferences.read("module_enfuse_pro", "add_image_to_db", "bool")) then
local image = dt.database.import(path_with_filename)
end
dt.print(_('process successfully completed'))
if (resultexif == 0) then
-- remove_temp_files()
dt.print(_('process successfully completed'))
else
-- remove_temp_files()
dt.print(_('ERROR: exiftool doesn\'t work. for more informations see terminal output'))
-- job.valid = false
end
elseif (dt.preferences.read("module_enfuse_pro", "add_image_to_db", "bool")) then
local image = dt.database.import(path_with_filename)
end
else
-- remove_temp_files()
dt.print(_('ERROR: enfuse doesn\'t work. for more informations see terminal output'))
end
end
local function show_status(storage, image, format, filename,
number, total, high_quality, extra_data)
dt.print(_('export TIFF for image fusion ')..tostring(truncate(number)).." / "..tostring(truncate(total)))
end
local function create_image_fusion(storage, image_table, extra_data) --finalize
job = dt.gui.create_job(_('creating HDR/DFF image'), true, stop_selection)
-- check installed software
if (not (checkIfBinExists("align_image_stack"))) then
dt.print(_('ERROR: align_image_stack not found. please install hugin.'))
dt.print_error(_('align_image_stack not found. please install hugin.'))
dt.control.execute("rm "..tmppath.."/*.tif")
job.valid = false
return
elseif (not (checkIfBinExists("enfuse"))) then
dt.print(_('ERROR: enfuse not found. please install enfuse.'))
dt.print_error(_('enfuse not found. please install enfuse.'))
dt.control.execute("rm "..tmppath.."*.tif")
job.valid = false
return
end
enfuseVersionStartCommand='enfuse --version | grep "enfuse 4.2"'
enfuse_version=dt.control.execute(enfuseVersionStartCommand)
if (enfuse_version ~= 0) then
dt.print(_('ERROR: wrong enfuse version found. the plugin works only with enfuse 4.2! please install enfuse version 4.2'))
job.valid = false
return
end
cmd_output_path = file_chooser_button_path.value
if (cmd_output_path == nil) then
dt.print(_('ERROR: no target directory selected'))
job.valid = false
return
else
-- create align command
dt.print(_('aligning images'))
if (check_button_radial_distortion.value) then
cmd_align_radial_distortion="-d"
else
cmd_align_radial_distortion=""
end
if (check_button_optimize_field.value) then
cmd_align_optimize_field="-m"
else
cmd_align_optimize_field=""
end
if (check_button_optimize_image_center.value) then
cmd_align_optimize_center="-i"
else
cmd_align_optimize_center=""
end
if (check_button_auto_crop.value) then
cmd_align_auto_crop="-C"
else
cmd_align_auto_crop=""
end
if (check_button_distortionvalue) then
cmd_align_distortion="--distortion"
else
cmd_align_distortion=""
end
cmd_align_grid_size="-g "..combobox_grid_size.value
cmd_align_control_points="-c "..combobox_control_points.value
cmd_align_control_points_remove="-t "..combobox_control_points_remove.value
cmd_align_correlation="--corr="..combobox_correlation.value
if (dt.preferences.read("module_enfuse_pro", "align_use_gpu", "bool")) then
cmd_align_use_gpu="--gpu"
else
cmd_align_use_gpu=""
end
images_to_align =""
local counted_images=0
for _,v in pairs(image_table) do
images_to_align = images_to_align.."\"" ..v.."\" "
counted_images=counted_images+1
if (counted_images == 1) then
first_imagefile=v
else
last_imagefile=v
end
end
job.percent = 0.1
if (counted_images<=1) then
dt.print(_('ERROR: not enough pictures selected. please select two or more images\nfrom the same object, but with different camera settings.'))
dt.control.execute("rm "..tmppath.."/*.tif")
job.valid = false
return
elseif (counted_images>=21) then
dt.print(_('you have selected more then 20 images. the align and fuse process could take a very long time! \nhave a nice beake.'))
end
-- execute align_image_stack
alignStartCommand="align_image_stack " ..cmd_align_radial_distortion.." "..cmd_align_optimize_field.." "..cmd_align_optimize_center.." "..cmd_align_auto_crop.." "..cmd_align_distortion.." "..cmd_align_grid_size.." "..cmd_align_control_points.." "..cmd_align_control_points_remove.." "..cmd_align_correlation.." "..cmd_align_use_gpu.." -a "..tmppath.."/aligned_ "..images_to_align
dt.print_error(alignStartCommand)
resultalign=dt.control.execute(alignStartCommand)
job.percent = 0.3
if (resultalign == 0) then
dt.print(_('aligning complete'))
-- enfuse with all HDR presets
if (((check_button_image_variations.value) and (combobox_fusion_type.value == "1 - high dynamic range image")) or
((check_button_image_variations.value) and (combobox_fusion_type.value == "2 - high dynamic range image")) or
((check_button_image_variations.value) and (combobox_fusion_type.value == "3 - high dynamic range image"))) then
for i = 1, 3 do
dt.print(_('fuse image with HDR '..i..' presete'))
cmd_enfuse_exposure_weight="--exposure-weight="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_hdr"..i.."_exposure_weight", "float")))
cmd_enfuse_saturation_weight="--saturation-weight="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_hdr"..i.."_saturation_weight", "float")))
cmd_enfuse_contrast_weight="--contrast-weight="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_hdr"..i.."_contrast_weight", "float")))
cmd_enfuse_exposure_optimum_weight="--exposure-optimum="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_hdr"..i.."_exposure_optimum_weight", "float")))
cmd_enfuse_exposure_width_weight="--exposure-width="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_hdr"..i.."_exposure_width_weight", "float")))
if (check_button_hard_masks.value) then
cmd_enfuse_hard_masks="--hard-mask"
else
cmd_enfuse_hard_masks=""
end
if (check_button_save_masks.value) then
cmd_enfuse_save_masks="--save-masks"
else
cmd_enfuse_save_masks=""
end
cmd_enfuse_contrast_window_size="--contrast-window-size="..dt.preferences.read("enfuse_pro", "selected_hdr"..i.."_contrast_window_size", "integer")
cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..dt.preferences.read("enfuse_pro", "selected_hdr"..i.."_contrast_edge_scale", "integer")
cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..dt.preferences.read("enfuse_pro", "selected_hdr"..i.."_contrast_min_curvature", "integer")
cmd_output_path=file_chooser_button_path.value
cmd_enfuse_color_depth="--depth="..dt.preferences.read("module_enfuse_pro", "image_color_depth", "enum")
if (combobox_output_format.value == "TIFF") then
cmd_suffix_output_format="tif"
elseif (combobox_output_format.value == "JPEG") then
cmd_suffix_output_format="jpg"
elseif (combobox_output_format.value == "PNG") then
cmd_suffix_output_format="png"
elseif (combobox_output_format.value == "PNM") then
cmd_suffix_output_format="pnm"
elseif (combobox_output_format.value == "PBM") then
cmd_suffix_output_format="pbm"
elseif (combobox_output_format.value == "PPM") then
cmd_suffix_output_format="ppm"
end
if (combobox_output_format.value == "JPEG") then --JPEG
cmd_enfuse_compression="--compression="..truncate(dt.preferences.read("module_enfuse_pro", "compression_jpeg", "integer"))
elseif (combobox_output_format.value == "TIFF") then --TIFF
cmd_enfuse_compression="--compression="..dt.preferences.read("module_enfuse_pro", "compression_tiff", "enum")
else
cmd_enfuse_compression=""
end
path_with_filename=cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."."..cmd_suffix_output_format
dt.print_error(path_with_filename)
while (file_exists(path_with_filename)) do
cmd_output_image_index=cmd_output_image_index+1
if cmd_output_image_index <= 9 then
outputindex="0"..tostring(cmd_output_image_index)
else
outputindex=tostring(cmd_output_image_index)
end
path_with_filename=cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."_"..outputindex.."."..cmd_suffix_output_format
end
cmd_output_image="--output=\""..path_with_filename.."\""
cmd_output_image_index=0
create_enfuse_command()
end
remove_temp_files()
job.valid = false
dt.print(_('process successfully completed'))
-- enfuse with all DFF presets
elseif (((check_button_image_variations.value) and (combobox_fusion_type.value == "1 - deep focus fusion image")) or
((check_button_image_variations.value) and (combobox_fusion_type.value == "2 - deep focus fusion image")) or
((check_button_image_variations.value) and (combobox_fusion_type.value == "3 - deep focus fusion image"))) then
for i = 1, 3 do
dt.print(_('fuse image with DFF '..i..' presete'))
cmd_enfuse_exposure_weight="--exposure-weight="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_dff"..i.."_exposure_weight", "float")))
cmd_enfuse_saturation_weight="--saturation-weight="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_dff"..i.."_saturation_weight", "float")))
cmd_enfuse_contrast_weight="--contrast-weight="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_dff"..i.."_contrast_weight", "float")))
cmd_enfuse_exposure_optimum_weight="--exposure-optimum="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_dff"..i.."_exposure_optimum_weight", "float")))
cmd_enfuse_exposure_width_weight="--exposure-width="..(replace_comma_to_dot(dt.preferences.read("enfuse_pro", "set_dff"..i.."_exposure_width_weight", "float")))
if (check_button_hard_masks.value) then
cmd_enfuse_hard_masks="--hard-mask"
else
cmd_enfuse_hard_masks=""
end
if (check_button_save_masks.value) then
cmd_enfuse_save_masks="--save-masks"
else
cmd_enfuse_save_masks=""
end
cmd_enfuse_contrast_window_size="--contrast-window-size="..dt.preferences.read("enfuse_pro", "selected_dff"..i.."_contrast_window_size", "integer")
cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..dt.preferences.read("enfuse_pro", "selected_dff"..i.."_contrast_edge_scale", "integer")
cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..dt.preferences.read("enfuse_pro", "selected_dff"..i.."_contrast_min_curvature", "integer")
cmd_output_path=file_chooser_button_path.value
cmd_enfuse_color_depth="--depth="..dt.preferences.read("module_enfuse_pro", "image_color_depth", "enum")
if (combobox_output_format.value == "TIFF") then
cmd_suffix_output_format="tif"
elseif (combobox_output_format.value == "JPEG") then
cmd_suffix_output_format="jpg"
elseif (combobox_output_format.value == "PNG") then
cmd_suffix_output_format="png"
elseif (combobox_output_format.value == "PNM") then
cmd_suffix_output_format="pnm"
elseif (combobox_output_format.value == "PBM") then
cmd_suffix_output_format="pbm"
elseif (combobox_output_format.value == "PPM") then
cmd_suffix_output_format="ppm"
end
if (combobox_output_format.value == "JPEG") then --JPEG
cmd_enfuse_compression="--compression="..truncate(dt.preferences.read("module_enfuse_pro", "compression_jpeg", "integer"))
elseif (combobox_output_format.value == "TIFF") then --TIFF
cmd_enfuse_compression="--compression="..dt.preferences.read("module_enfuse_pro", "compression_tiff", "enum")
else
cmd_enfuse_compression=""
end
path_with_filename=cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."."..cmd_suffix_output_format
dt.print_error(path_with_filename)
while (file_exists(path_with_filename)) do
cmd_output_image_index=cmd_output_image_index+1
if cmd_output_image_index <= 9 then
outputindex="0"..tostring(cmd_output_image_index)
else
outputindex=tostring(cmd_output_image_index)
end
path_with_filename=cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."_"..outputindex.."."..cmd_suffix_output_format
end
cmd_output_image="--output=\""..path_with_filename.."\""
cmd_output_image_index=0
create_enfuse_command()
job.valid = false
end
remove_temp_files()
dt.print(_('process successfully completed'))
-- enfuse with GUI settings
else
if (combobox_fusion_type.value == "1 - high dynamic range image") then
dt.print(_('enfuse with value from preset HDR 1'))
elseif (combobox_fusion_type.value == "2 - high dynamic range image") then
dt.print(_('enfuse with value from preset HDR 2'))
elseif (combobox_fusion_type.value == "3 - high dynamic range image") then
dt.print(_('enfuse with value from preset HDR 3'))
elseif (combobox_fusion_type.value == "1 - deep focus fusion image") then
dt.print(_('enfuse with value from preset DFF 1'))
elseif (combobox_fusion_type.value == "2 - deep focus fusion image") then
dt.print(_('enfuse with value from preset DFF 2'))
elseif (combobox_fusion_type.value == "3 - deep focus fusion image") then
dt.print(_('enfuse with value from preset DFF 3'))
elseif (combobox_fusion_type.value == "free preset") then
dt.print(_('enfuse with value from free preset'))
end
cmd_enfuse_exposure_weight="--exposure-weight="..(replace_comma_to_dot(slider_exposure_weight.value))
cmd_enfuse_saturation_weight="--saturation-weight="..(replace_comma_to_dot(slider_saturation_weight.value))
cmd_enfuse_contrast_weight="--contrast-weight="..(replace_comma_to_dot(slider_contrast_weight.value))
cmd_enfuse_exposure_optimum_weight="--exposure-optimum="..(replace_comma_to_dot(slider_exposure_optimum_weight.value))
cmd_enfuse_exposure_width_weight="--exposure-width="..(replace_comma_to_dot(slider_exposure_width_weight.value))
if (check_button_hard_masks.value) then
cmd_enfuse_hard_masks="--hard-mask"
else
cmd_enfuse_hard_masks=""
end
if (check_button_save_masks.value) then
cmd_enfuse_save_masks="--save-masks"
else
cmd_enfuse_save_masks=""
end
cmd_enfuse_contrast_window_size="--contrast-window-size="..combobox_contrast_window_size.value
cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..combobox_contrast_edge_scale.value
cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..combobox_contrast_min_curvature.value
cmd_output_path=file_chooser_button_path.value
cmd_enfuse_color_depth="--depth="..dt.preferences.read("module_enfuse_pro", "image_color_depth", "enum")
if (combobox_output_format.value == "TIFF") then
cmd_suffix_output_format="tif"
elseif (combobox_output_format.value == "JPEG") then
cmd_suffix_output_format="jpg"
elseif (combobox_output_format.value == "PNG") then
cmd_suffix_output_format="png"
elseif (combobox_output_format.value == "PNM") then
cmd_suffix_output_format="pnm"
elseif (combobox_output_format.value == "PBM") then
cmd_suffix_output_format="pbm"
elseif (combobox_output_format.value == "PPM") then
cmd_suffix_output_format="ppm"
end
if (combobox_output_format.value == "JPEG") then --JPEG
cmd_enfuse_compression="--compression="..truncate(dt.preferences.read("module_enfuse_pro", "compression_jpeg", "integer"))
elseif (combobox_output_format.value == "TIFF") then --TIFF
cmd_enfuse_compression="--compression="..dt.preferences.read("module_enfuse_pro", "compression_tiff", "enum")
else
cmd_enfuse_compression=""
end
if (combobox_existing_file.selected == 1) then
path_with_filename=cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."."..cmd_suffix_output_format
dt.print_error("Datei mit Pfad")
dt.print_error(path_with_filename)
while (file_exists(path_with_filename)) do
cmd_output_image_index=cmd_output_image_index+1
if cmd_output_image_index <= 9 then
outputindex="0"..tostring(cmd_output_image_index)
else
outputindex=tostring(cmd_output_image_index)
end
path_with_filename=cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."_"..outputindex.."."..cmd_suffix_output_format
end
cmd_output_image="--output=\""..path_with_filename.."\""
cmd_output_image_index=0
else
cmd_output_image="--output=\""..cmd_output_path.."/"..(GetFileName(first_imagefile)).."-"..(GetFileName(last_imagefile)).."."..cmd_suffix_output_format.."\""
end
dt.print_error(path_with_filename)
create_enfuse_command()
remove_temp_files()
job.valid = false
end
else
remove_temp_files()
dt.print(_('ERROR: align_image_stack doesn\'t work. For more information see terminal output'))
job.valid = false
end
end
end
-- limit export to tiff
local function support_format(storage, format)
fmt = string.lower(format.name)
if string.match(fmt,"tiff") == nil then
return false
else
return true
end
end
-- REGISTER
dt.register_storage("module_enfuse_pro", _('pseudo hdr or dff image'), show_status, create_image_fusion, support_format, nil, widget)
dt.preferences.register("module_enfuse_pro",
"align_use_gpu", -- name
"bool", -- type
_('enfuse pro: use GPU for remaping'), -- label
_('set the GPU remapping for image align'), -- tooltip
false) -- default
dt.preferences.register("module_enfuse_pro",
"exiftool_copy_tags", -- name
"bool", -- type
_('enfuse pro: copy exif tags'), -- label
_('copy the exif tags from the first image to the target'), -- tooltip
true) -- default
dt.preferences.register("module_enfuse_pro",
"add_image_to_db", -- name
"bool", -- type
_('enfuse pro: add fused image to database'), -- label
_('add the fused image to the darktable database'), -- tooltip
false) -- default
dt.preferences.register("module_enfuse_pro",
"compression_jpeg", -- name
"integer", -- type
_('enfuse pro: JPEG compression'), -- label
_('set the compression for JPEG files'), -- tooltip
98, -- default
50, -- min
100) -- max
dt.preferences.register("module_enfuse_pro",
"compression_tiff", -- name
"enum", -- type
_('enfuse pro: TIFF compression'), -- label
_('set the compression type for tiff files'), -- tooltip
"LZW", -- default
"NONE", "DEFLATE","LZW","PACKBITS") -- values
dt.preferences.register("module_enfuse_pro",
"image_color_depth", -- name
"enum", -- type
_('enfuse pro: image color depth (bit)'), -- label
_('set the output color depth'), -- tooltip
"16", -- default
"8", "16","32","r32","r64") -- values
enfuse_pro-2.1.2/fr_FR/ 0000775 0001750 0001750 00000000000 13064273620 014200 5 ustar klemmh klemmh enfuse_pro-2.1.2/fr_FR/LC_MESSAGES/ 0000775 0001750 0001750 00000000000 13067235010 015757 5 ustar klemmh klemmh enfuse_pro-2.1.2/fr_FR/LC_MESSAGES/enfuse_pro.po 0000664 0001750 0001750 00000042447 13066754644 020521 0 ustar klemmh klemmh msgid ""
msgstr ""
"Project-Id-Version: Lua image path\n"
"POT-Creation-Date: 2017-03-19 20:33+0100\n"
"PO-Revision-Date: 2017-03-20 14:18+0100\n"
"Last-Translator: Pascal Obry \n"
"Language-Team: \n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-KeywordsList: \n"
"X-Poedit-SearchPath-0: .\n"
#: enfuse_pro.lua:10
msgid "image align options"
msgstr "options d'alignement"
#: enfuse_pro.lua:10
msgid "image fusion options"
msgstr "options de fusion"
#: enfuse_pro.lua:10
msgid "target file"
msgstr "fichier final"
#: enfuse_pro.lua:10
msgid "directory"
msgstr "répertoire"
#: enfuse_pro.lua:10
msgid "optimize radial distortion for all images"
msgstr "optimisation distorsions radiales"
#: enfuse_pro.lua:10
msgid ""
"optimize radial distortion for all images, \n"
"except for first"
msgstr ""
"optimisation des distorsions radiales de toutes les images\n"
"sauf pour la première"
#: enfuse_pro.lua:10
msgid "optimize field of view for all images"
msgstr "optimisation profondeur de champ"
#: enfuse_pro.lua:10
msgid ""
"optimize field of view for all images, except for first. \n"
"Useful for aligning focus stacks (DFF) with slightly \n"
"different magnification."
msgstr ""
"optimisation de la profondeur de champ de toutes les images, sauf la première\n"
"utile pour aligner des piles de focus (DFF) avec des petites différences de grossissement."
#: enfuse_pro.lua:10
msgid "optimize image center shift for all images"
msgstr "optimisation déplacement central"
#: enfuse_pro.lua:10
msgid ""
"optimize image center shift for all images, \n"
"except for first."
msgstr ""
"optimisation du déplacement central de toutes les images\n"
"sauf la première"
#: enfuse_pro.lua:10
msgid "auto crop the image"
msgstr "recadrage automatique"
#: enfuse_pro.lua:10
msgid "auto crop the image to the area covered by all images."
msgstr "recadrage automatique des images sur la zone couverte par toutes les images"
#: enfuse_pro.lua:10
msgid "load distortion from lens database"
msgstr "charge distorsion des objectifs"
#: enfuse_pro.lua:10
msgid "try to load distortion information from lens database"
msgstr "charge les informations de distorsion depuis la base de données des objectifs"
#: enfuse_pro.lua:10
msgid "hard mask"
msgstr "masque fort"
#: enfuse_pro.lua:10
msgid ""
"force hard blend masks on the finest scale. this avoids \n"
"averaging of fine details (only), at the expense \n"
"of increasing the noise. this improves the \n"
"sharpness of focus stacks considerably.\n"
"default (soft mask)"
msgstr ""
"force le masque fort de fusion sur les détails les plus fins. cela permert\n"
"d'éviter de moyenner les détails fins (seulement), au détriment de la\n"
"suppression du bruit. cela améliore considérablement la netteté de la pile de focus\n"
"par défaut (masque faible)."
#: enfuse_pro.lua:10
msgid "save masks"
msgstr "sauver les masques"
#: enfuse_pro.lua:10
msgid ""
"Save the generated weight masks to your home directory,\n"
"enblend saves masks as 8 bit grayscale, \n"
"i.e. single channel images. \n"
"for accuracy we recommend to choose a lossless format."
msgstr ""
"sauvegarder les masques de poids dans le répertoire home\n"
"enblend sauvegarde les masques en niveau de gris sur 8 bits,\n"
"i.e. image avec un seul canal\n"
"pour plus de précision on recommande de choisir un format sans perte."
#: enfuse_pro.lua:10
msgid "exposure weight"
msgstr "poids exposition"
#: enfuse_pro.lua:10
msgid ""
"set the relative weight of the well-exposedness criterion \n"
"as defined by the chosen exposure weight function. \n"
"increasing this weight relative to the others will\n"
" make well-exposed pixels contribute more to\n"
" the final output. \n"
"default: (1.0)"
msgstr ""
"spécifie le poids relatif pour le critère d'exposition\n"
"comme défini par la fonction d'exposition choisie.\n"
"augmenter ce poids relativement aux autres donnera\n"
"plus d'importance aux pixels bien exposés pour la\n"
"construction de l'image finale.\n"
"défaut: (1.0)"
#: enfuse_pro.lua:10
msgid "saturation weight"
msgstr "poids saturation"
#: enfuse_pro.lua:10
msgid ""
"set the relative weight of high-saturation pixels. \n"
"increasing this weight makes pixels with high \n"
"saturation contribute more to the final output. \n"
"default: (0.2)"
msgstr ""
"spécifie le poids relatif pour le critère de saturation\n"
"augmenter ce poids relativement aux autres donnera\n"
"plus d'importance aux pixels saturés pour la\n"
"construction de l'image finale.\n"
"défaut: (0.2)"
#: enfuse_pro.lua:10
msgid "contrast weight"
msgstr "poids du contraste"
#: enfuse_pro.lua:10
msgid ""
"sets the relative weight of high local-contrast pixels. \n"
"default: (0.0)."
msgstr ""
"position le poids relatif des pixels avec un haut contraste local.\n"
"défaut: (0.0)"
#: enfuse_pro.lua:10
msgid "exposure optimum"
msgstr "optimum d'exposition"
#: enfuse_pro.lua:10
msgid ""
"determine at what normalized exposure value\n"
" the optimum exposure of the input images\n"
" is. this is, set the position of the maximum\n"
" of the exposure weight curve. use this \n"
"option to fine-tune exposure weighting. \n"
"default: (0.5)"
msgstr ""
"détermine à quelle valeur d'exposition normalisée\n"
"l'exposition optimum de l'image se trouve. cela positionne\n"
"le maximum de la courbe du poids de l'exposition. utiliser cette\n"
"option pour régler finement le poids d'exposition.\n"
"défaut: (0.5)"
#: enfuse_pro.lua:10
msgid "exposure width"
msgstr "étendu d'exposition"
#: enfuse_pro.lua:10
msgid ""
"set the characteristic width (FWHM) of the exposure \n"
"weight function. low numbers give less weight to \n"
"pixels that are far from the user-defined \n"
"optimum and vice versa. use this option to \n"
"fine-tune exposure weighting. \n"
"default: (0.2)"
msgstr ""
"positionne la largeur caractéristique (FWHM) de la\n"
"fonction poids pour l'exposition. un nombre bas donne moins\n"
"de poids aux pixels qui sont loin de l'optimum défini par l'utilisateur\n"
"et vice-versa. utiliser cette option pour régler finement le\n"
"poids de d'exposition.\n"
"défaut: (0.2)"
#: enfuse_pro.lua:10
msgid "Select export path"
msgstr "chemin pour l'exportation finale"
#: enfuse_pro.lua:10
msgid ""
"select the target directory for the fused image. \n"
"the filename is created automatically."
msgstr ""
"sélectionne le répertoire pour l'image fusionnée.\n"
"le nom du fichier est créé automatiquement. "
#: enfuse_pro.lua:10
msgid "image grid size"
msgstr "taille grille image"
#: enfuse_pro.lua:10
msgid ""
"break image into a rectangular grid \n"
"and attempt to find num control points in each section.\n"
"default: (5x5)"
msgstr ""
"découpe l'image en grille rectangulaire et essaie\n"
"de trouver le nombre de points de contrôle dans chaque section.\n"
"défaut: (5x5)"
#: enfuse_pro.lua:10
msgid "control points/grid"
msgstr "points de contrôle/grille"
#: enfuse_pro.lua:10
msgid ""
"number of control points (per grid, see option -g) \n"
"to create between adjacent images \n"
"default: (8)."
msgstr ""
"nombre de points de contrôle (par grille, voir option -g)\n"
"à créer entre les images adjacentes\n"
"défaut: (8)."
#: enfuse_pro.lua:10
msgid "remove control points with error"
msgstr "supprimer points contrôle en erreur"
#: enfuse_pro.lua:10
msgid ""
"remove all control points with an error higher \n"
"than num pixels \n"
"default: (3)"
msgstr ""
"supprime tous les points de contrôle avec une erreur supérieur\n"
"au nombre indiqué de pixels\n"
"défaut: (3)"
#: enfuse_pro.lua:10
msgid "correlation threshold for control points"
msgstr "seuil corrélation points de contrôle"
#: enfuse_pro.lua:10
msgid ""
"correlation threshold for identifying \n"
"control points \n"
"default: (0.9)."
msgstr ""
"seuil de corrélation pour identifier les points de contrôle.\n"
"défaut: (0.9)"
#: enfuse_pro.lua:10
msgid "contrast window size"
msgstr "taille zone de contraste"
#: enfuse_pro.lua:10
msgid ""
"set the window size for local contrast analysis. \n"
"the window will be a square of size × size pixels. \n"
"if given an even size, Enfuse will \n"
"automatically use the next odd number.\n"
"for contrast analysis size values larger \n"
"than 5 pixels might result in a \n"
"blurry composite image. values of 3 and \n"
"5 pixels have given good results on \n"
"focus stacks. \n"
"default: (5) pixels"
msgstr ""
"positionne la taille de la zone pour l'analyse du contraste local.\n"
"la taille de la zone est carré de taille x taille pixels.\n"
"si la taille est pair, Enfuse utilisera automatiquement le nombre impair supérieur.\n"
"pour une taille de plus de 5 pixels de large le résultat de l'image fusionnée peut être flou.\n"
"une valeur de 3 ou 5 donne de bons résultats pour une pile de focus.\n"
"défaut: (5) pixels"
#: enfuse_pro.lua:10
msgid "contrast edge scale"
msgstr "étendu bord de contraste"
#: enfuse_pro.lua:10
msgid ""
"a non-zero value for EDGE-SCALE switches on the \n"
"Laplacian-of-Gaussian (LoG) edge detection algorithm.\n"
" edage-scale is the radius of the Gaussian used \n"
"in the search for edges. a positive LCE-SCALE \n"
"turns on local contrast enhancement (LCE) \n"
"before the LoG edge detection. \n"
"Default: (0.0) pixels."
msgstr ""
"une valeur non nulle active l'algorithme Laplace de la Gaussienne (LoG) de détection des bords.\n"
"cette valeur est le rayon de gausse utilisé pour la recherche des bords. une valeur positive\n"
"pour ... (LCE) active l'amélioration du contraste local avant la détection des bords LoG.\n"
"défaut: (0.0) pixels."
#: enfuse_pro.lua:10
msgid "contrast min curvature"
msgstr "courbure min contraste"
#: enfuse_pro.lua:10
msgid "define the minimum curvature for the LoG edge detection. Append a ‘%’ to specify the minimum curvature relative to maximum pixel value in the source image. Default: (0.0%)"
msgstr ""
"défini la courbure minimum pour la détection des bord (LoG). \n"
"Ajouter un « % » pour spécifier que la courbure minimum soit relative au nombre de pixels de l'image source.\n"
"Défaut: (0.0%)."
#: enfuse_pro.lua:10
msgid "on conflict"
msgstr "lors d'un conflit"
#: enfuse_pro.lua:10
msgid "create unique filename"
msgstr "créer fichier unique"
#: enfuse_pro.lua:10
msgid "overwrite"
msgstr "écraser"
#: enfuse_pro.lua:10
msgid "create image variants with saved presets"
msgstr "créer une image depuis pré-sélections"
#: enfuse_pro.lua:10
msgid ""
"creates image variants with the three \n"
"saved HDR or DFF presets"
msgstr "créer une image depuis les trois pré-sélection enregistrés, HDR ou DFF."
#: enfuse_pro.lua:10
msgid "save fusion preset"
msgstr "sauvegarder options de fusion"
#: enfuse_pro.lua:10
msgid "save the selected fusion preset"
msgstr "sauvegarder les options de fusion courantes"
#: enfuse_pro.lua:10
msgid "preset HDR 1 saved"
msgstr "pré-sélection HDR 1 sauvegardée"
#: enfuse_pro.lua:10
msgid "preset HDR 2 saved"
msgstr "pré-sélection HDR 2 sauvegardée"
#: enfuse_pro.lua:10
msgid "preset HDR 3 saved"
msgstr "pré-sélection HDR 3 sauvegardée"
#: enfuse_pro.lua:10
msgid "preset DFF 1 saved"
msgstr "pré-sélection DFF 1 sauvegardée"
#: enfuse_pro.lua:10
msgid "preset DFF 2 saved"
msgstr "pré-sélection DFF 2 sauvegardée"
#: enfuse_pro.lua:10
msgid "preset DFF 3 saved"
msgstr "pré-sélection DFF 3 sauvegardée"
#: enfuse_pro.lua:10
msgid "preset free saved"
msgstr "pré-sélection libre sauvegardée"
#: enfuse_pro.lua:10
msgid "unkown error"
msgstr "erreur inconnue"
#: enfuse_pro.lua:10
msgid "load fusion preset defaults"
msgstr "charger défauts pré-sélection de fusion"
#: enfuse_pro.lua:10
msgid "load the default fusion preset settings"
msgstr "charge les options par défaut de fusion"
#: enfuse_pro.lua:10
msgid "file format"
msgstr "format de fichier"
#: enfuse_pro.lua:10
msgid "fusion preset"
msgstr "pré-sélection de fusion"
#: enfuse_pro.lua:10
msgid ""
"select the preset and save the preset\n"
" if you want to reuse it or create an image\n"
" variant"
msgstr ""
"sélectionne le pré-réglage et sauvegarde les valeurs courantes dans ce pré-réglage\n"
"si vous souhaitez réutiliser ces options de fusion."
#: enfuse_pro.lua:10
msgid "process successfully completed"
msgstr "fusion accomplie avec succès"
#: enfuse_pro.lua:10
msgid "ERROR: exiftool doesn't work. for more informations see terminal output"
msgstr "ERREUR: exiftool ne fonctionne pas. pour plus d'information voir les sorties de la console."
#: enfuse_pro.lua:10
msgid "ERROR: enfuse doesn't work. for more informations see terminal output"
msgstr "ERREUR: enfuse ne fonctionne pas. pour plus d'information voir les sorties de la console."
#: enfuse_pro.lua:10
msgid "export TIFF for image fusion "
msgstr "exportation de l'image fusionnée en TIFF"
#: enfuse_pro.lua:10
msgid "ERROR: align_image_stack not found. please install hugin."
msgstr "ERREUR: align_image_stack non trouvé, merci d'installer hugin."
#: enfuse_pro.lua:10
msgid "ERROR: enfuse not found. please install enfuse."
msgstr "ERREUR: enfuse non trouvé, merci d'installer enfuse."
#: enfuse_pro.lua:10
msgid "ERROR: wrong enfuse version found. the plugin works only with enfuse 4.2! please install enfuse version 4.2"
msgstr "ERREUR: mauvaise version d'enfuse détectée. ce plug-in ne fonctionne qu'avec enfuse version 4.2. merci d'installer enfuse version 4.2"
#: enfuse_pro.lua:10
msgid "ERROR: no target directory selected"
msgstr "ERREUR: pas de répertoire cible sélectionné"
#: enfuse_pro.lua:10
msgid "aligning images"
msgstr "aligner les images"
#: enfuse_pro.lua:10
msgid ""
"ERROR: not enough pictures selected. please select two or more images\n"
"from the same object, but with different camera settings."
msgstr ""
"ERREUR: pas assez d'image sélectionnée, merci de sélectionner au moins deux images\n"
"du même sujet, mais avec des paramètres différents de prise de vue."
#: enfuse_pro.lua:10
msgid ""
"you have selected more then 20 images. the align and fuse process could take a very long time! \n"
"have a nice beake."
msgstr ""
"vous avez sélectionné plus de 20 images. l'alignement des images peut prendre beaucoup de temps!\n"
"prenez une bonne pause!"
#: enfuse_pro.lua:10
msgid "aligning complete"
msgstr "alignement terminé"
#: enfuse_pro.lua:10
msgid "fuse image with HDR 1 presete"
msgstr "fusion depuis la pré-sélection HDR 1"
#: enfuse_pro.lua:10
msgid "fuse image with HDR 2 presete"
msgstr "fusion depuis la pré-sélection HDR 2"
#: enfuse_pro.lua:10
msgid "fuse image with HDR 3 presete"
msgstr "fusion depuis la pré-sélection HDR 3"
#: enfuse_pro.lua:10
msgid "fuse image with DFF 1 presete"
msgstr "fusion depuis la pré-sélection DFF 1"
#: enfuse_pro.lua:10
msgid "fuse image with DFF 2 presete"
msgstr "fusion depuis la pré-sélection DFF 2"
#: enfuse_pro.lua:10
msgid "fuse image with DFF 3 presete"
msgstr "fusion depuis la pré-sélection DFF 3"
#: enfuse_pro.lua:10
msgid "ERROR: align_image_stack doesn't work. For more information see terminal output"
msgstr "ERREUR: align_image_stack ne fonctionne pas. pour plus d'information voir les sorties de la console."
#: enfuse_pro.lua:10
msgid "enfuse pro: use GPU for remaping"
msgstr "enfuse pro: utiliser le GPU"
#: enfuse_pro.lua:10
msgid "set the GPU remapping for image align"
msgstr "utiliser le GPU pour l'alignement des images"
#: enfuse_pro.lua:10
msgid "enfuse pro: copy exiv tags"
msgstr "enfuse pro: copier les tags exifv"
#: enfuse_pro.lua:10
msgid "copy the exiv tags from the first image to the target"
msgstr "copier les tags exifs depuis la première image sur l'image finale"
#: enfuse_pro.lua:10
msgid "enfuse pro: add fused image to database"
msgstr "enfuse pro: importer l'image fusionnée"
#: enfuse_pro.lua:10
msgid "add the fused image to the darktable database"
msgstr "importer l'image fusionnée dans darktable"
#: enfuse_pro.lua:10
msgid "enfuse pro: JPEG compression"
msgstr "enfuse pro: compression JPEG"
#: enfuse_pro.lua:10
msgid "set the compression for JPEG files"
msgstr "positionne le niveau de compression jpeg"
#: enfuse_pro.lua:10
msgid "enfuse pro: TIFF compression"
msgstr "enfuse pro: compression TIFF"
#: enfuse_pro.lua:10
msgid "set the compression type for tiff files"
msgstr "positionne le niveau de compression tiff"
#: enfuse_pro.lua:10
msgid "enfuse pro: image color depth (bit)"
msgstr "enfuse pro: profondeur de couleur (bit)"
#: enfuse_pro.lua:10
msgid "set the output color depth"
msgstr "positionne la profondeur de couleur de la sortie"
#: enfuse_pro.lua:10
msgid "pseudo hdr or dff image"
msgstr "pseudo hdr ou dff image"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset HDR 1"
msgstr "enfuse depuis pré-selection HDR 1"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset HDR 2"
msgstr "enfuse depuis pré-selection HDR 2"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset HDR 3"
msgstr "enfuse depuis pré-selection HDR 3"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset DFF 1"
msgstr "enfuse depuis pré-selection DFF 1"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset DFF 2"
msgstr "enfuse depuis pré-selection DFF 2"
#: enfuse_pro.lua:10
msgid "enfuse with value from preset DFF 3"
msgstr "enfuse depuis pré-selection DFF 3"
#: enfuse_pro.lua:10
msgid "enfuse with value from free preset"
msgstr "enfuse depuis pré-sélection libre"
#: enfuse_pro.lua:10
msgid "creating HDR/DFF image"
msgstr "création de l'image HDR / DFF"