(original) (raw)
enfuse_pro-2.1.6/0000775000175000017500000000000013445472547013222 5ustar klemmhklemmhenfuse_pro-2.1.6/de_DE/0000775000175000017500000000000013063533620014144 5ustar klemmhklemmhenfuse_pro-2.1.6/de_DE/LC_MESSAGES/0000775000175000017500000000000013233402371015726 5ustar klemmhklemmhenfuse_pro-2.1.6/de_DE/LC_MESSAGES/enfuse_pro.po0000664000175000017500000004236513233402371020445 0ustar klemmhklemmhmsgid "" msgstr "" "Project-Id-Version: Lua image path\n" "POT-Creation-Date: 2018-01-11 20:33+0100\n" "PO-Revision-Date: 2018-01-11 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 Blickfeldes" #: 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 Blickfeldes 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 DRI or DFF presets" msgstr "Erstellt Bildvarianten mit Hilfe der drei \nabgespeicherten DRI 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 DRI 1 saved" msgstr "Voreinstellung DRI 1 wurde gespeichert" #: enfuse_pro.lua:10 msgid "preset DRI 2 saved" msgstr "Voreinstellung DRI 2 wurde gespeichert" #: enfuse_pro.lua:10 msgid "preset DRI 3 saved" msgstr "Voreinstellung DRI 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 DRI 1 presete" msgstr "Verschmelze Bild mit Voreinstellung DRI 1" #: enfuse_pro.lua:10 msgid "fuse image with DRI 2 presete" msgstr "Verschmelze Bild mit Voreinstellung DRI 2" #: enfuse_pro.lua:10 msgid "fuse image with DRI 3 presete" msgstr "Verschmelze Bild mit Voreinstellung DRI 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 "DRI or DFF image" msgstr "DRI oder DFF Bild" #: enfuse_pro.lua:10 msgid "enfuse with value from preset DRI 1" msgstr "verschmelze mit Voreinstellungen von DRI 1" #: enfuse_pro.lua:10 msgid "enfuse with value from preset DRI 2" msgstr "verschmelze mit Voreinstellungen von DRI 2" #: enfuse_pro.lua:10 msgid "enfuse with value from preset DRI 3" msgstr "verschmelze mit Voreinstellungen von DRI 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 DRI/DFF image" msgstr "Erstelle DRI oder DFF Bild" enfuse_pro-2.1.6/fr_FR/0000775000175000017500000000000013064273620014204 5ustar klemmhklemmhenfuse_pro-2.1.6/fr_FR/LC_MESSAGES/0000775000175000017500000000000013233402630015762 5ustar klemmhklemmhenfuse_pro-2.1.6/fr_FR/LC_MESSAGES/enfuse_pro.po0000664000175000017500000004244713233402630020502 0ustar klemmhklemmhmsgid "" 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 pascal@obry.net\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 DRI or DFF presets" msgstr "créer une image depuis les trois pré-sélection enregistrés, DRI 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 DRI 1 saved" msgstr "pré-sélection DRI 1 sauvegardée" #: enfuse_pro.lua:10 msgid "preset DRI 2 saved" msgstr "pré-sélection DRI 2 sauvegardée" #: enfuse_pro.lua:10 msgid "preset DRI 3 saved" msgstr "pré-sélection DRI 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 DRI 1 presete" msgstr "fusion depuis la pré-sélection DRI 1" #: enfuse_pro.lua:10 msgid "fuse image with DRI 2 presete" msgstr "fusion depuis la pré-sélection DRI 2" #: enfuse_pro.lua:10 msgid "fuse image with DRI 3 presete" msgstr "fusion depuis la pré-sélection DRI 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 DRI 1" msgstr "enfuse depuis pré-selection DRI 1" #: enfuse_pro.lua:10 msgid "enfuse with value from preset DRI 2" msgstr "enfuse depuis pré-selection DRI 2" #: enfuse_pro.lua:10 msgid "enfuse with value from preset DRI 3" msgstr "enfuse depuis pré-selection DRI 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 DRI/DFF image" msgstr "création de l'image DRI / DFF"enfuse_pro-2.1.6/enfuse_pro.lua0000664000175000017500000023551113443464143016070 0ustar klemmhklemmh--[[ Enfuse professional plugin for darktable 2.2.X, 2.4.X, 2.6.X copyright (c) 2017, 2018, 2019 Holger Klemm copyright (c) 2018 Andreas Urbschat 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.6 for darktable 2.2.X, 2.4.X, 2.6.X Known bugs: Release note: - bugfix ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT * align_image_stack * enfuse * exiftool * darktable lua lib (https://github.com/darktable-org/lua-scripts) USAGE * require this file from your main luarc config file. This plugin will add the new export modul "fusion to DRI or DFF image". DRI = Dynamic Range Increase / also called pseudo HDR, created from an exposure range DFF = deep focus fusion / focus stackung, created from a series of images with different focus points ]] local dt = require "darktable" local df = require "lib/dtutils.file" local log = require "lib/dtutils.log" local gettext = dt.gettext local namespace = 'enfuse_pro' local executable_table = {"align_image_stack", "enfuse", "exiftool"} -- works with LUA API version 4.0.0 and 5.0.0 dt.configuration.check_version(...,{4,0,0},{5,0,0}) dt.print_error("Enfuse pro plugin version 2.1.6 loaded") -- Tell gettext where to find the .mo file translating messages for a particular domain gettext.bindtextdomain(namespace,dt.configuration.config_dir.."/lua/") local function _(msgid) return gettext.dgettext(namespace, msgid) end -- command variables -- align local enfuse_pro_cmd_align_radial_distortion="" local enfuse_pro_cmd_align_optimize_field="" local enfuse_pro_cmd_align_optimize_center="" local enfuse_pro_cmd_align_auto_crop="" local enfuse_pro_cmd_align_distortion="" local enfuse_pro_cmd_align_grid_size="" local enfuse_pro_cmd_align_control_points="" local enfuse_pro_cmd_align_control_points_remove="" local enfuse_pro_cmd_align_correlation="" local enfuse_pro_cmd_align_use_gpu="" -- enfuse local enfuse_pro_cmd_enfuse_exposure_weight="" local enfuse_pro_cmd_enfuse_saturation_weight="" local enfuse_pro_cmd_enfuse_contrast_weight="" local enfuse_pro_cmd_enfuse_exposure_optimum_weight="" local enfuse_pro_cmd_enfuse_exposure_width_weight="" local enfuse_pro_cmd_enfuse_hard_masks="" local enfuse_pro_cmd_enfuse_save_masks="" local enfuse_pro_cmd_enfuse_contrast_window_size="" local enfuse_pro_cmd_enfuse_contrast_edge_scale="" local enfuse_pro_cmd_enfuse_contrast_min_curvature="" local enfuse_pro_cmd_enfuse_color_depth="" local enfuse_pro_cmd_enfuse_compression="" local enfuse_pro_first_imagefile="" local enfuse_pro_last_imagefile="" local enfuse_pro_cmd_tmp_path="" local enfuse_pro_cmd_output_path="" local enfuse_pro_cmd_output_image="" local enfuse_pro_cmd_output_image_index=0 local enfuse_pro_path_with_filename="" local enfuse_pro_tmppath=dt.configuration.tmp_dir -- exif local enfuse_pro_cmd_exif_copy_exif="" -- output local enfuse_pro_cmd_suffix_output_format="" -- commands local enfuse_pro_alignStartCommand="" local enfuse_pro_enfuseStartCommand="" local enfuse_pro_exixStartCommand="" local enfuse_pro_outputindex=0 local enfuse_pro_job=0 local images_to_align ="" -- initialize combobox and checkbox value for default if (dt.preferences.read(namespace, "selected_fusion", "integer") == 0) or (dt.preferences.read(namespace, "selected_overwrite", "integer") == 0) then -- align defaults dt.preferences.write(namespace, "selected_fusion", "integer", 1) --Typ DRI dt.preferences.write(namespace, "checked_radial_distortion", "bool", false) dt.preferences.write(namespace, "checked_optimize_field", "bool", false) dt.preferences.write(namespace, "checked_optimize_image_center", "bool", true) dt.preferences.write(namespace, "checked_auto_crop", "bool", true) dt.preferences.write(namespace, "checked_distortion", "bool", true) dt.preferences.write(namespace, "selected_grid_size", "integer", 5) dt.preferences.write(namespace, "selected_control_points", "integer", 8) dt.preferences.write(namespace, "selected_control_points_remove", "integer", 3) dt.preferences.write(namespace, "selected_correlation", "integer", 9) -- enfuse defaults dt.preferences.write(namespace, "selected_fusion_type", "integer", 1) dt.preferences.write(namespace, "checked_image_variants", "bool", false) dt.preferences.write(namespace, "checked_hard_masks", "bool", false) dt.preferences.write(namespace, "checked_save_masks", "bool", false) dt.preferences.write(namespace, "selected_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_exposure_weight", "float", 1.0) dt.preferences.write(namespace, "set_saturation_weight", "float", 0.5) dt.preferences.write(namespace, "set_contrast_weight", "float", 0.0) dt.preferences.write(namespace, "set_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_exposure_width_weight", "float",0.2) dt.preferences.write(namespace, "selected_overwrite", "integer",1) dt.preferences.write(namespace, "sentitiv_overwrite", "bool",true) -- preset DRI 1 dt.preferences.write(namespace, "checked_dri1_hard_masks", "bool", false) dt.preferences.write(namespace, "checked_dri1_save_masks", "bool", false) dt.preferences.write(namespace, "selected_dri1_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_dri1_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_dri1_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_dri1_exposure_weight", "float", 1.0) dt.preferences.write(namespace, "set_dri1_saturation_weight", "float", 0.5) dt.preferences.write(namespace, "set_dri1_contrast_weight", "float", 0.0) dt.preferences.write(namespace, "set_dri1_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_dri1_exposure_width_weight", "float",0.2) -- preset DRI 2 dt.preferences.write(namespace, "checked_dri2_hard_masks", "bool", false) dt.preferences.write(namespace, "checked_dri2_save_masks", "bool", false) dt.preferences.write(namespace, "selected_dri2_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_dri2_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_dri2_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_dri2_exposure_weight", "float", 1.0) dt.preferences.write(namespace, "set_dri2_saturation_weight", "float", 0.5) dt.preferences.write(namespace, "set_dri2_contrast_weight", "float", 0.0) dt.preferences.write(namespace, "set_dri2_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_dri2_exposure_width_weight", "float",0.2) -- preset DRI 3 dt.preferences.write(namespace, "checked_dri3_hard_masks", "bool", false) dt.preferences.write(namespace, "checked_dri3_save_masks", "bool", false) dt.preferences.write(namespace, "selected_dri3_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_dri3_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_dri3_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_dri3_exposure_weight", "float", 1.0) dt.preferences.write(namespace, "set_dri3_saturation_weight", "float", 0.5) dt.preferences.write(namespace, "set_dri3_contrast_weight", "float", 0.0) dt.preferences.write(namespace, "set_dri3_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_dri3_exposure_width_weight", "float",0.2) -- preset DFF 1 dt.preferences.write(namespace, "checked_dff1_hard_masks", "bool", true) dt.preferences.write(namespace, "checked_dff1_save_masks", "bool", false) dt.preferences.write(namespace, "selected_dff1_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_dff1_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_dff1_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_dff1_exposure_weight", "float", 0.0) dt.preferences.write(namespace, "set_dff1_saturation_weight", "float", 0.0) dt.preferences.write(namespace, "set_dff1_contrast_weight", "float", 1.0) dt.preferences.write(namespace, "set_dff1_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_dff1_exposure_width_weight", "float",0.2) -- preset DFF 2 dt.preferences.write(namespace, "checked_dff2_hard_masks", "bool", true) dt.preferences.write(namespace, "checked_dff2_save_masks", "bool", false) dt.preferences.write(namespace, "selected_dff2_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_dff2_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_dff2_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_dff2_exposure_weight", "float", 0.0) dt.preferences.write(namespace, "set_dff2_saturation_weight", "float", 0.0) dt.preferences.write(namespace, "set_dff2_contrast_weight", "float", 1.0) dt.preferences.write(namespace, "set_dff2_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_dff2_exposure_width_weight", "float",0.2) -- preset DFF 3 dt.preferences.write(namespace, "checked_dff3_hard_masks", "bool", true) dt.preferences.write(namespace, "checked_dff3_save_masks", "bool", false) dt.preferences.write(namespace, "selected_dff3_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_dff3_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_dff3_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_dff3_exposure_weight", "float", 0.0) dt.preferences.write(namespace, "set_dff3_saturation_weight", "float", 0.0) dt.preferences.write(namespace, "set_dff3_contrast_weight", "float", 1.0) dt.preferences.write(namespace, "set_dff3_exposure_optimum_weight", "float", 0.5) dt.preferences.write(namespace, "set_dff3_exposure_width_weight", "float",0.2) -- preset FREE dt.preferences.write(namespace, "checked_free_hard_masks", "bool", false) dt.preferences.write(namespace, "checked_free_save_masks", "bool", false) dt.preferences.write(namespace, "selected_free_contrast_window_size", "integer", 3) dt.preferences.write(namespace, "selected_free_contrast_edge_scale", "integer", 1) dt.preferences.write(namespace, "selected_free_contrast_min_curvature", "integer", 1) dt.preferences.write(namespace, "set_free_exposure_weight", "float", 0.0) dt.preferences.write(namespace, "set_free_saturation_weight", "float", 0.0) dt.preferences.write(namespace, "set_free_contrast_weight", "float", 0.0) dt.preferences.write(namespace, "set_free_exposure_optimum_weight", "float", 0.0) dt.preferences.write(namespace, "set_free_exposure_width_weight", "float",0.0) -- output dt.preferences.write(namespace, "selected_output_format", "integer", 2) end --GUI local enfuse_pro_separator1 = dt.new_widget("separator") { } local enfuse_pro_separator1b = dt.new_widget("separator") { } local enfuse_pro_separator2 = dt.new_widget("separator") {} local enfuse_pro_separator2b = dt.new_widget("separator") {} local enfuse_pro_label_line1= dt.new_widget("label") { label = "_______________________________________________", ellipsize = "start", halign = "end" } local enfuse_pro_label_line2= dt.new_widget("label") { label = "_______________________________________________", ellipsize = "start", halign = "end" } local enfuse_pro_label_line3= dt.new_widget("label") { label = "_______________________________________________", ellipsize = "start", halign = "end" } local enfuse_pro_label_align_options= dt.new_widget("label") { label = _('image align options'), ellipsize = "start", halign = "end" } local enfuse_pro_label_enfuse_options= dt.new_widget("label") { label = _('image fusion options'), ellipsize = "start", halign = "end" } local enfuse_pro_label_output_format= dt.new_widget("label") { label = _('target file'), ellipsize = "start", halign = "end" } local enfuse_pro_label_path = dt.new_widget("label") { label = _('directory'), ellipsize = "start", halign = "start" } local enfuse_pro_check_button_radial_distortion = dt.new_widget("check_button") { label = _('optimize radial distortion for all images'), value = dt.preferences.read(namespace, "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(namespace, "checked_radial_distortion", "bool", true) enfuse_pro_cmd_align_radial_distortion="-d" -- return else dt.preferences.write(namespace, "checked_radial_distortion", "bool", false) enfuse_pro_cmd_align_radial_distortion="" -- return end end, } local enfuse_pro_check_button_optimize_field = dt.new_widget("check_button") { label = _('optimize field of view for all images'), value = dt.preferences.read(namespace, "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(namespace, "checked_optimize_field", "bool", true) enfuse_pro_cmd_align_optimize_field="-m" -- return else dt.preferences.write(namespace, "checked_optimize_field", "bool", false) enfuse_pro_cmd_align_optimize_field="" -- return end end, } local enfuse_pro_check_button_optimize_image_center = dt.new_widget("check_button") { label = _('optimize image center shift for all images'), value = dt.preferences.read(namespace, "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(namespace, "checked_optimize_image_center", "bool", true) enfuse_pro_cmd_align_optimize_center="-i" -- return else dt.preferences.write(namespace, "checked_optimize_image_center", "bool", false) enfuse_pro_cmd_align_optimize_center="" -- return end end, } local enfuse_pro_check_button_auto_crop = dt.new_widget("check_button") { label = _('auto crop the image'), value = dt.preferences.read(namespace, "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(namespace, "checked_auto_crop", "bool", true) enfuse_pro_cmd_align_auto_crop="-C" -- return else dt.preferences.write(namespace, "checked_auto_crop", "bool", false) enfuse_pro_cmd_align_auto_crop="" -- return end end, } local enfuse_pro_check_button_distortion = dt.new_widget("check_button") { label = _('load distortion from lens database'), value = dt.preferences.read(namespace, "checked_distortion", "bool"), tooltip =_('try to load distortion information from lens database'), clicked_callback = function(distortion) if (distortion.value) then dt.preferences.write(namespace, "checked_distortion", "bool", true) enfuse_pro_cmd_align_distortion="--distortion" -- return else dt.preferences.write(namespace, "checked_distortion", "bool", false) enfuse_pro_cmd_align_distortion="" -- return end end, } local enfuse_pro_check_button_hard_masks = dt.new_widget("check_button") { label = _('hard mask'), value = dt.preferences.read(namespace, "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(namespace, "checked_hard_masks", "bool") end, } local enfuse_pro_check_button_save_masks = dt.new_widget("check_button") { label = _('save masks'), value = dt.preferences.read(namespace, "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(namespace, "checked_save_masks", "bool") end, } local enfuse_pro_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(namespace, "set_exposure_weight", "float") --1 default } local enfuse_pro_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(namespace, "set_saturation_weight", "float"), --0.5 } local enfuse_pro_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(namespace, "set_contrast_weight", "float")--0 default } local enfuse_pro_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(namespace, "set_exposure_optimum_weight", "float")--0.5 default0 } local enfuse_pro_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(namespace, "set_exposure_width_weight", "float") --0.2 default } local enfuse_pro_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.') } local enfuse_pro_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(namespace, "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(namespace, "selected_grid_size", "integer") end, } local enfuse_pro_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(namespace, "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(namespace, "selected_control_points", "integer") end, } local enfuse_pro_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(namespace, "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(namespace, "selected_control_points_remove", "integer") end, } local enfuse_pro_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(namespace, "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(namespace, "selected_correlation", "integer") end } local enfuse_pro_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(namespace, "selected_contrast_window_size", "integer"), --3, "3","4","5","6","7","8","9","10", changed_callback = function(sel_window_size) enfuse_pro_cmd_enfuse_contrast_window_size="--contrast-window-size="..sel_window_size.value end, "3", "4", "5","6","7","8","9","10", } local enfuse_pro_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(namespace, "selected_contrast_edge_scale", "integer"), --1, "0:0:0", changed_callback = function(sel_contrast_edge_scale) enfuse_pro_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", } local enfuse_pro_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(namespace, "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) enfuse_pro_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%", } local enfuse_pro_combobox_existing_file = dt.new_widget("combobox") { label = _('on conflict'), value = dt.preferences.read(namespace, "selected_overwrite", "integer"), --1, sensitive= dt.preferences.read(namespace, "sentitiv_overwrite", "bool"), --1, changed_callback = function(sel_overwrite) dt.preferences.write(namespace, "selected_overwrite", "integer", sel_overwrite.selected) end, _('create unique filename'),_('overwrite'), reset_callback = function(self_overwrite) self_overwrite.value = dt.preferences.read(namespace, "selected_overwrite", "integer") end, } local enfuse_pro_check_button_image_variations = dt.new_widget("check_button") { label = _('create image variants with saved presets'), value = dt.preferences.read(namespace, "checked_image_variants", "bool"), tooltip =_('creates image variants with the three \nsaved DRI or DFF presets'), sensitive=true, clicked_callback = function(variations) if (variations.value) then dt.preferences.write(namespace, "checked_image_variants", "bool", true) dt.preferences.write(namespace, "sentitiv_overwrite", "bool",false) enfuse_pro_combobox_existing_file.value=1 enfuse_pro_combobox_existing_file.sensitive=false else dt.preferences.write(namespace, "checked_image_variants", "bool", false) dt.preferences.write(namespace, "sentitiv_overwrite", "bool",true) enfuse_pro_combobox_existing_file.sensitive=true end end, reset_callback = function(self_image_variations) dt.preferences.write(namespace, "checked_image_variants", "bool", false) dt.preferences.write(namespace, "sentitiv_overwrite", "bool",true) self_image_variations.value = false enfuse_pro_combobox_existing_file.sensitive=true end, } local enfuse_pro_button_save_preset = dt.new_widget("button") { label = _('save fusion preset'), tooltip =_('save the selected fusion preset'), clicked_callback = function(save_fusion_type) if (enfuse_pro_combobox_fusion_type.value == "1 - DRI image") then -- preset DRI 1 dt.preferences.write(namespace, "checked_dri1_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_dri1_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_dri1_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_dri1_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_dri1_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_dri1_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_dri1_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_dri1_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_dri1_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_dri1_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset DRI 1 saved')) elseif (enfuse_pro_combobox_fusion_type.value == "2 - DRI image") then -- preset DRI 2 dt.preferences.write(namespace, "checked_dri2_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_dri2_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_dri2_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_dri2_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_dri2_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_dri2_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_dri2_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_dri2_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_dri2_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_dri2_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset DRI 2 saved')) elseif (enfuse_pro_combobox_fusion_type.value == "3 - DRI image") then -- preset DRI 3 dt.preferences.write(namespace, "checked_dri3_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_dri3_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_dri3_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_dri3_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_dri3_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_dri3_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_dri3_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_dri3_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_dri3_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_dri3_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset DRI 3 saved')) elseif (enfuse_pro_combobox_fusion_type.value == "1 - DFF image") then -- preset DFF 1 dt.preferences.write(namespace, "checked_dff1_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_dff1_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_dff1_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_dff1_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_dff1_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_dff1_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_dff1_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_dff1_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_dff1_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_dff2_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset DFF 1 saved')) elseif (enfuse_pro_combobox_fusion_type.value == "2 - DFF image") then -- preset DFF 2 dt.preferences.write(namespace, "checked_dff2_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_dff2_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_dff2_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_dff2_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_dff2_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_dff2_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_dff2_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_dff2_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_dff2_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_dff2_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset DFF 2 saved')) elseif (enfuse_pro_combobox_fusion_type.value == "3 - DFF image") then -- preset DFF 3 dt.preferences.write(namespace, "checked_dff3_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_dff3_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_dff3_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_dff3_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_dff3_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_dff3_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_dff3_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_dff3_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_dff3_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_dff3_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset DFF 3 saved')) elseif (enfuse_pro_combobox_fusion_type.value == "free preset") then -- preset FREE dt.preferences.write(namespace, "checked_free_hard_masks", "bool", enfuse_pro_check_button_hard_masks.value) dt.preferences.write(namespace, "checked_free_save_masks", "bool", enfuse_pro_check_button_save_masks.value) dt.preferences.write(namespace, "selected_free_contrast_window_size", "integer", enfuse_pro_combobox_contrast_window_size.selected) dt.preferences.write(namespace, "selected_free_contrast_edge_scale", "integer", enfuse_pro_combobox_contrast_edge_scale.selected) dt.preferences.write(namespace, "selected_free_contrast_min_curvature", "integer", enfuse_pro_combobox_contrast_min_curvature.selected) dt.preferences.write(namespace, "set_free_exposure_weight", "float", enfuse_pro_slider_exposure_weight.value) dt.preferences.write(namespace, "set_free_saturation_weight", "float", enfuse_pro_slider_saturation_weight.value) dt.preferences.write(namespace, "set_free_contrast_weight", "float", enfuse_pro_slider_contrast_weight.value) dt.preferences.write(namespace, "set_free_exposure_optimum_weight", "float", enfuse_pro_slider_exposure_optimum_weight.value) dt.preferences.write(namespace, "set_free_exposure_width_weight", "float",enfuse_pro_slider_exposure_width_weight.value) dt.print(_('preset free saved')) else dt.print(_('unkown error')) end end } local enfuse_pro_button_load_preset = dt.new_widget("button") { label = _('load fusion preset defaults'), tooltip =_('load the default fusion preset settings'), clicked_callback = function(preset_default) enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_exposure_width_weight", "float") end, } local enfuse_pro_combobox_output_format = dt.new_widget("combobox") { label = _('file format'), value = dt.preferences.read(namespace, "selected_output_format", "integer"), --2, "TIFF", "JPEG", "PNG","PNM","PBM","PGM","PPM", changed_callback = function(sel_output_format) dt.preferences.write(namespace, "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(namespace, "selected_output_format", "integer") end, } local enfuse_pro_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(namespace, "selected_fusion_type", "integer"), --1, "DRI image", "DFF image", "without preset", changed_callback = function(sel_fusion) dt.preferences.write(namespace, "selected_fusion_type", "integer", sel_fusion.selected) -- preset DRI 1 if (sel_fusion.value == "1 - DRI image") then -- defaults for DRI images enfuse_pro_check_button_hard_masks.sensitive=false enfuse_pro_check_button_hard_masks.value=false enfuse_pro_slider_contrast_weight.sensitive=true enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_dri1_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_dri1_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_dri1_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_dri1_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_dri1_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_dri1_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_dri1_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_dri1_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_dri1_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_dri1_exposure_width_weight", "float") -- preset DRI 2 elseif (sel_fusion.value == "2 - DRI image") then -- defaults for DRI images enfuse_pro_check_button_hard_masks.sensitive=false enfuse_pro_check_button_hard_masks.value=false enfuse_pro_slider_contrast_weight.sensitive=true enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_dri2_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_dri2_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_dri2_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_dri2_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_dri2_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_dri2_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_dri2_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_dri2_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_dri2_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_dri2_exposure_width_weight", "float") -- preset DRI 3 elseif (sel_fusion.value == "3 - DRI image") then -- defaults for DRI images enfuse_pro_check_button_hard_masks.sensitive=false enfuse_pro_check_button_hard_masks.value=false enfuse_pro_slider_contrast_weight.sensitive=true enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_dri3_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_dri3_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_dri3_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_dri3_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_dri3_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_dri3_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_dri3_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_dri3_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_dri3_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_dri3_exposure_width_weight", "float") -- preset DFF 1 elseif (sel_fusion.value == "1 - DFF image") then -- defaults for focus stacking images enfuse_pro_check_button_hard_masks.sensitive=false enfuse_pro_check_button_hard_masks.value=true enfuse_pro_slider_contrast_weight.sensitive=false enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_dff1_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_dff1_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_dff1_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_dff1_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_dff1_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_dff1_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_dff1_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_dff1_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_dff1_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_dff1_exposure_width_weight", "float") -- preset DFF 2 elseif (sel_fusion.value == "2 - DFF image") then -- defaults for focus stacking images enfuse_pro_check_button_hard_masks.sensitive=false enfuse_pro_check_button_hard_masks.value=true enfuse_pro_slider_contrast_weight.sensitive=false enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_dff2_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_dff2_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_dff2_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_dff2_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_dff2_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_dff2_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_dff2_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_dff2_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_dff2_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_dff2_exposure_width_weight", "float") -- preset DFF 3 elseif (sel_fusion.value == "3 - DFF image") then -- defaults for focus stacking images enfuse_pro_check_button_hard_masks.sensitive=false enfuse_pro_check_button_hard_masks.value=true enfuse_pro_slider_contrast_weight.sensitive=false enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_dff3_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_dff3_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_dff3_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_dff3_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_dff3_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_dff3_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_dff3_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_dff3_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_dff3_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_dff3_exposure_width_weight", "float") -- preset FREE elseif (sel_fusion.value == "free preset") then -- enfuse defaults enfuse_pro_check_button_hard_masks.sensitive=true enfuse_pro_check_button_hard_masks.value=false enfuse_pro_slider_contrast_weight.sensitive=true enfuse_pro_check_button_hard_masks.value=dt.preferences.read(namespace, "checked_free_hard_masks", "bool") enfuse_pro_check_button_save_masks.value=dt.preferences.read(namespace, "checked_free_save_masks", "bool") enfuse_pro_combobox_contrast_window_size.value=dt.preferences.read(namespace, "selected_free_contrast_window_size", "integer") enfuse_pro_combobox_contrast_edge_scale.value=dt.preferences.read(namespace, "selected_free_contrast_edge_scale", "integer") enfuse_pro_combobox_contrast_min_curvature.value=dt.preferences.read(namespace, "selected_free_contrast_min_curvature", "integer") enfuse_pro_slider_exposure_weight.value=dt.preferences.read(namespace, "set_free_exposure_weight", "float") enfuse_pro_slider_saturation_weight.value=dt.preferences.read(namespace, "set_free_saturation_weight", "float") enfuse_pro_slider_contrast_weight.value=dt.preferences.read(namespace, "set_free_contrast_weight", "float") enfuse_pro_slider_exposure_optimum_weight.value=dt.preferences.read(namespace, "set_free_exposure_optimum_weight", "float") enfuse_pro_slider_exposure_width_weight.value=dt.preferences.read(namespace, "set_free_exposure_width_weight", "float") end end, "1 - DRI image", "2 - DRI image","3 - DRI image","1 - DFF image", "2 - DFF image","3 - DFF image","free preset", reset_callback = function(self_type) enfuse_pro_combobox_fusion_type.value = dt.preferences.read(namespace, "selected_fusion_type", "integer") end, } --FUNCTION local exec_widget if dt.configuration.running_os ~= "linux" then exec_widget = df.executable_path_widget(executable_table) end local widget = dt.new_widget("box") { orientation = "vertical", enfuse_pro_label_align_options, enfuse_pro_label_line2, enfuse_pro_check_button_radial_distortion, enfuse_pro_check_button_optimize_field, enfuse_pro_check_button_optimize_image_center, enfuse_pro_check_button_auto_crop, enfuse_pro_check_button_distortion, enfuse_pro_combobox_grid_size, enfuse_pro_combobox_control_points, enfuse_pro_combobox_control_points_remove, enfuse_pro_combobox_correlation, enfuse_pro_separator1, enfuse_pro_separator1b, enfuse_pro_label_enfuse_options, enfuse_pro_label_line3, enfuse_pro_combobox_fusion_type, enfuse_pro_check_button_image_variations, enfuse_pro_slider_exposure_weight, enfuse_pro_slider_saturation_weight, enfuse_pro_slider_contrast_weight, enfuse_pro_slider_exposure_optimum_weight, enfuse_pro_slider_exposure_width_weight, enfuse_pro_check_button_hard_masks, enfuse_pro_check_button_save_masks, enfuse_pro_combobox_contrast_edge_scale, enfuse_pro_combobox_contrast_min_curvature, enfuse_pro_combobox_contrast_window_size, enfuse_pro_button_save_preset, enfuse_pro_button_load_preset, enfuse_pro_separator2, enfuse_pro_separator2b, enfuse_pro_label_output_format, enfuse_pro_label_line1, enfuse_pro_combobox_output_format, enfuse_pro_label_path, enfuse_pro_file_chooser_button_path, enfuse_pro_combobox_existing_file, exec_widget } local function GetFileName(full_path) full_path = "x/" .. full_path --workoround because of luas lack with regex in case of single filename 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 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() log.msg(log.debug, "remove immages_to_align: "..images_to_align) --local result_to_align_images=dt.control.execute("rm "..images_to_align) for m in images_to_align:gmatch("[^\"]+%s?[^\"]+") do log.msg(log.debug, os.remove(m)) end local a = enfuse_pro_tmppath.."/aligned_*.tif" log.msg(log.debug, "remove ".. a) if dt.configuration.running_os == "linux" then log.msg(log.debug, dt.control.execute("rm "..a)) else log.msg(log.debug, dt.control.execute("del "..a:gsub("/","\\"))) end os.remove(a) images_to_align="" -- JH end local function create_enfuse_command() -- create enfuse command enfuse_pro_enfuseStartCommand="enfuse "..enfuse_pro_cmd_enfuse_exposure_weight.." "..enfuse_pro_cmd_enfuse_saturation_weight.." "..enfuse_pro_cmd_enfuse_contrast_weight.." "..enfuse_pro_cmd_enfuse_exposure_optimum_weight.." "..enfuse_pro_cmd_enfuse_exposure_width_weight.." "..enfuse_pro_cmd_enfuse_hard_masks.." "..enfuse_pro_cmd_enfuse_save_masks.." "..enfuse_pro_cmd_enfuse_contrast_window_size.." "..enfuse_pro_cmd_enfuse_contrast_edge_scale.." "..enfuse_pro_cmd_enfuse_contrast_min_curvature.." "..enfuse_pro_cmd_enfuse_color_depth.." "..enfuse_pro_cmd_enfuse_compression.." "..enfuse_pro_cmd_output_image.." "..enfuse_pro_tmppath.."/aligned_*.tif" log.msg(log.debug, enfuse_pro_enfuseStartCommand) -- execute enfuse local resultenfuse=dt.control.execute(enfuse_pro_enfuseStartCommand) enfuse_pro_job.percent = enfuse_pro_job.percent + 0.10 if (resultenfuse == 0) then --copy exif tasgs if (dt.preferences.read("enfuse_pro", "exiftool_copy_tags", "bool")) then -- create exif command enfuse_pro_exixStartCommand=exiftool .." -TagsFromFile \""..enfuse_pro_first_imagefile.."\" -exif:all --subifd:all -overwrite_original \""..enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."."..enfuse_pro_cmd_suffix_output_format.."\"" log.msg(log.debug, enfuse_pro_exixStartCommand) -- execute exif local resultexif=dt.control.execute(enfuse_pro_exixStartCommand) if (dt.preferences.read("enfuse_pro", "add_image_to_db", "bool")) then local image = dt.database.import(enfuse_pro_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')) -- enfuse_pro_job.valid = false end elseif (dt.preferences.read("module_enfuse_pro", "add_image_to_db", "bool")) then local image = dt.database.import(enfuse_pro_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 --log.log_level(log.error) log.log_level(log.debug) enfuse_pro_job = dt.gui.create_job(_('creating DRI/DFF image'), true, stop_selection) -- list of exported images local img_set = {} -- reset and create image list for k,_ in pairs(image_table) do table.insert(img_set, k) end -- use first and last file as basename for output file table.sort(img_set, function(a,b) return a.filename < b.filename end); local last_file = nil local first_file = nil local counted_images=0 for _, k in ipairs(img_set) do if first_file == nil then first_file = k end counted_images=counted_images+1 last_file = k end local filepath = df.split_filepath(first_file.filename) log.msg(log.info, "filepath is ", filepath) -- directory of the original file local dst_path = first_file.path log.msg(log.info, "dst_path is ", dst_path) local align_image_stack = df.check_if_bin_exists("align_image_stack") log.msg(log.debug, "align_image_stack set to ", align_image_stack) local enfuse = df.check_if_bin_exists("enfuse") log.msg(log.debug, "enfuse set to ", enfuse) local exiftool = df.check_if_bin_exists("exiftool") log.msg(log.debug, "exiftool set to ", exiftool) -- check installed software if (align_image_stack == "") then dt.print(_('ERROR: align_image_stack not found. please install hugin.')) log.msg(log.error, _('align_image_stack not found. please install hugin.')) dt.control.execute("rm "..enfuse_pro_tmppath.."/*.tif") --todo enfuse_pro_job.valid = false return elseif (enblend == "") then dt.print(_('ERROR: enfuse not found. please install enfuse.')) log.msg(log.error, _('enfuse not found. please install enfuse.')) dt.control.execute("rm "..enfuse_pro_tmppath.."*.tif") --todo enfuse_pro_job.valid = false return elseif (exiftool == "") then dt.print(_('ERROR: exiftool not found. please install exiftool.')) log.msg(log.error, _('exiftool not found. please install exiftool.')) dt.control.execute("rm "..enfuse_pro_tmppath.."*.tif") --todo enfuse_pro_job.valid = false return end if dt.configuration.running_os == "linux" then local enfuseVersionStartCommand='enfuse --version | grep "enfuse 4.2"' local 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')) enfuse_pro_job.valid = false return end end if enfuse_pro_file_chooser_button_path.value == nil then enfuse_pro_cmd_output_path = dst_path else enfuse_pro_cmd_output_path = enfuse_pro_file_chooser_button_path.value end if (enfuse_pro_cmd_output_path == nil) then dt.print(_('ERROR: no target directory selected')) enfuse_pro_job.valid = false return else -- create align command dt.print(_('aligning images')) if (enfuse_pro_check_button_radial_distortion.value) then enfuse_pro_cmd_align_radial_distortion="-d" else enfuse_pro_cmd_align_radial_distortion="" end if (enfuse_pro_check_button_optimize_field.value) then enfuse_pro_cmd_align_optimize_field="-m" else enfuse_pro_cmd_align_optimize_field="" end if (enfuse_pro_check_button_optimize_image_center.value) then enfuse_pro_cmd_align_optimize_center="-i" else enfuse_pro_cmd_align_optimize_center="" end if (enfuse_pro_check_button_auto_crop.value) then enfuse_pro_cmd_align_auto_crop="-C" else enfuse_pro_cmd_align_auto_crop="" end if (enfuse_pro_check_button_distortion.value) then enfuse_pro_cmd_align_distortion="--distortion" else enfuse_pro_cmd_align_distortion="" end enfuse_pro_cmd_align_grid_size="-g "..enfuse_pro_combobox_grid_size.value enfuse_pro_cmd_align_control_points="-c "..enfuse_pro_combobox_control_points.value enfuse_pro_cmd_align_control_points_remove="-t "..enfuse_pro_combobox_control_points_remove.value enfuse_pro_cmd_align_correlation="--corr="..enfuse_pro_combobox_correlation.value if (dt.preferences.read("module_enfuse_pro", "align_use_gpu", "bool")) then enfuse_pro_cmd_align_use_gpu="--gpu" else enfuse_pro_cmd_align_use_gpu="" end for _,v in pairs(image_table) do images_to_align = images_to_align.."\"" ..v.."\" " end enfuse_pro_first_imagefile = first_file.filename enfuse_pro_last_imagefile = last_file.filename enfuse_pro_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 "..enfuse_pro_tmppath.."/*.tif") enfuse_pro_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 enfuse_pro_alignStartCommand="align_image_stack " ..enfuse_pro_cmd_align_radial_distortion.." "..enfuse_pro_cmd_align_optimize_field.." "..enfuse_pro_cmd_align_optimize_center.." "..enfuse_pro_cmd_align_auto_crop.." "..enfuse_pro_cmd_align_distortion.." "..enfuse_pro_cmd_align_grid_size.." "..enfuse_pro_cmd_align_control_points.." "..enfuse_pro_cmd_align_control_points_remove.." "..enfuse_pro_cmd_align_correlation.." "..enfuse_pro_cmd_align_use_gpu.." -a "..enfuse_pro_tmppath.."/aligned_ "..images_to_align log.msg(log.debug, enfuse_pro_alignStartCommand) local resultalign=dt.control.execute(enfuse_pro_alignStartCommand) enfuse_pro_job.percent = 0.3 if (resultalign == 0) then dt.print(_('aligning complete')) -- enfuse with all DRI presets if (((enfuse_pro_check_button_image_variations.value) and (enfuse_pro_combobox_fusion_type.value == "1 - DRI image")) or ((enfuse_pro_check_button_image_variations.value) and (enfuse_pro_combobox_fusion_type.value == "2 - DRI image")) or ((enfuse_pro_check_button_image_variations.value) and (enfuse_pro_combobox_fusion_type.value == "3 - DRI image"))) then for i = 1, 3 do dt.print(_('fuse image with DRI '..i..' presete')) enfuse_pro_cmd_enfuse_exposure_weight="--exposure-weight="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dri"..i.."_exposure_weight", "float"))) enfuse_pro_cmd_enfuse_saturation_weight="--saturation-weight="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dri"..i.."_saturation_weight", "float"))) enfuse_pro_cmd_enfuse_contrast_weight="--contrast-weight="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dri"..i.."_contrast_weight", "float"))) enfuse_pro_cmd_enfuse_exposure_optimum_weight="--exposure-optimum="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dri"..i.."_exposure_optimum_weight", "float"))) enfuse_pro_cmd_enfuse_exposure_width_weight="--exposure-width="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dri"..i.."_exposure_width_weight", "float"))) if (enfuse_pro_check_button_hard_masks.value) then enfuse_pro_cmd_enfuse_hard_masks="--hard-mask" else enfuse_pro_cmd_enfuse_hard_masks="" end if (enfuse_pro_check_button_save_masks.value) then enfuse_pro_cmd_enfuse_save_masks="--save-masks" else enfuse_pro_cmd_enfuse_save_masks="" end enfuse_pro_cmd_enfuse_contrast_window_size="--contrast-window-size="..dt.preferences.read(namespace, "selected_dri"..i.."_contrast_window_size", "integer") enfuse_pro_cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..dt.preferences.read(namespace, "selected_dri"..i.."_contrast_edge_scale", "integer") enfuse_pro_cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..dt.preferences.read(namespace, "selected_dri"..i.."_contrast_min_curvature", "integer") if enfuse_pro_file_chooser_button_path.value == nil then enfuse_pro_cmd_output_path = dst_path else enfuse_pro_cmd_output_path = enfuse_pro_file_chooser_button_path.value end enfuse_pro_cmd_enfuse_color_depth="--depth="..dt.preferences.read("module_enfuse_pro", "image_color_depth", "enum") if (enfuse_pro_combobox_output_format.value == "TIFF") then enfuse_pro_cmd_suffix_output_format="tif" elseif (enfuse_pro_combobox_output_format.value == "JPEG") then enfuse_pro_cmd_suffix_output_format="jpg" elseif (enfuse_pro_combobox_output_format.value == "PNG") then enfuse_pro_cmd_suffix_output_format="png" elseif (enfuse_pro_combobox_output_format.value == "PNM") then enfuse_pro_cmd_suffix_output_format="pnm" elseif (enfuse_pro_combobox_output_format.value == "PBM") then enfuse_pro_cmd_suffix_output_format="pbm" elseif (enfuse_pro_combobox_output_format.value == "PPM") then enfuse_pro_cmd_suffix_output_format="ppm" end if (enfuse_pro_combobox_output_format.value == "JPEG") then --JPEG enfuse_pro_cmd_enfuse_compression="--compression="..truncate(dt.preferences.read("module_enfuse_pro", "compression_jpeg", "integer")) elseif (enfuse_pro_combobox_output_format.value == "TIFF") then --TIFF enfuse_pro_cmd_enfuse_compression="--compression="..dt.preferences.read("module_enfuse_pro", "compression_tiff", "enum") else enfuse_pro_cmd_enfuse_compression="" end enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."."..enfuse_pro_cmd_suffix_output_format log.msg(log.debug, enfuse_pro_path_with_filename) while (file_exists(enfuse_pro_path_with_filename)) do enfuse_pro_cmd_output_image_index=enfuse_pro_cmd_output_image_index+1 if enfuse_pro_cmd_output_image_index <= 9 then enfuse_pro_outputindex="0"..tostring(enfuse_pro_cmd_output_image_index) else enfuse_pro_outputindex=tostring(enfuse_pro_cmd_output_image_index) end enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."_"..enfuse_pro_outputindex.."."..enfuse_pro_cmd_suffix_output_format end enfuse_pro_cmd_output_image="--output=\""..enfuse_pro_path_with_filename.."\"" enfuse_pro_cmd_output_image_index=0 create_enfuse_command() end remove_temp_files() enfuse_pro_job.valid = false dt.print(_('process successfully completed')) -- enfuse with all DFF presets elseif (((enfuse_pro_check_button_image_variations.value) and (enfuse_pro_combobox_fusion_type.value == "1 - DFF image")) or ((enfuse_pro_check_button_image_variations.value) and (enfuse_pro_combobox_fusion_type.value == "2 - DFF image")) or ((enfuse_pro_check_button_image_variations.value) and (enfuse_pro_combobox_fusion_type.value == "3 - DFF image"))) then for i = 1, 3 do dt.print(_('fuse image with DFF '..i..' presete')) enfuse_pro_cmd_enfuse_exposure_weight="--exposure-weight="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dff"..i.."_exposure_weight", "float"))) enfuse_pro_cmd_enfuse_saturation_weight="--saturation-weight="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dff"..i.."_saturation_weight", "float"))) enfuse_pro_cmd_enfuse_contrast_weight="--contrast-weight="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dff"..i.."_contrast_weight", "float"))) enfuse_pro_cmd_enfuse_exposure_optimum_weight="--exposure-optimum="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dff"..i.."_exposure_optimum_weight", "float"))) enfuse_pro_cmd_enfuse_exposure_width_weight="--exposure-width="..(replace_comma_to_dot(dt.preferences.read(namespace, "set_dff"..i.."_exposure_width_weight", "float"))) if (enfuse_pro_check_button_hard_masks.value) then enfuse_pro_cmd_enfuse_hard_masks="--hard-mask" else enfuse_pro_cmd_enfuse_hard_masks="" end if (enfuse_pro_check_button_save_masks.value) then enfuse_pro_cmd_enfuse_save_masks="--save-masks" else enfuse_pro_cmd_enfuse_save_masks="" end enfuse_pro_cmd_enfuse_contrast_window_size="--contrast-window-size="..dt.preferences.read(namespace, "selected_dff"..i.."_contrast_window_size", "integer") enfuse_pro_cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..dt.preferences.read(namespace, "selected_dff"..i.."_contrast_edge_scale", "integer") enfuse_pro_cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..dt.preferences.read(namespace, "selected_dff"..i.."_contrast_min_curvature", "integer") if enfuse_pro_file_chooser_button_path.value == nil then enfuse_pro_cmd_output_path = dst_path else enfuse_pro_cmd_output_path = enfuse_pro_file_chooser_button_path.value end enfuse_pro_cmd_enfuse_color_depth="--depth="..dt.preferences.read("module_enfuse_pro", "image_color_depth", "enum") if (enfuse_pro_combobox_output_format.value == "TIFF") then enfuse_pro_cmd_suffix_output_format="tif" elseif (enfuse_pro_combobox_output_format.value == "JPEG") then enfuse_pro_cmd_suffix_output_format="jpg" elseif (enfuse_pro_combobox_output_format.value == "PNG") then enfuse_pro_cmd_suffix_output_format="png" elseif (enfuse_pro_combobox_output_format.value == "PNM") then enfuse_pro_cmd_suffix_output_format="pnm" elseif (enfuse_pro_combobox_output_format.value == "PBM") then enfuse_pro_cmd_suffix_output_format="pbm" elseif (enfuse_pro_combobox_output_format.value == "PPM") then enfuse_pro_cmd_suffix_output_format="ppm" end if (enfuse_pro_combobox_output_format.value == "JPEG") then --JPEG enfuse_pro_cmd_enfuse_compression="--compression="..truncate(dt.preferences.read("module_enfuse_pro", "compression_jpeg", "integer")) elseif (enfuse_pro_combobox_output_format.value == "TIFF") then --TIFF enfuse_pro_cmd_enfuse_compression="--compression="..dt.preferences.read("module_enfuse_pro", "compression_tiff", "enum") else enfuse_pro_cmd_enfuse_compression="" end enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."."..enfuse_pro_cmd_suffix_output_format log.msg(log.debug, enfuse_pro_path_with_filename) while (file_exists(enfuse_pro_path_with_filename)) do enfuse_pro_cmd_output_image_index=enfuse_pro_cmd_output_image_index+1 if enfuse_pro_cmd_output_image_index <= 9 then enfuse_pro_outputindex="0"..tostring(enfuse_pro_cmd_output_image_index) else enfuse_pro_outputindex=tostring(enfuse_pro_cmd_output_image_index) end enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."_"..enfuse_pro_outputindex.."."..enfuse_pro_cmd_suffix_output_format end enfuse_pro_cmd_output_image="--output=\""..enfuse_pro_path_with_filename.."\"" enfuse_pro_cmd_output_image_index=0 create_enfuse_command() enfuse_pro_job.valid = false end remove_temp_files() dt.print(_('process successfully completed')) -- Dynamic Range Increase -- enfuse with GUI settings else if (enfuse_pro_combobox_fusion_type.value == "1 - DRI image") then dt.print(_('enfuse with value from preset DRI 1')) elseif (enfuse_pro_combobox_fusion_type.value == "2 - DRI image") then dt.print(_('enfuse with value from preset DRI 2')) elseif (enfuse_pro_combobox_fusion_type.value == "3 - DRI image") then dt.print(_('enfuse with value from preset DRI 3')) elseif (enfuse_pro_combobox_fusion_type.value == "1 - DFF image") then dt.print(_('enfuse with value from preset DFF 1')) elseif (enfuse_pro_combobox_fusion_type.value == "2 - DFF image") then dt.print(_('enfuse with value from preset DFF 2')) elseif (enfuse_pro_combobox_fusion_type.value == "3 - DFF image") then dt.print(_('enfuse with value from preset DFF 3')) elseif (enfuse_pro_combobox_fusion_type.value == "free preset") then dt.print(_('enfuse with value from free preset')) end enfuse_pro_cmd_enfuse_exposure_weight="--exposure-weight="..(replace_comma_to_dot(enfuse_pro_slider_exposure_weight.value)) enfuse_pro_cmd_enfuse_saturation_weight="--saturation-weight="..(replace_comma_to_dot(enfuse_pro_slider_saturation_weight.value)) enfuse_pro_cmd_enfuse_contrast_weight="--contrast-weight="..(replace_comma_to_dot(enfuse_pro_slider_contrast_weight.value)) enfuse_pro_cmd_enfuse_exposure_optimum_weight="--exposure-optimum="..(replace_comma_to_dot(enfuse_pro_slider_exposure_optimum_weight.value)) enfuse_pro_cmd_enfuse_exposure_width_weight="--exposure-width="..(replace_comma_to_dot(enfuse_pro_slider_exposure_width_weight.value)) if (enfuse_pro_check_button_hard_masks.value) then enfuse_pro_cmd_enfuse_hard_masks="--hard-mask" else enfuse_pro_cmd_enfuse_hard_masks="" end if (enfuse_pro_check_button_save_masks.value) then enfuse_pro_cmd_enfuse_save_masks="--save-masks" else enfuse_pro_cmd_enfuse_save_masks="" end enfuse_pro_cmd_enfuse_contrast_window_size="--contrast-window-size="..enfuse_pro_combobox_contrast_window_size.value enfuse_pro_cmd_enfuse_contrast_edge_scale="--contrast-edge-scale="..enfuse_pro_combobox_contrast_edge_scale.value enfuse_pro_cmd_enfuse_contrast_min_curvature="--contrast-min-curvature="..enfuse_pro_combobox_contrast_min_curvature.value if enfuse_pro_file_chooser_button_path.value == nil then enfuse_pro_cmd_output_path = dst_path else enfuse_pro_cmd_output_path = enfuse_pro_file_chooser_button_path.value end enfuse_pro_cmd_enfuse_color_depth="--depth="..dt.preferences.read("module_enfuse_pro", "image_color_depth", "enum") if (enfuse_pro_combobox_output_format.value == "TIFF") then enfuse_pro_cmd_suffix_output_format="tif" elseif (enfuse_pro_combobox_output_format.value == "JPEG") then enfuse_pro_cmd_suffix_output_format="jpg" elseif (enfuse_pro_combobox_output_format.value == "PNG") then enfuse_pro_cmd_suffix_output_format="png" elseif (enfuse_pro_combobox_output_format.value == "PNM") then enfuse_pro_cmd_suffix_output_format="pnm" elseif (enfuse_pro_combobox_output_format.value == "PBM") then enfuse_pro_cmd_suffix_output_format="pbm" elseif (enfuse_pro_combobox_output_format.value == "PPM") then enfuse_pro_cmd_suffix_output_format="ppm" end if (enfuse_pro_combobox_output_format.value == "JPEG") then --JPEG enfuse_pro_cmd_enfuse_compression="--compression="..truncate(dt.preferences.read("module_enfuse_pro", "compression_jpeg", "integer")) elseif (enfuse_pro_combobox_output_format.value == "TIFF") then --TIFF enfuse_pro_cmd_enfuse_compression="--compression="..dt.preferences.read("module_enfuse_pro", "compression_tiff", "enum") else enfuse_pro_cmd_enfuse_compression="" end if (enfuse_pro_combobox_existing_file.selected == 1) then enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."."..enfuse_pro_cmd_suffix_output_format log.msg(log.debug, "Datei mit Pfad: " .. enfuse_pro_path_with_filename) while (file_exists(enfuse_pro_path_with_filename)) do enfuse_pro_cmd_output_image_index=enfuse_pro_cmd_output_image_index+1 if enfuse_pro_cmd_output_image_index <= 9 then enfuse_pro_outputindex="0"..tostring(enfuse_pro_cmd_output_image_index) else enfuse_pro_outputindex=tostring(enfuse_pro_cmd_output_image_index) end -- enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."_"..enfuse_pro_outputindex.."."..enfuse_pro_cmd_suffix_output_format -- Hier wurde geändert enfuse_pro_path_with_filename=enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."."..enfuse_pro_cmd_suffix_output_format end enfuse_pro_cmd_output_image="--output=\""..enfuse_pro_path_with_filename.."\"" enfuse_pro_cmd_output_image_index=0 else enfuse_pro_cmd_output_image="--output=\""..enfuse_pro_cmd_output_path.."/"..(GetFileName(enfuse_pro_first_imagefile)).."-"..(GetFileName(enfuse_pro_last_imagefile)).."."..enfuse_pro_cmd_suffix_output_format.."\"" end log.msg(log.debug, enfuse_pro_path_with_filename) create_enfuse_command() remove_temp_files() enfuse_pro_job.valid = false end else remove_temp_files() dt.print(_('ERROR: align_image_stack doesn\'t work. For more information see terminal output')) enfuse_pro_job.valid = false end end end -- limit export to tiff local function support_format(storage, format) local 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", _('DRI 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.6/README.Windows0000644000175000017500000002043613445472547015536 0ustar klemmhklemmhDarktable Plugin Enfuse Professional Version 2.1.6 License: GPL The Enfuse_Pro script has been successfully tested with Windows 10 and Windows 7. The German translation does not seem to work, so that is Plugin only in english usable. Script dependencies: - darktable 2.6.X - align_image_stack (hugin) - enfuse 4.2 - exivtool - darktable lua lib The installation of the Lua script under Windows is a bit more complicated than under Linux, so there is a separate guide here. GENERAL The Windows version Darktable 2.6.X already contains the Lua interpreter, so you only need the Lua Install scripts and dependent programs. All Lua scripts are in directory C:\Users\\AppData\Local\darktable\lua Installed. The AppData directory is hidden! After you have clicked through the Explorer to the user directory, you can In the command line, add AppData and press Enter. Now the subdirectories of AppData appear. The luarc file is in the directory C:\Users\\AppData\Local\darktable create The programs needed for the script (hugin, enfuse, etc.) may not be found if they are not in the PATH environment variable are included! See below. INSTALLATION OF ENFUSE PRO a) Download the following programs: - Darktable 2.6.X (https://github.com/darktable-org/darktable/releases/tag/release-2.6.2) - Darktable Lua scripts (https://github.com/darktable-org/lua-scripts) - Hugin (https://sourceforge.net/projects/hugin/files/latest/download) - Enfuse 4.2 (https://sourceforge.net/projects/enblend/files/latest/download) - ExifTool (https://www.sno.phy.queensu.ca/\~phil/exiftool/exiftool-11.32.zip) and if necessary, unpack the zip file. Install Darktable and Hugin through the setup program (call the exe file). Under C: \ Program Files, create the directory Enfuse and ExifTool. Copy the enfuse.exe and exiftool.exe to the directories currently being created. For the LUA script to find the programs, the PATH environment variable must be added. Depending on the Windows version, adding the environment variable may be slightly different, possibly on the Internet read about how it works with your version. https://www.java.com/de/download/help/path.xml Extension of PATH under Windows 7: Click the Start button and then right-click Computer. Choose Properties and then in the Advanced System Settings dialog box. In the Advanced tab, click Environment variables ... Under System Variables, look for Path. At selected Path, click Edit. The paths to the directory of programs are separated by a simicolon. Add the paths to the programs. If you have all done as described above then this is the following insert: C:\Program Files\Hugin\bin; C:\Program Files\Enfuse; C:\Program Files\ExifTool Click OK to close the windows. b) Create the directory lua under C:\Users\\AppData\Local\darktable c) To be able to call enfuse_pro, the Darktable Lua Bibiothek (lib) must be installed (https://github.com/darktable-org/lua-scripts). From the Darktable Lua scripts, copy the lib folder with content C:\Users\\AppData\Local\darktable\lua d) Create the directory contrib under C:\Users\\AppData\Local\darktable\lua e) Copy the file enfuse_pro.lua to C:\Users\\AppData\Local\darktable\lua\contrib f) Under C:\Users\\AppData\Local\darktable, use the editor to create the luarc file with the following content: require "contrib\\enfuse_pro" Make sure that the file has no txt extension. The file must be called luarc. If you've done everything right, Enfuse Pro should now appear in the export function of the light table as a "DRI or DFF image". At the bottom, you must now specify the path to align_image_stack.exe (Hugin), enfuse.exe and exiftool.exe. Since Enfuse and co. Windows may run a security query when run. Confirm this with yes. Have fun Multimedia4Linux ----------------------------------------------------------------------------------------------------------------------------- Darktable Plugin Enfuse Professional Version 2.1.6 Lizenz: GPL Das Enfuse_Pro Skript wurde mit Windows 10 und Windows 7 erfolgreich getestet. Die deutsche �bersetzung scheint nicht zu funktionieren, daher ist dass Plugin nur in englisch nutzbar. Skript Abh�nigkeiten: - darktable 2.6.X - align_image_stack (hugin) - enfuse 4.2 - exivtool - darktable lua lib (https://github.com/darktable-org/lua-scripts) Die Installation vom Lua Skript unter Windows ist etwas komplizierter, als unter Linux, daher gibt es hier eine eigene Anleitung. ALLGEMEINES Die Windows Version Darktable 2.6.X enth�lt schon den Lua interpreter, daher brauchen Sie nur die Lua Skripte und abh�nigen Programme installieren. Alle Lua Skripte werden in Verzeichnis C:\Users\\AppData\Local\darktable\lua installiert. Das AppData Verzeichnis ist versteckt! Nach dem Sie sich im Explorer bis zum Benutzer Verzeichnis durchgeklickt haben, k�nnen Sie in der Kommandozeile AppData hinzuf�gen und Enter dr�cken. Jetzt erscheinen die Unterverzeichnisse von AppData. Die luarc Datei ist im Verzeichnis C:\Users\\AppData\Local\darktable anzulegen Die f�r das Skript notwendigen Programme (hugin, enfuse usw.) werden eventuell nicht gefunden, wenn die nicht in der Umgebungsvariablen von PATH enthalten sind! Siehe weiter unten. INSTALLATION VON ENFUSE PRO a) Laden Sie die folgenden Programme herunter: - Darktable 2.6.X (https://github.com/darktable-org/darktable/releases/tag/release-2.6.2) - Darktable Lua Skripte (https://github.com/darktable-org/lua-scripts) - Hugin (https://sourceforge.net/projects/hugin/files/latest/download) - Enfuse 4.2 (https://sourceforge.net/projects/enblend/files/latest/download) - ExifTool (https://www.sno.phy.queensu.ca/\~phil/exiftool/exiftool-11.32.zip) und enpacken ggf. die Zip-Datei. Installien Sie Darktable und Hugin �ber das Setup Programm (Aufruf der exe-Datei). Erstellen Sie unter C:\Programme das Verzeichnis Enfuse und ExifTool. Kopieren Sie die enfuse.exe und exiftool.exe in die gerade erstellen Verzeichnisse. Damit das LUA Skript die Programme findet, m�ssen die der Umgebungsvariable PATH hinzugef�gt werden. Je nach Windows Version kann das Hinzuf�gen von der Umgebungsvariable etwas anders sein, ggf. in Internet nachlesen wie es bei Ihrer Version funktioniert. https://www.java.com/de/download/help/path.xml Erweiterung von PATH unter Windows 7: Klicken sie auf die Start Schaltfl�che und dann mit der rechten Maustaste auf Computer. W�hlen Sie Eigenschaften aus und dann im Dialogfeld Erweiterte Systemeinstellungen. Klicken Sie in der Registerkarte Erweitert auf Umgebungsvariablen... Suchen Sie unter Systemvariablen nach Path. Bei ausgew�hlten Path klicken Sie auf bearbeiten. Die Pfade zu den Verzeichnis der Programme werden durch ein Simikolon getrennt. F�gen Sie die Pfade zu den Programmen hinzu. Wenn Sie alle wie oben beschrieben gemacht haben dann ist folgendes einzuf�gen: ;C:\Program Files\Hugin\bin;C:\Program Files\Enfuse;C:\Program Files\ExifTool Klicken Sie auf OK um die Fenster zu schlie�en. b) Erstellen Sie das Verzeichnus lua unter C:\Users\\AppData\Local\darktable c) Damit enfuse_pro aufgerufen werden kann muss die Darktable Lua Bibiothek (lib) installiert sein (https://github.com/darktable-org/lua-scripts). Kopieren Sie aus den Darktable Lua Skripten den Ordner lib mit Inhalt nach C:\Users\\AppData\Local\darktable\lua d) Erstellen Sie das Verzeichnis contrib unter C:\Users\\AppData\Local\darktable\lua e) Kopieren Sie die Datei enfuse_pro.lua nach C:\Users\\AppData\Local\darktable\lua\contrib f) Erstellen Sie unter C:\Users\\AppData\Local\darktable mit dem Editor die luarc Datei mit folgenden Inhalt: require "contrib\\enfuse_pro" Achten Sie darauf, dass die Datei keine txt Endung besitzt. Die Datei muss luarc hei�en. Wenn Sie alles richtig gemacht haben, sollte Enfuse Pro jetzt in der Exportfunktion vom Leuchttisch als "DRI or DFF image" auftauchen. Im unteren Bereich m�ssen Sie jetzt noch den Pfad zu align_image_stack.exe (Hugin), enfuse.exe und exiftool.exe angeben. Da Enfuse und co. nicht segniert sind, wird Windows eventuell bei Ausf�hren eine Sicherheitsabfrage durchf�hren. Best�tigen Sie diese mit ja. Viel Spass Multimedia4Linux enfuse_pro-2.1.6/README.Linux0000664000175000017500000001225613443427335015177 0ustar klemmhklemmhThe script enfuse_pro.lua version 2.1.X works with darktable 2.2.X, 2.4.X, 2.6.X Darktable Plugin Enfuse Professional Version 2.1.6 License: GPL Script dependencies: - darktable 2.2.X or 2.4.X or 2.6.X - Lua 5.2 / Lua 5.3 - align_image_stack (hugin) - enfuse 4.2 - exivtool - darktable lua lib (https://github.com/darktable-org/lua-scripts) 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 (Darktable 2.2) sudo apt-get install liblua5.3-0 liblua5.3-dev lua5.3 lua5.3-doc (Darktable 2.4) 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/lib ~/.config/darktable/lua/de_DE/LC_MESSAGES 4.) Copy the Lua script enfuse_pro.lua to ~/.config/darktable/lua/contrib 5.) Install the darktable lua lib (dtutils.lua) Download the zip file from https://github.com/darktable-org/lua-scripts Extract the zip-file und copy the dtutils.lua file to ~/.config/darktable/lua/lib 6.) 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" 7.) 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 "dri or dff image" or "DRI or DFF image" should appear in the export function from the lighttable. 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.X mit darktable 2.2.X und 2.4.X und 2.6.X Darktable Plugin Enfuse Professional Version 2.1.6 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 - darktable lua lib (https://github.com/darktable-org/lua-scripts) 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 (Darktable 2.2) sudo apt-get install liblua5.3-0 liblua5.3-dev lua5.3 lua5.3-doc (Darktable 2.4) 2.) Für die Erzeugung der DRI 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/lib ~/.config/darktable/lua/de_DE/LC_MESSAGES 4.) Kopieren Sie das Lua Skript enfuse_pro.lua nach ~/.config/darktable/lua/contrib 5.) Installieren Sie die darktable lua lib (dtutils.lua) Laden Sie die zip Datei von https://github.com/darktable-org/lua-scripts herunter. Entpacken Sie die Zip-Datei und kopieren die Datei dtutils.lua nach: ~/.config/darktable/lua/lib 6.) 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" 7.) 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 "dri or dff image" bzw. "DRI oder DFF Bild" 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/pascal@obry.net