diff --git a/AUTHORS.txt b/AUTHORS.txt
index aae24ff63..b2d1333d2 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -65,6 +65,7 @@ Other contributors (profiles, ideas, mockups, testing, forum activity, translati
Alberto Righetto
Kostia (Kildor) Romanov
Kalle Söderman
+ Wayne Sutton
Johan Thor
Vitalis Tiknius
TooWaBoo
diff --git a/rtdata/dcpprofiles/Canon EOS 90D.dcp b/rtdata/dcpprofiles/Canon EOS 90D.dcp
new file mode 100644
index 000000000..b65a8e7ac
Binary files /dev/null and b/rtdata/dcpprofiles/Canon EOS 90D.dcp differ
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index a98b6eded..10dabb4a4 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -904,6 +904,8 @@ MAIN_TAB_FAVORITES_TOOLTIP;Raccourci: Alt-u
MAIN_TAB_FILTER; Filtrer
MAIN_TAB_INSPECT; Inspecter
MAIN_TAB_IPTC;IPTC
+MAIN_TAB_LOCALLAB;Local
+MAIN_TAB_LOCALLAB_TOOLTIP;Raccourci: Alt-o
MAIN_TAB_METADATA;Métadonnées
MAIN_TAB_METADATA_TOOLTIP;Raccourci:Alt-m
MAIN_TAB_RAW;RAW
@@ -987,6 +989,8 @@ PARTIALPASTE_LABCURVE;Courbes Lab
PARTIALPASTE_LENSGROUP;Réglages de l'objectif
PARTIALPASTE_LENSPROFILE;Profil de correction d'Objectif
PARTIALPASTE_LOCALCONTRAST;Contraste local
+PARTIALPASTE_LOCALLAB;Ajustements locauc
+PARTIALPASTE_LOCALLABGROUP;Réglages Ajustements locaux
PARTIALPASTE_METADATA;Mode des Metadonnées
PARTIALPASTE_METAGROUP;Réglages des Métadonnées
PARTIALPASTE_PCVIGNETTE;Filtre Vignettage
@@ -1747,6 +1751,582 @@ TP_LOCALCONTRAST_DARKNESS;Niveau des ombres
TP_LOCALCONTRAST_LABEL;Contraste Local
TP_LOCALCONTRAST_LIGHTNESS;Niveau des hautes-lumières
TP_LOCALCONTRAST_RADIUS;Rayon
+TP_LOCALLAB_ACTIV;Luminosité seulement
+TP_LOCALLAB_ACTIVSPOT;Activer le Spot
+TP_LOCALLAB_ADJ;Egalisateur Bleu-jaune Rouge-vert
+TP_LOCALLAB_ALL;Toutes les rubriques
+TP_LOCALLAB_AMOUNT;Quantité
+TP_LOCALLAB_ARTIF;Détection de forme
+TP_LOCALLAB_ARTIF_TOOLTIP;Le seuil deltaE étendue accroit la plage of étendue-deltaE - les valeurs élévées sont pour les images à gamut élévé.\nAugmenter l'affaiblissement deltaE améliore la détection de forme, mais peu réduire la capacité de détection.
+TP_LOCALLAB_AUTOGRAY;Automatique
+TP_LOCALLAB_AVOID;Evite les dérives de couleurs
+TP_LOCALLAB_BALAN;Balance ΔE ab-L
+TP_LOCALLAB_BALANEXP;ΔØ EPD balance
+TP_LOCALLAB_BALANH;Balance ΔE C-H
+TP_LOCALLAB_BALAN_TOOLTIP;Change l'algorithme des paramètres ΔE.\nPlus ou moins ab-L, plus ou moins C-H.\nPas pour le Debruitage
+TP_LOCALLAB_BASELOG;Base Logarithme
+TP_LOCALLAB_BILATERAL;Filtre Bilateral
+TP_LOCALLAB_BLACK_EV;Noir Ev
+TP_LOCALLAB_BLCO;Chrominance seulement
+TP_LOCALLAB_BLENDMASKCOL;Mélange - fusion
+TP_LOCALLAB_BLENDMASKMASK;Ajout / soustrait le masque Luminance
+TP_LOCALLAB_BLENDMASKMASKAB;Ajout / soustrait le masque Chrominance
+TP_LOCALLAB_BLENDMASK_TOOLTIP;Si fusion = 0 seule la détection de forme est améliorée.\nSi fusion > 0 le masque est ajouté à l'image. Si fusion < 0 le masque est soustrait à l'image
+TP_LOCALLAB_BLENDMASKMASK_TOOLTIP;Si ce curseur = 0 pas d'action.\nAjoute ou soustrait le masque de l'image originale
+TP_LOCALLAB_BLGUID;Filtre guidé
+TP_LOCALLAB_BLINV;Inverse
+TP_LOCALLAB_BLLC;Luminance & Chrominance
+TP_LOCALLAB_BLLO;Luminance seulement
+TP_LOCALLAB_BLMED;Median
+TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct floute et bruite avec tous les réglages.\nInverse floute et bruite avec tous les réglages. Soyez prudents certains resultats peuvent être curieux
+TP_LOCALLAB_BLNOI_EXP;Flouter & Bruit
+TP_LOCALLAB_BLNORM;Normal
+TP_LOCALLAB_BLSYM;Symétrique
+TP_LOCALLAB_BLUFR;Adoucir - Flouter - Grain - Debruiter
+TP_LOCALLAB_BLUMETHOD_TOOLTIP;Pour flouter l'arrère plan et isoler le premier plan:\n*Flouter l'arrière plan avec un RT-spot couvrant totalement l'image (valeurs élevées Etendue et transition) - normal ou inverse.\n*Isoler le premier plan avec un ou plusieurs RT-spot Exclusion avec l'outils que vous voulez (accroître Etendue).\n\nCe module peut être utilisé en réduction de bruit additionnelle,incluant un "median" et un "Filtre Guidé"
+TP_LOCALLAB_BLUR;Flou Gaussien - Bruit - Grain
+TP_LOCALLAB_BLURCBDL;Flouter niveaux 0-1-2-3-4
+TP_LOCALLAB_BLURCOL;Rayon floutage masque
+TP_LOCALLAB_BLURDE;Flouter la détection de forme
+TP_LOCALLAB_BLURLC;Luminance seulement
+TP_LOCALLAB_BLURLEVELFRA;Flouter niveaux
+TP_LOCALLAB_BLURMASK_TOOLTIP;Génère un masque flou, prend en compte la structure avec le curseur de seuil de contraste du Masque flou.
+TP_LOCALLAB_BLURRESIDFRA;Flouter image Résiduelle
+TP_LOCALLAB_BLUR_TOOLNAME;Adoucir Flouter Grain & Réduction du Bruit - 1
+TP_LOCALLAB_BLWH;Tous les changements forcés en noir et blanc
+TP_LOCALLAB_BLWH_TOOLTIP;Force le changement de la composante "a" et "b" à zéro.\nUtile quand l'utilisateur choisit un processus noir et blanc, ou un film.
+TP_LOCALLAB_BUTTON_ADD;Ajouter
+TP_LOCALLAB_BUTTON_DEL;Effacer
+TP_LOCALLAB_BUTTON_DUPL;Dupliquer
+TP_LOCALLAB_BUTTON_REN;Renommer
+TP_LOCALLAB_BUTTON_VIS;Montrer/Cacher
+TP_LOCALLAB_CBDL;Contraste niveaux détail
+TP_LOCALLAB_CBDLCLARI_TOOLTIP;Ajuste les tons moyens et les réhausse.
+TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Agit comme un outil ondelettes.\nLe premier niveau (0) agit sur des détails de 2x2.\nLe dernier niveau (5) agit sur des détails de 64x64.
+TP_LOCALLAB_CBDL_THRES_TOOLTIP;Empêche d'augmenter le bruit
+TP_LOCALLAB_CBDL_TOOLNAME;Contraste par niveaux de détails(Défauts) - 2
+TP_LOCALLAB_CENTER_X;Centre X
+TP_LOCALLAB_CENTER_Y;Centre Y
+TP_LOCALLAB_CH;Courbes CL - LC
+TP_LOCALLAB_CHROMA;Chrominance
+TP_LOCALLAB_CHROMABLU;Niveaux Chroma
+TP_LOCALLAB_CHROMABLU_TOOLTIP;Agit comme un amplificateur-reducteur d'action en comparant aux réglages de luma.\nEn dessous de 1 reduit, au dessus de 1 amplifie
+TP_LOCALLAB_CHROMACBDL;Chroma
+TP_LOCALLAB_CHROMACB_TOOLTIP;Agit comme un amplificateur-reducteur d'action en comparant aux curseurs de luminance.\nEn dessous de 100 reduit, au dessus de 100 amplifie
+TP_LOCALLAB_CHROMALEV;Niveaux de Chroma
+TP_LOCALLAB_CHROMASKCOL;Masque Chroma
+TP_LOCALLAB_CHROMASK_TOOLTIP;Vous pouvez utiliser ce curseur pour désaturer l'arrière plan (inverse masque - courbe proche de 0).\nEgalement pour atténier ou accroître l'action du masque sur la chroma
+TP_LOCALLAB_CHRRT;Chroma
+TP_LOCALLAB_CIRCRADIUS;Taille Spot
+TP_LOCALLAB_CIRCRAD_TOOLTIP;Contient les références du RT-spot, utile pour la détection de forme (couleur, luma, chroma, Sobel).\nLes faibles valeurs peuvent être utiles pour les feuillages.\nLes valeurs élevées peuvent être utile pour la peau
+TP_LOCALLAB_CLARICRES;Fusion Chroma
+TP_LOCALLAB_CLARIFRA;Clarté & Masque de netteté - Fusion & adoucir images
+TP_LOCALLAB_CLARILRES;Fusion Luma
+TP_LOCALLAB_CLARISOFT;Rayon adoucir
+TP_LOCALLAB_CLARISOFT_TOOLTIP;Actif pour Clarté et Masque de netteté si différent de zéro.\n\nActif pour toutes les pyramides ondelettes.\nInactif si rayon = 0
+TP_LOCALLAB_CLARITYML;Clarté
+TP_LOCALLAB_CLARI_TOOLTIP;En dessous ou égal à 4, 'Masque netteté' est actif.\nAu dessus du niveau ondelettes 5 'Clarté' est actif.\nUtilesu=i vous utilisez 'Compression dynamique des niveaux'
+TP_LOCALLAB_CLIPTM;Clip Recupère données (gain)
+TP_LOCALLAB_COFR;Couleur & Lumière
+TP_LOCALLAB_COLORDE;Couleur prévisualisation sélection ΔE - Intensité
+TP_LOCALLAB_COLORDEPREV_TOOLTIP;Bouton Prévisualisation ΔE a besoin qu'un seul outil soit activé (expander).\nPour pouvoir avoir une Prévisualisation ΔE avec plusieurs outils activés utiliser Masque et modifications - Prévisualisation ΔE
+TP_LOCALLAB_COLORDE_TOOLTIP;Affiche la prévisualisation ΔE en bleu si négatif et en vert si positif.\n\nMasque et modifications (montre modifications sans masque): montre les modifications réelles si positf, montre les modifications améliorées (luminance seule) en bleu et jaune si négatif.
+TP_LOCALLAB_COLORSCOPE;Etendue Outils Couleur
+TP_LOCALLAB_COLORSCOPE_TOOLTIP;Utilise une étendue commune pour Couleur et lumière, Ombres Lumières, Vibrance.\nLes autres outils ont leur étendue spécifique.
+TP_LOCALLAB_COLOR_TOOLNAME;Couleur&Lumière (Défauts) - 11
+TP_LOCALLAB_COL_NAME;Nom
+TP_LOCALLAB_COL_VIS;Statut
+TP_LOCALLAB_COMPFRA;Niveaux Contraste directionnel
+TP_LOCALLAB_COMPFRAME_TOOLTIP;Autorise des effets spéciaux. Vous pouvez réduire les artéfacts avec 'Clarté & Masque netteté - Fusion & Images douces".\nUtilise des ressources
+TP_LOCALLAB_COMPLEX_METHOD;Complexitée logicielle
+TP_LOCALLAB_COMPLEX_TOOLTIP; Autorise l'utilisateur à sélectionner des rubriques Ajustements locaux.
+TP_LOCALLAB_COMPREFRA;Niveaux de (de)compression dynamique
+TP_LOCALLAB_COMPRESS_TOOLTIP;Utilisesi nécessaire le module 'Clarté & Masque de netteté - Fusion & Images douces' en ajustant 'Rayon doux' pour réduire les artéfacts.
+TP_LOCALLAB_CONTCOL;Seuil de Contraste Masque flou
+TP_LOCALLAB_CONTFRA;Contraste par niveau
+TP_LOCALLAB_CONTRAST;Contraste
+TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;Contrôle de contraste du masque.
+TP_LOCALLAB_CONTRESID;Contraste
+TP_LOCALLAB_CONTTHR;Seuil contraste
+TP_LOCALLAB_CONTWFRA;Contrast Local
+TP_LOCALLAB_CSTHRESHOLD;Ψ Ondelettes niveaux
+TP_LOCALLAB_CSTHRESHOLDBLUR;Ψ Masque Ondelettes niveau
+TP_LOCALLAB_CURV;Luminosité - Contraste - Chrominance "Super"
+TP_LOCALLAB_CURVCURR;Normal
+TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;Si la courbe est au sommet, le masque est compétement noir aucune transformation n'est réalisée par le masque sur l'image.\nQuand vous descendez la courbe, progressivement le masque va se colorer et s'éclaicir, l'image change de plus en plus.\n\nIl est recommendé (pas obligatoire) de positionner le sommet des courbes curves sur la ligne de transition grise qui représnte les références (chroma, luma, couleur).
+TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;Si la courbe est au sommet,le masque est compétement noir aucune transformation n'est réalisée par le masque sur l'image.\nQuand vous descendez la courbe, progressivement le masque va se colorer et s'éclaicir, l'image change de plus en plus.\nVous pouvez choisir ou non de positionner le sommet de la courbe sur la transition.
+TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;Pour être actif, vous devez activer la combobox 'Curves type'
+TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;Courbe tonale
+TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), peut être utilisée avec L(H) dans Couleur et lumière
+TP_LOCALLAB_CURVEMETHOD_TOOLTIP;'Normal', la courbe L=f(L) a le même algorithme que le curseur luminosité.\n'Super' the curve L=f(L) has an new improved algorithm, which can leeds in some cases to artifacts.
+TP_LOCALLAB_CURVENCONTRAST;Super+Contrast threshold (experimental)
+TP_LOCALLAB_CURVENH;Super
+TP_LOCALLAB_CURVENHSU;Combined HueChroma (experimental)
+TP_LOCALLAB_CURVENSOB2;Combined HueChroma + Contrast threshold (experimental)
+TP_LOCALLAB_CURVNONE;Désactive courbes
+TP_LOCALLAB_DARKRETI;Obscuirité
+TP_LOCALLAB_DEHAFRA;Elimination de la brume
+TP_LOCALLAB_DEHAZ;Force
+TP_LOCALLAB_DEHAZ_TOOLTIP;Valeurs Négatives ajoute de la brume
+TP_LOCALLAB_DELTAD;Delta balance
+TP_LOCALLAB_DELTAEC;Masque ΔE Image
+TP_LOCALLAB_DENOIS;Ψ Réduction du bruit
+TP_LOCALLAB_DENOI_EXP;Réduction du bruit
+TP_LOCALLAB_DENOI_TOOLTIP;Ce module peut être utilisé seul (à la fin du processus), ou en complément de Réduction du bruit (au début).\nEtendue(deltaE)permet de différencier l'action.\nVous pouvez compléter avec "median" ou "Filtre guidé" (Adoucir Flou...).\nVous pouvez compléter l'action avec "Flou niveaux" "Ondelette pyramide"
+TP_LOCALLAB_DEPTH;Profondeur
+TP_LOCALLAB_DETAIL;Contrast local
+TP_LOCALLAB_DETAILSH;Details
+TP_LOCALLAB_DETAILTHR;Seuil Detail Luminance Chroma (DCT ƒ)
+TP_LOCALLAB_DUPLSPOTNAME;Copier
+TP_LOCALLAB_EDGFRA;Netteté des bords
+TP_LOCALLAB_EDGSHOW;Montre tous les outils
+TP_LOCALLAB_ELI;Ellipse
+TP_LOCALLAB_ENABLE_AFTER_MASK;Utilise Tone Mapping
+TP_LOCALLAB_ENABLE_MASK;Active masque
+TP_LOCALLAB_ENABLE_MASKAFT;Utilise tous les algorithmes Exposition
+TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP;Si activé, le Masque utilise les données recupérées après 'Transmission Map' au lieu des données originales
+TP_LOCALLAB_ENH;Amélioré
+TP_LOCALLAB_ENHDEN;Amélioré + chroma réduction bruit
+TP_LOCALLAB_EPSBL;Detail
+TP_LOCALLAB_EQUIL;Normalise Luminance
+TP_LOCALLAB_EQUILTM_TOOLTIP;Reconstruit la luminance de telle manière que la moyenne et la variance de l'image traitée soient identiques à celle d'origine
+TP_LOCALLAB_ESTOP;Arrêt des bords
+TP_LOCALLAB_EV_DUPL;Copier vers
+TP_LOCALLAB_EV_NVIS;Cacher
+TP_LOCALLAB_EV_NVIS_ALL;Cacher tout
+TP_LOCALLAB_EV_VIS;Montrer
+TP_LOCALLAB_EV_VIS_ALL;Montrer tout
+TP_LOCALLAB_EXCLUF;Exclure
+TP_LOCALLAB_EXCLUF_TOOLTIP;Peut être utilsé pour exclure une partie des données - agir sur Etendue pour prendre en compte plus de couleurs.\n Vous pouvez utiliser tous les réglages pour ce type de RT-spot.
+TP_LOCALLAB_EXCLUTYPE;Spot méthode
+TP_LOCALLAB_EXCLUTYPE_TOOLTIP;Spot Normal utilise les données récursives.\n\nSpot exclusion réinitialise les données d'origine.\nPeut être utilsé pour annuler totalement ou partiellement une action précédente ou pour réaliser un mode inverse
+TP_LOCALLAB_EXECLU;Spot Exclusion
+TP_LOCALLAB_EXNORM;Spot Normal
+//TP_LOCALLAB_EXPCBDL_TOOLTIP;Dans le cas d'un capteur contaminé ("graisse"), et qaund la surface est importante ou pourune série de petits défauts.\n\na) Mettre la sélection du spot sur un défaut prononcé (adapter la taille si nécessaire), utilise run spot suffisament grand qui autorise les ondelettes; b) choisir une aire suffisament grande pour couvrir largement la zone affectée par les défauts; c) Choisir une valeur de transition (basse) et une transition affaiblissement (haute); d) agir sur les niveaux 2, 3, 4 or 5 ou^plus bas en réduisant le the contrast (valeurs en dessous de 100) agir sur le curseur chroma si nécessaire. e)possibilité d'agir sur "Etendue" pour réduire la zone d'action.\n\nVous pouvez aussi compléter avec "Flou niveaux" et Flouu Gaussien (Adoucir Flou et bruit)
+TP_LOCALLAB_EXPCBDL_TOOLTIP;Peut être utilisé pour retirer les marques sur le capteur ou la lentille.
+TP_LOCALLAB_EXPCHROMA;Chroma compensation
+TP_LOCALLAB_EXPCHROMA_TOOLTIP;Seulement en association avec compensation d'exposition et PDE Ipol.\nEvite la desaturation des couleurs
+//TP_LOCALLAB_EXPCOLOR_TOOLTIP;Dans le cas de petits défauts.\n\nYeux-rouges : sélecteur centré sur la partie rouge, délimiteurs du spot près de l'oeil, adaptez Etendue, "luminosité" -100, "chrominance" -100.\n\nSpotIR :sélection Circulaire centrée sur le défaut, délimiteurs du spot proches du default - reduire "chrominance", possibilté d'agir sur Etendue pour réduire la zone de l'action.\n\nPoussières - graisse (petit) :Sélection circulaire centrée sur le défaut (adapter la taille du spot), délimiteurs du spot pas trop près du défaut pour permettre une transition quasi invisible. a) "Transition" (faibles valeurs) and "Transition affaiblissement" (hautes valeurs); b) agir sur "luminosité" et aussi sur "chrominance" ou sur "Grille de correction couleur - direct" de telle manière que le rendu de la zone polluée soit proche de celui de la zone saine; c) agir modérement sur "Etendue" pour moduler l'action.\n\nVous pouvez aussi compléter avec Flouter Gaussien (Adoucir Flouter et bruit)
+TP_LOCALLAB_EXPCOLOR_TOOLTIP;Ajuste les couleurs, la luminosité, le contrast et corrige les petits défauts tels que teux-rouges, poussières sur le capteur, etc.
+TP_LOCALLAB_EXPCOMP_TOOLTIP;Pour les portraits et les images à faible gradient, vous pouvez changer "Détection de forme" dans "Réglages":\n\nAugmentez 'Seuil ΔE Etendue'\nRéduire 'ΔE affaiblissement'\nAugmenter 'Balance ΔE ab-L'
+TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;Voir la documentation de ondelettes niveaux.\nCependant il y a des différences: plus d'outils et plus proches des détails .\nEx: Tone mapping pour ondelettes.
+TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Evitez les spots trop petits(< 32x32 pixels).\nUtilisez de faibles valeurs de transition et de hautes valeurs de transition affaiblissement et d'Etendue pour simuler un petit RT-spot et s'adapter aux défauts.\nUtimiser si nécessaire le module 'Clarté & Maqsue netteté' et 'Fusion d'images' en ajustant 'Rayon adoucir' pour réduire les artéfacts.
+TP_LOCALLAB_EXPCURV;Courbes
+TP_LOCALLAB_EXPGRAD;Filtre gradué
+TP_LOCALLAB_EXPLAPBAL_TOOLTIP;Balance l'action entre l'iamge originale image et la transformée de Laplace.
+TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Applique un gamma avant et après la transformée de Laplace
+TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Ajoute une exposition linéaire avant l'application de la transformée de Laplace
+TP_LOCALLAB_EXPLAP_TOOLTIP;Plus vous agissez sur ce curseur de seuil, plus grande sera l'action de reduire le contraste.
+TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Autorise de nombreuses possibilités de fusionner les images (comme les calques dans Photosshop) : difference, multiply, soft light, overlay...avec opacité...\nOriginale Image : fusionne le RT-spot en cours avec Originale.\nSpot Précédent : fusionne le RT-spot en cours avec le précédent - si il n'y a qu'un spot précédent = original.\nArrière plan : fusionne le RT-spot en cours avec la couleur et la luminance de l'arrière plan (moins de possibilités)
+TP_LOCALLAB_EXPMETHOD_TOOLTIP;Standard : utilise un algorithme similaire à Exposure principal mais en L*a*b* et en prenant en compte le deltaE.\n\nCompression dynamique et atténuateur de contraste : utilise un autre algorithme aussi avec deltaE et avec l'équation de Poisson pour résoudre le Laplacien dans l'espace de Fourier.\nAtténuateur, Compression dynamqiue et Standard peuvent être combinés.\nFFTW La transformée de Fourier est optimisée en taille pour réduire les temps de traitement.\nRéduit les artéfacts et le bruit.
+TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applique un median avant la transformée de Laplace pour éviter les artéfacts (bruit).\nVous pouvez aussi utiliser l'outil "Réduction du bruit".
+TP_LOCALLAB_EXPOSE;Compression dynamique - Exposition
+//TP_LOCALLAB_EXPOSURE_TOOLTIP;Dans certains cases (fortes ombres ..) vous pouvez utiliser le module "Shadows Highlights", "Tone equalizer", "TRC", "Encoding Log"...
+TP_LOCALLAB_EXPOSURE_TOOLTIP;Modifie l'exposition dans l'espace L*a*b* en utilisant un Laplacien et les algorithmes PDE en prenant en compte dE, minimise les artéfacts.
+TP_LOCALLAB_EXPRETITOOLS;Outils Retinex avancés
+TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUtiliser de basses valeurs de transition et de hautes valeurs de transition affaiblissement et Etendue pour simuler un petit RT-spot.
+TP_LOCALLAB_EXPTOOL;Outils exposition
+TP_LOCALLAB_EXPTRC;Courbe de réponse Tonale - TRC
+TP_LOCALLAB_EXP_TOOLNAME;Atténuation contraste -Compression Dynamique & Exposition- 10
+TP_LOCALLAB_FATAMOUNT;Quantité
+TP_LOCALLAB_FATANCHOR;Ancre
+TP_LOCALLAB_FATANCHORA;Décalage
+TP_LOCALLAB_FATDETAIL;Detail
+TP_LOCALLAB_FATFRA;Compression Dynamique ƒ
+TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal - utilise Fattal Tone mapping algorithme.
+TP_LOCALLAB_FATLEVEL;Sigma
+TP_LOCALLAB_FATRES;Quantité de Residual Image
+TP_LOCALLAB_FATSHFRA;Compression Dynamique Masque ƒ
+TP_LOCALLAB_FEATH_TOOLTIP;Largeur du Gradient en porcentage de la diagonale du Spot\nUtilisé par tous les Filtres Gradués dans tous les outils.\nPas d'action si les filtres gradués ne sont pas utilisés.
+TP_LOCALLAB_FEATVALUE;Adoucissement gradient (Filtres Gradués)
+TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ
+TP_LOCALLAB_FFTW;ƒ - Utilise Fast Fourier Transform
+TP_LOCALLAB_FFTW2;ƒ - Utilise Fast Fourier Transform (TIF, JPG,..)
+TP_LOCALLAB_FFTWBLUR;ƒ - Utilise toujours Fast Fourier Transform
+TP_LOCALLAB_FULLIMAGE;Calcule les valeurs Noir Ev - Blanc Ev - sur l'image entière
+TP_LOCALLAB_GAM;Gamma
+TP_LOCALLAB_GAMFRA;Courbe Réponse Tonale (TRC)
+TP_LOCALLAB_GAMM;Gamma
+TP_LOCALLAB_GAMMASKCOL;Gamma masque
+TP_LOCALLAB_GAMSH;Gamma
+TP_LOCALLAB_GRADANG;Angle du Gradient
+TP_LOCALLAB_GRADANG_TOOLTIP;Angle de Rotation en degrés : -180 0 +180
+TP_LOCALLAB_GRADFRA;Filtre gradué Masque
+TP_LOCALLAB_GRADGEN_TOOLTIP;Filtre Gradué est fourni avec Couleur et Lumière & Fusion fichier, Exposition & masque, Shadows Highlight, Vibrance, Encoding log.\n\nVibrance, Couleur et Lumière & Fusion fichier, sont fournis avec GF luminance, chrominance, teinte.\nAdoucissement est situé dans "réglages".
+TP_LOCALLAB_GRADLOGFRA;Filtre Gradué Luminance
+TP_LOCALLAB_GRADSTR;Force du Gradient
+TP_LOCALLAB_GRADSTRAB_TOOLTIP;Filtre chroma force
+TP_LOCALLAB_GRADSTRCHRO;Force Gradient Chrominance
+TP_LOCALLAB_GRADSTRHUE;Force Gradient Teinte
+TP_LOCALLAB_GRADSTRHUE2;Force Gradient Teinte
+TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Filttre Teinte force
+TP_LOCALLAB_GRADSTRLUM;Force Gradient Luminance
+TP_LOCALLAB_GRADSTR_TOOLTIP;Force Filtre en Ev
+TP_LOCALLAB_GRAINFRA;Film Grain 1:1
+TP_LOCALLAB_GRALWFRA;Filtre Gradué Local contraste
+TP_LOCALLAB_GRIDFRAME_TOOLTIP;Vous pouvez utiliser cet outil comme une brosse. Utiliser un petit Spot et adaptez transition et transition affaiblissement\nSeulement en mode NORMAL et éventuellement Teinte, Saturation, Couleur, Luminosité sont concernés par Fusion arrire plan (ΔE)
+TP_LOCALLAB_GRIDONE;Virage partiel
+TP_LOCALLAB_GRIDTWO;Direct
+TP_LOCALLAB_GUIDBL;Rayon adoucir
+TP_LOCALLAB_GUIDFILTER;Rayon Filtre Guidé
+TP_LOCALLAB_GUIDFILTER_TOOLTIP;Adapter cette valeur en fonction des images - peut réduire ou accroître les artéfacts.
+TP_LOCALLAB_HHMASK_TOOLTIP;Ajustements fin de la teinte par exemple pour la peau.
+TP_LOCALLAB_HIGHMASKCOL;Hautes lumières masque
+TP_LOCALLAB_HLH;Courbes H
+TP_LOCALLAB_IND;Independant (souris)
+TP_LOCALLAB_INDSL;Independant (souris + curseurs)
+TP_LOCALLAB_INVERS;Inverse
+TP_LOCALLAB_INVERS_TOOLTIP;Si sélectionné (inverse) moins de possibilités.\n\nAlternative\nPremier Spot:\n image entière - delimiteurs en dehors de la prévisualisation\n RT-spot forme sélection : rectangle. Transition 100\n\nDeuxième spot : Spot Exclusion
+TP_LOCALLAB_ISOGR;Plus gros (ISO)
+TP_LOCALLAB_LABBLURM;Masque Flouter
+TP_LOCALLAB_LABEL;Ajustements Locaux
+TP_LOCALLAB_LABGRID;Grille correction couleurs
+TP_LOCALLAB_LABGRIDMERG;Arrière plan
+TP_LOCALLAB_LABGRID_VALUES;Haut(a)=%1 Haut(b)=%2\nBas(a)=%3 Bas(b)=%4
+TP_LOCALLAB_LABSTRUM;Masque Structure
+TP_LOCALLAB_LAPLACC;ΔØ Masque Laplacien résoud PDE
+TP_LOCALLAB_LAPLACE;Δ - Laplacien seuil ΔE
+TP_LOCALLAB_LAPLACEXP;∆ - Laplacian seuil
+TP_LOCALLAB_LAPMASKCOL;∆ - Laplacian seuil masque
+TP_LOCALLAB_LAPRAD_TOOLTIP;Eviter d'utiliser Radius and Laplace Seuil en même temps.\nLaplacien seuil reduit le contraste, artéfacts, adoucit le résultat (si PDE réglages activé).
+TP_LOCALLAB_LAP_MASK_TOOLTIP;Résoud PDE (Equation aux dérivées partielles) pour tous les masques Laplacien.\nSi activé Laplacien masque seuil reduit les artéfacts et adoucit les résultats.\nSi désactivé réponse linaire.
+TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT améliore la qualité et autorise de grands rayons, mais accroît les temps de traitement.\nCe temps dépends de la surface devant être traitée.\nA utiliser de préférences pour de grands rayons.\n\nLes Dimensions peuvent être réduites de quelques pixels pour optimiser FFTW.\nCette optimisation peut réduire le temps de traitement d'un facteur de 1.5 à 10.\n
+TP_LOCALLAB_LC_TOOLNAME;Constrast Local & Ondelettes (Défauts) - 7
+TP_LOCALLAB_LEVELBLUR;Maximum Flouter
+TP_LOCALLAB_LEVELLOCCONTRAST_TOOLTIP;En abscisse le contraste local (proche du concept de luminance). En ordonnée, amplification ou reduction du contraste local.
+TP_LOCALLAB_LEVELWAV;Ψ Ondelettes Niveaux
+TP_LOCALLAB_LEVELWAV_TOOLTIP;Le niveau est automatiquement adapté à la taille du spot et de la prévisualisation.\nDu niveau 9 taille max 512 jusqu'au niveau 1 taille max = 4
+TP_LOCALLAB_LEVFRA;Niveaux
+TP_LOCALLAB_LIGHTNESS;Luminosité
+TP_LOCALLAB_LIGHTN_TOOLTIP;En mode inverse: selection = -100 force la luminance à zero
+TP_LOCALLAB_LIGHTRETI;Luminosité
+TP_LOCALLAB_LINEAR;Linéarité
+TP_LOCALLAB_LIST_NAME;Ajoute un outil au spot courant...
+TP_LOCALLAB_LIST_TOOLTIP;Choisir un outil et ensuite son niveau de complexité "Normal" ou "Expert".\nLe nombre traduit la place de l'outil dans le processus de chaque RT-Spot
+TP_LOCALLAB_LMASK_LEVEL_TOOLTIP;Donne priorité à l'action sur les tons moyens et hautes lumières en choisissant les niveaux concernés d'ondelettes
+TP_LOCALLAB_LMASK_LL_TOOLTIP;Give priority to action on midtones and high lights
+TP_LOCALLAB_LOCCONT;Masque Flou
+TP_LOCALLAB_LOC_CONTRAST;Contraste Local-Ondelettes-déf.
+TP_LOCALLAB_LOC_CONTRASTPYR;Ψ Pyramide 1:
+TP_LOCALLAB_LOC_CONTRASTPYR2;Ψ Pyramide 2:
+TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contr. par niveaux- Tone Mapping - Cont.Dir.
+TP_LOCALLAB_LOC_CONTRASTPYRLAB; Filtre Gradué - Netteté bords - Flouter
+TP_LOCALLAB_LOC_RESIDPYR;Image Residuelle
+TP_LOCALLAB_LOG;Codage log
+TP_LOCALLAB_LOGAUTO;Automatique
+TP_LOCALLAB_LOGAUTO_TOOLTIP;Presser ce bouton va amner une évaluation an evaluation de l'amplitude dynamique et du point gris "source" (Si "Automatique" Source gris activé).\nPour être autorisé à retoucher les valeurs automatiques, presser le bouton à nouveau
+TP_LOCALLAB_LOGBASE_TOOLTIP;Défaut = 2.\nValeurs inférieures à 2 réduisent l'action de l'algorithme, les ombres sont plus sombres, les hautes lumières plus brillantes.\nValeurs supérieures à 2 changent l'action de l'algorithme, les ombres sont plus grises, les hautes lumières lavées
+TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Valeurs estimées de la plage Dynamique - Noir Ev et Blanc Ev
+TP_LOCALLAB_LOGENCOD_TOOLTIP;Autorise 'Tone Mapping' avec codage Logarithmique (ACES).\nUtile pour images ous-exposées, ou avec une plage dynamique élévée.\n\nDeux étapes dans le processus : 1) Calculer Plage Dynamique 2) Adaptation par utilisateur
+TP_LOCALLAB_LOGFRA;Point gris source
+TP_LOCALLAB_LOGFRAME_TOOLTIP;Calcule ou utilise le niveau d'Exposition de l'image tôt dans le processus:\n Noir Ev, Blanc Ev et Point gris source.\n Prend en compte la compensation d'exposition principale.
+TP_LOCALLAB_LOGLIN;Logarithme mode
+TP_LOCALLAB_LOGPFRA;Niveaux d'Exposition relatif
+TP_LOCALLAB_LOGSRCGREY_TOOLTIP;Estime la valeur du point gris de l'image, tôt dans le processus
+TP_LOCALLAB_LOGTARGGREY_TOOLTIP;Vous pouvez changer cette valeur pour l'adapter à votre goût.
+TP_LOCALLAB_LOG_TOOLNAME;Codage log - 0
+TP_LOCALLAB_LUM;Courbes LL - CC
+TP_LOCALLAB_LUMADARKEST;Plus Sombre
+TP_LOCALLAB_LUMASK;Maqsue Luminance arrière plan
+TP_LOCALLAB_LUMASK_TOOLTIP;Ajuste le gris de l'arrière plan du masque dans Montrer Masque (Masque et modifications)
+TP_LOCALLAB_LUMAWHITESEST;Plus blanc
+TP_LOCALLAB_LUMONLY;Luminance seulemnt
+TP_LOCALLAB_MASKCOM;Masque couleur Commun
+TP_LOCALLAB_MASKCOM_TOOLTIP;Ces masques travaillent comme les autres outils, ils prennet en compte Etendue.\nIls sont différents des autres masques qui complètent un outil (Couleur et Lumière, Exposition...)
+TP_LOCALLAB_MASFRAME;Masque et Fusion
+TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTake into account deltaE image to avoid retouching the selection area when sliders gamma mask, slope mask, chroma mask and curves contrast , levels contrasts, and mask blur, structure(if enabled tool) are used.\nDisabled in Inverse
+TP_LOCALLAB_MASK;Masque
+TP_LOCALLAB_MASK2;Courbe de Contraste masque
+TP_LOCALLAB_MASKCOL;Masque Courbes
+TP_LOCALLAB_MASKH;Courbe teinte masque
+TP_LOCALLAB_MASK_TOOLTIP;Vous pouvez activer plusieurs masques pour un simple outil, ceci nécessite d'activer un autre outil (mais sans utilser l'outil : curseurs à 0,...)où est le masque que vous souhaitez activer.\n\nVous pouvez aussi dupliquer le RT-spot et le placer juste à côté de l'autre,les variations de références autorisent un travail fin sur les images.
+TP_LOCALLAB_MED;Medium
+TP_LOCALLAB_MEDIAN;Median Bas
+TP_LOCALLAB_MEDNONE;Rien
+TP_LOCALLAB_MERCOL;Couleur
+TP_LOCALLAB_MERDCOL;Fusion arrière plan (ΔE)
+TP_LOCALLAB_MERELE;Eclaicit seulement
+TP_LOCALLAB_MERFIV;Addition
+TP_LOCALLAB_MERFOR;Couleur esquiver
+TP_LOCALLAB_MERFOU;Multiplier
+TP_LOCALLAB_MERGE1COLFRA;Fusion avec Original ou Précédent ou arrière plan
+TP_LOCALLAB_MERGECOLFRA;Masque: LCH & Structure
+TP_LOCALLAB_MERGEFIV;Previous Spot(Mask 7) + Mask LCH
+TP_LOCALLAB_MERGEFOU;Previous Spot(Mask 7)
+TP_LOCALLAB_MERGEMER_TOOLTIP;Prend en compte ΔE pour fusionner les fichiers (équivalent de Etendue pour cet usage)
+TP_LOCALLAB_MERGENONE;Rien
+TP_LOCALLAB_MERGEONE;Short Curves 'L' Mask
+TP_LOCALLAB_MERGEOPA_TOOLTIP;Opacité fusion % Spot courant avec original ou Spot précédent.\nContraste seuil : ajuste le résulat en fonction du contraste original
+TP_LOCALLAB_MERGETHR;Original(Mask 7) + Mask LCH
+TP_LOCALLAB_MERGETWO;Original(Mask 7)
+TP_LOCALLAB_MERGETYPE;Fusion image et masque
+TP_LOCALLAB_MERGETYPE_TOOLTIP;Rien, use all mask in LCH mode.\nShort curves 'L' mask, use a short circuit for mask 2, 3, 4, 6, 7.\nOriginal mask 8, blend current image with original
+TP_LOCALLAB_MERHEI;Overlay
+TP_LOCALLAB_MERHUE;Teite
+TP_LOCALLAB_MERLUCOL;Luminance
+TP_LOCALLAB_MERLUM;Luminosité
+TP_LOCALLAB_MERNIN;Ecran
+TP_LOCALLAB_MERONE;Normal
+TP_LOCALLAB_MERSAT;Saturation
+TP_LOCALLAB_MERSEV;Soft Light Photshop
+TP_LOCALLAB_MERSEV0;Soft Light Illusion
+TP_LOCALLAB_MERSEV1;Soft Light W3C
+TP_LOCALLAB_MERSEV2;Lumière dure
+TP_LOCALLAB_MERSIX;Divise
+TP_LOCALLAB_MERTEN;Assombrit seulement
+TP_LOCALLAB_MERTHI;Couleur Brûlé
+TP_LOCALLAB_MERTHR;Difference
+TP_LOCALLAB_MERTWE;Exclusion
+TP_LOCALLAB_MERTWO;Soustrait
+TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts.
+TP_LOCALLAB_MLABEL;Récupère les données Min=%1 Max=%2 (Clip - décalage)
+TP_LOCALLAB_MLABEL_TOOLTIP;'Doit être' près de min=0 max=32768 (log mode) mais d'autres valeurs sont possibles.\nVous pouvez agir sur les données récupérées (CLIP) et décalage pour normaliser.\n\nRécupère les données image sans mélange.
+TP_LOCALLAB_MODE_EXPERT;Expert
+TP_LOCALLAB_MODE_NORMAL;Normal
+TP_LOCALLAB_MRFIV;Arrière plan
+TP_LOCALLAB_MRFOU;Spot précédent
+TP_LOCALLAB_MRONE;Rien
+TP_LOCALLAB_MRTHR;Image Originale
+TP_LOCALLAB_MRTWO;Short Curves 'L' Mask
+TP_LOCALLAB_MULTIPL_TOOLTIP;Autorise la retouche des tons sur une large plage : -18EV +4EV. Le remier curseur agit sur -18EV and -6EV. Le dernier curseur agit sur les tons au-dessus de 4EV
+TP_LOCALLAB_NEIGH;Rayon
+TP_LOCALLAB_NOISECHROCOARSE;Chroma gros (Ond)
+TP_LOCALLAB_NOISECHROC_TOOLTIP;Si supérieur à zéro, algorithme haute qualité est activé.\nGros est sélectionné si curseur >=0.2
+TP_LOCALLAB_NOISECHRODETAIL;Récupération des détails Chroma (DCT ƒ)
+TP_LOCALLAB_NOISECHROFINE;Chroma fin (Ond)
+TP_LOCALLAB_NOISEDETAIL_TOOLTIP;Désactivé si curseur = 100
+TP_LOCALLAB_NOISELEQUAL;Egalisateurs balnc-noir
+TP_LOCALLAB_NOISELUMCOARSE;Luminance gros (ond)
+TP_LOCALLAB_NOISELUMDETAIL;Récupération Luminance fin(DCT ƒ)
+TP_LOCALLAB_NOISELUMFINE;Luminance fin 1 (ond)
+TP_LOCALLAB_NOISELUMFINETWO;Luminance fin 2 (ond)
+TP_LOCALLAB_NOISELUMFINEZERO;Luminance fin 0 (ond)
+TP_LOCALLAB_NOISEMETH;Réduction du bruit
+TP_LOCALLAB_NONENOISE;Rien
+TP_LOCALLAB_OFFS;Décalage
+TP_LOCALLAB_OFFSETWAV;Décalage
+TP_LOCALLAB_OPACOL;Opacité
+TP_LOCALLAB_ORIGLC;Fusion seulement avec image originale
+TP_LOCALLAB_ORRETILAP_TOOLTIP;Agit sur un deuxième seuil Laplacien, pour prendre en compte ΔE pour différencier l'action nottament avec l'arrière plan (différent de Etendue)
+TP_LOCALLAB_ORRETISTREN_TOOLTIP;Aagit sur un seuil Laplacien, plus grande est l'action, plus les différences de contraste seront réduites
+TP_LOCALLAB_PASTELS2;Vibrance
+TP_LOCALLAB_PDE;ΔØ Laplacian PDE - Compression dynamique + Standard
+TP_LOCALLAB_PDEFRA;Contrast atténuation ƒ
+TP_LOCALLAB_PDEFRAME_TOOLTIP;PDE IPOL - algorithme personnel adapté de IPOL à Rawtherapee: conduit à des résultats très variés et a besoin de différents réglages que Standard (Noir négatif, gamma < 1,...)\nPeut être utils pour des iamges sous-exposées ou avec une étendue dynamique importante.\n
+TP_LOCALLAB_PREVIEW;Prévisualisation ΔE
+TP_LOCALLAB_PREVHIDE;Cacher tous les réglages
+TP_LOCALLAB_PREVSHOW;Montrer tous les réglages
+TP_LOCALLAB_PROXI;ΔE Affaiblissement
+TP_LOCALLAB_QUALCURV_METHOD;Types de Courbes
+TP_LOCALLAB_QUAL_METHOD;Qualité globale
+TP_LOCALLAB_RADIUS;Rayon
+TP_LOCALLAB_RADIUS_TOOLTIP;Above Radius 30 Use Fast Fourier Transform
+TP_LOCALLAB_RADMASKCOL;Rayon adoucir Masque
+TP_LOCALLAB_RECT;Rectangle
+TP_LOCALLAB_RECURS;Réferences Récursives
+TP_LOCALLAB_RECURS_TOOLTIP;Recalcule les références pour teinte, luma, chroma après chaque module et après chaque RT-spot.\nAussi utile pour le travail avec les masques.
+TP_LOCALLAB_REFLABEL;Ref. (0..1) Chroma=%1 Luma=%2 teinte=%3
+TP_LOCALLAB_REN_DIALOG_LAB;Entrer le nouveau nom de Spot
+TP_LOCALLAB_REN_DIALOG_NAME;Renomme le Controle Spot
+TP_LOCALLAB_RESETSHOW;Annuler Montrer Toutes les Modifications
+TP_LOCALLAB_RESID;Image Résiduelle
+TP_LOCALLAB_RESIDBLUR;Flouter Image Résiduelle
+TP_LOCALLAB_RESIDCHRO;Image Résiduelle Chroma
+TP_LOCALLAB_RESIDCOMP;Image Résiduelle Compression
+TP_LOCALLAB_RESIDCONT;Image Résiduelle Contraste
+TP_LOCALLAB_RESIDHI;Hautes lumières
+TP_LOCALLAB_RESIDHITHR;Hautes lumières seuil
+TP_LOCALLAB_RESIDSHA;Ombres
+TP_LOCALLAB_RESIDSHATHR;Ombres seuil
+TP_LOCALLAB_RETI;De-brume - Retinex Fort contraste
+TP_LOCALLAB_RETIFRA;Retinex
+TP_LOCALLAB_RETIM;Original Retinex
+TP_LOCALLAB_RETITOOLFRA;Retinex Outils
+TP_LOCALLAB_RETI_FFTW_TOOLTIP;FFT améliore la qualité et autorise de grands rayons, mais accroît les temps de traitement.\nCe temps dépends de la surface traitée\nLe temps de traitements dépend de "scale" (échelle) (soyez prudent avec les hautes valeurs ).\nA utiliser de préférence avec de grand rayons.\n\nLes Dimensions peuvent être réduites de quelques pixels pour optimiser FFTW.\nCette optimisation peut réduire le temps de traitement d'un facteur de 1.5 à 10.\nOptimisation pas utilsée en prévisualisation
+TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Have no effect when the value "Lightness = 1" or "Darkness =2" is chosen.\nIn other cases, the last step of "Multiple scale Retinex" is applied an algorithm close to "local contrast", these 2 cursors, associated with "Strength" will allow to play upstream on the local contrast.
+TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Play on internal parameters to optimize response.\nLook at the "restored datas" indicators "near" min=0 and max=32768 (log mode), but others values are possible.
+TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm allows differenciation for haze or normal.\nLogarithm brings more contrast but will generate more halo.
+TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP;Adapt these values according to images - if misty images and depending on whether you want to act on the front or the background
+TP_LOCALLAB_RETI_SCALE_TOOLTIP;If scale=1, retinex behaves like local contrast with many more possibilities.\nThe greater the scale, the more intense the recursive action, the longer the calculation times
+TP_LOCALLAB_RET_TOOLNAME;De-brume & Retinex - 9
+TP_LOCALLAB_REWEI;Repondération iterations
+TP_LOCALLAB_RGB;RGB Courbe de tonalité
+TP_LOCALLAB_ROW_NVIS;Pas visible
+TP_LOCALLAB_ROW_VIS;Visible
+TP_LOCALLAB_SATUR;Saturation
+TP_LOCALLAB_SAVREST;Sauve - Récupère Image Courante
+TP_LOCALLAB_SCALEGR;Echelle
+TP_LOCALLAB_SCALERETI;Echelle
+TP_LOCALLAB_SCALTM;Echelle
+TP_LOCALLAB_SCOPEMASK;Etendue Masque ΔE Image
+TP_LOCALLAB_SCOPEMASK_TOOLTIP;Actif si Masque DeltaE Image est activé.\nLes faibles valeurs évitent de retoucher l'aire sélectionnée
+TP_LOCALLAB_SENSI;Etendue
+TP_LOCALLAB_SENSIBN;Etendue
+TP_LOCALLAB_SENSICB;Etendue
+TP_LOCALLAB_SENSIDEN;Etendue
+TP_LOCALLAB_SENSIEXCLU;Etendue
+TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Ajuste les couleurs pour les inclure dans exclusion!
+TP_LOCALLAB_SENSIH;Etendue
+TP_LOCALLAB_SENSIH_TOOLTIP;Ajuste Etendue de l'action:\nLes petites valeurs limitent l'action aux couleurs très similaires à celles sous le centre du spot.\nHautes valeurs laissent l'outil agir sur une large plage de couleurs.
+TP_LOCALLAB_SENSILOG;Etendue
+TP_LOCALLAB_SENSIS;Etendue
+TP_LOCALLAB_SENSIS_TOOLTIP;Ajuste Etendue de l'action:\nLes petites valeurs limitent l'action aux couleurs très similaires à celles sous le centre du spot.\nHautes valeurs laissent l'outil agir sur une large plage de couleurs.\nValeurs inférieures à 20 conduisent à un meilleur algorithme.
+TP_LOCALLAB_SENSI_TOOLTIP;Ajuste Etendue de l'action:\nLes petites valeurs limitent l'action aux couleurs très similaires à celles sous le centre du spot.\nHautes valeurs laissent l'outil agir sur une large plage de couleurs.\nValeurs inférieures à 20 conduisent à un meilleur algorithme.
+TP_LOCALLAB_SENSIMASK_TOOLTIP;Ajuste Etendue pour ce masque commun.\nAgit sur l'écart entre l'image originale et le masque.\nLes références (luma, chroma, teinte) sont celles du centre du RT-spot\n\nVous pouvez aussi agir sur le deltaE interne au masque avec 'Etendue Masque deltaE image' dans 'Réglages'
+TP_LOCALLAB_SETTINGS;Réglages
+TP_LOCALLAB_SH1;Ombres Lumières
+TP_LOCALLAB_SH2;Egaliseur
+TP_LOCALLAB_SHADEX;Ombres
+TP_LOCALLAB_SHADEXCOMP;Compression ombres & profondeur tonale
+TP_LOCALLAB_SHADHIGH;Ombres/Lumières - Egaliseur tonal
+TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Peut être utilisé - ou en complement - du module Exposition dans les cas difficiles.\nUtiliser réduction du bruit Denoise peut être nécessaire : éclaicir les ombres.\n\nPeut être utilisé comme un filtre gradué (augmenter Etendue)
+TP_LOCALLAB_SHAMASKCOL;masque ombres
+TP_LOCALLAB_SHAPETYPE;Forme aire RT-spot
+TP_LOCALLAB_SHAPE_TOOLTIP;Ellipse est le mode normal.\nRectangle peut être utilé dans certains cas, par exemple pour travailler en image complète en conjonction avec les délimiteurs en dehors de la prévisualisation, transition = 100.\n\nPolygone - Beziers sont en attente de GUI...
+TP_LOCALLAB_SHARAMOUNT;Quantité
+TP_LOCALLAB_SHARBLUR;Rayon flouter
+TP_LOCALLAB_SHARDAMPING;Amortissement
+TP_LOCALLAB_SHARFRAME;Modifications
+TP_LOCALLAB_SHARITER;Iterations
+TP_LOCALLAB_SHARP;Netteté
+TP_LOCALLAB_SHARP_TOOLNAME;Netteté - 8
+TP_LOCALLAB_SHARRADIUS;Rayon
+TP_LOCALLAB_SHORTC;Short Curves 'L' Mask
+TP_LOCALLAB_SHORTCMASK_TOOLTIP;Short circuit the 2 curves L(L) and L(H).\nAllows you to mix the current image with the original image modified by the mask job.\nUsable with masks 2, 3, 4, 6, 7
+TP_LOCALLAB_SHOWC;Masque et modifications
+TP_LOCALLAB_SHOWC1;Fusion fichier
+TP_LOCALLAB_SHOWCB;Masque et modifications
+TP_LOCALLAB_SHOWDCT;Montrer processus Fourier ƒ
+TP_LOCALLAB_SHOWE;Masque et modifications
+TP_LOCALLAB_SHOWFOURIER;Fourier ƒ(dct)
+TP_LOCALLAB_SHOWLAPLACE;∆ Laplacien (premier)
+TP_LOCALLAB_SHOWLC;Masque et modifications
+TP_LOCALLAB_SHOWMASK;Montrer masque
+TP_LOCALLAB_SHOWMASKCOL_TOOLTIP;Affiche masque modifications.\nAttention, vous ne pouvez voir qu'un seul masque à la fois.\n\nNote: Utilisation du Masque est avant l'algorihtme de détection de forme.
+TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP;Montre le processus Fourier:\nMontre les différentes étapes du processus.\nLaplace - construit la dérivée seconde the second dérivée associée au seuil (Premiére étape).\nFourier -montre la transformée de Laplace avec DCT.\nPoisson - montre la solution de Poisson DCE.\nNormalise - montre le résultat sans normalisation de la luminance.
+TP_LOCALLAB_SHOWMASKTYP1;Flouter & Bruit
+TP_LOCALLAB_SHOWMASKTYP2;Réduction du bruit
+TP_LOCALLAB_SHOWMASKTYP3;Flouter & Bruit + De-bruite
+TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Masque et modifications peuvent être choisis.\nFlouter et bruit: dans ce cas il n'est pas utilisé pour 'Réduction du bruit'.\nRéduction du bruit : dans ce cas il n'est pas utilisé pour 'flouter et bruit'.\n\nFlouter et bruit + Réduction du bruit : le masque est partagé, faire attention à 'montrer modifications' et 'Etendue'
+TP_LOCALLAB_SHOWMNONE;Rien
+TP_LOCALLAB_SHOWMODIF;Montrer modifications sans masque
+TP_LOCALLAB_SHOWMODIFMASK;Montrer modifications avec masque
+TP_LOCALLAB_SHOWNORMAL;Normalise luminance (non)
+TP_LOCALLAB_SHOWPLUS;Masque et modifications - Adoucir-flouter & De-bruite
+TP_LOCALLAB_SHOWPOISSON;Poisson (pde ƒ)
+TP_LOCALLAB_SHOWR;Masque et modifications
+TP_LOCALLAB_SHOWREF;Prévisualisation ΔE
+TP_LOCALLAB_SHOWS;Masque et modifications
+TP_LOCALLAB_SHOWSTRUC;Montrer Spot structure (expert)
+TP_LOCALLAB_SHOWSTRUCEX;Montrer Spot structure (expert)
+TP_LOCALLAB_SHOWT;Masque et modifications
+TP_LOCALLAB_SHOWVI;Masque et modifications
+TP_LOCALLAB_SHRESFRA;Ombres/Lumières
+TP_LOCALLAB_SHTRC_TOOLTIP;Modifie les tons de l'image en agissant sur la TRC (Tone Response Curve).\nGamma agit principalement sur les tons lumineux.\nSlope (pente) agit principalement sur les tons sombres.
+TP_LOCALLAB_SH_TOOLNAME;Ombres-lumières & Egaliser tonal - 5
+TP_LOCALLAB_SIGMAWAV;Atténuation Réponse
+TP_LOCALLAB_SIM;Simple
+TP_LOCALLAB_SLOMASKCOL;Pente (slope) masque
+TP_LOCALLAB_SLOSH;Pente
+TP_LOCALLAB_SOFT;Lumière douce - Original Retinex
+TP_LOCALLAB_SOFTM;Lumière douce (soft light)
+//TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Original Retinex est très différent des autres méthodes Retinex.\nIl agit sur les gris et équilibre la luminance.\nC'est une émulation de "Dodge" and "Burn"
+TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Applique un mélange Lumière douce. Effectue une émulation de "dodge and burn" en utilisant l'algorithme original de retinex.
+TP_LOCALLAB_SOFTRADIUSCOL;Rayon adoucir
+TP_LOCALLAB_SOFTRETI;Reduire artefact ΔE
+TP_LOCALLAB_SOFTRETI_TOOLTIP;Prend en compte ΔE pour améliorer Transmission map
+TP_LOCALLAB_SOFT_TOOLNAME;Lumière douce & Original Retinex - 6
+TP_LOCALLAB_SOURCE_GRAY;Valeur
+TP_LOCALLAB_SPECCASE; Cas spécifiques
+TP_LOCALLAB_SPECIAL;Usage Special des courbes RGB
+TP_LOCALLAB_SPECIAL_TOOLTIP;Seulement pour cette courbe RGB, désactive (ou réduit les effecs) de Etendue, masque...par exemple, si vous voulez rendre un effet "négatif".
+TP_LOCALLAB_SPOTNAME;Nouveau Spot
+TP_LOCALLAB_STD;Standard
+TP_LOCALLAB_STR;Force
+TP_LOCALLAB_STRBL;Force
+TP_LOCALLAB_STREN;Compression Force
+TP_LOCALLAB_STRENG;Force
+TP_LOCALLAB_STRENGR;Force
+TP_LOCALLAB_STRENGTH;Bruit
+TP_LOCALLAB_STRGRID;Force
+TP_LOCALLAB_STRRETI_TOOLTIP;Si force Retinex < 0.2 seul Dehaze est activé.\nSi force Retinex >= 0.1 Dehaze est en mode luminance.
+TP_LOCALLAB_STRUC;Structure
+TP_LOCALLAB_STRUCCOL;Structure
+TP_LOCALLAB_STRUCCOL1;Spot Structure
+TP_LOCALLAB_STRUCT_TOOLTIP;Utilise l'algorithme de Sobel pour prendre en compte la structure dans la détection de forme.\nvous pouvez prévisualiser avec "masque et modifications - Montrer structure spot".\n\nPeut être utilisé avec masques (expert) structure, flouter, ondelettes pour améliorer la détection de bords.\n\nA besoin de réglages sans-masque pour êtrre activé (luminosité, exposition...)
+TP_LOCALLAB_STRUMASKCOL;Structure masque force
+TP_LOCALLAB_STRUMASK_TOOLTIP;Génère un masque structure qui va différencier les aplats et reliefs.\nSi structure masque comme outil est activé, ce masque est untilisé en plus des autres outils (gamma, slope, courbe contraste ...)
+TP_LOCALLAB_STYPE;Forme méthode
+TP_LOCALLAB_STYPE_TOOLTIP;Vous pouvez choisir entre:\nSymétrique - gauche et droite sont liés, haut et bas sont liés.\nIndépendent - toutes les saisies sont indépendantes.
+TP_LOCALLAB_SYM;Symétrique (souris)
+TP_LOCALLAB_SYMSL;Symétrique (souris + curseurs)
+TP_LOCALLAB_TARGET_GRAY;Point Gris Cible
+TP_LOCALLAB_THRES;Seuil structure
+TP_LOCALLAB_THRESDELTAE;Seuil ΔE-Etendue
+TP_LOCALLAB_THRESRETI;Seuil
+TP_LOCALLAB_THRESWAV;Balance Seuil
+TP_LOCALLAB_TLABEL;TM Datas Min=%1 Max=%2 Mean=%3 Sigma=%4 (Seuil)
+TP_LOCALLAB_TLABEL2;TM Effectif Tm=%1 TM=%2
+TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can act on Threshold to normalize
+TP_LOCALLAB_TM;Compression tonale - Texture
+TP_LOCALLAB_TM_MASK;Utilise transmission map
+TP_LOCALLAB_TONEMAPESTOP_TOOLTIP;Ce paramètre affecte la sensibilité aux bords.\n Plus grand il est, plus la luminosité change peut être considéré comme un bord.\n Si réglé à zéro 'compression tonale' va avoir un effet similaire à masque flou.
+TP_LOCALLAB_TONEMAPGAM_TOOLTIP;Gamma déplace l'action de 'compression tonale' des ombres vers les lumières.
+TP_LOCALLAB_TONEMAPREWEI_TOOLTIP;Dans certains 'compression tonal' peut amener des effets de perspective, et dans de rares cas des halos peuvent apparaître.\n Accroître le nombre d'itérations peut aider à résoudre ces problèmes.
+TP_LOCALLAB_TONEMAP_TOOLTIP;Compression tonal - menu principal doit être désactivé
+TP_LOCALLAB_TONEMASCALE_TOOLTIP;Ce contrôle donne le pouvoir de différencier le contraste "local" et "global".\nPlus il est important, plus un détail sera accentué.
+TP_LOCALLAB_TONE_TOOLNAME;Compression tonale - 4
+TP_LOCALLAB_TOOLCOL;Masque Structure comme outil
+TP_LOCALLAB_TOOLMASK;Outils
+TP_LOCALLAB_TRANSIT;Transition - Gradient
+TP_LOCALLAB_TRANSITGRAD;Transition différentiation XY
+TP_LOCALLAB_TRANSITGRAD_TOOLTIP;Change la transition des abscisses vers les ordonnées
+TP_LOCALLAB_TRANSITVALUE;Transition valeur
+TP_LOCALLAB_TRANSITWEAK;Transition affaiblissement (linéaire-log)
+TP_LOCALLAB_TRANSITWEAK_TOOLTIP;Ajuste l'affaiblissement de la transition : change le processus d'affaiblissement - 1 linéaire - 2 parabolique - 3 cubique - ^25.\nPeut être utilisé en conjonction avec de très faibles valeurs de transition pour traiter/réduire les défauts (CBDL, Ondelettes, Couleur et lumière)
+TP_LOCALLAB_TRANSIT_TOOLTIP;Ajuste la progressions de la transition enttre les zones affectées ou non affectées, comme un pourcentage du "rayon"
+TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain
+TP_LOCALLAB_TRANSMISSIONMAP;Transmission map
+TP_LOCALLAB_TRANSMISSION_TOOLTIP;Transmission en accord à transmission.\nAbscisse: transmission pour les valeurs négatives (min), mean, et les valeurs positives (max).\nOrdonnée: amplification ou réduction.\nVous pouvez agir sur cette courbe pour chnager la Transmission et réduire les artefacts
+TP_LOCALLAB_USEMASK;Utiliser masque
+TP_LOCALLAB_VART;Variance (contraste)
+TP_LOCALLAB_VIBRANCE;Vibrance - Chaud & Froid
+TP_LOCALLAB_VIB_TOOLNAME;Vibrance - Chaud & Froid - 3
+TP_LOCALLAB_SOFT_TOOLNAME;Lumière douce & Original Retinex - 6
+TP_LOCALLAB_BLUR_TOOLNAME;Adoucir Flouter Grain & De-bruite - 1
+TP_LOCALLAB_TONE_TOOLNAME;Compression tonale - 4
+TP_LOCALLAB_RET_TOOLNAME;De-brume & Retinex - 9
+TP_LOCALLAB_SHARP_TOOLNAME;Netteté - 8
+TP_LOCALLAB_LC_TOOLNAME;Constraste local & Ondelettes (Défauts) - 7
+TP_LOCALLAB_CBDL_TOOLNAME;Contraste par Niveau détail (Défauts) - 2
+TP_LOCALLAB_LOG_TOOLNAME;Codage log - 0
+TP_LOCALLAB_MASKCOM_TOOLNAME;Masque Commun Couleur - 13
+TP_LOCALLAB_VIS_TOOLTIP;Click pour montrer/cacher le Spot sélectionné.\nCtrl+click pour montrer/cacher tous les Spot.
+TP_LOCALLAB_WAMASKCOL;Ψ Masque Niveau Ondelettes
+TP_LOCALLAB_WARM;Chaud - Froid & Artefacts de couleur
+TP_LOCALLAB_WARM_TOOLTIP;Ce curseur utilise l'algorithme Ciecam et agit comme une Balance des blancs, il prut réchauffer ou refroidir cool la zone concernée.\nIl peut aussi dans certains réduire les artefacts colorés.
+TP_LOCALLAB_WASDEN_TOOLTIP;De-bruite luminance pour les 3 premiers niveaux (fin).\nLa limite droite de la courbe correspond à gros : niveau 3 et au delà.
+TP_LOCALLAB_WAV;Contrast local niveau
+TP_LOCALLAB_WAVBLUR_TOOLTIP;Réalise un flou pour chaque niveau de décomposition, également pour l'image résiduelle.
+TP_LOCALLAB_WAVCOMP;Compression par niveau
+TP_LOCALLAB_WAVCOMPRE;(de)Compression par niveau
+TP_LOCALLAB_WAVCOMPRE_TOOLTIP;Réalise un 'Tone-mapping' ou une réduction du contraste local par niveau.\nEn abscisse: niveaux
+TP_LOCALLAB_WAVCOMP_TOOLTIP;Réalise un contrast local en fonction de la direction de la décomposition en ondelettes : horizontal, vertical, diagonal
+TP_LOCALLAB_WAVCON;Contraste par niveau
+TP_LOCALLAB_WAVCONTF_TOOLTIP;Similaire à Contrast By Detail Levels : en abscisse niveaux.
+TP_LOCALLAB_WAVDEN;de-bruite luminance par niveau (0 1 2 + 3 et plus)
+TP_LOCALLAB_WAVE;Ψ Ondelette
+TP_LOCALLAB_WAVEDG;Contrast Local
+TP_LOCALLAB_WAVEEDG_TOOLTIP;Améliore la netteté prenant en compte la notion de "ondelettes bords".\nNécessite au moins que les 4 premiers niveaux sont utilisables
+TP_LOCALLAB_WAVGRAD_TOOLTIP;Filtre gradué pour Contraste local "luminance"
+TP_LOCALLAB_WAVHIGH;Ψ Ondelette haut
+TP_LOCALLAB_WAVLEV;Flouter par niveau
+TP_LOCALLAB_WAVLOW;Ψ Ondelette bas
+TP_LOCALLAB_WAVMASK;Ψ Masque Niveau contraste local
+TP_LOCALLAB_WAVMASK_TOOLTIP;Autorise un travail fin sur les masques niveaux de contraste (structure)
+TP_LOCALLAB_WAVMED;Ψ Ondelette normal
+TP_LOCALLAB_WEDIANHI;Median Haut
+TP_LOCALLAB_WHITE_EV;Blanc Ev
TP_METADATA_EDIT;Appliquer les modifications
TP_METADATA_MODE;Mode de copie des métadonnées
TP_METADATA_STRIP;Retirer toutes les métadonnées
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index b7c0b7e22..22dc027ea 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -8,6 +8,7 @@
#08 2012-12-22 a3novy
#09 2013-04-01 a3novy
#10 2013-04-19 a3novy
+#11 2020-06-24 Yz2house
ABOUT_TAB_BUILD;バージョン
ABOUT_TAB_CREDITS;クレジット
@@ -25,7 +26,7 @@ CURVEEDITOR_CURVE;カーブ
CURVEEDITOR_CURVES;カーブ
CURVEEDITOR_CUSTOM;カスタム
CURVEEDITOR_DARKS;ダーク
-CURVEEDITOR_EDITPOINT_HINT;ボタンを押すと数値で入出力を編集出来ます\n\n編集したいカーブ上のポイントを右クリックします\n編集を無効にする場合はポイント以外の部分で右クリックします
+CURVEEDITOR_EDITPOINT_HINT;ボタンを押すと数値で入出力値を変えられるようになります\n\nカーブ上で目標ポイントを右クリックし、カーブ下に表示されるI(入力値)或いはO(出力値)\n編集するポイントを変更する場合はポイント以外の部分で右クリックします
CURVEEDITOR_HIGHLIGHTS;ハイライト
CURVEEDITOR_LIGHTS;ライト
CURVEEDITOR_LINEAR;リニア
@@ -103,14 +104,14 @@ EXPORT_BYPASS_SHARPENEDGE;エッジ・シャープニングを迂回
EXPORT_BYPASS_SHARPENING;シャープニングを迂回
EXPORT_BYPASS_SHARPENMICRO;マイクロコントラストを迂回
EXPORT_FASTEXPORTOPTIONS;高速書き出しオプション
-EXPORT_INSTRUCTIONS;現像の設定に要する時間と手間を省くために、高速書き出しを優先させるオプションです。処理速度が優先される場合や、既定の現像パラメータを変えずに何枚ものリサイズ画像が要求される場合に奨められる方法で、低解像度画像を迅速に生成します。
+EXPORT_INSTRUCTIONS;出力設定に要する時間と手間を省くために、高速書き出しを優先させるオプションです。処理速度が優先される場合や、既定の出力パラメータを変えずに何枚ものリサイズ画像が要求される場合に奨められる方法で、低解像度画像を迅速に生成します。
EXPORT_MAXHEIGHT;最大高:
EXPORT_MAXWIDTH;最大幅:
EXPORT_PIPELINE;高速書き出しの方法
EXPORT_PUTTOQUEUEFAST; 高速書き出しのキューに追加
EXPORT_RAW_DMETHOD;デモザイクの方式
EXPORT_USE_FAST_PIPELINE;処理速度優先(リサイズした画像に調整を全て行う)
-EXPORT_USE_FAST_PIPELINE_TIP;処理速度を優先すると、処理は速くなりますが、画像の質は落ちます。通常、画像のリサイズは全現像処理工程の最後で行われますが、ここでは処理工程の初めの方でリサイズが行われます。処理速度は著しく上がりますが、現像処理された画像にアーティファクトが発生したり、全体的な質が低下したりします。
+EXPORT_USE_FAST_PIPELINE_TIP;処理速度を優先すると、処理は速くなりますが、画像の質は落ちます。通常、画像のリサイズは全処理工程の最後で行われますが、ここでは処理工程の初めの方でリサイズが行われます。処理速度は著しく上がりますが、処理された画像にアーティファクトが発生したり、全体的な質が低下したりします。
EXPORT_USE_NORMAL_PIPELINE;標準(リサイズ処理は最後、幾つかの処理を迂回)
EXTPROGTARGET_1;raw
EXTPROGTARGET_2;キュー処理
@@ -232,6 +233,7 @@ GENERAL_DISABLED;無効
GENERAL_ENABLE;有効
GENERAL_ENABLED;有効
GENERAL_FILE;ファイル
+GENERAL_HELP;ヘルプ
GENERAL_LANDSCAPE;横
GENERAL_NA;n/a
GENERAL_NO;No
@@ -262,7 +264,7 @@ HISTORY_MSG_1;写真を読み込みました
HISTORY_MSG_2;PP3を読み込みました
HISTORY_MSG_3;PP3を変更しました
HISTORY_MSG_4;履歴ブラウジング
-HISTORY_MSG_5;明度
+HISTORY_MSG_5;明るさ
HISTORY_MSG_6;コントラスト
HISTORY_MSG_7;黒
HISTORY_MSG_8;露光量補正
@@ -431,16 +433,16 @@ HISTORY_MSG_171;L*a*b* LC カーブ
HISTORY_MSG_172;LCの適用をレッドと肌色トーンだけに制限
HISTORY_MSG_173;ノイズ低減 - 細部の復元
HISTORY_MSG_174;CIE色の見えモデル2002
-HISTORY_MSG_175;CAM02 - 色順応量
-HISTORY_MSG_176;CAM02 - 観視の暗い周囲環境
-HISTORY_MSG_177;CAM02 - 撮影環境の順応輝度
-HISTORY_MSG_178;CAM02 - 観視の順応輝度
-HISTORY_MSG_179;CAM02 - モデル
+HISTORY_MSG_175;CAM02 - CAT02
+HISTORY_MSG_176;CAM02 - 観視環境
+HISTORY_MSG_177;CAM02 - 画像の輝度
+HISTORY_MSG_178;CAM02 - 観視の輝度
+HISTORY_MSG_179;CAM02 - ホワイトポイントモデル
HISTORY_MSG_180;CAM02 - 明度 (J)
HISTORY_MSG_181;CAM02 - 色度 (C)
HISTORY_MSG_182;CAM02 - 自動 CAT02
HISTORY_MSG_183;CAM02 - コントラスト (J)
-HISTORY_MSG_184;CAM02 - 暗い周囲環境を伴う撮影環境
+HISTORY_MSG_184;CAM02 - 画像の周辺環境
HISTORY_MSG_185;CAM02 - 色域制御
HISTORY_MSG_186;CAM02 - アルゴリズム
HISTORY_MSG_187;CAM02 - レッドと肌色トーンを保護
@@ -455,8 +457,8 @@ HISTORY_MSG_195;CAM02 - トーンカーブ 1
HISTORY_MSG_196;CAM02 - トーンカーブ 2
HISTORY_MSG_197;CAM02 - カラー・カーブ
HISTORY_MSG_198;CAM02 - カラー・カーブ
-HISTORY_MSG_199;CAM02 - カーブでCIECAM02出力のヒストグラムを表示
-HISTORY_MSG_200;CAM02 - CIECAM02 Q でトーンマッピング
+HISTORY_MSG_199;CAM02 - 出力のヒストグラムを表示
+HISTORY_MSG_200;CAM02 - トーンマッピング
HISTORY_MSG_201;色差 レッド/グリーン
HISTORY_MSG_202;色差 ブルー/イエロー
HISTORY_MSG_203;ノイズ低減 - 方式
@@ -592,7 +594,7 @@ HISTORY_MSG_333;W- 残差 シャドウ
HISTORY_MSG_334;W- 残差 色度
HISTORY_MSG_335;W- 残差 ハイライト
HISTORY_MSG_336;W- 残差 ハイライトのしきい値
-HISTORY_MSG_337;W- 残差 青空の色相
+HISTORY_MSG_337;W- 残差 色相の目標/保護
HISTORY_MSG_338;W- ES 半径
HISTORY_MSG_339;W- ES 強さ
HISTORY_MSG_340;W- 強さ
@@ -667,7 +669,7 @@ HISTORY_MSG_408;レティネックス - 半径
HISTORY_MSG_409;レティネックス - コントラスト
HISTORY_MSG_410;レティネックス - 明るさ
HISTORY_MSG_411;レティネックス - 強さ
-HISTORY_MSG_412;レティネックス - ガウス暈しのグラデーション
+HISTORY_MSG_412;レティネックス - ガウスフィルタの勾配
HISTORY_MSG_413;レティネックス - 差異
HISTORY_MSG_414;レティネックス - ヒストグラム - Lab
HISTORY_MSG_415;レティネックス - 透過
@@ -685,8 +687,8 @@ HISTORY_MSG_426;レティネックス - 色相イコライザ
HISTORY_MSG_427;出力レンダリングの意図
HISTORY_MSG_428;モニターレンダリングの意図
HISTORY_MSG_429;レティネックス - 繰り返し
-HISTORY_MSG_430;レティネックス - 透過のグラデーション
-HISTORY_MSG_431;レティネックス - 強さのグラデーション
+HISTORY_MSG_430;レティネックス - 透過マップの勾配
+HISTORY_MSG_431;レティネックス - 強さの勾配
HISTORY_MSG_432;レティネックス - M - ハイライト
HISTORY_MSG_433;レティネックス - M - ハイライト TW
HISTORY_MSG_434;レティネックス - M - シャドウ
@@ -695,21 +697,37 @@ HISTORY_MSG_436;レティネックス - M - 半径
HISTORY_MSG_437;レティネックス - M - 方式
HISTORY_MSG_438;レティネックス - M - イコライザ
HISTORY_MSG_439;レティネックス - プロセス
-HISTORY_MSG_440;詳細レベルコントラスト - 適用
+HISTORY_MSG_440;詳細レベルコントラスト - 処理の順番
HISTORY_MSG_441;レティネックス - 透過率の増加
HISTORY_MSG_442;レティネックス - スケール
HISTORY_MSG_443;出力のブラックポイント補正
HISTORY_MSG_444;WB - 色温度のバイアス
HISTORY_MSG_445;Raw サブイメージ
+HISTORY_MSG_446;EvPixelShiftMotion
+HISTORY_MSG_447;EvPixelShiftMotionCorrection
+HISTORY_MSG_448;EvPixelShiftStddevFactorGreen
HISTORY_MSG_449;PS - ISOへの適合
+HISTORY_MSG_450;EvPixelShiftNreadIso
+HISTORY_MSG_451;EvPixelShiftPrnu
HISTORY_MSG_452;PS - モーションを表示
HISTORY_MSG_453;PS - マスクだけを表示
+HISTORY_MSG_454;EvPixelShiftAutomatic
+HISTORY_MSG_455;EvPixelShiftNonGreenHorizontal
+HISTORY_MSG_456;EvPixelShiftNonGreenVertical
HISTORY_MSG_457;PS - レッド/ブルーを確認
+HISTORY_MSG_458;EvPixelShiftStddevFactorRed
+HISTORY_MSG_459;EvPixelShiftStddevFactorBlue
+HISTORY_MSG_460;EvPixelShiftGreenAmaze
+HISTORY_MSG_461;EvPixelShiftNonGreenAmaze
HISTORY_MSG_462;PS - グリーンを確認
+HISTORY_MSG_463;EvPixelShiftRedBlueWeight
HISTORY_MSG_464;PS - モーションマスクをぼかす
HISTORY_MSG_465;PS - ぼかしの半径
+HISTORY_MSG_466;EvPixelShiftSum
+HISTORY_MSG_467;EvPixelShiftExp0
HISTORY_MSG_468;PS - 穴を埋める
HISTORY_MSG_469;PS - メディアン
+HISTORY_MSG_470;EvPixelShiftMedian3
HISTORY_MSG_471;PS - 振れの補正
HISTORY_MSG_472;PS - 境界を滑らかにする
HISTORY_MSG_473;PS - LMMSEを使う
@@ -732,8 +750,434 @@ HISTORY_MSG_489;DRC - CbDL
HISTORY_MSG_490;DRC - 量
HISTORY_MSG_491;ホワイトバランス
HISTORY_MSG_492;RGBカーブ
-HISTORY_MSG_493;L*a*b*調整
+HISTORY_MSG_493;ローカル調整
HISTORY_MSG_494;キャプチャーシャープニング
+HISTORY_MSG_496;ローカル スポット 削除
+HISTORY_MSG_497;ローカル スポット 選択
+HISTORY_MSG_498;ローカル スポット 名前
+HISTORY_MSG_499;ローカル スポット 表示
+HISTORY_MSG_500;ローカル スポット 形状
+HISTORY_MSG_501;ローカル スポット 方法
+HISTORY_MSG_502;ローカル スポット 形状の方式
+HISTORY_MSG_503;ローカル スポット 右の垂直線
+HISTORY_MSG_504;ローカル スポット 左の垂直線
+HISTORY_MSG_505;ローカル スポット 下の水平線
+HISTORY_MSG_506;ローカル スポット 上の水平線
+HISTORY_MSG_507;ローカル スポット 中心
+HISTORY_MSG_508;ローカル スポット 大きさ
+HISTORY_MSG_509;ローカル スポット 質の種類
+HISTORY_MSG_510;ローカル スポット 境界
+HISTORY_MSG_511;ローカル スポット しきい値
+HISTORY_MSG_512;ローカル スポット ΔEの減衰
+HISTORY_MSG_513;ローカル スポット スコープ
+HISTORY_MSG_514;ローカル スポット 構造
+HISTORY_MSG_515;ローカル調整
+HISTORY_MSG_516;ローカル - 色と明るさ
+HISTORY_MSG_517;ローカル - 強力を有効にする
+HISTORY_MSG_518;ローカル - 明るさ
+HISTORY_MSG_519;ローカル - コントラスト
+HISTORY_MSG_520;ローカル - 色度
+HISTORY_MSG_521;ローカル - スコープ
+HISTORY_MSG_522;ローカル - カーブの方式
+HISTORY_MSG_523;ローカル - LL カーブ
+HISTORY_MSG_524;ローカル - CC カーブ
+HISTORY_MSG_525;ローカル - LH カーブ
+HISTORY_MSG_526;ローカル - H カーブ
+HISTORY_MSG_527;ローカル - 反対色
+HISTORY_MSG_528;ローカル - 露光補正
+HISTORY_MSG_529;ローカル - Exp 露光量補正
+HISTORY_MSG_530;ローカル - Exp ハイライト圧縮
+HISTORY_MSG_531;ローカル - Exp ハイライト圧縮のしきい値
+HISTORY_MSG_532;ローカル - Exp 黒レベル
+HISTORY_MSG_533;ローカル - Exp 黒レベルの圧縮
+HISTORY_MSG_534;ローカル - ウォームとクール
+HISTORY_MSG_535;ローカル - Exp スコープ
+HISTORY_MSG_536;ローカル - Exp コントラストカーブ
+HISTORY_MSG_537;ローカル - 自然な彩度
+HISTORY_MSG_538;ローカル - Vib 純色
+HISTORY_MSG_539;ローカル - Vib パステル
+HISTORY_MSG_540;ローカル - Vib しきい値
+HISTORY_MSG_541;ローカル - Vib 肌色の保護
+HISTORY_MSG_542;ローカル - Vib 色ずれの回避
+HISTORY_MSG_543;ローカル - Vib リンク
+HISTORY_MSG_544;ローカル - Vib スコープ
+HISTORY_MSG_545;ローカル - Vib H カーブ
+HISTORY_MSG_546;ローカル - ぼかしとノイズ
+HISTORY_MSG_547;ローカル - 半径
+HISTORY_MSG_548;ローカル - ノイズ
+HISTORY_MSG_549;ローカル - ぼかしのスコープ
+HISTORY_MSG_550;ローカル - ぼかしの方式
+HISTORY_MSG_551;ローカル - ぼかし 輝度だけ
+HISTORY_MSG_552;ローカル - トーンマッピング
+HISTORY_MSG_553;ローカル - TM 強さ
+HISTORY_MSG_554;ローカル - TM ガンマ
+HISTORY_MSG_555;ローカル - TM エッジ停止
+HISTORY_MSG_556;ローカル - TM スケール
+HISTORY_MSG_557;ローカル - TM 再加重
+HISTORY_MSG_558;ローカル - TM スコープ
+HISTORY_MSG_559;ローカル - レティネックス
+HISTORY_MSG_560;ローカル - レティネックス 方式
+HISTORY_MSG_561;ローカル - レティネックス 強さ
+HISTORY_MSG_562;ローカル - レティネックス 色度
+HISTORY_MSG_563;ローカル - レティネックス 半径
+HISTORY_MSG_564;ローカル - レティネックス コントラスト
+HISTORY_MSG_565;ローカル - スコープ
+HISTORY_MSG_566;ローカル - レティネックス ゲインのカーブ
+HISTORY_MSG_567;ローカル - レティネックス 反対処理
+HISTORY_MSG_568;ローカル - シャープニング
+HISTORY_MSG_569;ローカル - Sh 半径
+HISTORY_MSG_570;ローカル - Sh 量
+HISTORY_MSG_571;ローカル - Sh 減衰
+HISTORY_MSG_572;ローカル - Sh 繰り返し
+HISTORY_MSG_573;ローカル - Sh スコープ
+HISTORY_MSG_574;ローカル - Sh 反対処理
+HISTORY_MSG_575;ローカル - 詳細レベルによるコントラスト調整
+HISTORY_MSG_576;ローカル - CbDL 複数のレベル
+HISTORY_MSG_577;ローカル - CbDL 色度
+HISTORY_MSG_578;ローカル - CbDL しきい値
+HISTORY_MSG_579;ローカル - CbDL スコープ
+HISTORY_MSG_580;ローカル - ノイズ除去
+HISTORY_MSG_581;ローカル - ノイズ除去 輝度 細かい1
+HISTORY_MSG_582;ローカル - ノイズ除去 輝度 祖い
+HISTORY_MSG_583;ローカル - ノイズ除去 細部の回復
+HISTORY_MSG_584;ローカル - ノイズ除去 イコライザ 白黒
+HISTORY_MSG_585;ローカル - ノイズ除去 色度 細かい
+HISTORY_MSG_586;ローカル - ノイズ除去 色度 粗い
+HISTORY_MSG_587;ローカル - ノイズ除去 色度の回復
+HISTORY_MSG_588;ローカル - ノイズ除去 イコライザ ブルー-レッド
+HISTORY_MSG_589;ローカル - ノイズ除去 平滑化フィルタ
+HISTORY_MSG_590;ローカル - ノイズ除去 スコープ
+HISTORY_MSG_591;ローカル - 色ずれの回避
+HISTORY_MSG_592;ローカル - Sh コントラスト
+HISTORY_MSG_593;ローカル - ローカルコントラスト
+HISTORY_MSG_594;ローカル - ローカルコントラスト 半径
+HISTORY_MSG_595;ローカル - ローカルコントラスト 量
+HISTORY_MSG_596;ローカル - ローカルコントラスト 暗さ
+HISTORY_MSG_597;ローカル - ローカルコントラスト 明るさ
+HISTORY_MSG_598;ローカル - ローカルコントラスト スコープ
+HISTORY_MSG_599;ローカル - レティネックス 霞除去
+HISTORY_MSG_600;ローカル - ソフトライト 有効
+HISTORY_MSG_601;ローカル - ソフトライト 強さ
+HISTORY_MSG_602;ローカル - ソフトライト スコープ
+HISTORY_MSG_603;ローカル - Sh ぼかしの半径
+HISTORY_MSG_605;ローカル - 色と明るさの変更
+HISTORY_MSG_606;ローカル - 露光の変更
+HISTORY_MSG_607;ローカル - 色と明るさ マスク C
+HISTORY_MSG_608;ローカル - 色と明るさ マスク L
+HISTORY_MSG_609;ローカル - 露光補正 マスク C
+HISTORY_MSG_610;ローカル - 露光補正 マスク L
+HISTORY_MSG_611;ローカル - 色と明るさ マスク H
+HISTORY_MSG_612;ローカル - 色と明るさ 構造
+HISTORY_MSG_613;ローカル - 露光補正 構造
+HISTORY_MSG_614;ローカル - 露光補正 マスク H
+HISTORY_MSG_615;ローカル - 色と明るさ ブレンド
+HISTORY_MSG_616;ローカル - 露光補正 ブレンド
+HISTORY_MSG_617;ローカル - 露光補正 ぼかし
+HISTORY_MSG_618;ローカル - 色と明るさ マスクを使う
+HISTORY_MSG_619;ローカル - 露光補正 マスクを使う
+HISTORY_MSG_620;ローカル - 色と明るさ ぼかし
+HISTORY_MSG_621;ローカル - 露光補正 反対処理
+HISTORY_MSG_622;ローカル - 構造の除外
+HISTORY_MSG_623;ローカル - 露光補正 色の補間
+HISTORY_MSG_624;ローカル - 色と明るさ 補正グリッド
+HISTORY_MSG_625;ローカル - 色と明るさ 補正の強さ
+HISTORY_MSG_626;ローカル - 色と明るさ 補正の方式
+HISTORY_MSG_627;ローカル - シャドウ/ハイライト
+HISTORY_MSG_628;ローカル - SH ハイライト
+HISTORY_MSG_629;ローカル - SH ハイライトトーンの幅
+HISTORY_MSG_630;ローカル - SH シャドウ
+HISTORY_MSG_631;ローカル - SH シャドウトーンの幅
+HISTORY_MSG_632;ローカル - SH 半径
+HISTORY_MSG_633;ローカル - SH スコープ
+HISTORY_MSG_634;ローカル - 色と明るさ 半径
+HISTORY_MSG_635;ローカル - 露光補正 半径
+HISTORY_MSG_636;ローカル - 追加された機能
+HISTORY_MSG_637;ローカル - SH マスク C
+HISTORY_MSG_638;ローカル - SH マスク L
+HISTORY_MSG_639;ローカル - SH マスク H
+HISTORY_MSG_640;ローカル - SH ブレンド
+HISTORY_MSG_641;ローカル - SH マスクを使用
+HISTORY_MSG_642;ローカル - SH 半径
+HISTORY_MSG_643;ローカル - SH ぼかし
+HISTORY_MSG_644;ローカル - SH 反対処理
+HISTORY_MSG_645;ローカル - 色差のバランス ab-L
+HISTORY_MSG_646;ローカル - 露光補正 色度のマスク
+HISTORY_MSG_647;ローカル - 露光補正 ガンマのマスク
+HISTORY_MSG_648;ローカル - 露光補正 スロープのマスク
+HISTORY_MSG_649;ローカル - 露光補正 ソフトな半径
+HISTORY_MSG_650;ローカル - 色と明るさ 色度のマスク
+HISTORY_MSG_651;ローカル - 色と明るさ ガンマのマスク
+HISTORY_MSG_652;ローカル - 色と明るさ スロープのマスク
+HISTORY_MSG_653;ローカル - SH 色度のマスク
+HISTORY_MSG_654;ローカル - SH ガンマのマスク
+HISTORY_MSG_655;ローカル - SH スロープのマスク
+HISTORY_MSG_656;ローカル - 色と明るさ ソフトな半径
+HISTORY_MSG_657;ローカル - レティネックス アーティファクトの軽減
+HISTORY_MSG_658;ローカル - CbDL ソフトな半径
+HISTORY_MSG_659;ローカル スポット 境界値の減衰
+HISTORY_MSG_660;ローカル - CbDL 明瞭
+HISTORY_MSG_661;ローカル - CbDL 残差のコントラスト
+HISTORY_MSG_662;ローカル - deNoise 輝度 細かい0
+HISTORY_MSG_663;ローカル - deNoise 輝度 細かい2
+HISTORY_MSG_664;ローカル - CbDL ぼかし
+HISTORY_MSG_665;ローカル - CbDL ブレンドのマスク
+HISTORY_MSG_666;ローカル - CbDL 半径のマスク
+HISTORY_MSG_667;ローカル - CbDL 色度のマスク
+HISTORY_MSG_668;ローカル - CbDL ガンマのマスク
+HISTORY_MSG_669;ローカル - CbDL スロープのマスク
+HISTORY_MSG_670;ローカル - CbDL マスク C
+HISTORY_MSG_671;ローカル - CbDL マスク L
+HISTORY_MSG_672;ローカル - CbDL マスク CL
+HISTORY_MSG_673;ローカル - CbDL マスクを使う
+HISTORY_MSG_674;ローカル - 削除された機能
+HISTORY_MSG_675;ローカル - TM ソフトな半径
+HISTORY_MSG_676;ローカル スポット 境界の差異
+HISTORY_MSG_677;ローカル - TM 量
+HISTORY_MSG_678;ローカル - TM 彩度
+HISTORY_MSG_679;ローカル - レティネックス マスク C
+HISTORY_MSG_680;ローカル - レティネックス マスク L
+HISTORY_MSG_681;ローカル - レティネックス マスク CL
+HISTORY_MSG_682;ローカル - レティネックス マスク
+HISTORY_MSG_683;ローカル - レティネックス ブレンドのマスク
+HISTORY_MSG_684;ローカル - レティネックス 半径のマスク
+HISTORY_MSG_685;ローカル - レティネックス 色度のマスク
+HISTORY_MSG_686;ローカル - レティネックス ガンマのマスク
+HISTORY_MSG_687;ローカル - レティネックス スロープのマスク
+HISTORY_MSG_688;ローカル - 削除された機能
+HISTORY_MSG_689;ローカル - レティネックス 透過マップのマスク
+HISTORY_MSG_690;ローカル - レティネックス スケール
+HISTORY_MSG_691;ローカル - レティネックス 暗さ
+HISTORY_MSG_692;ローカル - レティネックス 明るさ
+HISTORY_MSG_693;ローカル - レティネックス しきい値
+HISTORY_MSG_694;ローカル - レティネックス ラプラシアンのしきい値
+HISTORY_MSG_695;ローカル - ソフトの方式
+HISTORY_MSG_696;ローカル - レティネックス 標準化
+HISTORY_MSG_697;ローカル - TM 標準化
+HISTORY_MSG_698;ローカル - ローカルコントラスト 高速フーリエ変換
+HISTORY_MSG_699;ローカル - レティネックス 高速フーリエ変換
+HISTORY_MSG_701;ローカル - Exp シャドウ
+HISTORY_MSG_702;ローカル - Exp 方式
+HISTORY_MSG_703;ローカル - Exp ラプラシアンのしきい値
+HISTORY_MSG_704;ローカル - Exp PDEのバランス
+HISTORY_MSG_705;ローカル - Exp 線形
+HISTORY_MSG_706;ローカル - TM マスク C
+HISTORY_MSG_707;ローカル - TM マスク L
+HISTORY_MSG_708;ローカル - TM マスク CL
+HISTORY_MSG_709;ローカル - TM マスク マスク
+HISTORY_MSG_710;ローカル - TM ブレンドのマスク
+HISTORY_MSG_711;ローカル - TM 半径のマスク
+HISTORY_MSG_712;ローカル - TM 色度のマスク
+HISTORY_MSG_713;ローカル - TM ガンマのマスク
+HISTORY_MSG_714;ローカル - TM スロープのマスク
+HISTORY_MSG_716;ローカル - ローカル 方式
+HISTORY_MSG_717;ローカル - ローカルコントラスト
+HISTORY_MSG_718;ローカル - ローカルコントラストのレベル
+HISTORY_MSG_719;ローカル - ローカルコントラスト 残差L
+HISTORY_MSG_720;ローカル - ぼかし マスク C
+HISTORY_MSG_721;ローカル - ぼかし マスク L
+HISTORY_MSG_722;ローカル - ぼかし マスク CL
+HISTORY_MSG_723;ローカル - ぼかし マスクを使う
+HISTORY_MSG_725;ローカル - ぼかし ブレンドのマスク
+HISTORY_MSG_726;ローカル - ぼかし 半径のマスク
+HISTORY_MSG_727;ローカル - ぼかし 色度のマスク
+HISTORY_MSG_728;ローカル - ぼかし ガンマのマスク
+HISTORY_MSG_729;ローカル - ぼかし スロープのマスク
+HISTORY_MSG_730;ローカル - ぼかしの方式
+HISTORY_MSG_731;ローカル - メディアンの方式
+HISTORY_MSG_732;ローカル - メディアン 繰り返し
+HISTORY_MSG_733;ローカル - ソフトな半径
+HISTORY_MSG_734;ローカル - ディテール
+HISTORY_MSG_738;ローカル - ローカルコントラスト Lを統合
+HISTORY_MSG_739;ローカル - ローカルコントラスト ソフトな半径
+HISTORY_MSG_740;ローカル - ローカルコントラスト Cを統合
+HISTORY_MSG_741;ローカル - ローカルコントラスト 残差C
+HISTORY_MSG_742;ローカル - Exp ラプラシアンのガンマ
+HISTORY_MSG_743;ローカル - Exp Fattal 量
+HISTORY_MSG_744;ローカル - Exp Fattal ディテール
+HISTORY_MSG_745;ローカル - Exp Fattal オフセット
+HISTORY_MSG_746;ローカル - Exp Fattal シグマ
+HISTORY_MSG_747;ローカル 作成されたスポット
+HISTORY_MSG_748;ローカル - Exp ノイズ除去
+HISTORY_MSG_749;ローカル - Reti 深度
+HISTORY_MSG_750;ローカル - Reti モード 対数 - 線形
+HISTORY_MSG_751;ローカル - Reti 霞除去 輝度だけ
+HISTORY_MSG_752;ローカル - Reti オフセット
+HISTORY_MSG_753;ローカル - Reti 透過マップ
+HISTORY_MSG_754;ローカル - Reti クリップ
+HISTORY_MSG_755;ローカル - TM マスクを使う
+HISTORY_MSG_756;ローカル - Exp 露光補正マスクのアルゴリズムを使う
+HISTORY_MSG_757;ローカル - Exp ラプラシアンマスク
+HISTORY_MSG_758;ローカル - Reti ラプラシアンマスク
+HISTORY_MSG_759;ローカル - Exp ラプラシアンマスク
+HISTORY_MSG_760;ローカル - Color ラプラシアンマスク
+HISTORY_MSG_761;ローカル - SH ラプラシアンマスク
+HISTORY_MSG_762;ローカル - cbdl ラプラシアンマスク
+HISTORY_MSG_763;ローカル - Blur ラプラシアンマスク
+HISTORY_MSG_764;ローカル - Solve PDE ラプラシアンマスク
+HISTORY_MSG_765;ローカル - deNoise ディテールのしきい値
+HISTORY_MSG_766;ローカル - Blur 高速フーリエ変換
+HISTORY_MSG_767;ローカル - Grain ISO
+HISTORY_MSG_768;ローカル - Grain 強さ
+HISTORY_MSG_769;ローカル - Grain スケール
+HISTORY_MSG_770;ローカル - Color コントラストカーブのマスク
+HISTORY_MSG_771;ローカル - Exp コントラストカーブのマスク
+HISTORY_MSG_772;ローカル - SH コントラストカーブのマスク
+HISTORY_MSG_773;ローカル - TM コントラストカーブのマスク
+HISTORY_MSG_774;ローカル - Reti コントラストカーブのマスク
+HISTORY_MSG_775;ローカル - CBDL コントラストカーブのマスク
+HISTORY_MSG_776;ローカル - Blur Denoise コントラストカーブのマスク
+HISTORY_MSG_777;ローカル - Blur ローカルコントラストカーブのマスク
+HISTORY_MSG_778;ローカル - ハイライトのマスク
+HISTORY_MSG_779;ローカル - 色と明るさ ローカルコントラストカーブのマスク
+HISTORY_MSG_780;ローカル - 色と明るさ シャドウのマスク
+HISTORY_MSG_781;ローカル - コントラスト ウェーブレットのレベルのマスク
+HISTORY_MSG_782;ローカル - Blur Denoise ウェーブレットのレベルのマスク
+HISTORY_MSG_783;ローカル - 色と明るさ ウェーブレットのレベル
+HISTORY_MSG_784;ローカル - ΔEのマスク
+HISTORY_MSG_785;ローカル - ΔEのスコープのマスク
+HISTORY_MSG_786;ローカル - SH 方式
+HISTORY_MSG_787;ローカル - イコライザの乗数
+HISTORY_MSG_788;ローカル - イコライザのディテール
+HISTORY_MSG_789;ローカル - SH マスクの量
+HISTORY_MSG_790;ローカル - SH マスクのアンカー
+HISTORY_MSG_791;ローカル - マスク ショートLカーブ
+HISTORY_MSG_792;ローカル - マスク 背景輝度
+HISTORY_MSG_793;ローカル - SH TRCのガンマ
+HISTORY_MSG_794;ローカル - SH TRCのスロープ
+HISTORY_MSG_795;ローカル - マスク 復元したイメージの保存
+HISTORY_MSG_796;ローカル - 参考値の繰り返し
+HISTORY_MSG_797;ローカル - オリジナルとの融合方式
+HISTORY_MSG_798;ローカル - 不透明度
+HISTORY_MSG_799;ローカル - Color RGB トーンカーブ
+HISTORY_MSG_800;ローカル - Color トーンカーブの方式
+HISTORY_MSG_801;ローカル - Color 特殊なトーンカーブ
+HISTORY_MSG_802;ローカル - コントラストしきい値
+HISTORY_MSG_803;ローカル - 色と明るさ 融合
+HISTORY_MSG_804;ローカル - 色と明るさ マスクの構造
+HISTORY_MSG_805;ローカル - ぼかしとノイズ マスクの構造
+HISTORY_MSG_806;ローカル - 色と明るさ 機能としてのマスクの構造
+HISTORY_MSG_807;ローカル - ぼかしとノイズ 機能としてのマスクの構造
+HISTORY_MSG_808;ローカル - 色と明るさ マスクカーブ H(H)
+HISTORY_MSG_809;ローカル - Vib カーブのマスク C(C)
+HISTORY_MSG_810;ローカル - Vib カーブのマスク L(L)
+HISTORY_MSG_811;ローカル - Vib カーブのマスク LC(H)
+HISTORY_MSG_813;ローカル - 自然な彩度 マスクを使う
+HISTORY_MSG_814;ローカル - Vib ブレンドのマスク
+HISTORY_MSG_815;ローカル - Vib 半径のマスク
+HISTORY_MSG_816;ローカル - Vib 色度のマスク
+HISTORY_MSG_817;ローカル - Vib ガンマのマスク
+HISTORY_MSG_818;ローカル - Vib 勾配のマスク
+HISTORY_MSG_819;ローカル - Vib ラプラシアンのマスク
+HISTORY_MSG_820;ローカル - Vib コントラストカーブのマスク
+HISTORY_MSG_821;ローカル - 色と明るさ 背景のグリッド
+HISTORY_MSG_822;ローカル - 色と明るさ 背景の融合
+HISTORY_MSG_823;ローカル - 色と明るさ 背景の融合 輝度だけ
+HISTORY_MSG_824;ローカル - Exp 減光マスクの強さ
+HISTORY_MSG_825;ローカル - Exp 減光マスクの角度
+HISTORY_MSG_826;ローカル - Exp 減光の強さ
+HISTORY_MSG_827;ローカル - Exp 減光の角度
+HISTORY_MSG_828;ローカル - SH 階調 強さ
+HISTORY_MSG_829;ローカル - SH 階調 角度
+HISTORY_MSG_830;ローカル - 色と明るさ 階調 Lの強さ
+HISTORY_MSG_831;ローカル - 色と明るさ 階調 角度
+HISTORY_MSG_832;ローカル - 色と明るさ 階調 Cの強さ
+HISTORY_MSG_833;ローカル - 減光のフェザー処理
+HISTORY_MSG_834;ローカル - 色と明るさ 減光の強さ H
+HISTORY_MSG_835;ローカル - Vib 諧調 Lの強さ
+HISTORY_MSG_836;ローカル - Vib 階調 角度
+HISTORY_MSG_837;ローカル - Vib 階調 Cの強さ
+HISTORY_MSG_838;ローカル - Vib 階調 Hの強さ
+HISTORY_MSG_839;ローカル - ソフトウェアの難易度
+HISTORY_MSG_840;ローカル - CL カーブ
+HISTORY_MSG_841;ローカル - LC カーブ
+HISTORY_MSG_842;ローカル - マスクぼかしのコントラストしきい値
+HISTORY_MSG_843;ローカル - マスクぼかしの半径
+HISTORY_MSG_844;ローカル - 色と明るさ マスク FTTW
+HISTORY_MSG_845;ローカル - 対数符号化
+HISTORY_MSG_846;ローカル - 符号化 自動
+HISTORY_MSG_847;ローカル - グレーポイントの源泉
+HISTORY_MSG_848;ローカル - グレーポイントの源泉 自動
+HISTORY_MSG_849;ローカル - グレーポイントの自動選択
+HISTORY_MSG_850;ローカル - ブラックEv
+HISTORY_MSG_851;ローカル - ホワイトEv
+HISTORY_MSG_852;ローカル - グレーポイントの目標
+HISTORY_MSG_853;ローカル - ローカルコントラスト
+HISTORY_MSG_854;ローカル - 対数符号化のスコープ
+HISTORY_MSG_855;ローカル - 画像全体
+HISTORY_MSG_856;ローカル - 対数の基数
+HISTORY_MSG_857;ローカル - Contrast 残差のぼかし
+HISTORY_MSG_858;ローカル - Contrast 輝度だけ
+HISTORY_MSG_859;ローカル - Contrast 最大値 ぼかしレベル
+HISTORY_MSG_860;ローカル - Contrast カーブ ぼかすレベル
+HISTORY_MSG_861;ローカル - Contrast カーブ コントラストレベル
+HISTORY_MSG_862;ローカル - Contrast シグマ 輝度
+HISTORY_MSG_863;ローカル - Contrast 元画像との融合
+HISTORY_MSG_864;ローカル - Contrast ディテール
+HISTORY_MSG_865;ローカル - Contrast アンカー
+HISTORY_MSG_866;ローカル - Contrast カーブの圧縮
+HISTORY_MSG_867;ローカル - Contrast 残差の量
+HISTORY_MSG_868;ローカル - ΔEのバランス C-H
+HISTORY_MSG_869;ローカル - ノイズ除去カーブ 輝度
+HISTORY_MSG_870;ローカル - LC カーブのマスク LC(H)
+HISTORY_MSG_871;ローカル - LC カーブのマスク C(C)
+HISTORY_MSG_872;ローカル - LC カーブのマスク L(L)
+HISTORY_MSG_873;ローカル - LC マスク 有効
+HISTORY_MSG_875;ローカル - LC マスク ブレンド
+HISTORY_MSG_876;ローカル - LC マスク 半径
+HISTORY_MSG_877;ローカル - LC マスク 色度
+HISTORY_MSG_878;ローカル - LC カーブのマスク コントラスト
+HISTORY_MSG_879;ローカル - LC 色度 レベル
+HISTORY_MSG_880;ローカル - LC 色度のぼかし レベル
+HISTORY_MSG_881;ローカル - Contrast オフセット 輝度
+HISTORY_MSG_882;ローカル - Contrast ぼかし
+HISTORY_MSG_883;ローカル - Contrast レベルごと
+HISTORY_MSG_884;ローカル - Contrast ダイナミックレンジ ラプラシアン
+HISTORY_MSG_885;ローカル - Contrast ダイナミックレンジ ウェーブレット
+HISTORY_MSG_886;ローカル - Contrast ウェーブレット カーブの圧縮
+HISTORY_MSG_887;ローカル - Contrast ウェーブレット 残差の圧縮
+HISTORY_MSG_888;ローカル - Contrast ウェーブレット バランスのしきい値
+HISTORY_MSG_889;ローカル - Contrast ウェーブレット 階調の強さ
+HISTORY_MSG_890;ローカル - Contrast ウェーブレット 階調の角度
+HISTORY_MSG_891;ローカル - Contrast ウェーブレット 階調フィルタ
+HISTORY_MSG_892;ローカル - 対数符号化 階調の強さ
+HISTORY_MSG_893;ローカル - 対数符号化 階調の角度
+HISTORY_MSG_894;ローカル - 色と明るさ 色差のプレビュー
+HISTORY_MSG_897;ローカル - Contrast ウェーブレット ES 強さ
+HISTORY_MSG_898;ローカル - Contrast ウェーブレット ES 半径
+HISTORY_MSG_899;ローカル - Contrast ウェーブレット ES ディテール
+HISTORY_MSG_900;ローカル - Contrast ウェーブレット ES 勾配
+HISTORY_MSG_901;ローカル - Contrast ウェーブレット ES しきい値 低
+HISTORY_MSG_902;ローカル - Contrast ウェーブレット ES しきい値 高
+HISTORY_MSG_903;ローカル - Contrast ウェーブレット ES ローカルコントラスト
+HISTORY_MSG_904;ローカル - Contrast ウェーブレット ES 最初のレベル
+HISTORY_MSG_905;ローカル - Contrast ウェーブレット エッジシャープネス
+HISTORY_MSG_906;ローカル - Contrast ウェーブレット ES 感度
+HISTORY_MSG_907;ローカル - Contrast ウェーブレット ES 増幅
+HISTORY_MSG_908;ローカル - Contrast ウェーブレット ES 隣接
+HISTORY_MSG_909;ローカル - Contrast ウェーブレット ES 表示
+HISTORY_MSG_910;ローカル - ウェーブレット エッジ検出の効果
+HISTORY_MSG_911;ローカル - ぼかし 色度 輝度
+HISTORY_MSG_912;ローカル - ガイド付きフィルターの強さのぼかし
+HISTORY_MSG_913;ローカル - Contrast Wavelet Sigma DR
+HISTORY_MSG_914;ローカル - ウェーブレットのぼかし シグマ BL
+HISTORY_MSG_915;ローカル - ウェーブレットのエッジ シグマ ED
+HISTORY_MSG_916;ローカル - ウェーブレットの残差画像 シャドウ
+HISTORY_MSG_917;ローカル - ウェーブレットの残差画像 シャドウのしきい値
+HISTORY_MSG_918;ローカル - ウェーブレットの残差画像 ハイライト
+HISTORY_MSG_919;ローカル - ウェーブレットの残差画像 ハイライトのしきい値
+HISTORY_MSG_920;ローカル - ウェーブレット シグマ LC
+HISTORY_MSG_921;ローカル - ウェーブレット 階調のシグマ LC2
+HISTORY_MSG_922;ローカル - 白黒での変更
+HISTORY_MSG_923;ローカル - 機能の複雑度モード
+HISTORY_MSG_924;ローカル - 機能の複雑度モード
+HISTORY_MSG_925;Local - カラー機能のスコープ
+HISTORY_MSG_926;Local - マスクのタイプを表示
+HISTORY_MSG_927;Local - シャドウマスク
+HISTORY_MSG_BLSHAPE;詳細レベルによるぼかし
+HISTORY_MSG_BLURCWAV;色度のぼかし
+HISTORY_MSG_BLURWAV;輝度のぼかし
+HISTORY_MSG_BLUWAV;減衰応答
+HISTORY_MSG_CAT02PRESET;Cat02 自動プリセット
HISTORY_MSG_CLAMPOOG;色域外の色を切り取る
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - カラー補正
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - 色の補正
@@ -756,7 +1200,9 @@ HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;霞除去 - 深度マップの表示
HISTORY_MSG_DEHAZE_STRENGTH;霞除去 - 強さ
HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;デュアルデモザイク - 自動しきい値
HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - コントラストのしきい値
+HISTORY_MSG_EDGEFFECT;エッジの効果調整
HISTORY_MSG_FILMNEGATIVE_ENABLED;ネガフィルム
+HISTORY_MSG_FILMNEGATIVE_FILMBASE;フィルムのベースカラー
HISTORY_MSG_FILMNEGATIVE_VALUES;ネガフィルムの値
HISTORY_MSG_HISTMATCHING;トーンカーブの自動調節
HISTORY_MSG_ICM_OUTPUT_PRIMARIES;出力 - プライマリ
@@ -765,6 +1211,7 @@ HISTORY_MSG_ICM_OUTPUT_TYPE;出力 - タイプ
HISTORY_MSG_ICM_WORKING_GAMMA;作業色空間 - ガンマ
HISTORY_MSG_ICM_WORKING_SLOPE;作業色空間 - 勾配
HISTORY_MSG_ICM_WORKING_TRC_METHOD;作業色空間 - TRCの方式
+HISTORY_MSG_ILLUM;輝度
HISTORY_MSG_LOCALCONTRAST_AMOUNT;ローカルコントラスト - 量
HISTORY_MSG_LOCALCONTRAST_DARKNESS;ローカルコントラスト - 暗い部分
HISTORY_MSG_LOCALCONTRAST_ENABLED;ローカルコントラスト
@@ -779,10 +1226,20 @@ HISTORY_MSG_PDSHARPEN_CONTRAST;CS - コントラストのしきい値
HISTORY_MSG_PDSHARPEN_ITERATIONS;CS - 繰り返し
HISTORY_MSG_PDSHARPEN_RADIUS;CS - シグマ
HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;CS - 周辺のシグマを増やす
+HISTORY_MSG_PERSP_CAM_ANGLE;パースペクティブ - カメラ
+HISTORY_MSG_PERSP_CAM_FL;パースペクティブ - カメラ
+HISTORY_MSG_PERSP_CAM_SHIFT;パースペクティブ - カメラ
+HISTORY_MSG_PERSP_METHOD;パースペクティブ - 方法
+HISTORY_MSG_PERSP_PROJ_ANGLE;パースペクティブ - 回復
+HISTORY_MSG_PERSP_PROJ_ROTATE;パースペクティブ - PCA 回転
+HISTORY_MSG_PERSP_PROJ_SHIFT;パースペクティブ - PCA
HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - 振れに対するデモザイクの方式
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;ラインノイズフィルタの方向
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ
+HISTORY_MSG_PREPROCWB_MODE;ホワイトバランスモードの前処理
+HISTORY_MSG_PROTAB;保護
HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - コントラストのしきい値
+HISTORY_MSG_RANGEAB;abの範囲
HISTORY_MSG_RAWCACORR_AUTOIT;Rawの色収差補正 - 繰り返し
HISTORY_MSG_RAWCACORR_COLORSHIFT;Rawの色収差補正 - 色ずれを回避
HISTORY_MSG_RAW_BORDER;Rawの境界
@@ -790,9 +1247,35 @@ HISTORY_MSG_RESIZE_ALLOWUPSCALING;リサイズ - アップスケーリングを
HISTORY_MSG_SHARPENING_BLUR;シャープニング - ぼかしの半径
HISTORY_MSG_SHARPENING_CONTRAST;シャープニング - コントラストのしきい値
HISTORY_MSG_SH_COLORSPACE;S/H - 色空間
+HISTORY_MSG_SIGMACOL;色度の効果調整
+HISTORY_MSG_SIGMADIR;Dirの効果調整
+HISTORY_MSG_SIGMAFIN;最終的なコントラストの効果調整
+HISTORY_MSG_SIGMATON;トーンの効果調整
HISTORY_MSG_SOFTLIGHT_ENABLED;ソフトライト
HISTORY_MSG_SOFTLIGHT_STRENGTH;ソフトライト - 強さ
+HISTORY_MSG_TEMPOUT;CAM02 自動色温度設定
+HISTORY_MSG_THRESWAV;バランスのしきい値
HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - アンカー
+HISTORY_MSG_TRANS_Method;ジオメトリ - 方式
+HISTORY_MSG_WAVBALCHROM;イコライザ 色度
+HISTORY_MSG_WAVBALLUM;イコライザ 輝度
+HISTORY_MSG_WAVBL;レベルのぼかし
+HISTORY_MSG_WAVCHROMCO;粗い部分の色度
+HISTORY_MSG_WAVCHROMFI;細部の色度
+HISTORY_MSG_WAVCLARI;明瞭
+HISTORY_MSG_WAVEDGS;エッジ停止
+HISTORY_MSG_WAVLOWTHR;最小コントラストのしきい値
+HISTORY_MSG_WAVMERGEC;色度の融合
+HISTORY_MSG_WAVMERGEL;輝度の融合
+HISTORY_MSG_WAVOFFSET;オフセット
+HISTORY_MSG_WAVOLDSH;古いアルゴリズムを使う
+HISTORY_MSG_WAVRADIUS;シャドウ/ハイライトの半径
+HISTORY_MSG_WAVSCALE;スケール
+HISTORY_MSG_WAVSHOWMASK;ウェーブレットのマスクを表示
+HISTORY_MSG_WAVSIGMA;シグマ
+HISTORY_MSG_WAVSOFTRAD;明瞭のソフトな半径
+HISTORY_MSG_WAVSOFTRADEND;最終画像のソフトな半径
+HISTORY_MSG_WAVUSHAMET;明瞭の方式
HISTORY_NEWSNAPSHOT;追加
HISTORY_NEWSNAPSHOT_TOOLTIP;ショートカット: Alt-s
HISTORY_SNAPSHOT;スナップショット
@@ -880,7 +1363,6 @@ IPTCPANEL_TITLE;タイトル
IPTCPANEL_TITLEHINT;画像を短く表す言葉や撮影者名、或いは画像のタイトルでもよい
IPTCPANEL_TRANSREFERENCE;作業のID
IPTCPANEL_TRANSREFERENCEHINT;作業工程の管理やトラッキングのための画像の数字或いは識別
-LENSPROFILE_LENS_WARNING;注意:レンズプロファイルに関する切り抜きの因数がカメラの因数より大きいと、誤った結果になるかもしれません
MAIN_BUTTON_FULLSCREEN;フルスクリーン
MAIN_BUTTON_ICCPROFCREATOR;ICCプロファイルクリエーター
MAIN_BUTTON_NAVNEXT_TOOLTIP;エディタで開いている画像に対応する次の画像に移動します\nショートカット: Shift-F4\n\nファイルブラウザで選択したサムネイルに対応する次の画像に移動するには\nショートカット: F4
@@ -921,7 +1403,7 @@ MAIN_TAB_ADVANCED;高度な機能
MAIN_TAB_ADVANCED_TOOLTIP;ショートカット: Alt-a
MAIN_TAB_COLOR;カラー
MAIN_TAB_COLOR_TOOLTIP;ショートカット: Alt-c
-MAIN_TAB_DETAIL;CbDL
+MAIN_TAB_DETAIL;ディテール
MAIN_TAB_DETAIL_TOOLTIP;ショートカット: Alt-d
MAIN_TAB_DEVELOP;一括編集
MAIN_TAB_EXIF;Exif
@@ -933,6 +1415,8 @@ MAIN_TAB_FAVORITES_TOOLTIP;ショートカット: Alt-u
MAIN_TAB_FILTER;絞り込み
MAIN_TAB_INSPECT;カメラ出しJPEG
MAIN_TAB_IPTC;IPTC
+MAIN_TAB_LOCALLAB;ローカル調整
+MAIN_TAB_LOCALLAB_TOOLTIP;ショートカット Alt-o
MAIN_TAB_METADATA;メタデータ
MAIN_TAB_METADATA_TOOLTIP;ショートカット: Alt-m
MAIN_TAB_RAW;raw
@@ -1012,20 +1496,24 @@ PARTIALPASTE_GRADIENT;減光フィルター
PARTIALPASTE_HSVEQUALIZER;HSV イコライザ
PARTIALPASTE_ICMSETTINGS;ICM 設定
PARTIALPASTE_IMPULSEDENOISE;インパルス・ノイズ低減
-PARTIALPASTE_IPTCINFO;IPTC 情報
+PARTIALPASTE_IPTCINFO;IPTC
PARTIALPASTE_LABCURVE;L*a*b* 調整
-PARTIALPASTE_LENSGROUP;レンズ設定
+PARTIALPASTE_LENSGROUP;レンズ関係の設定
PARTIALPASTE_LENSPROFILE;レンズ補正プロファイル
PARTIALPASTE_LOCALCONTRAST;ローカルコントラスト
+PARTIALPASTE_LOCALLAB;ローカル調整
+PARTIALPASTE_LOCALLABGROUP;ローカル調整の設定
+PARTIALPASTE_LOCGROUP;ローカル
PARTIALPASTE_METADATA;メタデータモード
PARTIALPASTE_METAGROUP;メタデータ
PARTIALPASTE_PCVIGNETTE;ビネットフィルター
PARTIALPASTE_PERSPECTIVE;パースペクティブの補正
PARTIALPASTE_PREPROCESS_DEADPIXFILT;デッドピクセルフィルターを適用
PARTIALPASTE_PREPROCESS_GREENEQUIL;グリーン 平衡化
-PARTIALPASTE_PREPROCESS_HOTPIXFILT;ホットピクセルフィルターを適用
+PARTIALPASTE_PREPROCESS_HOTPIXFILT;ホットピクセルフィルター
PARTIALPASTE_PREPROCESS_LINEDENOISE;ラインノイズ フィルタ
PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF ラインフィルタ
+PARTIALPASTE_PREPROCWB;ホワイトバランスの前処理
PARTIALPASTE_PRSHARPENING;リサイズ後のシャープニング
PARTIALPASTE_RAWCACORR_AUTO;自動色収差補正
PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA 色ずれを回避
@@ -1049,7 +1537,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;シャドウ/ハイライト
PARTIALPASTE_SHARPENEDGE;エッジ
PARTIALPASTE_SHARPENING;シャープニング (USM/RL)
PARTIALPASTE_SHARPENMICRO;マイクロコントラスト
-PARTIALPASTE_SOFTLIGHT;ソフトな明るさ
+PARTIALPASTE_SOFTLIGHT;ソフトライト
PARTIALPASTE_TM_FATTAL;ダイナミックレンジ圧縮
PARTIALPASTE_VIBRANCE;自然な彩度
PARTIALPASTE_VIGNETTING;周辺光量補正
@@ -1090,6 +1578,9 @@ PREFERENCES_CLUTSCACHE;HaldCLUT cache
PREFERENCES_CLUTSCACHE_LABEL;cacheに入れるHaldCLUTの最大数
PREFERENCES_CLUTSDIR;HaldCLUTのディレクトリー
PREFERENCES_CMMBPC;ブラックポイントの補正
+PREFERENCES_COMPLEXITYLOC;ローカル調整のデフォルトの複雑度
+PREFERENCES_COMPLEXITY_EXP;エキスパート
+PREFERENCES_COMPLEXITY_NORM;通常
PREFERENCES_CROP;切り抜き画像の編集
PREFERENCES_CROP_AUTO_FIT;切り抜き画像を自動的に拡大します
PREFERENCES_CROP_GUIDES;切り抜き画像が編集されていない時はガイドを表示します
@@ -1155,7 +1646,7 @@ PREFERENCES_MENUGROUPLABEL;"カラーラベル"のグループ
PREFERENCES_MENUGROUPPROFILEOPERATIONS;"処理プロファイル操作"のグループ
PREFERENCES_MENUGROUPRANK;"ランキング"のグループ
PREFERENCES_MENUOPTIONS;メニューオプションの状況
-PREFERENCES_MONINTENT;デフォルトのモニターインテント
+PREFERENCES_MONINTENT;デフォルトのレンダリングの目標
PREFERENCES_MONITOR;モニター
PREFERENCES_MONPROFILE;デフォルトのモニタープロファイル
PREFERENCES_MONPROFILE_WARNOSX;MacのOSの制約により、サポート出来るのはsRGBだけです
@@ -1206,6 +1697,7 @@ PREFERENCES_SHOWBASICEXIF;基本Exif情報を表示
PREFERENCES_SHOWDATETIME;日付表示
PREFERENCES_SHOWEXPOSURECOMPENSATION;露光補正追加
PREFERENCES_SHOWFILMSTRIPTOOLBAR;画像スライドにツールバーを表示する
+PREFERENCES_SHOWTOOLTIP;ローカル調整の機能のヒントを表示
PREFERENCES_SHTHRESHOLD;シャドウ・クリッピング領域のしきい値
PREFERENCES_SINGLETAB;シングルタブモードモード
PREFERENCES_SINGLETABVERTAB;シングル編集タブモード, 垂直タブ
@@ -1413,7 +1905,7 @@ TP_COLORAPP_CHROMA_M_TOOLTIP;CIECAM02の鮮やかさは L*a*b*やRGBの鮮やか
TP_COLORAPP_CHROMA_S;彩度 (S)
TP_COLORAPP_CHROMA_S_TOOLTIP;CIECAM02の彩度は L*a*b*やRGBの彩度とは異なります
TP_COLORAPP_CHROMA_TOOLTIP;CIECAM02の色度は L*a*b*やRGBの色度とは異なります
-TP_COLORAPP_CIECAT_DEGREE;CAT02に適応
+TP_COLORAPP_CIECAT_DEGREE;CAT02
TP_COLORAPP_CONTRAST;コントラスト (J)
TP_COLORAPP_CONTRAST_Q;コントラスト (Q)
TP_COLORAPP_CONTRAST_Q_TOOLTIP;CIECAM02のコントラスト(明るさQ)スライダーは L*a*b*やRGBとは異なります
@@ -1424,17 +1916,27 @@ TP_COLORAPP_CURVEEDITOR2;トーンカーブ2
TP_COLORAPP_CURVEEDITOR2_TOOLTIP;2番目の露光トーンカーブも同じ使い方です
TP_COLORAPP_CURVEEDITOR3;カラーカーブ
TP_COLORAPP_CURVEEDITOR3_TOOLTIP;色度、彩度、鮮やかさのいずれかを調整します\n\nCIECAM02調整前の色度(L*a*b*)のヒストグラムを表示します\nチェックボックスの"カーブにCIECAM02出力のヒストグラムを表示" が有効の場合、CIECAM02調整後のC,sまたはMのヒストグラムを表示します\n\nC, sとMは、メインのヒストグラム・パネルには表示されません\n最終出力は、メインのヒストグラム・パネルを参照してください
-TP_COLORAPP_DATACIE;カーブにCIECAM02出力のヒストグラムを表示
+TP_COLORAPP_DATACIE;カーブでCIECAM02出力のヒストグラムを表示
TP_COLORAPP_DATACIE_TOOLTIP;有効の場合、CIECAM02カーブのヒストグラムは、JかQ、CIECAM02調整後のCかs、またはMの値/範囲の近似値を表示します\nこの選択はメイン・ヒストグラムパネルには影響を与えません\n\n無効の場合、CIECAM02カーブのヒストグラムは、CIECAM調整前のL*a*b*値を表示します
-TP_COLORAPP_FREE;任意の色温度+グリーン + CAT02 + [出力]
+TP_COLORAPP_FREE;任意の色温度と色偏差 + CAT02 + [出力]
TP_COLORAPP_GAMUT;色域制御 (L*a*b*)
-TP_COLORAPP_GAMUT_TOOLTIP;L*a*b*モードの色域制御を許可
+TP_COLORAPP_GAMUT_TOOLTIP;L*a*b*モードの色域制御を可能にします
TP_COLORAPP_HUE;色相 (h)
TP_COLORAPP_HUE_TOOLTIP;色相 (h) - 0° から 360°の角度
+TP_COLORAPP_IL41;D41
+TP_COLORAPP_IL50;D50
+TP_COLORAPP_IL55;D55
+TP_COLORAPP_IL60;D60
+TP_COLORAPP_IL65;D65
+TP_COLORAPP_IL75;D75
+TP_COLORAPP_ILA;白熱灯標準A 2856K
+TP_COLORAPP_ILFREE;フリー
+TP_COLORAPP_ILLUM;光源
+TP_COLORAPP_ILLUM_TOOLTIP;撮影条件に最も近い条件を選択します\n一般的にはD50 ですが、時間と緯度に応じて変えます
TP_COLORAPP_LABEL;CIE色の見えモデル2002
TP_COLORAPP_LABEL_CAM02;画像の調整
-TP_COLORAPP_LABEL_SCENE;撮影環境条件
-TP_COLORAPP_LABEL_VIEWING;観視条件
+TP_COLORAPP_LABEL_SCENE;撮影環境
+TP_COLORAPP_LABEL_VIEWING;観視環境
TP_COLORAPP_LIGHT;明度 (J)
TP_COLORAPP_LIGHT_TOOLTIP;CIECAM02の明度は L*a*b*やRGBの明度とは異なります
TP_COLORAPP_MEANLUMINANCE;中間輝度 (Yb%)
@@ -1442,6 +1944,8 @@ TP_COLORAPP_MODEL;ホワイトポイント・モデル
TP_COLORAPP_MODEL_TOOLTIP;WB [RT] + [出力]:\nRTのホワイトバランスは、撮影環境に使用されます。CIECAM02はD50の設定, 出力デバイスのホワイトバランスは「環境設定」の「カラーマネジメント」の設定\n\nWB [RT+CAT02] + [出力]:\nRTのホワイトバランス設定は、CAT02で使用され、出力デバイスのホワイトバランスは環境設定の値を使用します
TP_COLORAPP_NEUTRAL;リセット
TP_COLORAPP_NEUTRAL_TIP;全てのスライダーチェックボックスとカーブをデフォルトにリセットします
+TP_COLORAPP_PRESETCAT02;cat02の自動プリセット
+TP_COLORAPP_PRESETCAT02_TIP;これを有効にすると、スライダー、色温度、色偏差がCAT02自動に合わせて設定されます\n撮影環境の輝度は変えることが出来ます\n必要であれば、CAT02の観視環境を変更します\n必要に応じて観視環境の色温度、色偏差、を変更します
TP_COLORAPP_RSTPRO;レッドと肌色トーンを保護
TP_COLORAPP_RSTPRO_TOOLTIP;レッドと肌色トーンを保護はスライダーとカーブの両方に影響します
TP_COLORAPP_SURROUND;周囲環境
@@ -1458,6 +1962,8 @@ TP_COLORAPP_TCMODE_LABEL2;カーブ・モード2
TP_COLORAPP_TCMODE_LABEL3;カーブ・色度モード
TP_COLORAPP_TCMODE_LIGHTNESS;明度
TP_COLORAPP_TCMODE_SATUR;彩度
+TP_COLORAPP_TEMP2_TOOLTIP;シンメトリカルモードの場合は色温度 = White balance.\n色偏差は常に1.0\n\nA光源 色温度=2856\nD41 色温度=4100\nD50 色温度=5003\nD55 色温度=5503\nD60 色温度=6000\nD65 色温度=6504\nD75 色温度=7504
+TP_COLORAPP_TEMPOUT_TOOLTIP;色温度と色偏差を変えるために無効にします
TP_COLORAPP_TEMP_TOOLTIP;選択した光源に関し色偏差は常に1が使われます\n\n色温度=2856\nD50 色温度=5003\nD55 色温度=5503\nD65 色温度=6504\nD75 色温度=7504
TP_COLORAPP_TONECIE;CIECAM02 明るさ(Q)を使用してトーンマッピング
TP_COLORAPP_TONECIE_TOOLTIP;このオプションが無効になっている場合、トーンマッピングはL*a*b*空間を使用します\nこのオプションが有効になっている場合、トーンマッピングは、CIECAM02を使用します\nトーンマッピング(L*a*b*/CIECAM02)ツールを有効にするには、この設定を有効にする必要があります
@@ -1538,8 +2044,8 @@ TP_CROP_PPI;PPI
TP_CROP_RESETCROP;リセット
TP_CROP_SELECTCROP;セレクト
TP_CROP_W;W 幅
-TP_CROP_X;X
-TP_CROP_Y;Y
+TP_CROP_X;左
+TP_CROP_Y;上部
TP_DARKFRAME_AUTOSELECT;自動選択
TP_DARKFRAME_LABEL;ダークフレーム
TP_DEFRINGE_LABEL;フリンジ低減
@@ -1552,7 +2058,7 @@ TP_DEHAZE_SHOW_DEPTH_MAP;深度マップの表示
TP_DEHAZE_STRENGTH;強さ
TP_DIRPYRDENOISE_CHROMINANCE_AMZ;自動(多分割方式)
TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;自動(分割方式)
-TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;色差 ブルー/イエロー
+TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;ブルー/イエロー
TP_DIRPYRDENOISE_CHROMINANCE_CURVE;色ノイズ低減のカーブ
TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;クロミナンススライダー全ての値を増幅します\n色度をベースにこのカーブで色ノイズ低減の強さを加減します。例えば彩度の低い部分で作用を強める、或いは色度の高い部分で作用を弱めるように使います
TP_DIRPYRDENOISE_CHROMINANCE_FRAME;色ノイズ
@@ -1568,7 +2074,7 @@ TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;プレビュー画像のサイズ=%1,
TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;プレビュー画像のノイズ: 平均値=%1 最大値=%2
TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;プレビュー画像のノイズ: 平均値= - 最大値= -
TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;タイルのサイズ=%1, 中心位置: X座標=%2 Y座標=%3
-TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;色差 レッド/グリーン
+TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;レッド/グリーン
TP_DIRPYRDENOISE_LABEL;ノイズ低減
TP_DIRPYRDENOISE_LUMINANCE_CONTROL;輝度ノイズの調整法
TP_DIRPYRDENOISE_LUMINANCE_CURVE;輝度カーブ
@@ -1585,7 +2091,7 @@ TP_DIRPYRDENOISE_MAIN_MODE;モード
TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;積極的
TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;控えめ
TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;”控えめ”モードは低周波の色度パターンが維持されますが、”積極的”モードではそれらも取り除かれます
-TP_DIRPYRDENOISE_MEDIAN_METHOD;方式
+TP_DIRPYRDENOISE_MEDIAN_METHOD;メディアンの方式
TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;色ノイズだけ
TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b*
TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;メディアンフィルター
@@ -1609,7 +2115,7 @@ TP_DIRPYREQUALIZER_ARTIF;アーティファクトを軽減
TP_DIRPYREQUALIZER_HUESKIN;肌色の色相
TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;このカーブは上部ほど、アルゴリズムが効率良く働くことを示しています。\n下部ほど、色相の遷移が見られる部分です。\nコントロールポイントを左右に大きく動かす必要が生じたり、アーティファクトが生じたりする場合は、ホワイトバランスが妥当ではない時です。\n他の色への影響を避けるには、調整範囲を少し減らします
TP_DIRPYREQUALIZER_LABEL;詳細レベルによるコントラスト調整
-TP_DIRPYREQUALIZER_LUMACOARSEST;粗い
+TP_DIRPYREQUALIZER_LUMACOARSEST;大まか
TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;コントラスト-
TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;コントラスト+
TP_DIRPYREQUALIZER_LUMAFINEST;細かい
@@ -1628,12 +2134,12 @@ TP_EPD_REWEIGHTINGITERATES;再加重反復
TP_EPD_SCALE;スケール
TP_EPD_STRENGTH;強さ
TP_EXPOSURE_AUTOLEVELS;自動露光補正
-TP_EXPOSURE_AUTOLEVELS_TIP;画像を解析し露光補正を自動で設定します
+TP_EXPOSURE_AUTOLEVELS_TIP;画像を解析し、露光補正を自動で行います\n必要に応じてハイライト復元を有効にします
TP_EXPOSURE_BLACKLEVEL;黒レベル
-TP_EXPOSURE_BRIGHTNESS;明度
+TP_EXPOSURE_BRIGHTNESS;明るさ
TP_EXPOSURE_CLAMPOOG;色域から外れた色を切り取る
TP_EXPOSURE_CLIP;クリップ %
-TP_EXPOSURE_CLIP_TIP;自動露光補正によるハイライトとシャドウ部分での飽和ピクセルの割合制限
+TP_EXPOSURE_CLIP_TIP;自動露光補正で使う飽和ピクセルの割合
TP_EXPOSURE_COMPRHIGHLIGHTS;ハイライト圧縮
TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;ハイライト圧縮 しきい値
TP_EXPOSURE_COMPRSHADOWS;シャドウ圧縮
@@ -1657,6 +2163,9 @@ TP_EXPOSURE_TCMODE_WEIGHTEDSTD;加重平均
TP_EXPOS_BLACKPOINT_LABEL;raw ブラック・ポイント
TP_EXPOS_WHITEPOINT_LABEL;raw ホワイト・ポイント
TP_FILMNEGATIVE_BLUE;ブルーの比率
+TP_FILMNEGATIVE_FILMBASE_PICK;フィルのベースカラーをピック
+TP_FILMNEGATIVE_FILMBASE_TOOLTIP;実際のフィルムのベースカラーを取得して、処理プロファイルに保存するために未露光のスポットをピック(例 フレームの境)\nこの方が、同じフィルムロールからの複数の画像をバッチ処理する際に、一貫性のあるカラーバランスを取り易いです\n変換する画像が極端に暗い、明るい、色のバランスが悪い場合に使えます。
+TP_FILMNEGATIVE_FILMBASE_VALUES;フィルムをベースにしたRGB:
TP_FILMNEGATIVE_GREEN;参考指数(コントラスト)
TP_FILMNEGATIVE_GUESS_TOOLTIP;原画像の中で色相がニュートラルな部分2か所をピックすることでレッドとブルーの比率を自動で設定します。明るさが異なる2か所をピックします。その後、ホワイトバランスを設定します。
TP_FILMNEGATIVE_LABEL;ネガフィルム
@@ -1734,7 +2243,7 @@ TP_ICM_SAVEREFERENCE_TOOLTIP;入力プロファイルが適用される前のリ
TP_ICM_TONECURVE;DCPトーンカーブ使用
TP_ICM_TONECURVE_TOOLTIP;DCPのプロファイルに含まれているトーンカーブを使用することができます
TP_ICM_WORKINGPROFILE;作業プロファイル
-TP_ICM_WORKING_TRC;トーン再現カーブ:
+TP_ICM_WORKING_TRC;TRC:
TP_ICM_WORKING_TRC_CUSTOM;カスタム
TP_ICM_WORKING_TRC_GAMMA;ガンマ
TP_ICM_WORKING_TRC_NONE;なし
@@ -1782,6 +2291,8 @@ TP_LABCURVE_RSTPRO_TOOLTIP;色度スライダーとCCカーブを使用するこ
TP_LENSGEOM_AUTOCROP;自動的に切り抜き選択
TP_LENSGEOM_FILL;オートフィル
TP_LENSGEOM_LABEL;レンズ / ジオメトリ
+TP_LENSGEOM_LIN;線形
+TP_LENSGEOM_LOG;対数
TP_LENSPROFILE_CORRECTION_AUTOMATCH;自動で選択
TP_LENSPROFILE_CORRECTION_LCPFILE;LCPファイル
TP_LENSPROFILE_CORRECTION_MANUAL;手動で選択
@@ -1797,6 +2308,561 @@ TP_LOCALCONTRAST_DARKNESS;暗い部分のレベル
TP_LOCALCONTRAST_LABEL;ローカルコントラスト
TP_LOCALCONTRAST_LIGHTNESS;明るい部分のレベル
TP_LOCALCONTRAST_RADIUS;半径
+TP_LOCALLAB_ACTIV;輝度だけ
+TP_LOCALLAB_ADJ;イコライザ ブルー/イエロー レッド/グリーン
+TP_LOCALLAB_ALL;全ての種類
+TP_LOCALLAB_AMOUNT;量
+TP_LOCALLAB_ARTIF;形状検出
+TP_LOCALLAB_ARTIF_TOOLTIP;色差の軽減を強めることで形状検出を向上させますが、形状の検出の範囲が狭まることがあります\n画像の形状のしきい値が画像のベタな部分のレベルを考慮します
+TP_LOCALLAB_AUTOGRAY;自動
+TP_LOCALLAB_AVOID;色ずれの回避
+TP_LOCALLAB_BALAN;ΔEのバランス ab-L
+TP_LOCALLAB_BALANEXP;ΔØ PDE バランス
+TP_LOCALLAB_BALANH;ΔEのバランス C-H
+TP_LOCALLAB_BALAN_TOOLTIP;色差のアルゴリズムのパラメータを変えます。\nab-L、C - Hを増減させます\nノイズ除去は変わりません
+TP_LOCALLAB_BASELOG;対数の基数
+TP_LOCALLAB_BILATERAL;平滑化フィルタ
+TP_LOCALLAB_BLACK_EV;ブラックEv
+TP_LOCALLAB_BLCO;色度だけ
+TP_LOCALLAB_BLENDMASKCOL;ブレンド
+TP_LOCALLAB_BLENDMASK_TOOLTIP;ブレンド=0の場合は、形状検出だけが改善します\nブレンドが0より大きい場合は、画像にマスクが追加されます。 ブレンドが0より小さい場合は、画像からマスクが除かれます。
+TP_LOCALLAB_BLGUID;ガイド付きフィルタ
+TP_LOCALLAB_BLINV;インバース
+TP_LOCALLAB_BLLC;輝度と色度
+TP_LOCALLAB_BLLO;輝度だけ
+TP_LOCALLAB_BLMED;メディアン
+TP_LOCALLAB_BLMETHOD_TOOLTIP;通常-全ての設定に対し、直接的なぼかしとノイズ\n反対‐スコープと拡張アルゴリズムを除いた設定で、ぼかしとノイズの反対処理\nシンメトリック‐全ての設定でぼかしとノイズの反対処理(予期せぬ結果になることが有り)
+TP_LOCALLAB_BLNOI_EXP;ぼかし & ノイズ
+TP_LOCALLAB_BLNORM;通常
+TP_LOCALLAB_BLSYM;シンメトリック
+TP_LOCALLAB_BLUFR;平滑化 - ぼかし - 質感 - ノイズ除去
+TP_LOCALLAB_BLUMETHOD_TOOLTIP;背景をぼかし、前景を分離するために:\n*RT-スポットが画像全体をカバーできるようにして(スコープと境界を高くする)背景をぼかします-通常或いはリバースモード\n*使用したい機能で一つ以上の除外RT-スポットを追加し(スコープを大きくします)、前景を分離します、マスクを使うことで効果を増幅出来ます
+TP_LOCALLAB_BLUR;ガウスぼかし - ノイズ - ノイズ除去
+TP_LOCALLAB_BLURCBDL;ぼかしのレベル 0-1-2-3-4
+TP_LOCALLAB_BLURCOL;マスクぼかしの半径
+TP_LOCALLAB_BLURDE;形状検出のぼかし
+TP_LOCALLAB_BLURLC;輝度だけ
+TP_LOCALLAB_BLURLEVELFRA;レベルのぼかし
+TP_LOCALLAB_BLURMASK_TOOLTIP;コントラストのしきい値と構造を考慮したマスクぼかしのスライダーでぼかしマスクを生成します。
+TP_LOCALLAB_BLURRESIDFRA;残差のぼかし
+TP_LOCALLAB_BLUR_TOOLNAME;平滑化ぼかし 質感 & ノイズ除去 - 1
+TP_LOCALLAB_BLWH;全ての変更を強制的に白黒にする
+TP_LOCALLAB_BLWH_TOOLTIP;色の構成要素、"a"と"b"の値を強制的にゼロにします
+TP_LOCALLAB_BUTTON_ADD;追加
+TP_LOCALLAB_BUTTON_DEL;削除
+TP_LOCALLAB_BUTTON_DUPL;複製
+TP_LOCALLAB_BUTTON_REN;名前の変更
+TP_LOCALLAB_BUTTON_VIS;表示/非表示
+TP_LOCALLAB_CBDL;詳細レベルによるコントラスト調整 - 不良の補正
+TP_LOCALLAB_CBDLCLARI_TOOLTIP;中間トーンを強化します
+TP_LOCALLAB_CBDL_ADJ_TOOLTIP;ウェーブレット機能のように作用します\n最初のレベル(0)は2x2ピクセルで解析します\n最後のレベル(5)は64x64ピクセルで解析します
+TP_LOCALLAB_CBDL_THRES_TOOLTIP;ノイズが先鋭化するのを避けます
+TP_LOCALLAB_CBDL_TOOLNAME;詳細レベルによるコントラスト調整 (不良部分の補正) - 2
+TP_LOCALLAB_CENTER_X;センターX
+TP_LOCALLAB_CENTER_Y;センターY
+TP_LOCALLAB_CH;カーブ CL - LC
+TP_LOCALLAB_CHROMA;色度
+TP_LOCALLAB_CHROMABLU;色度のレベル
+TP_LOCALLAB_CHROMABLU_TOOLTIP;輝度のスライダーと比べて増幅と減衰の作用の働きをします\n1以下で減衰、1以上で増幅の作用となります
+TP_LOCALLAB_CHROMACBDL;色度
+TP_LOCALLAB_CHROMACB_TOOLTIP;輝度のスライダーと比べて増幅と減衰の作用の働きをします\n100以下で減衰、100以上で増幅の作用となります
+TP_LOCALLAB_CHROMALEV;色度のレベル
+TP_LOCALLAB_CHROMASKCOL;色度のマスク
+TP_LOCALLAB_CHROMASK_TOOLTIP;このスライダーを使って背景の彩度を下げることが出来ます(インバースマスクで言う0に近いカーブ).\n色度に対するマスクの作用を強めることも出来ます。
+TP_LOCALLAB_CHRRT;色度
+TP_LOCALLAB_CIRCRADIUS;スポットサイズ
+TP_LOCALLAB_CIRCRAD_TOOLTIP;RT-スポットの参考値を含んでいるので、形状検出(色相、輝度、色度、Sobel)に有利です\n小さい値は花びらの補正などに便利です\n大きな値は肌などの補正に便利です
+TP_LOCALLAB_CLARICRES;色度を融合
+TP_LOCALLAB_CLARIFRA;明瞭とシャープマスク - ブレンド & ソフトイメージ
+TP_LOCALLAB_CLARILRES;輝度の融合
+TP_LOCALLAB_CLARISOFT;ソフトな半径
+TP_LOCALLAB_CLARISOFT_TOOLTIP;輝度の融合が0以外の場合に明瞭とシャープマスクが有効となります。\n\nウェーブレットピラミッドモジュールの全てが有効となります\nソフトな半径が0の場合は無効となります
+TP_LOCALLAB_CLARITYML;明瞭
+TP_LOCALLAB_CLARI_TOOLTIP;ウェーブレットのレベルが4以下の場合は、’シャープマスク’が有効となります。\n5以上のレベルでは’明瞭化’が有効となります。
+TP_LOCALLAB_CLIPTM;復元されたデータの切り取り(ゲイン)
+TP_LOCALLAB_COFR;色と明るさ - 小さな不良
+TP_LOCALLAB_COLORDE;プレビューのカラー選択 ΔE - 強さ
+TP_LOCALLAB_COLORDEPREV_TOOLTIP;有効になっている機能が1つだけの時は、設定のパネル(拡張する)のΔEのプレビューボタンを使います。\n複数の機能が有効になっている時は、各機能に備わっているマスクと調節の中のΔEのプレビューを使います。
+TP_LOCALLAB_COLORDE_TOOLTIP;設定値がマイナスの場合は色差(ΔE)のプレビューの色をブルーで表示、プラスの場合はグリーンで表示\n\nマスクと調節(マスクなしで調節を表示):プラスであれば、実際の変更を表示、マイナスであれば、強化した調節(輝度のみ)をブルーとイエローで表示
+TP_LOCALLAB_COLORSCOPE;カラー機能のスコープ
+TP_LOCALLAB_COLORSCOPE_TOOLTIP;色と明るさ、露光補正(標準)、シャドウ/ハイライト、自然な彩度は共通したスコープを使います。\n他の機能に関しては、それぞれ特定のスコープを使います。
+TP_LOCALLAB_COLOR_TOOLNAME;色&&明るさ (不良部分の補正) - 11
+TP_LOCALLAB_COL_NAME;名前
+TP_LOCALLAB_COL_VIS;ステータス
+TP_LOCALLAB_COMPFRA;詳細レベルの方向によるコントラスト
+TP_LOCALLAB_COMPFRAME_TOOLTIP;特殊な効果を付けるために使います。アーティファクトを軽減するためには'明瞭 & シャープマスク、ブレンド & ソフトイメージ'を使います\n処理時間が大きく増えます
+TP_LOCALLAB_COMPLEX_METHOD;ソフトウェアの複雑度
+TP_LOCALLAB_COMPLEX_TOOLTIP; ローカル調整の扱いの複雑度を選択出来ます
+TP_LOCALLAB_COMPREFRA;ウェーブレットを使ったレベルのダイナミックレンジ(非)圧縮
+TP_LOCALLAB_COMPRESS_TOOLTIP;アーティファクトを軽減するため必要に応じて'明瞭 & シャープマスク、ブレンド & ソフトイメージ'の'ソフトな半径'使います
+TP_LOCALLAB_CONTCOL;マスクぼかしのコントラストしきい値
+TP_LOCALLAB_CONTFRA;レベルによるコントラスト調整
+TP_LOCALLAB_CONTRAST;コントラスト
+TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;メインのマスクのコントラストをコントロール
+TP_LOCALLAB_CONTRESID;コントラスト
+TP_LOCALLAB_CONTTHR;コントラストのしきい値
+TP_LOCALLAB_CSTHRESHOLD;Ψ ウェーブレットのレベル
+TP_LOCALLAB_CSTHRESHOLDBLUR;Ψ ウェーブレットレベルのマスク
+TP_LOCALLAB_CURV;明るさ - コントラスト - 色度 "強力"
+TP_LOCALLAB_CURVCURR;通常
+TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;カーブが最上部に位置している時は、マスクが完全に黒く表示され、マスクの作用がない状態\nカーブを下に下げるにつれ、マスクの色が変わり、合わせて画像の状態も変わる
+TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;使うためには'カーブを有効にする'に✔を入れる
+TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;トーンカーブ
+TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), 色と明るさでL(H)との併用可
+TP_LOCALLAB_CURVEMETHOD_TOOLTIP;'通常', L=f(L)カーブはスライダーと同じアルゴリズムを使っています\n'強力' L=f(L)カーブで作用を強めた新しいアルゴリズムを使っていますが、場合によってアーティファクトが出ることがあります
+TP_LOCALLAB_CURVENCONTRAST;強力+コントラストのしきい値(試験的)
+TP_LOCALLAB_CURVENH;強力
+TP_LOCALLAB_CURVENHSU;色相と色度の組み合わせ(試験的)
+TP_LOCALLAB_CURVENSOB2;色相と色度の組み合わせ+コントラストのしきい値(試験的)
+TP_LOCALLAB_CURVNONE;カーブを無効
+TP_LOCALLAB_DARKRETI;暗さ
+TP_LOCALLAB_DEHAFRA;霞除去
+TP_LOCALLAB_DEHAZ;強さ
+TP_LOCALLAB_DEHAZ_TOOLTIP;マイナス値にすると霞が増えます
+TP_LOCALLAB_DELTAD;色差のバランス
+TP_LOCALLAB_DELTAEC;ΔE画像のマスク
+TP_LOCALLAB_DENOIS;Ψ ノイズ除去
+TP_LOCALLAB_DENOI_EXP;ノイズ除去
+TP_LOCALLAB_DENOI_TOOLTIP;このモジュール(処理工程の後の方に位置)だけで使うことも、メインのノイズ低減(処理工程の最初の方に位置)と併用することも出来ます\nスコープは色(ΔE)に応じてノイズ除去の作用に違いを持たせます。\n”メディアン”と”ガイド付きフィルタ”(平滑化ぼかし)も使えば、ノイズ除去のパフォーマンスが良くなります。\n”レベルのぼかし”や”ウェーブレットピラミッド”の併用で更にノイズ除去のパフォーマンスが上がります。
+TP_LOCALLAB_DEPTH;深度
+TP_LOCALLAB_DETAIL;ローカルコントラスト
+TP_LOCALLAB_DETAILSH;ディテール
+TP_LOCALLAB_DETAILTHR;細部の色の明るさのしきい値 (DCT)
+TP_LOCALLAB_DUPLSPOTNAME;コピー
+TP_LOCALLAB_EDGFRA;エッジシャープネス
+TP_LOCALLAB_EDGSHOW;全ての機能を表示
+TP_LOCALLAB_ELI;楕円
+TP_LOCALLAB_ENABLE_AFTER_MASK;トーンマッピングを使う
+TP_LOCALLAB_ENABLE_MASK;マスクを有効にする
+TP_LOCALLAB_ENABLE_MASKAFT;露光補正の全てのアルゴリズムを使う
+TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP;元のデータの代わりに透過マップを使った後は、有効にしたマスクは保持されているデータを使います。
+TP_LOCALLAB_ENH;強化
+TP_LOCALLAB_ENHDEN;強化 + 色ノイズの軽減
+TP_LOCALLAB_EPSBL;ディテール
+TP_LOCALLAB_EQUIL;輝度の標準化
+TP_LOCALLAB_EQUILTM_TOOLTIP;出力画像の輝度の平均と分散が元画像のそれらと同じになるように輝度を回復するオプションです
+TP_LOCALLAB_ESTOP;エッジ停止
+TP_LOCALLAB_EV_DUPL;のコピー
+TP_LOCALLAB_EV_NVIS;非表示
+TP_LOCALLAB_EV_NVIS_ALL;全て非表示
+TP_LOCALLAB_EV_VIS;表示
+TP_LOCALLAB_EV_VIS_ALL;全て表示
+TP_LOCALLAB_EXCLUF;除外
+TP_LOCALLAB_EXCLUF_TOOLTIP;スコープを動かして色を拡張するような場合、データの一部を除外する場合に使います\nRT-スポットに対する全ての設定で適用できます。
+TP_LOCALLAB_EXCLUTYPE;スポットのタイプ
+TP_LOCALLAB_EXCLUTYPE_TOOLTIP;通常方式は、スポットのデータを繰り返して使います\n例外方式は元のデータに戻して使う方式です
+TP_LOCALLAB_EXECLU;除外スポット
+TP_LOCALLAB_EXNORM;通常スポット
+TP_LOCALLAB_EXPCBDL_TOOLTIP;センサーの汚れに起因する不良で、それらが画像の大切な部分にある、或いは複数個所にそれらある場合\n\na) RT-スポットをその部分に作成(必要であれば大きさを調節); b) または複数個所をカバーするスポットを作成; c) 比較的大きな境界の調整を設定; d) レベル3と4のスライダー、場合によっては2の値も100以下にします。必要に応じて色度のスライダーも使います。
+TP_LOCALLAB_EXPCHROMA;色度の補間
+TP_LOCALLAB_EXPCHROMA_TOOLTIP;この機能は露光量補正とPDE IPOLだけに関わります\n色が褪せるのを避けます
+TP_LOCALLAB_EXPCOLOR_TOOLTIP;不良個所か小さい場合:\n\n赤目 : 中心円を赤い部分に合わせ、RT-スポットの範囲を眼の大きさ程度にします。スコープの値を小さくし、"明るさ" -100, "色" -100にします\n\n赤外線センサーのスポット:中心円を不良個所に合わせます、 RT-スポットの範囲はデフォルトに近い大きさで構いません - "色"を減らし、場合によっては"スコープ"を使って作用の及ぶ範囲を調節します\n\nセンサーの汚れ(小):中心円を不良部分に合わせます(スポットサイズも調整します)、RT-スポットの範囲が不良個所にあまり近づかないようにします(境界部分が目立たないようにする) a) "境界の調節"は小さくします; b) "輝度"、場合によっては"色" を使って不良個所のレンダリングを正常な部分のレンダリングに近づけます; c) "スコープ"を適度に使って作用の及ぶ範囲を調節します
+TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;ウェーブレットのレベル或いはノイズ除去の説明を参照して下さい。\n但し、幾つか変更されている部分もあります:より多くの機能がノイズ除去に関する詳細が多くなっています。\nウェーブレットのレベルのトーンマッピング
+TP_LOCALLAB_EXPCONTRAST_TOOLTIP;大きさが50x50ピクセルより小さいスポットを使うのは避けます\n代わりに、境界値を低く、境界の減衰値とスコープ値を高く設定して小さなRT-スポットを真似ます\nアーティストを軽減するために、必要であれば’ソフトな半径’を調整しながら’明瞭 & シャープマスクとイメージのブレンド’モジュールを使います
+TP_LOCALLAB_EXPCURV;カーブ
+TP_LOCALLAB_EXPGRAD;階調フィルタ
+TP_LOCALLAB_EXPLAPBAL_TOOLTIP;元画像とラプラス変換の間のバランスをとります
+TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;ラプラス変換の適用前後でガンマを適用します
+TP_LOCALLAB_EXPLAPLIN_TOOLTIP;ラプラス変換の適用前に、露光補正の線形要素を追加します
+TP_LOCALLAB_EXPLAP_TOOLTIP;しきい値のスライダーを増やすほど、コントラストの減衰作用が強くなります
+TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;画像を融合するために複数の機能が使えます(Photoshopのレイヤーのように):差分、積算、ソフトライト、オーバーレイ+不透明度。。。\n元画像 : 現在のRT-スポットを元画像と融合.\n前のスポット : 現在のRT-スポットを前のRT-スポットと融合 – スポットが一つだけの場合は元画像との融合になります\n背景:現在のRT-スポットを背景の色と輝度と融合します
+TP_LOCALLAB_EXPMETHOD_TOOLTIP;標準:メインの露光補正と類似したアルゴリズムを使いますが、 L*a*b*で作業するため色差を考慮します\n\nラプラスとポアソン方程式:色差を考慮する別なアルゴリズムですが、フーリエ空間でのラプラスの欠点を解決すためポアソン方程式(PDE)を使います\nPDEを使ったアルゴリズムは結果が大きく異なるため、標準とは異なる設定が必要でしょう\n露出不足の画像に有効かもしれません\nPDEはアーティファクトとノイズを軽減します
+TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;アーティファクト(ノイズ)の発生を避けるため、ラプラス変換の前にメディアンを適用します
+TP_LOCALLAB_EXPOSE;露光補正-PDEアルゴリズム
+TP_LOCALLAB_EXPOSURE_TOOLTIP;シャドウ部分が強いような場合は、”シャドウ/ハイライト”のモジュールが使えます
+TP_LOCALLAB_EXPRETITOOLS;高度なレティネックス機能
+TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-スポットの大きさが最低でも39x39ピクセル必要です\nスポットが小さい場合は、低い境界値、高い減衰値、高いスコープ値を設定します
+TP_LOCALLAB_EXPTOOL;露光補正の機能
+TP_LOCALLAB_EXPTRC;トーンリプロダクションカーブ - TRC
+TP_LOCALLAB_EXP_TOOLNAME;露光補正 - ダイナミックレンジ圧縮 - 10
+TP_LOCALLAB_FATAMOUNT;量
+TP_LOCALLAB_FATANCHOR;アンカー
+TP_LOCALLAB_FATANCHORA;オフセット
+TP_LOCALLAB_FATDETAIL;ディテール
+TP_LOCALLAB_FATFRA;ダイナミックレンジ圧縮 f
+TP_LOCALLAB_FATFRAME_TOOLTIP;ここではFattalトーンマッピングアルゴリズムを使います\nアンカーで画像の露出不足・過多に応じた選択が出来ます\n現在のスポットに近く、マスクを使用する2番目のスポットの輝度を増やすのに便利です
+TP_LOCALLAB_FATLEVEL;シグマ
+TP_LOCALLAB_FATRES;残差画像の量
+TP_LOCALLAB_FATSHFRA;マスクのダイナミックレンジ圧縮のマスク f
+TP_LOCALLAB_FEATH_TOOLTIP;スポットの対角線に対する減光フィルタの幅の割合\n..
+TP_LOCALLAB_FEATVALUE;フェザー処理(階調フィルタ)
+TP_LOCALLAB_FFTCOL_MASK;FFTW f
+TP_LOCALLAB_FFTW;f 高速フーリエ変換を使う
+TP_LOCALLAB_FFTW2;f 高速フーリエ変換を使う(TIF, JPG,..)
+TP_LOCALLAB_FFTWBLUR;ƒ - 常に高速フーリエ変換を使う
+TP_LOCALLAB_FULLIMAGE;画像全体のブラックEvとホワイトEvを計算
+TP_LOCALLAB_GAM;ガンマ
+TP_LOCALLAB_GAMFRA;トーンリプロダクションカーブ(TRC)
+TP_LOCALLAB_GAMM;ガンマ
+TP_LOCALLAB_GAMMASKCOL;ガンマのマスク
+TP_LOCALLAB_GAMSH;ガンマ
+TP_LOCALLAB_GRADANG;階調フィルタの角度
+TP_LOCALLAB_GRADANG_TOOLTIP;-180度から+180度の間で角度を調整
+TP_LOCALLAB_GRADFRA;階調フィルタ
+TP_LOCALLAB_GRADGEN_TOOLTIP;階調フィルタの機能は”色と明るさ”と、”露光”、”シャドウ/ハイライト”、”自然な彩度”に備わっています\n\n自然な彩度、色と明るさには輝度、色調、色相の階調フィルタが使えます\nフェザー処理は設定の中にあります
+TP_LOCALLAB_GRADLOGFRA;階調フィルタ 輝度
+TP_LOCALLAB_GRADSTR;階調フィルタ 強さ
+TP_LOCALLAB_GRADSTRAB_TOOLTIP;色度の階調の強さを調整します
+TP_LOCALLAB_GRADSTRCHRO;色調の階調の強さ
+TP_LOCALLAB_GRADSTRHUE;色相の階調の強さ(融合されたファイル)
+TP_LOCALLAB_GRADSTRHUE2;色相の階調の強さ
+TP_LOCALLAB_GRADSTRHUE_TOOLTIP;色相の階調の強さを調整します
+TP_LOCALLAB_GRADSTRLUM;輝度の階調の強さ
+TP_LOCALLAB_GRADSTR_TOOLTIP;露出度の階調の強さを調整します
+TP_LOCALLAB_GRAINFRA;フィルムの質感 1:1
+TP_LOCALLAB_GRALWFRA;階調フィルタ ローカルコントラスト
+TP_LOCALLAB_GRIDFRAME_TOOLTIP;スポットは均一な画像部分にある方が望ましいです\n\n通常モードの場合だけに使えます。融合された背景による色相、彩度、色、輝度が関係します。
+TP_LOCALLAB_GRIDONE;カラートーン調整
+TP_LOCALLAB_GRIDTWO;直接
+TP_LOCALLAB_GUIDBL;ソフトな半径
+TP_LOCALLAB_GUIDFILTER;ガイド付きフィルタの半径
+TP_LOCALLAB_GUIDFILTER_TOOLTIP;画像に応じて値を決めます - 画像が霞んでいなければ値を低く取ります
+TP_LOCALLAB_HHMASK_TOOLTIP;例えば肌の微妙な色相調整に使います
+TP_LOCALLAB_HIGHMASKCOL;ハイライトマスク
+TP_LOCALLAB_HLH;カーブ H
+TP_LOCALLAB_IND;独立 (マウス)
+TP_LOCALLAB_INDSL;独立 (マウス + スライダー)
+TP_LOCALLAB_INVERS;反対
+TP_LOCALLAB_INVERS_TOOLTIP;反対を選択すると調整の多様性が失われます\n\n代わりの方法\n初めのスポット:\n画像全体 –境界線をプレビュー画像の外側にセットします\n スポットの形状は矩形、境界値は100\n\n2番目のスポットを作成し除外スポットにします
+TP_LOCALLAB_ISOGR;粗さ (ISO)
+TP_LOCALLAB_LABBLURM;マスクぼかし
+TP_LOCALLAB_LABEL;ローカル調整
+TP_LOCALLAB_LABGRID;カラー補正グリッド
+TP_LOCALLAB_LABGRIDMERG;背景
+TP_LOCALLAB_LABGRID_VALUES;高(a)=%1 高(b)=%2\n低(a)=%3 低(b)=%4
+TP_LOCALLAB_LABSTRUM;マスクの構造
+TP_LOCALLAB_LAPLACC;ΔØ ラプラシアンマスク PDEの境界条件あり
+TP_LOCALLAB_LAPLACE;Δ ラプラシアンのしきい値 ΔE
+TP_LOCALLAB_LAPLACEXP;Δ ラプラシアンのしきい値
+TP_LOCALLAB_LAPMASKCOL;Δ ラプラシアンのしきい値マスク
+TP_LOCALLAB_LAPRAD_TOOLTIP;半径とラプラス変換のしきい値を同時に使うことを避けます。
+TP_LOCALLAB_LAP_MASK_TOOLTIP;全てのラプラシアンマスクのポアソン方程式の解を求めます\nラプラシアンのしきい値マスクを有効にするとアーティファクトが軽減され、スムーズな効果が得られます\n無効の場合は線形的な応答となります
+TP_LOCALLAB_LC_FFTW_TOOLTIP;高速フーリエ変換は画像の質を改善し、大きな半径を使えるようにします\n処理する領域の大きさに応じて処理時間が増えます\n大きな半径で使うことを奨めます\n\nFFTWの最適化を図るために領域を数ピクセル削ります
+TP_LOCALLAB_LC_TOOLNAME;ローカルコントラスト & ウェーブレット (不良部分の補正) - 7
+TP_LOCALLAB_LEVELBLUR;ぼかしを施すレベルの最大値
+TP_LOCALLAB_LEVELLOCCONTRAST_TOOLTIP;横軸はローカルコントラスト(輝度に近い)を表し、縦軸はローカルコントラストの増減を表します
+TP_LOCALLAB_LEVELWAV;Ψ ウェーブレットのレベル
+TP_LOCALLAB_LEVELWAV_TOOLTIP;詳細レベルの数はスポットとプレビューのサイズに応じて自動で決まります\n最大512ピクセルで解析するレベル8から最大4ピクセルで解析するレベル1まで
+TP_LOCALLAB_LIGHTNESS;明るさ
+TP_LOCALLAB_LIGHTN_TOOLTIP;反対モードで明るさを-100にすると輝度が0になります
+TP_LOCALLAB_LIGHTRETI;明るさ
+TP_LOCALLAB_LINEAR;線形性
+TP_LOCALLAB_LIST_NAME;現在のスポットに機能を追加
+TP_LOCALLAB_LIST_TOOLTIP;機能を選んだ後、その複雑度、”通常”或いは”エキスパート”を選択します\n付随する番号は各RT-スポットの処理の中の機能がある場所をしましています
+TP_LOCALLAB_LMASK_LEVEL_TOOLTIP;選択したウェーブレットのレベルによって、中間トーンとハイライトへの作用を優先します
+TP_LOCALLAB_LMASK_LL_TOOLTIP;中間トーンとハイライトへの作用を優先します
+TP_LOCALLAB_LOCCONT;アンシャープマスク
+TP_LOCALLAB_LOC_CONTRAST;ローカルコントラスト-ウェーブレット-欠損/汚れの補正
+TP_LOCALLAB_LOC_CONTRASTPYR;Ψ ピラミッド1:
+TP_LOCALLAB_LOC_CONTRASTPYR2;Ψ ピラミッド2:
+TP_LOCALLAB_LOC_CONTRASTPYR2LAB;レベルによるコントラスト調整- トーンマッピング(s)
+TP_LOCALLAB_LOC_CONTRASTPYRLAB;階調フィルタ - エッジシャープネス - ぼかし
+TP_LOCALLAB_LOC_RESIDPYR;残差画像 メイン
+TP_LOCALLAB_LOG;対数符号化
+TP_LOCALLAB_LOGAUTO;自動
+TP_LOCALLAB_LOGAUTO_TOOLTIP;このボタンを押すことで、ダイナミックレンジとグレーポイントの源泉の推定値が得られます(グレーポイントの源泉で"自動"が有効になっている場合)\n自動計算による値を仕上げるためには、もう一度ボタンを押します
+TP_LOCALLAB_LOGBASE_TOOLTIP;デフォルト値は2です\n2以下にするとアルゴリズムの作用が減少します。シャドウ部分がより暗く、ハイライト部分がより明るくなります\n2以上にするとアルゴリズムの作用が変わります。シャドウ部分は灰色がかり、ハイライト部分の色がさめた印象になります
+TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;ダイナミックレンジの推定値 - ブラックEvとホワイトEv
+TP_LOCALLAB_LOGENCOD_TOOLTIP;対数符号化(ACES)を使ってトーンマッピングを行います\n露出不足やハイダイナミックレンジの画像の補正に便利です\n\n処理は : 1) ダイナミックレンジを計算、2) 好みに応じて調節
+TP_LOCALLAB_LOGFRA;グレーポイントの源泉
+TP_LOCALLAB_LOGFRAME_TOOLTIP;処理の初期段階で画像の露光レベルを計算する、或いはそのまま使用します:\n前者はブラックEv, ホワイトEv、グレーポイントの源泉から計算\n後者はメインの露光量補正の値を使います
+TP_LOCALLAB_LOGLIN;対数モード
+TP_LOCALLAB_LOGPFRA;相対的な露光レベル
+TP_LOCALLAB_LOGSRCGREY_TOOLTIP;画像のグレーポイントの推定値、処理行程の前の方
+TP_LOCALLAB_LOGTARGGREY_TOOLTIP;好みに合わせて適用する値を変えられます
+TP_LOCALLAB_LOG_TOOLNAME;対数符号化 - 0
+TP_LOCALLAB_LUM;カーブ LL - CC
+TP_LOCALLAB_LUMADARKEST;最も暗い部分
+TP_LOCALLAB_LUMASK;マスクの背景輝度
+TP_LOCALLAB_LUMASK_TOOLTIP;マスクの表示(マスクと調節)で、背景のグレーを調節します
+TP_LOCALLAB_LUMAWHITESEST;最も明るい部分
+TP_LOCALLAB_LUMONLY;輝度だけ
+TP_LOCALLAB_MASFRAME;マスクと融合
+TP_LOCALLAB_MASFRAME_TOOLTIP;全てのマスクに共通する\nガンマ、スロープ、色度、コントラストカーブ、詳細レベルのコントラストカーブのマスクが使われる時は、選択領域のレタッチを避けるために色差イメージを考慮する。
+TP_LOCALLAB_MASK;マスク
+TP_LOCALLAB_MASK2;コントラストカーブのマスク
+TP_LOCALLAB_MASKCOL;カーブマスク
+TP_LOCALLAB_MASKH;色相のカーブマスク
+TP_LOCALLAB_MASK_TOOLTIP;使いたい一つの機能で複数のマスクを有効に出来ますが、そのためには別の機能を有効にする必要があります(但し、その機能自体を使う必要はありません、例えば、スライダーが0でも構いません)\nこの特性を有するマスクには’+’のマークがあります\n追加的な機能を持つマスクには’*’のマークが付いています\n数字が示すのはマスクの使用の順番です\n\nインバースマスクがある機能に関するマスクは組み合わせることが可能です\nこの場合、マスクに関連する新しい機能はインバースの中で選択します;その機能を使う際は値を非常に小さくしなければなりません(例えば、露光0.01)
+TP_LOCALLAB_MED;中間
+TP_LOCALLAB_MEDIAN;メディアン 低
+TP_LOCALLAB_MEDNONE;なし
+TP_LOCALLAB_MERCOL;色
+TP_LOCALLAB_MERDCOL;背景の融合(ΔE)
+TP_LOCALLAB_MERELE;明るくするだけ
+TP_LOCALLAB_MERFIV;追加
+TP_LOCALLAB_MERFOR;色の覆い焼き
+TP_LOCALLAB_MERFOU;乗算
+TP_LOCALLAB_MERGE1COLFRA;オリジナル或いは前のイメージと融合
+TP_LOCALLAB_MERGECOLFRA;マスク: LCHと構造
+TP_LOCALLAB_MERGEFIV;前のスポット(マスク7) + LCHマスク
+TP_LOCALLAB_MERGEFOU;前のスポット(マスク7)
+TP_LOCALLAB_MERGEMER_TOOLTIP;融合画像に対しΔEを計算に入れます(この方法はスコープの作用と同等です)
+TP_LOCALLAB_MERGENONE;なし
+TP_LOCALLAB_MERGEONE;ショートカーブ'L'のマスク
+TP_LOCALLAB_MERGEOPA_TOOLTIP;オリジナル或いは前のスポットと現在のスポットとの融合する際の不透明度の % \nコントラストのしきい値:オリジナルコントラストの機能の結果を調整
+TP_LOCALLAB_MERGETHR;オリジナル(マスク7) + LCHマスク
+TP_LOCALLAB_MERGETWO;オリジナル(マスク7)
+TP_LOCALLAB_MERGETYPE;イメージとマスクの融合
+TP_LOCALLAB_MERGETYPE_TOOLTIP;なしの場合、LCHモードの全てのマスクを使います\nショートカーブ 'L'マスクの場合、マスク2、3、4、6、7はスキップします\nオリジナルマスク7の場合、現在のイメージと元のイメージを融合します
+TP_LOCALLAB_MERHEI;重ね合わせ
+TP_LOCALLAB_MERHUE;色相
+TP_LOCALLAB_MERLUCOL;輝度
+TP_LOCALLAB_MERLUM;光度
+TP_LOCALLAB_MERNIN;スクリーン
+TP_LOCALLAB_MERONE;標準
+TP_LOCALLAB_MERSAT;彩度
+TP_LOCALLAB_MERSEV;ソフトライト Photoshop
+TP_LOCALLAB_MERSEV0;ソフトライト イリュージョン
+TP_LOCALLAB_MERSEV1;ソフトライト W3C
+TP_LOCALLAB_MERSEV2;ハードライト
+TP_LOCALLAB_MERSIX;分割
+TP_LOCALLAB_MERTEN;暗くするだけ
+TP_LOCALLAB_MERTHI;色の焼き込み
+TP_LOCALLAB_MERTHR;差異
+TP_LOCALLAB_MERTWE;除外
+TP_LOCALLAB_MERTWO;減算
+TP_LOCALLAB_METHOD_TOOLTIP;'強化 + 色ノイズ低減'を選ぶと処理時間が著しく増加します\nしかし、アーティファクトは軽減されます
+TP_LOCALLAB_MLABEL;復元されたデータ 最小値=%1 最大値=%2 (クリップ - オフセット)
+TP_LOCALLAB_MLABEL_TOOLTIP;最低値=0、最大値=32768の近くになるよう調整します\n標準化を行うため‘保持されたデータを切り取る’と‘オフセット’を使えます\n\n混成のない画像に戻します
+TP_LOCALLAB_MODE_EXPERT;エキスパート
+TP_LOCALLAB_MODE_NORMAL;通常
+TP_LOCALLAB_MRFIV;背景
+TP_LOCALLAB_MRFOU;前のスポット
+TP_LOCALLAB_MRONE;なし
+TP_LOCALLAB_MRTHR;元のイメージ
+TP_LOCALLAB_MRTWO;ショートカーブ 'L'マスク
+TP_LOCALLAB_MULTIPL_TOOLTIP;非常に広範囲(-18EV~+4EV)でトーンのレタッチが出来ます。初めのスライダーは-18EV~-6EVの非常に暗い部分に作用します。最後のスライダーは4EVまでの明るい部分に作用します
+TP_LOCALLAB_NEIGH;半径
+TP_LOCALLAB_NOISECHROCOARSE;色度 粗い (ウェーブレット)
+TP_LOCALLAB_NOISECHROC_TOOLTIP;0より大きい値で効果の高いアルゴリズムが働き始めます\n大まかなスライダーの場合は2以上からです
+TP_LOCALLAB_NOISECHRODETAIL;色度 細部の回復 (DCT)
+TP_LOCALLAB_NOISECHROFINE;色度 細かい (ウェーブレット)
+TP_LOCALLAB_NOISEDETAIL_TOOLTIP;スライダー値が100になると無効
+TP_LOCALLAB_NOISELEQUAL;イコライザ 白黒
+TP_LOCALLAB_NOISELUMCOARSE;輝度 大まか(ウェーブレット)
+TP_LOCALLAB_NOISELUMDETAIL;輝度 細部の回復 (DCT)
+TP_LOCALLAB_NOISELUMFINE;輝度 詳細レベル2(ウェーブレット)
+TP_LOCALLAB_NOISELUMFINETWO;輝度 詳細レベル3(ウェーブレット)
+TP_LOCALLAB_NOISELUMFINEZERO;輝度 詳細レベル1(ウェーブレット)
+TP_LOCALLAB_NOISEMETH;ノイズ低減
+TP_LOCALLAB_NONENOISE;なし
+TP_LOCALLAB_OFFS;オフセット
+TP_LOCALLAB_OFFSETWAV;オフセット
+TP_LOCALLAB_OPACOL;不透明度
+TP_LOCALLAB_ORIGLC;元画像だけと融合
+TP_LOCALLAB_ORRETILAP_TOOLTIP;2次ラプラシアンのしきい値に作用します。作用に差をつけるため、特に背景に対する作用、ΔEを計算に入れます(スコープの作用と異なります)
+TP_LOCALLAB_ORRETISTREN_TOOLTIP;1次ラプラシアンのしきい値に作用します。設定値を高くするほど、コントラストの違いが減少します
+TP_LOCALLAB_PASTELS2;自然な彩度
+TP_LOCALLAB_PDE;ΔØ ラプラシアン PDE - ダイナミックレンジ圧縮 + 標準
+TP_LOCALLAB_PDEFRA;PDE IPOL - コントラスト減衰
+TP_LOCALLAB_PDEFRAME_TOOLTIP;PDE IPOL - IPOLから取り入れ、独自にRawtherapee用にアレンジしたアルゴリズム:非常に異なる効果が出るので設定を変える必要があります。標準的にはブラックをマイナス値、ガンマを1以下にするなど\n露出の低い画像に便利だと思われます\n
+TP_LOCALLAB_PREVIEW;ΔEのプレビュー
+TP_LOCALLAB_PROXI;ΔEの減衰
+TP_LOCALLAB_QUALCURV_METHOD;カーブのタイプ
+TP_LOCALLAB_QUAL_METHOD;全体の質
+TP_LOCALLAB_RADIUS;半径
+TP_LOCALLAB_RADIUS_TOOLTIP;半径の値が30より大きい場合は、高速フーリエ変換を使います
+TP_LOCALLAB_RADMASKCOL;半径のマスクを滑らかにする
+TP_LOCALLAB_RECT;長方形
+TP_LOCALLAB_RECURS;参考値の繰り返し
+TP_LOCALLAB_RECURS_TOOLTIP;新しいモジュール使用とRT-スポットが作成される度に、色相、輝度、色度の参考値が再計算されます。\nマスクを使った作業に便利です。
+TP_LOCALLAB_REFLABEL;参照 (0..1) 色度=%1 輝度=%2 色相=%3
+TP_LOCALLAB_REN_DIALOG_LAB;新しいコントロールスポットの名前を入力
+TP_LOCALLAB_REN_DIALOG_NAME;コントロールスポットの名前変更
+TP_LOCALLAB_RESETSHOW;全ての表示変更をリセット
+TP_LOCALLAB_RESID;残差画像
+TP_LOCALLAB_RESIDBLUR;残差画像をぼかす
+TP_LOCALLAB_RESIDCHRO;残差画像の色度
+TP_LOCALLAB_RESIDCOMP;残差画像の圧縮
+TP_LOCALLAB_RESIDCONT;残差画像のコントラスト
+TP_LOCALLAB_RESIDHI;ハイライト
+TP_LOCALLAB_RESIDHITHR;ハイライトのしきい値
+TP_LOCALLAB_RESIDSHA;シャドウ
+TP_LOCALLAB_RESIDSHATHR;シャドウのしきい値
+TP_LOCALLAB_RETI;霞除去 - レティネックス 強いコントラスト
+TP_LOCALLAB_RETIFRA;レティネックス
+TP_LOCALLAB_RETIM;独自のレティネックス
+TP_LOCALLAB_RETITOOLFRA;レティネックスの機能
+TP_LOCALLAB_RETI_FFTW_TOOLTIP;高速フーリエ変換は質を向上させ大きな半径の使用が可能になります\n処理時間は編集する領域の大きさに応じて変わります \n大きな半径を扱う場合に適用するのがいいでしょう\n\n処理領域を数ピクセル減らすことでFFTWの最適化を図ることが出来ます \n但し、RT-スポットの境界線(縦或いは横)が画像からはみ出している場合は最適化を図れません
+TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Have no effect when the value "Lightness = 1" or "Darkness =2" is chosen.\nIn other cases, the last step of "Multiple scale Retinex" is applied an algorithm close to "local contrast", these 2 cursors, associated with "Strength" will allow to play upstream on the local contrast.
+TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Play on internal parameters to optimize response.\nLook at the "restored datas" indicators "near" min=0 and max=32768 (log mode), but others values are possible.
+TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm allows differenciation for haze or normal.\nLogarithm brings more contrast but will generate more halo.
+TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP;画像に応じてこれらの値を適用します - 霧のかかった画像の場合で、調整したいのが前景或いは背景なのかに応じて。
+TP_LOCALLAB_RETI_SCALE_TOOLTIP;If scale=1, retinex behaves like local contrast with many more possibilities.\nThe greater the scale, the more intense the recursive action, the longer the calculation times
+TP_LOCALLAB_RET_TOOLNAME;霞除去 & レティネックス - 9
+TP_LOCALLAB_REWEI;再加重平均の繰り返し
+TP_LOCALLAB_RGB;RGB トーンカーブ
+TP_LOCALLAB_ROW_NVIS;非表示
+TP_LOCALLAB_ROW_VIS;表示
+TP_LOCALLAB_SATUR;彩度
+TP_LOCALLAB_SAVREST;保存 - 元に戻した現在のイメージ
+TP_LOCALLAB_SCALEGR;スケール
+TP_LOCALLAB_SCALERETI;スケール
+TP_LOCALLAB_SCALTM;スケール
+TP_LOCALLAB_SCOPEMASK;ΔE画像のスコープマスク
+TP_LOCALLAB_SCOPEMASK_TOOLTIP;色差画像のマスクを有効にすると使えます\n低い値にすると選択した領域の調整が行われません
+TP_LOCALLAB_SENSI;スコープ
+TP_LOCALLAB_SENSIBN;スコープ
+TP_LOCALLAB_SENSICB;スコープ
+TP_LOCALLAB_SENSIDEN;スコープ
+TP_LOCALLAB_SENSIEXCLU;スコープ
+TP_LOCALLAB_SENSIEXCLU_TOOLTIP;除外モードに含まれている色も調整
+TP_LOCALLAB_SENSIH;スコープ
+TP_LOCALLAB_SENSIH_TOOLTIP;スコープの作用を調整します:\n小さい値を設定すると調整領域の色の変化は中心円に近いものに制限されます\n高い値を設定すると色の変化の範囲が広がります。\n20以下の設定がアルゴリズムの働きにとっていいでしょう
+TP_LOCALLAB_SENSILOG;スコープ
+TP_LOCALLAB_SENSIS;スコープ
+TP_LOCALLAB_SENSIS_TOOLTIP;スコープの作用を調整します:\n小さい値を設定すると調整領域の色の変化は中心円に近いものに制限されます\n高い値を設定すると色の変化の範囲が広がります。\n20以下の設定がアルゴリズムの働きにとっていいでしょう
+TP_LOCALLAB_SENSI_TOOLTIP;スコープの作用を調整します:\n小さい値を設定すると調整領域の色の変化は中心円に近いものに制限されます\n高い値を設定すると色の変化の範囲が広がります。\n20以下の設定がアルゴリズムの働きにとっていいでしょう
+TP_LOCALLAB_SETTINGS;設定
+TP_LOCALLAB_SH1;シャドウ/ハイライト
+TP_LOCALLAB_SH2;イコライザ
+TP_LOCALLAB_SHADEX;シャドウ
+TP_LOCALLAB_SHADEXCOMP;シャドウの圧縮とトーンの幅
+TP_LOCALLAB_SHADHIGH;シャドウ/ハイライト-階調-トーンイコライザ-TRC
+TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;露光モジュールだけでは処理が困難な場合に、代わりに使う、或いは補間に使います。\nノイズ低減の使用が必要かもしれません:シャドウを明るく
+TP_LOCALLAB_SHAMASKCOL;シャドウのマスク
+TP_LOCALLAB_SHAPETYPE;RT-スポット領域の形状
+TP_LOCALLAB_SHAPE_TOOLTIP;長方形は通常モードのみ
+TP_LOCALLAB_SHARAMOUNT;量
+TP_LOCALLAB_SHARBLUR;半径のぼかし
+TP_LOCALLAB_SHARDAMPING;減衰
+TP_LOCALLAB_SHARFRAME;変更
+TP_LOCALLAB_SHARITER;繰り返し
+TP_LOCALLAB_SHARP;シャープニング
+TP_LOCALLAB_SHARP_TOOLNAME;シャープニング - 8
+TP_LOCALLAB_SHARRADIUS;半径
+TP_LOCALLAB_SHORTC;ショートカーブ'L'マスク
+TP_LOCALLAB_SHORTCMASK_TOOLTIP;L(L)とL(H)2つのカーブをつスキップします。\nマスクの作用によって調整された現在のイメージと元イメージを融合します\n但し、これが使えるのは2, 3, 4, 6, 7のマスクです
+TP_LOCALLAB_SHOWC;マスクと調節
+TP_LOCALLAB_SHOWC1;ファイルの融合
+TP_LOCALLAB_SHOWCB;マスクと調節
+TP_LOCALLAB_SHOWDCT;フーリエの処理を表示
+TP_LOCALLAB_SHOWE;マスクと調節
+TP_LOCALLAB_SHOWFOURIER;フーリエ (DCT)
+TP_LOCALLAB_SHOWLAPLACE;Δ ラプラシアン (最初)
+TP_LOCALLAB_SHOWLC;マスクと調節
+TP_LOCALLAB_SHOWMASK;マスクの表示
+TP_LOCALLAB_SHOWMASKCOL_TOOLTIP;調整具合を表示させます\n但し、見られる表示は1度に1種類(色と明るさ、或いは露光のセクション)だけです\n'マスクと調整'のドロップダウンボックスで、'なし' 或いは マスクを表示できるものを選択します\n\nマスクの処理はは形状検出の前に行われます
+TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP;フーリエによる処理を表示します:\n処理の異なる段階を表示\nラプラス - しきい値に応じた2次微分を行う(最初のステップ)\nフーリエ -変換したラプラスをDCTで表示\nポアソン - ポアソンDCEの解を表示\n標準化 - 輝度の標準化なしに結果を表示
+TP_LOCALLAB_SHOWMASKTYP1;ぼかしとノイズ
+TP_LOCALLAB_SHOWMASKTYP2;ノイズ除去
+TP_LOCALLAB_SHOWMASKTYP3;ぼかしとノイズ + ノイズ除去
+TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;マスクと調節を選択出来ます\nぼかしとノイズ:この場合は、'ノイズ除去'は使えません\nノイズ除去:この場合は、'ぼかしとノイズ'は使えません\n\nぼかしとノイズ+ノイズ除去:マスクを共用しますが、'調節を表示'と'スコープ'の扱いには注意が必要です
+TP_LOCALLAB_SHOWMNONE;なし
+TP_LOCALLAB_SHOWMODIF;マスクなしで変更を表示
+TP_LOCALLAB_SHOWMODIFMASK;マスクと共に変更を表示
+TP_LOCALLAB_SHOWNORMAL;輝度の標準化(なし)
+TP_LOCALLAB_SHOWPLUS;マスクと調節- 平滑化によるぼかしとノイズ低減
+TP_LOCALLAB_SHOWPOISSON;ポアソン (pde f)
+TP_LOCALLAB_SHOWR;マスクと調節
+TP_LOCALLAB_SHOWREF;ΔEのプレビュー
+TP_LOCALLAB_SHOWS;マスクと調節
+TP_LOCALLAB_SHOWSTRUC;構造スポットを表示
+TP_LOCALLAB_SHOWSTRUCEX;構造スポットを表示 - "通常"では不可
+TP_LOCALLAB_SHOWT;マスクと調節
+TP_LOCALLAB_SHOWVI;マスクと調節
+TP_LOCALLAB_SHRESFRA;シャドウ/ハイライト
+TP_LOCALLAB_SHTRC_TOOLTIP;TRC(諧調再現カーブ)を使って画像のトーンを調節します。\nガンマは主に明るいトーンに作用します\n勾配は主に暗いトーンに作用します
+TP_LOCALLAB_SH_TOOLNAME;シャドウ/ハイライト & トーンイコライザ - 5
+TP_LOCALLAB_SIGMAWAV;減衰応答
+TP_LOCALLAB_SIM;シンプル
+TP_LOCALLAB_SLOMASKCOL;スロープのマスク
+TP_LOCALLAB_SLOSH;スロープ
+TP_LOCALLAB_SOFT;ソフトライトと独自のレティネックス
+TP_LOCALLAB_SOFTM;ソフトライト
+TP_LOCALLAB_SOFTMETHOD_TOOLTIP;独自のレティネックスは他のレティネックス方式とは大きく異なります\nグレーと輝度のバランスに作用します
+TP_LOCALLAB_SOFTRADIUSCOL;ソフトな半径
+TP_LOCALLAB_SOFTRETI;アーティファクトの軽減 ΔE
+TP_LOCALLAB_SOFTRETI_TOOLTIP;透過マップを向上させるため色差を考慮します。
+TP_LOCALLAB_SOFT_TOOLNAME;ソフトライト & 独自のレティネックス - 6
+TP_LOCALLAB_SOURCE_GRAY;値
+TP_LOCALLAB_SPECCASE;特定のケース
+TP_LOCALLAB_SPECIAL;RGBカーブの特殊な利用
+TP_LOCALLAB_SPECIAL_TOOLTIP;Only for this RGB curve, disabled (or reduce effects) of Scope, mask...for example, if you want to have a negative effect.
+TP_LOCALLAB_SPOTNAME;新しいスポット
+TP_LOCALLAB_STD;標準
+TP_LOCALLAB_STR;強さ
+TP_LOCALLAB_STRBL;強さ
+TP_LOCALLAB_STREN;圧縮の強さ
+TP_LOCALLAB_STRENG;強さ
+TP_LOCALLAB_STRENGR;強さ
+TP_LOCALLAB_STRENGTH;ノイズ
+TP_LOCALLAB_STRGRID;強さ
+TP_LOCALLAB_STRRETI_TOOLTIP;レティネックスの強さが0.2より小さい場合は霞除去だけが有効となります。\nレティネックスの強さが0.1以上の場合、霞除去の作用は輝度だけです。
+TP_LOCALLAB_STRUC;構造
+TP_LOCALLAB_STRUCCOL;構造
+TP_LOCALLAB_STRUCCOL1;構造のスポット
+TP_LOCALLAB_STRUCT_TOOLTIP;形状検出で構造を計算に入れるため、Sobelアルゴリズムを使います。\n“マスクと調節の構造スポットを表示”を有効にすればプレビューを見ることが出来ます。
+TP_LOCALLAB_STRUMASKCOL;構造マスクの強さ
+TP_LOCALLAB_STRUMASK_TOOLTIP;Generate a structure mask with difference between surface areas and reliefs.\nIf structure mask as tool is enabled, this mask is used in addition to the other tools (gamma, slope, contrast curve ...)
+TP_LOCALLAB_STYPE;形状の方式
+TP_LOCALLAB_STYPE_TOOLTIP;2つのタイプから選びます:\nシンメトリックは左と右の境界線、上部と底部の境界線がリンクしています\n独立は全ての境界線を独立で動かすことが出来ます
+TP_LOCALLAB_SYM;シンメトリック(マウス)
+TP_LOCALLAB_SYMSL;シンメトリック(マウス + スライダー)
+TP_LOCALLAB_TARGET_GRAY;グレーポイントの目標
+TP_LOCALLAB_THRES;構造のしきい値
+TP_LOCALLAB_THRESDELTAE;ΔE-スコープのしきい値
+TP_LOCALLAB_THRESRETI;しきい値
+TP_LOCALLAB_THRESWAV;バランスのしきい値
+TP_LOCALLAB_TLABEL;TM データ 最小値=%1 最大値=%2 平均値=%3 標準偏差=%4 (しきい値)
+TP_LOCALLAB_TLABEL2;TM 効果 Tm=%1 TM=%2
+TP_LOCALLAB_TLABEL_TOOLTIP;これは透過マップの結果を示しています。\n最小値と最大値は分散に使われます。\nTm、TMはそれぞれ透過マップの最小値と最大値です。\nしきい値を調整して標準化できます。
+TP_LOCALLAB_TM;トーンマッピング - 質感
+TP_LOCALLAB_TM_MASK;透過マップを使う
+TP_LOCALLAB_TONEMAPESTOP_TOOLTIP;エッジ停止を増やす - 或いは再加重平均の繰り返しを増やすと処理時間も増えます - 但し、その分効果が増します
+TP_LOCALLAB_TONEMAPGAM_TOOLTIP;Gamma moves the action of tone-mapping to shadows or highlights.
+TP_LOCALLAB_TONEMAPREWEI_TOOLTIP;In some cases tone mapping may result in a cartoonish appearance, and in some rare cases soft but wide halos may appear.\n Increasing the number of reweighting iterates will help fight some of these problems.
+TP_LOCALLAB_TONEMAP_TOOLTIP;トーンマッピング - メインメニューの同じ機能は必ず無効にする
+TP_LOCALLAB_TONEMASCALE_TOOLTIP;This control gives meaning to the difference between "local" and "global" contrast.\nThe greater it is the larger a detail needs to be in order to be boosted
+TP_LOCALLAB_TONE_TOOLNAME;トーンマッピング - 4
+TP_LOCALLAB_TOOLCOL;機能としての構造マスク
+TP_LOCALLAB_TOOLMASK;機能
+TP_LOCALLAB_TRANSIT;境界の階調調整
+TP_LOCALLAB_TRANSITGRAD;境界の差異 XY
+TP_LOCALLAB_TRANSITGRAD_TOOLTIP;Y軸方向の境界に対するX軸方向の境界の割合を変える
+TP_LOCALLAB_TRANSITVALUE;境界値
+TP_LOCALLAB_TRANSITWEAK;境界値の減衰
+TP_LOCALLAB_TRANSITWEAK_TOOLTIP;境界値の減衰を調節 : 処理の滑らかさを変える - 1 線形 - 2 パラボリック - 3 3乗
+TP_LOCALLAB_TRANSIT_TOOLTIP;作用が及ぶ部分と及ばない部分の境界の平滑化を調整します
+TP_LOCALLAB_TRANSMISSIONGAIN;透過のゲイン
+TP_LOCALLAB_TRANSMISSIONMAP;透過マップ
+TP_LOCALLAB_TRANSMISSION_TOOLTIP;透過に応じて透過を決めるカーブです\n横軸はマイナス値(最小)から平均値、プラス値(最大)まであります\n\nこのカーブを使って透過を変え、アーティファクトを軽減できます
+TP_LOCALLAB_USEMASK;マスクの使う
+TP_LOCALLAB_VART;分散(コントラスト)
+TP_LOCALLAB_VIBRANCE;自然な彩度 - ウォーム & クール
+TP_LOCALLAB_VIB_TOOLNAME;自然な彩度 - ウォーム & クール - 3
+TP_LOCALLAB_VIS_TOOLTIP;選択したコントロールスポットを表示・非表示するためにはクリックします\n全てのコントロールスポットを表示・非表示するためにはCtrlを押しながらクリックします
+TP_LOCALLAB_WAMASKCOL;Ψ ウェーブレットレベルのマスク
+TP_LOCALLAB_WARM;ウォーム & -クールと偽色
+TP_LOCALLAB_WARM_TOOLTIP;このスライダーはホワイトバランスのようなCIECAMのアルゴリズムを使っています、選択したエリアの印象を暖かくしたり、冷たくしたりします。\n場合によっては、色のアーティファクトを軽減できます
+TP_LOCALLAB_WASDEN_TOOLTIP;最初の3つの細かいレベルのノイズを軽減\n3より粗いレベルのノイズを軽減
+TP_LOCALLAB_WAV;レベルによるローカルコントラスト調整
+TP_LOCALLAB_WAVBLUR_TOOLTIP;残差画像を含め、分解された各詳細レベルに対してぼかしを実行します
+TP_LOCALLAB_WAVCOMP;レベルごとの圧縮
+TP_LOCALLAB_WAVCOMPRE;レベルごとの(非)圧縮
+TP_LOCALLAB_WAVCOMPRE_TOOLTIP;トーンマッピング或いはレベルごとのローカルコントラストが軽減出来ます\n横軸がレベルの番手を表しています
+TP_LOCALLAB_WAVCOMP_TOOLTIP;ウェーブレットによる分解の方向(水平、垂直、斜め)に応じたローカルコントラストを調整できます
+TP_LOCALLAB_WAVCON;レベルによるコントラスト調整
+TP_LOCALLAB_WAVCONTF_TOOLTIP;詳細レベルによるコントラスト調整と似ています:横軸がレベルを表しています
+TP_LOCALLAB_WAVDEN;レベルによる輝度ノイズの軽減(0 1 2 + 3、それ以上)
+TP_LOCALLAB_WAVE;Ψ ウェーブレット
+TP_LOCALLAB_WAVEDG;ローカルコントラスト
+TP_LOCALLAB_WAVEEDG_TOOLTIP;少なくとも最初の4つのレベルが使える必要があります
+TP_LOCALLAB_WAVGRAD_TOOLTIP;ローカルコントラストの”輝度”に関する諧調調整
+TP_LOCALLAB_WAVHIGH;Ψ ウェーブレット 高
+TP_LOCALLAB_WAVLEV;レベルごとのぼかし
+TP_LOCALLAB_WAVLOW;Ψ ウェーブレット 低
+TP_LOCALLAB_WAVMASK;Ψ ローカルコントラストのレベルのマスク
+TP_LOCALLAB_WAVMASK_TOOLTIP;Allows fine work on mask levels contrasts (structure)
+TP_LOCALLAB_WAVMED;Ψ ウェーブレット 普通
+TP_LOCALLAB_WEDIANHI;メディアン 高
+TP_LOCALLAB_WHITE_EV;ホワイトEv
+TP_LOCAL_HEIGHT;ボトム
+TP_LOCAL_HEIGHT_T;トップ
+TP_LOCAL_WIDTH;右
+TP_LOCAL_WIDTH_L;左
+TP_LOCRETI_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Equalize action.\nHigh = Reinforce high light.\n
TP_METADATA_EDIT;変更を適用
TP_METADATA_MODE;メタデータ コピーモード
TP_METADATA_STRIP;メタデータを全て取り除く
@@ -1811,8 +2877,26 @@ TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;形状: 0=長方形、50=楕円形、100=円
TP_PCVIGNETTE_STRENGTH;強さ
TP_PCVIGNETTE_STRENGTH_TOOLTIP;終点位置でのフィルターの強さ(四隅)
TP_PDSHARPENING_LABEL;キャプチャーシャープニング
+TP_PERSPECTIVE_CAMERA_CROP_FACTOR;クロップ・ファクター
+TP_PERSPECTIVE_CAMERA_FOCAL_LENGTH;焦点距離
+TP_PERSPECTIVE_CAMERA_FRAME;補正
+TP_PERSPECTIVE_CAMERA_PITCH;垂直
+TP_PERSPECTIVE_CAMERA_ROLL;回転
+TP_PERSPECTIVE_CAMERA_SHIFT_HORIZONTAL;水平移動
+TP_PERSPECTIVE_CAMERA_SHIFT_VERTICAL;垂直移動
+TP_PERSPECTIVE_CAMERA_YAW;水平
TP_PERSPECTIVE_HORIZONTAL;水平
TP_PERSPECTIVE_LABEL;パースペクティブ
+TP_PERSPECTIVE_METHOD;方式
+TP_PERSPECTIVE_METHOD_CAMERA_BASED;カメラベース
+TP_PERSPECTIVE_METHOD_SIMPLE;シンプル
+TP_PERSPECTIVE_POST_CORRECTION_ADJUSTMENT_FRAME;補正後の調整
+TP_PERSPECTIVE_PROJECTION_PITCH;垂直
+TP_PERSPECTIVE_PROJECTION_ROTATE;回転
+TP_PERSPECTIVE_PROJECTION_SHIFT_HORIZONTAL;水平移動
+TP_PERSPECTIVE_PROJECTION_SHIFT_VERTICAL;垂直移動
+TP_PERSPECTIVE_PROJECTION_YAW;水平
+TP_PERSPECTIVE_RECOVERY_FRAME;回復
TP_PERSPECTIVE_VERTICAL;垂直
TP_PFCURVE_CURVEEDITOR_CH;色相
TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;デフリンジの強さをコントロールします。値が高いと効果が強まり、低いと弱まります
@@ -1830,6 +2914,10 @@ TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;PDAFの場合は水平方向だ
TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;垂直方向
TP_PREPROCESS_NO_FOUND;未検出
TP_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ
+TP_PREPROCWB_LABEL;ホワイトバランスの前処理
+TP_PREPROCWB_MODE;モード
+TP_PREPROCWB_MODE_AUTO;自動
+TP_PREPROCWB_MODE_CAMERA;カメラ
TP_PRSHARPENING_LABEL;リサイズ後のシャープニング
TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープニングします。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。
TP_RAWCACORR_AUTO;自動補正
@@ -1934,8 +3022,8 @@ TP_RESIZE_SCALE;スケール
TP_RESIZE_SPECIFY;条件指定:
TP_RESIZE_W;幅:
TP_RESIZE_WIDTH;幅
-TP_RETINEX_CONTEDIT_HSL;ヒストグラムイコライザ HSL
-TP_RETINEX_CONTEDIT_LAB;ヒストグラムイコライザ L*a*b*
+TP_RETINEX_CONTEDIT_HSL;HSLヒストグラム
+TP_RETINEX_CONTEDIT_LAB;L*a*b*ヒストグラム
TP_RETINEX_CONTEDIT_LH;色相イコライザ
TP_RETINEX_CONTEDIT_MAP;イコライザ
TP_RETINEX_CURVEEDITOR_CD;輝度=f(輝度)
@@ -1947,8 +3035,8 @@ TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;このカーブは単独で使うことも、
TP_RETINEX_EQUAL;イコライザ
TP_RETINEX_FREEGAMMA;フリーガンマ
TP_RETINEX_GAIN;ゲイン
-TP_RETINEX_GAINOFFS;ゲインとオフセット(明るさ)
-TP_RETINEX_GAINTRANSMISSION;ゲインの透過
+TP_RETINEX_GAINOFFS;透過マップのゲインとオフセット
+TP_RETINEX_GAINTRANSMISSION;ゲイン
TP_RETINEX_GAINTRANSMISSION_TOOLTIP;目標とする輝度を得るために、透過マップ増幅したり減衰させたりします。\n横軸:左から最小、平均、最大となります。\n縦軸:ゲイン
TP_RETINEX_GAMMA;ガンマ
TP_RETINEX_GAMMA_FREE;フリー
@@ -1957,8 +3045,8 @@ TP_RETINEX_GAMMA_LOW;低
TP_RETINEX_GAMMA_MID;中間
TP_RETINEX_GAMMA_NONE;なし
TP_RETINEX_GAMMA_TOOLTIP;レティネックス機能の前後のガンマで画像のトーンを修復します。レティネックスのカーブや他のカーブ(Lab調整、露光補正などのカーブ)とは異なるカーブです。
-TP_RETINEX_GRAD;透過のグラデーション
-TP_RETINEX_GRADS;強さのグラデーション
+TP_RETINEX_GRAD;透過マップの勾配
+TP_RETINEX_GRADS;強さの勾配
TP_RETINEX_GRADS_TOOLTIP;スライダー値が0の場合、全ての繰り返しは同じになります\n0より大きい場合は、繰り返しが増加すると強さが減ります。0より小さい場合はその逆です
TP_RETINEX_GRAD_TOOLTIP;スライダー値が0の場合、全ての繰り返しが同じになります\n0より大きい場合は、繰り返しが増加すると差異としきい値が減ります。0より小さい場合はその逆です
TP_RETINEX_HIGH;高
@@ -1978,25 +3066,25 @@ TP_RETINEX_MAP;方式
TP_RETINEX_MAP_GAUS;ガウシアンマスク
TP_RETINEX_MAP_MAPP;シャープマスク (一部ウェーブレット)
TP_RETINEX_MAP_MAPT;シャープマスク (全てウェーブレット)
-TP_RETINEX_MAP_METHOD_TOOLTIP;ガウス関数を利用して生成したマスクをハロやアーティファクトを減らすために使う方法です\n\nカーブだけ:マスクにコントラストカーブを適用します\nアーティファクト発生に注意\n\nガウシアンマスク:元画像に対しガウス暈しでマスクを生成し、それを使います\n処理時間短い\n\nシャープマスク:元画像に対しウェーブレットでマスクを生成し、それを使います\n処理時間が長い
+TP_RETINEX_MAP_METHOD_TOOLTIP;ガウス関数(半径や方式)で生成されたマスクを利用してハロやアーティファクトを減らします\n\nカーブだけ:マスクにコントラストカーブを適用します\nアーティファクト発生に注意\n\nガウシアンマスク:元画像に対しガウス暈しでマスクを生成し、それを使います\n処理時間短い\n\nシャープマスク:元画像に対しウェーブレットでマスクを生成し、それを使います\n処理時間が長い
TP_RETINEX_MAP_NONE;なし
TP_RETINEX_MEDIAN;透過のメディアンフィルター
TP_RETINEX_METHOD;方法
-TP_RETINEX_METHOD_TOOLTIP;高=明瞭な部分のレンダリングを補正します\n均等=明瞭な部分と不明瞭な部分をバランスよく補正します\n低=不明瞭な部分を重点的に補正します\nハイライト=ハイライト部分のマゼンタ被りを補正します
+TP_RETINEX_METHOD_TOOLTIP;高=光度の高い部分のレンダリングを補正します\n均等=光度の高い部分と低い部分を均等に補正します\n低=光度の低い部分を重点的に補正します\nハイライト=ハイライト部分のマゼンタ被りを補正します
TP_RETINEX_MLABEL;霞のない画像に修復 最小値=%1 最大値=%2
TP_RETINEX_MLABEL_TOOLTIP;最小値=0 最大値=32768に近づける\nバランスの良い霞のない画像
TP_RETINEX_NEIGHBOR;半径
TP_RETINEX_NEUTRAL;リセット
TP_RETINEX_NEUTRAL_TIP;全てのスライダー値とカーブをデフォルトの状態に戻します
-TP_RETINEX_OFFSET;オフセット(明るさ)
-TP_RETINEX_SCALES;ガウス暈しのグラデーション
+TP_RETINEX_OFFSET;オフセット
+TP_RETINEX_SCALES;ガウスフィルタの勾配
TP_RETINEX_SCALES_TOOLTIP;スライダー値が0の場合、同一の作業を繰り返します\n0より大きい値を設定すると、繰り返し作業を増やした時に、スケールと隣接するピクセルに対する作用は減ります。0より小さい場合は、その逆です
TP_RETINEX_SETTINGS;設定
TP_RETINEX_SKAL;スケール
-TP_RETINEX_SLOPE;フリーなガンマの勾配
+TP_RETINEX_SLOPE;フリーガンマの勾配
TP_RETINEX_STRENGTH;強さ
TP_RETINEX_THRESHOLD;しきい値
-TP_RETINEX_THRESHOLD_TOOLTIP;インとアウトの制限を意味します\nイン=原画像\nアウト=ガウス暈しを施した原画像
+TP_RETINEX_THRESHOLD_TOOLTIP;インとアウトの制限を意味します\nイン=原画像\nアウト=ガウスフィルタを施した原画像
TP_RETINEX_TLABEL;透過 差異の最小値=%1 最大値=%2 平均=%3 標準偏差=%4
TP_RETINEX_TLABEL2;透過 最小値=%1 最大値=%2
TP_RETINEX_TLABEL_TOOLTIP;透過マップの結果を表示しています\n差異の最小値と最大値です\n平均と標準偏差\n透過マップの最小値と最大値です
@@ -2024,11 +3112,11 @@ TP_ROTATE_DEGREE;角度
TP_ROTATE_LABEL;回転
TP_ROTATE_SELECTLINE;直線選択・角度補正ツール
TP_SAVEDIALOG_OK_TIP;ショートカット Ctrl-Enter
-TP_SHADOWSHLIGHTS_HIGHLIGHTS;ハイライトを暗く
+TP_SHADOWSHLIGHTS_HIGHLIGHTS;ハイライト
TP_SHADOWSHLIGHTS_HLTONALW;ハイライトトーンの幅
TP_SHADOWSHLIGHTS_LABEL;シャドウ/ハイライト
TP_SHADOWSHLIGHTS_RADIUS;半径
-TP_SHADOWSHLIGHTS_SHADOWS;シャドウを明るく
+TP_SHADOWSHLIGHTS_SHADOWS;シャドウ
TP_SHADOWSHLIGHTS_SHTONALW;シャドウトーンの幅
TP_SHARPENEDGE_AMOUNT;適用量
TP_SHARPENEDGE_LABEL;エッジ
@@ -2105,14 +3193,20 @@ TP_WAVELET_B2;残差
TP_WAVELET_BACKGROUND;背景
TP_WAVELET_BACUR;カーブ
TP_WAVELET_BALANCE;コントラストバランス 斜め/垂直-水平
-TP_WAVELET_BALANCE_TOOLTIP;ウェーブレットの方向で垂直-水平と斜めのバランスを変えます\nコントラスト、色度、或いは残差画像のトーンマッピングが有効の場合、バランスにより効果が増幅されます
+TP_WAVELET_BALANCE_TOOLTIP;ウェーブレットの解析方向の垂直-水平と斜めのバランスを変えます\nコントラスト、色度、或いは残差画像のトーンマッピングが有効の場合、バランスにより効果が増幅されます
TP_WAVELET_BALCHRO;色度のバランス
+TP_WAVELET_BALCHROM;色ノイズ除去のイコライザ ブルー/イエロー レッド/グリーン
TP_WAVELET_BALCHRO_TOOLTIP;有効にすると、’コントラストバランス’のカーブやスライダーも色度のバランスに影響します
+TP_WAVELET_BALLUM;輝度ノイズ除去のイコライザ 白黒
TP_WAVELET_BANONE;なし
TP_WAVELET_BASLI;スライダー
-TP_WAVELET_BATYPE;バランス方式
+TP_WAVELET_BATYPE;コントラストバランス方式
+TP_WAVELET_BL;ぼかしのレベル
+TP_WAVELET_BLCURVE;詳細レベルによるぼかし
+TP_WAVELET_BLURFRAME;ぼかし
+TP_WAVELET_BLUWAV;減衰応答
TP_WAVELET_CBENAB;カラートーンとカラーバランス
-TP_WAVELET_CB_TOOLTIP;高い値は、’カラートーン’と併用するか、或いはカラートーンは使わないで単独で使います。\n低い値の場合は前景の色合いを変えずに背景(sky, ...) のホワイトバランスを変えるような効果を得られます。一般的にはコントラストが高くなる印象があります。
+TP_WAVELET_CB_TOOLTIP;高い値は、’カラートーン’と併用するか、或いはカラートーンは使わないで単独で使います。\n低い値の場合は前景の色合いを変えずに背景(空 ...) のホワイトバランスを変えるような効果を得られます。一般的にはコントラストが高くなる印象があります。
TP_WAVELET_CCURVE;ローカルコントラスト
TP_WAVELET_CH1;全ての色
TP_WAVELET_CH2;明清色 - 純色
@@ -2120,22 +3214,32 @@ TP_WAVELET_CH3;コントラストのレベルとリンク
TP_WAVELET_CHCU;カーブ
TP_WAVELET_CHR;色度とコントラストのリンクの強さ
TP_WAVELET_CHRO;純色 - 明清色のしきい値
+TP_WAVELET_CHROFRAME;色ノイズの除去
+TP_WAVELET_CHROMAFRAME;色度
+TP_WAVELET_CHROMCO;番手の高いレベルの色度
+TP_WAVELET_CHROMFI;番手の低いレベルの色度
TP_WAVELET_CHRO_TOOLTIP;どのレベルで明清色と純色を調整するか決めます\n1-x:純色を調整するレベルの範囲\nx-9:明清色を調整するレベルの範囲\n\n但し、値がレベルの総数より多い場合は機能が無効となります
+TP_WAVELET_CHRWAV;色度のぼかし
TP_WAVELET_CHR_TOOLTIP;色度を”コントラストレベル”と”色度とコントラストのリンクの強さ”の相関関係で調整します
TP_WAVELET_CHSL;スライダー
TP_WAVELET_CHTYPE;調整の方法
+TP_WAVELET_CLA;明瞭
+TP_WAVELET_CLARI;シャープマスクと明瞭
TP_WAVELET_COLORT;レッド/グリーンの不透明度
TP_WAVELET_COMPCONT;コントラスト
TP_WAVELET_COMPGAMMA;ガンマの圧縮
TP_WAVELET_COMPGAMMA_TOOLTIP;残差画像のガンマを調整することで、画像データとヒストグラムの均衡を図ります。
TP_WAVELET_COMPTM;トーンマッピング
TP_WAVELET_CONTEDIT;'後の' コントラストカーブ
+TP_WAVELET_CONTFRAME;コントラスト - 圧縮
TP_WAVELET_CONTR;色域
TP_WAVELET_CONTRA;コントラスト
+TP_WAVELET_CONTRASTEDIT;細かい~大まか レベルの指定
TP_WAVELET_CONTRAST_MINUS;コントラスト -
TP_WAVELET_CONTRAST_PLUS;コントラスト +
TP_WAVELET_CONTRA_TOOLTIP;残差画像のコントラストを変えます
TP_WAVELET_CTYPE;色の制御
+TP_WAVELET_CURVEEDITOR_BL_TOOLTIP;拡大率が300%より上になると無効になります
TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;元画像のローカルコントラストに応じてローカルコントラストを調節します\n横軸の低い部分は細かいローカルコントラストを表しています(実質値10~20)\n50%はローカルコントラストの平均(実質値100~300)を表しています\n66%はローカルコントラストの標準偏差(実質値300~800)を表しています\n100%はローカルコントラストの最大値を表しています(実質値3000~8000)
TP_WAVELET_CURVEEDITOR_CH;コントラストレベル=f(色相)
TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;色相に応じて各レベルのコントラストを調節します\n色域抑制のカーブ調整と重複しないように注意します\nウェーブレットのコントラストレベルスライダー値が0の場合は効果はありません
@@ -2150,11 +3254,15 @@ TP_WAVELET_DAUB4;D4 - 標準
TP_WAVELET_DAUB6;D6 - 標準プラス
TP_WAVELET_DAUB10;D10 - やや高い
TP_WAVELET_DAUB14;D14 - 高い
+TP_WAVELET_DAUBLOCAL;ウェーブレット エッジ検出の効果
TP_WAVELET_DAUB_TOOLTIP;ドブシー関数の係数を変更します\nD4=標準的なエッジ検出の効果\nD14=通常はエッジ検出の効果が高いが、処理時間が約10%増加\n\n初めのレベルの質だけでなくエッジ検出にも影響します。但し、レベル質は厳格に係数の種類に比例している訳ではありません。画像や使い方にも影響されます。
+TP_WAVELET_DIRFRAME;方向によるコントラスト
TP_WAVELET_DONE;垂直
TP_WAVELET_DTHR;対角線
TP_WAVELET_DTWO;水平
TP_WAVELET_EDCU;カーブ
+TP_WAVELET_EDEFFECT;減衰応答
+TP_WAVELET_EDEFFECT_TOOLTIP;このスライダーは機能の最大効果を受けるコントラスト値の範囲を調整するものです。最大値(2.5)を設定すると機能の効果が無効となります。
TP_WAVELET_EDGCONT;ローカルコントラスト
TP_WAVELET_EDGCONT_TOOLTIP;スライダーを左に動かすとコントラストが減り、右に動かすと増えます\n底部の左、天井部の左、底部の右、天井部の右は、それぞれ低いコントラスト、平均的コントラスト、平均+1標準偏差のコントラスト、最も高いコントラストを示しています
TP_WAVELET_EDGE;エッジのシャープネス
@@ -2174,10 +3282,11 @@ TP_WAVELET_EDSL;しきい値スライダー
TP_WAVELET_EDTYPE;ローカルコントラストの方式
TP_WAVELET_EDVAL;強さ
TP_WAVELET_FINAL;最終調整
+TP_WAVELET_FINCFRAME;最終的なローカルコントラスト
TP_WAVELET_FINEST;最も細かい
-TP_WAVELET_HIGHLIGHT;ハイライトの輝度範囲
+TP_WAVELET_HIGHLIGHT;細かいレベルの輝度調整範囲
TP_WAVELET_HS1;全輝度範囲
-TP_WAVELET_HS2;シャドウ-ハイライト
+TP_WAVELET_HS2;指定した輝度範囲
TP_WAVELET_HUESKIN;肌色の色相
TP_WAVELET_HUESKIN_TOOLTIP;底部の2つのポイントは、色相変化が始まる部分に設定されています、天井部の2つのポイントは変化が終わる所で、色相調整の効果が最も高い部分です\n\n設定ポイントを著しく動かす必要がある場合、或いはアーティファクトが発生するようであれば、ホワイトバランスが不適切と考えられます
TP_WAVELET_HUESKY;色相の範囲(デフォルト:青空)
@@ -2185,7 +3294,7 @@ TP_WAVELET_HUESKY_TOOLTIP;底部の2つのポイントは、色相変化が始
TP_WAVELET_ITER;デルタバランスのレベル
TP_WAVELET_ITER_TOOLTIP;スライダーを左に動かすと、低いレベルのデルタが増え、高いレベルのデルタが減ります\n右に動かすとその逆です
TP_WAVELET_LABEL;ウェーブレット
-TP_WAVELET_LARGEST;最も粗い
+TP_WAVELET_LARGEST;最も大まか
TP_WAVELET_LEVCH;色度
TP_WAVELET_LEVDIR_ALL;全てのレベルと方向を合わせた画像
TP_WAVELET_LEVDIR_INF;選択したレベル以下を合わせた画像
@@ -2201,57 +3310,89 @@ TP_WAVELET_LEVTWO;レベル3
TP_WAVELET_LEVZERO;レベル1
TP_WAVELET_LINKEDG;エッジのシャープネスの強さとリンク
TP_WAVELET_LIPST;高度なアルゴリズム
-TP_WAVELET_LOWLIGHT;シャドウの輝度範囲
+TP_WAVELET_LOWLIGHT;大まかなレベルの輝度調整範囲
+TP_WAVELET_LOWTHR_TOOLTIP;詳細とノイズの増幅を避けます
TP_WAVELET_MEDGREINF;最初のレベル
TP_WAVELET_MEDI;青空のアーティファクトを軽減
TP_WAVELET_MEDILEV;エッジ検出
TP_WAVELET_MEDILEV_TOOLTIP;エッジの検出を有効にした際には、次の操作が奨められます:\n- アーティファクト発生を避けるため低いレベルのコントラストを使わない\n- グラデーション感度では高い値を使う\n\n効果を和らげるには、ノイズ低減とリファインの’リファイン’を下げる
+TP_WAVELET_MERGEC;色度を融合
+TP_WAVELET_MERGEL;輝度を融合
TP_WAVELET_NEUTRAL;ニュートラル
TP_WAVELET_NOIS;ノイズ低減
TP_WAVELET_NOISE;ノイズ低減とリファイン
+TP_WAVELET_NOISE_TOOLTIP;詳細レベル4の輝度ノイズ除去が20以上の時にはアグレッシブモードが使われます\n色ノイズ除去で、大まかなレベルの値が20以上の時は、アグレッシブモードが使われます
TP_WAVELET_NPHIGH;高い
TP_WAVELET_NPLOW;低い
TP_WAVELET_NPNONE;なし
TP_WAVELET_NPTYPE;隣接するピクセルに対する効果
TP_WAVELET_NPTYPE_TOOLTIP;このアルゴリズムは近傍する8つのピクセルを使って比較します。違いが少ない場合に、エッジを強化します。
+TP_WAVELET_OFFSET_TOOLTIP;オフセットはシャドウとハイライトのバランスを調整する機能です\n 高い値を設定するとシャドウ部分のコントラスト強化が増幅されます。最小コントラストのしきい値と合わせて使えば、コントラストを高くしたい部分の見極めに役立つでしょう
+TP_WAVELET_OLDSH;マイナス値が使えるアルゴリズム
TP_WAVELET_OPACITY;ブルー/イエローの不透明度
TP_WAVELET_OPACITYW;コントラストバランス d/v-hカーブ
TP_WAVELET_OPACITYWL;最終的なローカルコントラスト
TP_WAVELET_OPACITYWL_TOOLTIP;ウェーブレット処理の最後で最終的なローカルコントラストを調整します\n\nイコライザは左から右に向かって、最も細かいローカルコントラストから大きいローカルコントラストを表しています
TP_WAVELET_PASTEL;明清色の色度
TP_WAVELET_PROC;プロセス
+TP_WAVELET_PROTAB;保護
+TP_WAVELET_RADIUS;シャドウ/ハイライトの半径
+TP_WAVELET_RANGEAB;aとbの範囲 %
TP_WAVELET_RE1;強める
TP_WAVELET_RE2;変えない
TP_WAVELET_RE3;弱める
-TP_WAVELET_RESCHRO;色度
+TP_WAVELET_RESBLUR;輝度のぼかし
+TP_WAVELET_RESBLURC;色度のぼかし
+TP_WAVELET_RESBLUR_TOOLTIP;拡大率が500%以上の場合は作用が無効となります
+TP_WAVELET_RESCHRO;強さ
TP_WAVELET_RESCON;シャドウ
TP_WAVELET_RESCONH;ハイライト
TP_WAVELET_RESID;残差画像
TP_WAVELET_SAT;純色の色度
TP_WAVELET_SETTINGS;ウェーブレットの設定
-TP_WAVELET_SKIN;色相-トーン (肌色) の目標/保護
+TP_WAVELET_SHA;シャープマスク
+TP_WAVELET_SHFRAME;シャドウ/ハイライト
+TP_WAVELET_SHOWMASK;ウェーブレットの'マスク'を表示
+TP_WAVELET_SIGMA;減衰応答
+TP_WAVELET_SIGMAFIN;減衰応答
+TP_WAVELET_SIGMA_TOOLTIP;コントラストスライダーの調整効果は、中間的なマイクロコントラストは強く、低い、或いは高いマイクロコントラストはそうでもありません。\n減衰応答は、この調整作用を極端なコントラスト値に向けて、どれだけ素早く減衰させるかコントロールするスライダーです。\n高い値を設定すると、減衰が強く作用するマイクロコントラストの領域が広がりますが、アーティファクトが発生することがあります。\n低い値を設定すると、減衰が強く作用するマイクロコントラストの領域が狭くなるので、よりピンポイントに効果が表れます。
+TP_WAVELET_SKIN;肌色の目標/保護
TP_WAVELET_SKIN_TOOLTIP;-100にすると肌色のトーンだけが調整の対象になります\n0にすると全てのカラートーンが調整されます\n+100にすると肌色のトーンは保護され、他のカラートーンが調整されます
-TP_WAVELET_SKY;色相-トーン(青空)の目標/保護
+TP_WAVELET_SKY;色相の目標/保護
TP_WAVELET_SKY_TOOLTIP;-100にすると青空のトーンだけが調整の対象になります\n0にすると全てのカラートーンが調整されます\n+100にすると青空のトーンは保護され、他のカラートーンが調整されます
+TP_WAVELET_SOFTRAD;ソフトな半径
TP_WAVELET_STREN;強さ
TP_WAVELET_STRENGTH;強さ
TP_WAVELET_SUPE;エキストラ
TP_WAVELET_THR;シャドウのしきい値
-TP_WAVELET_THRESHOLD;ハイライトを調整するレベル
-TP_WAVELET_THRESHOLD2;シャドウを調整するレベル
-TP_WAVELET_THRESHOLD2_TOOLTIP;レベル9と(9-設定値)のレベルの間でシャドウの輝度が調整されます。他のレベルは輝度範囲全体で調整されます。
-TP_WAVELET_THRESHOLD_TOOLTIP;設定値以上のレベルだけが、ハイライトの輝度で調整されます。他のレベルは輝度範囲全体で調整されます。選べる設定値の最大数はシャドウレベルの設定に左右されます。
+TP_WAVELET_THRESHOLD;調整するレベル 細かい
+TP_WAVELET_THRESHOLD2;調整するレベル 大まか
+TP_WAVELET_THRESHOLD2_TOOLTIP;設定値より上の詳細レベルだけが、大まかなレベルの輝度範囲で設定された条件で調整されます。
+TP_WAVELET_THRESHOLD_TOOLTIP;設定値以下の詳細レベルだけが、細かいレベルの輝度範囲で設定された条件で調整されます。
+TP_WAVELET_THRESWAV;バランスのしきい値
TP_WAVELET_THRH;ハイライトのしきい値
TP_WAVELET_TILESBIG;大きいタイル
TP_WAVELET_TILESFULL;画像全体
TP_WAVELET_TILESIZE;タイルのサイズ
TP_WAVELET_TILESLIT;小さいタイル
TP_WAVELET_TILES_TOOLTIP;画像全体を処理する方が良い結果をもたらすので、推奨される選択です。タイルによる処理はRAMの容量が小さいユーザー向けです。必要なメモリー容量に関してはRawPediaを参照して下さい。
-TP_WAVELET_TMSTRENGTH;残差の効力を圧縮
+TP_WAVELET_TMEDGS;エッジ停止
+TP_WAVELET_TMSCALE;スケール
+TP_WAVELET_TMSTRENGTH;圧縮の強さ
TP_WAVELET_TMSTRENGTH_TOOLTIP;トーンマッピングの強さや残差画像のコントラストの圧縮を加減します。値が0以外の場合、露光補正パネルのトーンマッピングでは、強さとガンマのスライダー無効となります
TP_WAVELET_TMTYPE;圧縮の方法
TP_WAVELET_TON;カラートーン
+TP_WAVELET_TONFRAME;除外されたカラー
+TP_WAVELET_USH;なし
+TP_WAVELET_USHARP;明瞭の方式
+TP_WAVELET_USHARP_TOOLTIP;オリジン : ウェーブレットによる調整を含まないソースファイル\nウェーブレット : ウェーブレットによる調整を含むソースファイル
+TP_WAVELET_USH_TOOLTIP;シャープマスクを選択すると、ウェーブレットの設定が次の様に自動的に行われます:\n背景=ブラック、処理=レベル3以下...レベルは1~4の間で変えられます\n\n明瞭を選択すると、ウェーブレットの設定が次の様に自動的に行われます:\n背景=残差画像、処理=レベル7以上 レベルは5~10の間で変えられます
+TP_WAVELET_WAVLOWTHR;最小コントラストのしきい値
+TP_WAVELET_WAVOFFSET;オフセット
TP_WBALANCE_AUTO;自動補正
+TP_WBALANCE_AUTOITCGREEN;色温度の相関関係を繰り返し解析する
+TP_WBALANCE_AUTOOLD;RGBグレーを使う
+TP_WBALANCE_AUTO_HEADER;自動
TP_WBALANCE_CAMERA;カメラ
TP_WBALANCE_CLOUDY;曇天
TP_WBALANCE_CUSTOM;カスタム
@@ -2284,7 +3425,7 @@ TP_WBALANCE_LAMP_HEADER;ランプ
TP_WBALANCE_LED_CRS;CRS SP12 WWMR16
TP_WBALANCE_LED_HEADER;LED
TP_WBALANCE_LED_LSI;LSI Lumelex 2040
-TP_WBALANCE_METHOD;モード
+TP_WBALANCE_METHOD;方式
TP_WBALANCE_PICKER;ピック
TP_WBALANCE_SHADE;日陰
TP_WBALANCE_SIZE;サイズ:
@@ -2292,7 +3433,9 @@ TP_WBALANCE_SOLUX35;Solux 3500K
TP_WBALANCE_SOLUX41;Solux 4100K
TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
-TP_WBALANCE_SPOTWB;スポットWB
+TP_WBALANCE_SPOTWB;ピペットを使ってプレビュー画像のニュートラルな部分をピックアップ
+TP_WBALANCE_STUDLABEL;t検定 Itcwb: %1
+TP_WBALANCE_STUDLABEL_TOOLTIP;t検定の結果を表示\n低い値ほど相関関係が良いことになります\n値が0.002以下はエクセレント\n0.005以下は非常に良い\n0.01以下は良い\n0.05以下は十分\n0.5以上は悪い\n光源が標準的ではない場合は、t検定が良好であってもホワイトバラスが良いことにはなりません\nt検定結果が1000と表示された場合は反復解析が行われなかったことを意味します。良い結果と想定される前の計算結果が使われます
TP_WBALANCE_TEMPBIAS;自動ホワイトバランス 色温度のバイアス
TP_WBALANCE_TEMPBIAS_TOOLTIP;”自動ホワイトバランスの計算に変更を加えます”\n色温度を変えることで画像の暖かみを増やしたり、冷たさを増やしたりします。\n偏向の度合いは色温度の割合で表示されます\n従って計算値は "算出した色温度 + 算出した色温度 * 偏向"で計算したものです
TP_WBALANCE_TEMPERATURE;色温度
@@ -2300,7 +3443,6 @@ TP_WBALANCE_TUNGSTEN;タングステン
TP_WBALANCE_WATER1;水中 1
TP_WBALANCE_WATER2;水中 2
TP_WBALANCE_WATER_HEADER;水中
-The last update by firefly 2019-12-21
ZOOMPANEL_100;(100%)
ZOOMPANEL_NEWCROPWINDOW;新規ディテール ウィンドウを開く
ZOOMPANEL_ZOOM100;100%にズーム\nショートカット: z
@@ -2313,7 +3455,4 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!GENERAL_HELP;Help
-!HISTORY_MSG_TRANS_Method;Geometry - Method
-!TP_LENSGEOM_LIN;Linear
-!TP_LENSGEOM_LOG;Logarithmic
+!TP_WAVELET_FINCOAR_TOOLTIP;The left (positive) part of the curve acts on the finer levels (increase).\nThe 2 points on the abscissa represent the respective action limits of finer and coarser levels 5 and 6 (default).\nThe right (negative) part of the curve acts on the coarser levels (increase).\nAvoid moving the left part of the curve with negative values. Avoid moving the right part of the curve with positives values
diff --git a/rtdata/languages/default b/rtdata/languages/default
index e910d359a..672eaa764 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -2,6 +2,7 @@
#01 Developers should add translations to this file and then run the 'generateTranslationDiffs' Bash script to update other locales.
#02 Translators please append a comment here with the current date and your name(s) as used in the RawTherapee forum or GitHub page, e.g.:
#03 2525-12-24 Zager and Evans
+
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Credits
ABOUT_TAB_LICENSE;License
@@ -760,7 +761,7 @@ HISTORY_MSG_508;Local Spot circrad
HISTORY_MSG_509;Local Spot quality method
HISTORY_MSG_510;Local Spot transition
HISTORY_MSG_511;Local Spot thresh
-HISTORY_MSG_512;Local Spot ΔE -weakening
+HISTORY_MSG_512;Local Spot ΔE -decay
HISTORY_MSG_513;Local Spot scope
HISTORY_MSG_514;Local Spot structure
HISTORY_MSG_515;Local Adjustments
@@ -906,7 +907,7 @@ HISTORY_MSG_655;Local - SH mask slope
HISTORY_MSG_656;Local - Color soft radius
HISTORY_MSG_657;Local - Retinex Reduce artifacts
HISTORY_MSG_658;Local - CBDL soft radius
-HISTORY_MSG_659;Local Spot transition-weakening
+HISTORY_MSG_659;Local Spot transition-decay
HISTORY_MSG_660;Local - cbdl clarity
HISTORY_MSG_661;Local - cbdl contrast residual
HISTORY_MSG_662;Local - deNoise lum f 0
@@ -1165,6 +1166,38 @@ HISTORY_MSG_924;Local - Tool complexity mode
HISTORY_MSG_925;Local - Scope color tools
HISTORY_MSG_926;Local - Show mask type
HISTORY_MSG_927;Local - Shadow mask
+HISTORY_MSG_928;Local - Common color mask
+HISTORY_MSG_929;Local - Mask common scope
+HISTORY_MSG_930;Local - Mask Common blend luma
+HISTORY_MSG_931;Local - Mask Common enable
+HISTORY_MSG_932;Local - Mask Common radius soft
+HISTORY_MSG_933;Local - Mask Common laplacian
+HISTORY_MSG_934;Local - Mask Common chroma
+HISTORY_MSG_935;Local - Mask Common gamma
+HISTORY_MSG_936;Local - Mask Common slope
+HISTORY_MSG_937;Local - Mask Common curve C(C)
+HISTORY_MSG_938;Local - Mask Common curve L(L)
+HISTORY_MSG_939;Local - Mask Common curve LC(H)
+HISTORY_MSG_940;Local - Mask Common structure as tool
+HISTORY_MSG_941;Local - Mask Common structure strength
+HISTORY_MSG_942;Local - Mask Common H(H) curve
+HISTORY_MSG_943;Local - Mask Common FFT
+HISTORY_MSG_944;Local - Mask Common Blur radius
+HISTORY_MSG_945;Local - Mask Common contrast threshold
+HISTORY_MSG_946;Local - Mask Common shadows
+HISTORY_MSG_947;Local - Mask Common Contrast curve
+HISTORY_MSG_948;Local - Mask Common Wavelet curve
+HISTORY_MSG_949;Local - Mask Common Threshold levels
+HISTORY_MSG_950;Local - Mask Common GF strength
+HISTORY_MSG_951;Local - Mask Common GF angle
+HISTORY_MSG_952;Local - Mask Common soft radius
+HISTORY_MSG_953;Local - Mask Common blend chroma
+HISTORY_MSG_954;Local - Show-hide tools
+HISTORY_MSG_955;Local - Enable Spot
+HISTORY_MSG_BLSHAPE;Blur by level
+HISTORY_MSG_BLURCWAV;Blur chroma
+HISTORY_MSG_BLURWAV;Blur luminance
+HISTORY_MSG_BLUWAV;Attenuation Response
HISTORY_MSG_CAT02PRESET;Cat02 automatic preset
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
@@ -1188,6 +1221,7 @@ HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map
HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength
HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold
HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold
+HISTORY_MSG_EDGEFFECT;Edge Attenuation Response
HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative
HISTORY_MSG_FILMNEGATIVE_FILMBASE;Film base color
HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values
@@ -1224,7 +1258,9 @@ HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
HISTORY_MSG_PREPROCWB_MODE;Preprocess WB Mode
+HISTORY_MSG_PROTAB;Protection
HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
+HISTORY_MSG_RANGEAB;Range ab
HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift
HISTORY_MSG_RAW_BORDER;Raw border
@@ -1232,19 +1268,28 @@ HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling
HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold
HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace
+HISTORY_MSG_SIGMACOL;Chroma Attenuation Response
+HISTORY_MSG_SIGMADIR;Dir Attenuation Response
+HISTORY_MSG_SIGMAFIN;Final contrast Attenuation Response
+HISTORY_MSG_SIGMATON;Toning Attenuation Response
HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light
HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength
HISTORY_MSG_TEMPOUT;CAM02 automatic temperature
+HISTORY_MSG_THRESWAV;Balance threshold
HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor
HISTORY_MSG_TRANS_Method;Geometry - Method
HISTORY_MSG_WAVBALCHROM;Equalizer chrominance
HISTORY_MSG_WAVBALLUM;Equalizer luminance
-HISTORY_MSG_WAVCHROMFI;Chroma fine
+HISTORY_MSG_WAVBL;Blur levels
HISTORY_MSG_WAVCHROMCO;Chroma coarse
+HISTORY_MSG_WAVCHROMFI;Chroma fine
HISTORY_MSG_WAVCLARI;Clarity
HISTORY_MSG_WAVEDGS;Edge stopping
+HISTORY_MSG_WAVLOWTHR;Threshold low contrast
HISTORY_MSG_WAVMERGEC;Merge C
HISTORY_MSG_WAVMERGEL;Merge L
+HISTORY_MSG_WAVOFFSET;Offset
+HISTORY_MSG_WAVOLDSH;Old algorithm
HISTORY_MSG_WAVRADIUS;Radius Shadows-Highlight
HISTORY_MSG_WAVSCALE;Scale
HISTORY_MSG_WAVSHOWMASK;Show wavelet mask
@@ -1252,22 +1297,6 @@ HISTORY_MSG_WAVSIGMA;Attenuation Response
HISTORY_MSG_WAVSOFTRAD;Soft radius clarity
HISTORY_MSG_WAVSOFTRADEND;Soft radius final
HISTORY_MSG_WAVUSHAMET;Clarity method
-HISTORY_MSG_THRESWAV;Balance threshold
-HISTORY_MSG_BLUWAV;Attenuation Response
-HISTORY_MSG_WAVOLDSH;Old algorithm
-HISTORY_MSG_WAVOFFSET;Offset
-HISTORY_MSG_WAVLOWTHR;Threshold low contrast
-HISTORY_MSG_BLSHAPE;Blur by level
-HISTORY_MSG_WAVBL;Blur levels
-HISTORY_MSG_BLURWAV;Blur luminance
-HISTORY_MSG_BLURCWAV;Blur chroma
-HISTORY_MSG_EDGEFFECT;Edge Attenuation Response
-HISTORY_MSG_SIGMAFIN;Final contrast Attenuation Response
-HISTORY_MSG_SIGMATON;Toning Attenuation Response
-HISTORY_MSG_SIGMACOL;Chroma Attenuation Response
-HISTORY_MSG_SIGMADIR;Dir Attenuation Response
-HISTORY_MSG_RANGEAB;Range ab
-HISTORY_MSG_PROTAB;Protection
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOT;Snapshot
@@ -1451,7 +1480,6 @@ NAVIGATOR_XY_NA;x: --, y: --
OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead.
OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead.
OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead.
-PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings
PARTIALPASTE_ADVANCEDGROUP;Advanced Settings
PARTIALPASTE_BASICGROUP;Basic Settings
PARTIALPASTE_CACORRECTION;Chromatic aberration correction
@@ -1492,10 +1520,11 @@ PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction
PARTIALPASTE_IPTCINFO;IPTC
PARTIALPASTE_LABCURVE;L*a*b* adjustments
PARTIALPASTE_LENSGROUP;Lens Related Settings
-PARTIALPASTE_LOCALLAB;Local Adjustments
-PARTIALPASTE_LOCGROUP;Local
PARTIALPASTE_LENSPROFILE;Profiled lens correction
PARTIALPASTE_LOCALCONTRAST;Local contrast
+PARTIALPASTE_LOCALLAB;Local Adjustments
+PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings
+PARTIALPASTE_LOCGROUP;Local
PARTIALPASTE_METADATA;Metadata mode
PARTIALPASTE_METAGROUP;Metadata settings
PARTIALPASTE_PCVIGNETTE;Vignette filter
@@ -1687,8 +1716,8 @@ PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Enabling this option when working with f
PREFERENCES_SET;Set
PREFERENCES_SHOWBASICEXIF;Show basic Exif info
PREFERENCES_SHOWDATETIME;Show date and time
-PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar
PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation
+PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar
PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips
PREFERENCES_SHTHRESHOLD;Threshold for clipped shadows
PREFERENCES_SINGLETAB;Single Editor Tab Mode
@@ -1915,16 +1944,16 @@ TP_COLORAPP_GAMUT;Gamut control (L*a*b*)
TP_COLORAPP_GAMUT_TOOLTIP;Allow gamut control in L*a*b* mode.
TP_COLORAPP_HUE;Hue (h)
TP_COLORAPP_HUE_TOOLTIP;Hue (h) - angle between 0° and 360°.
-TP_COLORAPP_ILLUM;Illuminant
-TP_COLORAPP_ILLUM_TOOLTIP;Select the illuminant closest to the shooting conditions.\nIn general D50, but it can change depending on the time and lattitude.
-TP_COLORAPP_ILA;Incandescent StdA 2856K
TP_COLORAPP_IL41;D41
TP_COLORAPP_IL50;D50
TP_COLORAPP_IL55;D55
TP_COLORAPP_IL60;D60
TP_COLORAPP_IL65;D65
TP_COLORAPP_IL75;D75
+TP_COLORAPP_ILA;Incandescent StdA 2856K
TP_COLORAPP_ILFREE;Free
+TP_COLORAPP_ILLUM;Illuminant
+TP_COLORAPP_ILLUM_TOOLTIP;Select the illuminant closest to the shooting conditions.\nIn general D50, but it can change depending on the time and lattitude.
TP_COLORAPP_LABEL;CIE Color Appearance Model 2002
TP_COLORAPP_LABEL_CAM02;Image Adjustments
TP_COLORAPP_LABEL_SCENE;Scene Conditions
@@ -1954,9 +1983,9 @@ TP_COLORAPP_TCMODE_LABEL2;Curve mode 2
TP_COLORAPP_TCMODE_LABEL3;Curve chroma mode
TP_COLORAPP_TCMODE_LIGHTNESS;Lightness
TP_COLORAPP_TCMODE_SATUR;Saturation
-TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504
TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504
TP_COLORAPP_TEMPOUT_TOOLTIP;Disable to change temperature and tint
+TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504
TP_COLORAPP_TONECIE;Tone mapping using CIECAM02
TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect.
TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16 cd/m²).
@@ -2295,63 +2324,74 @@ TP_LENSPROFILE_USE_CA;Chromatic aberration
TP_LENSPROFILE_USE_GEOMETRIC;Geometric distortion
TP_LENSPROFILE_USE_HEADER;Correct
TP_LENSPROFILE_USE_VIGNETTING;Vignetting
+TP_LOCALCONTRAST_AMOUNT;Amount
+TP_LOCALCONTRAST_DARKNESS;Darkness level
+TP_LOCALCONTRAST_LABEL;Local Contrast
+TP_LOCALCONTRAST_LIGHTNESS;Lightness level
+TP_LOCALCONTRAST_RADIUS;Radius
TP_LOCALLAB_ACTIV;Luminance only
+TP_LOCALLAB_ACTIVSPOT;Enable Spot
TP_LOCALLAB_ADJ;Equalizer Blue-yellow Red-green
TP_LOCALLAB_ALL;All rubrics
TP_LOCALLAB_AMOUNT;Amount
TP_LOCALLAB_ARTIF;Shape detection
-TP_LOCALLAB_ARTIF_TOOLTIP;Threshold deltaE-scope increase the range of scope-deltaE - high values are for very wide gamut images.\nIncrease deltaE Weakening improve shape detection, but can reduce the scope of detection.
+TP_LOCALLAB_ARTIF_TOOLTIP;Threshold deltaE-scope increase the range of scope-deltaE - high values are for very wide gamut images.\nIncrease deltaE decay improve shape detection, but can reduce the scope of detection.
TP_LOCALLAB_AUTOGRAY;Automatic
TP_LOCALLAB_AVOID;Avoid color shift
TP_LOCALLAB_BALAN;Balance ΔE ab-L
+TP_LOCALLAB_BALANEXP;ΔØ PDE balance
TP_LOCALLAB_BALANH;Balance ΔE C-H
TP_LOCALLAB_BALAN_TOOLTIP;Change algorithm ΔE parameter.\nMore or less ab-L, more or less C - H.\nNot for Denoise
-TP_LOCALLAB_BALANEXP;ΔØ PDE balance
TP_LOCALLAB_BASELOG;Logarithm base
TP_LOCALLAB_BILATERAL;Bilateral filter
TP_LOCALLAB_BLACK_EV;Black Ev
+TP_LOCALLAB_BLCO;Chrominance only
TP_LOCALLAB_BLENDMASKCOL;Blend
+TP_LOCALLAB_BLENDMASKMASK;Add / substract mask Luminance
+TP_LOCALLAB_BLENDMASKMASKAB;Add / substract mask Chrominance
TP_LOCALLAB_BLENDMASK_TOOLTIP;If blend = 0 only shape detection is improved.\nIf blend > 0 the mask is added to the image. If blend < 0 the mask is subtracted from the image
+TP_LOCALLAB_BLENDMASKMASK_TOOLTIP;If this slider = 0 no action.\nAdd or subtract the mask from the original image
TP_LOCALLAB_BLGUID;Guided Filter
TP_LOCALLAB_BLINV;Inverse
-TP_LOCALLAB_BLCO;Chrominance only
-TP_LOCALLAB_BLLO;Luminance only
TP_LOCALLAB_BLLC;Luminance & Chrominance
+TP_LOCALLAB_BLLO;Luminance only
TP_LOCALLAB_BLMED;Median
TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct blur and noise with all settings.\nInverse blur and noise with all settings. Be careful some results may be curious
+TP_LOCALLAB_BLNOI_EXP;Blur & Noise
TP_LOCALLAB_BLNORM;Normal
TP_LOCALLAB_BLSYM;Symmetric
-TP_LOCALLAB_BLWH;All changes forced in Black and White
-TP_LOCALLAB_BLWH_TOOLTIP;Force color change composante "a" and "b" to zero.\nUsefull when the user chooses black and white processes, or film.
-TP_LOCALLAB_SPOTNAME;New Spot
TP_LOCALLAB_BLUFR;Smooth - Blur - Grain - Denoise
TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n*Blur the background by a RT-spot fully covering the image (high values for scope and transition) - normal or inverse.\n*Isolate the foreground by one or more excluding RT-spot with the tools you want (increse scope).\n\nThis module can be used in additional noise reduction,including "median" and "Guided filter"
-TP_LOCALLAB_BLURMASK_TOOLTIP;Generate a blur mask, take into account the structure with the contrast threshold Mask Blur slider.
TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4
TP_LOCALLAB_BLURCOL;Radius Mask Blur
TP_LOCALLAB_BLURDE;Blur Shape detection
TP_LOCALLAB_BLURLC;Luminance Only
TP_LOCALLAB_BLURLEVELFRA;Blur Levels
+TP_LOCALLAB_BLURMASK_TOOLTIP;Generate a blur mask, take into account the structure with the contrast threshold Mask Blur slider.
TP_LOCALLAB_BLURRESIDFRA;Blur Residual
+TP_LOCALLAB_BLUR_TOOLNAME;Smooth Blur Gain & Denoise - 1
+TP_LOCALLAB_BLWH;All changes forced in Black and White
+TP_LOCALLAB_BLWH_TOOLTIP;Force color change composante "a" and "b" to zero.\nUsefull when the user chooses black and white processes, or film.
TP_LOCALLAB_BUTTON_ADD;Add
TP_LOCALLAB_BUTTON_DEL;Delete
TP_LOCALLAB_BUTTON_DUPL;Duplicate
TP_LOCALLAB_BUTTON_REN;Rename
TP_LOCALLAB_BUTTON_VIS;Show/Hide
-TP_LOCALLAB_CBDL;Contrast by detail levels - Defects
-TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Acts as a wavelet tools.\nThe first level (0) acts on 2x2 details.\nThe last level (5) acts on 64x64 details.
+TP_LOCALLAB_CBDL;Contrast by detail levels
TP_LOCALLAB_CBDLCLARI_TOOLTIP;Takes the midtones and enhance them.
+TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Acts as a wavelet tools.\nThe first level (0) acts on 2x2 details.\nThe last level (5) acts on 64x64 details.
TP_LOCALLAB_CBDL_THRES_TOOLTIP;Prevent the sharpening of noise
+TP_LOCALLAB_CBDL_TOOLNAME;CBDL (Defects) - 2
TP_LOCALLAB_CENTER_X;Center X
TP_LOCALLAB_CENTER_Y;Center Y
TP_LOCALLAB_CH;Curves CL - LC
TP_LOCALLAB_CHROMA;Chrominance
+TP_LOCALLAB_CHROMABLU;Chroma levels
+TP_LOCALLAB_CHROMABLU_TOOLTIP;Acts as an amplifier-reducer action compare to settings of luma.\nUnder 1 reduce, above 1 amplifie
TP_LOCALLAB_CHROMACBDL;Chroma
TP_LOCALLAB_CHROMACB_TOOLTIP;Acts as an amplifier-reducer action compare to sliders of luminance.\nUnder 100 reduce, above 100 amplifie
TP_LOCALLAB_CHROMALEV;Chroma levels
-TP_LOCALLAB_CHROMABLU;Chroma levels
-TP_LOCALLAB_CHROMABLU_TOOLTIP;Acts as an amplifier-reducer action compare to settings of luma.\nUnder 1 reduce, above 1 amplifie
TP_LOCALLAB_CHROMASKCOL;Chroma mask
TP_LOCALLAB_CHROMASK_TOOLTIP;You can use this slider to desaturated background (inverse mask - curve near 0).\nAlso to attenuate or enhance the action of a mask on the chroma
TP_LOCALLAB_CHRRT;Chroma
@@ -2365,31 +2405,34 @@ TP_LOCALLAB_CLARISOFT_TOOLTIP;Enabled for Clarity and Sharp mask if Merge Luma d
TP_LOCALLAB_CLARITYML;Clarity
TP_LOCALLAB_CLARI_TOOLTIP;Under or equal level wavelet 4, 'Sharp mask' is enabled.\nAbove level wavelet 5 'Clarity' is enabled.\nUsefull if you use 'Level dynamic Range Compression'
TP_LOCALLAB_CLIPTM;Clip Restored datas (gain)
-TP_LOCALLAB_COFR;Color & Light - Small defects
+TP_LOCALLAB_COFR;Color & Light
+TP_LOCALLAB_COLORDE;Color preview selection ΔE - Intensity
+TP_LOCALLAB_COLORDEPREV_TOOLTIP;Button Preview ΔE needs that only one tool is enabled (expander).\nTo be able to have an Preview ΔE with several enable tools use Mask and modifications - Preview ΔE
+TP_LOCALLAB_COLORDE_TOOLTIP;Show preview selection ΔE in blue if negative and in green if positive.\n\nMask and modifications (show modifications without mask): show real modifications if positive, show enhanced modifications (only luminance) with blue and yellow if negative.
+TP_LOCALLAB_COLORSCOPE;Scope Color Tools
+TP_LOCALLAB_COLORSCOPE_TOOLTIP;Use a common Scope for Color and light, Shadows highlight, Vibrance.\nOthers tools have their specific scope.
+TP_LOCALLAB_COLOR_TOOLNAME;Color&Light (Defects) - 11
TP_LOCALLAB_COL_NAME;Name
TP_LOCALLAB_COL_VIS;Status
-TP_LOCALLAB_COLORDE;Color preview selection ΔE - Intensity
-TP_LOCALLAB_COLORDE_TOOLTIP;Show preview selection ΔE in blue if negative and in green if positive.\n\nMask and modifications (show modifications without mask): show real modifications if positive, show enhanced modifications (only luminance) with blue and yellow if negative.
-TP_LOCALLAB_COLORDEPREV_TOOLTIP;Button Preview ΔE needs that only one tool is enabled (expander).\nTo be able to have an Preview ΔE with several enable tools use Mask and modifications - Preview ΔE
-TP_LOCALLAB_COLORSCOPE;Scope Color Tools
-TP_LOCALLAB_COLORSCOPE_TOOLTIP;Use a common Scope for Color and light, Exposure (Standard), Shadows highlight, Vibrance.\nOthers tools have their specific scope.
TP_LOCALLAB_COMPFRA;Levels Directional Contrast
-TP_LOCALLAB_COMPREFRA;Levels Dynamic Wavelet Range (un)Compression
-TP_LOCALLAB_COMPRESS_TOOLTIP;Use if necessary the module 'Clarity & Sharp mask and Blend & Soft Images' by adjusting 'Soft radius' to reduce artifacts.
TP_LOCALLAB_COMPFRAME_TOOLTIP;Allows special effects. You can reduce artifacts with 'Clarity & Sharp mask - Blend & Soft Images".\nUses a lot of resources
TP_LOCALLAB_COMPLEX_METHOD;Software Complexity
TP_LOCALLAB_COMPLEX_TOOLTIP; Allow user to select Local adjustments rubrics.
+TP_LOCALLAB_COMPREFRA;Levels Dynamic Wavelet Range (un)Compression
+TP_LOCALLAB_COMPRESS_TOOLTIP;Use if necessary the module 'Clarity & Sharp mask and Blend & Soft Images' by adjusting 'Soft radius' to reduce artifacts.
TP_LOCALLAB_CONTCOL;Contrast threshold Mask Blur
TP_LOCALLAB_CONTFRA;Contrast by Level
TP_LOCALLAB_CONTRAST;Contrast
TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;Main mask contrast control.
TP_LOCALLAB_CONTRESID;Contrast
TP_LOCALLAB_CONTTHR;Contrast Threshold
+TP_LOCALLAB_CONTWFRA;Local contrast
TP_LOCALLAB_CSTHRESHOLD;Ψ Wavelets Levels
TP_LOCALLAB_CSTHRESHOLDBLUR;Ψ Mask Wavelet level
TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance "Super"
TP_LOCALLAB_CURVCURR;Normal
TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves at the top, mask is completely black no transformation is made by the mask on the image.\nAs you go down the curve, the mask gradually more colorful and brilliant, the image is changing more and more.\n\nIt is recommended (not required) to position the top of the curves on the gray transition line which represents the references (chroma, luma, hue).
+TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If curves at the top, mask is completely black no transformation is made by the mask on the image.\nAs you go down the curve, the mask gradually more colorful and brilliant, the image is changing more and more.\n\nThe gray transition line which represents the references (chroma, luma, hue).\nYou can choose or not to position the top of the curves on this transition.
TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To be active, you must enable combobox 'Curves type'
TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;Tone curve
TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), can be used with L(H) in Color and Light
@@ -2406,6 +2449,7 @@ TP_LOCALLAB_DEHAZ_TOOLTIP;Negative values adds haze
TP_LOCALLAB_DELTAD;Delta balance
TP_LOCALLAB_DELTAEC;Mask ΔE Image
TP_LOCALLAB_DENOIS;Ψ Denoise
+TP_LOCALLAB_DENOI_EXP;Denoise
TP_LOCALLAB_DENOI_TOOLTIP;This module can be used alone (at the end of process), or in complement of main denoise (at the beginning).\nScope allows to differentiate the action according to the color (deltaE).\nYou can complete the action with "median" or "Guided Filter" (Smooth Blur...).\nYou can complete the action with "Blur levels" "Wavelet pyramid"
TP_LOCALLAB_DEPTH;Depth
TP_LOCALLAB_DETAIL;Local contrast
@@ -2413,7 +2457,7 @@ TP_LOCALLAB_DETAILSH;Details
TP_LOCALLAB_DETAILTHR;Detail threshold Luminance Chroma (DCT ƒ)
TP_LOCALLAB_DUPLSPOTNAME;Copy
TP_LOCALLAB_EDGFRA;Edge Sharpness
-TP_LOCALLAB_EDGSHOW;Show all tools
+TP_LOCALLAB_EDGSHOW;Show all tolls
TP_LOCALLAB_ELI;Elipse
TP_LOCALLAB_ENABLE_AFTER_MASK;Use Tone Mapping
TP_LOCALLAB_ENABLE_MASK;Enable mask
@@ -2436,27 +2480,32 @@ TP_LOCALLAB_EXCLUTYPE;Spot method
TP_LOCALLAB_EXCLUTYPE_TOOLTIP;Normal spot use recursive data.\n\nExcluding spot reinitialize data to origin.\nCan be used to totally or partially cancel a previous action or to perform a inverse mode
TP_LOCALLAB_EXECLU;Excluding spot
TP_LOCALLAB_EXNORM;Normal spot
-TP_LOCALLAB_EXPCBDL_TOOLTIP;In the case of contaminated sensor (type "grease"), and when the area is important or for a series of small defects.\n\na) Put the selection spot on a pronounced default (adapting its size if necessary), use a large spot enough to allow wavelet; b) choose a wide selection area to cover most of the area affected by the defects; c) Select a transition value (low) and transition weakening (high value); d) act on levels 2, 3, 4 or 5 or lower by reducing the contrast (values below 100) and by acting on the chroma slider if necessary. e)possibly act on "scope" to reduce the extent of the action.\n\nYou can also complete with Blur levels and Gaussian blur (Smooth Blur and noise)
+//TP_LOCALLAB_EXPCBDL_TOOLTIP;In the case of contaminated sensor (type "grease"), and when the area is important or for a series of small defects.\n\na) Put the selection spot on a pronounced default (adapting its size if necessary), use a large spot enough to allow wavelet; b) choose a wide selection area to cover most of the area affected by the defects; c) Select a transition value (low) and transition decay (high value); d) act on levels 2, 3, 4 or 5 or lower by reducing the contrast (values below 100) and by acting on the chroma slider if necessary. e)possibly act on "scope" to reduce the extent of the action.\n\nYou can also complete with Blur levels and Gaussian blur (Smooth Blur and noise)
+TP_LOCALLAB_EXPCBDL_TOOLTIP;Can be used to remove marks on the sensor or lens.
TP_LOCALLAB_EXPCHROMA;Chroma compensation
TP_LOCALLAB_EXPCHROMA_TOOLTIP;Only in association with exposure compensation and PDE Ipol.\nAvoids desaturation of colors
-TP_LOCALLAB_EXPCOLOR_TOOLTIP;In the case of small defects.\n\nRed-eyes : red-centered circular selector, spot delimiters close to the eye, weak scope, "lightness" -100, "chrominance" -100.\n\nSpotIR :Circular selector centered on the defect, spot delimiters close to the default - reduce "chrominance", possibly act on "scope" to reduce the extent of the action.\n\nDust - grease (small) :Circular selector centered on the defect (adapt the size of the spot), spot delimiters not too close to the defect to allow an inconspicuous transition. a) "Transition" (low values) and "Transition weak" (high values); b) act on "lightness" and possibly on "chrominance" or "Color correction grid - direct" to approach the rendering of the polluted zone to that of the healthy zone; c) act moderately on "scope" to modulate the desired action.\n\nYou can also complete with Gaussian blur (Smooth Blur and noise)
-TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small(< 32x32 pixels).\nUse low transition values and high weakening transition values and scope to simulate small RT-spot and deal wth defects.\nUse if necessary the module 'Clarity & Sharp mask and Blend images' by adjusting 'Soft radius' to reduce artifacts.
+//TP_LOCALLAB_EXPCOLOR_TOOLTIP;In the case of small defects.\n\nRed-eyes : red-centered circular selector, spot delimiters close to the eye, weak scope, "lightness" -100, "chrominance" -100.\n\nSpotIR :Circular selector centered on the defect, spot delimiters close to the default - reduce "chrominance", possibly act on "scope" to reduce the extent of the action.\n\nDust - grease (small) :Circular selector centered on the defect (adapt the size of the spot), spot delimiters not too close to the defect to allow an inconspicuous transition. a) "Transition" (low values) and "Transition weak" (high values); b) act on "lightness" and possibly on "chrominance" or "Color correction grid - direct" to approach the rendering of the polluted zone to that of the healthy zone; c) act moderately on "scope" to modulate the desired action.\n\nYou can also complete with Gaussian blur (Smooth Blur and noise)
+TP_LOCALLAB_EXPCOLOR_TOOLTIP;Adjust color, lightness, contrast and correct small defects such as red-eye, sensor dust etc.
+TP_LOCALLAB_EXPCOMP_TOOLTIP;For portrait or images with low color gradient, you can change "Shape detection" in "settings":\n\nIncrease 'Threshold ΔE scope'\nReduce 'ΔE decay'\nIncrease 'Balance ΔE ab-L'
TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation of wavelet levels.\nHowever there are some differences: more tools and closer to the details.\nEx: Tone mapping for wavelet levels.
+TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small(< 32x32 pixels).\nUse low transition values and high decay transition values and scope to simulate small RT-spot and deal wth defects.\nUse if necessary the module 'Clarity & Sharp mask and Blend images' by adjusting 'Soft radius' to reduce artifacts.
TP_LOCALLAB_EXPCURV;Curves
TP_LOCALLAB_EXPGRAD;Graduated Filter
-TP_LOCALLAB_EXPLAP_TOOLTIP;The more you act on this threshold slider, the greater the action of reducing contrast.
TP_LOCALLAB_EXPLAPBAL_TOOLTIP;Balances the action between the original image and the Laplace transform.
-TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Add linear exposure component before application Laplace transform
TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Apply a gamma before and after Laplace transform
+TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Add linear exposure component before application Laplace transform
+TP_LOCALLAB_EXPLAP_TOOLTIP;The more you act on this threshold slider, the greater the action of reducing contrast.
TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows various possibilities to blend image (as layers in Photosshop) : difference, multiply, soft light, overlay...with opacity...\nOriginal Image : merge current RT-spot with Original.\nPrevious spot : merge current Rt-spot with previous - if there is only one spot previous = original.\nBackground : merge current RT-spot with a color and luminance background (less possibilties)
+TP_LOCALLAB_EXPMETHOD_TOOLTIP;Standard : use an algorithm similar as main Exposure but in L*a*b* and taking account of deltaE.\n\nContrast attenuator : use another algorithm also with deltaE and with Poisson equation to solve Laplacian in Fourier space.\nContrast attenuator, Dynamic range compression and Standard can be combined.\nFFTW Fourier Transform is optimized in size to reduce processing time.\nReduce artifacts and noise.
TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Apply a median before Laplace transform to prevent artifacts (noise).\nYou can also use "Denoise" tool.
-TP_LOCALLAB_EXPMETHOD_TOOLTIP;Standard : use an algorithm similar as main Exposure but in L*a*b* and taking account of deltaE.\n\nLaplacian & PDE : use another algorithm also with deltaE and with Poisson equation to solve Laplacian in Fourier space.\nPDE IPOL, PDE Fattal and Standard can be combined.\nFFTW Fourier Transform is optimized in size to reduce processing time.\nPDE reduce artifacts and noise.
-TP_LOCALLAB_EXPOSE;Exposure - PDE algorithms
-TP_LOCALLAB_EXPOSURE_TOOLTIP;In some cases (strong shadows ..) you can use others modules "Shadows Highlights", "Tone equalizer", "TRC", "Encoding Log"...
+TP_LOCALLAB_EXPOSE;Dynamic Range Compr. & Exposure
+//TP_LOCALLAB_EXPOSURE_TOOLTIP;In some cases (strong shadows ..) you can use others modules "Shadows Highlights", "Tone equalizer", "TRC", "Encoding Log"...
+TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts.
TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools
-TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high weakening transition values and scope to simulate small RT-spot.
+TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high decay transition values and scope to simulate small RT-spot.
TP_LOCALLAB_EXPTOOL;Tools exposure
TP_LOCALLAB_EXPTRC;Tone Response Curve - TRC
+TP_LOCALLAB_EXP_TOOLNAME;Contrast attenuator -Dynamic Range Compression & Exposure- 10
TP_LOCALLAB_FATAMOUNT;Amount
TP_LOCALLAB_FATANCHOR;Anchor
TP_LOCALLAB_FATANCHORA;Offset
@@ -2486,79 +2535,87 @@ TP_LOCALLAB_GRADLOGFRA;Graduated Filter Luminance
TP_LOCALLAB_GRADSTR;Gradient strength
TP_LOCALLAB_GRADSTRAB_TOOLTIP;Filter chroma strength
TP_LOCALLAB_GRADSTRCHRO;Gradient strength Chrominance
-TP_LOCALLAB_GRADSTRHUE2;Gradient strength Hue
TP_LOCALLAB_GRADSTRHUE;Gradient strength Hue
+TP_LOCALLAB_GRADSTRHUE2;Gradient strength Hue
TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Filter Hue strength
TP_LOCALLAB_GRADSTRLUM;Gradient strength Luminance
TP_LOCALLAB_GRADSTR_TOOLTIP;Filter strength in stops
TP_LOCALLAB_GRAINFRA;Film Grain 1:1
TP_LOCALLAB_GRALWFRA;Graduated Filter Local contrast
-TP_LOCALLAB_GRIDFRAME_TOOLTIP;You can use this tool as a brush. Use small spot and adapt transition and transition weakening\nOnly mode NORMAL and eventually Hue, Saturation, Color, Luminosity are concerned by Merge background (ΔE)
+TP_LOCALLAB_GRIDFRAME_TOOLTIP;You can use this tool as a brush. Use small spot and adapt transition and transition decay\nOnly mode NORMAL and eventually Hue, Saturation, Color, Luminosity are concerned by Merge background (ΔE)
TP_LOCALLAB_GRIDONE;Color Toning
TP_LOCALLAB_GRIDTWO;Direct
TP_LOCALLAB_GUIDBL;Soft radius
TP_LOCALLAB_GUIDFILTER;Guided filter radius
TP_LOCALLAB_GUIDFILTER_TOOLTIP;Adapt this values according to images - can reduce or increase artifacts.
-TP_LOCALLAB_HIGHMASKCOL;Highlights mask
TP_LOCALLAB_HHMASK_TOOLTIP;Fine hue adjustments for example for the skin.
+TP_LOCALLAB_HIGHMASKCOL;Highlights mask
TP_LOCALLAB_HLH;Curves H
TP_LOCALLAB_IND;Independent (mouse)
TP_LOCALLAB_INDSL;Independent (mouse + sliders)
TP_LOCALLAB_INVERS;Inverse
TP_LOCALLAB_INVERS_TOOLTIP;If selected (inverse) less possibilities.\n\nAlternative\nFirst Spot:\n full image - delimiter outside preview\n Shape RT-spot area : rectangle. Transition 100\n\nSecond spot : Excluding spot
TP_LOCALLAB_ISOGR;Coarseness (ISO)
-TP_LOCALLAB_LABEL;Local Adjustments
TP_LOCALLAB_LABBLURM;Mask Blur
+TP_LOCALLAB_LABEL;Local Adjustments
TP_LOCALLAB_LABGRID;Color correction grid
TP_LOCALLAB_LABGRIDMERG;Background
TP_LOCALLAB_LABGRID_VALUES;High(a)=%1 High(b)=%2\nLow(a)=%3 Low(b)=%4
TP_LOCALLAB_LABSTRUM;Mask Structure
TP_LOCALLAB_LAPLACC;ΔØ Mask Laplacian solve PDE
-TP_LOCALLAB_LAP_MASK_TOOLTIP;Solve PDE for all Laplacian masks.\nIf enabled Laplacian threshold mask reduce artifacts and smooth result.\nIf disabled linear response.
TP_LOCALLAB_LAPLACE;Δ - Laplacian threshold ΔE
TP_LOCALLAB_LAPLACEXP;∆ - Laplacian threshold
TP_LOCALLAB_LAPMASKCOL;∆ - Laplacian threshold mask
-TP_LOCALLAB_LAPRAD_TOOLTIP;Avoid using Radius and Laplace Threshold simultaneously.\nLaplacian threshold reduce contrast, artifacts, smooth result (if PDE settings enabled).
+TP_LOCALLAB_LAPRAD_TOOLTIP;Avoid using Radius and Laplace Threshold (expert) simultaneously.\nLaplacian threshold reduce contrast, artifacts, smooth result.
+TP_LOCALLAB_LAP_MASK_TOOLTIP;Solve PDE for all Laplacian masks.\nIf enabled Laplacian threshold mask reduce artifacts and smooth result.\nIf disabled linear response.
TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improve quality and allow big radius, but increases the treatment time.\nThe treatment time depends on the surface to be treated.\nTo be used preferably for large radius.\n\nDimensions can be reduced by a few pixels to optimize FFTW.\nThis optimization can reduce the treatment time by a factor of 1.5 to 10.\n
+TP_LOCALLAB_LC_TOOLNAME;Local Constrast & Wavelet (Defects) - 7
TP_LOCALLAB_LEVELBLUR;Maximum Blur levels
TP_LOCALLAB_LEVELLOCCONTRAST_TOOLTIP;On the abscissa local contrast (near concept luminance). On the ordinate, amplification or reduction local contrast.
TP_LOCALLAB_LEVELWAV;Ψ Wavelets Levels
TP_LOCALLAB_LEVELWAV_TOOLTIP;The Level is automatically adapted to the size of the spot and the preview.\nFrom level 9 size max 512 to level 1 size max = 4
+TP_LOCALLAB_LEVFRA;Levels
TP_LOCALLAB_LIGHTNESS;Lightness
TP_LOCALLAB_LIGHTN_TOOLTIP;In inverse mode: selection = -100 force luminance to zero
TP_LOCALLAB_LIGHTRETI;Lightness
TP_LOCALLAB_LINEAR;Linearity
+TP_LOCALLAB_LIST_NAME;Add tool to current spot...
+TP_LOCALLAB_LIST_TOOLTIP;Choose a tool and then its level of complexity "Normal" or "Expert".\nThe number reflects the place of the tool in the process of each RT-Spot
TP_LOCALLAB_LMASK_LEVEL_TOOLTIP;Give priority to action on midtones and high lights and by choosing the concerned wavelet levels
TP_LOCALLAB_LMASK_LL_TOOLTIP;Give priority to action on midtones and high lights
TP_LOCALLAB_LOCCONT;Unsharp Mask
-TP_LOCALLAB_LOC_CONTRAST;Local contrast -Wavelet - defects
+TP_LOCALLAB_LOC_CONTRAST;Local contrast -Wavelet-defects
TP_LOCALLAB_LOC_CONTRASTPYR;Ψ Pyramid 1:
-TP_LOCALLAB_LOC_CONTRASTPYRLAB; Graduated Filter - Edge Sharpness - Blur
TP_LOCALLAB_LOC_CONTRASTPYR2;Ψ Pyramid 2:
-TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contrast by Levels- Tone Mapping - Dir. Contrast
+TP_LOCALLAB_LOC_CONTRASTPYR2LAB;Contrast by Levels- Tone Mapping - Dir.Contrast
+TP_LOCALLAB_LOC_CONTRASTPYRLAB;Graduated Filter - Edge Sharpness - Blur
TP_LOCALLAB_LOC_RESIDPYR;Residual Image Main
TP_LOCALLAB_LOG;Encoding log
TP_LOCALLAB_LOGAUTO;Automatic
+TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will bring an evaluation of dynamic range and Source Gray point (if "Automatic" Source gray enabled).\nTo be able to touch up the automatic values, press the button again
+TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm, the shadows are darker, the highlights are brighter.\nValues greater than 2 change the action of the algorithm, the shadows are grayer the highlights are more washed out
+TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of Dynamic Range - Black Ev and White Ev
+TP_LOCALLAB_LOGENCOD_TOOLTIP;Allows Tone Mapping with Logarithm encoding (ACES).\nUsefull for underexposed pictures, or with high dynamic range.\n\nTwo steps in the process : 1) Calculate Dynamic Range 2) User adaptation
TP_LOCALLAB_LOGFRA;Source Gray Point
+TP_LOCALLAB_LOGFRAME_TOOLTIP;Calculate or use Exposure levels of the image early in the process:\n Black Ev, White Ev and Source Gray point.\n Take into account main exposure compensation.
TP_LOCALLAB_LOGLIN;Logarithm mode
TP_LOCALLAB_LOGPFRA;Relative Exposure Levels
-TP_LOCALLAB_LOGENCOD_TOOLTIP;Allows Tone Mapping with Logarithm encoding (ACES).\nUsefull for underexposed pictures, or with high dynamic range.\n\nTwo steps in the process : 1) Calculate Dynamic Range 2) User adaptation
-TP_LOCALLAB_LOGFRAME_TOOLTIP;Calculate or use Exposure levels of the image early in the process:\n Black Ev, White Ev and Source Gray point.\n Take into account main exposure compensation.
-TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will bring an evaluation of dynamic range and Source Gray point (if "Automatic" Source gray enabled).\nTo be able to touch up the automatic values, press the button again
-TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of Dynamic Range - Black Ev and White Ev
TP_LOCALLAB_LOGSRCGREY_TOOLTIP;Estimated gray point value of the image, early in the process
TP_LOCALLAB_LOGTARGGREY_TOOLTIP;You can change this value to adapt it to your taste.
-TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm, the shadows are darker, the highlights are brighter.\nValues greater than 2 change the action of the algorithm, the shadows are grayer the highlights are more washed out
+TP_LOCALLAB_LOG_TOOLNAME;Encoding log - 0
TP_LOCALLAB_LUM;Curves LL - CC
TP_LOCALLAB_LUMADARKEST;Darkest
TP_LOCALLAB_LUMASK;Luminance Background Mask
TP_LOCALLAB_LUMASK_TOOLTIP;Adjust the gray of the mask background in Show Mask (Mask and modifications)
TP_LOCALLAB_LUMAWHITESEST;Whiteest
-TP_LOCALLAB_LUMONLY;Luminance only
+TP_LOCALLAB_LUMFRA;L*a*b* standard
+TP_LOCALLAB_LUMONLY;Luminance only
+TP_LOCALLAB_MASKCOM;Common Color Mask
+TP_LOCALLAB_MASKCOM_TOOLTIP;These masks works as all tools, they take into account scope color.\nThey are different from others masks which complete a tool (Color and Light, Exposure...)
TP_LOCALLAB_MASFRAME;Mask and Merge
TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTake into account deltaE image to avoid retouching the selection area when sliders gamma mask, slope mask, chroma mask and curves contrast , levels contrasts, and mask blur, structure(if enabled tool) are used.\nDisabled in Inverse
-TP_LOCALLAB_MASK2;Contrast curve mask
TP_LOCALLAB_MASK;Mask
+TP_LOCALLAB_MASK2;Contrast curve mask
TP_LOCALLAB_MASKCOL;Mask Curves
TP_LOCALLAB_MASKH;Hue curve mask
TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a single tool, this requires activating another tool (but without using the tool : sliders to 0,...) where is the mask you want to activate.\n\nYou can also duplicate the RT-spot and place it right next to each other,variations of references allow fine work on images.
@@ -2575,6 +2632,7 @@ TP_LOCALLAB_MERGE1COLFRA;Merge with Original or Previous or Background
TP_LOCALLAB_MERGECOLFRA;Mask: LCH & Structure
TP_LOCALLAB_MERGEFIV;Previous Spot(Mask 7) + Mask LCH
TP_LOCALLAB_MERGEFOU;Previous Spot(Mask 7)
+TP_LOCALLAB_MERGEMER_TOOLTIP;Take into account ΔE to merge files (equivalent of scope for this use)
TP_LOCALLAB_MERGENONE;None
TP_LOCALLAB_MERGEONE;Short Curves 'L' Mask
TP_LOCALLAB_MERGEOPA_TOOLTIP;Opacity merge % current Spot with original or previous Spot.\nContrast threshold : adjust result in function of Original contrast
@@ -2582,7 +2640,6 @@ TP_LOCALLAB_MERGETHR;Original(Mask 7) + Mask LCH
TP_LOCALLAB_MERGETWO;Original(Mask 7)
TP_LOCALLAB_MERGETYPE;Merge image and mask
TP_LOCALLAB_MERGETYPE_TOOLTIP;None, use all mask in LCH mode.\nShort curves 'L' mask, use a short circuit for mask 2, 3, 4, 6, 7.\nOriginal mask 8, blend current image with original
-TP_LOCALLAB_MERGEMER_TOOLTIP;Take into account ΔE to merge files (equivalent of scope for this use)
TP_LOCALLAB_MERHEI;Overlay
TP_LOCALLAB_MERHUE;Hue
TP_LOCALLAB_MERLUCOL;Luminance
@@ -2590,10 +2647,10 @@ TP_LOCALLAB_MERLUM;Luminosity
TP_LOCALLAB_MERNIN;Screen
TP_LOCALLAB_MERONE;Normal
TP_LOCALLAB_MERSAT;Saturation
+TP_LOCALLAB_MERSEV;Soft Light Photshop
TP_LOCALLAB_MERSEV0;Soft Light Illusion
TP_LOCALLAB_MERSEV1;Soft Light W3C
TP_LOCALLAB_MERSEV2;Hard Light
-TP_LOCALLAB_MERSEV;Soft Light Photshop
TP_LOCALLAB_MERSIX;Divide
TP_LOCALLAB_MERTEN;Darken only
TP_LOCALLAB_MERTHI;Color Burn
@@ -2629,14 +2686,16 @@ TP_LOCALLAB_OFFS;Offset
TP_LOCALLAB_OFFSETWAV;Offset
TP_LOCALLAB_OPACOL;Opacity
TP_LOCALLAB_ORIGLC;Merge only with original image
-TP_LOCALLAB_ORRETISTREN_TOOLTIP;Acts on the Laplacian threshold, the greater the action, the more the differences in contrast will be reduced
TP_LOCALLAB_ORRETILAP_TOOLTIP;Acts on a second Laplacian threshold, to take into account ΔE to differentiate the action especially with the background (different from Scope)
+TP_LOCALLAB_ORRETISTREN_TOOLTIP;Acts on the Laplacian threshold, the greater the action, the more the differences in contrast will be reduced
TP_LOCALLAB_PASTELS2;Vibrance
-TP_LOCALLAB_PDE;ΔØ Laplacian PDE - Dynamic Range compression + Standard
-TP_LOCALLAB_PDEFRA;PDE IPOL - Contrast attenuator ƒ
+TP_LOCALLAB_PDE;Contrast attenuator - Dynamic Range compression
+TP_LOCALLAB_PDEFRA;Contrast attenuator ƒ
TP_LOCALLAB_PDEFRAME_TOOLTIP;PDE IPOL - personal algorithm adapted from IPOL to Rawtherapee: lead to very different results and needs differents settings that Standard (negative black, gamma < 1,...)\nMay be usefull for low exposure or high dynamic range.\n
TP_LOCALLAB_PREVIEW;Preview ΔE
-TP_LOCALLAB_PROXI;ΔE weakening
+TP_LOCALLAB_PREVHIDE;Hide all settings
+TP_LOCALLAB_PREVSHOW;Show all settings
+TP_LOCALLAB_PROXI;ΔE decay
TP_LOCALLAB_QUALCURV_METHOD;Curves type
TP_LOCALLAB_QUAL_METHOD;Global quality
TP_LOCALLAB_RADIUS;Radius
@@ -2659,15 +2718,16 @@ TP_LOCALLAB_RESIDHITHR;Highlights threshold
TP_LOCALLAB_RESIDSHA;Shadows
TP_LOCALLAB_RESIDSHATHR;Shadows threshold
TP_LOCALLAB_RETI;Dehaze - Retinex Strong contrast
-TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Play on internal parameters to optimize response.\nLook at the "restored datas" indicators "near" min=0 and max=32768 (log mode), but others values are possible.
-TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Have no effect when the value "Lightness = 1" or "Darkness =2" is chosen.\nIn other cases, the last step of "Multiple scale Retinex" is applied an algorithm close to "local contrast", these 2 cursors, associated with "Strength" will allow to play upstream on the local contrast.
-TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm allows differenciation for haze or normal.\nLogarithm brings more contrast but will generate more halo.
-TP_LOCALLAB_RETI_SCALE_TOOLTIP;If scale=1, retinex behaves like local contrast with many more possibilities.\nThe greater the scale, the more intense the recursive action, the longer the calculation times
TP_LOCALLAB_RETIFRA;Retinex
TP_LOCALLAB_RETIM;Original Retinex
TP_LOCALLAB_RETITOOLFRA;Retinex Tools
TP_LOCALLAB_RETI_FFTW_TOOLTIP;FFT improve quality and allow big radius, but increases the treatment time.\nThe treatment time depends on the surface to be treated\nThe treatment time depends on the value of scale (be carefull to high values).\nTo be used preferably for large radius.\n\nDimensions can be reduced by a few pixels to optimize FFTW.\nThis optimization can reduce the treatment time by a factor of 1.5 to 10.\nOptimization not used in Preview
+TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Have no effect when the value "Lightness = 1" or "Darkness =2" is chosen.\nIn other cases, the last step of "Multiple scale Retinex" is applied an algorithm close to "local contrast", these 2 cursors, associated with "Strength" will allow to play upstream on the local contrast.
+TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Play on internal parameters to optimize response.\nLook at the "restored datas" indicators "near" min=0 and max=32768 (log mode), but others values are possible.
+TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm allows differenciation for haze or normal.\nLogarithm brings more contrast but will generate more halo.
TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP;Adapt these values according to images - if misty images and depending on whether you want to act on the front or the background
+TP_LOCALLAB_RETI_SCALE_TOOLTIP;If scale=1, retinex behaves like local contrast with many more possibilities.\nThe greater the scale, the more intense the recursive action, the longer the calculation times
+TP_LOCALLAB_RET_TOOLNAME;Dehaze & Retinex - 9
TP_LOCALLAB_REWEI;Reweighting iterates
TP_LOCALLAB_RGB;RGB Tone Curve
TP_LOCALLAB_ROW_NVIS;Not visible
@@ -2691,6 +2751,7 @@ TP_LOCALLAB_SENSILOG;Scope
TP_LOCALLAB_SENSIS;Scope
TP_LOCALLAB_SENSIS_TOOLTIP;Adjust scope of action:\nSmall values limit action to colors very similar to those under the center spot.\nHigh values let the tool act upon a wider range of colors.\nValues smaller than 20 lead to a better algorithm.
TP_LOCALLAB_SENSI_TOOLTIP;Adjust scope of action:\nSmall values limit action to colors very similar to those under the center spot.\nHigh values let the tool act upon a wider range of colors.\nValues smaller than 20 lead to a better algorithm.
+TP_LOCALLAB_SENSIMASK_TOOLTIP;Adjust scope of action for this common mask tool.\nActs on the gap between the original image and the mask.\nThe references (luma, chroma, hue) are those of the center of the RT-spot\n\nYou can also act on deltaE internal to the mask with 'Scope Mask deltaE image' in 'Settings'
TP_LOCALLAB_SETTINGS;Settings
TP_LOCALLAB_SH1;Shadows Highlights
TP_LOCALLAB_SH2;Equalizer
@@ -2704,14 +2765,15 @@ TP_LOCALLAB_SHAPE_TOOLTIP;Elipse is normal mode.\nRectangle can be used in some
TP_LOCALLAB_SHARAMOUNT;Amount
TP_LOCALLAB_SHARBLUR;Blur radius
TP_LOCALLAB_SHARDAMPING;Damping
-TP_LOCALLAB_SHARITER;Iterations
TP_LOCALLAB_SHARFRAME;Modifications
+TP_LOCALLAB_SHARITER;Iterations
TP_LOCALLAB_SHARP;Sharpening
+TP_LOCALLAB_SHARP_TOOLNAME;Sharpening - 8
TP_LOCALLAB_SHARRADIUS;Radius
TP_LOCALLAB_SHORTC;Short Curves 'L' Mask
TP_LOCALLAB_SHORTCMASK_TOOLTIP;Short circuit the 2 curves L(L) and L(H).\nAllows you to mix the current image with the original image modified by the mask job.\nUsable with masks 2, 3, 4, 6, 7
-TP_LOCALLAB_SHOWC1;Merge file
TP_LOCALLAB_SHOWC;Mask and modifications
+TP_LOCALLAB_SHOWC1;Merge file
TP_LOCALLAB_SHOWCB;Mask and modifications
TP_LOCALLAB_SHOWDCT;Show process Fourier ƒ
TP_LOCALLAB_SHOWE;Mask and modifications
@@ -2732,29 +2794,32 @@ TP_LOCALLAB_SHOWNORMAL;Normalize luminance (no)
TP_LOCALLAB_SHOWPLUS;Mask and modifications - Smooth-Blur & Denoise
TP_LOCALLAB_SHOWPOISSON;Poisson (pde ƒ)
TP_LOCALLAB_SHOWR;Mask and modifications
-TP_LOCALLAB_SHOWS;Mask and modifications
TP_LOCALLAB_SHOWREF;Preview ΔE
-TP_LOCALLAB_SHOWSTRUC;Show structure Spot
-TP_LOCALLAB_SHOWSTRUCEX;Show structure Spot
+TP_LOCALLAB_SHOWS;Mask and modifications
+TP_LOCALLAB_SHOWSTRUC;Show structure Spot(expert)
+TP_LOCALLAB_SHOWSTRUCEX;Show structure Spot(expert)
TP_LOCALLAB_SHOWT;Mask and modifications
TP_LOCALLAB_SHOWVI;Mask and modifications
TP_LOCALLAB_SHRESFRA;Shadows/Highlights
TP_LOCALLAB_SHTRC_TOOLTIP;Modifies the tones of the image by acting on a TRC (Tone Response Curve).\nGamma acts mainly on light tones.\nSlope acts mainly on dark tones
+TP_LOCALLAB_SH_TOOLNAME;Shadows Highlight & Tone Equalizer - 5
TP_LOCALLAB_SIGMAWAV;Attenuation Response
TP_LOCALLAB_SIM;Simple
TP_LOCALLAB_SLOMASKCOL;Slope mask
TP_LOCALLAB_SLOSH;Slope
TP_LOCALLAB_SOFT;Soft Light - Original Retinex
TP_LOCALLAB_SOFTM;Soft Light
-TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Original Retinex is very different from others Retinex method.\nIts acts on grey and balance luminance.\nIt is an emulation of "Dodge" and "Burn"
+//TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Original Retinex is very different from others Retinex method.\nIts acts on grey and balance luminance.\nIt is an emulation of "Dodge" and "Burn"
+TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Apply a Soft-light blend (identical to the global adjustment). Carry out dodge and burn using the original Retinex algorithm.
TP_LOCALLAB_SOFTRADIUSCOL;Soft radius
TP_LOCALLAB_SOFTRETI;Reduce artifact ΔE
TP_LOCALLAB_SOFTRETI_TOOLTIP;Take into account deltaE to improve Transmission map
+TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex - 6
TP_LOCALLAB_SOURCE_GRAY;Value
+TP_LOCALLAB_SPECCASE; Specific cases
TP_LOCALLAB_SPECIAL;Special use of RGB curves
TP_LOCALLAB_SPECIAL_TOOLTIP;Only for this RGB curve, disabled (or reduce effects) of Scope, mask...for example, if you want to have a negative effect.
-TP_LOCALLAB_SPECCASE; Specific cases
-TP_LOCALLAB_SPOTNAME;Control Spot #
+TP_LOCALLAB_SPOTNAME;New Spot
TP_LOCALLAB_STD;Standard
TP_LOCALLAB_STR;Strength
TP_LOCALLAB_STRBL;Strength
@@ -2765,9 +2830,9 @@ TP_LOCALLAB_STRENGTH;Noise
TP_LOCALLAB_STRGRID;Strength
TP_LOCALLAB_STRRETI_TOOLTIP;if Strength Retinex < 0.2 only Dehaze is enabled.\nif Strength Retinex >= 0.1 Dehaze is in luminance mode.
TP_LOCALLAB_STRUC;Structure
+TP_LOCALLAB_STRUCCOL;Structure
TP_LOCALLAB_STRUCCOL1;Structure Spot
TP_LOCALLAB_STRUCT_TOOLTIP;Use Sobel algorithm to take into account structure in shape detection.\nyou can have a preview by activating "mask and modifications - Show structure spot".\n\nCan be used in conjunction with masks (expert) structure, blur, wavelet to improve edge detection.\n\nNeeds maskless adjustments to be activated (lightness, exposure...)
-TP_LOCALLAB_STRUCCOL;Structure
TP_LOCALLAB_STRUMASKCOL;Structure mask strength
TP_LOCALLAB_STRUMASK_TOOLTIP;Generate a structure mask with difference between surface areas and reliefs.\nIf structure mask as tool is enabled, this mask is used in addition to the other tools (gamma, slope, contrast curve ...)
TP_LOCALLAB_STYPE;Shape method
@@ -2779,24 +2844,25 @@ TP_LOCALLAB_THRES;Threshold structure
TP_LOCALLAB_THRESDELTAE;Threshold ΔE-scope
TP_LOCALLAB_THRESRETI;Threshold
TP_LOCALLAB_THRESWAV;Balance Threshold
-TP_LOCALLAB_TLABEL2;TM Effective Tm=%1 TM=%2
TP_LOCALLAB_TLABEL;TM Datas Min=%1 Max=%2 Mean=%3 Sigma=%4 (Threshold)
+TP_LOCALLAB_TLABEL2;TM Effective Tm=%1 TM=%2
TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can act on Threshold to normalize
TP_LOCALLAB_TM;Tone Mapping - Texture
TP_LOCALLAB_TM_MASK;Use transmission map
TP_LOCALLAB_TONEMAPESTOP_TOOLTIP;This parameter affects sensitivity to edges.\n The greater it is the more likely an illumination change is to be considered an "edge".\n If set to zero tone mapping will have an effect similar to unsharp masking.
-TP_LOCALLAB_TONEMAPREWEI_TOOLTIP;In some cases tone mapping may result in a cartoonish appearance, and in some rare cases soft but wide halos may appear.\n Increasing the number of reweighting iterates will help fight some of these problems.
-TP_LOCALLAB_TONEMASCALE_TOOLTIP;This control gives meaning to the difference between "local" and "global" contrast.\nThe greater it is the larger a detail needs to be in order to be boosted
TP_LOCALLAB_TONEMAPGAM_TOOLTIP;Gamma moves the action of tone-mapping to shadows or highlights.
-TP_LOCALLAB_TOOLCOL;Structure mask as tool
+TP_LOCALLAB_TONEMAPREWEI_TOOLTIP;In some cases tone mapping may result in a cartoonish appearance, and in some rare cases soft but wide halos may appear.\n Increasing the number of reweighting iterates will help fight some of these problems.
TP_LOCALLAB_TONEMAP_TOOLTIP;Tone Mapping - main menu must be disabled
+TP_LOCALLAB_TONEMASCALE_TOOLTIP;This control gives meaning to the difference between "local" and "global" contrast.\nThe greater it is the larger a detail needs to be in order to be boosted
+TP_LOCALLAB_TONE_TOOLNAME;Tone Mapping - 4
+TP_LOCALLAB_TOOLCOL;Structure mask as tool
TP_LOCALLAB_TOOLMASK;Tools
TP_LOCALLAB_TRANSIT;Transition Gradient
TP_LOCALLAB_TRANSITGRAD;Transition differentiation XY
TP_LOCALLAB_TRANSITGRAD_TOOLTIP;Changes the transition of the abscissa to that of the ordinate
TP_LOCALLAB_TRANSITVALUE;Transition value
-TP_LOCALLAB_TRANSITWEAK;Transition weakening
-TP_LOCALLAB_TRANSITWEAK_TOOLTIP;Adjust transition weakening : change smoothness process - 1 linear - 2 parabolic - 3 cubic - ^25.\nCan be used in conjunction with very low transition values to reduce defects (CBDL, Wavelet, Color & Light)
+TP_LOCALLAB_TRANSITWEAK;Transition decay (linear-log)
+TP_LOCALLAB_TRANSITWEAK_TOOLTIP;Adjust transition decay : change smoothness process - 1 linear - 2 parabolic - 3 cubic - ^25.\nCan be used in conjunction with very low transition values to reduce defects (CBDL, Wavelet, Color & Light)
TP_LOCALLAB_TRANSIT_TOOLTIP;Adjust smoothness of transition between affected and unaffected areas, as a percentage of the "radius"
TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain
TP_LOCALLAB_TRANSMISSIONMAP;Transmission map
@@ -2804,12 +2870,6 @@ TP_LOCALLAB_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscis
TP_LOCALLAB_USEMASK;Use mask
TP_LOCALLAB_VART;Variance (contrast)
TP_LOCALLAB_VIBRANCE;Vibrance - Warm & Cool
-TP_LOCALLAB_VIS_TOOLTIP;Click to show/hide selected Control Spot.\nCtrl+click to show/hide all Control Spot.
-TP_LOCALLAB_LIST_NAME;Add tool to current spot...
-TP_LOCALLAB_LIST_TOOLTIP;Choose a tool and then its level of complexity "Normal" or "Expert".\nThe number reflects the place of the tool in the process of each RT-Spot
-TP_LOCALLAB_COLOR_TOOLNAME;Color&Light (Defects) - 11
-TP_LOCALLAB_EXP_TOOLNAME;Exposure - Dynamic Range Compression - 10
-TP_LOCALLAB_SH_TOOLNAME;Shadows Highlight & Tone Equalizer - 5
TP_LOCALLAB_VIB_TOOLNAME;Vibrance - Warm & Cool - 3
TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex - 6
TP_LOCALLAB_BLUR_TOOLNAME;Smooth Blur Gain & Denoise - 1
@@ -2819,43 +2879,38 @@ TP_LOCALLAB_SHARP_TOOLNAME;Sharpening - 8
TP_LOCALLAB_LC_TOOLNAME;Local Constrast & Wavelet (Defects) - 7
TP_LOCALLAB_CBDL_TOOLNAME;CBDL (Defects) - 2
TP_LOCALLAB_LOG_TOOLNAME;Encoding log - 0
+TP_LOCALLAB_MASKCOM_TOOLNAME;Common Color Mask - 13
+TP_LOCALLAB_VIS_TOOLTIP;Click to show/hide selected Control Spot.\nCtrl+click to show/hide all Control Spot.
TP_LOCALLAB_WAMASKCOL;Ψ Mask Wavelet level
TP_LOCALLAB_WARM;Warm - Cool & Color artifacts
TP_LOCALLAB_WARM_TOOLTIP;This slider use Ciecam algorithm and acts as White Balance, it can warm or cool the area selected.\nIt can also in some cases reduce color artifacts.
+TP_LOCALLAB_WASDEN_TOOLTIP;Denoise luminance for the 3 first levels (fine).\nThe right limit of the curve correspond to coarse : level 3 and beyond
TP_LOCALLAB_WAV;Levels local contrast
-TP_LOCALLAB_WAVMASK_TOOLTIP;Allows fine work on mask levels contrasts (structure)
TP_LOCALLAB_WAVBLUR_TOOLTIP;Performs a blur for each level of decomposition, as well as the residual image.
-TP_LOCALLAB_WAVEDG;Local contrast
TP_LOCALLAB_WAVCOMP;Compression by Level
-TP_LOCALLAB_WAVCOMP_TOOLTIP;Achive local contrast in function of the direction wavelet decomposition : horizontal, vertical, diagonal
TP_LOCALLAB_WAVCOMPRE;(un)Compression by Level
TP_LOCALLAB_WAVCOMPRE_TOOLTIP;Achieve a Tone-mapping or reduction local contrast by levels.\nOn abscissa levels
+TP_LOCALLAB_WAVCOMP_TOOLTIP;Achive local contrast in function of the direction wavelet decomposition : horizontal, vertical, diagonal
TP_LOCALLAB_WAVCON;Contrast by Level
TP_LOCALLAB_WAVCONTF_TOOLTIP;Similar to Contrast By Detail Levels : on abscissa levels.
-TP_LOCALLAB_WAVDEN;Luminance denoise by level (0 1 2 + 3 and more)
-TP_LOCALLAB_WASDEN_TOOLTIP;Denoise luminance for the 3 first levels (fine).\nThe right limit of the curve correspond to coarse : level 3 and beyond
+TP_LOCALLAB_WAVDEN;Luminance denoise by level (0 1 2 +3 and more)
TP_LOCALLAB_WAVE;Ψ Wavelet
+TP_LOCALLAB_WAVEDG;Local contrast
TP_LOCALLAB_WAVEEDG_TOOLTIP;Achieves a sharpness taking into account the notion of edges wavelet.\nRequires that at least the first 4 levels are usable
TP_LOCALLAB_WAVGRAD_TOOLTIP;Graduated filter for Local contrast "luminance"
TP_LOCALLAB_WAVHIGH;Ψ Wavelet high
TP_LOCALLAB_WAVLEV;Blur by Level
TP_LOCALLAB_WAVLOW;Ψ Wavelet low
TP_LOCALLAB_WAVMASK;Ψ Mask Levels local contrast
+TP_LOCALLAB_WAVMASK_TOOLTIP;Allows fine work on mask levels contrasts (structure)
TP_LOCALLAB_WAVMED;Ψ Wavelet normal
TP_LOCALLAB_WEDIANHI;Median Hi
TP_LOCALLAB_WHITE_EV;White Ev
-TP_LOCALLAB_BLNOI_EXP;Blur & Noise
-TP_LOCALLAB_DENOI_EXP;Denoise
TP_LOCAL_HEIGHT;Bottom
TP_LOCAL_HEIGHT_T;Top
TP_LOCAL_WIDTH;Right
TP_LOCAL_WIDTH_L;Left
TP_LOCRETI_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Equalize action.\nHigh = Reinforce high light.\n
-TP_LOCALCONTRAST_AMOUNT;Amount
-TP_LOCALCONTRAST_DARKNESS;Darkness level
-TP_LOCALCONTRAST_LABEL;Local Contrast
-TP_LOCALCONTRAST_LIGHTNESS;Lightness level
-TP_LOCALCONTRAST_RADIUS;Radius
TP_METADATA_EDIT;Apply modifications
TP_METADATA_MODE;Metadata copy mode
TP_METADATA_STRIP;Strip all metadata
@@ -2871,8 +2926,8 @@ TP_PCVIGNETTE_STRENGTH;Strength
TP_PCVIGNETTE_STRENGTH_TOOLTIP;Filter strength in stops (reached in corners).
TP_PDSHARPENING_LABEL;Capture Sharpening
TP_PERSPECTIVE_CAMERA_CROP_FACTOR;Crop factor
-TP_PERSPECTIVE_CAMERA_FRAME;Correction
TP_PERSPECTIVE_CAMERA_FOCAL_LENGTH;Focal length
+TP_PERSPECTIVE_CAMERA_FRAME;Correction
TP_PERSPECTIVE_CAMERA_PITCH;Vertical
TP_PERSPECTIVE_CAMERA_ROLL;Rotation
TP_PERSPECTIVE_CAMERA_SHIFT_HORIZONTAL;Horizontal shift
@@ -2881,8 +2936,8 @@ TP_PERSPECTIVE_CAMERA_YAW;Horizontal
TP_PERSPECTIVE_HORIZONTAL;Horizontal
TP_PERSPECTIVE_LABEL;Perspective
TP_PERSPECTIVE_METHOD;Method
-TP_PERSPECTIVE_METHOD_SIMPLE;Simple
TP_PERSPECTIVE_METHOD_CAMERA_BASED;Camera-based
+TP_PERSPECTIVE_METHOD_SIMPLE;Simple
TP_PERSPECTIVE_POST_CORRECTION_ADJUSTMENT_FRAME;Post-correction adjustment
TP_PERSPECTIVE_PROJECTION_PITCH;Vertical
TP_PERSPECTIVE_PROJECTION_ROTATE;Rotation
@@ -3146,7 +3201,7 @@ TP_SOFTLIGHT_LABEL;Soft Light
TP_SOFTLIGHT_STRENGTH;Strength
TP_TM_FATTAL_AMOUNT;Amount
TP_TM_FATTAL_ANCHOR;Anchor
-TP_TM_FATTAL_LABEL;Dynamic Range Compression ƒ
+TP_TM_FATTAL_LABEL;Dynamic Range Compression
TP_TM_FATTAL_THRESHOLD;Detail
TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
@@ -3191,12 +3246,13 @@ TP_WAVELET_BACUR;Curve
TP_WAVELET_BALANCE;Contrast balance d/v-h
TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified.
TP_WAVELET_BALCHRO;Chrominance balance
-TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance.
TP_WAVELET_BALCHROM;Denoise Equalizer Blue-yellow Red-green
+TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance.
TP_WAVELET_BALLUM;Denoise Equalizer White-Black
TP_WAVELET_BANONE;None
TP_WAVELET_BASLI;Slider
TP_WAVELET_BATYPE;Contrast balance method
+TP_WAVELET_BL;Blur levels
TP_WAVELET_BLCURVE;Blur by levels
TP_WAVELET_BLURFRAME;Blur
TP_WAVELET_BLUWAV;Attenuation Response
@@ -3214,8 +3270,8 @@ TP_WAVELET_CHROMAFRAME;Chroma
TP_WAVELET_CHROMCO;Chrominance Coarse
TP_WAVELET_CHROMFI;Chrominance Fine
TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored.
-TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength"
TP_WAVELET_CHRWAV;Blur chroma
+TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength"
TP_WAVELET_CHSL;Sliders
TP_WAVELET_CHTYPE;Chrominance method
TP_WAVELET_CLA;Clarity
@@ -3244,18 +3300,20 @@ TP_WAVELET_CURVEEDITOR_HH;HH
TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Modifies the residual image's hue as a function of hue.
TP_WAVELET_DALL;All directions
TP_WAVELET_DAUB;Edge performance
-TP_WAVELET_DAUBLOCAL;Wavelet Edge performance
TP_WAVELET_DAUB2;D2 - low
TP_WAVELET_DAUB4;D4 - standard
TP_WAVELET_DAUB6;D6 - standard plus
TP_WAVELET_DAUB10;D10 - medium
TP_WAVELET_DAUB14;D14 - high
+TP_WAVELET_DAUBLOCAL;Wavelet Edge performance
TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the firsts levels. However the quality is not strictly related to this coefficient and can vary with images and uses.
TP_WAVELET_DIRFRAME;Directional contrast
TP_WAVELET_DONE;Vertical
TP_WAVELET_DTHR;Diagonal
TP_WAVELET_DTWO;Horizontal
TP_WAVELET_EDCU;Curve
+TP_WAVELET_EDEFFECT;Attenuation Response
+TP_WAVELET_EDEFFECT_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\nMaximum value (2.5) disabled the tool
TP_WAVELET_EDGCONT;Local contrast
TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, top-left, top-right and bottom-right represent respectively local contrast for low values, mean, mean+stdev and maxima.
TP_WAVELET_EDGE;Edge Sharpness
@@ -3265,8 +3323,6 @@ TP_WAVELET_EDGEDETECTTHR;Threshold low (noise)
TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection)
TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky.
TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise.
-TP_WAVELET_EDEFFECT;Attenuation Response
-TP_WAVELET_EDEFFECT_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\nMaximum value (2.5) disabled the tool
TP_WAVELET_EDGESENSI;Edge sensitivity
TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
TP_WAVELET_EDGTHRESH;Detail
@@ -3278,9 +3334,9 @@ TP_WAVELET_EDTYPE;Local contrast method
TP_WAVELET_EDVAL;Strength
TP_WAVELET_FINAL;Final Touchup
TP_WAVELET_FINCFRAME;Final Local Contrast
+TP_WAVELET_FINCOAR_TOOLTIP;The left (positive) part of the curve acts on the finer levels (increase).\nThe 2 points on the abscissa represent the respective action limits of finer and coarser levels 5 and 6 (default).\nThe right (negative) part of the curve acts on the coarser levels (increase).\nAvoid moving the left part of the curve with negative values. Avoid moving the right part of the curve with positives values
TP_WAVELET_FINEST;Finest
TP_WAVELET_HIGHLIGHT;Finer levels luminance range
-TP_WAVELET_FINCOAR_TOOLTIP;The left (positive) part of the curve acts on the finer levels (increase).\nThe 2 points on the abscissa represent the respective action limits of finer and coarser levels 5 and 6 (default).\nThe right (negative) part of the curve acts on the coarser levels (increase).\nAvoid moving the left part of the curve with negative values. Avoid moving the right part of the curve with positives values
TP_WAVELET_HS1;Whole luminance range
TP_WAVELET_HS2;Selective luminance range
TP_WAVELET_HUESKIN;Skin hue
@@ -3323,6 +3379,7 @@ TP_WAVELET_NPLOW;Low
TP_WAVELET_NPNONE;None
TP_WAVELET_NPTYPE;Neighboring pixels
TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced.
+TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\nHigh values here will amplify the contrast change of the highlights, whereas low values will amplify the contrast change of the shadows.\nAlong with a low Attenuation Response value you will able to select the contrasts that will be enhanced.
TP_WAVELET_OLDSH;Algorithm using negatives values
TP_WAVELET_OPACITY;Opacity Blue-Yellow
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
@@ -3362,8 +3419,8 @@ TP_WAVELET_SUPE;Extra
TP_WAVELET_THR;Shadows threshold
TP_WAVELET_THRESHOLD;Finer levels
TP_WAVELET_THRESHOLD2;Coarser levels
-TP_WAVELET_THRESHOLD_TOOLTIP;Only levels below and including the chosen value will be affected by the Highlight luminance range.
TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels from the chosen value to the selected number of ‘wavelet levels’ will be affected by the Shadow luminance range.
+TP_WAVELET_THRESHOLD_TOOLTIP;Only levels below and including the chosen value will be affected by the Highlight luminance range.
TP_WAVELET_THRESWAV;Balance Threshold
TP_WAVELET_THRH;Highlights threshold
TP_WAVELET_TILESBIG;Tiles
@@ -3371,22 +3428,19 @@ TP_WAVELET_TILESFULL;Full image
TP_WAVELET_TILESIZE;Tiling method
TP_WAVELET_TILESLIT;Little tiles
TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements.
-TP_WAVELET_BL;Blur levels
TP_WAVELET_TMEDGS;Edge stopping
TP_WAVELET_TMSCALE;Scale
TP_WAVELET_TMSTRENGTH;Compression strength
TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image.
-TP_WAVELET_TMEDGS;Edge stopping
+TP_WAVELET_TMTYPE;Compression method
TP_WAVELET_TON;Toning
TP_WAVELET_TONFRAME;Excluded Colors
-TP_WAVELET_TMTYPE;Compression method
TP_WAVELET_USH;None
TP_WAVELET_USHARP;Clarity method
TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment
TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels.
TP_WAVELET_WAVLOWTHR;Low contrast threshold
TP_WAVELET_WAVOFFSET;Offset
-TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\nHigh values here will amplify the contrast change of the highlights, whereas low values will amplify the contrast change of the shadows.\nAlong with a low Attenuation Response value you will able to select the contrasts that will be enhanced.
TP_WBALANCE_AUTO;Auto
TP_WBALANCE_AUTOITCGREEN;Temperature correlation
TP_WBALANCE_AUTOOLD;RGB grey
@@ -3448,3 +3502,4 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f
ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: Alt-f
ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: +
ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: -
+
diff --git a/rtengine/LUT.h b/rtengine/LUT.h
index 6ba7d570f..416ae689a 100644
--- a/rtengine/LUT.h
+++ b/rtengine/LUT.h
@@ -58,9 +58,11 @@
#pragma once
+#include
#include
#include
#include
+#include
#ifndef NDEBUG
#include
@@ -138,6 +140,33 @@ public:
clear();
}
}
+
+ LUT(const std::vector& input, int flags = LUT_CLIP_BELOW | LUT_CLIP_ABOVE) :
+ maxs(input.size() - 2),
+ maxsf(maxs),
+ data(new T[input.size() + 3]), // Add a few extra elements so [](vfloat) won't access out-of-bounds memory.
+ clip(flags),
+ size(input.size()),
+ upperBound(size - 1),
+ owner(1),
+#ifdef __SSE2__
+ maxsv(F2V(maxs)),
+ sizev(F2V(size - 1)),
+ sizeiv(_mm_set1_epi32(size - 1)),
+#endif
+ dirty(true)
+ {
+#ifndef NDEBUG
+
+ if (input.empty()) {
+ printf("s=0!\n");
+ }
+
+ assert(!input.empty());
+#endif
+ std::copy_n(input.begin(), input.size(), data);
+ }
+
void operator ()(int s, int flags = LUT_CLIP_BELOW | LUT_CLIP_ABOVE, bool initZero = false)
{
#ifndef NDEBUG
@@ -223,7 +252,7 @@ public:
return size > 0 ? upperBound : 0;
}
- LUT & operator=(const LUT& rhs)
+ LUT& operator=(const LUT& rhs)
{
if (this != &rhs) {
if (rhs.size > this->size) {
@@ -254,7 +283,7 @@ public:
}
// handy to sum up per thread histograms. #pragma omp simd speeds up the loop by about factor 3 for LUTu (uint32_t).
- LUT & operator+=(const LUT& rhs)
+ LUT& operator+=(const LUT& rhs)
{
if (rhs.size == this->size) {
#ifdef _OPENMP
@@ -271,7 +300,7 @@ public:
// multiply all elements of LUT with a constant float value
template::value>::type>
- LUT & operator*=(float factor)
+ LUT& operator*=(float factor)
{
#ifdef _OPENMP
#pragma omp simd
@@ -286,7 +315,7 @@ public:
// divide all elements of LUT by a constant float value
template::value>::type>
- LUT & operator/=(float divisor)
+ LUT& operator/=(float divisor)
{
#ifdef _OPENMP
#pragma omp simd
@@ -456,7 +485,7 @@ public:
// Return the value for "index" that is in the [0-1] range.
template::value>::type>
- T getVal01 (float index) const
+ T getVal01(float index) const
{
index *= (float)upperBound;
int idx = (int)index; // don't use floor! The difference in negative space is no problems here
@@ -481,19 +510,19 @@ public:
return (p1 + p2 * diff);
}
- operator bool (void) const
+ operator bool() const // FIXME: Should be explicit
{
return size > 0;
}
- void clear(void)
+ void clear()
{
if (data && size) {
memset(data, 0, size * sizeof(T));
}
}
- void reset(void)
+ void reset()
{
if (data) {
delete[] data;
diff --git a/rtengine/camconst.json b/rtengine/camconst.json
index 6e686c2f1..19e25264c 100644
--- a/rtengine/camconst.json
+++ b/rtengine/camconst.json
@@ -1344,12 +1344,20 @@ Camera constants:
},
{ // Quality B
- "make_model": [ "FUJIFILM X-T1", "FUJIFILM X-T10", "FUJIFILM X-E2" ],
+ "make_model": [ "FUJIFILM X-T10", "FUJIFILM X-E2" ],
"dcraw_matrix": [ 8458,-2451,-855,-4597,12447,2407,-1475,2482,6526 ], // DNG D65
//"dcraw_matrix": [ 9289,-3279,-632,-3539,11137,2758,-1049,1950,6544 ], // X-RITE D55
- //"raw_crop": [ 4, 0, 4936, 3296 ], // full raw 4992,3296, fuji official 4936,3296 - experimental crop
+ //"raw_crop": [ 4, 0, 4936, 3296 ], // full raw 4992,3296, fuji official 4936,3296
"ranges": { "white": 16100 }
},
+
+ { // Quality B, samples provided by Claes
+ "make_model": "FUJIFILM X-T1",
+ "dcraw_matrix": [ 8458,-2451,-855,-4597,12447,2407,-1475,2482,6526 ], // DNG D65
+ "raw_crop": [ 4, 0, 4936, 3296 ], // full raw 4992,3296, fuji official 4936,3296
+ "ranges": { "white": [ 16202, 16277, 16232 ] } // LENR on from ISO4000+ negligibly underestimates white level
+ // No aperture scaling data provided, but likely negligible
+ },
{ // Quality C
"make_model": [ "FUJIFILM X-T100" ],
@@ -1370,13 +1378,29 @@ Camera constants:
},
{ // Quality B
- "make_model": [ "FUJIFILM X-T2", "FUJIFILM X-T20", "FUJIFILM X-E3", "FUJIFILM X100F", "FUJIFILM X-PRO2", "FUJIFILM X-H1" ],
+ "make_model": [ "FUJIFILM X-T20", "FUJIFILM X-E3", "FUJIFILM X100F", "FUJIFILM X-H1" ],
"dcraw_matrix": [ 11434,-4948,-1210,-3746,12042,1903,-666,1479,5235 ], // DNG_v9.4 D65
// "raw_crop": [ 0, 5, 6032, 4032 ], // full raw 6160,4032, Usable 6032,4032 - for lossless compressed files
// "raw_crop": [ 0, 0, 6032, 4032 ], // full raw 6160,4032, Usable 6032,4032 - for uncompressed files
"raw_crop": [ 0, 5, 6032, 4026 ], // full raw 6160,4032, Usable 6032,4026 - for uncompressed and lossless compressed files (but reduces height by 6 pixels)
"ranges": { "white": 16100 }
},
+
+ { // Quality B, samples provided by Daniel Catalina #5824
+ "make_model": "FUJIFILM X-T2",
+ "dcraw_matrix": [ 11434,-4948,-1210,-3746,12042,1903,-666,1479,5235 ], // DNG_v9.4 D65
+ "raw_crop": [ 0, 5, 6032, 4026 ], // xee X-T20
+ "ranges": { "white": [ 16195, 16270, 16195 ] } // With LENR on and ISO4000+ starts to overestimate white level, more realistic would be 16090
+ // Negligible aperture scaling effect
+ },
+
+ { // Quality B, samples provided by Claes
+ "make_model": "FUJIFILM X-PRO2",
+ "dcraw_matrix": [ 11434,-4948,-1210,-3746,12042,1903,-666,1479,5235 ], // DNG_v9.4 D65
+ "raw_crop": [ 0, 5, 6032, 4026 ], // see X-T2
+ "ranges": { "white": [ 16105, 16270, 16082 ] } // These values are the lowest pixel values >16000 for all ISOs. LENR has a negligble effect.
+ // No aperture scaling data provided, but likely negligible
+ },
{ // Quality C, only raw crop
"make_model": [ "FUJIFILM X-T3", "FUJIFILM X-T30", "FUJIFILM X-PRO3", "FUJIFILM X100V", "FUJIFILM X-T4" ],
diff --git a/rtengine/curves.cc b/rtengine/curves.cc
index 7f74467be..017f7755e 100644
--- a/rtengine/curves.cc
+++ b/rtengine/curves.cc
@@ -203,7 +203,6 @@ const double CurveFactory::sRGBGammaCurve = 2.4;
void fillCurveArray(DiagonalCurve* diagCurve, LUTf &outCurve, int skip, bool needed)
{
if (needed) {
-
for (int i = 0; i <= 0xffff; i += i < 0xffff - skip ? skip : 1) {
// change to [0,1] range
float val = (float)i / 65535.f;
@@ -441,41 +440,21 @@ void CurveFactory::curveToning(const std::vector& curvePoints, LUTf & To
fillCurveArray(dCurve.get(), ToningCurve, skip, needed);
}
-void CurveFactory::curveLocal(bool & locallutili, const std::vector& curvePoints, LUTf & LocalLCurve, int skip)
+bool CurveFactory::curveLocal(const std::vector& curvePoints, LUTf& LocalCurve, int skip)
{
bool needed = false;
std::unique_ptr dCurve;
if (!curvePoints.empty() && curvePoints[0] != 0) {
- dCurve = std::unique_ptr (new DiagonalCurve(curvePoints, CURVES_MIN_POLY_POINTS / skip));
+ dCurve.reset(new DiagonalCurve(curvePoints, CURVES_MIN_POLY_POINTS / skip));
if (dCurve && !dCurve->isIdentity()) {
needed = true;
- locallutili = true;
}
}
- fillCurveArray(dCurve.get(), LocalLCurve, skip, needed);
- //LocalLCurve.dump("wav");
-
-}
-
-void CurveFactory::curveCCLocal(bool & localcutili, const std::vector& curvePoints, LUTf & LocalCCurve, int skip)
-{
- bool needed = false;
- std::unique_ptr dCurve;
-
- if (!curvePoints.empty() && curvePoints[0] != 0) {
- dCurve = std::unique_ptr (new DiagonalCurve(curvePoints, CURVES_MIN_POLY_POINTS / skip));
-
- if (dCurve && !dCurve->isIdentity()) {
- needed = true;
- localcutili = true;
- }
- }
-
- fillCurveArray(dCurve.get(), LocalCCurve, skip, needed);
- //LocalLCurve.dump("wav");
+ fillCurveArray(dCurve.get(), LocalCurve, skip, needed);
+ return needed;
}
@@ -498,46 +477,6 @@ void CurveFactory::curveskLocal(bool & localskutili, const std::vector&
}
-void CurveFactory::curveexLocal(bool & localexutili, const std::vector& curvePoints, LUTf & LocalexCurve, int skip)
-{
- bool needed = false;
- std::unique_ptr dCurve;
-
-// if (localexutili && !curvePoints.empty() && curvePoints[0] != 0) {
- if (!curvePoints.empty() && curvePoints[0] != 0) {
- dCurve = std::unique_ptr (new DiagonalCurve(curvePoints, CURVES_MIN_POLY_POINTS / skip));
-
- if (dCurve && !dCurve->isIdentity()) {
- needed = true;
- localexutili = true;
- }
- }
-
- fillCurveArray(dCurve.get(), LocalexCurve, skip, needed);
-
-}
-
-void CurveFactory::curvemaskLocal(bool & localmaskutili, const std::vector& curvePoints, LUTf & LocalmaskCurve, int skip)
-{
- bool needed = false;
- std::unique_ptr dCurve;
-
-// if (localexutili && !curvePoints.empty() && curvePoints[0] != 0) {
- if (!curvePoints.empty() && curvePoints[0] != 0) {
- dCurve = std::unique_ptr (new DiagonalCurve(curvePoints, CURVES_MIN_POLY_POINTS / skip));
-
- if (dCurve && !dCurve->isIdentity()) {
- needed = true;
- localmaskutili = true;
- }
- }
-
- fillCurveArray(dCurve.get(), LocalmaskCurve, skip, needed);
-
-}
-
-
-
void CurveFactory::localLCurve(double br, double contr, /*const std::vector& curvePoints,*/
LUTu & histogram, LUTf & outCurve,
int skip, bool & utili)
@@ -2548,16 +2487,17 @@ void LocHHmaskCurve::Set(const Curve &pCurve)
-void LocHHmaskCurve::Set(const std::vector &curvePoints, bool & lhmasutili)
+bool LocHHmaskCurve::Set(const std::vector &curvePoints)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
- lhmasutili = true;
Set(ttcurve);
+ return true;
} else {
Reset();
+ return false;
}
}
@@ -2598,16 +2538,17 @@ void LocCCmaskCurve::Set(const Curve &pCurve)
-void LocCCmaskCurve::Set(const std::vector &curvePoints, bool & lcmasutili)
+bool LocCCmaskCurve::Set(const std::vector &curvePoints)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
- lcmasutili = true;
Set(ttcurve);
+ return true;
} else {
Reset();
+ return false;
}
}
@@ -2644,16 +2585,17 @@ void LocLLmaskCurve::Set(const Curve &pCurve)
-void LocLLmaskCurve::Set(const std::vector &curvePoints, bool & llmasutili)
+bool LocLLmaskCurve::Set(const std::vector &curvePoints)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
- llmasutili = true;
Set(ttcurve);
+ return true;
} else {
Reset();
+ return false;
}
}
@@ -2692,16 +2634,17 @@ void LocHHCurve::Set(const Curve &pCurve)
-void LocHHCurve::Set(const std::vector &curvePoints, bool &HHutili)
+bool LocHHCurve::Set(const std::vector &curvePoints)
{
// if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
ttcurve.setIdentityValue(0.);
Set(ttcurve);
- HHutili = true;
+ return true;
} else {
Reset();
+ return false;
}
}
@@ -2740,7 +2683,7 @@ void LocLHCurve::Set(const Curve &pCurve)
-void LocLHCurve::Set(const std::vector &curvePoints, bool &LHutili)
+bool LocLHCurve::Set(const std::vector &curvePoints)
{
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
@@ -2748,9 +2691,10 @@ void LocLHCurve::Set(const std::vector &curvePoints, bool &LHutili)
FlatCurve tcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
tcurve.setIdentityValue(0.);
Set(tcurve);
- LHutili = true;
+ return true;
} else {
Reset();
+ return false;
}
}
@@ -2784,16 +2728,17 @@ void LocwavCurve::Set(const Curve &pCurve)
//lutLocCurve.dump("wav");
}
-void LocwavCurve::Set(const std::vector &curvePoints, bool & lcwavutili)
+bool LocwavCurve::Set(const std::vector &curvePoints)
{
if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) {
FlatCurve tcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2);
tcurve.setIdentityValue(0.);
- lcwavutili = true;
Set(tcurve);
+ return true;
} else {
Reset();
+ return false;
}
}
diff --git a/rtengine/curves.h b/rtengine/curves.h
index 9eb3d8e56..5769cada1 100644
--- a/rtengine/curves.h
+++ b/rtengine/curves.h
@@ -375,11 +375,8 @@ public:
static void curveToning(const std::vector& curvePoints, LUTf & ToningCurve, int skip);
- static void curveLocal(bool & locallutili, const std::vector& curvePoints, LUTf & LocalLCurve, int skip);
- static void curveCCLocal(bool & localcutili, const std::vector& curvePoints, LUTf & LocalCCurve, int skip);
+ static bool curveLocal(const std::vector& curvePoints, LUTf& LocalCurve, int skip);
static void curveskLocal(bool & localskutili, const std::vector& curvePoints, LUTf & LocalskCurve, int skip);
- static void curveexLocal(bool & localexutili, const std::vector& curvePoints, LUTf & LocalexCurve, int skip);
- static void curvemaskLocal(bool & localmaskutili, const std::vector& curvePoints, LUTf & LocalmaskCurve, int skip);
static void complexsgnCurve(bool & autili, bool & butili, bool & ccutili, bool & clcutili, const std::vector& acurvePoints,
const std::vector& bcurvePoints, const std::vector& cccurvePoints, const std::vector& lccurvePoints, LUTf & aoutCurve, LUTf & boutCurve, LUTf & satCurve, LUTf & lhskCurve,
@@ -488,7 +485,7 @@ protected:
void NURBS_set();
public:
- DiagonalCurve(const std::vector& points, int ppn = CURVES_MIN_POLY_POINTS);
+ explicit DiagonalCurve(const std::vector& points, int ppn = CURVES_MIN_POLY_POINTS);
~DiagonalCurve() override;
double getVal(double t) const override;
@@ -513,7 +510,7 @@ private:
public:
- FlatCurve(const std::vector& points, bool isPeriodic = true, int ppn = CURVES_MIN_POLY_POINTS);
+ explicit FlatCurve(const std::vector& points, bool isPeriodic = true, int ppn = CURVES_MIN_POLY_POINTS);
~FlatCurve() override;
double getVal(double t) const override;
@@ -632,7 +629,7 @@ public:
virtual ~LocLHCurve() {};
LocLHCurve();
void Reset();
- void Set(const std::vector &curvePoints, bool &LHutili);
+ bool Set(const std::vector &curvePoints);
float getSum() const
{
return sum;
@@ -1184,7 +1181,7 @@ public:
virtual ~LocHHmaskCurve() {};
LocHHmaskCurve();
void Reset();
- void Set(const std::vector &curvePoints, bool & lhmasutili);
+ bool Set(const std::vector &curvePoints);
float getSum() const
{
return sum;
@@ -1213,7 +1210,7 @@ public:
virtual ~LocCCmaskCurve() {};
LocCCmaskCurve();
void Reset();
- void Set(const std::vector &curvePoints, bool & lcmasutili);
+ bool Set(const std::vector &curvePoints);
float getSum() const
{
return sum;
@@ -1241,7 +1238,7 @@ public:
virtual ~LocLLmaskCurve() {};
LocLLmaskCurve();
void Reset();
- void Set(const std::vector &curvePoints, bool & llmasutili);
+ bool Set(const std::vector &curvePoints);
float getSum() const
{
return sum;
@@ -1270,7 +1267,7 @@ public:
virtual ~LocHHCurve() {};
LocHHCurve();
void Reset();
- void Set(const std::vector &curvePoints, bool &HHutili);
+ bool Set(const std::vector &curvePoints);
float getSum() const
{
return sum;
@@ -1355,7 +1352,7 @@ public:
virtual ~LocwavCurve() {};
LocwavCurve();
void Reset();
- void Set(const std::vector &curvePoints, bool &lcwavutili);
+ bool Set(const std::vector &curvePoints);
float getSum() const
{
return sum;
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index 99bc2581d..ce7714e21 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -52,7 +52,7 @@ namespace rtengine
{
Crop::Crop(ImProcCoordinator* parent, EditDataProvider *editDataProvider, bool isDetailWindow)
- : PipetteBuffer(editDataProvider), origCrop(nullptr), laboCrop(nullptr), labnCrop(nullptr), reservCrop(nullptr), lastorigCrop(nullptr),
+ : PipetteBuffer(editDataProvider), origCrop(nullptr), laboCrop(nullptr), labnCrop(nullptr),
cropImg(nullptr), shbuf_real(nullptr), transCrop(nullptr), cieCrop(nullptr), shbuffer(nullptr),
updating(false), newUpdatePending(false), skip(10),
cropx(0), cropy(0), cropw(-1), croph(-1),
@@ -851,224 +851,143 @@ void Crop::update(int todo)
}*/
// apply luminance operations
- //bool tutu = true;
if (todo & (M_LUMINANCE + M_COLOR)) { //
- //if (tutu) { //
//I made a little change here. Rather than have luminanceCurve (and others) use in/out lab images, we can do more if we copy right here.
labnCrop->CopyFrom(laboCrop);
- reservCrop->CopyFrom(laboCrop);
- lastorigCrop->CopyFrom(laboCrop);
+ if (params.locallab.enabled && !params.locallab.spots.empty()) {
+ const std::unique_ptr reservCrop(new LabImage(*laboCrop, true));
+ const std::unique_ptr lastorigCrop(new LabImage(*laboCrop, true));
+ auto& lllocalcurve2 = parent->lllocalcurve;
+ auto& cllocalcurve2 = parent->cllocalcurve;
+ auto& lclocalcurve2 = parent->lclocalcurve;
+ auto& cclocalcurve2 = parent->cclocalcurve;
+ auto& rgblocalcurve2 = parent->rgblocalcurve;
+ auto& exlocalcurve2 = parent->exlocalcurve;
+ auto& lmasklocalcurve2 = parent->lmasklocalcurve;
+ auto& lmaskexplocalcurve2 = parent->lmaskexplocalcurve;
+ auto& lmaskSHlocalcurve2 = parent->lmaskSHlocalcurve;
+ auto& lmaskviblocalcurve2 = parent->lmaskviblocalcurve;
+ auto& lmasktmlocalcurve2 = parent->lmasktmlocalcurve;
+ auto& lmaskretilocalcurve2 = parent->lmaskretilocalcurve;
+ auto& lmaskcblocalcurve2 = parent->lmaskcblocalcurve;
+ auto& lmaskbllocalcurve2 = parent->lmaskbllocalcurve;
+ auto& lmasklclocalcurve2 = parent->lmasklclocalcurve;
+ auto& hltonecurveloc2 = parent->hltonecurveloc;
+ auto& shtonecurveloc2 = parent->shtonecurveloc;
+ auto& tonecurveloc2 = parent->tonecurveloc;
+ auto& lightCurveloc2 = parent->lightCurveloc;
+ auto& locRETgainCurve = parent->locRETgainCurve;
+ auto& locRETtransCurve = parent->locRETtransCurve;
+ auto& loclhCurve = parent->loclhCurve;
+ auto& lochhCurve = parent->lochhCurve;
+ auto& locccmasCurve = parent->locccmasCurve;
+ auto& locllmasCurve = parent->locllmasCurve;
+ auto& lochhmasCurve = parent->lochhmasCurve;
+ auto& lochhhmasCurve = parent->lochhhmasCurve;
+ auto& locccmasexpCurve = parent->locccmasexpCurve;
+ auto& locllmasexpCurve = parent->locllmasexpCurve;
+ auto& lochhmasexpCurve = parent->lochhmasexpCurve;
+ auto& locccmasSHCurve = parent->locccmasSHCurve;
+ auto& locllmasSHCurve = parent->locllmasSHCurve;
+ auto& lochhmasSHCurve = parent->lochhmasSHCurve;
+ auto& locccmasvibCurve = parent->locccmasvibCurve;
+ auto& locllmasvibCurve = parent->locllmasvibCurve;
+ auto& lochhmasvibCurve = parent->lochhmasvibCurve;
+ auto& locccmaslcCurve = parent->locccmaslcCurve;
+ auto& locllmaslcCurve = parent->locllmaslcCurve;
+ auto& lochhmaslcCurve = parent->lochhmaslcCurve;
+ auto& locccmascbCurve = parent->locccmascbCurve;
+ auto& locllmascbCurve = parent->locllmascbCurve;
+ auto& lochhmascbCurve = parent->lochhmascbCurve;
+ auto& locccmasretiCurve = parent->locccmasretiCurve;
+ auto& locllmasretiCurve = parent->locllmasretiCurve;
+ auto& lochhmasretiCurve = parent->lochhmasretiCurve;
+ auto& locccmastmCurve = parent->locccmastmCurve;
+ auto& locllmastmCurve = parent->locllmastmCurve;
+ auto& lochhmastmCurve = parent->lochhmastmCurve;
+ auto& locccmasblCurve = parent->locccmasblCurve;
+ auto& locllmasblCurve = parent->locllmasblCurve;
+ auto& lochhmasblCurve = parent->lochhmasblCurve;
+ auto& locccmas_Curve = parent->locccmas_Curve;
+ auto& locllmas_Curve = parent->locllmas_Curve;
+ auto& lochhmas_Curve = parent->lochhmas_Curve;
+ auto& lochhhmas_Curve = parent->lochhhmas_Curve;
+ auto& locwavCurve = parent->locwavCurve;
+ auto& loclmasCurveblwav = parent->loclmasCurveblwav;
+ auto& loclmasCurvecolwav = parent->loclmasCurvecolwav;
+ auto& loclevwavCurve = parent->loclevwavCurve;
+ auto& locconwavCurve = parent->locconwavCurve;
+ auto& loccompwavCurve = parent->loccompwavCurve;
+ auto& loccomprewavCurve = parent->loccomprewavCurve;
+ auto& locedgwavCurve = parent->locedgwavCurve;
+ auto& locwavCurveden = parent->locwavCurveden;
+ auto& lmasklocal_curve2 = parent->lmasklocal_curve;
+ auto& loclmasCurve_wav = parent->loclmasCurve_wav;
- //parent->ipf.luminanceCurve (labnCrop, labnCrop, parent->lumacurve);
- bool utili = parent->utili;
- bool autili = parent->autili;
- bool butili = parent->butili;
- bool ccutili = parent->ccutili;
- bool clcutili = parent->clcutili;
- bool cclutili = parent->cclutili;
-
- bool locallutili = parent->locallutili;
- LUTf lllocalcurve2(65536, 0);
- bool localclutili = parent->localclutili;
- LUTf cllocalcurve2(65536, 0);
- bool locallcutili = parent->locallcutili;
- LUTf lclocalcurve2(65536, 0);
- bool localcutili = parent->locallutili;
- LUTf cclocalcurve2(65536, 0);
- bool localrgbutili = parent->localrgbutili;
- LUTf rgblocalcurve2(65536, 0);
- bool localexutili = parent->localexutili;
- LUTf exlocalcurve2(65536, 0);
- bool localmaskutili = parent->localmaskutili;
- bool localmaskexputili = parent->localmaskexputili;
- bool localmaskSHutili = parent->localmaskSHutili;
- bool localmaskvibutili = parent->localmaskvibutili;
- bool localmasktmutili = parent->localmasktmutili;
- bool localmaskretiutili = parent->localmaskretiutili;
- bool localmaskcbutili = parent->localmaskcbutili;
- bool localmaskblutili = parent->localmaskblutili;
- bool localmasklcutili = parent->localmasklcutili;
- LUTf lmasklocalcurve2(65536, 0);
- LUTf lmaskexplocalcurve2(65536, 0);
- LUTf lmaskSHlocalcurve2(65536, 0);
- LUTf lmaskviblocalcurve2(65536, 0);
- LUTf lmasktmlocalcurve2(65536, 0);
- LUTf lmaskretilocalcurve2(65536, 0);
- LUTf lmaskcblocalcurve2(65536, 0);
- LUTf lmaskbllocalcurve2(65536, 0);
- LUTf lmasklclocalcurve2(65536, 0);
- LUTf hltonecurveloc2(65536, 0); //65536
- LUTf shtonecurveloc2(65536, 0);
- LUTf tonecurveloc2(65536, 0);
- LUTf lightCurveloc2(32770, 0);
- bool LHutili = parent->LHutili;
- bool HHutili = parent->HHutili;
- bool llmasutili = parent->llmasutili;
- bool lhmasutili = parent->lhmasutili;
- bool lhhmasutili = parent->lhhmasutili;
- bool lcmasutili = parent->lcmasutili;
- bool lhmasexputili = parent->lhmasexputili;
- bool lcmasexputili = parent->lcmasexputili;
- bool llmasexputili = parent->llmasexputili;
- bool lhmasSHutili = parent->lhmasSHutili;
- bool lcmasSHutili = parent->lcmasSHutili;
- bool llmasSHutili = parent->llmasSHutili;
- bool lhmasvibutili = parent->lhmasvibutili;
- bool lcmasvibutili = parent->lcmasvibutili;
- bool llmasvibutili = parent->llmasvibutili;
- bool lhmaslcutili = parent->lhmaslcutili;
- bool lcmaslcutili = parent->lcmaslcutili;
- bool llmaslcutili = parent->llmaslcutili;
- bool lhmascbutili = parent->lhmascbutili;
- bool lcmascbutili = parent->lcmascbutili;
- bool llmascbutili = parent->llmascbutili;
- bool lhmasretiutili = parent->lhmasretiutili;
- bool lcmasretiutili = parent->lcmasretiutili;
- bool llmasretiutili = parent->llmasretiutili;
- bool lhmastmutili = parent->lhmastmutili;
- bool lcmastmutili = parent->lcmastmutili;
- bool llmastmutili = parent->llmastmutili;
- bool lhmasblutili = parent->lhmasblutili;
- bool lcmasblutili = parent->lcmasblutili;
- bool llmasblutili = parent->llmasblutili;
- bool locwavutili = parent->locwavutili;
- bool locwavdenutili = parent->locwavdenutili;
- bool loclevwavutili = parent->loclevwavutili;
- bool locconwavutili = parent->locconwavutili;
- bool loccompwavutili = parent->loccompwavutili;
- bool loccomprewavutili = parent->loccomprewavutili;
- bool locedgwavutili = parent->locedgwavutili;
- bool lmasutiliblwav = parent->lmasutiliblwav;
- bool lmasutilicolwav = parent->lmasutilicolwav;
-
- // float avg = parent->avg;
- LUTu dummy;
- bool needslocal = params.locallab.enabled;
- LocretigainCurve locRETgainCurve;
- LocretitransCurve locRETtransCurve;
- LocLHCurve loclhCurve;
- LocHHCurve lochhCurve;
- LocCCmaskCurve locccmasCurve;
- LocLLmaskCurve locllmasCurve;
- LocHHmaskCurve lochhmasCurve;
- LocHHmaskCurve lochhhmasCurve;
- LocCCmaskCurve locccmasexpCurve;
- LocLLmaskCurve locllmasexpCurve;
- LocHHmaskCurve lochhmasexpCurve;
- LocCCmaskCurve locccmasSHCurve;
- LocLLmaskCurve locllmasSHCurve;
- LocHHmaskCurve lochhmasSHCurve;
- // LocHHmaskCurve lochhhmasSHCurve;
- LocCCmaskCurve locccmasvibCurve;
- LocLLmaskCurve locllmasvibCurve;
- LocHHmaskCurve lochhmasvibCurve;
- LocCCmaskCurve locccmaslcCurve;
- LocLLmaskCurve locllmaslcCurve;
- LocHHmaskCurve lochhmaslcCurve;
- LocCCmaskCurve locccmascbCurve;
- LocLLmaskCurve locllmascbCurve;
- LocHHmaskCurve lochhmascbCurve;
- LocCCmaskCurve locccmasretiCurve;
- LocLLmaskCurve locllmasretiCurve;
- LocHHmaskCurve lochhmasretiCurve;
- LocCCmaskCurve locccmastmCurve;
- LocLLmaskCurve locllmastmCurve;
- LocHHmaskCurve lochhmastmCurve;
- LocCCmaskCurve locccmasblCurve;
- LocLLmaskCurve locllmasblCurve;
- LocHHmaskCurve lochhmasblCurve;
- LocwavCurve locwavCurve;
- LocwavCurve loclmasCurveblwav;
- LocwavCurve loclmasCurvecolwav;
- LocwavCurve loclevwavCurve;
- LocwavCurve locconwavCurve;
- LocwavCurve loccompwavCurve;
- LocwavCurve loccomprewavCurve;
- LocwavCurve locedgwavCurve;
- LocwavCurve locwavCurveden;
-
- LocretigainCurverab locRETgainCurverab;
- locallutili = false;
- int sca = skip;
-
- // bool tyty = false;
- // int maxspot = 1;
-
- if (needslocal) {
for (int sp = 0; sp < (int)params.locallab.spots.size(); sp++) {
locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve);
locRETtransCurve.Set(params.locallab.spots.at(sp).localTtranscurve);
- loclhCurve.Set(params.locallab.spots.at(sp).LHcurve, LHutili);
- lochhCurve.Set(params.locallab.spots.at(sp).HHcurve, HHutili);
- locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve, lcmasutili);
- locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve, llmasutili);
- lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve, lhmasutili);
- lochhhmasCurve.Set(params.locallab.spots.at(sp).HHhmaskcurve, lhhmasutili);
- locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve, lcmasexputili);
- locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve, llmasexputili);
- lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve, lhmasexputili);
- locccmasSHCurve.Set(params.locallab.spots.at(sp).CCmaskSHcurve, lcmasSHutili);
- locllmasSHCurve.Set(params.locallab.spots.at(sp).LLmaskSHcurve, llmasSHutili);
- lochhmasSHCurve.Set(params.locallab.spots.at(sp).HHmaskSHcurve, lhmasSHutili);
- locccmasvibCurve.Set(params.locallab.spots.at(sp).CCmaskvibcurve, lcmasvibutili);
- locllmasvibCurve.Set(params.locallab.spots.at(sp).LLmaskvibcurve, llmasvibutili);
- lochhmasvibCurve.Set(params.locallab.spots.at(sp).HHmaskvibcurve, lhmasvibutili);
- locccmascbCurve.Set(params.locallab.spots.at(sp).CCmaskcbcurve, lcmascbutili);
- locllmascbCurve.Set(params.locallab.spots.at(sp).LLmaskcbcurve, llmascbutili);
- lochhmascbCurve.Set(params.locallab.spots.at(sp).HHmaskcbcurve, lhmascbutili);
- locccmasretiCurve.Set(params.locallab.spots.at(sp).CCmaskreticurve, lcmasretiutili);
- locllmasretiCurve.Set(params.locallab.spots.at(sp).LLmaskreticurve, llmasretiutili);
- lochhmasretiCurve.Set(params.locallab.spots.at(sp).HHmaskreticurve, lhmasretiutili);
- locccmastmCurve.Set(params.locallab.spots.at(sp).CCmasktmcurve, lcmastmutili);
- locllmastmCurve.Set(params.locallab.spots.at(sp).LLmasktmcurve, llmastmutili);
- lochhmastmCurve.Set(params.locallab.spots.at(sp).HHmasktmcurve, lhmastmutili);
- locccmasblCurve.Set(params.locallab.spots.at(sp).CCmaskblcurve, lcmasblutili);
- locllmasblCurve.Set(params.locallab.spots.at(sp).LLmaskblcurve, llmasblutili);
- lochhmasblCurve.Set(params.locallab.spots.at(sp).HHmaskblcurve, lhmasblutili);
- loclmasCurveblwav.Set(params.locallab.spots.at(sp).LLmaskblcurvewav, lmasutiliblwav);
- loclmasCurvecolwav.Set(params.locallab.spots.at(sp).LLmaskcolcurvewav, lmasutilicolwav);
- locccmaslcCurve.Set(params.locallab.spots.at(sp).CCmasklccurve, lcmaslcutili);
- locllmaslcCurve.Set(params.locallab.spots.at(sp).LLmasklccurve, llmaslcutili);
- lochhmaslcCurve.Set(params.locallab.spots.at(sp).HHmasklccurve, lhmaslcutili);
-
- locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili);
- locwavCurveden.Set(params.locallab.spots.at(sp).locwavcurveden, locwavdenutili);
- loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve, loclevwavutili);
- locconwavCurve.Set(params.locallab.spots.at(sp).locconwavcurve, locconwavutili);
- loccompwavCurve.Set(params.locallab.spots.at(sp).loccompwavcurve, loccompwavutili);
- loccomprewavCurve.Set(params.locallab.spots.at(sp).loccomprewavcurve, loccomprewavutili);
- locedgwavCurve.Set(params.locallab.spots.at(sp).locedgwavcurve, locedgwavutili);
- locallutili = false;
- CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve2, sca);
- localclutili = false;
- CurveFactory::curveLocal(localclutili, params.locallab.spots.at(sp).clcurve, cllocalcurve2, sca);
- locallcutili = false;
- CurveFactory::curveLocal(locallcutili, params.locallab.spots.at(sp).lccurve, lclocalcurve2, sca);
- localrgbutili = false;
- CurveFactory::curveLocal(localrgbutili, params.locallab.spots.at(sp).rgbcurve, rgblocalcurve2, sca);
- localcutili = false;
- CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve2, sca);
- localexutili = false;
- CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve2, sca);
- localmaskutili = false;
- CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, sca);
- localmaskexputili = false;
- CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca);
- localmaskSHutili = false;
- CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve2, sca);
- localmaskvibutili = false;
- CurveFactory::curvemaskLocal(localmaskvibutili, params.locallab.spots.at(sp).Lmaskvibcurve, lmaskviblocalcurve2, sca);
- localmasktmutili = false;
- CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve2, sca);
- localmaskretiutili = false;
- CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve2, sca);
- localmaskcbutili = false;
- CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve2, sca);
- localmasklcutili = false;
- CurveFactory::curvemaskLocal(localmasklcutili, params.locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve2, sca);
- localmaskblutili = false;
- CurveFactory::curvemaskLocal(localmaskblutili, params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve2, sca);
+ const bool LHutili = loclhCurve.Set(params.locallab.spots.at(sp).LHcurve);
+ const bool HHutili = lochhCurve.Set(params.locallab.spots.at(sp).HHcurve);
+ const bool lcmasutili = locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve);
+ const bool llmasutili = locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve);
+ const bool lhmasutili = lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve);
+ const bool lhhmasutili = lochhhmasCurve.Set(params.locallab.spots.at(sp).HHhmaskcurve);
+ const bool lcmasexputili = locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve);
+ const bool llmasexputili = locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve);
+ const bool lhmasexputili = lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve);
+ const bool lcmasSHutili = locccmasSHCurve.Set(params.locallab.spots.at(sp).CCmaskSHcurve);
+ const bool llmasSHutili = locllmasSHCurve.Set(params.locallab.spots.at(sp).LLmaskSHcurve);
+ const bool lhmasSHutili = lochhmasSHCurve.Set(params.locallab.spots.at(sp).HHmaskSHcurve);
+ const bool lcmasvibutili = locccmasvibCurve.Set(params.locallab.spots.at(sp).CCmaskvibcurve);
+ const bool llmasvibutili = locllmasvibCurve.Set(params.locallab.spots.at(sp).LLmaskvibcurve);
+ const bool lhmasvibutili = lochhmasvibCurve.Set(params.locallab.spots.at(sp).HHmaskvibcurve);
+ const bool lcmascbutili = locccmascbCurve.Set(params.locallab.spots.at(sp).CCmaskcbcurve);
+ const bool llmascbutili = locllmascbCurve.Set(params.locallab.spots.at(sp).LLmaskcbcurve);
+ const bool lhmascbutili = lochhmascbCurve.Set(params.locallab.spots.at(sp).HHmaskcbcurve);
+ const bool lcmasretiutili = locccmasretiCurve.Set(params.locallab.spots.at(sp).CCmaskreticurve);
+ const bool llmasretiutili = locllmasretiCurve.Set(params.locallab.spots.at(sp).LLmaskreticurve);
+ const bool lhmasretiutili = lochhmasretiCurve.Set(params.locallab.spots.at(sp).HHmaskreticurve);
+ const bool lcmastmutili = locccmastmCurve.Set(params.locallab.spots.at(sp).CCmasktmcurve);
+ const bool llmastmutili = locllmastmCurve.Set(params.locallab.spots.at(sp).LLmasktmcurve);
+ const bool lhmastmutili = lochhmastmCurve.Set(params.locallab.spots.at(sp).HHmasktmcurve);
+ const bool lcmasblutili = locccmasblCurve.Set(params.locallab.spots.at(sp).CCmaskblcurve);
+ const bool llmasblutili = locllmasblCurve.Set(params.locallab.spots.at(sp).LLmaskblcurve);
+ const bool lhmasblutili = lochhmasblCurve.Set(params.locallab.spots.at(sp).HHmaskblcurve);
+ const bool lcmas_utili = locccmas_Curve.Set(params.locallab.spots.at(sp).CCmask_curve);
+ const bool llmas_utili = locllmas_Curve.Set(params.locallab.spots.at(sp).LLmask_curve);
+ const bool lhmas_utili = lochhmas_Curve.Set(params.locallab.spots.at(sp).HHmask_curve);
+ const bool lhhmas_utili = lochhhmas_Curve.Set(params.locallab.spots.at(sp).HHhmask_curve);
+ const bool lmasutili_wav = loclmasCurve_wav.Set(params.locallab.spots.at(sp).LLmask_curvewav);
+ const bool lmasutiliblwav = loclmasCurveblwav.Set(params.locallab.spots.at(sp).LLmaskblcurvewav);
+ const bool lmasutilicolwav = loclmasCurvecolwav.Set(params.locallab.spots.at(sp).LLmaskcolcurvewav);
+ const bool lcmaslcutili = locccmaslcCurve.Set(params.locallab.spots.at(sp).CCmasklccurve);
+ const bool llmaslcutili = locllmaslcCurve.Set(params.locallab.spots.at(sp).LLmasklccurve);
+ const bool lhmaslcutili = lochhmaslcCurve.Set(params.locallab.spots.at(sp).HHmasklccurve);
+ const bool locwavutili = locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve);
+ const bool locwavdenutili = locwavCurveden.Set(params.locallab.spots.at(sp).locwavcurveden);
+ const bool loclevwavutili = loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve);
+ const bool locconwavutili = locconwavCurve.Set(params.locallab.spots.at(sp).locconwavcurve);
+ const bool loccompwavutili = loccompwavCurve.Set(params.locallab.spots.at(sp).loccompwavcurve);
+ const bool loccomprewavutili = loccomprewavCurve.Set(params.locallab.spots.at(sp).loccomprewavcurve);
+ const bool locedgwavutili = locedgwavCurve.Set(params.locallab.spots.at(sp).locedgwavcurve);
+ const bool locallutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).llcurve, lllocalcurve2, skip);
+ const bool localclutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).clcurve, cllocalcurve2, skip);
+ const bool locallcutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).lccurve, lclocalcurve2, skip);
+ const bool localrgbutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).rgbcurve, rgblocalcurve2, skip);
+ const bool localcutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).cccurve, cclocalcurve2, skip);
+ const bool localexutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).excurve, exlocalcurve2, skip);
+ const bool localmaskutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, skip);
+ const bool localmaskexputili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, skip);
+ const bool localmaskSHutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve2, skip);
+ const bool localmaskvibutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskvibcurve, lmaskviblocalcurve2, skip);
+ const bool localmasktmutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve2, skip);
+ const bool localmaskretiutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve2, skip);
+ const bool localmaskcbutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve2, skip);
+ const bool localmasklcutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve2, skip);
+ const bool localmaskblutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve2, skip);
+ const bool localmask_utili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmask_curve, lmasklocal_curve2, skip);
double ecomp = params.locallab.spots.at(sp).expcomp;
double black = params.locallab.spots.at(sp).black;
@@ -1082,8 +1001,6 @@ void Crop::update(int todo)
double cont = params.locallab.spots.at(sp).contrast;
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
- int lastsav;
- float avge;
huerefblu = parent->huerefblurs[sp];
chromarefblu = parent->chromarefblurs[sp];
lumarefblu = parent->lumarefblurs[sp];
@@ -1091,9 +1008,7 @@ void Crop::update(int todo)
chromare = parent->chromarefs[sp];
lumare = parent->lumarefs[sp];
sobelre = parent->sobelrefs[sp];
- avge = parent->avgs[sp];
-
- lastsav = parent->lastsavrests[sp];
+ const float avge = parent->avgs[sp];
float minCD;
float maxCD;
@@ -1103,12 +1018,13 @@ void Crop::update(int todo)
float Tsigma;
float Tmin;
float Tmax;
+ int lastsav;
CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumare,
hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, avge,
- sca);
+ skip);
// Locallab mask are only shown for selected spot
if (sp == params.locallab.selspot) {
- parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, lastorigCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
+ parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), lastorigCrop.get(), cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
lllocalcurve2,locallutili,
cllocalcurve2, localclutili,
lclocalcurve2, locallcutili,
@@ -1121,7 +1037,9 @@ void Crop::update(int todo)
lmaskretilocalcurve2, localmaskretiutili,
lmaskcblocalcurve2, localmaskcbutili,
lmaskbllocalcurve2, localmaskblutili,
- lmasklclocalcurve2, localmasklcutili,
+ lmasklclocalcurve2, localmasklcutili,
+ lmasklocal_curve2, localmask_utili,
+
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili,
@@ -1130,6 +1048,8 @@ void Crop::update(int todo)
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili,
+ locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
+ lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav,lmasutiliblwav,
loclmasCurvecolwav,lmasutilicolwav,
locwavCurve, locwavutili,
@@ -1139,12 +1059,13 @@ void Crop::update(int todo)
loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
+ loclmasCurve_wav,lmasutili_wav,
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav,
parent->previewDeltaE, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
- minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
+ parent->locall_Mask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} else {
- parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, lastorigCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
+ parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), lastorigCrop.get(), cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
lllocalcurve2,locallutili,
cllocalcurve2, localclutili,
lclocalcurve2, locallcutili,
@@ -1157,7 +1078,9 @@ void Crop::update(int todo)
lmaskretilocalcurve2, localmaskretiutili,
lmaskcblocalcurve2, localmaskcbutili,
lmaskbllocalcurve2, localmaskblutili,
- lmasklclocalcurve2, localmasklcutili,
+ lmasklclocalcurve2, localmasklcutili,
+ lmasklocal_curve2, localmask_utili,
+
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili,lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili,
@@ -1166,6 +1089,9 @@ void Crop::update(int todo)
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili,
+ locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
+ lochhhmas_Curve, lhhmas_utili,
+
loclmasCurveblwav,lmasutiliblwav,
loclmasCurvecolwav,lmasutilicolwav,
locwavCurve, locwavutili,
@@ -1175,70 +1101,16 @@ void Crop::update(int todo)
loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
+ loclmasCurve_wav,lmasutili_wav,
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
- huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
}
- lastorigCrop->CopyFrom(labnCrop);
-
- lllocalcurve2.clear();
- lclocalcurve2.clear();
- cllocalcurve2.clear();
- lightCurveloc2.clear();
- rgblocalcurve2.clear();
- cclocalcurve2.clear();
- exlocalcurve2.clear();
- lmasklocalcurve2.clear();
- lmaskexplocalcurve2.clear();
- lmaskSHlocalcurve2.clear();
- lmaskviblocalcurve2.clear();
- lmasktmlocalcurve2.clear();
- lmaskretilocalcurve2.clear();
- lmaskcblocalcurve2.clear();
- lmaskbllocalcurve2.clear();
- hltonecurveloc2.clear();
- shtonecurveloc2.clear();
- tonecurveloc2.clear();
- locRETgainCurve.Reset();
- locRETtransCurve.Reset();
- loclhCurve.Reset();
- lochhCurve.Reset();
- locccmasCurve.Reset();
- locllmasCurve.Reset();
- lochhmasCurve.Reset();
- lochhhmasCurve.Reset();
- locllmasexpCurve.Reset();
- locccmasexpCurve.Reset();
- lochhmasexpCurve.Reset();
- locllmasSHCurve.Reset();
- locccmasSHCurve.Reset();
- lochhmasSHCurve.Reset();
- locllmasvibCurve.Reset();
- locccmasvibCurve.Reset();
- lochhmasvibCurve.Reset();
- locllmascbCurve.Reset();
- locccmascbCurve.Reset();
- lochhmascbCurve.Reset();
- locllmasretiCurve.Reset();
- locccmasretiCurve.Reset();
- lochhmasretiCurve.Reset();
- locllmastmCurve.Reset();
- locccmastmCurve.Reset();
- lochhmastmCurve.Reset();
- locllmasblCurve.Reset();
- locccmasblCurve.Reset();
- lochhmasblCurve.Reset();
- locllmaslcCurve.Reset();
- locccmaslcCurve.Reset();
- lochhmaslcCurve.Reset();
- locwavCurve.Reset();
- loclevwavCurve.Reset();
- locconwavCurve.Reset();
- locconwavCurve.Reset();
- locwavCurveden.Reset();
- loclmasCurveblwav.Reset();
- loclmasCurvecolwav.Reset();
+ if (sp + 1u < params.locallab.spots.size()) {
+ // do not copy for last spot as it is not needed anymore
+ lastorigCrop->CopyFrom(labnCrop);
+ }
if (skip <= 2) {
Glib::usleep(settings->cropsleep); //wait to avoid crash when crop 100% and move window
@@ -1246,7 +1118,14 @@ void Crop::update(int todo)
}
}
- // int moderetinex;
+ bool utili = parent->utili;
+ bool autili = parent->autili;
+ bool butili = parent->butili;
+ bool ccutili = parent->ccutili;
+ bool clcutili = parent->clcutili;
+ bool cclutili = parent->cclutili;
+
+ LUTu dummy;
parent->ipf.chromiLuminanceCurve(this, 1, labnCrop, labnCrop, parent->chroma_acurve, parent->chroma_bcurve, parent->satcurve, parent->lhskcurve, parent->clcurve, parent->lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy);
parent->ipf.vibrance(labnCrop, params.vibrance, params.toneCurve.hrenabled, params.icm.workingProfile);
parent->ipf.labColorCorrectionRegions(labnCrop);
@@ -1377,19 +1256,17 @@ void Crop::update(int todo)
if (WaveParams.softrad > 0.f) {
- provradius = new LabImage(labnCrop->W, labnCrop->H);
- provradius->CopyFrom(labnCrop);
+ provradius = new LabImage(*labnCrop, true);
}
if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") {
- unshar = new LabImage(labnCrop->W, labnCrop->H);
provis = params.wavelet.CLmethod;
params.wavelet.CLmethod = "all";
parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip);
- unshar->CopyFrom(labnCrop);
+ unshar = new LabImage(*labnCrop, true);
params.wavelet.CLmethod = provis;
@@ -1444,11 +1321,11 @@ void Crop::update(int todo)
}
double epsilmax = 0.0001;
double epsilmin = 0.00001;
- double aepsil = (epsilmax - epsilmin) / 90.f;
- double bepsil = epsilmax - 100.f * aepsil;
+ double aepsil = (epsilmax - epsilmin) / 100.f;
+ double bepsil = epsilmin; //epsilmax - 100.f * aepsil;
double epsil = aepsil * WaveParams.softrad + bepsil;
- float blur = 10.f / skip * (0.0001f + 0.8f * WaveParams.softrad);
+ float blur = 10.f / skip * (0.5f + 0.8f * WaveParams.softrad);
rtengine::guidedFilter(guid, ble, ble, blur, epsil, false);
@@ -1635,22 +1512,6 @@ void Crop::freeAll()
labnCrop = nullptr;
}
- if (reservCrop) {
- delete reservCrop;
- reservCrop = nullptr;
- }
-
- if (lastorigCrop) {
- delete lastorigCrop;
- lastorigCrop = nullptr;
- }
-
-
- /* if (lablocCrop ) {
- delete lablocCrop;
- lablocCrop = NULL;
- }
- */
if (cropImg) {
delete cropImg;
cropImg = nullptr;
@@ -1780,8 +1641,11 @@ bool Crop::setCropSizes(int rcx, int rcy, int rcw, int rch, int skip, bool inter
int orW, orH;
parent->imgsrc->getSize(cp, orW, orH);
- trafx = orx;
- trafy = ory;
+ if (trafx != orx || trafy != ory) {
+ trafx = orx;
+ trafy = ory;
+ changed = true;
+ }
int cw = skips(bw, skip);
int ch = skips(bh, skip);
@@ -1826,24 +1690,6 @@ bool Crop::setCropSizes(int rcx, int rcy, int rcw, int rch, int skip, bool inter
labnCrop = new LabImage(cropw, croph);
- if (reservCrop) {
- delete reservCrop; // labnCrop can't be resized
- }
-
- reservCrop = new LabImage(cropw, croph);
-
- if (lastorigCrop) {
- delete lastorigCrop; // labnCrop can't be resized
- }
-
- lastorigCrop = new LabImage(cropw, croph);
-
- /* if (lablocCrop) {
- delete lablocCrop; // labnCrop can't be resized
- }
-
- lablocCrop = new LabImage (cropw, croph);
- */
if (!cropImg) {
cropImg = new Image8;
}
diff --git a/rtengine/dcrop.h b/rtengine/dcrop.h
index 3f8a8ad6d..1840eabfa 100644
--- a/rtengine/dcrop.h
+++ b/rtengine/dcrop.h
@@ -40,8 +40,6 @@ protected:
Imagefloat* origCrop; // "one chunk" allocation
LabImage* laboCrop; // "one chunk" allocation
LabImage* labnCrop; // "one chunk" allocation
- LabImage* reservCrop; // "one chunk" allocation
- LabImage* lastorigCrop; // "one chunk" allocation
Image8* cropImg; // "one chunk" allocation ; displayed image in monitor color space, showing the output profile as well (soft-proofing enabled, which then correspond to workimg) or not
float * shbuf_real; // "one chunk" allocation
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 019486198..7a20513f0 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -187,100 +187,26 @@ ImProcCoordinator::ImProcCoordinator() :
// Locallab
locallListener(nullptr),
- reserv(nullptr),
- lastorigimp(nullptr),
- coordX(0), coordY(0), localX(0), localY(0),
- lllocalcurve(65536, 0),
- cllocalcurve(65536, 0),
- lclocalcurve(65536, 0),
- cclocalcurve(65536, 0),
- rgblocalcurve(65536, 0),
- exlocalcurve(65536, 0),
- hltonecurveloc(65536, 0), //32768
- shtonecurveloc(65536, 0),
- tonecurveloc(65536, 0),
- lightCurveloc(32770, 0),
- lmasklocalcurve(65536, 0),
- lmaskexplocalcurve(65536, 0),
- lmaskSHlocalcurve(65536, 0),
- lmaskviblocalcurve(65536, 0),
- lmasktmlocalcurve(65536, 0),
- lmaskretilocalcurve(65536, 0),
- lmaskcblocalcurve(65536, 0),
- lmaskbllocalcurve(65536, 0),
- lmasklclocalcurve(65536, 0),
- locallutili(false),
- localclutili(false),
- locallcutili(false),
- localcutili(false),
- localrgbutili(false),
- localexutili(false),
- llmasutili(false),
- lhmasutili(false),
- lhhmasutili(false),
- lcmasutili(false),
- localmaskutili(false),
- localmaskexputili(false),
- localmaskSHutili(false),
- localmaskvibutili(false),
- localmasktmutili(false),
- localmaskretiutili(false),
- localmaskcbutili(false),
- localmaskblutili(false),
- localmasklcutili(false),
- lcmasexputili(false),
- lhmasexputili(false),
- llmasexputili(false),
- lcmasSHutili(false),
- lhmasSHutili(false),
- llmasSHutili(false),
- lcmasvibutili(false),
- lhmasvibutili(false),
- llmasvibutili(false),
- lcmaslcutili(false),
- lhmaslcutili(false),
- llmaslcutili(false),
- lcmascbutili(false),
- lhmascbutili(false),
- llmascbutili(false),
- lcmasretiutili(false),
- lhmasretiutili(false),
- llmasretiutili(false),
- lcmastmutili(false),
- lhmastmutili(false),
- llmastmutili(false),
- lcmasblutili(false),
- lhmasblutili(false),
- llmasblutili(false),
- locwavutili(false),
- locwavdenutili(false),
- loclevwavutili(false),
- locconwavutili(false),
- loccompwavutili(false),
- loccomprewavutili(false),
- locedgwavutili(false),
- lmasutiliblwav(false),
- lmasutilicolwav(false),
- LHutili(false),
- HHutili(false),
- lastsavrests(500, -10000),
- huerefs(500, -100000.f),
- huerefblurs(500, -100000.f),
- chromarefblurs(500, -100000.f),
- lumarefblurs(500, -100000.f),
- chromarefs(500, -100000.f),
- lumarefs(500, -100000.f),
- sobelrefs(500, -100000.f),
- avgs(500, -100000.f),
- huer(0),
- huerblu(0),
- chromarblu(0),
- lumarblu(0),
- chromar(0),
- lumar(0),
- sobeler(0),
- lastsav(0),
- avg(0),
+ lllocalcurve(65536, LUT_CLIP_OFF),
+ cllocalcurve(65536, LUT_CLIP_OFF),
+ lclocalcurve(65536, LUT_CLIP_OFF),
+ cclocalcurve(65536, LUT_CLIP_OFF),
+ rgblocalcurve(65536, LUT_CLIP_OFF),
+ exlocalcurve(65536, LUT_CLIP_OFF),
+ hltonecurveloc(65536, LUT_CLIP_OFF), //32768
+ shtonecurveloc(65536, LUT_CLIP_OFF),
+ tonecurveloc(65536, LUT_CLIP_OFF),
+ lightCurveloc(32770, LUT_CLIP_OFF),
+ lmasklocalcurve(65536, LUT_CLIP_OFF),
+ lmaskexplocalcurve(65536, LUT_CLIP_OFF),
+ lmaskSHlocalcurve(65536, LUT_CLIP_OFF),
+ lmaskviblocalcurve(65536, LUT_CLIP_OFF),
+ lmasktmlocalcurve(65536, LUT_CLIP_OFF),
+ lmaskretilocalcurve(65536, LUT_CLIP_OFF),
+ lmaskcblocalcurve(65536, LUT_CLIP_OFF),
+ lmaskbllocalcurve(65536, LUT_CLIP_OFF),
+ lmasklclocalcurve(65536, LUT_CLIP_OFF),
+ lmasklocal_curve(65536, LUT_CLIP_OFF),
lastspotdup(false),
previewDeltaE(false),
locallColorMask(0),
@@ -297,6 +223,7 @@ ImProcCoordinator::ImProcCoordinator() :
localltmMask(0),
locallblMask(0),
locallsharMask(0),
+ locall_Mask(0),
retistrsav(nullptr)
{
}
@@ -796,7 +723,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
}
// Encoding log with locallab
- if (params->locallab.enabled) {
+ if (params->locallab.enabled && !params->locallab.spots.empty()) {
const int sizespot = (int)params->locallab.spots.size();
float *sourceg = nullptr;
@@ -1088,15 +1015,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
if ((todo & (M_LUMINANCE + M_COLOR)) || (todo & M_AUTOEXP)) {
nprevl->CopyFrom(oprevl);
- reserv->CopyFrom(oprevl);
- lastorigimp->CopyFrom(oprevl);
// int maxspot = 1;
//*************************************************************
// locallab
//*************************************************************
- if (params->locallab.enabled) {
+ if (params->locallab.enabled && !params->locallab.spots.empty()) {
/*
* This file is part of RawTherapee.
*
@@ -1117,127 +1042,87 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
* 2017 2018 Jacques Desmis
* 2019 Pierre Cabrera
*/
-
+ const std::unique_ptr reserv(new LabImage(*oprevl, true));
+ const std::unique_ptr lastorigimp(new LabImage(*oprevl, true));
float **shbuffer = nullptr;
int sca = 1;
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
float avge;
std::vector locallref;
std::vector locallretiminmax;
+ huerefs.resize(params->locallab.spots.size());
+ huerefblurs.resize(params->locallab.spots.size());
+ chromarefblurs.resize(params->locallab.spots.size());
+ lumarefblurs.resize(params->locallab.spots.size());
+ chromarefs.resize(params->locallab.spots.size());
+ lumarefs.resize(params->locallab.spots.size());
+ sobelrefs.resize(params->locallab.spots.size());
+ avgs.resize(params->locallab.spots.size());
for (int sp = 0; sp < (int)params->locallab.spots.size(); sp++) {
// Set local curves of current spot to LUT
- LHutili = false;
- HHutili = false;
- locallutili = false;
- localclutili = false;
- locallcutili = false;
- localexutili = false;
- localrgbutili = false;
- localcutili = false;
- llmasutili = false;
- lhmasutili = false;
- lhhmasutili = false;
- lcmasutili = false;
- localmaskutili = false;
- lcmasexputili = false;
- lhmasexputili = false;
- llmasexputili = false;
- localmaskexputili = false;
- localmaskSHutili = false;
- localmaskvibutili = false;
- localmasktmutili = false;
- localmaskretiutili = false;
- localmaskcbutili = false;
- localmaskblutili = false;
- localmasklcutili = false;
- lcmasSHutili = false;
- lhmasSHutili = false;
- llmasSHutili = false;
- lcmasvibutili = false;
- lhmasvibutili = false;
- llmasvibutili = false;
- lcmascbutili = false;
- lhmascbutili = false;
- llmascbutili = false;
- lcmaslcutili = false;
- lhmaslcutili = false;
- llmaslcutili = false;
- lcmasretiutili = false;
- lhmasretiutili = false;
- llmasretiutili = false;
- lcmastmutili = false;
- lhmastmutili = false;
- llmastmutili = false;
- lcmasblutili = false;
- lhmasblutili = false;
- llmasblutili = false;
- lcmasutili = false;
- locwavutili = false;
- locwavdenutili = false;
- loclevwavutili = false;
- locconwavutili = false;
- loccompwavutili = false;
- loccomprewavutili = false;
- locedgwavutili = false;
- lmasutiliblwav = false;
- lmasutilicolwav = false;
locRETgainCurve.Set(params->locallab.spots.at(sp).localTgaincurve);
locRETtransCurve.Set(params->locallab.spots.at(sp).localTtranscurve);
- loclhCurve.Set(params->locallab.spots.at(sp).LHcurve, LHutili);
- lochhCurve.Set(params->locallab.spots.at(sp).HHcurve, HHutili);
- locccmasCurve.Set(params->locallab.spots.at(sp).CCmaskcurve, lcmasutili);
- locllmasCurve.Set(params->locallab.spots.at(sp).LLmaskcurve, llmasutili);
- lochhmasCurve.Set(params->locallab.spots.at(sp).HHmaskcurve, lhmasutili);
- lochhhmasCurve.Set(params->locallab.spots.at(sp).HHhmaskcurve, lhhmasutili);
- locllmasexpCurve.Set(params->locallab.spots.at(sp).LLmaskexpcurve, llmasexputili);
- locccmasexpCurve.Set(params->locallab.spots.at(sp).CCmaskexpcurve, lcmasexputili);
- lochhmasexpCurve.Set(params->locallab.spots.at(sp).HHmaskexpcurve, lhmasexputili);
- locllmasSHCurve.Set(params->locallab.spots.at(sp).LLmaskSHcurve, llmasSHutili);
- locccmasSHCurve.Set(params->locallab.spots.at(sp).CCmaskSHcurve, lcmasSHutili);
- lochhmasSHCurve.Set(params->locallab.spots.at(sp).HHmaskSHcurve, lhmasSHutili);
- locllmasvibCurve.Set(params->locallab.spots.at(sp).LLmaskvibcurve, llmasvibutili);
- locccmasvibCurve.Set(params->locallab.spots.at(sp).CCmaskvibcurve, lcmasvibutili);
- lochhmasvibCurve.Set(params->locallab.spots.at(sp).HHmaskvibcurve, lhmasvibutili);
- locllmascbCurve.Set(params->locallab.spots.at(sp).LLmaskcbcurve, llmascbutili);
- locccmascbCurve.Set(params->locallab.spots.at(sp).CCmaskcbcurve, lcmascbutili);
- lochhmascbCurve.Set(params->locallab.spots.at(sp).HHmaskcbcurve, lhmascbutili);
- locllmaslcCurve.Set(params->locallab.spots.at(sp).LLmasklccurve, llmaslcutili);
- locccmaslcCurve.Set(params->locallab.spots.at(sp).CCmasklccurve, lcmaslcutili);
- lochhmaslcCurve.Set(params->locallab.spots.at(sp).HHmasklccurve, lhmaslcutili);
- locllmasretiCurve.Set(params->locallab.spots.at(sp).LLmaskreticurve, llmasretiutili);
- locccmasretiCurve.Set(params->locallab.spots.at(sp).CCmaskreticurve, lcmasretiutili);
- lochhmasretiCurve.Set(params->locallab.spots.at(sp).HHmaskreticurve, lhmasretiutili);
- locllmastmCurve.Set(params->locallab.spots.at(sp).LLmasktmcurve, llmastmutili);
- locccmastmCurve.Set(params->locallab.spots.at(sp).CCmasktmcurve, lcmastmutili);
- lochhmastmCurve.Set(params->locallab.spots.at(sp).HHmasktmcurve, lhmastmutili);
- locllmasblCurve.Set(params->locallab.spots.at(sp).LLmaskblcurve, llmasblutili);
- locccmasblCurve.Set(params->locallab.spots.at(sp).CCmaskblcurve, lcmasblutili);
- lochhmasblCurve.Set(params->locallab.spots.at(sp).HHmaskblcurve, lhmasblutili);
- loclmasCurveblwav.Set(params->locallab.spots.at(sp).LLmaskblcurvewav, lmasutiliblwav);
- loclmasCurvecolwav.Set(params->locallab.spots.at(sp).LLmaskcolcurvewav, lmasutilicolwav);
- locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve, locwavutili);
- loclevwavCurve.Set(params->locallab.spots.at(sp).loclevwavcurve, loclevwavutili);
- locconwavCurve.Set(params->locallab.spots.at(sp).locconwavcurve, locconwavutili);
- loccompwavCurve.Set(params->locallab.spots.at(sp).loccompwavcurve, loccompwavutili);
- loccomprewavCurve.Set(params->locallab.spots.at(sp).loccomprewavcurve, loccomprewavutili);
- locwavCurveden.Set(params->locallab.spots.at(sp).locwavcurveden, locwavdenutili);
- locedgwavCurve.Set(params->locallab.spots.at(sp).locedgwavcurve, locedgwavutili);
- CurveFactory::curveLocal(locallutili, params->locallab.spots.at(sp).llcurve, lllocalcurve, sca);
- CurveFactory::curveLocal(localclutili, params->locallab.spots.at(sp).clcurve, cllocalcurve, sca);
- CurveFactory::curveLocal(locallcutili, params->locallab.spots.at(sp).lccurve, lclocalcurve, sca);
- CurveFactory::curveCCLocal(localcutili, params->locallab.spots.at(sp).cccurve, cclocalcurve, sca);
- CurveFactory::curveLocal(localrgbutili, params->locallab.spots.at(sp).rgbcurve, rgblocalcurve, sca);
- CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskutili, params->locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskexputili, params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskSHutili, params->locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskvibutili, params->locallab.spots.at(sp).Lmaskvibcurve, lmaskviblocalcurve, sca);
- CurveFactory::curvemaskLocal(localmasktmutili, params->locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskretiutili, params->locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskcbutili, params->locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, sca);
- CurveFactory::curvemaskLocal(localmaskblutili, params->locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, sca);
- CurveFactory::curvemaskLocal(localmasklcutili, params->locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve, sca);
+ const bool LHutili = loclhCurve.Set(params->locallab.spots.at(sp).LHcurve);
+ const bool HHutili = lochhCurve.Set(params->locallab.spots.at(sp).HHcurve);
+ const bool lcmasutili = locccmasCurve.Set(params->locallab.spots.at(sp).CCmaskcurve);
+ const bool llmasutili = locllmasCurve.Set(params->locallab.spots.at(sp).LLmaskcurve);
+ const bool lhmasutili = lochhmasCurve.Set(params->locallab.spots.at(sp).HHmaskcurve);
+ const bool lhhmasutili = lochhhmasCurve.Set(params->locallab.spots.at(sp).HHhmaskcurve);
+ const bool llmasexputili = locllmasexpCurve.Set(params->locallab.spots.at(sp).LLmaskexpcurve);
+ const bool lcmasexputili = locccmasexpCurve.Set(params->locallab.spots.at(sp).CCmaskexpcurve);
+ const bool lhmasexputili = lochhmasexpCurve.Set(params->locallab.spots.at(sp).HHmaskexpcurve);
+ const bool llmasSHutili = locllmasSHCurve.Set(params->locallab.spots.at(sp).LLmaskSHcurve);
+ const bool lcmasSHutili = locccmasSHCurve.Set(params->locallab.spots.at(sp).CCmaskSHcurve);
+ const bool lhmasSHutili = lochhmasSHCurve.Set(params->locallab.spots.at(sp).HHmaskSHcurve);
+ const bool llmasvibutili = locllmasvibCurve.Set(params->locallab.spots.at(sp).LLmaskvibcurve);
+ const bool lcmasvibutili = locccmasvibCurve.Set(params->locallab.spots.at(sp).CCmaskvibcurve);
+ const bool lhmasvibutili = lochhmasvibCurve.Set(params->locallab.spots.at(sp).HHmaskvibcurve);
+ const bool llmascbutili = locllmascbCurve.Set(params->locallab.spots.at(sp).LLmaskcbcurve);
+ const bool lcmascbutili = locccmascbCurve.Set(params->locallab.spots.at(sp).CCmaskcbcurve);
+ const bool lhmascbutili = lochhmascbCurve.Set(params->locallab.spots.at(sp).HHmaskcbcurve);
+ const bool llmaslcutili = locllmaslcCurve.Set(params->locallab.spots.at(sp).LLmasklccurve);
+ const bool lcmaslcutili = locccmaslcCurve.Set(params->locallab.spots.at(sp).CCmasklccurve);
+ const bool lhmaslcutili = lochhmaslcCurve.Set(params->locallab.spots.at(sp).HHmasklccurve);
+ const bool llmasretiutili = locllmasretiCurve.Set(params->locallab.spots.at(sp).LLmaskreticurve);
+ const bool lcmasretiutili = locccmasretiCurve.Set(params->locallab.spots.at(sp).CCmaskreticurve);
+ const bool lhmasretiutili = lochhmasretiCurve.Set(params->locallab.spots.at(sp).HHmaskreticurve);
+ const bool llmastmutili = locllmastmCurve.Set(params->locallab.spots.at(sp).LLmasktmcurve);
+ const bool lcmastmutili = locccmastmCurve.Set(params->locallab.spots.at(sp).CCmasktmcurve);
+ const bool lhmastmutili = lochhmastmCurve.Set(params->locallab.spots.at(sp).HHmasktmcurve);
+ const bool llmasblutili = locllmasblCurve.Set(params->locallab.spots.at(sp).LLmaskblcurve);
+ const bool lcmasblutili = locccmasblCurve.Set(params->locallab.spots.at(sp).CCmaskblcurve);
+ const bool lhmasblutili = lochhmasblCurve.Set(params->locallab.spots.at(sp).HHmaskblcurve);
+ const bool lcmas_utili = locccmas_Curve.Set(params->locallab.spots.at(sp).CCmask_curve);
+ const bool llmas_utili = locllmas_Curve.Set(params->locallab.spots.at(sp).LLmask_curve);
+ const bool lhmas_utili = lochhmas_Curve.Set(params->locallab.spots.at(sp).HHmask_curve);
+ const bool lhhmas_utili = lochhhmas_Curve.Set(params->locallab.spots.at(sp).HHhmask_curve);
+ const bool lmasutiliblwav = loclmasCurveblwav.Set(params->locallab.spots.at(sp).LLmaskblcurvewav);
+ const bool lmasutilicolwav = loclmasCurvecolwav.Set(params->locallab.spots.at(sp).LLmaskcolcurvewav);
+ const bool locwavutili = locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve);
+ const bool loclevwavutili = loclevwavCurve.Set(params->locallab.spots.at(sp).loclevwavcurve);
+ const bool locconwavutili = locconwavCurve.Set(params->locallab.spots.at(sp).locconwavcurve);
+ const bool loccompwavutili = loccompwavCurve.Set(params->locallab.spots.at(sp).loccompwavcurve);
+ const bool loccomprewavutili = loccomprewavCurve.Set(params->locallab.spots.at(sp).loccomprewavcurve);
+ const bool locwavdenutili = locwavCurveden.Set(params->locallab.spots.at(sp).locwavcurveden);
+ const bool locedgwavutili = locedgwavCurve.Set(params->locallab.spots.at(sp).locedgwavcurve);
+ const bool lmasutili_wav = loclmasCurve_wav.Set(params->locallab.spots.at(sp).LLmask_curvewav);
+ const bool locallutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).llcurve, lllocalcurve, sca);
+ const bool localclutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).clcurve, cllocalcurve, sca);
+ const bool locallcutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).lccurve, lclocalcurve, sca);
+ const bool localcutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).cccurve, cclocalcurve, sca);
+ const bool localrgbutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).rgbcurve, rgblocalcurve, sca);
+ const bool localexutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).excurve, exlocalcurve, sca);
+ const bool localmaskutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, sca);
+ const bool localmaskexputili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca);
+ const bool localmaskSHutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, sca);
+ const bool localmaskvibutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmaskvibcurve, lmaskviblocalcurve, sca);
+ const bool localmasktmutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, sca);
+ const bool localmaskretiutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, sca);
+ const bool localmaskcbutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, sca);
+ const bool localmaskblutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, sca);
+ const bool localmasklcutili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve, sca);
+ const bool localmask_utili = CurveFactory::curveLocal(params->locallab.spots.at(sp).Lmask_curve, lmasklocal_curve, sca);
double ecomp = params->locallab.spots.at(sp).expcomp;
double black = params->locallab.spots.at(sp).black;
double hlcompr = params->locallab.spots.at(sp).hlcompr;
@@ -1252,19 +1137,19 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
// Reference parameters computation
if (params->locallab.spots.at(sp).spotMethod == "exc") {
- ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
+ ipf.calc_ref(sp, reserv.get(), reserv.get(), 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
} else {
ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
}
- huerblu = huerefblurs[sp] = huerefblu;
- chromarblu = chromarefblurs[sp] = chromarefblu;
- lumarblu = lumarefblurs[sp] = lumarefblu;
- huer = huerefs[sp] = huere;
- chromar = chromarefs[sp] = chromare;
- lumar = lumarefs[sp] = lumare ;
- sobeler = sobelrefs[sp] = sobelre;
- avg = avgs[sp] = avge;
+ double huerblu = huerefblurs[sp] = huerefblu;
+ double chromarblu = chromarefblurs[sp] = chromarefblu;
+ double lumarblu = lumarefblurs[sp] = lumarefblu;
+ double huer = huerefs[sp] = huere;
+ double chromar = chromarefs[sp] = chromare;
+ double lumar = lumarefs[sp] = lumare ;
+ double sobeler = sobelrefs[sp] = sobelre;
+ float avg = avgs[sp] = avge;
CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumar,
hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg,
sca);
@@ -1289,7 +1174,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
float Tsigma;
float Tmin;
float Tmax;
- ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, lastorigimp, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve,
+ int lastsav;
+ ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv.get(), lastorigimp.get(), 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve,
lllocalcurve, locallutili,
cllocalcurve, localclutili,
lclocalcurve, locallcutili,
@@ -1303,6 +1189,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
lmasklclocalcurve, localmasklcutili,
+ lmasklocal_curve, localmask_utili,
+
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili,
@@ -1311,6 +1199,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili,
+ locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
+ lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav, lmasutiliblwav,
loclmasCurvecolwav, lmasutilicolwav,
locwavCurve, locwavutili,
@@ -1320,11 +1210,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
+ loclmasCurve_wav, lmasutili_wav,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
- huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
- lastorigimp->CopyFrom(nprevl);
+ if (sp + 1u < params->locallab.spots.size()) {
+ // do not copy for last spot as it is not needed anymore
+ lastorigimp->CopyFrom(nprevl);
+ }
// Save Locallab Retinex min/max for current spot
LocallabListener::locallabRetiMinMax retiMinMax;
@@ -1340,7 +1234,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
// Recalculate references after
if (params->locallab.spots.at(sp).spotMethod == "exc") {
- ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili);
+ ipf.calc_ref(sp, reserv.get(), reserv.get(), 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili);
} else {
ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili);
}
@@ -1351,74 +1245,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locallref.at(sp).lumar = lumar;
locallref.at(sp).huer = huer;
}
-
- /*
- //very bad idea : it's the story of the cat biting its tail
- // brings big bugs..
- //restore ref values
- huerefs[sp] = huer;
- chromarefs[sp] = chromar;
- lumarefs[sp] = lumar ;
- sobelrefs[sp] = sobeler;
- */
- lllocalcurve.clear();
- lclocalcurve.clear();
- cllocalcurve.clear();
- lightCurveloc.clear();
- cclocalcurve.clear();
- rgblocalcurve.clear();
- exlocalcurve.clear();
- lmasklocalcurve.clear();
- lmaskexplocalcurve.clear();
- lmaskSHlocalcurve.clear();
- lmaskviblocalcurve.clear();
- lmasktmlocalcurve.clear();
- lmaskretilocalcurve.clear();
- lmaskcblocalcurve.clear();
- lmaskbllocalcurve.clear();
- lmasklclocalcurve.clear();
- hltonecurveloc.clear();
- shtonecurveloc.clear();
- tonecurveloc.clear();
- locRETgainCurve.Reset();
- locRETtransCurve.Reset();
- loclhCurve.Reset();
- lochhCurve.Reset();
- locccmasCurve.Reset();
- locllmasCurve.Reset();
- lochhmasCurve.Reset();
- lochhhmasCurve.Reset();
- locllmasexpCurve.Reset();
- locccmasexpCurve.Reset();
- lochhmasexpCurve.Reset();
- locllmasSHCurve.Reset();
- locccmasSHCurve.Reset();
- lochhmasSHCurve.Reset();
- locllmasvibCurve.Reset();
- locccmasvibCurve.Reset();
- lochhmasvibCurve.Reset();
- locllmascbCurve.Reset();
- locccmascbCurve.Reset();
- lochhmascbCurve.Reset();
- locllmasretiCurve.Reset();
- locccmasretiCurve.Reset();
- lochhmasretiCurve.Reset();
- locllmastmCurve.Reset();
- locccmastmCurve.Reset();
- lochhmastmCurve.Reset();
- locllmasblCurve.Reset();
- locccmasblCurve.Reset();
- lochhmasblCurve.Reset();
- locllmaslcCurve.Reset();
- locccmaslcCurve.Reset();
- lochhmaslcCurve.Reset();
- locwavCurve.Reset();
- loclevwavCurve.Reset();
- locconwavCurve.Reset();
- locwavCurveden.Reset();
- locwavCurve.Reset();
- loclmasCurveblwav.Reset();
- loclmasCurvecolwav.Reset();
}
// Transmit Locallab reference values and Locallab Retinex min/max to LocallabListener
@@ -1472,20 +1298,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
}
if (WaveParams.softrad > 0.f) {
- provradius = new LabImage(pW, pH);
- provradius->CopyFrom(nprevl);
+ provradius = new LabImage(*nprevl, true);
}
-
-
-
if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") {
- unshar = new LabImage(pW, pH);
provis = params->wavelet.CLmethod;
params->wavelet.CLmethod = "all";
ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale);
-
- unshar->CopyFrom(nprevl);
+ unshar = new LabImage(*nprevl, true);
params->wavelet.CLmethod = provis;
@@ -1540,11 +1360,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
double epsilmax = 0.0001;
double epsilmin = 0.00001;
- double aepsil = (epsilmax - epsilmin) / 90.f;
- double bepsil = epsilmax - 100.f * aepsil;
+ double aepsil = (epsilmax - epsilmin) / 100.f;
+ double bepsil = epsilmin; //epsilmax - 100.f * aepsil;
double epsil = aepsil * WaveParams.softrad + bepsil;
- float blur = 10.f / scale * (0.0001f + 0.8f * WaveParams.softrad);
+ float blur = 10.f / scale * (0.5f + 0.8f * WaveParams.softrad);
// rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh);
rtengine::guidedFilter(guid, ble, ble, blur, epsil, false);
@@ -1848,10 +1668,6 @@ void ImProcCoordinator::freeAll()
oprevl = nullptr;
delete nprevl;
nprevl = nullptr;
- delete reserv;
- reserv = nullptr;
- delete lastorigimp;
- lastorigimp = nullptr;
if (ncie) {
delete ncie;
@@ -1905,10 +1721,7 @@ void ImProcCoordinator::setScale(int prevscale)
oprevi = orig_prev;
oprevl = new LabImage(pW, pH);
nprevl = new LabImage(pW, pH);
- reserv = new LabImage(pW, pH);
- lastorigimp = new LabImage(pW, pH);
- // nprevloc = new LabImage (pW, pH);
//ncie is only used in ImProcCoordinator::updatePreviewImage, it will be allocated on first use and deleted if not used anymore
previmg = new Image8(pW, pH);
workimg = new Image8(pW, pH);
diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h
index da253c072..c04387b5d 100644
--- a/rtengine/improccoordinator.h
+++ b/rtengine/improccoordinator.h
@@ -235,9 +235,6 @@ protected:
//locallab
LocallabListener* locallListener;
- LabImage *reserv;
- LabImage *lastorigimp;
- int coordX, coordY, localX, localY;
LUTf lllocalcurve;
LUTf cllocalcurve;
LUTf lclocalcurve;
@@ -257,7 +254,8 @@ protected:
LUTf lmaskcblocalcurve;
LUTf lmaskbllocalcurve;
LUTf lmasklclocalcurve;
-// LUTu lhist16loc;
+ LUTf lmasklocal_curve;
+
LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve;
LocretigainCurverab locRETgainCurverab;
@@ -291,6 +289,11 @@ protected:
LocCCmaskCurve locccmasblCurve;
LocLLmaskCurve locllmasblCurve;
LocHHmaskCurve lochhmasblCurve;
+ LocCCmaskCurve locccmas_Curve;
+ LocLLmaskCurve locllmas_Curve;
+ LocHHmaskCurve lochhmas_Curve;
+ LocHHmaskCurve lochhhmas_Curve;
+
LocwavCurve locwavCurve;
LocwavCurve loclmasCurveblwav;
LocwavCurve loclmasCurvecolwav;
@@ -300,73 +303,16 @@ protected:
LocwavCurve loccomprewavCurve;
LocwavCurve locwavCurveden;
LocwavCurve locedgwavCurve;
+ LocwavCurve loclmasCurve_wav;
- bool locallutili;
- bool localclutili;
- bool locallcutili;
- bool localcutili;
- bool localrgbutili;
- bool localexutili;
- bool llmasutili;
- bool lhmasutili;
- bool lhhmasutili;
- bool lcmasutili;
- bool localmaskutili;
- bool localmaskexputili;
- bool localmaskSHutili;
- bool localmaskvibutili;
- bool localmasktmutili;
- bool localmaskretiutili;
- bool localmaskcbutili;
- bool localmaskblutili;
- bool localmasklcutili;
- bool lcmasexputili;
- bool lhmasexputili;
- bool llmasexputili;
- bool lcmasSHutili;
- bool lhmasSHutili;
- bool llmasSHutili;
- bool lcmasvibutili;
- bool lhmasvibutili;
- bool llmasvibutili;
- bool lcmaslcutili;
- bool lhmaslcutili;
- bool llmaslcutili;
- bool lcmascbutili;
- bool lhmascbutili;
- bool llmascbutili;
- bool lcmasretiutili;
- bool lhmasretiutili;
- bool llmasretiutili;
- bool lcmastmutili;
- bool lhmastmutili;
- bool llmastmutili;
- bool lcmasblutili;
- bool lhmasblutili;
- bool llmasblutili;
- bool locwavutili;
- bool locwavdenutili;
- bool loclevwavutili;
- bool locconwavutili;
- bool loccompwavutili;
- bool loccomprewavutili;
- bool locedgwavutili;
- bool lmasutiliblwav;
- bool lmasutilicolwav;
- bool LHutili;
- bool HHutili;
- LUTu lastsavrests;
- LUTf huerefs;
- LUTf huerefblurs;
- LUTf chromarefblurs;
- LUTf lumarefblurs;
- LUTf chromarefs;
- LUTf lumarefs;
- LUTf sobelrefs;
- LUTf avgs;
- double huer, huerblu, chromarblu, lumarblu, chromar, lumar, sobeler;
- int lastsav;
- float avg;
+ std::vector huerefs;
+ std::vector huerefblurs;
+ std::vector chromarefblurs;
+ std::vector lumarefblurs;
+ std::vector chromarefs;
+ std::vector lumarefs;
+ std::vector sobelrefs;
+ std::vector avgs;
bool lastspotdup;
bool previewDeltaE;
int locallColorMask;
@@ -383,6 +329,7 @@ protected:
int localltmMask;
int locallblMask;
int locallsharMask;
+ int locall_Mask;
public:
@@ -453,7 +400,7 @@ public:
updaterThreadStart.unlock();
}
- void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask) override
+ void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask, int locall_Mask) override
{
this->previewDeltaE = previewDeltaE;
this->locallColorMask = locallColorMask;
@@ -470,6 +417,7 @@ public:
this->locallsharMask = locallsharMask;
this->localllcMask = localllcMask;
this->locallcbMask = locallcbMask;
+ this->locall_Mask = locall_Mask;
}
void setProgressListener (ProgressListener* pl) override
diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h
index 355b5d435..66ad4dc57 100644
--- a/rtengine/improcfun.h
+++ b/rtengine/improcfun.h
@@ -110,12 +110,6 @@ class ImProcFunctions
double scale;
bool multiThread;
- bool lastcutpast;
- int lastcxbuf;
- int lastcybuf;
- int lastcount;
- LabImage *spotbuffer;
-
void calcVignettingParams(int oW, int oH, const procparams::VignettingParams& vignetting, double &w2, double &h2, double& maxRadius, double &v, double &b, double &mul);
void transformLuminanceOnly(Imagefloat* original, Imagefloat* transformed, int cx, int cy, int oW, int oH, int fW, int fH);
@@ -239,11 +233,11 @@ public:
const LocCCmaskCurve & locccmasCurve, bool lcmasutili,
const LocLLmaskCurve & locllmasCurve, bool llmasutili,
const LocHHmaskCurve & lochhmasCurve, bool lhmasutili, const LocHHmaskCurve & lochhhmasCurve, bool lhhmasutili,
- bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, int shado, float amountcd, float anchorcd,
+ bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, float blendmab, int shado, float amountcd, float anchorcd,
const LUTf& lmasklocalcurve, bool localmaskutili,
const LocwavCurve & loclmasCurvecolwav, bool lmasutilicolwav, int level_bl, int level_hl, int level_br, int level_hr,
int shortcu, bool delt, const float hueref, const float chromaref, const float lumaref,
- float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope);
+ float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, bool fftt, float blu_ma, float cont_ma, int indic);
void deltaEforMask(float **rdE, int bfw, int bfh, LabImage* bufcolorig, const float hueref, const float chromaref, const float lumaref,
float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, float balance, float balanceh);
@@ -299,6 +293,8 @@ public:
const LUTf& lmaskcblocalcurve, bool localmaskcbutili,
const LUTf& lmaskbllocalcurve, bool localmaskblutili,
const LUTf& lmasklclocalcurve, bool localmasklcutili,
+ const LUTf& lmasklocal_curve, bool localmask_utili,
+
const LocCCmaskCurve& locccmasCurve, bool lcmasutili, const LocLLmaskCurve& locllmasCurve, bool llmasutili, const LocHHmaskCurve& lochhmasCurve, bool lhmasutili, const LocHHmaskCurve& lochhhmasCurve, bool lhhmasutili,
const LocCCmaskCurve& locccmasexpCurve, bool lcmasexputili, const LocLLmaskCurve& locllmasexpCurve, bool llmasexputili, const LocHHmaskCurve& lochhmasexpCurve, bool lhmasexputili,
const LocCCmaskCurve& locccmasSHCurve, bool lcmasSHutili, const LocLLmaskCurve& locllmasSHCurve, bool llmasSHutili, const LocHHmaskCurve& lochhmasSHCurve, bool lhmasSHutili,
@@ -308,6 +304,9 @@ public:
const LocCCmaskCurve& locccmastmCurve, bool lcmastmutili, const LocLLmaskCurve& locllmastmCurve, bool llmastmutili, const LocHHmaskCurve& lochhmastmCurve, bool lhmastmutili,
const LocCCmaskCurve& locccmasblCurve, bool lcmasblutili, const LocLLmaskCurve& locllmasblCurve, bool llmasblutili, const LocHHmaskCurve& lochhmasblCurve, bool lhmasblutili,
const LocCCmaskCurve& locccmaslcCurve, bool lcmaslcutili, const LocLLmaskCurve& locllmaslcCurve, bool llmaslcutili, const LocHHmaskCurve& lochhmaslcCurve, bool lhmaslcutili,
+ const LocCCmaskCurve& locccmas_Curve, bool lcmas_utili, const LocLLmaskCurve& locllmas_Curve, bool llmas_utili, const LocHHmaskCurve& lochhmas_Curve, bool lhmas_utili,
+ const LocHHmaskCurve& lochhhmas_Curve, bool lhhmas_utili,
+
const LocwavCurve& loclmasCurveblwav, bool lmasutiliblwav,
const LocwavCurve& loclmasCurvecolwav, bool lmasutilicolwav,
const LocwavCurve& locwavCurve, bool locwavutili,
@@ -317,9 +316,10 @@ public:
const LocwavCurve& loccomprewavCurve, bool loccomprewavutili,
const LocwavCurve& locwavCurveden, bool locwavdenutili,
const LocwavCurve& locedgwavCurve, bool locedgwavutili,
+ const LocwavCurve& loclmasCurve_wav, bool lmasutili_wav,
bool LHutili, bool HHutili, const LUTf& cclocalcurve, bool localcutili, const LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc,
double& huerefblur, double &chromarefblur, double& lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav,
- bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
+ bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int ll_Mask,
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax);
void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);
@@ -351,7 +351,7 @@ public:
void transit_shapedetect_retinex(int call, int senstype, LabImage * bufexporig, LabImage * bufmask, LabImage * buforigmas, float **buflight, float **bufchro, const float hueref, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk);
void transit_shapedetect(int senstype, const LabImage *bufexporig, LabImage * originalmask, float **bufchro, bool HHutili, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk);
- void exlabLocal(local_params& lp, int bfh, int bfw, LabImage* bufexporig, LabImage* lab, const LUTf& hltonecurve, const LUTf& shtonecurve, const LUTf& tonecurve);
+ void exlabLocal(local_params& lp, int bfh, int bfw, int bfhr, int bfwr, LabImage* bufexporig, LabImage* lab, const LUTf& hltonecurve, const LUTf& shtonecurve, const LUTf& tonecurve, const float hueref, const float lumaref, const float chromaref);
void Exclude_Local(float **deltaso, float hueref, float chromaref, float lumaref, float sobelref, float meansobel, const struct local_params & lp, const LabImage * original, LabImage * transformed, const LabImage * rsv, const LabImage * reserv, int cx, int cy, int sk);
void DeNoise_Local(int call, const struct local_params& lp, LabImage* originalmask, int levred, float hueref, float lumaref, float chromaref, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc
index 7b27712e1..b9d070e14 100644
--- a/rtengine/iplocallab.cc
+++ b/rtengine/iplocallab.cc
@@ -47,7 +47,7 @@
#include "cplx_wavelet_dec.h"
#include "ciecam02.h"
-//#define BENCHMARK
+#define BENCHMARK
#include "StopWatch.h"
#include "guidedfilter.h"
@@ -57,6 +57,7 @@
namespace
{
+
constexpr int limscope = 80;
constexpr int mSPsharp = 39; //minimum size Spot Sharp due to buildblendmask
constexpr int mSPwav = 32; //minimum size Spot Wavelet
@@ -68,19 +69,59 @@ constexpr int TS = 64; // Tile size
constexpr float epsilonw = 0.001f / (TS * TS); //tolerance
constexpr int offset = 25; // shift between tiles
-constexpr float clipLoc(float x) {
+std::unique_ptr buildMeaLut(const float inVals[11], const float mea[10], float& lutFactor)
+{
+ constexpr int lutSize = 100;
+
+ const float lutMax = std::ceil(mea[9]);
+ const float lutDiff = lutMax / lutSize;
+
+ std::vector lutVals(lutSize);
+ int jStart = 1;
+ for (int i = 0; i < lutSize; ++i) {
+ const float val = i * lutDiff;
+ if (val < mea[0]) {
+ // still < first value => no interpolation
+ lutVals[i] = inVals[0];
+ } else {
+ for (int j = jStart; j < 10; ++j) {
+ if (val == mea[j]) {
+ // exact match => no interpolation
+ lutVals[i] = inVals[j];
+ ++jStart;
+ break;
+ }
+ if (val < mea[j]) {
+ // interpolate
+ const float dist = (val - mea[j - 1]) / (mea[j] - mea[j - 1]);
+ lutVals[i] = rtengine::intp(dist, inVals[j], inVals[j - 1]);
+ break;
+ }
+ lutVals[i] = inVals[10];
+ }
+ }
+ }
+ lutFactor = 1.f / lutDiff;
+ return std::unique_ptr(new LUTf(lutVals));
+}
+
+constexpr float clipLoc(float x)
+{
return rtengine::LIM(x, 0.f, 32767.f);
}
-constexpr float clipDE(float x) {
+constexpr float clipDE(float x)
+{
return rtengine::LIM(x, 0.3f, 1.f);
}
-constexpr float clipC(float x) {
+constexpr float clipC(float x)
+{
return rtengine::LIM(x, -42000.f, 42000.f);
}
-constexpr float clipChro(float x) {
+constexpr float clipChro(float x)
+{
return rtengine::LIM(x, 0.f, 140.f);
}
@@ -249,20 +290,20 @@ float calcreducdE(float dE, float maxdE, float mindE, float maxdElim, float mind
void deltaEforLaplace(float *dE, const float lap, int bfw, int bfh, rtengine::LabImage* bufexporig, const float hueref, const float chromaref, const float lumaref)
{
- const float refa = chromaref * cos(hueref);
- const float refb = chromaref * sin(hueref);
+ const float refa = chromaref * std::cos(hueref);
+ const float refb = chromaref * std::sin(hueref);
const float refL = lumaref;
float maxdE = 5.f + MAXSCOPE * lap;
- std::unique_ptr dEforLaplace(new float [bfw * bfh]);
float maxC = std::sqrt((rtengine::SQR(refa - bufexporig->a[0][0]) + rtengine::SQR(refb - bufexporig->b[0][0])) + rtengine::SQR(refL - bufexporig->L[0][0])) / 327.68f;
#ifdef _OPENMP
#pragma omp parallel for reduction(max:maxC)
#endif
for (int y = 0; y < bfh; y++) {
for (int x = 0; x < bfw; x++) {
- dEforLaplace[y * bfw + x] = std::sqrt((rtengine::SQR(refa - bufexporig->a[y][x]) + rtengine::SQR(refb - bufexporig->b[y][x])) + rtengine::SQR(refL - bufexporig->L[y][x])) / 327.68f;
- maxC = rtengine::max(maxC, dEforLaplace[y * bfw + x]);
+ const float val = std::sqrt((rtengine::SQR(refa - bufexporig->a[y][x]) + rtengine::SQR(refb - bufexporig->b[y][x])) + rtengine::SQR(refL - bufexporig->L[y][x])) / 327.68f;
+ dE[y * bfw + x] = val;
+ maxC = rtengine::max(maxC, val);
}
}
@@ -278,7 +319,7 @@ void deltaEforLaplace(float *dE, const float lap, int bfw, int bfh, rtengine::La
#endif
for (int y = 0; y < bfh; y++) {
for (int x = 0; x < bfw; x++) {
- dE[y * bfw + x] = dEforLaplace[y * bfw + x] >= maxdE ? ade * dEforLaplace[y * bfw + x] + bde : 1.f;
+ dE[y * bfw + x] = dE[y * bfw + x] >= maxdE ? ade * dE[y * bfw + x] + bde : 1.f;
}
}
}
@@ -406,6 +447,8 @@ struct local_params {
float slomaexp;
float strmaexp;
float angmaexp;
+ float str_mas;
+ float ang_mas;
float strexp;
float angexp;
float strSH;
@@ -522,6 +565,7 @@ struct local_params {
int showmasksoftmet;
int showmasktmmet;
int showmaskblmet;
+ int showmask_met;
bool fftbl;
float laplacexp;
float balanexp;
@@ -571,6 +615,7 @@ struct local_params {
bool hsena;
bool vibena;
bool logena;
+ bool maskena;
bool cut_past;
float past;
float satur;
@@ -605,6 +650,7 @@ struct local_params {
bool enaretiMasktmap;
bool enatmMask;
bool enablMask;
+ bool ena_Mask;
int highlihs;
int shadowhs;
int radiushs;
@@ -617,6 +663,7 @@ struct local_params {
float whiteev;
float detail;
int sensilog;
+ int sensimas;
bool Autogray;
bool autocompute;
float baselog;
@@ -634,10 +681,14 @@ struct local_params {
float residhi;
float residhithr;
bool blwh;
+ bool fftma;
+ float blurma;
+ float contma;
+ bool activspot;
};
-static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool locwavdenutili)
+static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int ll_Mask, const LocwavCurve & locwavCurveden, bool locwavdenutili)
{
int w = oW;
int h = oH;
@@ -729,19 +780,23 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.showmasktmmet = lltmMask;
lp.showmaskblmet = llblMask;
- lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llsoftMask == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
- lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
- lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
- lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
- lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
- lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
- lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
- lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llsharMask == 0 && llsoftMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
- lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0;
- lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;
- lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0;
- lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
- lp.enasharMask = lllcMask == 0 && llcbMask == 0 && llsharMask == 0 && llsoftMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
+ lp.showmask_met = ll_Mask;
+ // printf("mask=%i \n", lp.showmask_met);
+
+ lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llsoftMask == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;// Exposure mask is deactivated if Color & Light mask is visible
+ lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;// Exposure mask is deactivated if Color & Light mask is visible
+ lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;// Exposure mask is deactivated if Color & Light mask is visible
+ lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;// Exposure mask is deactivated if Color & Light mask is visible
+ lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && llsoftMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llsharMask == 0 && llsoftMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0 && ll_Mask == 0;
+ lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0 ;
+ lp.enasharMask = lllcMask == 0 && llcbMask == 0 && llsharMask == 0 && llsoftMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.ena_Mask = locallab.spots.at(sp).enamask && lllcMask == 0 && llcbMask == 0 && llsoftMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
// printf("llColorMask=%i lllcMask=%i llExpMask=%i llSHMask=%i llcbMask=%i llretiMask=%i lltmMask=%i llblMask=%i llvibMask=%i\n", llColorMask, lllcMask, llExpMask, llSHMask, llcbMask, llretiMask, lltmMask, llblMask, llvibMask);
if (locallab.spots.at(sp).softMethod == "soft") {
@@ -998,6 +1053,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
float slomaskexpo = ((float) locallab.spots.at(sp).slomaskexp);
float strmaskexpo = ((float) locallab.spots.at(sp).strmaskexp);
float angmaskexpo = ((float) locallab.spots.at(sp).angmaskexp);
+ float strmask = ((float) locallab.spots.at(sp).str_mask);
+ float angmask = ((float) locallab.spots.at(sp).ang_mask);
float strexpo = ((float) locallab.spots.at(sp).strexp);
float angexpo = ((float) locallab.spots.at(sp).angexp);
float strSH = ((float) locallab.spots.at(sp).strSH);
@@ -1107,6 +1164,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.Autogray = locallab.spots.at(sp).Autogray;
lp.autocompute = locallab.spots.at(sp).autocompute;
lp.baselog = (float) locallab.spots.at(sp).baselog;
+ lp.sensimas = locallab.spots.at(sp).sensimask;
lp.deltaem = locallab.spots.at(sp).deltae;
lp.scalereti = scaleret;
@@ -1135,6 +1193,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.slomaexp = slomaskexpo;
lp.strmaexp = strmaskexpo;
lp.angmaexp = angmaskexpo;
+ lp.str_mas = strmask;
+ lp.ang_mas = angmask;
+
lp.strexp = strexpo;
lp.angexp = angexpo;
lp.strSH = strSH;
@@ -1286,6 +1347,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.rewe = rewe;
lp.senstm = local_sensitm;
lp.amo = amo;
+ lp.blurma = (float) locallab.spots.at(sp).blurmask;
+ lp.fftma = locallab.spots.at(sp).fftmask;
+ lp.contma = (float) locallab.spots.at(sp).contmask;
for (int y = 0; y < 6; y++) {
lp.mulloc[y] = LIM(multi[y], 0.f, 4.f);//to prevent crash with old pp3 integer
@@ -1294,24 +1358,27 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
for (int y = 0; y < 5; y++) {
lp.mullocsh[y] = multish[y];
}
+ lp.activspot = locallab.spots.at(sp).activ;
- lp.logena = locallab.spots.at(sp).explog;
+ lp.logena = locallab.spots.at(sp).explog && lp.activspot;
lp.detailsh = locallab.spots.at(sp).detailSH;
lp.threshol = thresho;
lp.chromacb = chromcbdl;
- lp.expvib = locallab.spots.at(sp).expvibrance;
- lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask
- lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0;
- lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0;
- lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0;
- lp.lcena = locallab.spots.at(sp).expcontrast && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0;
- lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && llsharMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0;
- lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llsoftMask == 0 && llSHMask == 0 && lllcMask == 0 && llsharMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible
- lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible
- lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible
- lp.sharpena = locallab.spots.at(sp).expsharp && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0 && llvibMask == 0;
- lp.sfena = locallab.spots.at(sp).expsoft && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0 && llvibMask == 0;
+ lp.expvib = locallab.spots.at(sp).expvibrance && lp.activspot ;
+ lp.colorena = locallab.spots.at(sp).expcolor && lp.activspot && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0 && ll_Mask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask
+ lp.blurena = locallab.spots.at(sp).expblur && lp.activspot && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.tonemapena = locallab.spots.at(sp).exptonemap && lp.activspot && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.retiena = locallab.spots.at(sp).expreti && lp.activspot && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0 && ll_Mask == 0;
+ lp.lcena = locallab.spots.at(sp).expcontrast && lp.activspot && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0 && ll_Mask == 0;
+ lp.cbdlena = locallab.spots.at(sp).expcbdl && lp.activspot && llExpMask == 0 && llsoftMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && llsharMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.exposena = locallab.spots.at(sp).expexpose && lp.activspot && llColorMask == 0 && llsoftMask == 0 && llSHMask == 0 && lllcMask == 0 && llsharMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0 && ll_Mask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible
+ lp.hsena = locallab.spots.at(sp).expshadhigh && lp.activspot && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0 && ll_Mask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible
+ lp.vibena = locallab.spots.at(sp).expvibrance && lp.activspot && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0 && ll_Mask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible
+ lp.sharpena = locallab.spots.at(sp).expsharp && lp.activspot && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.sfena = locallab.spots.at(sp).expsoft && lp.activspot && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0 && llvibMask == 0 && ll_Mask == 0;
+ lp.maskena = locallab.spots.at(sp).expmask && lp.activspot && llColorMask == 0 && llsoftMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible
+
lp.sensv = local_sensiv;
lp.past = chromaPastel;
lp.satur = chromaSatur;
@@ -1327,7 +1394,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
float proexp = lp.expcomp;
if (std::fabs(proexp) < 0.6f) {
float interm = std::fabs(proexp) / 0.6f;
- interm = SQR(interm);
+ interm = pow(interm, 3.f);
lp.expcomp = proexp * interm;
}
lp.expchroma = locallab.spots.at(sp).expchroma / 100.;
@@ -1352,13 +1419,11 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.residhithr = locallab.spots.at(sp).residhithr;
lp.blwh = locallab.spots.at(sp).blwh;
lp.senscolor = (int) locallab.spots.at(sp).colorscope;
- //replace scope color exposure vibrance shadows
+ //replace scope color vibrance shadows
lp.sens = lp.senscolor;
lp.sensv = lp.senscolor;
lp.senshs = lp.senscolor;
- if(lp.expmet == 0){
- lp.sensex = lp.senscolor;
- }
+
}
static void calcTransitionrect(const float lox, const float loy, const float ach, const local_params& lp, int &zone, float &localFactor)
@@ -2276,7 +2341,7 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab)
void ImProcFunctions::softproc(const LabImage* bufcolorig, const LabImage* bufcolfin, float rad, int bfh, int bfw, float epsilmax, float epsilmin, float thres, int sk, bool multiThread, int flag)
{
- if (rad > 0.f) {
+ if (rad != 0.f) {
array2D ble(bfw, bfh);
array2D guid(bfw, bfh);
if (flag == 0) {
@@ -2291,9 +2356,10 @@ void ImProcFunctions::softproc(const LabImage* bufcolorig, const LabImage* bufco
}
}
- const float aepsil = (epsilmax - epsilmin) / 90.f;
- const float bepsil = epsilmax - 100.f * aepsil;
- const float epsil = aepsil * 0.1f * rad + bepsil;
+ const float aepsil = (epsilmax - epsilmin) / 100.f;
+ const float bepsil = epsilmin; //epsilmax - 100.f * aepsil;
+ // const float epsil = aepsil * 0.1f * rad + bepsil;
+ const float epsil = aepsil * rad + bepsil;
const float blur = 10.f / sk * (thres + 0.8f * rad);
rtengine::guidedFilter(guid, ble, ble, blur, epsil, multiThread, 4);
@@ -2317,9 +2383,9 @@ void ImProcFunctions::softproc(const LabImage* bufcolorig, const LabImage* bufco
guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f;
}
- const float aepsil = (epsilmax - epsilmin) / 90.f;
- const float bepsil = epsilmax - 100.f * aepsil;
- const float epsil = rad < 0.f ? 0.0001f : aepsil * 0.1f * rad + bepsil;
+ const float aepsil = (epsilmax - epsilmin) / 1000.f;
+ const float bepsil = epsilmin; //epsilmax - 100.f * aepsil;
+ const float epsil = rad < 0.f ? 0.0001f : aepsil * rad + bepsil;
const float blur = rad < 0.f ? -1.f / rad : 1.f + rad;
const int r2 = rtengine::max(int(25 / sk * blur + 0.5f), 1);
@@ -2337,6 +2403,7 @@ void ImProcFunctions::softproc(const LabImage* bufcolorig, const LabImage* bufco
}
}
+
void ImProcFunctions::softprocess(const LabImage* bufcolorig, array2D &buflight, float rad, int bfh, int bfw, double epsilmax, double epsilmin, float thres, int sk, bool multiThread)
{
float minlig = buflight[0][0];
@@ -2379,25 +2446,83 @@ void ImProcFunctions::softprocess(const LabImage* bufcolorig, array2D &bu
}
}
-void ImProcFunctions::exlabLocal(local_params& lp, int bfh, int bfw, LabImage* bufexporig, LabImage* lab, const LUTf& hltonecurve, const LUTf& shtonecurve, const LUTf& tonecurve)
+void ImProcFunctions::exlabLocal(local_params& lp, int bfh, int bfw, int bfhr, int bfwr, LabImage* bufexporig, LabImage* lab, const LUTf& hltonecurve, const LUTf& shtonecurve, const LUTf& tonecurve, const float hueref, const float lumaref, const float chromaref)
{
BENCHFUN
//exposure local
constexpr float maxran = 65536.f;
- const float cexp_scale = std::pow(2.f, lp.expcomp);
- const float ccomp = (rtengine::max(0.f, lp.expcomp) + 1.f) * lp.hlcomp / 100.f;
- const float cshoulder = ((maxran / rtengine::max(1.0f, cexp_scale)) * (lp.hlcompthr / 200.f)) + 0.1f;
- const float chlrange = maxran - cshoulder;
const float linear = lp.linear;
- constexpr float kl = 1.f;
- const float hlcompthr = lp.hlcompthr / 200.f;
- const float hlcomp = lp.hlcomp / 100.f;
- if (lp.linear > 0.f && lp.expcomp == 0.f) {
- lp.expcomp = 0.01f;
+ if (linear > 0.f && lp.expcomp == 0.f) {
+ lp.expcomp = 0.001f;
}
+ const bool exec = (lp.expmet == 1 && linear > 0.f && lp.laplacexp > 0.1f && !lp.invex);
- if (lp.expmet == 1 && lp.linear > 0.f && lp.laplacexp > 0.1f && !lp.invex) {
+ if(!exec) {
+ //Laplacian PDE before exposure to smooth L, algorithm exposure leads to increase L differences
+ const std::unique_ptr datain(new float[bfwr * bfhr]);
+ const std::unique_ptr dataout(new float[bfwr * bfhr]);
+ const std::unique_ptr dE(new float[bfwr * bfhr]);
+ const float cexp_scale = std::pow(2.f, lp.expcomp);
+ const float ccomp = (rtengine::max(0.f, lp.expcomp) + 1.f) * lp.hlcomp / 100.f;
+ const float cshoulder = ((maxran / rtengine::max(1.0f, cexp_scale)) * (lp.hlcompthr / 200.f)) + 0.1f;
+ const float chlrange = maxran - cshoulder;
+ const float diffde = 100.f - lp.sensex;//the more scope, the less take into account dE for Laplace
+
+ deltaEforLaplace(dE.get(), diffde, bfwr, bfhr, bufexporig, hueref, chromaref, lumaref);
+
+ constexpr float alap = 600.f;
+ constexpr float blap = 100.f;
+ constexpr float aa = (alap - blap) / 50.f;
+ constexpr float bb = 100.f - 30.f * aa;
+
+ float lap;
+ if (diffde > 80.f) {
+ lap = alap;
+ } else if (diffde < 30.f) {
+ lap = blap;
+ } else {
+ lap = aa * diffde + bb;
+ }
+
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int y = 0; y < bfhr; y++) {
+ for (int x = 0; x < bfwr; x++) {
+ datain[y * bfwr + x] = bufexporig->L[y][x];
+ }
+ }
+
+ MyMutex::MyLock lock(*fftwMutex);
+ ImProcFunctions::retinex_pde(datain.get(), dataout.get(), bfwr, bfhr, lap, 1.f, dE.get(), 0, 1, 1);//350 arbitrary value about 45% strength Laplacian
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int y = 0; y < bfhr; y++) {
+ for (int x = 0; x < bfwr; x++) {
+ bufexporig->L[y][x] = dataout[y * bfwr + x];
+ }
+ }
+#ifdef _OPENMP
+ #pragma omp parallel for if (multiThread)
+#endif
+ for (int ir = 0; ir < bfhr; ir++) {
+ for (int jr = 0; jr < bfwr; jr++) {
+ float L = bufexporig->L[ir][jr];
+ //highlight
+ const float hlfactor = (2 * L < MAXVALF ? hltonecurve[2 * L] : CurveFactory::hlcurve(cexp_scale, ccomp, chlrange, 2 * L));
+ L *= hlfactor;//approximation but pretty good with Laplacian and L < mean, hl aren't call
+ //shadow tone curve
+ L *= shtonecurve[2 * L];
+ //tonecurve
+ lab->L[ir][jr] = 0.5f * tonecurve[2 * L];
+ }
+ }
+ } else {
+ constexpr float kl = 1.f;
+ const float hlcompthr = lp.hlcompthr / 200.f;
+ const float hlcomp = lp.hlcomp / 100.f;
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
@@ -2406,9 +2531,9 @@ void ImProcFunctions::exlabLocal(local_params& lp, int bfh, int bfw, LabImage* b
for (int jr = 0; jr < bfw; jr++) {
float L = bufexporig->L[ir][jr];
const float Llin = LIM01(L / 32768.f);
- const float addcomp = linear * (-kl * Llin + kl);//maximum about 1. IL
- const float exp_scale = pow_F(2.0, (lp.expcomp + addcomp));
- const float shoulder = ((maxran / rtengine::max(1.0f, exp_scale)) * hlcompthr) + 0.1f;
+ const float addcomp = linear * (-kl * Llin + kl);//maximum about 1 . IL
+ const float exp_scale = pow_F(2.f, lp.expcomp + addcomp);
+ const float shoulder = (maxran / rtengine::max(1.0f, exp_scale)) * hlcompthr + 0.1f;
const float comp = (rtengine::max(0.f, (lp.expcomp + addcomp)) + 1.f) * hlcomp;
const float hlrange = maxran - shoulder;
@@ -2421,26 +2546,9 @@ void ImProcFunctions::exlabLocal(local_params& lp, int bfh, int bfw, LabImage* b
lab->L[ir][jr] = 0.5f * tonecurve[2 * L];
}
}
- } else {
-#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
-#endif
- for (int ir = 0; ir < bfh; ir++) {
- for (int jr = 0; jr < bfw; jr++) {
- float L = bufexporig->L[ir][jr];
- //highlight
- const float hlfactor = (2 * L < MAXVALF ? hltonecurve[2 * L] : CurveFactory::hlcurve(cexp_scale, ccomp, chlrange, 2 * L));
- L *= hlfactor;//approximation but pretty good with Laplacian and L < mean, hl aren't call
- //shadow tone curve
- L *= shtonecurve[2 * L];
- //tonecurve
- lab->L[ir][jr] = 0.5f * tonecurve[2 * L];
- }
- }
}
}
-
void ImProcFunctions::addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk)
{
// BENCHFUN
@@ -3051,6 +3159,9 @@ void calclocalGradientParams(const struct local_params& lp, struct grad_params&
} else if (indic == 11) {
stops = lp.strlog;
angs = lp.anglog;
+ } else if (indic == 12) {
+ stops = -lp.str_mas;
+ angs = lp.ang_mas;
}
@@ -3178,7 +3289,7 @@ void ImProcFunctions::blendstruc(int bfw, int bfh, LabImage* bufcolorig, float r
}
-static void blendmask(const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* original, LabImage* bufmaskor, LabImage* originalmas, float bl, int inv)
+static void blendmask(const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* original, LabImage* bufmaskor, LabImage* originalmas, float bl, float blab, int inv)
{
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
@@ -3202,8 +3313,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in
if (inv == 0) {
if (zone > 0) {
bufexporig->L[y][x] += (bl * bufmaskor->L[y][x]);
- bufexporig->a[y][x] *= (1.f + bl * bufmaskor->a[y][x]);
- bufexporig->b[y][x] *= (1.f + bl * bufmaskor->b[y][x]);
+ bufexporig->a[y][x] *= (1.f + blab * bufmaskor->a[y][x]);
+ bufexporig->b[y][x] *= (1.f + blab * bufmaskor->b[y][x]);
bufexporig->L[y][x] = CLIP(bufexporig->L[y][x]);
bufexporig->a[y][x] = clipC(bufexporig->a[y][x]);
@@ -3214,8 +3325,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in
originalmas->b[y][x] = clipC(bufexporig->b[y][x] * (1.f - bufmaskor->b[y][x]));
original->L[y + ystart][x + xstart] += (bl * localFactor * bufmaskor->L[y][x]);
- original->a[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->a[y][x]);
- original->b[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->b[y][x]);
+ original->a[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->a[y][x]);
+ original->b[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->b[y][x]);
original->L[y + ystart][x + xstart] = CLIP(original->L[y + ystart][x + xstart]);
original->a[y + ystart][x + xstart] = clipC(original->a[y + ystart][x + xstart]);
original->b[y + ystart][x + xstart] = clipC(original->b[y + ystart][x + xstart]);
@@ -3226,8 +3337,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in
if (zone < 2) {
bufexporig->L[y][x] += (bl * bufmaskor->L[y][x]);
- bufexporig->a[y][x] *= (1.f + bl * bufmaskor->a[y][x]);
- bufexporig->b[y][x] *= (1.f + bl * bufmaskor->b[y][x]);
+ bufexporig->a[y][x] *= (1.f + blab * bufmaskor->a[y][x]);
+ bufexporig->b[y][x] *= (1.f + blab * bufmaskor->b[y][x]);
bufexporig->L[y][x] = CLIP(bufexporig->L[y][x]);
bufexporig->a[y][x] = clipC(bufexporig->a[y][x]);
@@ -3240,8 +3351,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in
switch (zone) {
case 0: {
original->L[y + ystart][x + xstart] += (bl * bufmaskor->L[y][x]);
- original->a[y + ystart][x + xstart] *= (1.f + bl * bufmaskor->a[y][x]);
- original->b[y + ystart][x + xstart] *= (1.f + bl * bufmaskor->b[y][x]);
+ original->a[y + ystart][x + xstart] *= (1.f + blab * bufmaskor->a[y][x]);
+ original->b[y + ystart][x + xstart] *= (1.f + blab * bufmaskor->b[y][x]);
original->L[y + ystart][x + xstart] = CLIP(original->L[y + ystart][x + xstart]);
original->a[y + ystart][x + xstart] = clipC(original->a[y + ystart][x + xstart]);
original->b[y + ystart][x + xstart] = clipC(original->b[y + ystart][x + xstart]);
@@ -3250,8 +3361,8 @@ static void blendmask(const local_params& lp, int xstart, int ystart, int cx, in
case 1: {
original->L[y + ystart][x + xstart] += (bl * localFactor * bufmaskor->L[y][x]);
- original->a[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->a[y][x]);
- original->b[y + ystart][x + xstart] *= (1.f + bl * localFactor * bufmaskor->b[y][x]);
+ original->a[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->a[y][x]);
+ original->b[y + ystart][x + xstart] *= (1.f + blab * localFactor * bufmaskor->b[y][x]);
original->L[y + ystart][x + xstart] = CLIP(original->L[y + ystart][x + xstart]);
original->a[y + ystart][x + xstart] = clipC(original->a[y + ystart][x + xstart]);
original->b[y + ystart][x + xstart] = clipC(original->b[y + ystart][x + xstart]);
@@ -3565,30 +3676,27 @@ void ImProcFunctions::retinex_pde(const float * datain, float * dataout, int bfw
fftwf_plan_with_nthreads(omp_get_max_threads());
}
#endif
- float *data_fft, *data_fft04, *data_tmp, *data, *data_tmp04;
- float *datashow = nullptr;
+ float *datashow = nullptr;
if (show != 0) {
- if (NULL == (datashow = (float *) fftwf_malloc(sizeof(float) * bfw * bfh))) {
+ datashow = (float *) fftwf_malloc(sizeof(float) * bfw * bfh);
+ if (!datashow) {
fprintf(stderr, "allocation error\n");
abort();
}
}
- if (NULL == (data_tmp = (float *) fftwf_malloc(sizeof(float) * bfw * bfh))) {
- fprintf(stderr, "allocation error\n");
- abort();
- }
-
- if (NULL == (data_tmp04 = (float *) fftwf_malloc(sizeof(float) * bfw * bfh))) {
+ float *data_tmp = (float *) fftwf_malloc(sizeof(float) * bfw * bfh);
+ if (!data_tmp) {
fprintf(stderr, "allocation error\n");
abort();
}
//first call to laplacian with plein strength
- ImProcFunctions::discrete_laplacian_threshold(data_tmp, datain, bfw, bfh, thresh);
+ discrete_laplacian_threshold(data_tmp, datain, bfw, bfh, thresh);
- if (NULL == (data_fft = (float *) fftwf_malloc(sizeof(float) * bfw * bfh))) {
+ float *data_fft = (float *) fftwf_malloc(sizeof(float) * bfw * bfh);
+ if (!data_fft) {
fprintf(stderr, "allocation error\n");
abort();
}
@@ -3596,74 +3704,100 @@ void ImProcFunctions::retinex_pde(const float * datain, float * dataout, int bfw
if (show == 1) {
for (int y = 0; y < bfh ; y++) {
for (int x = 0; x < bfw; x++) {
- datashow[y * bfw + x] = data_tmp[y * bfw + x];
+ datashow[y * bfw + x] = data_tmp[y * bfw + x];
}
}
}
- //second call to laplacian with 40% strength ==> reduce effect if we are far from ref (deltaE)
- ImProcFunctions::discrete_laplacian_threshold(data_tmp04, datain, bfw, bfh, 0.4f * thresh);
-
- if (NULL == (data_fft04 = (float *) fftwf_malloc(sizeof(float) * bfw * bfh))) {
- fprintf(stderr, "allocation error\n");
- abort();
- }
-
- if (NULL == (data = (float *) fftwf_malloc(sizeof(float) * bfw * bfh))) {
- fprintf(stderr, "allocation error\n");
- abort();
- }
-
//execute first
const auto dct_fw = fftwf_plan_r2r_2d(bfh, bfw, data_tmp, data_fft, FFTW_REDFT10, FFTW_REDFT10, FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
fftwf_execute(dct_fw);
+ fftwf_destroy_plan(dct_fw);
//execute second
if (dEenable == 1) {
+ float* data_fft04 = (float *)fftwf_malloc(sizeof(float) * bfw * bfh);
+ float* data_tmp04 = (float *)fftwf_malloc(sizeof(float) * bfw * bfh);
+ if (!data_fft04 || !data_tmp04) {
+ fprintf(stderr, "allocation error\n");
+ abort();
+ }
+ //second call to laplacian with 40% strength ==> reduce effect if we are far from ref (deltaE)
+ discrete_laplacian_threshold(data_tmp04, datain, bfw, bfh, 0.4f * thresh);
const auto dct_fw04 = fftwf_plan_r2r_2d(bfh, bfw, data_tmp04, data_fft04, FFTW_REDFT10, FFTW_REDFT10, FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
fftwf_execute(dct_fw04);
fftwf_destroy_plan(dct_fw04);
+ constexpr float exponent = 4.5f;
#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
+ #pragma omp parallel if (multiThread)
#endif
- for (int y = 0; y < bfh ; y++) {//mix two fftw Laplacian : plein if dE near ref
- for (int x = 0; x < bfw; x++) {
- float prov = pow(dE[y * bfw + x], 4.5f);
- data_fft[y * bfw + x] = prov * data_fft[y * bfw + x] + (1.f - prov) * data_fft04[y * bfw + x];
+ {
+#ifdef __SSE2__
+ const vfloat exponentv = F2V(exponent);
+#endif
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+ for (int y = 0; y < bfh ; y++) {//mix two fftw Laplacian : plein if dE near ref
+ int x = 0;
+#ifdef __SSE2__
+ for (; x < bfw - 3; x += 4) {
+ STVFU(data_fft[y * bfw + x], intp(pow_F(LVFU(dE[y * bfw + x]), exponentv), LVFU(data_fft[y * bfw + x]), LVFU(data_fft04[y * bfw + x])));
+ }
+#endif
+ for (; x < bfw; x++) {
+ data_fft[y * bfw + x] = intp(pow_F(dE[y * bfw + x], exponent), data_fft[y * bfw + x], data_fft04[y * bfw + x]);
+ }
}
}
+ fftwf_free(data_fft04);
+ fftwf_free(data_tmp04);
}
- if (show == 2) {
- for (int y = 0; y < bfh ; y++) {
- for (int x = 0; x < bfw; x++) {
- datashow[y * bfw + x] = data_fft[y * bfw + x];
- }
- }
- }
-
- fftwf_free(data_fft04);
- fftwf_free(data_tmp);
- fftwf_free(data_tmp04);
-
/* solve the Poisson PDE in Fourier space */
/* 1. / (float) (bfw * bfh)) is the DCT normalisation term, see libfftw */
- ImProcFunctions::rex_poisson_dct(data_fft, bfw, bfh, 1. / (double)(bfw * bfh));
+ rex_poisson_dct(data_fft, bfw, bfh, 1. / (double)(bfw * bfh));
if (show == 3) {
for (int y = 0; y < bfh ; y++) {
for (int x = 0; x < bfw; x++) {
- datashow[y * bfw + x] = data_fft[y * bfw + x];
+ datashow[y * bfw + x] = data_fft[y * bfw + x];
}
}
}
- const auto dct_bw = fftwf_plan_r2r_2d(bfh, bfw, data_fft, data, FFTW_REDFT01, FFTW_REDFT01, FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
+ const auto dct_bw = fftwf_plan_r2r_2d(bfh, bfw, data_fft, data_tmp, FFTW_REDFT01, FFTW_REDFT01, FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
fftwf_execute(dct_bw);
- fftwf_destroy_plan(dct_fw);
fftwf_destroy_plan(dct_bw);
fftwf_free(data_fft);
+
+ if (show != 4 && normalize == 1) {
+ normalize_mean_dt(data_tmp, datain, bfw * bfh, 1.f, 1.f);
+ }
+
+ if (show == 0 || show == 4) {
+
+#ifdef _OPENMP
+ #pragma omp parallel for if (multiThread)
+#endif
+ for (int y = 0; y < bfh ; y++) {
+ for (int x = 0; x < bfw; x++) {
+ dataout[y * bfw + x] = clipLoc(multy * data_tmp[y * bfw + x]);
+ }
+ }
+ } else if (show == 1 || show == 2 || show == 3) {
+ for (int y = 0; y < bfh ; y++) {
+ for (int x = 0; x < bfw; x++) {
+ dataout[y * bfw + x] = clipLoc(multy * datashow[y * bfw + x]);
+ }
+ }
+ }
+
+ fftwf_free(data_tmp);
+ if (datashow) {
+ fftwf_free(datashow);
+ }
fftwf_cleanup();
#ifdef RT_FFTW3F_OMP
@@ -3671,32 +3805,6 @@ void ImProcFunctions::retinex_pde(const float * datain, float * dataout, int bfw
fftwf_cleanup_threads();
}
#endif
- if (show != 4 && normalize == 1) {
- normalize_mean_dt(data, datain, bfw * bfh, 1.f, 1.f);
- }
-
- if (show == 0 || show == 4) {
-
-#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
-#endif
- for (int y = 0; y < bfh ; y++) {
- for (int x = 0; x < bfw; x++) {
- dataout[y * bfw + x] = clipLoc(multy * data[y * bfw + x]);
- }
- }
- } else if (show == 1 || show == 2 || show == 3) {
- for (int y = 0; y < bfh ; y++) {
- for (int x = 0; x < bfw; x++) {
- dataout[y * bfw + x] = clipLoc(multy * datashow[y * bfw + x]);
- }
- }
-
- fftwf_free(datashow);
- }
-
- fftwf_free(data);
-
}
void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int xstart, int ystart, int sk, int cx, int cy, LabImage* bufcolorig, LabImage* bufmaskblurcol, LabImage* originalmaskcol, LabImage* original, LabImage* reserved, int inv, struct local_params & lp,
@@ -3704,12 +3812,15 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
const LocCCmaskCurve & locccmasCurve, bool lcmasutili,
const LocLLmaskCurve & locllmasCurve, bool llmasutili,
const LocHHmaskCurve & lochhmasCurve, bool lhmasutili, const LocHHmaskCurve & lochhhmasCurve, bool lhhmasutili,
- bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, int shado, float amountcd, float anchorcd,
+ bool multiThread, bool enaMask, bool showmaske, bool deltaE, bool modmask, bool zero, bool modif, float chrom, float rad, float lap, float gamma, float slope, float blendm, float blendmab, int shado, float amountcd, float anchorcd,
const LUTf& lmasklocalcurve, bool localmaskutili,
const LocwavCurve & loclmasCurvecolwav, bool lmasutilicolwav, int level_bl, int level_hl, int level_br, int level_hr,
int shortcu, bool delt, const float hueref, const float chromaref, const float lumaref,
- float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope
+ float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope,
+ bool fftt, float blu_ma, float cont_ma, int indic
)
+
+
{
array2D ble(bfw, bfh);
array2D blechro(bfw, bfh);
@@ -3728,7 +3839,6 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
}
if (deltaE || modmask || enaMask || showmaske) {
-
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
#endif
@@ -3745,7 +3855,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
JaggedArray blendstru(bfw, bfh);
- if (lp.blurcolmask >= 0.25f && strumask == 0.f) {
+ if (blu_ma >= 0.25f && strumask == 0.f) {
strumask = 0.1f; // to enable a small mask make FFT good ...why ??
}
@@ -3771,15 +3881,15 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
JaggedArray blur(bfw, bfh);
- if (lp.contcolmask > 0.f) {
- float contra = lp.contcolmask;
+ if (cont_ma > 0.f) {
+ float contra = cont_ma;
buildBlendMask(bufcolorig->L, blendblur, bfw, bfh, contra);
float radblur = 0.25f + 0.002f * std::fabs(rad);//empirical value
float rm = radblur / sk;
- if (lp.fftColorMask) {
+ if (fftt) {
if (rm < 0.3f) {
rm = 0.3f;
}
@@ -3795,16 +3905,16 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
}
}
- if (lp.blurcolmask >= 0.25f) {
- if (!lp.fftColorMask) { // || (lp.fftColorMask && call != 2)) {
+ if (blu_ma >= 0.25f) {
+ if (!fftt) { // || (lp.fftColorMask && call != 2)) {
#ifdef _OPENMP
#pragma omp parallel if (multiThread)
#endif
{
- gaussianBlur(bufcolorig->L, blur, bfw, bfh, lp.blurcolmask / sk);
+ gaussianBlur(bufcolorig->L, blur, bfw, bfh, blu_ma / sk);
}
} else {
- ImProcFunctions::fftw_convol_blur2(bufcolorig->L, blur, bfw, bfh, lp.blurcolmask / sk, 0, 0);
+ ImProcFunctions::fftw_convol_blur2(bufcolorig->L, blur, bfw, bfh, blu_ma / sk, 0, 0);
}
for (int i = 0; i < bfh; i++) {
@@ -3865,9 +3975,9 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
kmasstru = bufcolorig->L[ir][jr] * blendstru[ir][jr];
}
- if (lp.contcolmask > 0.f) {
+ if (cont_ma > 0.f) {
- if (lp.blurcolmask >= 0.25f) {
+ if (blu_ma >= 0.25f) {
float prov = intp(blendstru[ir][jr], bufcolorig->L[ir][jr], rtengine::max(blur[ir][jr], 0.0f));
kmasblur = bufcolorig->L[ir][jr] - prov ;
@@ -3876,6 +3986,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
}
if (locllmasCurve && llmasutili) {
+ // printf("s");
kmaskL = 32768.f * LIM01(kinv - kneg * locllmasCurve[(500.f / 32768.f) * bufcolorig->L[ir][jr]]);
}
@@ -3970,12 +4081,12 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
const int r1 = rtengine::max(4 / sk * tmpblur + 0.5, 1);
const int r2 = rtengine::max(25 / sk * tmpblur + 0.5, 1);
- constexpr float epsilmax = 0.0005f;
+ constexpr float epsilmax = 0.005f;
constexpr float epsilmin = 0.00001f;
- constexpr float aepsil = (epsilmax - epsilmin) / 90.f;
- constexpr float bepsil = epsilmax - 100.f * aepsil;
- const float epsil = rad < 0.f ? 0.001f : aepsil * 0.1f * rad + bepsil;
+ constexpr float aepsil = (epsilmax - epsilmin) / 100.f;
+ constexpr float bepsil = epsilmin; //epsilmax - 100.f * aepsil;
+ const float epsil = rad < 0.f ? 0.001f : aepsil * rad + bepsil;
rtengine::guidedFilter(guid, blechro, blechro, r1, epsil, multiThread);
rtengine::guidedFilter(guid, ble, ble, r2, 0.2f * epsil, multiThread);
@@ -4224,8 +4335,8 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
struct grad_params gp;
- if (lp.strmaexp != 0.f) {
- calclocalGradientParams(lp, gp, ystart, xstart, bfw, bfh, 0);
+ if ((indic == 0 && lp.strmaexp != 0.f) || (indic ==12 && lp.str_mas != 0.f)) {
+ calclocalGradientParams(lp, gp, ystart, xstart, bfw, bfh, indic);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
#endif
@@ -4271,7 +4382,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
if (zero || modif || modmask || deltaE || enaMask) {
originalmaskcol->CopyFrom(bufcolorig, multiThread);
- blendmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig, original, bufmaskblurcol, originalmaskcol, blendm, inv);
+ blendmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig, original, bufmaskblurcol, originalmaskcol, blendm, blendmab, inv);
}
}
}
@@ -4601,10 +4712,7 @@ void ImProcFunctions::Exclude_Local(float **deltaso, float hueref, float chromar
const bool isZone0x = lox > (lp.xc + lp.lx - 1) || lox < lp.xc - lp.lxL; // -1 fix issue 5554
if (isZone0x) { // outside selection and outside transition zone => no effect, keep original values
- for (int x = 0; x < transformed->W; x++) {
- transformed->L[y][x] = original->L[y][x];
- }
-
+ transformed->L[y][x] = original->L[y][x];
continue;
}
@@ -5224,7 +5332,7 @@ void ImProcFunctions::InverseColorLight_Local(bool tonequ, bool tonecurv, int sp
}
} else if (senstype == 1) { //exposure
- ImProcFunctions::exlabLocal(lp, GH, GW, original, temp.get(), hltonecurveloc, shtonecurveloc, tonecurveloc);
+ ImProcFunctions::exlabLocal(lp, GH, GW, GW, GH, original, temp.get(), hltonecurveloc, shtonecurveloc, tonecurveloc, hueref, lumaref, chromaref);
if (exlocalcurve) {
#ifdef _OPENMP
@@ -5238,6 +5346,12 @@ void ImProcFunctions::InverseColorLight_Local(bool tonequ, bool tonecurv, int sp
}
}
+ if ((lp.expcomp != 0.f) || (exlocalcurve)) {
+ if (lp.shadex > 0) {
+ ImProcFunctions::shadowsHighlights(temp.get(), true, 1, 0, lp.shadex, 40, sk, 0, lp.shcomp);
+ }
+ }
+
if (lp.expchroma != 0.f) {
const float ch = (1.f + 0.02f * lp.expchroma) ;
float chprosl;
@@ -5491,7 +5605,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform
if (params->locallab.enabled) {
//always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise
struct local_params lp;
- calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili);
+ calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili);
int begy = lp.yc - lp.lyT;
int begx = lp.xc - lp.lxL;
int yEn = lp.yc + lp.ly;
@@ -5981,8 +6095,9 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag
varsens = lp.senslc;
} else if (senstype == 11) { //encoding log
varsens = lp.sensilog;
+ } else if (senstype == 20) { //common mask
+ varsens = lp.sensimas;
}
-
bool delt = lp.deltaem;
//sobel
@@ -6008,7 +6123,8 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag
const bool tmshow = ((lp.showmasktmmet == 1 || lp.showmasktmmet == 2) && senstype == 8);
const bool lcshow = ((lp.showmasklcmet == 1 || lp.showmasklcmet == 2) && senstype == 10);
const bool origshow = ((lp.showmasksoftmet == 5) && senstype == 3 && lp.softmet == 1);
-
+
+ const bool masshow = ((lp.showmask_met == 1) && senstype == 20);
const bool previewvib = ((lp.showmaskvibmet == 4) && senstype == 2);
const bool previewexp = ((lp.showmaskexpmet == 5) && senstype == 1);
@@ -6017,6 +6133,7 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag
const bool previewtm = ((lp.showmasktmmet == 4) && senstype == 8);
const bool previewlc = ((lp.showmasklcmet == 4) && senstype == 10);
const bool previeworig = ((lp.showmasksoftmet == 6) && senstype == 3 && lp.softmet == 1);
+ const bool previewmas = ((lp.showmask_met == 3) && senstype == 20);
float radius = 3.f / sk;
@@ -6054,7 +6171,8 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag
const bool usemaskSH = (lp.showmaskSHmet == 2 || lp.enaSHMask || lp.showmaskSHmet == 4) && senstype == 9;
const bool usemasktm = (lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 4) && senstype == 8;
const bool usemasklc = (lp.showmasklcmet == 2 || lp.enalcMask || lp.showmasklcmet == 4) && senstype == 10;
- const bool usemaskall = (usemaskexp || usemaskvib || usemaskcol || usemaskSH || usemasktm || usemasklc);
+ const bool usemaskmas = (lp.showmask_met == 1 || lp.ena_Mask || lp.showmask_met == 3) && senstype == 20;
+ const bool usemaskall = (usemaskexp || usemaskvib || usemaskcol || usemaskSH || usemasktm || usemasklc || usemaskmas);
//blur a little mask
if (usemaskall) {
@@ -6239,13 +6357,13 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag
const float difb = factorx * realstrbdE;
float maxdifab = rtengine::max(std::fabs(difa), std::fabs(difb));
- if ((expshow || vibshow || colshow || SHshow || tmshow || lcshow || origshow) && lp.colorde < 0) { //show modifications with use "b"
+ if ((expshow || vibshow || colshow || SHshow || tmshow || lcshow || origshow || masshow) && lp.colorde < 0) { //show modifications with use "b"
// (origshow && lp.colorde < 0) { //original Retinex
transformed->a[y + ystart][x + xstart] = 0.f;
transformed->b[y + ystart][x + xstart] = ampli * 8.f * diflc * reducdE;
transformed->L[y + ystart][x + xstart] = CLIP(12000.f + 0.5f * ampli * diflc);
- } else if ((expshow || vibshow || colshow || SHshow || tmshow || lcshow || origshow) && lp.colorde > 0) {//show modifications without use "b"
+ } else if ((expshow || vibshow || colshow || SHshow || tmshow || lcshow || origshow || masshow) && lp.colorde > 0) {//show modifications without use "b"
if (diflc < 1000.f) {//if too low to be view use ab
diflc += 0.5f * maxdifab;
}
@@ -6253,7 +6371,7 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag
transformed->L[y + ystart][x + xstart] = CLIP(12000.f + 0.5f * ampli * diflc);
transformed->a[y + ystart][x + xstart] = clipC(ampli * difa);
transformed->b[y + ystart][x + xstart] = clipC(ampli * difb);
- } else if (previewexp || previewvib || previewcol || previewSH || previewtm || previewlc || previeworig || lp.prevdE) {//show deltaE
+ } else if (previewexp || previewvib || previewcol || previewSH || previewtm || previewlc || previeworig || previewmas || lp.prevdE) {//show deltaE
float difbdisp = reducdE * 10000.f * lp.colorde;
if (transformed->L[y + ystart][x + xstart] < darklim) { //enhance dark luminance as user can see!
@@ -6961,8 +7079,6 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
const int W_L = wdspot.level_W(0);
const int H_L = wdspot.level_H(0);
- const std::unique_ptr beta(new float[W_L * H_L]);
-
#ifdef _OPENMP
const int numThreads = omp_get_max_threads();
#else
@@ -6985,37 +7101,9 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
constexpr float offs = 1.f;
float mea[10];
calceffect(level, mean, sigma, mea, effect, offs);
-
-#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
-#endif
- for (int co = 0; co < H_L * W_L; co++) {
- const float WavCL = std::fabs(WavL[co]);
-
- if (WavCL < mea[0]) {
- beta[co] = 0.05f;
- } else if (WavCL < mea[1]) {
- beta[co] = 0.2f;
- } else if (WavCL < mea[2]) {
- beta[co] = 0.7f;
- } else if (WavCL < mea[3]) {
- beta[co] = 1.f; //standard
- } else if (WavCL < mea[4]) {
- beta[co] = 1.f;
- } else if (WavCL < mea[5]) {
- beta[co] = 0.8f; //+sigma
- } else if (WavCL < mea[6]) {
- beta[co] = 0.5f;
- } else if (WavCL < mea[7]) {
- beta[co] = 0.3f;
- } else if (WavCL < mea[8]) {
- beta[co] = 0.2f; // + 2 sigma
- } else if (WavCL < mea[9]) {
- beta[co] = 0.1f;
- } else {
- beta[co] = 0.05f;
- }
- }
+ float lutFactor;
+ const float inVals[] = {0.05f, 0.2f, 0.7f, 1.f, 1.f, 0.8f, 0.5f, 0.3f, 0.2f, 0.1f, 0.05f};
+ const auto meaLut = buildMeaLut(inVals, mea, lutFactor);
const float klev = 0.25f * loclevwavCurve[level * 55.5f];
float* src[H_L];
@@ -7028,14 +7116,28 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
{
gaussianBlur(src, templevel, W_L, H_L, radlevblur * klev * chromablu);
}
-
#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
+ #pragma omp parallel if (multiThread)
#endif
- for (int y = 0; y < H_L; y++) {
- for (int x = 0; x < W_L; x++) {
- int j = y * W_L + x;
- WavL[j] = intp(beta[j], templevel[y][x], WavL[j]);
+ {
+#ifdef __SSE2__
+ const vfloat lutFactorv = F2V(lutFactor);
+#endif
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+ for (int y = 0; y < H_L; y++) {
+ int x = 0;
+ int j = y * W_L;
+#ifdef __SSE2__
+ for (; x < W_L - 3; x += 4, j += 4) {
+ const vfloat valv = LVFU(WavL[j]);
+ STVFU(WavL[j], intp((*meaLut)[vabsf(valv) * lutFactorv], LVFU(templevel[y][x]), valv));
+ }
+#endif
+ for (; x < W_L; x++, j++) {
+ WavL[j] = intp((*meaLut)[std::fabs(WavL[j]) * lutFactor], templevel[y][x], WavL[j]);
+ }
}
}
}
@@ -7048,37 +7150,9 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
constexpr float offs = 1.f;
float mea[10];
calceffect(level, mean, sigma, mea, effect, offs);
-#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
-#endif
- for (int co = 0; co < H_L * W_L; co++) {
- const float WavCL = std::fabs(WavL[co]);
-
- if (WavCL < mea[0]) {
- beta[co] = 0.05f;
- } else if (WavCL < mea[1]) {
- beta[co] = 0.2f;
- } else if (WavCL < mea[2]) {
- beta[co] = 0.7f;
- } else if (WavCL < mea[3]) {
- beta[co] = 1.f; //standard
- } else if (WavCL < mea[4]) {
- beta[co] = 1.f;
- } else if (WavCL < mea[5]) {
- beta[co] = 0.8f; //+sigma
- } else if (WavCL < mea[6]) {
- beta[co] = 0.7f;
- } else if (WavCL < mea[7]) {
- beta[co] = 0.5f;
- } else if (WavCL < mea[8]) {
- beta[co] = 0.3f; // + 2 sigma
- } else if (WavCL < mea[9]) {
- beta[co] = 0.2f;
- } else {
- beta[co] = 0.1f;
- }
- }
-
+ float lutFactor;
+ const float inVals[] = {0.05f, 0.2f, 0.7f, 1.f, 1.f, 0.8f, 0.7f, 0.5f, 0.3f, 0.2f, 0.1f};
+ const auto meaLut = buildMeaLut(inVals, mea, lutFactor);
const int iteration = deltad;
const int itplus = 7 + iteration;
const int itmoins = 7 - iteration;
@@ -7106,6 +7180,7 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
const vfloat zd5v = F2V(0.5f);
const vfloat onev = F2V(1.f);
const vfloat itfv = F2V(itf);
+ const vfloat lutFactorv = F2V(lutFactor);
#endif
#ifdef _OPENMP
#pragma omp for
@@ -7116,13 +7191,14 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
for (; j < W_L - 3; j += 4) {
const vfloat LL100v = LC2VFU(tmp[i * 2][j * 2]) / c327d68v;
const vfloat kbav = factorv * (loccompwavCurve[sixv * LL100v] - zd5v); //k1 between 0 and 0.5 0.5==> 1/6=0.16
- STVFU(WavL[i * W_L + j], LVFU(WavL[i * W_L + j]) * pow_F(onev + kbav * LVFU(beta[i * W_L + j]), itfv));
+ const vfloat valv = LVFU(WavL[i * W_L + j]);
+ STVFU(WavL[i * W_L + j], valv * pow_F(onev + kbav * (*meaLut)[vabsf(valv) * lutFactorv], itfv));
}
#endif
for (; j < W_L; ++j) {
const float LL100 = tmp[i * 2][j * 2] / 327.68f;
const float kba = factor * (loccompwavCurve[6.f * LL100] - 0.5f); //k1 between 0 and 0.5 0.5==> 1/6=0.16
- WavL[i * W_L + j] *= pow_F(1.f + kba * beta[i * W_L + j], itf);
+ WavL[i * W_L + j] *= pow_F(1.f + kba * (*meaLut)[std::fabs(WavL[i * W_L + j]) * lutFactor], itf);
}
}
}
@@ -7145,51 +7221,13 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
for (int dir = 1; dir < 4; ++dir) {
for (int level = level_bl; level < maxlvl; ++level) {
- const auto WavL = wdspot.level_coeffs(level)[dir];
const float effect = lp.sigmadr;
constexpr float offs = 1.f;
float mea[10];
calceffect(level, mean, sigma, mea, effect, offs);
-#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
-#endif
- for (int co = 0; co < H_L * W_L; co++) {
- const float WavCL = std::fabs(WavL[co]);
-
- if (WavCL < mea[0]) {
- beta[co] = 0.05f;
- } else if (WavCL < mea[1]) {
- beta[co] = 0.2f;
- } else if (WavCL < mea[2]) {
- beta[co] = 0.7f;
- } else if (WavCL < mea[3]) {
- beta[co] = 1.f; //standard
- } else if (WavCL < mea[4]) {
- beta[co] = 1.f;
- } else if (WavCL < mea[5]) {
- beta[co] = 0.8f; //+sigma
- } else if (WavCL < mea[6]) {
- beta[co] = 0.65f;
- } else if (WavCL < mea[7]) {
- beta[co] = 0.5f;
- } else if (WavCL < mea[8]) {
- beta[co] = 0.4f; // + 2 sigma
- } else if (WavCL < mea[9]) {
- beta[co] = 0.25f;
- } else {
- beta[co] = 0.1f;
- }
- }
-
- float klev = (loccomprewavCurve[level * 55.5f] - 0.75f);
- if (klev < 0.f) {
- klev *= 2.6666f;//compression increase contraste
- } else {
- klev *= 4.f;//dilatation reduce contraste - detailattenuator
- }
- const float compression = expf(-klev);
- const float detailattenuator = std::max(klev, 0.f);
-
+ float lutFactor;
+ const float inVals[] = {0.05f, 0.2f, 0.7f, 1.f, 1.f, 0.8f, 0.65f, 0.5f, 0.4f, 0.25f, 0.1f};
+ const auto meaLut = buildMeaLut(inVals, mea, lutFactor);
const auto wav_L = wdspot.level_coeffs(level)[dir];
#ifdef _OPENMP
@@ -7202,14 +7240,38 @@ void ImProcFunctions::wavcont(const struct local_params& lp, float ** tmp, wavel
}
}
+ float klev = (loccomprewavCurve[level * 55.5f] - 0.75f);
+ if (klev < 0.f) {
+ klev *= 2.6666f;//compression increase contraste
+ } else {
+ klev *= 4.f;//dilatation reduce contraste - detailattenuator
+ }
+ const float compression = expf(-klev);
+ const float detailattenuator = std::max(klev, 0.f);
+
Compresslevels(templevel, W_L, H_L, compression, detailattenuator, thres, mean[level], MaxP[level], meanN[level], MaxN[level], madL[level][dir - 1]);
#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
+ #pragma omp parallel if (multiThread)
#endif
- for (int y = 0; y < H_L; y++) {
- for (int x = 0; x < W_L; x++) {
- int j = y * W_L + x;
- wav_L[j] = intp(beta[j], templevel[y][x], wav_L[j]);
+ {
+#ifdef __SSE2__
+ const vfloat lutFactorv = F2V(lutFactor);
+#endif
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+ for (int y = 0; y < H_L; y++) {
+ int x = 0;
+ int j = y * W_L;
+#ifdef __SSE2__
+ for (; x < W_L - 3; x += 4, j += 4) {
+ const vfloat valv = LVFU(wav_L[j]);
+ STVFU(wav_L[j], intp((*meaLut)[vabsf(valv) * lutFactorv], LVFU(templevel[y][x]), valv));
+ }
+#endif
+ for (; x < W_L; x++, j++) {
+ wav_L[j] = intp((*meaLut)[std::fabs(wav_L[j]) * lutFactor], templevel[y][x], wav_L[j]);
+ }
}
}
}
@@ -7227,7 +7289,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
float sigm, float offs, int & maxlvl, float sigmadc, float deltad, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress, float thres)
{
BENCHFUN
- wavelet_decomposition *wdspot = new wavelet_decomposition(tmp[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen);
+ std::unique_ptr wdspot(new wavelet_decomposition(tmp[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen));
//first decomposition for compress dynamic range positive values and other process
if (wdspot->memory_allocation_failed()) {
@@ -7245,20 +7307,15 @@ BENCHFUN
if (lp.strwav != 0.f && lp.wavgradl) {
array2D factorwav(W_Lm, H_Lm);
calclocalGradientParams(lp, gpwav, 0, 0, W_Lm, H_Lm, 10);
-
-
+ const float mult = lp.strwav < 0.f ? -1.f : 1.f;
+#ifdef _OPENMP
+ #pragma omp parallel for if (multiThread)
+#endif
for (int y = 0; y < H_Lm; y++) {
for (int x = 0; x < W_Lm; x++) {
- float factor = ImProcFunctions::calcGradientFactor(gpwav, x, y);
- factorwav[y][x] = factor;
- factorwav[y][x] = 1.f - factorwav[y][x];
-
- if (lp.strwav < 0.f) {
- factorwav[y][x] *= -1.f;
- }
+ factorwav[y][x] = mult * (1.f - ImProcFunctions::calcGradientFactor(gpwav, x, y));
}
}
-
float mean[10];
float meanN[10];
float sigma[10];
@@ -7287,7 +7344,7 @@ BENCHFUN
if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) {
const int W_L = wdspot->level_W(level);
const int H_L = wdspot->level_H(level);
- float* const* wav_L = wdspot->level_coeffs(level);
+ auto wav_L = wdspot->level_coeffs(level)[dir];
const float effect = lp.sigmalc2;
constexpr float offset = 1.f;
float mea[10];
@@ -7301,72 +7358,48 @@ BENCHFUN
const float asig = 0.166f / (sigma[level] * lp.sigmalc2);
const float bsig = 0.5f - asig * mean[level];
const float amean = 0.5f / mean[level];
+ float klev = 1.f;
+
+ if (level_hl != level_bl) {
+ if (level >= level_bl && level < level_hl) {
+ klev = alowg * level + blowg;
+ }
+ }
+
+ if (level_hr != level_br) {
+ if (level > level_hr && level <= level_br) {
+ klev = ahighg * level + bhighg;
+ }
+ }
+ klev *= 0.8f;
+ const float threshold = mean[level] + lp.sigmalc2 * sigma[level];
+ float lutFactor;
+ const float inVals[] = {0.05f, 0.2f, 0.7f, 1.f, 1.f, 0.8f, 0.6f, 0.5f, 0.4f, 0.3f, 0.1f};
+ const auto meaLut = buildMeaLut(inVals, mea, lutFactor);
#ifdef _OPENMP
- #pragma omp parallel for if (multiThread)
+ #pragma omp parallel for schedule(dynamic, 16) if (multiThread)
#endif
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
- const float WavCL = std::fabs(wav_L[dir][y * W_L + x]);
- float beta;
-
- if (WavCL < mea[0]) {
- beta = 0.05f;
- } else if (WavCL < mea[1]) {
- beta = 0.2f;
- } else if (WavCL < mea[2]) {
- beta = 0.7f;
- } else if (WavCL < mea[3]) {
- beta = 1.f; //standard
- } else if (WavCL < mea[4]) {
- beta = 1.f;
- } else if (WavCL < mea[5]) {
- beta = 0.8f; //+sigma
- } else if (WavCL < mea[6]) {
- beta = 0.6f;
- } else if (WavCL < mea[7]) {
- beta = 0.5f;
- } else if (WavCL < mea[8]) {
- beta = 0.4f; // + 2 sigma
- } else if (WavCL < mea[9]) {
- beta = 0.3f;
- } else {
- beta = 0.1f;
- }
+ const float WavCL = std::fabs(wav_L[y * W_L + x]);
float absciss;
- float &val = wav_L[dir][y * W_L + x];
-
- if (std::fabs(val) >= (mean[level] + lp.sigmalc2 * sigma[level])) { //for max
- const float valc = xlogf(std::fabs(val)) - logmax;
- absciss = xexpf(valc * rap);
- } else if (std::fabs(val) >= mean[level]) {
- absciss = asig * std::fabs(val) + bsig;
+ if (WavCL >= threshold) { //for max
+ absciss = pow_F(WavCL - logmax, rap);
+ } else if (WavCL >= mean[level]) {
+ absciss = asig * WavCL + bsig;
} else {
- absciss = amean * std::fabs(val);
+ absciss = amean * WavCL;
}
- float klev = 1.f;
-
- if (level_hl != level_bl) {
- if (level >= level_bl && level < level_hl) {
- klev = alowg * level + blowg;
- }
- }
-
- if (level_hr != level_br) {
- if (level > level_hr && level <= level_br) {
- klev = ahighg * level + bhighg;
- }
- }
-
- const float kc = 0.8f * klev * factorwav[y][x] * absciss;
+ const float kc = klev * factorwav[y][x] * absciss;
const float reduceeffect = kc <= 0.f ? 1.f : 1.5f;
float kinterm = 1.f + reduceeffect * kc;
kinterm = kinterm <= 0.f ? 0.01f : kinterm;
- val *= (1.f + (kinterm - 1.f) * beta);
+ wav_L[y * W_L + x] *= (1.f + (kinterm - 1.f) * (*meaLut)[WavCL * lutFactor]);
}
}
}
@@ -7374,53 +7407,29 @@ BENCHFUN
}
}
- //declare a and b if need
- wavelet_decomposition *wdspota = nullptr;
- wavelet_decomposition *wdspotb = nullptr;
-
int W_L = wdspot->level_W(0);
int H_L = wdspot->level_H(0);
float *wav_L0 = wdspot->get_coeff0();
if (radblur > 0.f && blurena) {
- array2D bufl(W_L, H_L);
-#ifdef _OPENMP
- #pragma omp parallel for schedule(dynamic,16) if (multiThread)
-#endif
- for (int y = 0; y < H_L; y++) {
- for (int x = 0; x < W_L; x++) {
- bufl[y][x] = wav_L0[y * W_L + x];
- }
+ float* src[H_L];
+ for (int i = 0; i < H_L; ++i) {
+ src[i] = &wav_L0[i * W_L];
}
#ifdef _OPENMP
#pragma omp parallel if (multiThread)
#endif
{
- gaussianBlur(bufl, bufl, W_L, H_L, radblur);
- }
-
-#ifdef _OPENMP
- #pragma omp parallel for schedule(dynamic,16) if (multiThread)
-#endif
- for (int y = 0; y < H_L; y++) {
- for (int x = 0; x < W_L; x++) {
- wav_L0[y * W_L + x] = bufl[y][x];
- }
+ gaussianBlur(src, src, W_L, H_L, radblur);
}
}
if (compress != 0.f && compreena) {
-
- float Compression = expf(-compress);
- float DetailBoost = compress;
-
- if (compress < 0.0f) {
- DetailBoost = 0.0f;
- }
+ const float Compression = expf(-compress);
+ const float DetailBoost = std::max(compress, 0.f);
CompressDR(wav_L0, W_L, H_L, Compression, DetailBoost);
-
}
if ((lp.residsha != 0.f || lp.residhi != 0.f)) {
@@ -7461,7 +7470,6 @@ BENCHFUN
}
if (contrast != 0.) {
-
double avedbl = 0.0; // use double precision for large summations
#ifdef _OPENMP
@@ -7471,10 +7479,7 @@ BENCHFUN
avedbl += wav_L0[i];
}
- float ave = avedbl / double(W_L * H_L);
-
- float avg = ave / 32768.f;
- avg = LIM01(avg);
+ const float avg = LIM01(avedbl / (32768.f * W_L * H_L));
double contreal = 0.6 * contrast;
DiagonalCurve resid_contrast({
DCT_NURBS,
@@ -7487,12 +7492,8 @@ BENCHFUN
#pragma omp parallel for if (multiThread)
#endif
for (int i = 0; i < W_L * H_L; i++) {
- float buf = LIM01(wav_L0[i] / 32768.f);
- buf = resid_contrast.getVal(buf);
- buf *= 32768.f;
- wav_L0[i] = buf;
+ wav_L0[i] = resid_contrast.getVal(LIM01(wav_L0[i] / 32768.f)) * 32768.f;
}
-
}
float alow = 1.f;
@@ -7892,16 +7893,16 @@ BENCHFUN
#pragma omp parallel for schedule(dynamic, 16 * W_L) if (multiThread)
#endif
for (int i = 0; i < W_L * H_L; i++) {
- const float val = wav_L[dir][i];
+ const float val = std::fabs(wav_L[dir][i]);
float absciss;
- if (std::fabs(val) >= limit1) { //for max
- const float valcour = xlogf(std::fabs(val));
+ if (val >= limit1) { //for max
+ const float valcour = xlogf(val);
absciss = xexpf((valcour - logmax) * rap);
- } else if (std::fabs(val) >= limit2) {
- absciss = asig * std::fabs(val) + bsig;
+ } else if (val >= limit2) {
+ absciss = asig * val + bsig;
} else {
- absciss = amean * std::fabs(val);
+ absciss = amean * val;
}
const float kc = klev * (locwavCurve[absciss * 500.f] - 0.5f);
@@ -7916,66 +7917,60 @@ BENCHFUN
}
}
}
-
//reconstruct all for L
wdspot->reconstruct(tmp[0], 1.f);
- delete wdspot;
- if (wavcurvecon && (chromalev != 1.f) && levelena) { // a and b if need ) {//contrast by levels for chroma a and b
- wdspota = new wavelet_decomposition(tmpa[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen);
-
- if (wdspota->memory_allocation_failed()) {
+ bool reconstruct = false;
+ if (wavcurvecon && (chromalev != 1.f) && levelena) { // a if need ) {//contrast by levels for chroma a
+ // a
+ wdspot.reset(new wavelet_decomposition(tmpa[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen));
+ if (wdspot->memory_allocation_failed()) {
return;
}
+ wavcbd(*wdspot, level_bl, maxlvl, locconwavCurve, locconwavutili, sigm, offs, chromalev, sk);
+ reconstruct = true;
+ }
+ if (wavcurvelev && radlevblur > 0.f && blurena && chromablu > 0.f && !blurlc) {//chroma blur if need
+ // a
+ if (!reconstruct) {
+ wdspot.reset(new wavelet_decomposition(tmpa[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen));
+ if (wdspot->memory_allocation_failed()) {
+ return;
+ }
+ }
+ wavcont(lp, tmp, *wdspot, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, chromablu, 0.f, 0.f, 0.f);
+ reconstruct = true;
+ }
+ if (reconstruct) {
+ wdspot->reconstruct(tmpa[0], 1.f);
+ }
- wavcbd(*wdspota, level_bl, maxlvl, locconwavCurve, locconwavutili, sigm, offs, chromalev, sk);
- wdspota->reconstruct(tmpa[0], 1.f);
- delete wdspota;
-
- wdspotb = new wavelet_decomposition(tmpb[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen);
-
- if (wdspotb->memory_allocation_failed()) {
+ reconstruct = false;
+ if (wavcurvecon && (chromalev != 1.f) && levelena) { // b if need ) {//contrast by levels for chroma b
+ //b
+ wdspot.reset(new wavelet_decomposition(tmpb[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen));
+ if (wdspot->memory_allocation_failed()) {
return;
}
-
- wavcbd(*wdspotb, level_bl, maxlvl, locconwavCurve, locconwavutili, sigm, offs, chromalev, sk);
- wdspotb->reconstruct(tmpb[0], 1.f);
- delete wdspotb;
-
+ //b
+ wavcbd(*wdspot, level_bl, maxlvl, locconwavCurve, locconwavutili, sigm, offs, chromalev, sk);
+ reconstruct = true;
}
- if (wavcurvelev && radlevblur > 0.f && blurena) {//chroma blur if need
- if (!blurlc) {
- // a
- wdspota = new wavelet_decomposition(tmpa[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen);
-
- if (wdspota->memory_allocation_failed()) {
+ if (wavcurvelev && radlevblur > 0.f && blurena && chromablu > 0.f && !blurlc) {//chroma blur if need
+ //b
+ if (!reconstruct) {
+ wdspot.reset(new wavelet_decomposition(tmpb[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen));
+ if (wdspot->memory_allocation_failed()) {
return;
}
-
- if (radlevblur > 0.f && chromablu > 0.f) {
- wavcont(lp, tmp, *wdspota, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, chromablu, 0.f, 0.f, 0.f);
- }
-
- wdspota->reconstruct(tmpa[0], 1.f);
- delete wdspota;
-
- //b
- wdspotb = new wavelet_decomposition(tmpb[0], bfw, bfh, maxlvl, 1, sk, numThreads, lp.daubLen);
-
- if (wdspotb->memory_allocation_failed()) {
- return;
- }
-
- if (radlevblur > 0.f && chromablu > 0.f) {
- wavcont(lp, tmp, *wdspotb, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, chromablu, 0.f, 0.f, 0.f);
- }
-
- wdspotb->reconstruct(tmpb[0], 1.f);
- delete wdspotb;
}
+ wavcont(lp, tmp, *wdspot, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, chromablu, 0.f, 0.f, 0.f);
+ reconstruct = true;
+ }
+ if (reconstruct) {
+ wdspot->reconstruct(tmpb[0], 1.f);
}
-
}
@@ -9527,6 +9522,8 @@ void ImProcFunctions::Lab_Local(
const LUTf& lmaskcblocalcurve, bool localmaskcbutili,
const LUTf& lmaskbllocalcurve, bool localmaskblutili,
const LUTf& lmasklclocalcurve, bool localmasklcutili,
+ const LUTf& lmasklocal_curve, bool localmask_utili,
+
const LocCCmaskCurve& locccmasCurve, bool lcmasutili, const LocLLmaskCurve& locllmasCurve, bool llmasutili, const LocHHmaskCurve& lochhmasCurve, bool lhmasutili, const LocHHmaskCurve& lochhhmasCurve, bool lhhmasutili,
const LocCCmaskCurve& locccmasexpCurve, bool lcmasexputili, const LocLLmaskCurve& locllmasexpCurve, bool llmasexputili, const LocHHmaskCurve& lochhmasexpCurve, bool lhmasexputili,
const LocCCmaskCurve& locccmasSHCurve, bool lcmasSHutili, const LocLLmaskCurve& locllmasSHCurve, bool llmasSHutili, const LocHHmaskCurve& lochhmasSHCurve, bool lhmasSHutili,
@@ -9536,6 +9533,8 @@ void ImProcFunctions::Lab_Local(
const LocCCmaskCurve& locccmastmCurve, bool lcmastmutili, const LocLLmaskCurve& locllmastmCurve, bool llmastmutili, const LocHHmaskCurve& lochhmastmCurve, bool lhmastmutili,
const LocCCmaskCurve& locccmasblCurve, bool lcmasblutili, const LocLLmaskCurve& locllmasblCurve, bool llmasblutili, const LocHHmaskCurve& lochhmasblCurve, bool lhmasblutili,
const LocCCmaskCurve& locccmaslcCurve, bool lcmaslcutili, const LocLLmaskCurve& locllmaslcCurve, bool llmaslcutili, const LocHHmaskCurve& lochhmaslcCurve, bool lhmaslcutili,
+ const LocCCmaskCurve& locccmas_Curve, bool lcmas_utili, const LocLLmaskCurve& locllmas_Curve, bool llmas_utili, const LocHHmaskCurve& lochhmas_Curve, bool lhmas_utili,
+ const LocHHmaskCurve& lochhhmas_Curve, bool lhhmas_utili,
const LocwavCurve& loclmasCurveblwav, bool lmasutiliblwav,
const LocwavCurve& loclmasCurvecolwav, bool lmasutilicolwav,
const LocwavCurve& locwavCurve, bool locwavutili,
@@ -9545,9 +9544,11 @@ void ImProcFunctions::Lab_Local(
const LocwavCurve& loccomprewavCurve, bool loccomprewavutili,
const LocwavCurve& locwavCurveden, bool locwavdenutili,
const LocwavCurve& locedgwavCurve, bool locedgwavutili,
+ const LocwavCurve& loclmasCurve_wav, bool lmasutili_wav,
+
bool LHutili, bool HHutili, const LUTf& cclocalcurve, bool localcutili, const LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc,
double& huerefblur, double& chromarefblur, double& lumarefblur, double& hueref, double& chromaref, double& lumaref, double& sobelref, int &lastsav,
- bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
+ bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int ll_Mask,
float& minCD, float& maxCD, float& mini, float& maxi, float& Tmean, float& Tsigma, float& Tmin, float& Tmax
)
{
@@ -9560,7 +9561,7 @@ void ImProcFunctions::Lab_Local(
constexpr int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1
struct local_params lp;
- calcLocalParams(sp, oW, oH, params->locallab, lp, prevDeltaE, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llsharMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili);
+ calcLocalParams(sp, oW, oH, params->locallab, lp, prevDeltaE, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llsharMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, ll_Mask, locwavCurveden, locwavdenutili);
const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip
int levred;
@@ -9838,11 +9839,11 @@ void ImProcFunctions::Lab_Local(
const int r1 = rtengine::max(4 / sk * blur + 0.5f, 1);
const int r2 = rtengine::max(25 / sk * blur + 0.5f, 1);
- constexpr float epsilmax = 0.0005f;
+ constexpr float epsilmax = 0.005f;
constexpr float epsilmin = 0.00001f;
- const float aepsil = (epsilmax - epsilmin) / 90.f;
- const float bepsil = epsilmax - 100.f * aepsil;
+ const float aepsil = (epsilmax - epsilmin) / 100.f;
+ const float bepsil = epsilmin; //epsilmax - 100.f * aepsil;
const float epsil = lp.radmabl < 0.f ? 0.001f : aepsil * lp.radmabl + bepsil;
rtengine::guidedFilter(guid, blechro, blechro, r1, epsil, multiThread);
@@ -10099,10 +10100,10 @@ void ImProcFunctions::Lab_Local(
}
if (lp.showmaskblmet == 0 || lp.showmaskblmet == 1 || lp.showmaskblmet == 2 || lp.showmaskblmet == 4 || lp.enablMask) {
- blendmask(lp, 0, 0, cx, cy, GW, GH, bufgb.get(), original, bufmaskorigbl.get(), originalmaskbl, lp.blendmabl, invers);
+ blendmask(lp, 0, 0, cx, cy, GW, GH, bufgb.get(), original, bufmaskorigbl.get(), originalmaskbl, lp.blendmabl, lp.blendmabl, invers);
} else if (lp.showmaskblmet == 3) {
showmask(lumask, lp, 0, 0, cx, cy, GW, GH, bufgb.get(), transformed, bufmaskorigbl.get(), invers);
- return;
+ return;
}
}
@@ -10767,9 +10768,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, loctemp.get(), bufmaskorigcb.get(), originalmaskcb.get(), original, reserved, inv, lp,
0.f, false,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskcblocalcurve, localmaskcbutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskcblocalcurve, localmaskcbutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.0f, 0.f, -1
);
if (lp.showmaskcbmet == 3) {
@@ -10809,7 +10810,7 @@ void ImProcFunctions::Lab_Local(
ImProcFunctions::cbdl_local_temp(bufsh, loctemp->L, bfw, bfh, lp.mulloc, 1.f, lp.threshol, lp.clarityml, lp.contresid, lp.blurcbdl, skinprot, false, b_l, t_l, t_r, b_r, choice, sk, multiThread);
if (lp.softradiuscb > 0.f) {
- softproc(origcbdl.get(), loctemp.get(), lp.softradiuscb, bfh, bfw, 0.0001, 0.00001, 0.1f, sk, multiThread, 1);
+ softproc(origcbdl.get(), loctemp.get(), lp.softradiuscb, bfh, bfw, 0.001, 0.00001, 0.5f, sk, multiThread, 1);
}
}
@@ -10983,9 +10984,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigvib.get(), originalmaskvib.get(), original, reserved, inv, lp,
0.f, false,
locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskviblocalcurve, localmaskvibutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskviblocalcurve, localmaskvibutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
);
if (lp.showmaskvibmet == 3) {
@@ -11214,9 +11215,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp,
0.f, false,
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
);
if (lp.showmasktmmet == 3) {
@@ -11255,9 +11256,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp,
0.f, false,
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
);
if (lp.showmasktmmet == 3) {//display mask
@@ -11438,9 +11439,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskorigSH.get(), originalmaskSH.get(), original, reserved, inv, lp,
0.f, false,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
);
if (lp.showmaskSHmet == 3) {
@@ -11589,9 +11590,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskSH.get(), original, reserved, inv, lp,
0.f, false,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskSHlocalcurve, localmaskSHutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
);
@@ -11860,9 +11861,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgb.get(), bufmaskoriglc.get(), originalmasklc.get(), original, reserved, inv, lp,
0.f, false,
locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklclocalcurve, localmasklcutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasklclocalcurve, localmasklcutili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1
);
if (lp.showmasklcmet == 3) {
@@ -12131,7 +12132,7 @@ void ImProcFunctions::Lab_Local(
}
if (softr != 0.f && (compreena || locwavCurve || comprena || blurena || levelena || lp.wavgradl || lp.edgwena || std::fabs(mL) > 0.001f)) {
- softproc(tmpres.get(), tmp1.get(), softr, bfh, bfw, 0.0001, 0.00001, thr, sk, multiThread, flag);
+ softproc(tmpres.get(), tmp1.get(), softr, bfh, bfw, 0.001, 0.00001, thr, sk, multiThread, flag);
}
}
}
@@ -12898,7 +12899,7 @@ void ImProcFunctions::Lab_Local(
enablefat = true;;
}
- bool execex = (lp.exposena && (lp.expcomp != 0.f || lp.blac != 0 || lp.laplacexp > 0.1f || lp.strexp != 0.f || enablefat || lp.showmaskexpmet == 2 || lp.enaExpMask || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5 || lp.prevdE || (exlocalcurve && localexutili)));
+ bool execex = (lp.exposena && (lp.expcomp != 0.f || lp.blac != 0 || lp.shadex > 0 || lp.hlcomp > 0.f || lp.laplacexp > 0.1f || lp.strexp != 0.f || enablefat || lp.showmaskexpmet == 2 || lp.enaExpMask || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5 || lp.prevdE || (exlocalcurve && localexutili)));
if (!lp.invex && execex) {
int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0);
@@ -12914,12 +12915,13 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh >= mSP) {
- if (lp.expmet == 1) {
+ if (lp.expmet == 1 || lp.expmet == 0) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy);
}
const std::unique_ptr bufexporig(new LabImage(bfw, bfh));
const std::unique_ptr bufexpfin(new LabImage(bfw, bfh));
+ const std::unique_ptr buforig(new LabImage(bfw, bfh));
std::unique_ptr bufmaskblurexp;
std::unique_ptr originalmaskexp;
@@ -12938,6 +12940,7 @@ void ImProcFunctions::Lab_Local(
for (int y = ystart; y < yend; y++) {
for (int x = xstart; x < xend; x++) {
bufexporig->L[y - ystart][x - xstart] = original->L[y][x];
+ buforig->L[y - ystart][x - xstart] = original->L[y][x];
}
}
@@ -13024,9 +13027,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, reserved, inv, lp,
0.f, false,
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, 0
);
if (lp.showmaskexpmet == 3) {
@@ -13063,15 +13066,15 @@ void ImProcFunctions::Lab_Local(
}
if (lp.expcomp == 0.f) {
- lp.expcomp = 0.011f; // to enabled
+ lp.expcomp = 0.001f; // to enabled
}
- ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexpfin.get(), bufexpfin.get(), hltonecurveloc, shtonecurveloc, tonecurveloc);
+ ImProcFunctions::exlabLocal(lp, bfh, bfw, bfhr, bfwr, bufexpfin.get(), bufexpfin.get(), hltonecurveloc, shtonecurveloc, tonecurveloc, hueref, lumaref, chromaref);
} else {
- ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexporig.get(), bufexpfin.get(), hltonecurveloc, shtonecurveloc, tonecurveloc);
+ ImProcFunctions::exlabLocal(lp, bfh, bfw, bfhr, bfwr, bufexporig.get(), bufexpfin.get(), hltonecurveloc, shtonecurveloc, tonecurveloc, hueref, lumaref, chromaref);
}
//gradient
@@ -13189,16 +13192,27 @@ void ImProcFunctions::Lab_Local(
}
}
}
+ if (lp.shadex > 0) {
+ if (lp.expcomp == 0.f) {
+ lp.expcomp = 0.001f; // to enabled
+ }
+ }
+ if (lp.hlcomp > 0.f) {
+ if (lp.expcomp == 0.f) {
+ lp.expcomp = 0.001f; // to enabled
+ }
+ }
+
//shadows with ipshadowshighlight
- if ((lp.expcomp != 0.f && lp.expcomp != 0.01f) || (exlocalcurve && localexutili)) {
+ if ((lp.expcomp != 0.f) || (exlocalcurve && localexutili)) {
if (lp.shadex > 0) {
ImProcFunctions::shadowsHighlights(bufexpfin.get(), true, 1, 0, lp.shadex, 40, sk, 0, lp.shcomp);
}
}
if (lp.expchroma != 0.f) {
- if ((lp.expcomp != 0.f && lp.expcomp != 0.01f) || (exlocalcurve && localexutili) || lp.laplacexp > 0.1f) {
+ if ((lp.expcomp != 0.f && lp.expcomp != 0.001f) || (exlocalcurve && localexutili) || lp.laplacexp > 0.1f) {
constexpr float ampli = 70.f;
const float ch = (1.f + 0.02f * lp.expchroma);
const float chprosl = ch <= 1.f ? 99.f * ch - 99.f : clipChro(ampli * ch - ampli);
@@ -13217,7 +13231,7 @@ void ImProcFunctions::Lab_Local(
}
if (lp.softradiusexp > 0.f && lp.expmet == 0) {
- softproc(bufexporig.get(), bufexpfin.get(), lp.softradiusexp, bfh, bfw, 0.0001, 0.00001, 0.1f, sk, multiThread, 1);
+ softproc(buforig.get(), bufexpfin.get(), lp.softradiusexp, bfh, bfw, 0.1, 0.001, 0.5f, sk, multiThread, 1);
}
float meansob = 0.f;
transit_shapedetect2(call, 1, bufexporig.get(), bufexpfin.get(), originalmaskexp.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk);
@@ -13233,7 +13247,7 @@ void ImProcFunctions::Lab_Local(
}
//inverse
- else if (lp.invex && (lp.expcomp != 0.0 || lp.laplacexp > 0.1f || params->locallab.spots.at(sp).fatamount > 1.f || (exlocalcurve && localexutili) || lp.enaExpMaskinv || lp.showmaskexpmetinv == 1) && lp.exposena) {
+ else if (lp.invex && (lp.expcomp != 0.0 || lp.laplacexp > 0.1f || lp.blac != 0 || lp.hlcomp > 0.f || lp.shadex > 0 || params->locallab.spots.at(sp).fatamount > 1.f || (exlocalcurve && localexutili) || lp.enaExpMaskinv || lp.showmaskexpmetinv == 1) && lp.exposena) {
constexpr float adjustr = 2.f;
std::unique_ptr bufmaskblurexp;
std::unique_ptr originalmaskexp;
@@ -13288,9 +13302,9 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, reserved, inv, lp,
0.f, false,
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmaskexplocalcurve, localmaskexputili, dummy, lmasutilicolwav, 1, 1, 5, 5,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, 0
);
if (lp.showmaskexpmetinv == 1) {
@@ -13298,6 +13312,19 @@ void ImProcFunctions::Lab_Local(
return;
}
+ if (lp.shadex > 0) {
+ if (lp.expcomp == 0.f) {
+ lp.expcomp = 0.001f; // to enabled
+ }
+ }
+
+
+ if (lp.hlcomp > 0.f) {
+ if (lp.expcomp == 0.f) {
+ lp.expcomp = 0.001f; // to enabled
+ }
+ }
+
InverseColorLight_Local(false, false, sp, 1, lp, originalmaskexp.get(), lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk);
if (params->locallab.spots.at(sp).recurs) {
@@ -13475,10 +13502,10 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, reserved, inv, lp,
strumask, astool,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav,
level_bl, level_hl, level_br, level_hr,
shortcu, delt, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask, -1
);
if (lp.showmaskcolmet == 3) {
@@ -14264,7 +14291,7 @@ void ImProcFunctions::Lab_Local(
}
if (lp.softradiuscol > 0.f) {
- softproc(bufcolreserv.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.0001, 0.00001, 0.1f, sk, multiThread, 1);
+ softproc(bufcolreserv.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.001, 0.00001, 0.5f, sk, multiThread, 1);
}
float meansob = 0.f;
transit_shapedetect2(call, 0, bufcolreserv.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk);
@@ -14337,7 +14364,7 @@ void ImProcFunctions::Lab_Local(
if (lp.softradiuscol > 0.f) {
- softproc(bufcolorig.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.0001, 0.00001, 0.1f, sk, multiThread, 1);
+ softproc(bufcolorig.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.001, 0.00001, 0.5f, sk, multiThread, 1);
}
float meansob = 0.f;
transit_shapedetect2(call, 0, bufcolorig.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk);
@@ -14429,10 +14456,10 @@ void ImProcFunctions::Lab_Local(
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, reserved, inv, lp,
strumask, params->locallab.spots.at(sp).toolcol,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, multiThread,
- enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, amountcd, anchorcd, lmasklocalcurve, localmaskutili, loclmasCurvecolwav, lmasutilicolwav,
level_bl, level_hl, level_br, level_hr,
shortcu, false, hueref, chromaref, lumaref,
- maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftColorMask, lp.blurcolmask, lp.contcolmask, -1
);
if (lp.showmaskcolmetinv == 1) {
@@ -14450,6 +14477,178 @@ void ImProcFunctions::Lab_Local(
}
}
}
+
+//begin common mask
+ if(lp.maskena) {
+ int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0);
+ int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H);
+ int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0);
+ int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W);
+ int bfh = yend - ystart;
+ int bfw = xend - xstart;
+ if (bfw >= mSP && bfh >= mSP) {
+
+ if (lp.blurma >= 0.25f && lp.fftma && call == 2) {
+ optfft(N_fftwsize, bfh, bfw, bfh, bfw, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy);
+ }
+ array2D blechro(bfw, bfh);
+ array2D ble(bfw, bfh);
+ array2D hue(bfw, bfh);
+ array2D guid(bfw, bfh);
+
+ std::unique_ptr bufcolorigsav;
+ std::unique_ptr bufcolorig;
+ std::unique_ptr bufcolfin;
+ std::unique_ptr bufmaskblurcol;
+ std::unique_ptr originalmaskcol;
+ std::unique_ptr bufcolreserv;
+
+ int wo = original->W;
+ int ho = original->H;
+ LabImage *origsav = nullptr;
+ origsav = new LabImage(wo, ho);
+ origsav->CopyFrom(original);
+
+ if (call <= 3) {
+ bufcolorig.reset(new LabImage(bfw, bfh));
+ bufcolfin.reset(new LabImage(bfw, bfh));
+ bufcolorigsav.reset(new LabImage(bfw, bfh));
+
+ if (lp.showmask_met == 1 || lp.ena_Mask || lp.showmask_met == 2 || lp.showmask_met == 3) {
+ bufmaskblurcol.reset(new LabImage(bfw, bfh, true));
+ originalmaskcol.reset(new LabImage(bfw, bfh));
+ }
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int y = 0; y < bfh ; y++) {
+ for (int x = 0; x < bfw; x++) {
+ bufcolorig->L[y][x] = original->L[y + ystart][x + xstart];
+ bufcolorig->a[y][x] = original->a[y + ystart][x + xstart];
+ bufcolorig->b[y][x] = original->b[y + ystart][x + xstart];
+
+ bufcolorigsav->L[y][x] = original->L[y + ystart][x + xstart];
+ bufcolorigsav->a[y][x] = original->a[y + ystart][x + xstart];
+ bufcolorigsav->b[y][x] = original->b[y + ystart][x + xstart];
+
+ bufcolfin->L[y][x] = original->L[y + ystart][x + xstart];
+ bufcolfin->a[y][x] = original->a[y + ystart][x + xstart];
+ bufcolfin->b[y][x] = original->b[y + ystart][x + xstart];
+ }
+ }
+ const int inv = 0;
+ const bool showmaske = lp.showmask_met == 2;
+ const bool enaMask = lp.ena_Mask;
+ const bool deltaE = lp.showmask_met == 3;
+ const bool modmask = lp.showmask_met == 1;
+ const bool zero = lp.showmask_met == 0;
+ const bool modif = lp.showmask_met == 1;
+ const float chrom = params->locallab.spots.at(sp).chromask;
+ const float rad = params->locallab.spots.at(sp).radmask;
+ const float gamma = params->locallab.spots.at(sp).gammask;
+ const float slope = params->locallab.spots.at(sp).slopmask;
+ float blendm = params->locallab.spots.at(sp).blendmask;
+ float blendmab = params->locallab.spots.at(sp).blendmaskab;
+ if (lp.showmask_met == 2) {
+ blendm = 0.f;//normalize behavior mask with others no action of blend
+ blendmab = 0.f;
+ }
+ const float lap = params->locallab.spots.at(sp).lapmask;
+ const bool pde = params->locallab.spots.at(sp).laplac;
+ const int shado = params->locallab.spots.at(sp).shadmask;
+ const int sco = params->locallab.spots.at(sp).scopemask;
+ const int level_bl = params->locallab.spots.at(sp).csthresholdmask.getBottomLeft();
+ const int level_hl = params->locallab.spots.at(sp).csthresholdmask.getTopLeft();
+ const int level_br = params->locallab.spots.at(sp).csthresholdmask.getBottomRight();
+ const int level_hr = params->locallab.spots.at(sp).csthresholdmask.getTopRight();
+ const int shortcu = lp.mergemet; //params->locallab.spots.at(sp).shortc;
+ const int lumask = params->locallab.spots.at(sp).lumask;
+ const float strumask = 0.02f * params->locallab.spots.at(sp).strumaskmask;
+ const float softr = params->locallab.spots.at(sp).softradiusmask;
+
+ const float mindE = 2.f + MINSCOPE * sco * lp.thr;
+ const float maxdE = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr);
+ const float mindElim = 2.f + MINSCOPE * limscope * lp.thr;
+ const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr);
+ const float amountcd = 0.f;
+ const float anchorcd = 50.f;
+
+ maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, reserved, inv, lp,
+ strumask, astool,
+ locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili, lochhhmas_Curve, lhhmas_utili, multiThread,
+ enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendmab, shado, amountcd, anchorcd, lmasklocal_curve, localmask_utili, loclmasCurve_wav, lmasutili_wav,
+ level_bl, level_hl, level_br, level_hr,
+ shortcu, delt, hueref, chromaref, lumaref,
+ maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, lp.fftma, lp.blurma, lp.contma, 12
+ );
+
+
+ if (lp.showmask_met == 2) {
+ showmask(lumask, lp, xstart, ystart, cx, cy, bfw, bfh, bufcolorig.get(), transformed, bufmaskblurcol.get(), 0);
+ return;
+ }
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int y = 0; y < bfh ; y++) {
+ for (int x = 0; x < bfw; x++) {
+ bufcolfin->L[y][x] = bufcolorig->L[y][x];
+ bufcolfin->a[y][x] = bufcolorig->a[y][x];
+ bufcolfin->b[y][x] = bufcolorig->b[y][x];
+ hue[y][x] = xatan2f(bufcolfin->b[y][x], bufcolfin->a[y][x]);
+ const float chromah = std::sqrt(SQR(bufcolfin->b[y][x]) + SQR(bufcolfin->a[y][x]));
+ ble[y][x] = bufcolfin->L[y][x] / 32768.f;
+ blechro[y][x] = chromah / 32768.f;
+ guid[y][x] = bufcolorigsav->L[y][x] / 32768.f;
+ }
+ }
+ if (softr != 0.f) {//soft for L a b because we change color...
+ float rad = softr;
+ const float tmpblur = rad < 0.f ? -1.f / rad : 1.f + rad;
+ const int r1 = rtengine::max(4 / sk * tmpblur + 0.5, 1);
+ const int r2 = rtengine::max(25 / sk * tmpblur + 0.5, 1);
+
+ constexpr float epsilmax = 0.005f;
+ constexpr float epsilmin = 0.00001f;
+
+ constexpr float aepsil = (epsilmax - epsilmin) / 100.f;
+ constexpr float bepsil = epsilmin;
+ const float epsil = rad < 0.f ? 0.001f : aepsil * rad + bepsil;
+
+ rtengine::guidedFilter(guid, blechro, blechro, r1, epsil, multiThread);
+ rtengine::guidedFilter(guid, ble, ble, r2, 0.2f * epsil, multiThread);
+
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int y = 0; y < bfh; y++) {
+ for (int x = 0; x < bfw; x++) {
+ float2 sincosval = xsincosf(hue[y][x]);
+ bufcolfin->L[y][x] = 32768.f * ble[y][x];
+ bufcolfin->a[y][x] = 32768.f * blechro[y][x] * sincosval.y;
+ bufcolfin->b[y][x] = 32768.f * blechro[y][x] * sincosval.x;
+ }
+ }
+ }
+
+
+
+ float meansob = 0.f;
+ transit_shapedetect2(call, 20, bufcolorigsav.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, nullptr, lp, origsav, transformed, cx, cy, sk);
+ delete origsav;
+ origsav = NULL;
+
+ if (params->locallab.spots.at(sp).recurs) {
+ original->CopyFrom(transformed, multiThread);
+ float avge;
+ calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili);
+ }
+
+ }
+ }
+ }
+
+//end common mask
// Gamut and Munsell control - very important do not deactivated to avoid crash
if (params->locallab.spots.at(sp).avoid) {
diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc
index 02d04c270..ec812c270 100644
--- a/rtengine/ipretinex.cc
+++ b/rtengine/ipretinex.cc
@@ -920,12 +920,12 @@ void ImProcFunctions::maskforretinex(int sp, int before, float ** luminance, flo
int r1 = max(int(4 / skip * blur + 0.5), 1);
int r2 = max(int(25 / skip * blur + 0.5), 1);
- double epsilmax = 0.0005;
+ double epsilmax = 0.005;
double epsilmin = 0.00001;
- double aepsil = (epsilmax - epsilmin) / 90.f;
- double bepsil = epsilmax - 100.f * aepsil;
- double epsil = aepsil * 0.1 * rad + bepsil;
+ double aepsil = (epsilmax - epsilmin) / 100.f;
+ double bepsil = epsilmin; //epsilmax - 100.f * aepsil;
+ double epsil = aepsil * rad + bepsil;
if (rad < 0.f) {
epsil = 0.001;
}
diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc
index 47153c93c..8a1142c17 100644
--- a/rtengine/iptransform.cc
+++ b/rtengine/iptransform.cc
@@ -516,7 +516,7 @@ bool ImProcFunctions::transCoord (int W, int H, const std::vector &src,
}
if (pLCPMap && params->lensProf.useDist) {
- pLCPMap->correctDistortion(x_d, y_d, 0, 0);
+ pLCPMap->correctDistortion(x_d, y_d, w2, h2);
}
// rotate
@@ -695,7 +695,7 @@ void ImProcFunctions::transform (Imagefloat* original, Imagefloat* transformed,
// steps, using an intermediate temporary image. There's room for
// optimization of course...
if (pLCPMap && params->lensProf.useCA && pLCPMap->isCACorrectionAvailable()) {
- tmpimg.reset(new Imagefloat(original->getWidth(), original->getHeight()));
+ tmpimg.reset(new Imagefloat(transformed->getWidth(), transformed->getHeight()));
dest = tmpimg.get();
}
}
diff --git a/rtengine/labimage.cc b/rtengine/labimage.cc
index 319103d64..68d3857e5 100644
--- a/rtengine/labimage.cc
+++ b/rtengine/labimage.cc
@@ -32,12 +32,18 @@ LabImage::LabImage (int w, int h, bool initZero, bool multiThread) : W(w), H(h)
}
}
+LabImage::LabImage (const LabImage& source, bool multiThread) : W(source.W), H(source.H)
+{
+ allocLab(W, H);
+ CopyFrom(&source, multiThread);
+}
+
LabImage::~LabImage ()
{
deleteLab();
}
-void LabImage::CopyFrom(LabImage *Img, bool multiThread)
+void LabImage::CopyFrom(const LabImage *Img, bool multiThread)
{
#ifdef _OPENMP
#pragma omp parallel sections if(multiThread)
@@ -54,7 +60,7 @@ void LabImage::CopyFrom(LabImage *Img, bool multiThread)
#endif
}
-void LabImage::getPipetteData (float &v1, float &v2, float &v3, int posX, int posY, int squareSize)
+void LabImage::getPipetteData (float &v1, float &v2, float &v3, int posX, int posY, int squareSize) const
{
float accumulator_L = 0.f;
float accumulator_a = 0.f;
diff --git a/rtengine/labimage.h b/rtengine/labimage.h
index b4b974c29..4d1c05aed 100644
--- a/rtengine/labimage.h
+++ b/rtengine/labimage.h
@@ -36,11 +36,12 @@ public:
float** b;
LabImage (int w, int h, bool initZero = false, bool multiThread = true);
+ LabImage (const LabImage& source, bool multiThread);
~LabImage ();
//Copies image data in Img into this instance.
- void CopyFrom(LabImage *Img, bool multiThread = true);
- void getPipetteData (float &L, float &a, float &b, int posX, int posY, int squareSize);
+ void CopyFrom(const LabImage *Img, bool multiThread = true);
+ void getPipetteData (float &L, float &a, float &b, int posX, int posY, int squareSize) const;
void deleteLab();
void reallocLab();
void clear(bool multiThread = false);
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index e3243938f..efe793696 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -950,6 +950,34 @@ enum ProcEventCode {
EvLocallabSpotcolorscope = 924,
EvlocallabshowmasktypMethod = 925,
Evlocallabshadmaskblsha = 926,
+ EvLocena_mask = 927,
+ Evlocallabsensimask = 928,
+ Evlocallabblendmask = 929,
+ EvLocallabEnaMask = 930,
+ Evlocallabradmask = 931,
+ Evlocallablapmask = 932,
+ Evlocallabchromask = 933,
+ Evlocallabgammask = 934,
+ Evlocallabslopmask = 935,
+ EvlocallabCCmask_shape = 936,
+ EvlocallabLLmask_shape = 937,
+ EvlocallabHHmask_shape = 938,
+ EvLocallabtoolmask = 939,
+ Evlocallabstrumaskmask = 940,
+ EvlocallabHHhmask_shape = 941,
+ EvLocallabfftmask = 942,
+ Evlocallabblurmask = 943,
+ Evlocallabcontmask = 944,
+ Evlocallabshadmask = 945,
+ EvlocallabLmask_shape = 946,
+ EvlocallabLLmask_shapewav = 947,
+ EvlocallabcsThresholdmask = 948,
+ Evlocallabstr_mask = 949,
+ Evlocallabang_mask = 950,
+ Evlocallabsoftradiusmask = 951,
+ Evlocallabblendmaskab = 952,
+ EvLocallabSpotprevMethod = 953,
+ Evlocallabactiv = 954,
NUMOFEVENTS
};
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index 623d8c988..b7396b165 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -2615,6 +2615,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
// Control spot settings
name(""),
isvisible(true),
+ prevMethod("hide"),
shape("ELI"),
spotMethod("norm"),
wavMethod("D4"),
@@ -2638,6 +2639,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
colorscope(30.0),
transitweak(1.0),
transitgrad(0.0),
+ activ(true),
avoid(false),
blwh(false),
recurs(false),
@@ -2869,7 +2871,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
expexpose(false),
complexexpose(0),
expcomp(0.0),
- hlcompr(0),
+ hlcompr(20),
hlcomprthresh(0),
black(0),
shadex(0),
@@ -2964,7 +2966,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
visishadhigh(false),
expshadhigh(false),
complexshadhigh(0),
- shMethod("std"),
+ shMethod("tone"),
multsh{0, 0, 0, 0, 0},
highlights(0),
h_tonalwidth(70),
@@ -3732,7 +3734,109 @@ LocallabParams::LocallabSpot::LocallabSpot() :
sensilog(60),
baselog(2.),
strlog(0.0),
- anglog(0.0)
+ anglog(0.0),
+ // mask
+ visimask(false),
+ complexmask(0),
+ expmask(false),
+ sensimask(60),
+ blendmask(-10.),
+ blendmaskab(-10.),
+ softradiusmask(1.0),
+ enamask(false),
+ fftmask(true),
+ blurmask(0.2),
+ contmask(0.),
+ CCmask_curve{
+ static_cast(FCT_MinMaxCPoints),
+ 0.0,
+ 1.0,
+ 0.35,
+ 0.35,
+ 0.50,
+ 1.0,
+ 0.35,
+ 0.35,
+ 1.00,
+ 1.0,
+ 0.35,
+ 0.35
+ },
+ LLmask_curve{
+ static_cast(FCT_MinMaxCPoints),
+ 0.0,
+ 1.0,
+ 0.35,
+ 0.35,
+ 0.50,
+ 1.0,
+ 0.35,
+ 0.35,
+ 1.00,
+ 1.0,
+ 0.35,
+ 0.35
+ },
+ HHmask_curve{
+ static_cast(FCT_MinMaxCPoints),
+ 0.0,
+ 1.0,
+ 0.35,
+ 0.35,
+ 0.50,
+ 1.0,
+ 0.35,
+ 0.35,
+ 1.00,
+ 1.0,
+ 0.35,
+ 0.35
+ },
+ strumaskmask(0.),
+ toolmask(true),
+ radmask(0.0),
+ lapmask(0.0),
+ chromask(0.0),
+ gammask(1.0),
+ slopmask(0.0),
+ shadmask(0.0),
+ str_mask(0),
+ ang_mask(0),
+ HHhmask_curve{
+ static_cast(FCT_MinMaxCPoints),
+ 0.0,
+ 0.5,
+ 0.35,
+ 0.35,
+ 0.50,
+ 0.5,
+ 0.35,
+ 0.35,
+ 1.00,
+ 0.5,
+ 0.35,
+ 0.35
+ },
+ Lmask_curve{
+ static_cast(DCT_NURBS),
+ 0.0,
+ 0.0,
+ 1.0,
+ 1.0
+ },
+ LLmask_curvewav{
+ static_cast(FCT_MinMaxCPoints),
+ 0.0,
+ 0.5,
+ 0.35,
+ 0.35,
+ 1.,
+ 0.5,
+ 0.35,
+ 0.35
+ },
+ csthresholdmask(0, 0, 6, 5, false)
+
{
}
@@ -3742,6 +3846,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
// Control spot settings
name == other.name
&& isvisible == other.isvisible
+ && prevMethod == other.prevMethod
&& shape == other.shape
&& spotMethod == other.spotMethod
&& wavMethod == other.wavMethod
@@ -3765,6 +3870,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& colorscope == other.colorscope
&& transitweak == other.transitweak
&& transitgrad == other.transitgrad
+ && activ == other.activ
&& avoid == other.avoid
&& blwh == other.blwh
&& recurs == other.recurs
@@ -4202,7 +4308,37 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& sensilog == other.sensilog
&& baselog == other.baselog
&& strlog == other.strlog
- && anglog == other.anglog;
+ && anglog == other.anglog
+ // mask
+ && visimask == other.visimask
+ && complexmask == other.complexmask
+ && expmask == other.expmask
+ && sensimask == other.sensimask
+ && blendmask == other.blendmask
+ && blendmaskab == other.blendmaskab
+ && softradiusmask == other.softradiusmask
+ && enamask == other.enamask
+ && fftmask == other.fftmask
+ && blurmask == other.blurmask
+ && contmask == other.contmask
+ && CCmask_curve == other.CCmask_curve
+ && LLmask_curve == other.LLmask_curve
+ && HHmask_curve == other.HHmask_curve
+ && strumaskmask == other.strumaskmask
+ && toolmask == other.toolmask
+ && radmask == other.radmask
+ && lapmask == other.lapmask
+ && chromask == other.chromask
+ && gammask == other.gammask
+ && slopmask == other.slopmask
+ && shadmask == other.shadmask
+ && str_mask == other.str_mask
+ && ang_mask == other.ang_mask
+ && HHhmask_curve == other.HHhmask_curve
+ && Lmask_curve == other.Lmask_curve
+ && LLmask_curvewav == other.LLmask_curvewav
+ && csthresholdmask == other.csthresholdmask;
+
}
bool LocallabParams::LocallabSpot::operator !=(const LocallabSpot& other) const
@@ -5235,6 +5371,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
// Control spot settings
saveToKeyfile(!pedited || spot_edited->name, "Locallab", "Name_" + index_str, spot.name, keyFile);
saveToKeyfile(!pedited || spot_edited->isvisible, "Locallab", "Isvisible_" + index_str, spot.isvisible, keyFile);
+ saveToKeyfile(!pedited || spot_edited->prevMethod, "Locallab", "PrevMethod_" + index_str, spot.prevMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->shape, "Locallab", "Shape_" + index_str, spot.shape, keyFile);
saveToKeyfile(!pedited || spot_edited->spotMethod, "Locallab", "SpotMethod_" + index_str, spot.spotMethod, keyFile);
saveToKeyfile(!pedited || spot_edited->wavMethod, "Locallab", "WavMethod_" + index_str, spot.wavMethod, keyFile);
@@ -5258,6 +5395,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->colorscope, "Locallab", "Colorscope_" + index_str, spot.colorscope, keyFile);
saveToKeyfile(!pedited || spot_edited->transitweak, "Locallab", "Transitweak_" + index_str, spot.transitweak, keyFile);
saveToKeyfile(!pedited || spot_edited->transitgrad, "Locallab", "Transitgrad_" + index_str, spot.transitgrad, keyFile);
+ saveToKeyfile(!pedited || spot_edited->activ, "Locallab", "Activ_" + index_str, spot.activ, keyFile);
saveToKeyfile(!pedited || spot_edited->avoid, "Locallab", "Avoid_" + index_str, spot.avoid, keyFile);
saveToKeyfile(!pedited || spot_edited->blwh, "Locallab", "Blwh_" + index_str, spot.blwh, keyFile);
saveToKeyfile(!pedited || spot_edited->recurs, "Locallab", "Recurs_" + index_str, spot.recurs, keyFile);
@@ -5699,6 +5837,36 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->strlog, "Locallab", "Strlog_" + index_str, spot.strlog, keyFile);
saveToKeyfile(!pedited || spot_edited->anglog, "Locallab", "Anglog_" + index_str, spot.anglog, keyFile);
}
+ //mask
+ if ((!pedited || spot_edited->visimask) && spot.visimask) {
+ saveToKeyfile(!pedited || spot_edited->expmask, "Locallab", "Expmask_" + index_str, spot.expmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->complexmask, "Locallab", "Complexmask_" + index_str, spot.complexmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->sensimask, "Locallab", "Sensimask_" + index_str, spot.sensimask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->blendmask, "Locallab", "Blendmaskmask_" + index_str, spot.blendmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->blendmaskab, "Locallab", "Blendmaskmaskab_" + index_str, spot.blendmaskab, keyFile);
+ saveToKeyfile(!pedited || spot_edited->softradiusmask, "Locallab", "Softradiusmask_" + index_str, spot.softradiusmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->enamask, "Locallab", "Enamask_" + index_str, spot.enamask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->fftmask, "Locallab", "Fftmask_" + index_str, spot.fftmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->blurmask, "Locallab", "Blurmask_" + index_str, spot.blurmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->contmask, "Locallab", "Contmask_" + index_str, spot.contmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->CCmask_curve, "Locallab", "CCmask_Curve_" + index_str, spot.CCmask_curve, keyFile);
+ saveToKeyfile(!pedited || spot_edited->LLmask_curve, "Locallab", "LLmask_Curve_" + index_str, spot.LLmask_curve, keyFile);
+ saveToKeyfile(!pedited || spot_edited->HHmask_curve, "Locallab", "HHmask_Curve_" + index_str, spot.HHmask_curve, keyFile);
+ saveToKeyfile(!pedited || spot_edited->strumaskmask, "Locallab", "Strumaskmask_" + index_str, spot.strumaskmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->toolmask, "Locallab", "Toolmask_" + index_str, spot.toolmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->radmask, "Locallab", "Radmask_" + index_str, spot.radmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->lapmask, "Locallab", "Lapmask_" + index_str, spot.lapmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->chromask, "Locallab", "Chromask_" + index_str, spot.chromask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->gammask, "Locallab", "Gammask_" + index_str, spot.gammask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->slopmask, "Locallab", "Slopmask_" + index_str, spot.slopmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->shadmask, "Locallab", "Shadmask_" + index_str, spot.shadmask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->str_mask, "Locallab", "Str_mask_" + index_str, spot.str_mask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->ang_mask, "Locallab", "Ang_mask_" + index_str, spot.ang_mask, keyFile);
+ saveToKeyfile(!pedited || spot_edited->HHhmask_curve, "Locallab", "HHhmask_Curve_" + index_str, spot.HHhmask_curve, keyFile);
+ saveToKeyfile(!pedited || spot_edited->Lmask_curve, "Locallab", "Lmask_Curve_" + index_str, spot.Lmask_curve, keyFile);
+ saveToKeyfile(!pedited || spot_edited->LLmask_curvewav, "Locallab", "LLmask_Curvewav_" + index_str, spot.LLmask_curvewav, keyFile);
+ saveToKeyfile(!pedited || spot_edited->csthresholdmask, "Locallab", "CSThresholdmask_" + index_str, spot.csthresholdmask.toVector(), keyFile);
+ }
}
}
@@ -6870,6 +7038,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
// Control spot settings
assignFromKeyfile(keyFile, "Locallab", "Isvisible_" + index_str, pedited, spot.isvisible, spotEdited.isvisible);
+ assignFromKeyfile(keyFile, "Locallab", "PrevMethod_" + index_str, pedited, spot.prevMethod, spotEdited.prevMethod);
assignFromKeyfile(keyFile, "Locallab", "Shape_" + index_str, pedited, spot.shape, spotEdited.shape);
assignFromKeyfile(keyFile, "Locallab", "SpotMethod_" + index_str, pedited, spot.spotMethod, spotEdited.spotMethod);
assignFromKeyfile(keyFile, "Locallab", "wavMethod_" + index_str, pedited, spot.wavMethod, spotEdited.wavMethod);
@@ -6893,6 +7062,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Colorscope_" + index_str, pedited, spot.colorscope, spotEdited.colorscope);
assignFromKeyfile(keyFile, "Locallab", "Transitweak_" + index_str, pedited, spot.transitweak, spotEdited.transitweak);
assignFromKeyfile(keyFile, "Locallab", "Transitgrad_" + index_str, pedited, spot.transitgrad, spotEdited.transitgrad);
+ assignFromKeyfile(keyFile, "Locallab", "Activ_" + index_str, pedited, spot.activ, spotEdited.activ);
assignFromKeyfile(keyFile, "Locallab", "Avoid_" + index_str, pedited, spot.avoid, spotEdited.avoid);
assignFromKeyfile(keyFile, "Locallab", "Blwh_" + index_str, pedited, spot.blwh, spotEdited.blwh);
assignFromKeyfile(keyFile, "Locallab", "Recurs_" + index_str, pedited, spot.recurs, spotEdited.recurs);
@@ -7412,6 +7582,47 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Baselog_" + index_str, pedited, spot.baselog, spotEdited.baselog);
assignFromKeyfile(keyFile, "Locallab", "Strlog_" + index_str, pedited, spot.strlog, spotEdited.strlog);
assignFromKeyfile(keyFile, "Locallab", "Anglog_" + index_str, pedited, spot.anglog, spotEdited.anglog);
+ // mask
+ spot.visimask = assignFromKeyfile(keyFile, "Locallab", "Expmask_" + index_str, pedited, spot.expmask, spotEdited.expmask);
+ assignFromKeyfile(keyFile, "Locallab", "Complexmask_" + index_str, pedited, spot.complexmask, spotEdited.complexmask);
+ assignFromKeyfile(keyFile, "Locallab", "Sensimask_" + index_str, pedited, spot.sensimask, spotEdited.sensimask);
+ assignFromKeyfile(keyFile, "Locallab", "Blendmaskmask_" + index_str, pedited, spot.blendmask, spotEdited.blendmask);
+ assignFromKeyfile(keyFile, "Locallab", "Blendmaskmaskab_" + index_str, pedited, spot.blendmaskab, spotEdited.blendmaskab);
+ assignFromKeyfile(keyFile, "Locallab", "Softradiusmask_" + index_str, pedited, spot.softradiusmask, spotEdited.softradiusmask);
+ assignFromKeyfile(keyFile, "Locallab", "Enamask_" + index_str, pedited, spot.enamask, spotEdited.enamask);
+ assignFromKeyfile(keyFile, "Locallab", "Fftmask_" + index_str, pedited, spot.fftmask, spotEdited.fftmask);
+ assignFromKeyfile(keyFile, "Locallab", "Blurmask_" + index_str, pedited, spot.blurmask, spotEdited.blurmask);
+ assignFromKeyfile(keyFile, "Locallab", "Contmask_" + index_str, pedited, spot.contmask, spotEdited.contmask);
+ assignFromKeyfile(keyFile, "Locallab", "CCmask_Curve_" + index_str, pedited, spot.CCmask_curve, spotEdited.CCmask_curve);
+ assignFromKeyfile(keyFile, "Locallab", "LLmask_Curve_" + index_str, pedited, spot.LLmask_curve, spotEdited.LLmask_curve);
+ assignFromKeyfile(keyFile, "Locallab", "HHmask_Curve_" + index_str, pedited, spot.HHmask_curve, spotEdited.HHmask_curve);
+ assignFromKeyfile(keyFile, "Locallab", "Strumaskmask_" + index_str, pedited, spot.strumaskmask, spotEdited.strumaskmask);
+ assignFromKeyfile(keyFile, "Locallab", "Toolmask_" + index_str, pedited, spot.toolmask, spotEdited.toolmask);
+ assignFromKeyfile(keyFile, "Locallab", "Radmask_" + index_str, pedited, spot.radmask, spotEdited.radmask);
+ assignFromKeyfile(keyFile, "Locallab", "Lapmask_" + index_str, pedited, spot.lapmask, spotEdited.lapmask);
+ assignFromKeyfile(keyFile, "Locallab", "Chromask_" + index_str, pedited, spot.chromask, spotEdited.chromask);
+ assignFromKeyfile(keyFile, "Locallab", "Gammask_" + index_str, pedited, spot.gammask, spotEdited.gammask);
+ assignFromKeyfile(keyFile, "Locallab", "Slopmask_" + index_str, pedited, spot.slopmask, spotEdited.slopmask);
+ assignFromKeyfile(keyFile, "Locallab", "Shadmask_" + index_str, pedited, spot.shadmask, spotEdited.shadmask);
+ assignFromKeyfile(keyFile, "Locallab", "Str_mask_" + index_str, pedited, spot.str_mask, spotEdited.str_mask);
+ assignFromKeyfile(keyFile, "Locallab", "Ang_mask_" + index_str, pedited, spot.ang_mask, spotEdited.ang_mask);
+ assignFromKeyfile(keyFile, "Locallab", "HHhmask_Curve_" + index_str, pedited, spot.HHhmask_curve, spotEdited.HHhmask_curve);
+ assignFromKeyfile(keyFile, "Locallab", "Lmask_Curve_" + index_str, pedited, spot.Lmask_curve, spotEdited.Lmask_curve);
+ assignFromKeyfile(keyFile, "Locallab", "LLmask_Curvewav_" + index_str, pedited, spot.LLmask_curvewav, spotEdited.LLmask_curvewav);
+
+ if (keyFile.has_key("Locallab", "CSThresholdmask_" + index_str)) {
+ const std::vector thresh = keyFile.get_integer_list("Locallab", "CSThresholdmask_" + index_str);
+
+ if (thresh.size() >= 4) {
+ spot.csthresholdmask.setValues(thresh[0], thresh[1], min(thresh[2], 10), min(thresh[3], 10));
+ }
+
+ spotEdited.csthresholdmask = true;
+ }
+
+ if (spot.visimask) {
+ spotEdited.visimask = true;
+ }
// Append LocallabSpot and LocallabParamsEdited
locallab.spots.push_back(spot);
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 85be112e0..42873e8e8 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -976,6 +976,7 @@ struct LocallabParams {
// Control spot settings
Glib::ustring name;
bool isvisible;
+ Glib::ustring prevMethod; // show, hide
Glib::ustring shape; // ELI, RECT
Glib::ustring spotMethod; // norm, exc
Glib::ustring wavMethod; // D2, D4, D6, D10, D14
@@ -999,6 +1000,7 @@ struct LocallabParams {
double colorscope;
double transitweak;
double transitgrad;
+ bool activ;
bool avoid;
bool blwh;
bool recurs;
@@ -1421,6 +1423,35 @@ struct LocallabParams {
double baselog;
double strlog;
double anglog;
+ // mask
+ bool visimask;
+ int complexmask;
+ bool expmask;
+ int sensimask;
+ double blendmask;
+ double blendmaskab;
+ double softradiusmask;
+ bool enamask;
+ bool fftmask;
+ double blurmask;
+ double contmask;
+ std::vector CCmask_curve;
+ std::vector LLmask_curve;
+ std::vector HHmask_curve;
+ double strumaskmask;
+ bool toolmask;
+ double radmask;
+ double lapmask;
+ double chromask;
+ double gammask;
+ double slopmask;
+ double shadmask;
+ int str_mask;
+ int ang_mask;
+ std::vector HHhmask_curve;
+ std::vector Lmask_curve;
+ std::vector LLmask_curvewav;
+ Threshold csthresholdmask;
LocallabSpot();
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 773ec8b68..b7e70fda3 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -951,9 +951,37 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // Evlocallabblwh
LUMINANCECURVE, // EvlocallabcomplexityWithRefresh
M_VOID, // EvlocallabcomplexityWithoutRefresh
- LUMINANCECURVE, // EvLocallabSpotcolorscope
- LUMINANCECURVE, //EvlocallabshowmasktypMethod
- LUMINANCECURVE // Evlocallabshadmaskblsha
+ LUMINANCECURVE, // EvLocallabSpotcolorscope
+ LUMINANCECURVE, // EvlocallabshowmasktypMethod
+ LUMINANCECURVE, // Evlocallabshadmaskblsha
+ LUMINANCECURVE, // EvLocenamask
+ LUMINANCECURVE, // Evlocallabsensimask
+ LUMINANCECURVE, // Evlocallabblendmask
+ LUMINANCECURVE, // EvLocallabEna_Mask
+ LUMINANCECURVE, // Evlocallabradmask
+ LUMINANCECURVE, // Evlocallablapmask
+ LUMINANCECURVE, // Evlocallabchromask
+ LUMINANCECURVE, // Evlocallabgammask
+ LUMINANCECURVE, // Evlocallabslopmask
+ LUMINANCECURVE, // EvlocallabCCmask_shape
+ LUMINANCECURVE, // EvlocallabLLmask_shape
+ LUMINANCECURVE, // EvlocallabHHmask_shape
+ LUMINANCECURVE, // EvLocallabtoolmask
+ LUMINANCECURVE, // Evlocallabstrumaskmask
+ LUMINANCECURVE, // EvlocallabHHhmask_shape
+ LUMINANCECURVE, // EvLocallabfftmask
+ LUMINANCECURVE, // Evlocallabblurmask
+ LUMINANCECURVE, // Evlocallabcontmask
+ LUMINANCECURVE, // Evlocallabshadmask
+ LUMINANCECURVE, // EvlocallabLmask_shape
+ LUMINANCECURVE, // EvlocallabLLmask_shapewav
+ LUMINANCECURVE, // EvlocallabcsThresholdmask
+ LUMINANCECURVE, // Evlocallabstr_mask
+ LUMINANCECURVE, // Evlocallabang_mask
+ LUMINANCECURVE, // Evlocallabsoftradiusmask
+ LUMINANCECURVE, // Evlocallabblendmaskab
+ LUMINANCECURVE, // EvLocallabSpotprevMethod
+ LUMINANCECURVE // Evlocallabactiv
};
diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h
index 7561d68aa..1671ae1f5 100644
--- a/rtengine/rtengine.h
+++ b/rtengine/rtengine.h
@@ -549,7 +549,7 @@ public:
virtual void updateUnLock() = 0;
- virtual void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask) = 0;
+ virtual void setLocallabMaskVisibility(bool previewDeltaE, int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int locallsoftMask, int locallblMask, int localltmMask, int locallretiMask, int locallsharMask, int localllcMask, int locallcbMask, int locall_Mask) = 0;
/** Creates and returns a Crop instance that acts as a window on the image
* @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index 3c0e0aee8..8eae9daba 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -971,8 +971,6 @@ private:
}
labView = new LabImage(fw, fh);
- reservView = new LabImage(fw, fh);
- lastorigView = new LabImage(fw, fh);
if (params.blackwhite.enabled) {
CurveFactory::curveBW(params.blackwhite.beforeCurve, params.blackwhite.afterCurve, hist16, dummy, customToneCurvebw1, customToneCurvebw2, 1);
@@ -1080,19 +1078,11 @@ private:
params.labCurve.lccurve, curve1, curve2, satcurve, lhskcurve, 1);
- // bool locallutili = false;
- // bool localcutili = false;
- reservView->CopyFrom(labView);
- lastorigView->CopyFrom(labView);
-
- if (params.locallab.enabled) {
+ if (params.locallab.enabled && params.locallab.spots.size() > 0) {
MyTime t1, t2;
t1.set();
-
- LUTf huerefs(500, -10000.f);
- LUTf sobelrefs(500, -10000.f);
- LUTi centerx(500, -10000);
- LUTi centery(500, -10000);
+ const std::unique_ptr reservView(new LabImage(*labView, true));
+ const std::unique_ptr lastorigView(new LabImage(*labView, true));
LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve;
LocLHCurve loclhCurve;
@@ -1125,8 +1115,14 @@ private:
LocCCmaskCurve locccmasblCurve;
LocLLmaskCurve locllmasblCurve;
LocHHmaskCurve lochhmasblCurve;
+ LocCCmaskCurve locccmas_Curve;
+ LocLLmaskCurve locllmas_Curve;
+ LocHHmaskCurve lochhmas_Curve;
+ LocHHmaskCurve lochhhmas_Curve;
+
LocwavCurve loclmasCurveblwav;
LocwavCurve loclmasCurvecolwav;
+ LocwavCurve loclmasCurve_wav;
LocwavCurve locwavCurve;
LocwavCurve loclevwavCurve;
LocwavCurve locconwavCurve;
@@ -1134,157 +1130,110 @@ private:
LocwavCurve loccomprewavCurve;
LocwavCurve locedgwavCurve;
LocwavCurve locwavCurveden;
- LUTf lllocalcurve(65536, 0);
- LUTf lclocalcurve(65536, 0);
- LUTf cllocalcurve(65536, 0);
- LUTf cclocalcurve(65536, 0);
- LUTf rgblocalcurve(65536, 0);
- LUTf hltonecurveloc(65536, 0);
- LUTf shtonecurveloc(65536, 0);
- LUTf tonecurveloc(65536, 0);
- LUTf lightCurveloc(32770, 0);
- LUTf exlocalcurve(65536, 0);
- LUTf lmasklocalcurve(65536, 0);
- LUTf lmaskexplocalcurve(65536, 0);
- LUTf lmaskSHlocalcurve(65536, 0);
- LUTf lmaskviblocalcurve(65536, 0);
- LUTf lmasktmlocalcurve(65536, 0);
- LUTf lmaskretilocalcurve(65536, 0);
- LUTf lmaskcblocalcurve(65536, 0);
- LUTf lmaskbllocalcurve(65536, 0);
- LUTf lmasklclocalcurve(65536, 0);
-
- // int maxspot = 1;
- float** shbuffer = nullptr;
+ LUTf lllocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lclocalcurve(65536, LUT_CLIP_OFF);
+ LUTf cllocalcurve(65536, LUT_CLIP_OFF);
+ LUTf cclocalcurve(65536, LUT_CLIP_OFF);
+ LUTf rgblocalcurve(65536, LUT_CLIP_OFF);
+ LUTf hltonecurveloc(65536, LUT_CLIP_OFF);
+ LUTf shtonecurveloc(65536, LUT_CLIP_OFF);
+ LUTf tonecurveloc(65536, LUT_CLIP_OFF);
+ LUTf lightCurveloc(32770, LUT_CLIP_OFF);
+ LUTf exlocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmasklocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmaskexplocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmaskSHlocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmaskviblocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmasktmlocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmaskretilocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmaskcblocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmaskbllocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmasklclocalcurve(65536, LUT_CLIP_OFF);
+ LUTf lmasklocal_curve(65536, LUT_CLIP_OFF);
+ array2D shbuffer;
for (size_t sp = 0; sp < params.locallab.spots.size(); sp++) {
if (params.locallab.spots.at(sp).inverssha) {
- shbuffer = new float*[fh];
-
- for (int i = 0; i < fh; i++) {
- shbuffer[i] = new float[fw];
- }
+ shbuffer(fw, fh);
+ break;
}
+ }
+ for (size_t sp = 0; sp < params.locallab.spots.size(); sp++) {
// Set local curves of current spot to LUT
- bool LHutili = false;
- bool HHutili = false;
- bool locallutili = false;
- bool localclutili = false;
- bool locallcutili = false;
- bool localcutili = false;
- bool localrgbutili = false;
- bool localexutili = false;
- bool llmasutili = false;
- bool lhmasutili = false;
- bool lhhmasutili = false;
- bool lcmasutili = false;
- bool localmaskutili = false;
- bool localmaskexputili = false;
- bool localmaskSHutili = false;
- bool localmaskvibutili = false;
- bool localmasktmutili = false;
- bool localmaskretiutili = false;
- bool localmaskcbutili = false;
- bool localmaskblutili = false;
- bool localmasklcutili = false;
- bool lcmasexputili = false;
- bool lhmasexputili = false;
- bool llmasexputili = false;
- bool lcmasSHutili = false;
- bool lhmasSHutili = false;
- bool llmasSHutili = false;
- bool lcmasvibutili = false;
- bool lhmasvibutili = false;
- bool llmasvibutili = false;
- bool lcmaslcutili = false;
- bool lhmaslcutili = false;
- bool llmaslcutili = false;
- bool lcmascbutili = false;
- bool lhmascbutili = false;
- bool llmascbutili = false;
- bool lcmasretiutili = false;
- bool lhmasretiutili = false;
- bool llmasretiutili = false;
- bool lcmastmutili = false;
- bool lhmastmutili = false;
- bool llmastmutili = false;
- bool lcmasblutili = false;
- bool lhmasblutili = false;
- bool llmasblutili = false;
- bool locwavutili = false;
- bool locwavdenutili = false;
- bool loclevwavutili = false;
- bool locconwavutili = false;
- bool loccompwavutili = false;
- bool loccomprewavutili = false;
- bool locedgwavutili = false;
- bool lmasutiliblwav = false;
- bool lmasutilicolwav = false;
locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve);
locRETtransCurve.Set(params.locallab.spots.at(sp).localTtranscurve);
- loclhCurve.Set(params.locallab.spots.at(sp).LHcurve, LHutili);
- lochhCurve.Set(params.locallab.spots.at(sp).HHcurve, HHutili);
- locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve, lcmasutili);
- locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve, llmasutili);
- lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve, lhmasutili);
- lochhhmasCurve.Set(params.locallab.spots.at(sp).HHhmaskcurve, lhhmasutili);
- locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve, lcmasexputili);
- locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve, llmasexputili);
- lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve, lhmasexputili);
- locccmasSHCurve.Set(params.locallab.spots.at(sp).CCmaskSHcurve, lcmasSHutili);
- locllmasSHCurve.Set(params.locallab.spots.at(sp).LLmaskSHcurve, llmasSHutili);
- lochhmasSHCurve.Set(params.locallab.spots.at(sp).HHmaskSHcurve, lhmasSHutili);
- locccmasvibCurve.Set(params.locallab.spots.at(sp).CCmaskvibcurve, lcmasvibutili);
- locllmasvibCurve.Set(params.locallab.spots.at(sp).LLmaskvibcurve, llmasvibutili);
- lochhmasvibCurve.Set(params.locallab.spots.at(sp).HHmaskvibcurve, lhmasvibutili);
- locccmascbCurve.Set(params.locallab.spots.at(sp).CCmaskcbcurve, lcmascbutili);
- locllmascbCurve.Set(params.locallab.spots.at(sp).LLmaskcbcurve, llmascbutili);
- lochhmascbCurve.Set(params.locallab.spots.at(sp).HHmaskcbcurve, lhmascbutili);
- locccmasretiCurve.Set(params.locallab.spots.at(sp).CCmaskreticurve, lcmasretiutili);
- locllmasretiCurve.Set(params.locallab.spots.at(sp).LLmaskreticurve, llmasretiutili);
- lochhmasretiCurve.Set(params.locallab.spots.at(sp).HHmaskreticurve, lhmasretiutili);
- locccmastmCurve.Set(params.locallab.spots.at(sp).CCmasktmcurve, lcmastmutili);
- locllmastmCurve.Set(params.locallab.spots.at(sp).LLmasktmcurve, llmastmutili);
- lochhmastmCurve.Set(params.locallab.spots.at(sp).HHmasktmcurve, lhmastmutili);
- locccmasblCurve.Set(params.locallab.spots.at(sp).CCmaskblcurve, lcmasblutili);
- locllmasblCurve.Set(params.locallab.spots.at(sp).LLmaskblcurve, llmasblutili);
- lochhmasblCurve.Set(params.locallab.spots.at(sp).HHmaskblcurve, lhmasblutili);
- loclmasCurveblwav.Set(params.locallab.spots.at(sp).LLmaskblcurvewav, lmasutiliblwav);
- loclmasCurvecolwav.Set(params.locallab.spots.at(sp).LLmaskcolcurvewav, lmasutilicolwav);
+ const bool LHutili = loclhCurve.Set(params.locallab.spots.at(sp).LHcurve);
+ const bool HHutili = lochhCurve.Set(params.locallab.spots.at(sp).HHcurve);
+ const bool lcmasutili = locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve);
+ const bool llmasutili = locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve);
+ const bool lhmasutili = lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve);
+ const bool lhhmasutili = lochhhmasCurve.Set(params.locallab.spots.at(sp).HHhmaskcurve);
+ const bool lcmasexputili = locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve);
+ const bool llmasexputili = locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve);
+ const bool lhmasexputili = lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve);
+ const bool lcmasSHutili = locccmasSHCurve.Set(params.locallab.spots.at(sp).CCmaskSHcurve);
+ const bool llmasSHutili = locllmasSHCurve.Set(params.locallab.spots.at(sp).LLmaskSHcurve);
+ const bool lhmasSHutili = lochhmasSHCurve.Set(params.locallab.spots.at(sp).HHmaskSHcurve);
+ const bool lcmasvibutili = locccmasvibCurve.Set(params.locallab.spots.at(sp).CCmaskvibcurve);
+ const bool llmasvibutili = locllmasvibCurve.Set(params.locallab.spots.at(sp).LLmaskvibcurve);
+ const bool lhmasvibutili = lochhmasvibCurve.Set(params.locallab.spots.at(sp).HHmaskvibcurve);
+ const bool lcmascbutili = locccmascbCurve.Set(params.locallab.spots.at(sp).CCmaskcbcurve);
+ const bool llmascbutili = locllmascbCurve.Set(params.locallab.spots.at(sp).LLmaskcbcurve);
+ const bool lhmascbutili = lochhmascbCurve.Set(params.locallab.spots.at(sp).HHmaskcbcurve);
+ const bool lcmasretiutili = locccmasretiCurve.Set(params.locallab.spots.at(sp).CCmaskreticurve);
+ const bool llmasretiutili = locllmasretiCurve.Set(params.locallab.spots.at(sp).LLmaskreticurve);
+ const bool lhmasretiutili = lochhmasretiCurve.Set(params.locallab.spots.at(sp).HHmaskreticurve);
+ const bool lcmastmutili = locccmastmCurve.Set(params.locallab.spots.at(sp).CCmasktmcurve);
+ const bool lhmaslcutili = lochhmaslcCurve.Set(params.locallab.spots.at(sp).HHmasklccurve);
+ const bool llmastmutili = locllmastmCurve.Set(params.locallab.spots.at(sp).LLmasktmcurve);
+ const bool lhmastmutili = lochhmastmCurve.Set(params.locallab.spots.at(sp).HHmasktmcurve);
+ const bool lcmasblutili = locccmasblCurve.Set(params.locallab.spots.at(sp).CCmaskblcurve);
+ const bool llmasblutili = locllmasblCurve.Set(params.locallab.spots.at(sp).LLmaskblcurve);
+ const bool lhmasblutili = lochhmasblCurve.Set(params.locallab.spots.at(sp).HHmaskblcurve);
+ const bool lcmas_utili = locccmas_Curve.Set(params.locallab.spots.at(sp).CCmask_curve);
+ const bool llmas_utili = locllmas_Curve.Set(params.locallab.spots.at(sp).LLmask_curve);
+ const bool lhmas_utili = lochhmas_Curve.Set(params.locallab.spots.at(sp).HHmask_curve);
+ const bool lhhmas_utili = lochhhmas_Curve.Set(params.locallab.spots.at(sp).HHhmask_curve);
+ const bool lmasutiliblwav = loclmasCurveblwav.Set(params.locallab.spots.at(sp).LLmaskblcurvewav);
+ const bool lmasutilicolwav = loclmasCurvecolwav.Set(params.locallab.spots.at(sp).LLmaskcolcurvewav);
+ const bool lcmaslcutili = locccmaslcCurve.Set(params.locallab.spots.at(sp).CCmasklccurve);
+ const bool llmaslcutili = locllmaslcCurve.Set(params.locallab.spots.at(sp).LLmasklccurve);
+ const bool lmasutili_wav = loclmasCurve_wav.Set(params.locallab.spots.at(sp).LLmask_curvewav);
+ const bool locwavutili = locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve);
+ const bool locwavdenutili = locwavCurveden.Set(params.locallab.spots.at(sp).locwavcurveden);
+ const bool loclevwavutili = loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve);
+ const bool locconwavutili = locconwavCurve.Set(params.locallab.spots.at(sp).locconwavcurve);
+ const bool loccompwavutili = loccompwavCurve.Set(params.locallab.spots.at(sp).loccompwavcurve);
+ const bool loccomprewavutili = loccomprewavCurve.Set(params.locallab.spots.at(sp).loccomprewavcurve);
+ const bool locedgwavutili = locedgwavCurve.Set(params.locallab.spots.at(sp).locedgwavcurve);
+ const bool locallutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).llcurve, lllocalcurve, 1);
+ const bool localclutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).clcurve, cllocalcurve, 1);
+ const bool locallcutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).lccurve, lclocalcurve, 1);
+ const bool localcutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).cccurve, cclocalcurve, 1);
+ const bool localrgbutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).rgbcurve, rgblocalcurve, 1);
+ const bool localexutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).excurve, exlocalcurve, 1);
+ const bool localmaskutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, 1);
+ const bool localmaskexputili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1);
+ const bool localmaskSHutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, 1);
+ const bool localmaskvibutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskvibcurve, lmaskviblocalcurve, 1);
+ const bool localmasktmutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 1);
+ const bool localmaskretiutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, 1);
+ const bool localmaskcbutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, 1);
+ const bool localmaskblutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, 1);
+ const bool localmasklcutili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve, 1);
+ const bool localmask_utili = CurveFactory::curveLocal(params.locallab.spots.at(sp).Lmask_curve, lmasklocal_curve, 1);
- locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili);
- locwavCurveden.Set(params.locallab.spots.at(sp).locwavcurveden, locwavdenutili);
- loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve, loclevwavutili);
- locconwavCurve.Set(params.locallab.spots.at(sp).locconwavcurve, locconwavutili);
- loccompwavCurve.Set(params.locallab.spots.at(sp).loccompwavcurve, loccompwavutili);
- loccomprewavCurve.Set(params.locallab.spots.at(sp).loccomprewavcurve, loccomprewavutili);
- locedgwavCurve.Set(params.locallab.spots.at(sp).locedgwavcurve, locedgwavutili);
- CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, 1);
- CurveFactory::curveLocal(localclutili, params.locallab.spots.at(sp).clcurve, cllocalcurve, 1);
- CurveFactory::curveLocal(locallcutili, params.locallab.spots.at(sp).lccurve, lclocalcurve, 1);
- CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1);
- CurveFactory::curveLocal(localrgbutili, params.locallab.spots.at(sp).rgbcurve, rgblocalcurve, 1);
- CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskvibutili, params.locallab.spots.at(sp).Lmaskvibcurve, lmaskviblocalcurve, 1);
- CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, 1);
- CurveFactory::curvemaskLocal(localmaskblutili, params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, 1);
- CurveFactory::curvemaskLocal(localmasklcutili, params.locallab.spots.at(sp).Lmasklccurve, lmasklclocalcurve, 1);
//provisory
double ecomp = params.locallab.spots.at(sp).expcomp;
- double black = params.locallab.spots.at(sp).black;
- double hlcompr = params.locallab.spots.at(sp).hlcompr;
- double hlcomprthresh = params.locallab.spots.at(sp).hlcomprthresh;
+ double lblack = params.locallab.spots.at(sp).black;
+ double lhlcompr = params.locallab.spots.at(sp).hlcompr;
+ double lhlcomprthresh = params.locallab.spots.at(sp).hlcomprthresh;
double shcompr = params.locallab.spots.at(sp).shcompr;
double br = params.locallab.spots.at(sp).lightness;
double cont = params.locallab.spots.at(sp).contrast;
- if(black < 0. && params.locallab.spots.at(sp).expMethod == "pde" ) {
- black *= 1.5;
+ if (lblack < 0. && params.locallab.spots.at(sp).expMethod == "pde" ) {
+ lblack *= 1.5;
}
// Reference parameters computation
@@ -1292,11 +1241,11 @@ private:
int lastsav;
float avge;
if (params.locallab.spots.at(sp).spotMethod == "exc") {
- ipf.calc_ref(sp, reservView, reservView, 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
+ ipf.calc_ref(sp, reservView.get(), reservView.get(), 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
} else {
ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
}
- CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumare,
+ CurveFactory::complexCurvelocal(ecomp, lblack / 65535., lhlcompr, lhlcomprthresh, shcompr, br, cont, lumare,
hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avge,
1);
float minCD;
@@ -1309,7 +1258,7 @@ private:
float Tmax;
// No Locallab mask is shown in exported picture
- ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, lastorigView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve,
+ ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), lastorigView.get(), 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve,
lllocalcurve, locallutili,
cllocalcurve, localclutili,
lclocalcurve, locallcutili,
@@ -1323,6 +1272,8 @@ private:
lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
lmasklclocalcurve, localmasklcutili,
+ lmasklocal_curve, localmask_utili,
+
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili,
@@ -1331,6 +1282,8 @@ private:
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili,
+ locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili,
+ lochhhmas_Curve, lhhmas_utili,
loclmasCurveblwav,lmasutiliblwav,
loclmasCurvecolwav,lmasutilicolwav,
locwavCurve, locwavutili,
@@ -1340,47 +1293,21 @@ private:
loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili,
locedgwavCurve, locedgwavutili,
+ loclmasCurve_wav,lmasutili_wav,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
- huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
- lastorigView->CopyFrom(labView);
+ if (sp + 1u < params.locallab.spots.size()) {
+ // do not copy for last spot as it is not needed anymore
+ lastorigView->CopyFrom(labView);
+ }
if (params.locallab.spots.at(sp).spotMethod == "exc") {
- ipf.calc_ref(sp, reservView, reservView, 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
+ ipf.calc_ref(sp, reservView.get(), reservView.get(), 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
} else {
ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili);
}
-
- // Clear local curves
- lllocalcurve.clear();
- lclocalcurve.clear();
- cllocalcurve.clear();
- cclocalcurve.clear();
- rgblocalcurve.clear();
- exlocalcurve.clear();
- hltonecurveloc.clear();
- lmasklocalcurve.clear();
- lmaskexplocalcurve.clear();
- lmaskSHlocalcurve.clear();
- lmaskviblocalcurve.clear();
- lmasktmlocalcurve.clear();
- lmaskretilocalcurve.clear();
- lmaskcblocalcurve.clear();
- lmaskbllocalcurve.clear();
- shtonecurveloc.clear();
- tonecurveloc.clear();
- lightCurveloc.clear();
- if (params.locallab.spots.at(sp).inverssha) {
-
- for (int i = 0; i < fh; i++) {
- delete [] shbuffer[i];
- }
-
- delete [] shbuffer;
- }
-
-
}
t2.set();
@@ -1391,11 +1318,6 @@ private:
}
- delete reservView;
- reservView = nullptr;
- delete lastorigView;
- lastorigView = nullptr;
-
ipf.chromiLuminanceCurve(nullptr, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy);
if ((params.colorappearance.enabled && !params.colorappearance.tonecie) || (!params.colorappearance.enabled)) {
@@ -1465,8 +1387,7 @@ private:
}
*/
if (WaveParams.softrad > 0.f) {
- provradius = new LabImage(fw, fh);
- provradius->CopyFrom(labView);
+ provradius = new LabImage(*labView, true);
}
params.wavelet.getCurves(wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL);
@@ -1474,11 +1395,10 @@ private:
CurveFactory::curveWavContL(wavcontlutili, params.wavelet.wavclCurve, wavclCurve,/* hist16C, dummy,*/ 1);
if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") {
- unshar = new LabImage(fw, fh);
provis = params.wavelet.CLmethod;
params.wavelet.CLmethod = "all";
ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1);
- unshar->CopyFrom(labView);
+ unshar = new LabImage(*labView, true);
params.wavelet.CLmethod = provis;
WaveParams.expcontrast = false;
@@ -1528,11 +1448,11 @@ private:
}
double epsilmax = 0.0001;
double epsilmin = 0.00001;
- double aepsil = (epsilmax - epsilmin) / 90.f;
- double bepsil = epsilmax - 100.f * aepsil;
+ double aepsil = (epsilmax - epsilmin) / 100.f;
+ double bepsil = epsilmin; //epsilmax - 100.f * aepsil;
double epsil = aepsil * WaveParams.softrad + bepsil;
- float blur = 10.f / 1 * (0.0001f + 0.8f * WaveParams.softrad);
+ float blur = 10.f / 1 * (0.5f + 0.8f * WaveParams.softrad);
// rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh);
rtengine::guidedFilter(guid, ble, ble, blur, epsil, false);
@@ -1742,10 +1662,6 @@ private:
delete labView;
labView = nullptr;
-// delete reservView;
-// reservView = nullptr;
-
-
if (bwonly) { //force BW r=g=b
if (settings->verbose) {
printf("Force BW\n");
@@ -2020,8 +1936,6 @@ private:
ColorTemp currWB;
Imagefloat *baseImg;
LabImage* labView;
- LabImage* reservView;
- LabImage* lastorigView;
LUTu hist16;
diff --git a/rtexif/rtexif.cc b/rtexif/rtexif.cc
index c0038c067..f32a9feb1 100644
--- a/rtexif/rtexif.cc
+++ b/rtexif/rtexif.cc
@@ -3248,7 +3248,43 @@ int ExifManager::createJPEGMarker (const TagDirectory* root, const rtengine::pro
TagDirectory* cl;
if (root) {
- cl = (const_cast (root))->clone (nullptr);
+ cl = root->clone(nullptr);
+
+ // Drop unwanted tags before exporting
+ // For example, Nikon Z-series has a 52Kb MakerNotes->ShotInfo tag
+ // which does not fit into the 65Kb limit on JPEG exif tags
+ const Tag* const make_tag = cl->getTag(271);
+ if (make_tag && !std::strncmp((const char*)make_tag->getValue(), "NIKON CORPORATION", 17)) {
+ [cl]()
+ {
+ Tag* const exif_tag = cl->getTag(34665);
+ if (!exif_tag) {
+ return;
+ }
+
+ TagDirectory* const exif_dir = exif_tag->getDirectory();
+ if (!exif_dir) {
+ return;
+ }
+
+ Tag* const make_notes_tag = exif_dir->getTag(37500);
+ if (!make_notes_tag) {
+ return;
+ }
+
+ TagDirectory* const maker_notes_dir = make_notes_tag->getDirectory();
+ if (!maker_notes_dir) {
+ return;
+ }
+
+ Tag* const shot_info_tag = maker_notes_dir->getTag(145);
+ if (!shot_info_tag) {
+ return;
+ }
+
+ shot_info_tag->setKeep(false);
+ }();
+ }
} else {
cl = new TagDirectory (nullptr, ifdAttribs, INTEL);
}
diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc
index 83d62f572..5aa501476 100644
--- a/rtgui/controlspotpanel.cc
+++ b/rtgui/controlspotpanel.cc
@@ -48,6 +48,7 @@ ControlSpotPanel::ControlSpotPanel():
button_rename_(Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_BUTTON_REN")))),
button_visibility_(Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_BUTTON_VIS")))),
+ prevMethod_(Gtk::manage(new MyComboBoxText())),
shape_(Gtk::manage(new MyComboBoxText())),
spotMethod_(Gtk::manage(new MyComboBoxText())),
shapeMethod_(Gtk::manage(new MyComboBoxText())),
@@ -78,6 +79,7 @@ ControlSpotPanel::ControlSpotPanel():
scopemask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCOPEMASK"), 0, 100, 1, 60))),
lumask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LUMASK"), 0, 30, 1, 10))),
+ activ_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIVSPOT")))),
avoid_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AVOID")))),
blwh_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BLWH")))),
recurs_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_RECURS")))),
@@ -92,6 +94,7 @@ ControlSpotPanel::ControlSpotPanel():
expMaskMerge_(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_MASFRAME")))),
preview_(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))),
+ ctboxshape(Gtk::manage(new Gtk::HBox())),
controlPanelListener(nullptr),
lastObject_(-1),
@@ -105,6 +108,18 @@ ControlSpotPanel::ControlSpotPanel():
{
const bool showtooltip = options.showtooltip;
+ Gtk::HBox* const ctboxprevmethod = Gtk::manage(new Gtk::HBox());
+ prevMethod_->append(M("TP_LOCALLAB_PREVHIDE"));
+ prevMethod_->append(M("TP_LOCALLAB_PREVSHOW"));
+ prevMethod_->set_active(0);
+ prevMethodconn_ = prevMethod_->signal_changed().connect(
+ sigc::mem_fun(
+ *this, &ControlSpotPanel::prevMethodChanged));
+
+ ctboxprevmethod->pack_start(*prevMethod_);
+ pack_start(*ctboxprevmethod);
+
+
Gtk::HBox* const hbox1_ = Gtk::manage(new Gtk::HBox(true, 4));
buttonaddconn_ = button_add_->signal_clicked().connect(
sigc::mem_fun(*this, &ControlSpotPanel::on_button_add));
@@ -176,7 +191,11 @@ ControlSpotPanel::ControlSpotPanel():
scrolledwindow_->set_min_content_height(150);
pack_start(*scrolledwindow_);
- Gtk::HBox* const ctboxshape = Gtk::manage(new Gtk::HBox());
+ Gtk::HBox* const ctboxactivmethod = Gtk::manage(new Gtk::HBox());
+ ctboxactivmethod->pack_start(*activ_);
+ pack_start(*ctboxactivmethod);
+
+// Gtk::HBox* const ctboxshape = Gtk::manage(new Gtk::HBox());
Gtk::Label* const labelshape = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SHAPETYPE") + ":"));
ctboxshape->pack_start(*labelshape, Gtk::PACK_SHRINK, 4);
shape_->append(M("TP_LOCALLAB_ELI"));
@@ -208,6 +227,7 @@ ControlSpotPanel::ControlSpotPanel():
ctboxspotmethod->pack_start(*spotMethod_);
pack_start(*ctboxspotmethod);
+
excluFrame->set_label_align(0.025, 0.5);
if (showtooltip) {
@@ -229,6 +249,7 @@ ControlSpotPanel::ControlSpotPanel():
excluFrame->add(*excluBox);
pack_start(*excluFrame);
+
Gtk::HBox* const ctboxshapemethod = Gtk::manage(new Gtk::HBox());
Gtk::Label* const labelshapemethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_STYPE") + ":"));
ctboxshapemethod->pack_start(*labelshapemethod, Gtk::PACK_SHRINK, 4);
@@ -360,13 +381,20 @@ ControlSpotPanel::ControlSpotPanel():
artifBox->pack_start(*balan_);
artifBox->pack_start(*balanh_);
artifBox->pack_start(*colorde_);
- artifBox->pack_start(*preview_);
- artifBox->pack_start(*colorscope_);
+// artifBox->pack_start(*preview_);
+// artifBox->pack_start(*colorscope_);
expShapeDetect_->add(*artifBox, false);
pack_start(*expShapeDetect_, false, false);
-
+ ToolParamBlock* const artifBox2 = Gtk::manage(new ToolParamBlock());
+
+ artifBox2->pack_start(*preview_);
+ artifBox2->pack_start(*colorscope_);
+ pack_start(*artifBox2);
ToolParamBlock* const specCaseBox = Gtk::manage(new ToolParamBlock());
+ activConn_ = activ_->signal_toggled().connect(
+ sigc::mem_fun(*this, &ControlSpotPanel::activChanged));
+
avoidConn_ = avoid_->signal_toggled().connect(
sigc::mem_fun(*this, &ControlSpotPanel::avoidChanged));
specCaseBox->pack_start(*avoid_);
@@ -389,6 +417,29 @@ ControlSpotPanel::ControlSpotPanel():
}
specCaseBox->pack_start(*recurs_);
+ specCaseBox->pack_start(*ctboxshapemethod);
+
+ Gtk::HBox* const ctboxwavmethod = Gtk::manage(new Gtk::HBox());
+ Gtk::Label* const labelwavmethod = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DAUBLOCAL") + ":"));
+ ctboxwavmethod->pack_start(*labelwavmethod, Gtk::PACK_SHRINK, 4);
+
+ if (showtooltip) {
+ ctboxwavmethod->set_tooltip_markup(M("TP_WAVELET_DAUB_TOOLTIP"));
+ }
+
+ wavMethod_->append(M("TP_WAVELET_DAUB2"));
+ wavMethod_->append(M("TP_WAVELET_DAUB4"));
+ wavMethod_->append(M("TP_WAVELET_DAUB6"));
+ wavMethod_->append(M("TP_WAVELET_DAUB10"));
+ wavMethod_->append(M("TP_WAVELET_DAUB14"));
+ wavMethod_->set_active(1);
+ wavMethodconn_ = wavMethod_->signal_changed().connect(
+ sigc::mem_fun(
+ *this, &ControlSpotPanel::wavMethodChanged));
+ ctboxwavmethod->pack_start(*wavMethod_);
+ specCaseBox->pack_start(*ctboxwavmethod);
+
+
expSpecCases_->add(*specCaseBox, false);
pack_start(*expSpecCases_, false, false);
@@ -418,7 +469,7 @@ ControlSpotPanel::ControlSpotPanel():
laplac_->set_tooltip_text(M("TP_LOCALLAB_LAP_MASK_TOOLTIP"));
}
- maskBox->pack_start(*laplac_);
+// maskBox->pack_start(*laplac_);
maskBox->pack_start(*deltae_);
maskBox->pack_start(*scopemask_);
// maskBox->pack_start(*shortc_);
@@ -452,7 +503,7 @@ ControlSpotPanel::ControlSpotPanel():
*this, &ControlSpotPanel::complexMethodChanged));
ctboxcomplexmethod->pack_start(*complexMethod_);
// pack_start(*ctboxcomplexmethod);
-
+/*
Gtk::HBox* const ctboxwavmethod = Gtk::manage(new Gtk::HBox());
Gtk::Label* const labelwavmethod = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DAUBLOCAL") + ":"));
ctboxwavmethod->pack_start(*labelwavmethod, Gtk::PACK_SHRINK, 4);
@@ -472,7 +523,7 @@ ControlSpotPanel::ControlSpotPanel():
*this, &ControlSpotPanel::wavMethodChanged));
ctboxwavmethod->pack_start(*wavMethod_);
pack_start(*ctboxwavmethod);
-
+*/
show_all();
// Define row background color
@@ -755,6 +806,7 @@ void ControlSpotPanel::load_ControlSpot_param()
const Gtk::TreeModel::Row row = *iter;
// Load param in selected control spot
+ prevMethod_->set_active(row[spots_.prevMethod]);
shape_->set_active(row[spots_.shape]);
spotMethod_->set_active(row[spots_.spotMethod]);
sensiexclu_->setValue((double)row[spots_.sensiexclu]);
@@ -779,10 +831,12 @@ void ControlSpotPanel::load_ControlSpot_param()
balanh_->setValue((double)row[spots_.balanh]);
colorde_->setValue((double)row[spots_.colorde]);
colorscope_->setValue((double)row[spots_.colorscope]);
+ activ_->set_active(row[spots_.activ]);
avoid_->set_active(row[spots_.avoid]);
blwh_->set_active(row[spots_.blwh]);
recurs_->set_active(row[spots_.recurs]);
- laplac_->set_active(row[spots_.laplac]);
+ // laplac_->set_active(row[spots_.laplac]);
+ laplac_->set_active(true);
deltae_->set_active(row[spots_.deltae]);
scopemask_->setValue((double)row[spots_.scopemask]);
shortc_->set_active(row[spots_.shortc]);
@@ -842,6 +896,55 @@ void ControlSpotPanel::shapeChanged()
}
}
+void ControlSpotPanel::prevMethodChanged()
+{
+ // printf("prevMethodChanged\n");
+
+ // Get selected control spot
+ const auto s = treeview_->get_selection();
+
+ if (!s->count_selected_rows()) {
+ return;
+ }
+
+ const auto iter = s->get_selected();
+ Gtk::TreeModel::Row row = *iter;
+
+ row[spots_.prevMethod] = prevMethod_->get_active_row_number();
+
+ // Update Control Spot GUI according to spotMethod_ combobox state (to be compliant with updateParamVisibility function)
+ if (multiImage && prevMethod_->get_active_text() == M("GENERAL_UNCHANGED")) {
+ expTransGrad_->show();
+ expShapeDetect_->show();
+ expSpecCases_->show();
+ expMaskMerge_->show();
+ circrad_->show();
+ ctboxshape->show();
+ } else if (prevMethod_->get_active_row_number() == 0) { // Normal case
+ expTransGrad_->hide();
+ expShapeDetect_->hide();
+ expSpecCases_->hide();
+ expMaskMerge_->hide();
+ circrad_->hide();
+ ctboxshape->hide();
+
+ } else { // Excluding case
+ expTransGrad_->show();
+ expShapeDetect_->show();
+ expSpecCases_->show();
+ expMaskMerge_->show();
+ circrad_->show();
+ ctboxshape->show();
+ }
+
+ // Raise event
+ if (listener) {
+ listener->panelChanged(EvLocallabSpotprevMethod, prevMethod_->get_active_text());
+ }
+}
+
+
+
void ControlSpotPanel::spotMethodChanged()
{
// printf("spotMethodChanged\n");
@@ -1086,6 +1189,32 @@ void ControlSpotPanel::updateParamVisibility()
} else { // Excluding case
excluFrame->show();
}
+
+
+ if (multiImage && prevMethod_->get_active_text() == M("GENERAL_UNCHANGED")) {
+ expTransGrad_->show();
+ expShapeDetect_->show();
+ expSpecCases_->show();
+ expMaskMerge_->show();
+ circrad_->show();
+ ctboxshape->show();
+ } else if (prevMethod_->get_active_row_number() == 0) { // Normal case
+ expTransGrad_->hide();
+ expShapeDetect_->hide();
+ expSpecCases_->hide();
+ expMaskMerge_->hide();
+ circrad_->hide();
+ ctboxshape->hide();
+ } else { // Excluding case
+ expTransGrad_->show();
+ expShapeDetect_->show();
+ expSpecCases_->show();
+ expMaskMerge_->show();
+ circrad_->show();
+ ctboxshape->show();
+ }
+
+
}
void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval)
@@ -1314,6 +1443,9 @@ void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval)
}
}
+
+
+
void ControlSpotPanel::avoidChanged()
{
// printf("avoidChanged\n");
@@ -1339,6 +1471,32 @@ void ControlSpotPanel::avoidChanged()
}
}
+void ControlSpotPanel::activChanged()
+{
+ // printf("activChanged\n");
+
+ // Get selected control spot
+ const auto s = treeview_->get_selection();
+
+ if (!s->count_selected_rows()) {
+ return;
+ }
+
+ const auto iter = s->get_selected();
+ Gtk::TreeModel::Row row = *iter;
+ row[spots_.activ] = activ_->get_active();
+
+ // Raise event
+ if (listener) {
+ if (activ_->get_active()) {
+ listener->panelChanged(Evlocallabactiv, M("GENERAL_ENABLED"));
+ } else {
+ listener->panelChanged(Evlocallabactiv, M("GENERAL_DISABLED"));
+ }
+ }
+}
+
+
void ControlSpotPanel::blwhChanged()
{
// printf("blwhChanged\n");
@@ -1505,6 +1663,7 @@ void ControlSpotPanel::disableParamlistener(bool cond)
buttonduplicateconn_.block(cond);
buttonrenameconn_.block(cond);
buttonvisibilityconn_.block(cond);
+ prevMethodconn_.block(cond);
shapeconn_.block(cond);
spotMethodconn_.block(cond);
sensiexclu_->block(cond);
@@ -1529,6 +1688,7 @@ void ControlSpotPanel::disableParamlistener(bool cond)
balanh_->block(cond);
colorde_->block(cond);
colorscope_->block(cond);
+ activConn_.block(cond);
avoidConn_.block(cond);
blwhConn_.block(cond);
recursConn_.block(cond);
@@ -1546,6 +1706,7 @@ void ControlSpotPanel::setParamEditable(bool cond)
{
// printf("setParamEditable: %d\n", cond);
+ prevMethod_->set_sensitive(cond);
shape_->set_sensitive(cond);
spotMethod_->set_sensitive(cond);
sensiexclu_->set_sensitive(cond);
@@ -1570,6 +1731,7 @@ void ControlSpotPanel::setParamEditable(bool cond)
balanh_->set_sensitive(cond);
colorde_->set_sensitive(cond);
colorscope_->set_sensitive(cond);
+ activ_->set_sensitive(cond);
avoid_->set_sensitive(cond);
blwh_->set_sensitive(cond);
recurs_->set_sensitive(cond);
@@ -2202,6 +2364,7 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index)
if (i == index) {
r->name = row[spots_.name];
r->isvisible = row[spots_.isvisible];
+ r->prevMethod = row[spots_.prevMethod];
r->shape = row[spots_.shape];
r->spotMethod = row[spots_.spotMethod];
// r->mergeMethod = row[spots_.mergeMethod];
@@ -2230,6 +2393,7 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index)
r->transitgrad = row[spots_.transitgrad];
r->scopemask = row[spots_.scopemask];
r->lumask = row[spots_.lumask];
+ r->activ = row[spots_.activ];
r->avoid = row[spots_.avoid];
r->blwh = row[spots_.blwh];
r->recurs = row[spots_.recurs];
@@ -2334,6 +2498,7 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
row[spots_.name] = newSpot->name;
row[spots_.isvisible] = newSpot->isvisible;
row[spots_.curveid] = 0; // No associated curve
+ row[spots_.prevMethod] = newSpot->prevMethod;
row[spots_.shape] = newSpot->shape;
row[spots_.spotMethod] = newSpot->spotMethod;
row[spots_.sensiexclu] = newSpot->sensiexclu;
@@ -2358,6 +2523,7 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
row[spots_.balanh] = newSpot->balanh;
row[spots_.colorde] = newSpot->colorde;
row[spots_.colorscope] = newSpot->colorscope;
+ row[spots_.activ] = newSpot->activ;
row[spots_.avoid] = newSpot->avoid;
row[spots_.blwh] = newSpot->blwh;
row[spots_.recurs] = newSpot->recurs;
@@ -2446,6 +2612,7 @@ ControlSpotPanel::ControlSpots::ControlSpots()
add(name);
add(isvisible);
add(curveid);
+ add(prevMethod);
add(shape);
add(spotMethod);
add(sensiexclu);
@@ -2470,6 +2637,7 @@ ControlSpotPanel::ControlSpots::ControlSpots()
add(balanh);
add(colorde);
add(colorscope);
+ add(activ);
add(avoid);
add(blwh);
add(recurs);
diff --git a/rtgui/controlspotpanel.h b/rtgui/controlspotpanel.h
index f2bfa1fd0..81a79fb61 100644
--- a/rtgui/controlspotpanel.h
+++ b/rtgui/controlspotpanel.h
@@ -50,6 +50,7 @@ public:
struct SpotRow {
Glib::ustring name;
bool isvisible;
+ int prevMethod; // 0 = Normal, 1 = Excluding
int shape; // 0 = Ellipse, 1 = Rectangle
int spotMethod; // 0 = Normal, 1 = Excluding
int sensiexclu;
@@ -74,6 +75,7 @@ public:
double balanh;
double colorde;
double colorscope;
+ bool activ;
bool avoid;
bool blwh;
bool recurs;
@@ -231,6 +233,7 @@ private:
void controlspotChanged();
+ void prevMethodChanged();
void shapeChanged();
void spotMethodChanged();
void shapeMethodChanged();
@@ -242,6 +245,7 @@ private:
void adjusterChanged(Adjuster* a, double newval) override;
+ void activChanged();
void avoidChanged();
void blwhChanged();
void recursChanged();
@@ -276,6 +280,7 @@ private:
Gtk::TreeModelColumn name;
Gtk::TreeModelColumn isvisible;
Gtk::TreeModelColumn curveid; // Associated curve id
+ Gtk::TreeModelColumn prevMethod; // 0 = hide, 1 = show
Gtk::TreeModelColumn shape; // 0 = Ellipse, 1 = Rectangle
Gtk::TreeModelColumn spotMethod; // 0 = Normal, 1 = Excluding
Gtk::TreeModelColumn sensiexclu;
@@ -300,6 +305,7 @@ private:
Gtk::TreeModelColumn balanh;
Gtk::TreeModelColumn colorde;
Gtk::TreeModelColumn colorscope;
+ Gtk::TreeModelColumn activ;
Gtk::TreeModelColumn avoid;
Gtk::TreeModelColumn blwh;
Gtk::TreeModelColumn recurs;
@@ -349,6 +355,8 @@ private:
Gtk::Button* const button_visibility_;
sigc::connection buttonvisibilityconn_;
+ MyComboBoxText* const prevMethod_;
+ sigc::connection prevMethodconn_;
MyComboBoxText* const shape_;
sigc::connection shapeconn_;
MyComboBoxText* const spotMethod_;
@@ -385,6 +393,8 @@ private:
Adjuster* const scopemask_;
Adjuster* const lumask_;
+ Gtk::CheckButton* const activ_;
+ sigc::connection activConn_;
Gtk::CheckButton* const avoid_;
sigc::connection avoidConn_;
Gtk::CheckButton* const blwh_;
@@ -408,6 +418,8 @@ private:
Gtk::ToggleButton* const preview_;
sigc::connection previewConn_;
+ Gtk::HBox* const ctboxshape;
+
// Internal variables
ControlPanelListener* controlPanelListener;
int lastObject_;
diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc
index a4351c710..883ef9aa2 100644
--- a/rtgui/locallab.cc
+++ b/rtgui/locallab.cc
@@ -162,6 +162,7 @@ Locallab::Locallab():
expcontrast(Gtk::manage(new LocallabContrast())),
expcbdl(Gtk::manage(new LocallabCBDL())),
explog(Gtk::manage(new LocallabLog())),
+ expmask(Gtk::manage(new LocallabMask())),
// Other widgets
resetshowButton(Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_RESETSHOW"))))
@@ -187,9 +188,11 @@ Locallab::Locallab():
ToolVBox* const toolpanel = Gtk::manage(new ToolVBox());
toolpanel->set_name("LocallabToolPanel");
addTool(toolpanel, expcolor);
- addTool(toolpanel, expexpose);
addTool(toolpanel, expshadhigh);
addTool(toolpanel, expvibrance);
+ addTool(toolpanel, explog);
+ addTool(toolpanel, expexpose);
+ addTool(toolpanel, expmask);
addTool(toolpanel, expsoft);
addTool(toolpanel, expblur);
addTool(toolpanel, exptonemap);
@@ -197,7 +200,6 @@ Locallab::Locallab():
addTool(toolpanel, expsharp);
addTool(toolpanel, expcontrast);
addTool(toolpanel, expcbdl);
- addTool(toolpanel, explog);
panel->pack_start(*toolpanel, false, false);
// Add separator
@@ -259,6 +261,12 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit
r->shape = 1;
}
+ if (pp->locallab.spots.at(i).prevMethod == "hide") {
+ r->prevMethod = 0;
+ } else {
+ r->prevMethod = 1;
+ }
+
if (pp->locallab.spots.at(i).spotMethod == "norm") {
r->spotMethod = 0;
} else {
@@ -303,10 +311,11 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit
r->balanh = pp->locallab.spots.at(i).balanh;
r->colorde = pp->locallab.spots.at(i).colorde;
r->colorscope = pp->locallab.spots.at(i).colorscope;
+ r->activ = pp->locallab.spots.at(i).activ;
r->avoid = pp->locallab.spots.at(i).avoid;
r->blwh = pp->locallab.spots.at(i).blwh;
r->recurs = pp->locallab.spots.at(i).recurs;
- r->laplac = pp->locallab.spots.at(i).laplac;
+ r->laplac = true; //pp->locallab.spots.at(i).laplac;
r->deltae = pp->locallab.spots.at(i).deltae;
r->scopemask = pp->locallab.spots.at(i).scopemask;
r->shortc = pp->locallab.spots.at(i).shortc;
@@ -407,6 +416,13 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->shape = 1;
}
+ if (newSpot->prevMethod == "hide") {
+ r->prevMethod = 0;
+ } else {
+ r->prevMethod = 1;
+ }
+
+
if (newSpot->spotMethod == "norm") {
r->spotMethod = 0;
} else {
@@ -470,6 +486,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->balanh = newSpot->balanh;
r->colorde = newSpot->colorde;
r->colorscope = newSpot->colorscope;
+ r->activ = newSpot->activ;
r->avoid = newSpot->avoid;
r->blwh = newSpot->blwh;
r->recurs = newSpot->recurs;
@@ -684,6 +701,12 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->shape = 1;
}
+ if (newSpot->prevMethod == "hide") {
+ r->prevMethod = 0;
+ } else {
+ r->prevMethod = 1;
+ }
+
if (newSpot->spotMethod == "norm") {
r->spotMethod = 0;
} else {
@@ -747,6 +770,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->balanh = newSpot->balanh;
r->colorde = newSpot->colorde;
r->colorscope = newSpot->colorscope;
+ r->activ = newSpot->activ;
r->avoid = newSpot->avoid;
r->blwh = newSpot->blwh;
r->recurs = newSpot->recurs;
@@ -843,6 +867,13 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).shape = "RECT";
}
+ if (r->prevMethod == 0) {
+ pp->locallab.spots.at(pp->locallab.selspot).prevMethod = "hide";
+ } else {
+ pp->locallab.spots.at(pp->locallab.selspot).prevMethod = "show";
+ }
+
+
if (r->spotMethod == 0) {
pp->locallab.spots.at(pp->locallab.selspot).spotMethod = "norm";
} else {
@@ -887,6 +918,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).balanh = r->balanh;
pp->locallab.spots.at(pp->locallab.selspot).colorde = r->colorde;
pp->locallab.spots.at(pp->locallab.selspot).colorscope = r->colorscope;
+ pp->locallab.spots.at(pp->locallab.selspot).activ = r->activ;
pp->locallab.spots.at(pp->locallab.selspot).avoid = r->avoid;
pp->locallab.spots.at(pp->locallab.selspot).blwh = r->blwh;
pp->locallab.spots.at(pp->locallab.selspot).recurs = r->recurs;
@@ -1025,20 +1057,20 @@ Locallab::llMaskVisibility Locallab::getMaskVisibility() const
const bool prevDeltaE = expsettings->isDeltaEPrevActive();
// Get mask preview from Locallab tools
- int colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask;
+ int colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, maskMask;
for (auto tool : locallabTools) {
- tool->getMaskView(colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask);
+ tool->getMaskView(colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, maskMask);
}
// Indicate to spot control panel if one mask preview is active
const bool isMaskActive = (colorMask == 0) || (colorMaskinv == 0) || (expMask == 0) || (expMaskinv == 0) ||
(shMask == 0) || (shMaskinv == 0) || (vibMask == 0) || (softMask == 0) ||
(blMask == 0) || (tmMask == 0) || (retiMask == 0) || (sharMask == 0) ||
- (lcMask == 0) || (cbMask == 0);
+ (lcMask == 0) || (cbMask == 0) || (maskMask == 0);
expsettings->setMaskPrevActive(isMaskActive);
- return {prevDeltaE, colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask};
+ return {prevDeltaE, colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, maskMask};
}
void Locallab::resetshowPressed()
diff --git a/rtgui/locallab.h b/rtgui/locallab.h
index 8d68576f4..44e408d49 100644
--- a/rtgui/locallab.h
+++ b/rtgui/locallab.h
@@ -115,6 +115,7 @@ private:
LocallabContrast* const expcontrast;
LocallabCBDL* const expcbdl;
LocallabLog* const explog;
+ LocallabMask* const expmask;
std::vector locallabTools;
@@ -162,6 +163,7 @@ public:
int sharMask;
int lcMask;
int cbMask;
+ int maskMask;
};
void resetMaskVisibility();
diff --git a/rtgui/locallabtools.cc b/rtgui/locallabtools.cc
index 78dfacbbe..f66625df9 100644
--- a/rtgui/locallabtools.cc
+++ b/rtgui/locallabtools.cc
@@ -388,6 +388,7 @@ LocallabColor::LocallabColor():
LocallabTool(this, M("TP_LOCALLAB_COLOR_TOOLNAME"), M("TP_LOCALLAB_COFR"), false),
// Color & Light specific widgets
+ lumFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LUMFRA")))),
curvactiv(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CURV")))),
lightness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTNESS"), -100, 500, 1, 0))),
contrast(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRAST"), -100, 100, 1, 0))),
@@ -399,7 +400,7 @@ LocallabColor::LocallabColor():
sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))),
structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL1"), 0, 100, 1, 0))),
blurcolde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))),
- softradiuscol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 1000.0, 0.5, 0.))),
+ softradiuscol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 0.))),
invers(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))),
expgradcol(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))),
strcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRLUM"), -4., 4., 0.05, 0.))),
@@ -449,7 +450,7 @@ LocallabColor::LocallabColor():
contcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTCOL"), 0., 200., 0.5, 0.))),
blurcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCOL"), 0.2, 100., 0.5, 0.2))),
blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
@@ -477,6 +478,7 @@ LocallabColor::LocallabColor():
// Parameter Color & Light specific widgets
curvactivConn = curvactiv->signal_toggled().connect(sigc::mem_fun(*this, &LocallabColor::curvactivChanged));
+ lumFrame->set_label_align(0.025, 0.5);
lightness->setAdjusterListener(this);
@@ -685,7 +687,7 @@ LocallabColor::LocallabColor():
blendmaskcol->setAdjusterListener(this);
- radmaskcol->setLogScale(10, -10);
+ // radmaskcol->setLogScale(10, -10);
radmaskcol->setAdjusterListener(this);
lapmaskcol->setAdjusterListener(this);
@@ -730,10 +732,14 @@ LocallabColor::LocallabColor():
Gtk::Frame* const superFrame = Gtk::manage(new Gtk::Frame());
superFrame->set_label_align(0.025, 0.5);
// superFrame->set_label_widget(*curvactiv);
+ ToolParamBlock* const lumBox = Gtk::manage(new ToolParamBlock());
+ lumBox->pack_start(*lightness);
+ lumBox->pack_start(*contrast);
+ lumBox->pack_start(*chroma);
+ lumFrame->add(*lumBox);
+ pack_start(*lumFrame);
ToolParamBlock* const superBox = Gtk::manage(new ToolParamBlock());
- superBox->pack_start(*lightness);
- superBox->pack_start(*contrast);
- superBox->pack_start(*chroma);
+
ToolParamBlock* const gridBox = Gtk::manage(new ToolParamBlock());
gridBox->pack_start(*labgrid);
gridBox->pack_start(*gridMethod);
@@ -866,7 +872,7 @@ void LocallabColor::resetMaskView()
showmaskcolMethodConninv.block(false);
}
-void LocallabColor::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabColor::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
colorMask = showmaskcolMethod->get_active_row_number();
colorMaskinv = showmaskcolMethodinv->get_active_row_number();
@@ -875,8 +881,10 @@ void LocallabColor::getMaskView(int &colorMask, int &colorMaskinv, int &expMask,
void LocallabColor::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
- exp->set_tooltip_text(M("TP_LOCALLAB_EXPCOLOR_TOOLTIP"));
+ lumFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCOLOR_TOOLTIP"));
lightness->set_tooltip_text(M("TP_LOCALLAB_LIGHTN_TOOLTIP"));
+ contrast->set_tooltip_text(M(" "));
+ chroma->set_tooltip_text(M(" "));
structcol->set_tooltip_text(M("TP_LOCALLAB_STRUCT_TOOLTIP"));
sensi->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
strcol->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP"));
@@ -902,34 +910,8 @@ void LocallabColor::updateAdviceTooltips(const bool showTooltips)
mask2CurveEditorGwav->set_tooltip_text(M("TP_LOCALLAB_WAVMASK_TOOLTIP"));
mask2CurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
special->set_tooltip_text(M("TP_LOCALLAB_SPECIAL_TOOLTIP"));
- } else {
+ } else {
exp->set_tooltip_text("");
- lightness->set_tooltip_text("");
- structcol->set_tooltip_text("");
- sensi->set_tooltip_text("");
- angcol->set_tooltip_text(M(""));
- strcol->set_tooltip_text("");
- qualitycurveMethod->set_tooltip_text("");
- mercol->set_tooltip_text("");
- opacol->set_tooltip_text("");
- conthrcol->set_tooltip_text("");
- gridmerFrame->set_tooltip_text("");
- expmaskcol->set_tooltip_text("");
- CCmaskshape->setTooltip("");
- LLmaskshape->setTooltip("");
- HHmaskshape->setTooltip("");
- radmaskcol->set_tooltip_text("");
- lapmaskcol->set_tooltip_text("");
- Lmaskshape->setTooltip("");
- LLmaskcolshapewav->setTooltip("");
- expmaskcol1->set_tooltip_text(M(""));
- blendmaskcol->set_tooltip_text(M(""));
- struFrame->set_tooltip_text(M(""));
- blurFrame->set_tooltip_text(M(""));
- maskHCurveEditorG->set_tooltip_text(M(""));
- mask2CurveEditorGwav->set_tooltip_text(M(""));
- mask2CurveEditorG->set_tooltip_text(M(""));
- special->set_tooltip_text(M(""));
}
}
@@ -1680,6 +1662,7 @@ void LocallabColor::convertParamToNormal()
// Set hidden GUI widgets in Normal mode to default spot values
blurcolde->setValue((double)defSpot.blurcolde);
+ structcol->setValue((double)defSpot.structcol);
// softradiuscol->setValue(defSpot.softradiuscol);
strcolab->setValue(defSpot.strcolab);
strcolh->setValue(defSpot.strcolh);
@@ -1769,6 +1752,7 @@ void LocallabColor::convertParamToNormal()
toolcol->set_active(defSpot.toolcol);
fftColorMask->set_active(defSpot.fftColorMask);
contcol->setValue(defSpot.contcol);
+ blurcol->setValue(defSpot.blurcol);
lapmaskcol->setValue(defSpot.lapmaskcol);
gammaskcol->setValue(defSpot.gammaskcol);
slomaskcol->setValue(defSpot.slomaskcol);
@@ -1810,9 +1794,11 @@ void LocallabColor::updateGUIToMode(const modeType new_type)
maskHCurveEditorG->hide();
mask2CurveEditorGwav->hide();
csThresholdcol->hide();
+ structcol->hide();
} else {
// Advanced widgets are shown in Expert mode
blurcolde->show();
+ structcol->show();
if (!invers->get_active()) { // Keep widget hidden when invers is toggled
softradiuscol->show();
@@ -2076,6 +2062,7 @@ void LocallabColor::updateColorGUI1()
if (mode == Normal) { // Keep widget hidden in Normal mode
softradiuscol->show();
+ structcol->hide();
}
expgradcol->show();
@@ -2188,9 +2175,9 @@ LocallabExposure::LocallabExposure():
structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))),
blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))),
exptoolexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPTOOL")))),
- expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), MINEXP, MAXEXP, 0.02, 0.))),
+ expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), MINEXP, MAXEXP, 0.01, 0.))),
black(Gtk::manage(new Adjuster(M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 10, 0))),
- hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 0))),
+ hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 20))),
hlcomprthresh(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 0))),
shadex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHADEX"), 0, 100, 1, 0))),
shcompr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHADEXCOMP"), 0, 100, 1, 50))),
@@ -2200,7 +2187,7 @@ LocallabExposure::LocallabExposure():
expgradexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))),
strexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))),
angexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
- softradiusexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 1000.0, 0.5, 0.))),
+ softradiusexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 0.))),
inversex(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))),
expmaskexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWE")))),
showmaskexpMethod(Gtk::manage(new MyComboBoxText())),
@@ -2212,7 +2199,7 @@ LocallabExposure::LocallabExposure():
LLmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
@@ -2265,6 +2252,8 @@ LocallabExposure::LocallabExposure():
setExpandAlignProperties(exptoolexp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
+ // expcomp->setLogScale(10, 0);
+
expcomp->setAdjusterListener(this);
black->setAdjusterListener(this);
@@ -2341,7 +2330,7 @@ LocallabExposure::LocallabExposure():
blendmaskexp->setAdjusterListener(this);
- radmaskexp->setLogScale(10, -10);
+ //radmaskexp->setLogScale(10, -10);
radmaskexp->setAdjusterListener(this);
lapmaskexp->setAdjusterListener(this);
@@ -2456,7 +2445,7 @@ void LocallabExposure::resetMaskView()
showmaskexpMethodConninv.block(false);
}
-void LocallabExposure::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabExposure::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
expMask = showmaskexpMethod->get_active_row_number();
expMaskinv = showmaskexpMethodinv->get_active_row_number();
@@ -2466,6 +2455,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
exp->set_tooltip_text(M("TP_LOCALLAB_EXPOSURE_TOOLTIP"));
+ expcomp->set_tooltip_text(M("TP_LOCALLAB_EXPCOMP_TOOLTIP"));
expMethod->set_tooltip_text(M("TP_LOCALLAB_EXPMETHOD_TOOLTIP"));
structexp->set_tooltip_text(M("TP_LOCALLAB_STRUCT_TOOLTIP"));
pdeFrame->set_tooltip_text(M("TP_LOCALLAB_PDEFRAME_TOOLTIP"));
@@ -2491,29 +2481,6 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips)
expchroma->set_tooltip_text(M("TP_LOCALLAB_EXPCHROMA_TOOLTIP"));
} else {
exp->set_tooltip_text("");
- expMethod->set_tooltip_text("");
- structexp->set_tooltip_text("");
- pdeFrame->set_tooltip_text("");
- exnoiseMethod->set_tooltip_text("");
- laplacexp->set_tooltip_text(M(""));
- balanexp->set_tooltip_text(M(""));
- gamm->set_tooltip_text(M(""));
- linear->set_tooltip_text(M(""));
- fatFrame->set_tooltip_text("");
- sensiex->set_tooltip_text("");
- shapeexpos->setTooltip("");
- strexp->set_tooltip_text("");
- expmaskexp->set_tooltip_text("");
- CCmaskexpshape->setTooltip("");
- LLmaskexpshape->setTooltip("");
- HHmaskexpshape->setTooltip("");
- radmaskexp->set_tooltip_text("");
- lapmaskexp->set_tooltip_text("");
- strmaskexp->set_tooltip_text("");
- Lmaskexpshape->setTooltip("");
- blendmaskexp->set_tooltip_text(M(""));
- mask2expCurveEditorG->set_tooltip_text(M(""));
- expchroma->set_tooltip_text(M(""));
}
}
@@ -3031,6 +2998,8 @@ void LocallabExposure::convertParamToNormal()
slomaskexp->setValue(defSpot.slomaskexp);
strmaskexp->setValue(defSpot.strmaskexp);
angmaskexp->setValue(defSpot.angmaskexp);
+ structexp->setValue((double)defSpot.structexp);
+
// laplacexp->setValue(defSpot.laplacexp);
// linear->setValue(defSpot.linear);
// balanexp->setValue(defSpot.balanexp);
@@ -3049,6 +3018,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type)
slomaskexp->hide();
gradFramemask->hide();
blurexpde->hide();
+ structexp->hide();
// pdeFrame->hide();
} else {
// Advanced widgets are shown in Expert mode
@@ -3057,6 +3027,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type)
slomaskexp->show();
gradFramemask->show();
blurexpde->show();
+ structexp->show();
// pdeFrame->show();
}
}
@@ -3204,7 +3175,7 @@ void LocallabExposure::updateExposureGUI2()
pdeFrame->hide();
fatFrame->hide();
softradiusexp->set_sensitive(true);
- sensiex->set_sensitive(false);
+ sensiex->set_sensitive(true);
} else if (expMethod->get_active_row_number() == 1) {
pdeFrame->show();
fatFrame->show();
@@ -3229,8 +3200,9 @@ void LocallabExposure::updateExposureGUI3()
updateExposureGUI2();
}
- structexp->hide();
- shadex->hide();
+ //structexp->hide();
+ // shadex->hide();
+ shadex->show();
softradiusexp->hide();
expgradexp->hide();
showmaskexpMethod->hide();
@@ -3241,7 +3213,7 @@ void LocallabExposure::updateExposureGUI3()
showmaskexpMethodinv->show();
} else {
expMethod->show();
- structexp->show();
+ //structexp->show();
shadex->show();
softradiusexp->show();
expgradexp->show();
@@ -3303,7 +3275,7 @@ LocallabShadow::LocallabShadow():
LLmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
@@ -3394,7 +3366,7 @@ LocallabShadow::LocallabShadow():
blendmaskSH->setAdjusterListener(this);
- radmaskSH->setLogScale(10, -10);
+ //radmaskSH->setLogScale(10, -10);
radmaskSH->setAdjusterListener(this);
lapmaskSH->setAdjusterListener(this);
@@ -3491,7 +3463,7 @@ void LocallabShadow::resetMaskView()
showmaskSHMethodConninv.block(false);
}
-void LocallabShadow::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabShadow::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
shMask = showmaskSHMethod->get_active_row_number();
shMaskinv = showmaskSHMethodinv->get_active_row_number();
@@ -3518,21 +3490,6 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips)
mask2SHCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
} else {
exp->set_tooltip_text("");
- strSH->set_tooltip_text("");
- expmasksh->set_tooltip_text("");
- CCmaskSHshape->setTooltip("");
- LLmaskSHshape->setTooltip("");
- HHmaskSHshape->setTooltip("");
- radmaskSH->set_tooltip_text("");
- lapmaskSH->set_tooltip_text("");
- LmaskSHshape->setTooltip("");
- for (unsigned int i = 0; i < multipliersh.size(); i++) {
- multipliersh[i]->set_tooltip_text(M(""));
- }
- gamSH->set_tooltip_text(M(""));
- sloSH->set_tooltip_text(M(""));
- blendmaskSH->set_tooltip_text(M(""));
- mask2SHCurveEditorG->set_tooltip_text(M(""));
}
}
@@ -4148,7 +4105,7 @@ LocallabVibrance::LocallabVibrance():
LLmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
@@ -4242,7 +4199,7 @@ LocallabVibrance::LocallabVibrance():
blendmaskvib->setAdjusterListener(this);
- radmaskvib->setLogScale(10, -10);
+ //radmaskvib->setLogScale(10, -10);
radmaskvib->setAdjusterListener(this);
lapmaskvib->setAdjusterListener(this);
@@ -4312,7 +4269,7 @@ void LocallabVibrance::resetMaskView()
showmaskvibMethodConn.block(false);
}
-void LocallabVibrance::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabVibrance::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
vibMask = showmaskvibMethod->get_active_row_number();
}
@@ -4329,16 +4286,8 @@ void LocallabVibrance::updateAdviceTooltips(const bool showTooltips)
Lmaskvibshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
blendmaskvib->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
mask2vibCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
- } else {
- warm->set_tooltip_text("");
- strvib->set_tooltip_text("");
- expmaskvib->set_tooltip_text("");
- CCmaskvibshape->setTooltip("");
- LLmaskvibshape->setTooltip("");
- HHmaskvibshape->setTooltip("");
- Lmaskvibshape->setTooltip("");
- blendmaskvib->set_tooltip_text(M(""));
- mask2vibCurveEditorG->set_tooltip_text(M(""));
+ } else {
+ exp->set_tooltip_text("");
}
}
@@ -4938,7 +4887,7 @@ void LocallabSoft::resetMaskView()
showmasksoftMethodConn.block(false);
}
-void LocallabSoft::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabSoft::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
softMask = showmasksoftMethod->get_active_row_number();
}
@@ -4946,17 +4895,14 @@ void LocallabSoft::getMaskView(int &colorMask, int &colorMaskinv, int &expMask,
void LocallabSoft::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
- softMethod->set_tooltip_markup(M("TP_LOCALLAB_SOFTMETHOD_TOOLTIP"));
+ exp->set_tooltip_markup(M("TP_LOCALLAB_SOFTMETHOD_TOOLTIP"));
+ //softMethod->set_tooltip_markup(M("TP_LOCALLAB_SOFTMETHOD_TOOLTIP"));
// ctboxsoftmethod->set_tooltip_markup(M("TP_LOCALLAB_ORRETISTEP_TOOLTIP"));
showmasksoftMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP"));
streng->set_tooltip_text(M("TP_LOCALLAB_ORRETISTREN_TOOLTIP"));
laplace->set_tooltip_text(M("TP_LOCALLAB_ORRETILAP_TOOLTIP"));
} else {
- softMethod->set_tooltip_markup(M(""));
- // ctboxsoftmethod->set_tooltip_markup(M(""));
- showmasksoftMethod->set_tooltip_markup(M(""));
- streng->set_tooltip_text(M(""));
- laplace->set_tooltip_text(M(""));
+ exp->set_tooltip_text("");
}
}
@@ -5227,7 +5173,7 @@ LocallabBlur::LocallabBlur():
strumaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))),
toolbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))),
blendmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))),
@@ -5499,7 +5445,7 @@ void LocallabBlur::resetMaskView()
showmaskblMethodConn.block(false);
}
-void LocallabBlur::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabBlur::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
blMask = showmaskblMethod->get_active_row_number();
}
@@ -5525,23 +5471,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
blendmaskbl->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
showmaskblMethodtyp->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKTYP_TOOLTIP"));
} else {
- expblnoise->set_tooltip_text("");
- radius->set_tooltip_text("");
- sensibn->set_tooltip_text("");
- blurMethod->set_tooltip_text("");
- expdenoise->set_tooltip_text("");
- wavshapeden->setTooltip("");
- noiselumc->set_tooltip_text("");
- expmaskbl->set_tooltip_text("");
- CCmaskblshape->setTooltip("");
- LLmaskblshape->setTooltip("");
- HHmaskblshape->setTooltip("");
- radmaskbl->set_tooltip_text("");
- lapmaskbl->set_tooltip_text("");
- Lmaskblshape->setTooltip("");
- LLmaskblshapewav->setTooltip("");
- blendmaskbl->set_tooltip_text(M(""));
- showmaskblMethodtyp->set_tooltip_markup(M(""));
+ exp->set_tooltip_text("");
}
}
diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h
index 4e6b30f00..5b64e4edb 100644
--- a/rtgui/locallabtools.h
+++ b/rtgui/locallabtools.h
@@ -123,7 +123,7 @@ public:
return false;
};
virtual void resetMaskView() {};
- virtual void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) {};
+ virtual void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) {};
// Advice tooltips management function
virtual void updateAdviceTooltips(const bool showTooltips) {};
@@ -174,6 +174,7 @@ class LocallabColor:
{
private:
// Color & Light specific widgets
+ Gtk::Frame* const lumFrame;
Gtk::CheckButton* const curvactiv;
Adjuster* const lightness;
Adjuster* const contrast;
@@ -259,7 +260,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -369,7 +370,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -454,7 +455,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -532,7 +533,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -588,7 +589,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -684,7 +685,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -765,7 +766,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -855,7 +856,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -913,7 +914,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -945,6 +946,7 @@ private:
Adjuster* const lcamount;
Adjuster* const lcdarkness;
Adjuster* const lclightness;
+ Gtk::Frame* const contFrame;
Adjuster* const sigmalc;
CurveEditorGroup* const LocalcurveEditorwav;
FlatCurveEditor* const wavshape;
@@ -1033,7 +1035,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -1086,6 +1088,7 @@ class LocallabCBDL:
{
private:
const std::array multiplier;
+ Gtk::Frame* const levFrame;
Adjuster* const chromacbdl;
Adjuster* const threshold;
Adjuster* const blurcbdl;
@@ -1123,7 +1126,7 @@ public:
bool isMaskViewActive() override;
void resetMaskView() override;
- void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask) override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
void updateAdviceTooltips(const bool showTooltips) override;
@@ -1196,4 +1199,87 @@ private:
void updateLogGUI();
};
+
+/* ==== LocallabMask ==== */
+class LocallabMask:
+ public Gtk::VBox,
+ public LocallabTool,
+ public ThresholdAdjusterListener
+{
+private:
+ Adjuster* const sensimask;
+ Adjuster* const blendmask;
+ Adjuster* const blendmaskab;
+ Adjuster* const softradiusmask;
+
+ MyComboBoxText* const showmask_Method;
+ Gtk::CheckButton* const enamask;
+ CurveEditorGroup* const mask_CurveEditorG;
+ FlatCurveEditor* const CCmask_shape;
+ FlatCurveEditor* const LLmask_shape;
+ FlatCurveEditor* const HHmask_shape;
+ Gtk::Frame* const struFrame;
+ Adjuster* const strumaskmask;
+ Gtk::CheckButton* const toolmask;
+ Gtk::Frame* const blurFrame;
+ Gtk::CheckButton* const fftmask;
+ Adjuster* const contmask;
+ Adjuster* const blurmask;
+
+ Adjuster* const radmask;
+ Adjuster* const lapmask;
+ Adjuster* const chromask;
+ Adjuster* const gammask;
+ Adjuster* const slopmask;
+ Adjuster* const shadmask;
+ CurveEditorGroup* const mask_HCurveEditorG;
+ FlatCurveEditor* const HHhmask_shape;
+ CurveEditorGroup* const mask2CurveEditorG;
+ DiagonalCurveEditor* const Lmask_shape;
+ CurveEditorGroup* const mask2CurveEditorGwav;
+ FlatCurveEditor* const LLmask_shapewav;
+ ThresholdAdjuster* const csThresholdmask;
+ Gtk::Frame* const gradFramemask;
+ Adjuster* const str_mask;
+ Adjuster* const ang_mask;
+
+ sigc::connection showmask_MethodConn, enamaskConn, toolmaskConn, fftmaskConn;
+
+public:
+ LocallabMask();
+ ~LocallabMask();
+
+ bool isMaskViewActive() override;
+ void resetMaskView() override;
+ void getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask) override;
+
+ void updateAdviceTooltips(const bool showTooltips) override;
+
+ void disableListener() override;
+ void enableListener() override;
+ void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override;
+ void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override;
+ void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override;
+ void adjusterChanged(Adjuster* a, double newval) override;
+ void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) override {}; // Not used
+ void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) override {}; // Not used
+ void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) override {}; // Not used
+ void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) override {}; // Not used
+ void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) override;
+ void curveChanged(CurveEditor* ce) override;
+
+
+private:
+ void enabledChanged() override;
+ void showmask_MethodChanged();
+ void enamaskChanged();
+ void toolmaskChanged();
+ void convertParamToNormal() override;
+ void updateGUIToMode(const modeType new_type) override;
+ void fftmaskChanged();
+ void updatemaskGUI3();
+ void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer) override;
+};
+
+
#endif
diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc
index 816bfcd30..8370843ff 100644
--- a/rtgui/locallabtools2.cc
+++ b/rtgui/locallabtools2.cc
@@ -126,7 +126,7 @@ LocallabTone::LocallabTone():
estop(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ESTOP"), 0.1, 4., 0.01, 1.4))),
scaltm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALTM"), 0.1, 10.0, 0.01, 1.0))),
rewei(Gtk::manage(new Adjuster(M("TP_LOCALLAB_REWEI"), 0, 3, 1, 0))),
- softradiustm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 1000.0, 0.1, 0.))),
+ softradiustm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.1, 0.))),
sensitm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 30))),
expmasktm(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWT")))),
showmasktmMethod(Gtk::manage(new MyComboBoxText())),
@@ -138,7 +138,7 @@ LocallabTone::LocallabTone():
HHmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
lapmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
- radmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))),
slomasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
@@ -205,7 +205,7 @@ LocallabTone::LocallabTone():
lapmasktm->setAdjusterListener(this);
- radmasktm->setLogScale(10, -10);
+ //radmasktm->setLogScale(10, -10);
radmasktm->setAdjusterListener(this);
chromasktm->setAdjusterListener(this);
@@ -266,7 +266,7 @@ void LocallabTone::resetMaskView()
showmasktmMethodConn.block(false);
}
-void LocallabTone::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabTone::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
tmMask = showmasktmMethod->get_active_row_number();
}
@@ -292,21 +292,6 @@ void LocallabTone::updateAdviceTooltips(const bool showTooltips)
mask2tmCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
} else {
exp->set_tooltip_text("");
- estop->set_tooltip_text("");
- rewei->set_tooltip_text("");
- scaltm->set_tooltip_text(M(""));
- gamma->set_tooltip_text(M(""));
- equiltm->set_tooltip_text(M(""));
- sensitm->set_tooltip_text("");
- expmasktm->set_tooltip_text("");
- CCmasktmshape->setTooltip("");
- LLmasktmshape->setTooltip("");
- HHmasktmshape->setTooltip("");
- lapmasktm->set_tooltip_text("");
- radmasktm->set_tooltip_text("");
- Lmasktmshape->setTooltip("");
- blendmasktm->set_tooltip_text(M(""));
- mask2tmCurveEditorG->set_tooltip_text(M(""));
}
}
@@ -748,7 +733,7 @@ LocallabRetinex::LocallabRetinex():
darkness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DARKRETI"), 0.01, 6.0, 0.01, 2.0))),
lightnessreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTRETI"), 0.01, 4.0, 0.01, 1.))),
cliptm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLIPTM"), 0.02, 2.0, 0.01, 1.))),
- softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRETI"), 0.0, 1000.0, 0.5, 40.))),
+ softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRETI"), 0.0, 100.0, 0.5, 40.))),
LocalcurveEditortransT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONMAP"))),
cTtransshape(static_cast(LocalcurveEditortransT->addCurve(CT_Flat, "", nullptr, false, false))),
mMLabels(Gtk::manage(new Gtk::Label("---"))),
@@ -765,7 +750,7 @@ LocallabRetinex::LocallabRetinex():
LLmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 10.))),
+ radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))),
lapmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))),
@@ -1011,7 +996,7 @@ void LocallabRetinex::resetMaskView()
showmaskretiMethodConn.block(false);
}
-void LocallabRetinex::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabRetinex::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
retiMask = showmaskretiMethod->get_active_row_number();
}
@@ -1046,34 +1031,9 @@ void LocallabRetinex::updateAdviceTooltips(const bool showTooltips)
Lmaskretishape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
blendmaskreti->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
mask2retiCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
- } else {
- sensih->set_tooltip_text("");
- fftwreti->set_tooltip_text("");
- neigh->set_tooltip_text("");
- vart->set_tooltip_text("");
- loglin->set_tooltip_text(M(""));
- scalereti->set_tooltip_text(M(""));
- limd->set_tooltip_text(M(""));
- offs->set_tooltip_text(M(""));
- lightnessreti->set_tooltip_text(M(""));
- darkness->set_tooltip_text(M(""));
- equilret->set_tooltip_text(M(""));
- softradiusret->set_tooltip_text("");
- cTtransshape->setTooltip("");
- mMLabels->set_tooltip_text("");
- transLabels->set_tooltip_text("");
- cTgainshape->setTooltip("");
- expmaskreti->set_tooltip_text("");
- enaretiMasktmap->set_tooltip_text("");
- CCmaskretishape->setTooltip("");
- LLmaskretishape->setTooltip("");
- HHmaskretishape->setTooltip("");
- radmaskreti->set_tooltip_text("");
- lapmaskreti->set_tooltip_text("");
- Lmaskretishape->setTooltip("");
- blendmaskreti->set_tooltip_text(M(""));
- mask2retiCurveEditorG->set_tooltip_text(M(""));
- }
+ } else {
+ exp->set_tooltip_text("");
+ }
}
void LocallabRetinex::setDefaultExpanderVisibility()
@@ -1820,7 +1780,7 @@ void LocallabSharp::resetMaskView()
showmasksharMethodConn.block(false);
}
-void LocallabSharp::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabSharp::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
sharMask = showmasksharMethod->get_active_row_number();
}
@@ -1832,7 +1792,6 @@ void LocallabSharp::updateAdviceTooltips(const bool showTooltips)
sensisha->set_tooltip_text(M("TP_LOCALLAB_SENSIS_TOOLTIP"));
} else {
exp->set_tooltip_text("");
- sensisha->set_tooltip_text("");
}
}
@@ -2074,6 +2033,7 @@ LocallabContrast::LocallabContrast():
lcamount(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_AMOUNT"), 0, 1.0, 0.01, 0))),
lcdarkness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_DARKNESS"), 0, 3.0, 0.01, 1.0))),
lclightness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_LIGHTNESS"), 0, 3.0, 0.01, 1.0))),
+ contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTWFRA")))),
sigmalc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
LocalcurveEditorwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAV"))),
wavshape(static_cast(LocalcurveEditorwav->addCurve(CT_Flat, "", nullptr, false, false))),
@@ -2090,7 +2050,7 @@ LocallabContrast::LocallabContrast():
clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))),
clarilres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARILRES"), -20., 100., 0.5, 0.))),
claricres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARICRES"), -20., 100., 0.5, 0.))),
- clarisoft(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 1000.0, 0.5, 1.))),
+ clarisoft(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 1.))),
origlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ORIGLC")))),
expcontrastpyr(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::HBox())))),
wavgradl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_GRALWFRA")))),
@@ -2149,7 +2109,7 @@ LocallabContrast::LocallabContrast():
LLmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
mask2lcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmasklcshape(static_cast(mask2lcCurveEditorG->addCurve(CT_Diagonal, "L(L)")))
@@ -2169,6 +2129,9 @@ LocallabContrast::LocallabContrast():
lcdarkness->setAdjusterListener(this);
lclightness->setAdjusterListener(this);
+
+ contFrame->set_label_align(0.025, 0.5);
+
sigmalc->setAdjusterListener(this);
LocalcurveEditorwav->setCurveListener(this);
@@ -2382,7 +2345,7 @@ LocallabContrast::LocallabContrast():
blendmasklc->setAdjusterListener(this);
- radmasklc->setLogScale(10, -10);
+ // radmasklc->setLogScale(10, -10);
radmasklc->setAdjusterListener(this);
chromasklc->setAdjusterListener(this);
@@ -2396,15 +2359,23 @@ LocallabContrast::LocallabContrast():
mask2lcCurveEditorG->curveListComplete();
// Add Local contrast specific widgets to GUI
+ ToolParamBlock* const coBox = Gtk::manage(new ToolParamBlock());
+ coBox->pack_start(*sigmalc);
+ coBox->pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
+ // pack_start(*levelwav);
+ coBox->pack_start(*csThreshold);
+ contFrame->add(*coBox);
+
pack_start(*localcontMethod);
pack_start(*lcradius);
pack_start(*lcamount);
pack_start(*lcdarkness);
pack_start(*lclightness);
- pack_start(*sigmalc);
- pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
+ pack_start(*contFrame);
+// pack_start(*sigmalc);
+// pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
// pack_start(*levelwav);
- pack_start(*csThreshold);
+// pack_start(*csThreshold);
Gtk::Frame* const shresFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHRESFRA")));
shresFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const resiBox = Gtk::manage(new ToolParamBlock());
@@ -2563,7 +2534,7 @@ void LocallabContrast::resetMaskView()
showmasklcMethodConn.block(false);
}
-void LocallabContrast::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabContrast::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
lcMask = showmasklcMethod->get_active_row_number();
}
@@ -2571,7 +2542,7 @@ void LocallabContrast::getMaskView(int &colorMask, int &colorMaskinv, int &expMa
void LocallabContrast::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
- exp->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRAST_TOOLTIP"));
+ contFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRAST_TOOLTIP"));
levelwav->set_tooltip_markup(M("TP_LOCALLAB_LEVELWAV_TOOLTIP"));
LocalcurveEditorwav->set_tooltip_markup(M("TP_LOCALLAB_LEVELLOCCONTRAST_TOOLTIP"));
wavgradl->set_tooltip_text(M("TP_LOCALLAB_WAVGRAD_TOOLTIP"));
@@ -2594,30 +2565,8 @@ void LocallabContrast::updateAdviceTooltips(const bool showTooltips)
expcontrastpyr2->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP"));
blendmasklc->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
mask2lcCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
- } else {
+ } else {
exp->set_tooltip_text("");
- levelwav->set_tooltip_text("");
- LocalcurveEditorwav->set_tooltip_markup(M(""));
- wavgradl->set_tooltip_text("");
- clariFrame->set_tooltip_text("");
- clarisoft->set_tooltip_text("");
- wavedg->set_tooltip_text("");
- wavblur->set_tooltip_text(M(""));
- wavcont->set_tooltip_text(M(""));
- wavcompre->set_tooltip_text(M(""));
- wavcomp->set_tooltip_text(M(""));
- chromablu->set_tooltip_text("");
- chromalev->set_tooltip_text("");
- fftwlc->set_tooltip_text("");
- expmasklc->set_tooltip_text("");
- CCmasklcshape->setTooltip("");
- LLmasklcshape->setTooltip("");
- HHmasklcshape->setTooltip("");
- Lmasklcshape->setTooltip("");
- expcontrastpyr->set_tooltip_text(M(""));
- expcontrastpyr2->set_tooltip_text(M(""));
- blendmasklc->set_tooltip_text(M(""));
- mask2lcCurveEditorG->set_tooltip_text(M(""));
}
}
@@ -3655,6 +3604,7 @@ void LocallabContrast::updateContrastGUI1()
lcamount->show();
lcdarkness->show();
lclightness->show();
+ contFrame->hide();
sigmalc->hide();
LocalcurveEditorwav->hide();
levelwav->hide();
@@ -3669,6 +3619,7 @@ void LocallabContrast::updateContrastGUI1()
lcamount->hide();
lcdarkness->hide();
lclightness->hide();
+ contFrame->show();
sigmalc->show();
LocalcurveEditorwav->show();
levelwav->show();
@@ -3729,12 +3680,13 @@ LocallabCBDL::LocallabCBDL():
return res;
}
()),
+ levFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LEVFRA")))),
chromacbdl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMACBDL"), 0., 1.5, 0.01, 0.))),
threshold(Gtk::manage(new Adjuster(M("TP_DIRPYREQUALIZER_THRESHOLD"), 0, 1., 0.01, 0.2))),
blurcbdl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCBDL"), 0., 100., 0.1, 0.))),
clarityml(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARITYML"), 0.1, 100., 0.1, 0.1))),
contresid(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRESID"), -100, 100, 1, 0))),
- softradiuscb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 1000.0, 0.5, 0.))),
+ softradiuscb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 0.))),
sensicb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSICB"), 0, 100, 1, 60))),
expmaskcb(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWCB")))),
showmaskcbMethod(Gtk::manage(new MyComboBoxText())),
@@ -3744,7 +3696,7 @@ LocallabCBDL::LocallabCBDL():
LLmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
HHmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
blendmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
- radmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))),
+ radmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
@@ -3808,7 +3760,7 @@ LocallabCBDL::LocallabCBDL():
blendmaskcb->setAdjusterListener(this);
- radmaskcb->setLogScale(10, -10);
+ // radmaskcb->setLogScale(10, -10);
radmaskcb->setAdjusterListener(this);
lapmaskcb->setAdjusterListener(this);
@@ -3834,20 +3786,23 @@ LocallabCBDL::LocallabCBDL():
lumacontrastPlusPressedConn = lumacontrastPlusButton->signal_pressed().connect(sigc::mem_fun(*this, &LocallabCBDL::lumacontrastPlusPressed));
// Add CBDL specific widgets to GUI
+ ToolParamBlock* const levBox = Gtk::manage(new ToolParamBlock());
Gtk::HBox* buttonBox = Gtk::manage(new Gtk::HBox(true, 10));
buttonBox->pack_start(*lumacontrastMinusButton);
buttonBox->pack_start(*lumaneutralButton);
buttonBox->pack_start(*lumacontrastPlusButton);
- pack_start(*buttonBox);
+ levBox->pack_start(*buttonBox);
for (const auto adj : multiplier) {
- pack_start(*adj);
+ levBox->pack_start(*adj);
}
Gtk::HSeparator* const separator = Gtk::manage(new Gtk::HSeparator());
- pack_start(*separator, Gtk::PACK_SHRINK, 2);
- pack_start(*chromacbdl);
- pack_start(*threshold);
+ levBox->pack_start(*separator, Gtk::PACK_SHRINK, 2);
+ levBox->pack_start(*chromacbdl);
+ levBox->pack_start(*threshold);
+ levFrame->add(*levBox);
+ pack_start(*levFrame);
// pack_start(*blurcbdl);
Gtk::Frame* const residFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")));
residFrame->set_label_align(0.025, 0.5);
@@ -3892,7 +3847,7 @@ void LocallabCBDL::resetMaskView()
showmaskcbMethodConn.block(false);
}
-void LocallabCBDL::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask)
+void LocallabCBDL::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
{
cbMask = showmaskcbMethod->get_active_row_number();
}
@@ -3900,7 +3855,7 @@ void LocallabCBDL::getMaskView(int &colorMask, int &colorMaskinv, int &expMask,
void LocallabCBDL::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
- exp->set_tooltip_text(M("TP_LOCALLAB_EXPCBDL_TOOLTIP"));
+ levFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCBDL_TOOLTIP"));
for (const auto adj : multiplier) {
adj->set_tooltip_text(M("TP_LOCALLAB_CBDL_ADJ_TOOLTIP"));
}
@@ -3919,22 +3874,6 @@ void LocallabCBDL::updateAdviceTooltips(const bool showTooltips)
mask2cbCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
} else {
exp->set_tooltip_text("");
- for (const auto adj : multiplier) {
- adj->set_tooltip_text(M(""));
- }
- threshold->set_tooltip_text(M(""));
- chromacbdl->set_tooltip_text("");
- clarityml->set_tooltip_text(M(""));
- sensicb->set_tooltip_text("");
- expmaskcb->set_tooltip_text("");
- CCmaskcbshape->setTooltip("");
- LLmaskcbshape->setTooltip("");
- HHmaskcbshape->setTooltip("");
- radmaskcb->set_tooltip_text("");
- lapmaskcb->set_tooltip_text("");
- Lmaskcbshape->setTooltip("");
- blendmaskcb->set_tooltip_text(M(""));
- mask2cbCurveEditorG->set_tooltip_text(M(""));
}
}
@@ -4437,17 +4376,6 @@ void LocallabLog::updateAdviceTooltips(const bool showTooltips)
anglog->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP"));
} else {
exp->set_tooltip_text(M(""));
- logPFrame->set_tooltip_text("");
- autocompute->set_tooltip_text(M(""));
- blackEv->set_tooltip_text(M(""));
- whiteEv->set_tooltip_text(M(""));
- Autogray->set_tooltip_text(M(""));
- sourceGray->set_tooltip_text(M(""));
- targetGray->set_tooltip_text(M(""));
- detail->set_tooltip_text(M(""));
- baselog->set_tooltip_text(M(""));
- strlog->set_tooltip_text(M(""));
- anglog->set_tooltip_text(M(""));
}
}
@@ -4723,3 +4651,743 @@ void LocallabLog::updateLogGUI()
// targetGray->set_sensitive(true);
}
}
+
+
+/* ==== LocallabMask ==== */
+LocallabMask::LocallabMask():
+ LocallabTool(this, M("TP_LOCALLAB_MASKCOM_TOOLNAME"), M("TP_LOCALLAB_MASKCOM"), false),
+
+ // Comon mask specific widgets
+ sensimask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
+ blendmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMASK"), -100., 100., 0.1, -10.))),
+ blendmaskab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMASKAB"), -100., 100., 0.1, -10.))),
+ softradiusmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 1.))),
+
+ showmask_Method(Gtk::manage(new MyComboBoxText())),
+ enamask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
+ mask_CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))),
+ CCmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))),
+ LLmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
+ HHmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))),
+
+ struFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))),
+ strumaskmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))),
+ toolmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))),
+ blurFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABBLURM")))),
+ fftmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTCOL_MASK")))),
+ contmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTCOL"), 0., 200., 0.5, 0.))),
+ blurmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCOL"), 0.2, 100., 0.5, 0.2))),
+
+ radmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
+ lapmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
+ chromask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
+ gammask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
+ slopmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
+ shadmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))),
+
+ mask_HCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKH"))),
+ HHhmask_shape(static_cast(mask_HCurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true))),
+ mask2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
+ Lmask_shape(static_cast(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
+ mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))),
+ LLmask_shapewav(static_cast(mask2CurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
+ csThresholdmask(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))),
+ gradFramemask(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADFRA")))),
+ str_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))),
+ ang_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.)))
+
+{
+ // Parameter Mask common specific widgets
+ const LocallabParams::LocallabSpot defSpot;
+
+ sensimask->setAdjusterListener(this);
+ blendmask->setLogScale(10, 0);
+ blendmaskab->setLogScale(10, 0);
+ blendmask->setAdjusterListener(this);
+ blendmaskab->setAdjusterListener(this);
+ // softradiusmask->setLogScale(10, -10);
+ softradiusmask->setAdjusterListener(this);
+ showmask_Method->append(M("TP_LOCALLAB_SHOWMNONE"));
+ showmask_Method->append(M("TP_LOCALLAB_SHOWMODIFMASK"));
+ showmask_Method->append(M("TP_LOCALLAB_SHOWMASK"));
+ showmask_Method->append(M("TP_LOCALLAB_SHOWREF"));
+ showmask_Method->set_active(0);
+ showmask_Method->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
+ showmask_MethodConn = showmask_Method->signal_changed().connect(sigc::mem_fun(*this, &LocallabMask::showmask_MethodChanged));
+ enamaskConn = enamask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::enamaskChanged));
+ mask_CurveEditorG->setCurveListener(this);
+
+ CCmask_shape->setIdentityValue(0.);
+ CCmask_shape->setResetCurve(FlatCurveType(defSpot.CCmask_curve.at(0)), defSpot.CCmask_curve);
+ CCmask_shape->setBottomBarColorProvider(this, 1);
+
+ LLmask_shape->setIdentityValue(0.);
+ LLmask_shape->setResetCurve(FlatCurveType(defSpot.LLmask_curve.at(0)), defSpot.LLmask_curve);
+ LLmask_shape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
+
+ HHmask_shape->setIdentityValue(0.);
+ HHmask_shape->setResetCurve(FlatCurveType(defSpot.HHmask_curve.at(0)), defSpot.HHmask_curve);
+ HHmask_shape->setCurveColorProvider(this, 2);
+ HHmask_shape->setBottomBarColorProvider(this, 2);
+
+ mask_CurveEditorG->curveListComplete();
+
+ struFrame->set_label_align(0.025, 0.5);
+
+ strumaskmask->setAdjusterListener(this);
+
+ toolmaskConn = toolmask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::toolmaskChanged));
+ blurFrame->set_label_align(0.025, 0.5);
+
+ fftmaskConn = fftmask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::fftmaskChanged));
+ contmask->setAdjusterListener(this);
+
+ blurmask->setAdjusterListener(this);
+
+ radmask->setAdjusterListener(this);
+ lapmask->setAdjusterListener(this);
+ chromask->setAdjusterListener(this);
+ gammask->setAdjusterListener(this);
+ slopmask->setAdjusterListener(this);
+ shadmask->setAdjusterListener(this);
+
+ mask_HCurveEditorG->setCurveListener(this);
+
+ HHhmask_shape->setIdentityValue(0.);
+ HHhmask_shape->setResetCurve(FlatCurveType(defSpot.HHhmask_curve.at(0)), defSpot.HHhmask_curve);
+ HHhmask_shape->setCurveColorProvider(this, 2);
+ HHhmask_shape->setBottomBarColorProvider(this, 2);
+
+ mask_HCurveEditorG->curveListComplete();
+
+ mask2CurveEditorG->setCurveListener(this);
+
+ Lmask_shape->setResetCurve(DiagonalCurveType(defSpot.Lmask_curve.at(0)), defSpot.Lmask_curve);
+ Lmask_shape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
+ Lmask_shape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
+
+ mask2CurveEditorG->curveListComplete();
+
+ mask2CurveEditorGwav->setCurveListener(this);
+
+ csThresholdmask->setAdjusterListener(this);
+
+ LLmask_shapewav->setIdentityValue(0.);
+ LLmask_shapewav->setResetCurve(FlatCurveType(defSpot.LLmask_curvewav.at(0)), defSpot.LLmask_curvewav);
+ LLmask_shapewav->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
+
+ mask2CurveEditorGwav->curveListComplete();
+
+ pack_start(*sensimask, Gtk::PACK_SHRINK, 0);
+ pack_start(*blendmask, Gtk::PACK_SHRINK, 0);
+ pack_start(*blendmaskab, Gtk::PACK_SHRINK, 0);
+ pack_start(*softradiusmask, Gtk::PACK_SHRINK, 0);
+ ToolParamBlock* const maskmaskBox = Gtk::manage(new ToolParamBlock());
+ maskmaskBox->pack_start(*showmask_Method, Gtk::PACK_SHRINK, 4);
+ maskmaskBox->pack_start(*mask_CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
+ maskmaskBox->pack_start(*enamask, Gtk::PACK_SHRINK, 0);
+
+ ToolParamBlock* const strumBox = Gtk::manage(new ToolParamBlock());
+ strumBox->pack_start(*strumaskmask);
+ strumBox->pack_start(*toolmask);
+
+ struFrame->add(*strumBox);
+ maskmaskBox->pack_start(*struFrame, Gtk::PACK_SHRINK, 0);
+
+ ToolParamBlock* const blurmBox = Gtk::manage(new ToolParamBlock());
+ blurmBox->pack_start(*fftmask, Gtk::PACK_SHRINK, 0);
+ blurmBox->pack_start(*contmask);
+ blurmBox->pack_start(*blurmask);
+ blurFrame->add(*blurmBox);
+ maskmaskBox->pack_start(*blurFrame, Gtk::PACK_SHRINK, 0);
+
+
+ gradFramemask->set_label_align(0.025, 0.5);
+
+ str_mask->setAdjusterListener(this);
+
+ ang_mask->setAdjusterListener(this);
+ ang_mask->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP"));
+ ToolParamBlock* const gradmaskBox = Gtk::manage(new ToolParamBlock());
+ gradmaskBox->pack_start(*str_mask);
+ gradmaskBox->pack_start(*ang_mask);
+ gradFramemask->add(*gradmaskBox);
+
+ Gtk::Frame* const toolmaskFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")));
+ toolmaskFrame->set_label_align(0.025, 0.5);
+ ToolParamBlock* const toolmaskBox = Gtk::manage(new ToolParamBlock());
+
+ toolmaskBox->pack_start(*radmask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*lapmask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*chromask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*gammask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*slopmask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*shadmask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*mask_HCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
+ toolmaskBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
+ toolmaskBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
+ toolmaskBox->pack_start(*csThresholdmask, Gtk::PACK_SHRINK, 0);
+ toolmaskBox->pack_start(*gradFramemask, Gtk::PACK_SHRINK, 0);
+ toolmaskFrame->add(*toolmaskBox);
+ maskmaskBox->pack_start(*toolmaskFrame);
+ pack_start(*maskmaskBox);
+}
+
+bool LocallabMask::isMaskViewActive()
+{
+ return ((showmask_Method->get_active_row_number() != 0));
+}
+
+
+void LocallabMask::resetMaskView()
+{
+ showmask_MethodConn.block(true);
+
+ showmask_Method->set_active(0);
+
+ showmask_MethodConn.block(false);
+}
+
+void LocallabMask::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &maskMask)
+{
+ maskMask = showmask_Method->get_active_row_number();
+}
+
+void LocallabMask::updateAdviceTooltips(const bool showTooltips)
+{
+ if (showTooltips) {
+ exp->set_tooltip_text(M("TP_LOCALLAB_MASKCOM_TOOLTIP"));
+ sensimask->set_tooltip_text(M("TP_LOCALLAB_SENSIMASK_TOOLTIP"));
+ blendmask->set_tooltip_text(M("TP_LOCALLAB_BLENDMASKMASK_TOOLTIP"));
+ blendmaskab->set_tooltip_text(M("TP_LOCALLAB_BLENDMASKMASK_TOOLTIP"));
+ CCmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP"));
+ LLmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP"));
+ HHmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP"));
+ struFrame->set_tooltip_text(M("TP_LOCALLAB_STRUMASK_TOOLTIP"));
+ mask_HCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_HHMASK_TOOLTIP"));
+ radmask->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
+ lapmask->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
+ mask2CurveEditorG->set_tooltip_text(M("TP_LOCALLAB_WAVMASK_TOOLTIP"));
+ Lmask_shape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
+ mask2CurveEditorGwav->set_tooltip_text(M("TP_LOCALLAB_WAVMASK_TOOLTIP"));
+ LLmask_shapewav->setTooltip(M("TP_LOCALLAB_LMASK_LEVEL_TOOLTIP"));
+ } else {
+ exp->set_tooltip_text(M(""));
+ }
+}
+
+LocallabMask::~LocallabMask()
+{
+ delete mask_CurveEditorG;
+ delete mask_HCurveEditorG;
+ delete mask2CurveEditorG;
+ delete mask2CurveEditorGwav;
+}
+
+void LocallabMask::disableListener()
+{
+ LocallabTool::disableListener();
+ showmask_MethodConn.block(true);
+ enamaskConn.block(true);
+ toolmaskConn.block(true);
+ fftmaskConn.block(true);
+
+}
+
+void LocallabMask::enableListener()
+{
+ LocallabTool::enableListener();
+ showmask_MethodConn.block(false);
+ enamaskConn.block(false);
+ toolmaskConn.block(false);
+ fftmaskConn.block(false);
+
+}
+
+void LocallabMask::showmask_MethodChanged()
+{
+
+ // If mask preview is activated, deactivate all other tool mask preview
+ if (locToolListener) {
+ locToolListener->resetOtherMaskView(this);
+ }
+
+ if (listener) {
+ listener->panelChanged(EvlocallabshowmaskMethod, "");
+ }
+}
+
+
+void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
+{
+ // Disable all listeners
+ disableListener();
+
+ // Update GUI to selected spot value
+ const int index = pp->locallab.selspot;
+
+ if (index < (int)pp->locallab.spots.size()) {
+ const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
+
+ spotName = spot.name; // Update spot name according to selected spot
+
+ exp->set_visible(spot.visimask);
+ exp->setEnabled(spot.expmask);
+ complexity->set_active(spot.complexmask);
+
+
+ sensimask->setValue(spot.sensimask);
+ contmask->setValue(spot.contmask);
+ updatemaskGUI3();
+ blurmask->setValue(spot.blurmask);
+
+ blendmask->setValue(spot.blendmask);
+ blendmaskab->setValue(spot.blendmaskab);
+ softradiusmask->setValue(spot.softradiusmask);
+ enamask->set_active(spot.enamask);
+ CCmask_shape->setCurve(spot.CCmask_curve);
+ LLmask_shape->setCurve(spot.LLmask_curve);
+ HHmask_shape->setCurve(spot.HHmask_curve);
+ strumaskmask->setValue(spot.strumaskmask);
+ toolmask->set_active(spot.toolmask);
+ radmask->setValue(spot.radmask);
+ lapmask->setValue(spot.lapmask);
+ chromask->setValue(spot.chromask);
+ gammask->setValue(spot.gammask);
+ slopmask->setValue(spot.slopmask);
+ shadmask->setValue(spot.shadmask);
+ str_mask->setValue(spot.str_mask);
+ ang_mask->setValue(spot.ang_mask);
+ HHhmask_shape->setCurve(spot.HHhmask_curve);
+ fftmask->set_active(spot.fftmask);
+ Lmask_shape->setCurve(spot.Lmask_curve);
+ LLmask_shapewav->setCurve(spot.LLmask_curvewav);
+ csThresholdmask->setValue(spot.csthresholdmask);
+
+ }
+
+ // Enable all listeners
+ enableListener();
+
+ // Update GUI according to complexity mode
+ updateGUIToMode(static_cast(complexity->get_active_row_number()));
+
+
+ // Note: No need to manage pedited as batch mode is deactivated for Locallab
+}
+
+void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
+{
+ const int index = pp->locallab.selspot;
+
+ if (index < (int)pp->locallab.spots.size()) {
+ LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
+
+ spot.expmask = exp->getEnabled();
+ spot.visimask = exp->get_visible();
+ spot.complexmask = complexity->get_active_row_number();
+
+ spot.sensimask = sensimask->getIntValue();
+ spot.blendmask = blendmask->getValue();
+ spot.blendmaskab = blendmaskab->getValue();
+ spot.softradiusmask = softradiusmask->getValue();
+ spot.enamask = enamask->get_active();
+ spot.CCmask_curve = CCmask_shape->getCurve();
+ spot.LLmask_curve = LLmask_shape->getCurve();
+ spot.HHmask_curve = HHmask_shape->getCurve();
+ spot.strumaskmask = strumaskmask->getValue();
+ spot.toolmask = toolmask->get_active();
+ spot.radmask = radmask->getValue();
+ spot.lapmask = lapmask->getValue();
+ spot.chromask = chromask->getValue();
+ spot.gammask = gammask->getValue();
+ spot.slopmask = slopmask->getValue();
+ spot.shadmask = shadmask->getValue();
+ spot.str_mask = str_mask->getIntValue();
+ spot.ang_mask = ang_mask->getIntValue();
+ spot.HHhmask_curve = HHhmask_shape->getCurve();
+ spot.fftmask = fftmask->get_active();
+ spot.contmask = contmask->getValue();
+ spot.blurmask = blurmask->getValue();
+ spot.Lmask_curve = Lmask_shape->getCurve();
+ spot.LLmask_curvewav = LLmask_shapewav->getCurve();
+ spot.csthresholdmask = csThresholdmask->getValue();
+
+ }
+
+ // Note: No need to manage pedited as batch mode is deactivated for Locallab
+}
+
+void LocallabMask::enamaskChanged()
+{
+ if (isLocActivated && exp->getEnabled()) {
+ if (listener) {
+ if (enamask->get_active()) {
+ listener->panelChanged(EvLocallabEnaMask,
+ M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ } else {
+ listener->panelChanged(EvLocallabEnaMask,
+ M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+ }
+}
+
+
+
+void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
+{
+ const int index = defParams->locallab.selspot;
+
+ if (index < (int)defParams->locallab.spots.size()) {
+ const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
+
+ // Set default value for adjuster widgets
+ sensimask->setDefault((double)defSpot.sensimask);
+ strumaskmask->setDefault(defSpot.strumaskmask);
+ toolmask->set_active(defSpot.toolmask);
+ blendmask->setDefault(defSpot.blendmask);
+ blendmaskab->setDefault(defSpot.blendmaskab);
+ softradiusmask->setDefault((double)defSpot.softradiusmask);
+ radmask->setDefault(defSpot.radmask);
+ lapmask->setDefault(defSpot.lapmask);
+ chromask->setDefault(defSpot.chromask);
+ lapmask->setDefault(defSpot.lapmask);
+ slopmask->setDefault(defSpot.slopmask);
+ shadmask->setDefault(defSpot.shadmask);
+ str_mask->setDefault(defSpot.str_mask);
+ ang_mask->setDefault(defSpot.ang_mask);
+ HHhmask_shape->setCurve(defSpot.HHhmask_curve);
+ contmask->setDefault(defSpot.contmask);
+ blurmask->setDefault(defSpot.blurmask);
+ csThresholdmask->setDefault(defSpot.csthresholdmask);
+
+ }
+
+ // Note: No need to manage pedited as batch mode is deactivated for Locallab
+}
+
+void LocallabMask::updateGUIToMode(const modeType new_type)
+{
+ if (new_type == Normal) {
+ // Advanced widgets are hidden in Normal mode
+ lapmask->hide();
+ gammask->hide();
+ slopmask->hide();
+ shadmask->hide();
+ str_mask->hide();
+ ang_mask->hide();
+ struFrame->hide();
+ blurFrame->hide();
+ gradFramemask->hide();
+ mask_HCurveEditorG->hide();
+// mask2CurveEditorG->hide();
+ mask2CurveEditorGwav->hide();
+ csThresholdmask->hide();
+ softradiusmask->hide();
+ } else {
+ // Advanced widgets are shown in Expert mode
+ lapmask->show();
+ gammask->show();
+ slopmask->show();
+ shadmask->show();
+ str_mask->show();
+ ang_mask->show();
+ struFrame->show();
+ blurFrame->show();
+ gradFramemask->show();
+ mask_HCurveEditorG->show();
+// mask2CurveEditorG->show();
+ mask2CurveEditorGwav->show();
+ csThresholdmask->show();
+ softradiusmask->show();
+
+ }
+}
+
+void LocallabMask::convertParamToNormal()
+{
+ const LocallabParams::LocallabSpot defSpot;
+
+ // Disable all listeners
+ disableListener();
+
+ softradiusmask->setValue(defSpot.softradiusmask);
+ lapmask->setValue(defSpot.lapmask);
+ gammask->setValue(defSpot.gammask);
+ slopmask->setValue(defSpot.slopmask);
+ shadmask->setValue(defSpot.shadmask);
+ str_mask->setValue(defSpot.str_mask);
+ ang_mask->setValue(defSpot.ang_mask);
+ strumaskmask->setValue(defSpot.strumaskmask);
+ toolmask->set_active(defSpot.toolmask);
+ fftmask->set_active(defSpot.fftmask);
+ blurmask->setValue(defSpot.blurmask);
+ contmask->setValue(defSpot.contmask);
+ HHhmask_shape->setCurve(defSpot.HHhmask_curve);
+// Lmask_shape->setCurve(defSpot.Lmask_curve);
+ LLmask_shapewav->setCurve(defSpot.LLmask_curvewav);
+ csThresholdmask->setValue(defSpot.csthresholdmask);
+ updatemaskGUI3();
+ // Enable all listeners
+ enableListener();
+
+}
+
+void LocallabMask::updatemaskGUI3()
+{
+ const double temp = blurmask->getValue();
+
+ if (fftmask->get_active()) {
+ blurmask->setLimits(0.2, 1000., 0.5, 0.2);
+ } else {
+ blurmask->setLimits(0.2, 100., 0.5, 0.2);
+ }
+
+ blurmask->setValue(temp);
+
+}
+
+void LocallabMask::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer)
+{
+ idle_register.add(
+ [this, normHuer, normLumar, normChromar]() -> bool {
+ GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
+
+ // Update mask background
+ CCmask_shape->updateLocallabBackground(normChromar);
+ LLmask_shape->updateLocallabBackground(normLumar);
+ HHmask_shape->updateLocallabBackground(normHuer);
+ HHhmask_shape->updateLocallabBackground(normHuer);
+
+ return false;
+ }
+ );
+}
+
+
+void LocallabMask::fftmaskChanged()
+{
+ updatemaskGUI3(); // Update GUI according to fftmask button state
+
+ if (isLocActivated && exp->getEnabled()) {
+ if (listener) {
+ if (fftmask->get_active()) {
+ listener->panelChanged(EvLocallabfftmask,
+ M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ } else {
+ listener->panelChanged(EvLocallabfftmask,
+ M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+ }
+}
+
+
+
+
+void LocallabMask::curveChanged(CurveEditor* ce)
+{
+ if (isLocActivated && exp->getEnabled()) {
+
+ if (ce == CCmask_shape) {
+ if (listener) {
+ listener->panelChanged(EvlocallabCCmask_shape,
+ M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (ce == LLmask_shape) {
+ if (listener) {
+ listener->panelChanged(EvlocallabLLmask_shape,
+ M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (ce == HHmask_shape) {
+ if (listener) {
+ listener->panelChanged(EvlocallabHHmask_shape,
+ M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (ce == HHhmask_shape) {
+ if (listener) {
+ listener->panelChanged(EvlocallabHHhmask_shape,
+ M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (ce == Lmask_shape) {
+ if (listener) {
+ listener->panelChanged(EvlocallabLmask_shape,
+ M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (ce == LLmask_shapewav) {
+ if (listener) {
+ listener->panelChanged(EvlocallabLLmask_shapewav,
+ M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ }
+}
+
+
+
+void LocallabMask::adjusterChanged(Adjuster* a, double newval)
+{
+ if (isLocActivated && exp->getEnabled()) {
+
+ if (a == sensimask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabsensimask,
+ sensimask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == strumaskmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabstrumaskmask,
+ strumaskmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == contmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabcontmask,
+ contmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == blurmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabblurmask,
+ blurmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+
+ if (a == blendmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabblendmask,
+ blendmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == blendmaskab) {
+ if (listener) {
+ listener->panelChanged(Evlocallabblendmaskab,
+ blendmaskab->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == softradiusmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabsoftradiusmask,
+ softradiusmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == radmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabradmask,
+ radmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == lapmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallablapmask,
+ lapmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == chromask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabchromask,
+ chromask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == gammask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabgammask,
+ gammask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == slopmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabslopmask,
+ slopmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == shadmask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabshadmask,
+ shadmask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == str_mask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabstr_mask,
+ str_mask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ if (a == ang_mask) {
+ if (listener) {
+ listener->panelChanged(Evlocallabang_mask,
+ ang_mask->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+
+ }
+}
+
+void LocallabMask::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR)
+{
+ if (isLocActivated && exp->getEnabled()) {
+ if (a == csThresholdmask) {
+ if (listener) {
+ listener->panelChanged(EvlocallabcsThresholdmask,
+ csThresholdmask->getHistoryString() + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+ }
+}
+
+void LocallabMask::enabledChanged()
+{
+ if (isLocActivated) {
+ if (listener) {
+ if (exp->getEnabled()) {
+ listener->panelChanged(EvLocena_mask,
+ M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ } else {
+ listener->panelChanged(EvLocena_mask,
+ M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+ }
+}
+
+void LocallabMask::toolmaskChanged()
+{
+ if (isLocActivated && exp->getEnabled()) {
+ if (listener) {
+ if (toolmask->get_active()) {
+ listener->panelChanged(EvLocallabtoolmask,
+ M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ } else {
+ listener->panelChanged(EvLocallabtoolmask,
+ M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
+ }
+ }
+ }
+}
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index bbfb7cc4e..39b89dbf3 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -1024,6 +1024,7 @@ void ParamsEdited::initFrom(const std::vector&
// Control spot settings
locallab.spots.at(j).name = locallab.spots.at(j).name && pSpot.name == otherSpot.name;
locallab.spots.at(j).isvisible = locallab.spots.at(j).isvisible && pSpot.isvisible == otherSpot.isvisible;
+ locallab.spots.at(j).prevMethod = locallab.spots.at(j).prevMethod && pSpot.prevMethod == otherSpot.prevMethod;
locallab.spots.at(j).shape = locallab.spots.at(j).shape && pSpot.shape == otherSpot.shape;
locallab.spots.at(j).spotMethod = locallab.spots.at(j).spotMethod && pSpot.spotMethod == otherSpot.spotMethod;
locallab.spots.at(j).wavMethod = locallab.spots.at(j).wavMethod && pSpot.wavMethod == otherSpot.wavMethod;
@@ -1047,6 +1048,7 @@ void ParamsEdited::initFrom(const std::vector&
locallab.spots.at(j).colorscope = locallab.spots.at(j).colorscope && pSpot.colorscope == otherSpot.colorscope;
locallab.spots.at(j).transitweak = locallab.spots.at(j).transitweak && pSpot.transitweak == otherSpot.transitweak;
locallab.spots.at(j).transitgrad = locallab.spots.at(j).transitgrad && pSpot.transitgrad == otherSpot.transitgrad;
+ locallab.spots.at(j).activ = locallab.spots.at(j).activ && pSpot.activ == otherSpot.activ;
locallab.spots.at(j).avoid = locallab.spots.at(j).avoid && pSpot.avoid == otherSpot.avoid;
locallab.spots.at(j).blwh = locallab.spots.at(j).blwh && pSpot.blwh == otherSpot.blwh;
locallab.spots.at(j).recurs = locallab.spots.at(j).recurs && pSpot.recurs == otherSpot.recurs;
@@ -1477,6 +1479,35 @@ void ParamsEdited::initFrom(const std::vector&
locallab.spots.at(j).baselog = locallab.spots.at(j).baselog && pSpot.baselog == otherSpot.baselog;
locallab.spots.at(j).strlog = locallab.spots.at(j).strlog && pSpot.strlog == otherSpot.strlog;
locallab.spots.at(j).anglog = locallab.spots.at(j).anglog && pSpot.anglog == otherSpot.anglog;
+ //mask
+ locallab.spots.at(j).visimask = locallab.spots.at(j).visimask && pSpot.visimask == otherSpot.visimask;
+ locallab.spots.at(j).complexmask = locallab.spots.at(j).complexmask && pSpot.complexmask == otherSpot.complexmask;
+ locallab.spots.at(j).expmask = locallab.spots.at(j).expmask && pSpot.expmask == otherSpot.expmask;
+ locallab.spots.at(j).sensimask = locallab.spots.at(j).sensimask && pSpot.sensimask == otherSpot.sensimask;
+ locallab.spots.at(j).blendmask = locallab.spots.at(j).blendmask && pSpot.blendmask == otherSpot.blendmask;
+ locallab.spots.at(j).blendmaskab = locallab.spots.at(j).blendmaskab && pSpot.blendmaskab == otherSpot.blendmaskab;
+ locallab.spots.at(j).softradiusmask = locallab.spots.at(j).softradiusmask && pSpot.softradiusmask == otherSpot.softradiusmask;
+ locallab.spots.at(j).enamask = locallab.spots.at(j).enamask && pSpot.enamask == otherSpot.enamask;
+ locallab.spots.at(j).fftmask = locallab.spots.at(j).fftmask && pSpot.fftmask == otherSpot.fftmask;
+ locallab.spots.at(j).blurmask = locallab.spots.at(j).blurmask && pSpot.blurmask == otherSpot.blurmask;
+ locallab.spots.at(j).contmask = locallab.spots.at(j).contmask && pSpot.contmask == otherSpot.contmask;
+ locallab.spots.at(j).CCmask_curve = locallab.spots.at(j).CCmask_curve && pSpot.CCmask_curve == otherSpot.CCmask_curve;
+ locallab.spots.at(j).LLmask_curve = locallab.spots.at(j).LLmask_curve && pSpot.LLmask_curve == otherSpot.LLmask_curve;
+ locallab.spots.at(j).HHmask_curve = locallab.spots.at(j).HHmask_curve && pSpot.HHmask_curve == otherSpot.HHmask_curve;
+ locallab.spots.at(j).strumaskmask = locallab.spots.at(j).strumaskmask && pSpot.strumaskmask == otherSpot.strumaskmask;
+ locallab.spots.at(j).toolmask = locallab.spots.at(j).toolmask && pSpot.toolmask == otherSpot.toolmask;
+ locallab.spots.at(j).radmask = locallab.spots.at(j).radmask && pSpot.radmask == otherSpot.radmask;
+ locallab.spots.at(j).lapmask = locallab.spots.at(j).lapmask && pSpot.lapmask == otherSpot.lapmask;
+ locallab.spots.at(j).chromask = locallab.spots.at(j).chromask && pSpot.chromask == otherSpot.chromask;
+ locallab.spots.at(j).gammask = locallab.spots.at(j).gammask && pSpot.gammask == otherSpot.gammask;
+ locallab.spots.at(j).slopmask = locallab.spots.at(j).slopmask && pSpot.slopmask == otherSpot.slopmask;
+ locallab.spots.at(j).shadmask = locallab.spots.at(j).shadmask && pSpot.shadmask == otherSpot.shadmask;
+ locallab.spots.at(j).str_mask = locallab.spots.at(j).str_mask && pSpot.str_mask == otherSpot.str_mask;
+ locallab.spots.at(j).ang_mask = locallab.spots.at(j).ang_mask && pSpot.ang_mask == otherSpot.ang_mask;
+ locallab.spots.at(j).HHhmask_curve = locallab.spots.at(j).HHhmask_curve && pSpot.HHhmask_curve == otherSpot.HHhmask_curve;
+ locallab.spots.at(j).Lmask_curve = locallab.spots.at(j).Lmask_curve && pSpot.Lmask_curve == otherSpot.Lmask_curve;
+ locallab.spots.at(j).LLmask_curvewav = locallab.spots.at(j).LLmask_curvewav && pSpot.LLmask_curvewav == otherSpot.LLmask_curvewav;
+ locallab.spots.at(j).csthresholdmask = locallab.spots.at(j).csthresholdmask && pSpot.csthresholdmask == otherSpot.csthresholdmask;
}
}
@@ -3033,6 +3064,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).isvisible = mods.locallab.spots.at(i).isvisible;
}
+ if (locallab.spots.at(i).prevMethod) {
+ toEdit.locallab.spots.at(i).prevMethod = mods.locallab.spots.at(i).prevMethod;
+ }
+
if (locallab.spots.at(i).shape) {
toEdit.locallab.spots.at(i).shape = mods.locallab.spots.at(i).shape;
}
@@ -3125,6 +3160,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).transitgrad = mods.locallab.spots.at(i).transitgrad;
}
+ if (locallab.spots.at(i).activ) {
+ toEdit.locallab.spots.at(i).activ = mods.locallab.spots.at(i).activ;
+ }
+
if (locallab.spots.at(i).avoid) {
toEdit.locallab.spots.at(i).avoid = mods.locallab.spots.at(i).avoid;
}
@@ -4781,6 +4820,120 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
if (locallab.spots.at(i).anglog) {
toEdit.locallab.spots.at(i).anglog = mods.locallab.spots.at(i).anglog;
}
+
+ // mask
+ if (locallab.spots.at(i).visimask) {
+ toEdit.locallab.spots.at(i).visimask = mods.locallab.spots.at(i).visimask;
+ }
+
+ if (locallab.spots.at(i).complexmask) {
+ toEdit.locallab.spots.at(i).complexmask = mods.locallab.spots.at(i).complexmask;
+ }
+
+ if (locallab.spots.at(i).expmask) {
+ toEdit.locallab.spots.at(i).expmask = mods.locallab.spots.at(i).expmask;
+ }
+
+ if (locallab.spots.at(i).sensimask) {
+ toEdit.locallab.spots.at(i).sensimask = mods.locallab.spots.at(i).sensimask;
+ }
+
+ if (locallab.spots.at(i).blendmask) {
+ toEdit.locallab.spots.at(i).blendmask = mods.locallab.spots.at(i).blendmask;
+ }
+
+ if (locallab.spots.at(i).blendmaskab) {
+ toEdit.locallab.spots.at(i).blendmaskab = mods.locallab.spots.at(i).blendmaskab;
+ }
+
+ if (locallab.spots.at(i).softradiusmask) {
+ toEdit.locallab.spots.at(i).softradiusmask = mods.locallab.spots.at(i).softradiusmask;
+ }
+
+ if (locallab.spots.at(i).enamask) {
+ toEdit.locallab.spots.at(i).enamask = mods.locallab.spots.at(i).enamask;
+ }
+
+ if (locallab.spots.at(i).fftmask) {
+ toEdit.locallab.spots.at(i).fftmask = mods.locallab.spots.at(i).fftmask;
+ }
+
+ if (locallab.spots.at(i).blurmask) {
+ toEdit.locallab.spots.at(i).blurmask = mods.locallab.spots.at(i).blurmask;
+ }
+
+ if (locallab.spots.at(i).contmask) {
+ toEdit.locallab.spots.at(i).contmask = mods.locallab.spots.at(i).contmask;
+ }
+
+ if (locallab.spots.at(i).CCmask_curve) {
+ toEdit.locallab.spots.at(i).CCmask_curve = mods.locallab.spots.at(i).CCmask_curve;
+ }
+
+ if (locallab.spots.at(i).LLmask_curve) {
+ toEdit.locallab.spots.at(i).LLmask_curve = mods.locallab.spots.at(i).LLmask_curve;
+ }
+
+ if (locallab.spots.at(i).HHmask_curve) {
+ toEdit.locallab.spots.at(i).HHmask_curve = mods.locallab.spots.at(i).HHmask_curve;
+ }
+
+ if (locallab.spots.at(i).strumaskmask) {
+ toEdit.locallab.spots.at(i).strumaskmask = mods.locallab.spots.at(i).strumaskmask;
+ }
+
+ if (locallab.spots.at(i).toolmask) {
+ toEdit.locallab.spots.at(i).toolmask = mods.locallab.spots.at(i).toolmask;
+ }
+
+ if (locallab.spots.at(i).radmask) {
+ toEdit.locallab.spots.at(i).radmask = mods.locallab.spots.at(i).radmask;
+ }
+
+ if (locallab.spots.at(i).lapmask) {
+ toEdit.locallab.spots.at(i).lapmask = mods.locallab.spots.at(i).lapmask;
+ }
+
+ if (locallab.spots.at(i).chromask) {
+ toEdit.locallab.spots.at(i).chromask = mods.locallab.spots.at(i).chromask;
+ }
+
+ if (locallab.spots.at(i).gammask) {
+ toEdit.locallab.spots.at(i).gammask = mods.locallab.spots.at(i).gammask;
+ }
+
+ if (locallab.spots.at(i).slopmask) {
+ toEdit.locallab.spots.at(i).slopmask = mods.locallab.spots.at(i).slopmask;
+ }
+
+ if (locallab.spots.at(i).shadmask) {
+ toEdit.locallab.spots.at(i).shadmask = mods.locallab.spots.at(i).shadmask;
+ }
+
+ if (locallab.spots.at(i).str_mask) {
+ toEdit.locallab.spots.at(i).str_mask = mods.locallab.spots.at(i).str_mask;
+ }
+
+ if (locallab.spots.at(i).ang_mask) {
+ toEdit.locallab.spots.at(i).ang_mask = mods.locallab.spots.at(i).ang_mask;
+ }
+
+ if (locallab.spots.at(i).HHhmask_curve) {
+ toEdit.locallab.spots.at(i).HHhmask_curve = mods.locallab.spots.at(i).HHhmask_curve;
+ }
+
+ if (locallab.spots.at(i).Lmask_curve) {
+ toEdit.locallab.spots.at(i).Lmask_curve = mods.locallab.spots.at(i).Lmask_curve;
+ }
+
+ if (locallab.spots.at(i).LLmask_curvewav) {
+ toEdit.locallab.spots.at(i).LLmask_curvewav = mods.locallab.spots.at(i).LLmask_curvewav;
+ }
+
+ if (locallab.spots.at(i).csthresholdmask) {
+ toEdit.locallab.spots.at(i).csthresholdmask = mods.locallab.spots.at(i).csthresholdmask;
+ }
+
}
if (pcvignette.enabled) {
@@ -5905,6 +6058,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
// Control spot settings
name(v),
isvisible(v),
+ prevMethod(v),
shape(v),
spotMethod(v),
wavMethod(v),
@@ -5928,6 +6082,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
colorscope(v),
transitweak(v),
transitgrad(v),
+ activ(v),
avoid(v),
blwh(v),
recurs(v),
@@ -6349,7 +6504,37 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
sensilog(v),
baselog(v),
strlog(v),
- anglog(v)
+ anglog(v),
+ // mask
+ visimask(v),
+ complexmask(v),
+ expmask(v),
+ sensimask(v),
+ blendmask(v),
+ blendmaskab(v),
+ softradiusmask(v),
+ enamask(v),
+ fftmask(v),
+ blurmask(v),
+ contmask(v),
+ CCmask_curve(v),
+ LLmask_curve(v),
+ HHmask_curve(v),
+ strumaskmask(v),
+ toolmask(v),
+ radmask(v),
+ lapmask(v),
+ chromask(v),
+ gammask(v),
+ slopmask(v),
+ shadmask(v),
+ str_mask(v),
+ ang_mask(v),
+ HHhmask_curve(v),
+ Lmask_curve(v),
+ LLmask_curvewav(v),
+ csthresholdmask(v)
+
{
}
@@ -6357,6 +6542,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
{
name = v;
isvisible = v;
+ prevMethod = v;
shape = v;
spotMethod = v;
wavMethod = v;
@@ -6380,6 +6566,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
colorscope = v;
transitweak = v;
transitgrad = v;
+ activ = v;
avoid = v;
blwh = v;
recurs = v;
@@ -6810,6 +6997,35 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
baselog = v;
strlog = v;
anglog = v;
+ // mask
+ visimask = v;
+ complexmask = v;
+ expmask = v;
+ sensimask = v;
+ blendmask = v;
+ blendmaskab = v;
+ softradiusmask = v;
+ enamask = v;
+ fftmask = v;
+ blurmask = v;
+ contmask = v;
+ CCmask_curve = v;
+ LLmask_curve = v;
+ HHmask_curve = v;
+ strumaskmask = v;
+ toolmask = v;
+ radmask = v;
+ lapmask = v;
+ chromask = v;
+ gammask = v;
+ slopmask = v;
+ shadmask = v;
+ str_mask = v;
+ ang_mask = v;
+ HHhmask_curve =(v);
+ Lmask_curve =(v);
+ LLmask_curvewav =(v);
+ csthresholdmask = v;
}
bool CaptureSharpeningParamsEdited::isUnchanged() const
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 1bd2e045e..923b07039 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -390,6 +390,7 @@ public:
// Control spot settings
bool name;
bool isvisible;
+ bool prevMethod;
bool shape;
bool spotMethod;
bool wavMethod;
@@ -413,6 +414,7 @@ public:
bool colorscope;
bool transitweak;
bool transitgrad;
+ bool activ;
bool avoid;
bool blwh;
bool recurs;
@@ -835,6 +837,35 @@ public:
bool baselog;
bool strlog;
bool anglog;
+ //mask
+ bool visimask;
+ bool complexmask;
+ bool expmask;
+ bool sensimask;
+ bool blendmask;
+ bool blendmaskab;
+ bool softradiusmask;
+ bool enamask;
+ bool fftmask;
+ bool blurmask;
+ bool contmask;
+ bool CCmask_curve;
+ bool LLmask_curve;
+ bool HHmask_curve;
+ bool strumaskmask;
+ bool toolmask;
+ bool radmask;
+ bool lapmask;
+ bool chromask;
+ bool gammask;
+ bool slopmask;
+ bool shadmask;
+ bool str_mask;
+ bool ang_mask;
+ bool HHhmask_curve;
+ bool Lmask_curve;
+ bool LLmask_curvewav;
+ bool csthresholdmask;
LocallabSpotEdited(bool v);
diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc
index 70ae232a4..53ad0cbe5 100644
--- a/rtgui/toolpanelcoord.cc
+++ b/rtgui/toolpanelcoord.cc
@@ -534,12 +534,12 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
ipc->setLocallabMaskVisibility(maskStruc.previewDeltaE, maskStruc.colorMask, maskStruc.colorMaskinv, maskStruc.expMask, maskStruc.expMaskinv,
maskStruc.SHMask, maskStruc.SHMaskinv, maskStruc.vibMask, maskStruc.softMask,
maskStruc.blMask, maskStruc.tmMask, maskStruc.retiMask, maskStruc.sharMask,
- maskStruc.lcMask, maskStruc.cbMask);
+ maskStruc.lcMask, maskStruc.cbMask, maskStruc.maskMask);
} else if (event == rtengine::EvLocallabSpotCreated || event == rtengine::EvLocallabSpotSelectedWithMask ||
event == rtengine::EvLocallabSpotDeleted || event == rtengine::Evlocallabshowreset ||
event == rtengine::EvlocallabToolRemovedWithRefresh) {
locallab->resetMaskVisibility();
- ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
ipc->endUpdateParams(changeFlags); // starts the IPC processing
@@ -649,7 +649,7 @@ void ToolPanelCoordinator::profileChange(
// Reset Locallab mask visibility
locallab->resetMaskVisibility();
- ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// start the IPC processing
if (filterRawRefresh) {