Add contrast curve to mask 6 exposure

This commit is contained in:
Desmis 2019-10-15 08:34:34 +02:00
parent 39c20c548a
commit e44d4c1324
15 changed files with 117 additions and 43 deletions

View File

@ -1008,6 +1008,7 @@ HISTORY_MSG_767;Local - Grain Iso
HISTORY_MSG_768;Local - Grain Strength HISTORY_MSG_768;Local - Grain Strength
HISTORY_MSG_769;Local - Grain Scale HISTORY_MSG_769;Local - Grain Scale
HISTORY_MSG_770;Local - Color Mask contrast curve HISTORY_MSG_770;Local - Color Mask contrast curve
HISTORY_MSG_771;Local - Exp Mask contrast curve
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction

View File

@ -887,7 +887,9 @@ void Crop::update(int todo)
bool localexutili = parent->localexutili; bool localexutili = parent->localexutili;
LUTf exlocalcurve2(65536, 0); LUTf exlocalcurve2(65536, 0);
bool localmaskutili = parent->localmaskutili; bool localmaskutili = parent->localmaskutili;
bool localmaskexputili = parent->localmaskexputili;
LUTf lmasklocalcurve2(65536, 0); LUTf lmasklocalcurve2(65536, 0);
LUTf lmaskexplocalcurve2(65536, 0);
LUTf hltonecurveloc2(65536, 0); //65536 LUTf hltonecurveloc2(65536, 0); //65536
LUTf shtonecurveloc2(65536, 0); LUTf shtonecurveloc2(65536, 0);
LUTf tonecurveloc2(65536, 0); LUTf tonecurveloc2(65536, 0);
@ -989,6 +991,8 @@ void Crop::update(int todo)
CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve2, sca); CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve2, sca);
localmaskutili = false; localmaskutili = false;
CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve2, sca);
localmaskexputili = false;
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca);
double ecomp = params.locallab.spots.at(sp).expcomp; double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1026,15 +1030,18 @@ void Crop::update(int todo)
// Locallab mask are only shown for selected spot // Locallab mask are only shown for selected spot
if (sp == params.locallab.selspot) { if (sp == params.locallab.selspot) {
parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, 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, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
lllocalcurve2,locallutili, lllocalcurve2,locallutili, loclhCurve, lochhCurve,
loclhCurve, lochhCurve, lmasklocalcurve2, localmaskutili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili,
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locwavCurve, locwavutili, locwavCurve, locwavutili,
LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre,
parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
if (parent->locallListener) { if (parent->locallListener) {
@ -1042,15 +1049,18 @@ void Crop::update(int todo)
} }
} else { } else {
parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, 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, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
lllocalcurve2,locallutili, lllocalcurve2,locallutili, loclhCurve, lochhCurve,
loclhCurve, lochhCurve, lmasklocalcurve2, localmaskutili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili,
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locwavCurve, locwavutili, locwavCurve, locwavutili,
LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} }
lllocalcurve2.clear(); lllocalcurve2.clear();
@ -1058,6 +1068,7 @@ void Crop::update(int todo)
cclocalcurve2.clear(); cclocalcurve2.clear();
exlocalcurve2.clear(); exlocalcurve2.clear();
lmasklocalcurve2.clear(); lmasklocalcurve2.clear();
lmaskexplocalcurve2.clear();
hltonecurveloc2.clear(); hltonecurveloc2.clear();
shtonecurveloc2.clear(); shtonecurveloc2.clear();
tonecurveloc2.clear(); tonecurveloc2.clear();

View File

@ -172,6 +172,7 @@ ImProcCoordinator::ImProcCoordinator() :
tonecurveloc(65536, 0), tonecurveloc(65536, 0),
lightCurveloc(32770, 0), lightCurveloc(32770, 0),
lmasklocalcurve(65536, 0), lmasklocalcurve(65536, 0),
lmaskexplocalcurve(65536, 0),
locallutili(false), locallutili(false),
localcutili(false), localcutili(false),
localexutili(false), localexutili(false),
@ -179,6 +180,7 @@ ImProcCoordinator::ImProcCoordinator() :
lhmasutili(false), lhmasutili(false),
lcmasutili(false), lcmasutili(false),
localmaskutili(false), localmaskutili(false),
localmaskexputili(false),
lcmasexputili(false), lcmasexputili(false),
lhmasexputili(false), lhmasexputili(false),
llmasexputili(false), llmasexputili(false),
@ -969,6 +971,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
CurveFactory::curveCCLocal(localcutili, params->locallab.spots.at(sp).cccurve, cclocalcurve, sca); CurveFactory::curveCCLocal(localcutili, params->locallab.spots.at(sp).cccurve, cclocalcurve, sca);
CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, 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(localmaskutili, params->locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskexputili, params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca);
double ecomp = params->locallab.spots.at(sp).expcomp; double ecomp = params->locallab.spots.at(sp).expcomp;
double black = params->locallab.spots.at(sp).black; double black = params->locallab.spots.at(sp).black;
double hlcompr = params->locallab.spots.at(sp).hlcompr; double hlcompr = params->locallab.spots.at(sp).hlcompr;
@ -1023,6 +1026,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
if (sp == params->locallab.selspot) { if (sp == params->locallab.selspot) {
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1030,7 +1034,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locwavCurve, locwavutili, locwavCurve, locwavutili,
LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler,
locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask, locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
if (locallListener) { if (locallListener) {
@ -1039,6 +1044,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
} else { } else {
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve, ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1046,7 +1052,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locwavCurve, locwavutili, locwavCurve, locwavutili,
LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} }
//recalculate references after //recalculate references after
@ -1061,6 +1068,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
cclocalcurve.clear(); cclocalcurve.clear();
exlocalcurve.clear(); exlocalcurve.clear();
lmasklocalcurve.clear(); lmasklocalcurve.clear();
lmaskexplocalcurve.clear();
hltonecurveloc.clear(); hltonecurveloc.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();

View File

@ -234,6 +234,7 @@ protected:
LUTf tonecurveloc; LUTf tonecurveloc;
LUTf lightCurveloc; LUTf lightCurveloc;
LUTf lmasklocalcurve; LUTf lmasklocalcurve;
LUTf lmaskexplocalcurve;
// LUTu lhist16loc; // LUTu lhist16loc;
LocretigainCurve locRETgainCurve; LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve; LocretitransCurve locRETtransCurve;
@ -270,6 +271,7 @@ protected:
bool lhmasutili; bool lhmasutili;
bool lcmasutili; bool lcmasutili;
bool localmaskutili; bool localmaskutili;
bool localmaskexputili;
bool lcmasexputili; bool lcmasexputili;
bool lhmasexputili; bool lhmasexputili;
bool llmasexputili; bool llmasexputili;

View File

@ -216,6 +216,7 @@ public:
void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp);
void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve,
LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili,
const LocCCmaskCurve & locccmasexpCurve, bool &lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool &llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili, 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, const LocCCmaskCurve & locccmasSHCurve, bool &lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool &llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,
@ -224,7 +225,8 @@ public:
const LocCCmaskCurve & locccmastmCurve, bool &lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool &llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili, 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 & locccmasblCurve, bool &lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool &llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili,
const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & locwavCurve, bool & locwavutili,
bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc,
double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref,
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); 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); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);

View File

@ -2840,12 +2840,12 @@ void ImProcFunctions::retinex_pde(float * datain, float * dataout, int bfw, int
} }
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, int inv, const struct local_params & lp, 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, int inv, const struct local_params & lp,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili,
const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili,
const LocHHmaskCurve & lochhmasCurve, bool &lhmasutili, const LocHHmaskCurve & lochhmasCurve, bool &lhmasutili,
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, 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,
LUTf & lmasklocalcurve, bool & localmaskutili LUTf & lmasklocalcurve, bool & localmaskutili
) )
{ {
array2D<float> ble(bfw, bfh); array2D<float> ble(bfw, bfh);
array2D<float> guid(bfw, bfh); array2D<float> guid(bfw, bfh);
@ -2971,7 +2971,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
} }
} }
//curve actually only for color and light
if (lmasklocalcurve && localmaskutili) { if (lmasklocalcurve && localmaskutili) {
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) #pragma omp parallel for schedule(dynamic,16)
@ -6711,19 +6711,21 @@ void ImProcFunctions::DeNoise(int call, int del, float * slidL, float * slida, f
void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, int cx, int cy, int oW, int oH, int sk, void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, int cx, int cy, int oW, int oH, int sk,
const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocretigainCurve & locRETgainCcurve, const LocretitransCurve & locRETtransCcurve, LUTf & lllocalcurve, bool & locallutili, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve,
LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmasklocalcurve, bool & localmaskutili,
const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili, LUTf & lmaskexplocalcurve, bool & localmaskexputili,
const LocCCmaskCurve & locccmasexpCurve, bool & lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool & llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili,
const LocCCmaskCurve & locccmasSHCurve, bool & lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool & llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili, const LocCCmaskCurve & locccmasexpCurve, bool & lcmasexputili, const LocLLmaskCurve & locllmasexpCurve, bool & llmasexputili, const LocHHmaskCurve & lochhmasexpCurve, bool & lhmasexputili,
const LocCCmaskCurve & locccmascbCurve, bool & lcmascbutili, const LocLLmaskCurve & locllmascbCurve, bool & llmascbutili, const LocHHmaskCurve & lochhmascbCurve, bool & lhmascbutili, const LocCCmaskCurve & locccmasSHCurve, bool & lcmasSHutili, const LocLLmaskCurve & locllmasSHCurve, bool & llmasSHutili, const LocHHmaskCurve & lochhmasSHCurve, bool & lhmasSHutili,
const LocCCmaskCurve & locccmasretiCurve, bool & lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool & llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, const LocCCmaskCurve & locccmascbCurve, bool & lcmascbutili, const LocLLmaskCurve & locllmascbCurve, bool & llmascbutili, const LocHHmaskCurve & lochhmascbCurve, bool & lhmascbutili,
const LocCCmaskCurve & locccmastmCurve, bool & lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool & llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili, const LocCCmaskCurve & locccmasretiCurve, bool & lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool & llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili,
const LocCCmaskCurve & locccmasblCurve, bool & lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool & llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili, const LocCCmaskCurve & locccmastmCurve, bool & lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool & llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili,
const LocwavCurve & locwavCurve, bool & locwavutili, const LocCCmaskCurve & locccmasblCurve, bool & lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool & llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili,
bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, const LocwavCurve & locwavCurve, bool & locwavutili,
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc,
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref,
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax)
{ {
/* comment on processus deltaE /* comment on processus deltaE
* the algo uses 3 different ways to manage deltaE according to the type of intervention * the algo uses 3 different ways to manage deltaE according to the type of intervention
@ -10207,12 +10209,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmaexp; float blendm = lp.blendmaexp;
float lap = params->locallab.spots.at(sp).lapmaskexp; float lap = params->locallab.spots.at(sp).lapmaskexp;
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, inv, lp, maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, inv, lp,
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti); enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmaskexplocalcurve, localmaskexputili);
if (lp.showmaskexpmet == 3) { if (lp.showmaskexpmet == 3) {
showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskblurexp.get(), 0); showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufexporig.get(), transformed, bufmaskblurexp.get(), 0);
@ -10474,12 +10474,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmaexp; float blendm = lp.blendmaexp;
float lap = params->locallab.spots.at(sp).lapmaskexp; float lap = params->locallab.spots.at(sp).lapmaskexp;
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, inv, lp, maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufexporig.get(), bufmaskblurexp.get(), originalmaskexp.get(), original, inv, lp,
locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti); enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmaskexplocalcurve, localmaskexputili);
if (lp.showmaskexpmetinv == 1) { if (lp.showmaskexpmetinv == 1) {
showmask(lp, 0, 0, cx, cy, GW, GH, bufexporig.get(), transformed, bufmaskblurexp.get(), inv); showmask(lp, 0, 0, cx, cy, GW, GH, bufexporig.get(), transformed, bufmaskblurexp.get(), inv);
@ -10716,7 +10714,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmacol; float blendm = lp.blendmacol;
float lap = params->locallab.spots.at(sp).lapmaskcol; float lap = params->locallab.spots.at(sp).lapmaskcol;
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
//LUTf & lmasklocalcurve, bool & localmaskutili
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp, maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, multiThread, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmasklocalcurve, localmaskutili); enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmasklocalcurve, localmaskutili);
@ -10919,11 +10917,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float blendm = lp.blendmacol; float blendm = lp.blendmacol;
float lap = params->locallab.spots.at(sp).lapmaskcol; float lap = params->locallab.spots.at(sp).lapmaskcol;
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
LUTf dummy;
bool uti;
maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp, maskcalccol(false, pde, GW, GH, 0, 0, sk, cx, cy, bufcolorig.get(), bufmaskblurcol.get(), originalmaskcol.get(), original, inv, lp,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, multiThread, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, multiThread,
enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, dummy, uti); enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, lmasklocalcurve, localmaskutili);
if (lp.showmaskcolmetinv == 1) { if (lp.showmaskcolmetinv == 1) {

View File

@ -797,6 +797,7 @@ enum ProcEventCode {
Evlocallabstrengr = 767, Evlocallabstrengr = 767,
Evlocallabscalegr = 768, Evlocallabscalegr = 768,
EvlocallabLmaskshape = 769, EvlocallabLmaskshape = 769,
EvlocallabLmaskexpshape = 770,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -2493,6 +2493,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
slomaskexp(0.0), slomaskexp(0.0),
lapmaskexp(0.0), lapmaskexp(0.0),
softradiusexp(0.0), softradiusexp(0.0),
Lmaskexpcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
expMethod("std"), expMethod("std"),
exnoiseMethod("none"), exnoiseMethod("none"),
laplacexp(0.0), laplacexp(0.0),
@ -2776,6 +2777,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& slomaskexp == other.slomaskexp && slomaskexp == other.slomaskexp
&& lapmaskexp == other.lapmaskexp && lapmaskexp == other.lapmaskexp
&& softradiusexp == other.softradiusexp && softradiusexp == other.softradiusexp
&& Lmaskexpcurve == other.Lmaskexpcurve
&& expMethod == other.expMethod && expMethod == other.expMethod
&& exnoiseMethod == other.exnoiseMethod && exnoiseMethod == other.exnoiseMethod
&& laplacexp == other.laplacexp && laplacexp == other.laplacexp
@ -4045,6 +4047,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskexp, "Locallab", "Slomaskexp_" + std::to_string(i), spot.slomaskexp, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskexp, "Locallab", "Slomaskexp_" + std::to_string(i), spot.slomaskexp, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskexp, "Locallab", "Lapmaskexp_" + std::to_string(i), spot.lapmaskexp, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskexp, "Locallab", "Lapmaskexp_" + std::to_string(i), spot.lapmaskexp, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).softradiusexp, "Locallab", "Softradiusexp_" + std::to_string(i), spot.softradiusexp, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).softradiusexp, "Locallab", "Softradiusexp_" + std::to_string(i), spot.softradiusexp, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmaskexpcurve, "Locallab", "LmaskexpCurve_" + std::to_string(i), spot.Lmaskexpcurve, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expMethod, "Locallab", "ExpMethod_" + std::to_string(i), spot.expMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expMethod, "Locallab", "ExpMethod_" + std::to_string(i), spot.expMethod, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).exnoiseMethod, "Locallab", "ExnoiseMethod_" + std::to_string(i), spot.exnoiseMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).exnoiseMethod, "Locallab", "ExnoiseMethod_" + std::to_string(i), spot.exnoiseMethod, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).laplacexp, "Locallab", "Laplacexp_" + std::to_string(i), spot.laplacexp, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).laplacexp, "Locallab", "Laplacexp_" + std::to_string(i), spot.laplacexp, keyFile);
@ -5429,6 +5432,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Slomaskexp_" + std::to_string(i), pedited, spot.slomaskexp, spotEdited.slomaskexp); assignFromKeyfile(keyFile, "Locallab", "Slomaskexp_" + std::to_string(i), pedited, spot.slomaskexp, spotEdited.slomaskexp);
assignFromKeyfile(keyFile, "Locallab", "Lapmaskexp_" + std::to_string(i), pedited, spot.lapmaskexp, spotEdited.lapmaskexp); assignFromKeyfile(keyFile, "Locallab", "Lapmaskexp_" + std::to_string(i), pedited, spot.lapmaskexp, spotEdited.lapmaskexp);
assignFromKeyfile(keyFile, "Locallab", "Softradiusexp_" + std::to_string(i), pedited, spot.softradiusexp, spotEdited.softradiusexp); assignFromKeyfile(keyFile, "Locallab", "Softradiusexp_" + std::to_string(i), pedited, spot.softradiusexp, spotEdited.softradiusexp);
assignFromKeyfile(keyFile, "Locallab", "LmaskexpCurve_" + std::to_string(i), pedited, spot.Lmaskexpcurve, spotEdited.Lmaskexpcurve);
assignFromKeyfile(keyFile, "Locallab", "ExpMethod_" + std::to_string(i), pedited, spot.expMethod, spotEdited.expMethod); assignFromKeyfile(keyFile, "Locallab", "ExpMethod_" + std::to_string(i), pedited, spot.expMethod, spotEdited.expMethod);
assignFromKeyfile(keyFile, "Locallab", "ExnoiseMethod_" + std::to_string(i), pedited, spot.exnoiseMethod, spotEdited.exnoiseMethod); assignFromKeyfile(keyFile, "Locallab", "ExnoiseMethod_" + std::to_string(i), pedited, spot.exnoiseMethod, spotEdited.exnoiseMethod);
assignFromKeyfile(keyFile, "Locallab", "Laplacexp_" + std::to_string(i), pedited, spot.laplacexp, spotEdited.laplacexp); assignFromKeyfile(keyFile, "Locallab", "Laplacexp_" + std::to_string(i), pedited, spot.laplacexp, spotEdited.laplacexp);

View File

@ -1042,6 +1042,7 @@ struct LocallabParams {
double slomaskexp; double slomaskexp;
double lapmaskexp; double lapmaskexp;
double softradiusexp; double softradiusexp;
std::vector<double> Lmaskexpcurve;
Glib::ustring expMethod; Glib::ustring expMethod;
Glib::ustring exnoiseMethod; Glib::ustring exnoiseMethod;
double laplacexp; double laplacexp;

View File

@ -796,7 +796,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabisogr LUMINANCECURVE, //Evlocallabisogr
LUMINANCECURVE, //Evlocallabstrengr LUMINANCECURVE, //Evlocallabstrengr
LUMINANCECURVE, //Evlocallabscalegr LUMINANCECURVE, //Evlocallabscalegr
LUMINANCECURVE //EvlocallabLmaskshape LUMINANCECURVE, //EvlocallabLmaskshape
LUMINANCECURVE //EvlocallabLmaskexpshape
}; };
namespace rtengine namespace rtengine

View File

@ -1125,6 +1125,7 @@ private:
LUTf lightCurveloc(32770, 0); LUTf lightCurveloc(32770, 0);
LUTf exlocalcurve(65536, 0); LUTf exlocalcurve(65536, 0);
LUTf lmasklocalcurve(65536, 0); LUTf lmasklocalcurve(65536, 0);
LUTf lmaskexplocalcurve(65536, 0);
// int maxspot = 1; // int maxspot = 1;
float** shbuffer = nullptr; float** shbuffer = nullptr;
@ -1148,6 +1149,7 @@ private:
bool lhmasutili = false; bool lhmasutili = false;
bool lcmasutili = false; bool lcmasutili = false;
bool localmaskutili = false; bool localmaskutili = false;
bool localmaskexputili = false;
bool lcmasexputili = false; bool lcmasexputili = false;
bool lhmasexputili = false; bool lhmasexputili = false;
bool llmasexputili = false; bool llmasexputili = false;
@ -1197,6 +1199,7 @@ private:
CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1);
CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 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(localmaskutili, params.locallab.spots.at(sp).Lmaskcurve, lmasklocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1);
//provisory //provisory
double ecomp = params.locallab.spots.at(sp).expcomp; double ecomp = params.locallab.spots.at(sp).expcomp;
double black = params.locallab.spots.at(sp).black; double black = params.locallab.spots.at(sp).black;
@ -1230,8 +1233,9 @@ private:
float Tmax; float Tmax;
// No Locallab mask is shown in exported picture // No Locallab mask is shown in exported picture
ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, loclhCurve, lochhCurve,
lochhCurve, lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili,
locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili,
locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili,
locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili, locccmascbCurve, lcmascbutili, locllmascbCurve, llmascbutili, lochhmascbCurve, lhmascbutili,
@ -1239,7 +1243,8 @@ private:
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili,
locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili,
locwavCurve, locwavutili, locwavCurve, locwavutili,
LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
@ -1249,6 +1254,7 @@ private:
exlocalcurve.clear(); exlocalcurve.clear();
hltonecurveloc.clear(); hltonecurveloc.clear();
lmasklocalcurve.clear(); lmasklocalcurve.clear();
lmaskexplocalcurve.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();
lightCurveloc.clear(); lightCurveloc.clear();

View File

@ -159,6 +159,7 @@ Locallab::Locallab():
// Exposure // Exposure
curveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CURVEEDITOR_TONES_LABEL"))), curveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CURVEEDITOR_TONES_LABEL"))),
maskexpCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), maskexpCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2expCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
//Shadows Highlight //Shadows Highlight
maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
// Vibranceretinex // Vibranceretinex
@ -912,6 +913,21 @@ Locallab::Locallab():
HHmaskexpshape->setBottomBarColorProvider(this, 6); HHmaskexpshape->setBottomBarColorProvider(this, 6);
maskexpCurveEditorG->curveListComplete(); maskexpCurveEditorG->curveListComplete();
mask2expCurveEditorG->setCurveListener(this);
Lmaskexpshape = static_cast<DiagonalCurveEditor*>(mask2expCurveEditorG->addCurve(CT_Diagonal, "L(L)"));
Lmaskexpshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskexpcurve.at(0)), defSpot.Lmaskexpcurve);
if (showtooltip) {
Lmaskexpshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
}
std::vector<GradientMilestone> mLmaskexpshape;
mLmaskexpshape.push_back(GradientMilestone(0., 0., 0., 0.));
mLmaskexpshape.push_back(GradientMilestone(1., 1., 1., 1.));
Lmaskexpshape->setBottomBarBgGradient(mLmaskexpshape);
Lmaskexpshape->setLeftBarBgGradient(mLmaskexpshape);
mask2expCurveEditorG->curveListComplete();
pdeFrame->set_label_align(0.025, 0.5); pdeFrame->set_label_align(0.025, 0.5);
@ -973,6 +989,7 @@ Locallab::Locallab():
maskexpBox->pack_start(*chromaskexp, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*chromaskexp, Gtk::PACK_SHRINK, 0);
maskexpBox->pack_start(*gammaskexp, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*gammaskexp, Gtk::PACK_SHRINK, 0);
maskexpBox->pack_start(*slomaskexp, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*slomaskexp, Gtk::PACK_SHRINK, 0);
maskexpBox->pack_start(*mask2expCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmaskexp->add(*maskexpBox, false); expmaskexp->add(*maskexpBox, false);
exposeBox->pack_start(*expmaskexp); exposeBox->pack_start(*expmaskexp);
@ -2231,6 +2248,7 @@ Locallab::~Locallab()
delete HCurveEditorG; delete HCurveEditorG;
delete maskCurveEditorG; delete maskCurveEditorG;
delete mask2CurveEditorG; delete mask2CurveEditorG;
delete mask2expCurveEditorG;
delete curveEditorG; delete curveEditorG;
delete maskexpCurveEditorG; delete maskexpCurveEditorG;
delete maskSHCurveEditorG; delete maskSHCurveEditorG;
@ -3174,6 +3192,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).slomaskexp = slomaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskexp = slomaskexp->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmaskexp = lapmaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskexp = lapmaskexp->getValue();
pp->locallab.spots.at(pp->locallab.selspot).softradiusexp = softradiusexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).softradiusexp = softradiusexp->getValue();
pp->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve = Lmaskexpshape->getCurve();
if (expMethod->get_active_row_number() == 0) { if (expMethod->get_active_row_number() == 0) {
pp->locallab.spots.at(pp->locallab.selspot).expMethod = "std"; pp->locallab.spots.at(pp->locallab.selspot).expMethod = "std";
@ -3526,6 +3545,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).slomaskexp = pe->locallab.spots.at(pp->locallab.selspot).slomaskexp || slomaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskexp = pe->locallab.spots.at(pp->locallab.selspot).slomaskexp || slomaskexp->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmaskexp = pe->locallab.spots.at(pp->locallab.selspot).lapmaskexp || lapmaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskexp = pe->locallab.spots.at(pp->locallab.selspot).lapmaskexp || lapmaskexp->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).softradiusexp = pe->locallab.spots.at(pp->locallab.selspot).softradiusexp || softradiusexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softradiusexp = pe->locallab.spots.at(pp->locallab.selspot).softradiusexp || softradiusexp->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve || !Lmaskexpshape->isUnChanged();
pe->locallab.spots.at(pp->locallab.selspot).expMethod = pe->locallab.spots.at(pp->locallab.selspot).expMethod || expMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).expMethod = pe->locallab.spots.at(pp->locallab.selspot).expMethod || expMethod->get_active_text() != M("GENERAL_UNCHANGED");
pe->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = pe->locallab.spots.at(pp->locallab.selspot).exnoiseMethod || exnoiseMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = pe->locallab.spots.at(pp->locallab.selspot).exnoiseMethod || exnoiseMethod->get_active_text() != M("GENERAL_UNCHANGED");
pe->locallab.spots.at(pp->locallab.selspot).laplacexp = pe->locallab.spots.at(pp->locallab.selspot).laplacexp || laplacexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).laplacexp = pe->locallab.spots.at(pp->locallab.selspot).laplacexp || laplacexp->getEditedState();
@ -3813,6 +3833,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).slomaskexp = pedited->locallab.spots.at(pp->locallab.selspot).slomaskexp || slomaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskexp = pedited->locallab.spots.at(pp->locallab.selspot).slomaskexp || slomaskexp->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskexp || lapmaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskexp || lapmaskexp->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).softradiusexp = pedited->locallab.spots.at(pp->locallab.selspot).softradiusexp || softradiusexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softradiusexp = pedited->locallab.spots.at(pp->locallab.selspot).softradiusexp || softradiusexp->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve || !Lmaskexpshape->isUnChanged();
pedited->locallab.spots.at(pp->locallab.selspot).expMethod = pedited->locallab.spots.at(pp->locallab.selspot).expMethod || expMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).expMethod = pedited->locallab.spots.at(pp->locallab.selspot).expMethod || expMethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = pedited->locallab.spots.at(pp->locallab.selspot).exnoiseMethod || exnoiseMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = pedited->locallab.spots.at(pp->locallab.selspot).exnoiseMethod || exnoiseMethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->locallab.spots.at(pp->locallab.selspot).laplacexp = pedited->locallab.spots.at(pp->locallab.selspot).laplacexp || laplacexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).laplacexp = pedited->locallab.spots.at(pp->locallab.selspot).laplacexp || laplacexp->getEditedState();
@ -4190,6 +4211,13 @@ void Locallab::curveChanged(CurveEditor* ce)
listener->panelChanged(EvlocallabHHmaskexpshape, M("HISTORY_CUSTOMCURVE")); listener->panelChanged(EvlocallabHHmaskexpshape, M("HISTORY_CUSTOMCURVE"));
} }
} }
if (ce == Lmaskexpshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskexpshape, M("HISTORY_CUSTOMCURVE"));
}
}
} }
//Shadows Highlight //Shadows Highlight
@ -7884,6 +7912,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
slomaskexp->setValue(pp->locallab.spots.at(index).slomaskexp); slomaskexp->setValue(pp->locallab.spots.at(index).slomaskexp);
lapmaskexp->setValue(pp->locallab.spots.at(index).lapmaskexp); lapmaskexp->setValue(pp->locallab.spots.at(index).lapmaskexp);
softradiusexp->setValue(pp->locallab.spots.at(index).softradiusexp); softradiusexp->setValue(pp->locallab.spots.at(index).softradiusexp);
Lmaskexpshape->setCurve(pp->locallab.spots.at(index).Lmaskexpcurve);
if (pp->locallab.spots.at(index).expMethod == "std") { if (pp->locallab.spots.at(index).expMethod == "std") {
expMethod->set_active(0); expMethod->set_active(0);
@ -8260,6 +8289,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
slomaskexp->setEditedState(spotState->slomaskexp ? Edited : UnEdited); slomaskexp->setEditedState(spotState->slomaskexp ? Edited : UnEdited);
lapmaskexp->setEditedState(spotState->lapmaskexp ? Edited : UnEdited); lapmaskexp->setEditedState(spotState->lapmaskexp ? Edited : UnEdited);
softradiusexp->setEditedState(spotState->softradiusexp ? Edited : UnEdited); softradiusexp->setEditedState(spotState->softradiusexp ? Edited : UnEdited);
Lmaskexpshape->setUnChanged(!spotState->Lmaskexpcurve);
if (!spotState->expMethod) { if (!spotState->expMethod) {
expMethod->set_active_text(M("GENERAL_UNCHANGED")); expMethod->set_active_text(M("GENERAL_UNCHANGED"));

View File

@ -86,6 +86,8 @@ private:
// Exposure // Exposure
CurveEditorGroup* const curveEditorG; CurveEditorGroup* const curveEditorG;
CurveEditorGroup* const maskexpCurveEditorG; CurveEditorGroup* const maskexpCurveEditorG;
CurveEditorGroup* const mask2expCurveEditorG;
DiagonalCurveEditor* Lmaskexpshape;
DiagonalCurveEditor* shapeexpos; DiagonalCurveEditor* shapeexpos;
FlatCurveEditor* CCmaskexpshape; FlatCurveEditor* CCmaskexpshape;
FlatCurveEditor* LLmaskexpshape; FlatCurveEditor* LLmaskexpshape;

View File

@ -1034,6 +1034,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).slomaskexp = locallab.spots.at(j).slomaskexp && pSpot.slomaskexp == otherSpot.slomaskexp; locallab.spots.at(j).slomaskexp = locallab.spots.at(j).slomaskexp && pSpot.slomaskexp == otherSpot.slomaskexp;
locallab.spots.at(j).lapmaskexp = locallab.spots.at(j).lapmaskexp && pSpot.lapmaskexp == otherSpot.lapmaskexp; locallab.spots.at(j).lapmaskexp = locallab.spots.at(j).lapmaskexp && pSpot.lapmaskexp == otherSpot.lapmaskexp;
locallab.spots.at(j).softradiusexp = locallab.spots.at(j).softradiusexp && pSpot.softradiusexp == otherSpot.softradiusexp; locallab.spots.at(j).softradiusexp = locallab.spots.at(j).softradiusexp && pSpot.softradiusexp == otherSpot.softradiusexp;
locallab.spots.at(j).Lmaskexpcurve = locallab.spots.at(j).Lmaskexpcurve && pSpot.Lmaskexpcurve == otherSpot.Lmaskexpcurve;
locallab.spots.at(j).expMethod = locallab.spots.at(j).expMethod && pSpot.expMethod == otherSpot.expMethod; locallab.spots.at(j).expMethod = locallab.spots.at(j).expMethod && pSpot.expMethod == otherSpot.expMethod;
locallab.spots.at(j).exnoiseMethod = locallab.spots.at(j).exnoiseMethod && pSpot.exnoiseMethod == otherSpot.exnoiseMethod; locallab.spots.at(j).exnoiseMethod = locallab.spots.at(j).exnoiseMethod && pSpot.exnoiseMethod == otherSpot.exnoiseMethod;
locallab.spots.at(j).laplacexp = locallab.spots.at(j).laplacexp && pSpot.laplacexp == otherSpot.laplacexp; locallab.spots.at(j).laplacexp = locallab.spots.at(j).laplacexp && pSpot.laplacexp == otherSpot.laplacexp;
@ -3018,6 +3019,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).softradiusexp = mods.locallab.spots.at(i).softradiusexp; toEdit.locallab.spots.at(i).softradiusexp = mods.locallab.spots.at(i).softradiusexp;
} }
if (locallab.spots.at(i).Lmaskexpcurve) {
toEdit.locallab.spots.at(i).Lmaskexpcurve = mods.locallab.spots.at(i).Lmaskexpcurve;
}
if (locallab.spots.at(i).expMethod) { if (locallab.spots.at(i).expMethod) {
toEdit.locallab.spots.at(i).expMethod = mods.locallab.spots.at(i).expMethod; toEdit.locallab.spots.at(i).expMethod = mods.locallab.spots.at(i).expMethod;
} }
@ -4806,6 +4811,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
slomaskexp(v), slomaskexp(v),
lapmaskexp(v), lapmaskexp(v),
softradiusexp(v), softradiusexp(v),
Lmaskexpcurve(v),
expMethod(v), expMethod(v),
exnoiseMethod(v), exnoiseMethod(v),
laplacexp(v), laplacexp(v),
@ -5086,6 +5092,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
slomaskexp = v; slomaskexp = v;
lapmaskexp = v; lapmaskexp = v;
softradiusexp = v; softradiusexp = v;
Lmaskexpcurve = v;
expMethod = v; expMethod = v;
exnoiseMethod = v; exnoiseMethod = v;
laplacexp = v; laplacexp = v;

View File

@ -452,6 +452,7 @@ public:
bool slomaskexp; bool slomaskexp;
bool lapmaskexp; bool lapmaskexp;
bool softradiusexp; bool softradiusexp;
bool Lmaskexpcurve;
bool expMethod; bool expMethod;
bool exnoiseMethod; bool exnoiseMethod;
bool laplacexp; bool laplacexp;