Add contrast curve to mask 3 ToneMapping

This commit is contained in:
Desmis 2019-10-15 14:03:21 +02:00
parent e8dd1c4378
commit 94bd0a7d60
15 changed files with 77 additions and 8 deletions

View File

@ -1010,6 +1010,7 @@ 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_771;Local - Exp Mask contrast curve
HISTORY_MSG_772;Local - SH Mask contrast curve HISTORY_MSG_772;Local - SH Mask contrast curve
HISTORY_MSG_773;Local - TM 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

@ -889,9 +889,11 @@ void Crop::update(int todo)
bool localmaskutili = parent->localmaskutili; bool localmaskutili = parent->localmaskutili;
bool localmaskexputili = parent->localmaskexputili; bool localmaskexputili = parent->localmaskexputili;
bool localmaskSHutili = parent->localmaskSHutili; bool localmaskSHutili = parent->localmaskSHutili;
bool localmasktmutili = parent->localmasktmutili;
LUTf lmasklocalcurve2(65536, 0); LUTf lmasklocalcurve2(65536, 0);
LUTf lmaskexplocalcurve2(65536, 0); LUTf lmaskexplocalcurve2(65536, 0);
LUTf lmaskSHlocalcurve2(65536, 0); LUTf lmaskSHlocalcurve2(65536, 0);
LUTf lmasktmlocalcurve2(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);
@ -997,6 +999,8 @@ void Crop::update(int todo)
CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve2, sca);
localmaskSHutili = false; localmaskSHutili = false;
CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve2, sca);
localmasktmutili = false;
CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve2, sca);
double ecomp = params.locallab.spots.at(sp).expcomp; double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1038,6 +1042,7 @@ void Crop::update(int todo)
lmasklocalcurve2, localmaskutili, lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili, lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili, lmaskSHlocalcurve2, localmaskSHutili,
lmasktmlocalcurve2, localmasktmutili,
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,
@ -1058,6 +1063,7 @@ void Crop::update(int todo)
lmasklocalcurve2, localmaskutili, lmasklocalcurve2, localmaskutili,
lmaskexplocalcurve2, localmaskexputili, lmaskexplocalcurve2, localmaskexputili,
lmaskSHlocalcurve2, localmaskSHutili, lmaskSHlocalcurve2, localmaskSHutili,
lmasktmlocalcurve2, localmasktmutili,
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,
@ -1076,6 +1082,7 @@ void Crop::update(int todo)
lmasklocalcurve2.clear(); lmasklocalcurve2.clear();
lmaskexplocalcurve2.clear(); lmaskexplocalcurve2.clear();
lmaskSHlocalcurve2.clear(); lmaskSHlocalcurve2.clear();
lmasktmlocalcurve2.clear();
hltonecurveloc2.clear(); hltonecurveloc2.clear();
shtonecurveloc2.clear(); shtonecurveloc2.clear();
tonecurveloc2.clear(); tonecurveloc2.clear();

View File

@ -174,6 +174,7 @@ ImProcCoordinator::ImProcCoordinator() :
lmasklocalcurve(65536, 0), lmasklocalcurve(65536, 0),
lmaskexplocalcurve(65536, 0), lmaskexplocalcurve(65536, 0),
lmaskSHlocalcurve(65536, 0), lmaskSHlocalcurve(65536, 0),
lmasktmlocalcurve(65536, 0),
locallutili(false), locallutili(false),
localcutili(false), localcutili(false),
localexutili(false), localexutili(false),
@ -183,6 +184,7 @@ ImProcCoordinator::ImProcCoordinator() :
localmaskutili(false), localmaskutili(false),
localmaskexputili(false), localmaskexputili(false),
localmaskSHutili(false), localmaskSHutili(false),
localmasktmutili(false),
lcmasexputili(false), lcmasexputili(false),
lhmasexputili(false), lhmasexputili(false),
llmasexputili(false), llmasexputili(false),
@ -926,6 +928,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
llmasexputili = false; llmasexputili = false;
localmaskexputili = false; localmaskexputili = false;
localmaskSHutili = false; localmaskSHutili = false;
localmasktmutili = false;
lcmasSHutili = false; lcmasSHutili = false;
lhmasSHutili = false; lhmasSHutili = false;
llmasSHutili = false; llmasSHutili = false;
@ -976,6 +979,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
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); CurveFactory::curvemaskLocal(localmaskexputili, params->locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskSHutili, params->locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, sca); CurveFactory::curvemaskLocal(localmaskSHutili, params->locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, sca);
CurveFactory::curvemaskLocal(localmasktmutili, params->locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 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;
@ -1032,6 +1036,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili, lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili, lmaskSHlocalcurve, localmaskSHutili,
lmasktmlocalcurve, localmasktmutili,
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,
@ -1051,6 +1056,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili, lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili, lmaskSHlocalcurve, localmaskSHutili,
lmasktmlocalcurve, localmasktmutili,
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,
@ -1076,6 +1082,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasklocalcurve.clear(); lmasklocalcurve.clear();
lmaskexplocalcurve.clear(); lmaskexplocalcurve.clear();
lmaskSHlocalcurve.clear(); lmaskSHlocalcurve.clear();
lmasktmlocalcurve.clear();
hltonecurveloc.clear(); hltonecurveloc.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();

View File

@ -236,6 +236,7 @@ protected:
LUTf lmasklocalcurve; LUTf lmasklocalcurve;
LUTf lmaskexplocalcurve; LUTf lmaskexplocalcurve;
LUTf lmaskSHlocalcurve; LUTf lmaskSHlocalcurve;
LUTf lmasktmlocalcurve;
// LUTu lhist16loc; // LUTu lhist16loc;
LocretigainCurve locRETgainCurve; LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve; LocretitransCurve locRETtransCurve;
@ -274,6 +275,7 @@ protected:
bool localmaskutili; bool localmaskutili;
bool localmaskexputili; bool localmaskexputili;
bool localmaskSHutili; bool localmaskSHutili;
bool localmasktmutili;
bool lcmasexputili; bool lcmasexputili;
bool lhmasexputili; bool lhmasexputili;
bool llmasexputili; bool llmasexputili;

View File

@ -218,6 +218,7 @@ public:
LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili, LUTf & lmaskexplocalcurve, bool & localmaskexputili,
LUTf & lmaskSHlocalcurve, bool & localmaskSHutili, LUTf & lmaskSHlocalcurve, bool & localmaskSHutili,
LUTf & lmasktmlocalcurve, bool & localmasktmutili,
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,

View File

@ -6715,6 +6715,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
LUTf & lmasklocalcurve, bool & localmaskutili, LUTf & lmasklocalcurve, bool & localmaskutili,
LUTf & lmaskexplocalcurve, bool & localmaskexputili, LUTf & lmaskexplocalcurve, bool & localmaskexputili,
LUTf & lmaskSHlocalcurve, bool & localmaskSHutili, LUTf & lmaskSHlocalcurve, bool & localmaskSHutili,
LUTf & lmasktmlocalcurve, bool & localmasktmutili,
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,
@ -7817,12 +7818,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
float pde = params->locallab.spots.at(sp).laplac; float pde = params->locallab.spots.at(sp).laplac;
if (!params->locallab.spots.at(sp).enatmMaskaft) { if (!params->locallab.spots.at(sp).enatmMaskaft) {
LUTf dummy;
bool uti;
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, inv, lp, maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, inv, lp,
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, 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, lmasktmlocalcurve, localmasktmutili);
if (lp.showmasktmmet == 3) { if (lp.showmasktmmet == 3) {
showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufgbm.get(), transformed, bufmaskorigtm.get(), 0); showmask(lp, xstart, ystart, cx, cy, bfw, bfh, bufgbm.get(), transformed, bufmaskorigtm.get(), 0);
@ -7842,12 +7841,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
if (enatmMasktmap) { if (enatmMasktmap) {
//calculate new values for original, originalmasktm, bufmaskorigtm...in function of tmp1 //calculate new values for original, originalmasktm, bufmaskorigtm...in function of tmp1
LUTf dummy;
bool uti;
maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, inv, lp, maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, inv, lp,
locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, multiThread, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, 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, lmasktmlocalcurve, localmasktmutili);
if (lp.showmasktmmet == 3) {//dispaly mask if (lp.showmasktmmet == 3) {//dispaly mask
showmask(lp, xstart, ystart, cx, cy, bfw, bfh, tmp1.get(), transformed, bufmaskorigtm.get(), 0); showmask(lp, xstart, ystart, cx, cy, bfw, bfh, tmp1.get(), transformed, bufmaskorigtm.get(), 0);

View File

@ -799,6 +799,7 @@ enum ProcEventCode {
EvlocallabLmaskshape = 769, EvlocallabLmaskshape = 769,
EvlocallabLmaskexpshape = 770, EvlocallabLmaskexpshape = 770,
EvlocallabLmaskSHshape = 771, EvlocallabLmaskSHshape = 771,
EvlocallabLmasktmshape = 772,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -2590,6 +2590,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
gammasktm(1.0), gammasktm(1.0),
slomasktm(0.0), slomasktm(0.0),
lapmasktm(0.0), lapmasktm(0.0),
Lmasktmcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
// Retinex // Retinex
expreti(false), expreti(false),
retinexMethod("high"), retinexMethod("high"),
@ -2875,6 +2876,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& gammasktm == other.gammasktm && gammasktm == other.gammasktm
&& slomasktm == other.slomasktm && slomasktm == other.slomasktm
&& lapmasktm == other.lapmasktm && lapmasktm == other.lapmasktm
&& Lmasktmcurve == other.Lmasktmcurve
// Retinex // Retinex
&& expreti == other.expreti && expreti == other.expreti
&& retinexMethod == other.retinexMethod && retinexMethod == other.retinexMethod
@ -4146,6 +4148,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammasktm, "Locallab", "Gammasktm_" + std::to_string(i), spot.gammasktm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammasktm, "Locallab", "Gammasktm_" + std::to_string(i), spot.gammasktm, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomasktm, "Locallab", "Slomasktm_" + std::to_string(i), spot.slomasktm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomasktm, "Locallab", "Slomasktm_" + std::to_string(i), spot.slomasktm, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmasktm, "Locallab", "Lapmasktm_" + std::to_string(i), spot.lapmasktm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmasktm, "Locallab", "Lapmasktm_" + std::to_string(i), spot.lapmasktm, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmasktmcurve, "Locallab", "LmasktmCurve_" + std::to_string(i), spot.Lmasktmcurve, keyFile);
// Retinex // Retinex
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expreti, "Locallab", "Expreti_" + std::to_string(i), spot.expreti, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expreti, "Locallab", "Expreti_" + std::to_string(i), spot.expreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).retinexMethod, "Locallab", "retinexMethod_" + std::to_string(i), spot.retinexMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).retinexMethod, "Locallab", "retinexMethod_" + std::to_string(i), spot.retinexMethod, keyFile);
@ -5544,6 +5547,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Gammasktm_" + std::to_string(i), pedited, spot.gammasktm, spotEdited.gammasktm); assignFromKeyfile(keyFile, "Locallab", "Gammasktm_" + std::to_string(i), pedited, spot.gammasktm, spotEdited.gammasktm);
assignFromKeyfile(keyFile, "Locallab", "Slomasktm_" + std::to_string(i), pedited, spot.slomasktm, spotEdited.slomasktm); assignFromKeyfile(keyFile, "Locallab", "Slomasktm_" + std::to_string(i), pedited, spot.slomasktm, spotEdited.slomasktm);
assignFromKeyfile(keyFile, "Locallab", "Lapmasktm_" + std::to_string(i), pedited, spot.lapmasktm, spotEdited.lapmasktm); assignFromKeyfile(keyFile, "Locallab", "Lapmasktm_" + std::to_string(i), pedited, spot.lapmasktm, spotEdited.lapmasktm);
assignFromKeyfile(keyFile, "Locallab", "LmasktmCurve_" + std::to_string(i), pedited, spot.Lmasktmcurve, spotEdited.Lmasktmcurve);
// Retinex // Retinex
assignFromKeyfile(keyFile, "Locallab", "Expreti_" + std::to_string(i), pedited, spot.expreti, spotEdited.expreti); assignFromKeyfile(keyFile, "Locallab", "Expreti_" + std::to_string(i), pedited, spot.expreti, spotEdited.expreti);
assignFromKeyfile(keyFile, "Locallab", "retinexMethod_" + std::to_string(i), pedited, spot.retinexMethod, spotEdited.retinexMethod); assignFromKeyfile(keyFile, "Locallab", "retinexMethod_" + std::to_string(i), pedited, spot.retinexMethod, spotEdited.retinexMethod);

View File

@ -1139,6 +1139,7 @@ struct LocallabParams {
double gammasktm; double gammasktm;
double slomasktm; double slomasktm;
double lapmasktm; double lapmasktm;
std::vector<double> Lmasktmcurve;
// Retinex // Retinex
bool expreti; bool expreti;
Glib::ustring retinexMethod; Glib::ustring retinexMethod;

View File

@ -798,7 +798,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabscalegr LUMINANCECURVE, //Evlocallabscalegr
LUMINANCECURVE, //EvlocallabLmaskshape LUMINANCECURVE, //EvlocallabLmaskshape
LUMINANCECURVE, //EvlocallabLmaskexpshape LUMINANCECURVE, //EvlocallabLmaskexpshape
LUMINANCECURVE //EvlocallabLmaskSHshape LUMINANCECURVE, //EvlocallabLmaskSHshape
LUMINANCECURVE //EvlocallabLmasktmshape
}; };
namespace rtengine namespace rtengine

View File

@ -1127,6 +1127,7 @@ private:
LUTf lmasklocalcurve(65536, 0); LUTf lmasklocalcurve(65536, 0);
LUTf lmaskexplocalcurve(65536, 0); LUTf lmaskexplocalcurve(65536, 0);
LUTf lmaskSHlocalcurve(65536, 0); LUTf lmaskSHlocalcurve(65536, 0);
LUTf lmasktmlocalcurve(65536, 0);
// int maxspot = 1; // int maxspot = 1;
float** shbuffer = nullptr; float** shbuffer = nullptr;
@ -1152,6 +1153,7 @@ private:
bool localmaskutili = false; bool localmaskutili = false;
bool localmaskexputili = false; bool localmaskexputili = false;
bool localmaskSHutili = false; bool localmaskSHutili = false;
bool localmasktmutili = false;
bool lcmasexputili = false; bool lcmasexputili = false;
bool lhmasexputili = false; bool lhmasexputili = false;
bool llmasexputili = false; bool llmasexputili = false;
@ -1203,6 +1205,7 @@ private:
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); CurveFactory::curvemaskLocal(localmaskexputili, params.locallab.spots.at(sp).Lmaskexpcurve, lmaskexplocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, 1); CurveFactory::curvemaskLocal(localmaskSHutili, params.locallab.spots.at(sp).LmaskSHcurve, lmaskSHlocalcurve, 1);
CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 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;
@ -1240,6 +1243,7 @@ private:
lmasklocalcurve, localmaskutili, lmasklocalcurve, localmaskutili,
lmaskexplocalcurve, localmaskexputili, lmaskexplocalcurve, localmaskexputili,
lmaskSHlocalcurve, localmaskSHutili, lmaskSHlocalcurve, localmaskSHutili,
lmasktmlocalcurve, localmasktmutili,
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,

View File

@ -163,13 +163,14 @@ Locallab::Locallab():
//Shadows Highlight //Shadows Highlight
maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2SHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), mask2SHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
// Vibranceretinex // Vibrance
curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))), curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))),
//Blur //Blur
maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
//TM //TM
masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
mask2tmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
// Retinex // Retinex
LocalcurveEditortransT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONMAP"))), LocalcurveEditortransT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONMAP"))),
LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))), LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))),
@ -1350,6 +1351,25 @@ Locallab::Locallab():
HHmasktmshape->setBottomBarColorProvider(this, 6); HHmasktmshape->setBottomBarColorProvider(this, 6);
masktmCurveEditorG->curveListComplete(); masktmCurveEditorG->curveListComplete();
mask2tmCurveEditorG->setCurveListener(this);
Lmasktmshape = static_cast<DiagonalCurveEditor*>(mask2tmCurveEditorG->addCurve(CT_Diagonal, "L(L)"));
Lmasktmshape->setResetCurve(DiagonalCurveType(defSpot.Lmasktmcurve.at(0)), defSpot.Lmasktmcurve);
if (showtooltip) {
Lmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
}
std::vector<GradientMilestone> mLmasktmshape;
mLmasktmshape.push_back(GradientMilestone(0., 0., 0., 0.));
mLmasktmshape.push_back(GradientMilestone(1., 1., 1., 1.));
Lmasktmshape->setBottomBarBgGradient(mLmasktmshape);
Lmasktmshape->setLeftBarBgGradient(mLmasktmshape);
mask2tmCurveEditorG->curveListComplete();
enatmMaskConn = enatmMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskChanged)); enatmMaskConn = enatmMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskChanged));
enatmMaskaftConn = enatmMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskaftChanged)); enatmMaskaftConn = enatmMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskaftChanged));
@ -1393,6 +1413,7 @@ Locallab::Locallab():
masktmBox->pack_start(*chromasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*chromasktm, Gtk::PACK_SHRINK, 0);
masktmBox->pack_start(*gammasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*gammasktm, Gtk::PACK_SHRINK, 0);
masktmBox->pack_start(*slomasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*slomasktm, Gtk::PACK_SHRINK, 0);
masktmBox->pack_start(*mask2tmCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmasktm->add(*masktmBox, false); expmasktm->add(*masktmBox, false);
@ -2267,6 +2288,7 @@ Locallab::~Locallab()
delete mask2CurveEditorG; delete mask2CurveEditorG;
delete mask2expCurveEditorG; delete mask2expCurveEditorG;
delete mask2SHCurveEditorG; delete mask2SHCurveEditorG;
delete mask2tmCurveEditorG;
delete curveEditorG; delete curveEditorG;
delete maskexpCurveEditorG; delete maskexpCurveEditorG;
delete maskSHCurveEditorG; delete maskSHCurveEditorG;
@ -3360,6 +3382,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).gammasktm = gammasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammasktm = gammasktm->getValue();
pp->locallab.spots.at(pp->locallab.selspot).slomasktm = slomasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomasktm = slomasktm->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmasktm = lapmasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmasktm = lapmasktm->getValue();
pp->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve = Lmasktmshape->getCurve();
// Retinex // Retinex
pp->locallab.spots.at(pp->locallab.selspot).expreti = expreti->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).expreti = expreti->getEnabled();
@ -3661,6 +3684,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).gammasktm = pe->locallab.spots.at(pp->locallab.selspot).gammasktm || gammasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammasktm = pe->locallab.spots.at(pp->locallab.selspot).gammasktm || gammasktm->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).slomasktm = pe->locallab.spots.at(pp->locallab.selspot).slomasktm || slomasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomasktm = pe->locallab.spots.at(pp->locallab.selspot).slomasktm || slomasktm->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmasktm = pe->locallab.spots.at(pp->locallab.selspot).lapmasktm || lapmasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmasktm = pe->locallab.spots.at(pp->locallab.selspot).lapmasktm || lapmasktm->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve || !Lmasktmshape->isUnChanged();
// Retinex // Retinex
pe->locallab.spots.at(pp->locallab.selspot).expreti = pe->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).expreti = pe->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).retinexMethod = pe->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).retinexMethod = pe->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED");
@ -3952,6 +3976,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).gammasktm = pedited->locallab.spots.at(pp->locallab.selspot).gammasktm || gammasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammasktm = pedited->locallab.spots.at(pp->locallab.selspot).gammasktm || gammasktm->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).slomasktm = pedited->locallab.spots.at(pp->locallab.selspot).slomasktm || slomasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomasktm = pedited->locallab.spots.at(pp->locallab.selspot).slomasktm || slomasktm->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmasktm = pedited->locallab.spots.at(pp->locallab.selspot).lapmasktm || lapmasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmasktm = pedited->locallab.spots.at(pp->locallab.selspot).lapmasktm || lapmasktm->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve || !Lmasktmshape->isUnChanged();
// Retinex // Retinex
pedited->locallab.spots.at(pp->locallab.selspot).expreti = pedited->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).expreti = pedited->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod = pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod = pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED");
@ -4345,6 +4370,12 @@ void Locallab::curveChanged(CurveEditor* ce)
} }
} }
if (ce == Lmasktmshape) {
if (listener) {
listener->panelChanged(EvlocallabLmasktmshape, M("HISTORY_CUSTOMCURVE"));
}
}
} }
// Retinex // Retinex
@ -8093,6 +8124,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
CCmasktmshape->setCurve(pp->locallab.spots.at(index).CCmasktmcurve); CCmasktmshape->setCurve(pp->locallab.spots.at(index).CCmasktmcurve);
LLmasktmshape->setCurve(pp->locallab.spots.at(index).LLmasktmcurve); LLmasktmshape->setCurve(pp->locallab.spots.at(index).LLmasktmcurve);
HHmasktmshape->setCurve(pp->locallab.spots.at(index).HHmasktmcurve); HHmasktmshape->setCurve(pp->locallab.spots.at(index).HHmasktmcurve);
Lmasktmshape->setCurve(pp->locallab.spots.at(index).Lmasktmcurve);
// Retinex // Retinex
expreti->setEnabled(pp->locallab.spots.at(index).expreti); expreti->setEnabled(pp->locallab.spots.at(index).expreti);
@ -8440,6 +8472,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
gammasktm->setEditedState(spotState->gammasktm ? Edited : UnEdited); gammasktm->setEditedState(spotState->gammasktm ? Edited : UnEdited);
slomasktm->setEditedState(spotState->slomasktm ? Edited : UnEdited); slomasktm->setEditedState(spotState->slomasktm ? Edited : UnEdited);
lapmasktm->setEditedState(spotState->lapmasktm ? Edited : UnEdited); lapmasktm->setEditedState(spotState->lapmasktm ? Edited : UnEdited);
Lmasktmshape->setUnChanged(!spotState->Lmasktmcurve);
// Retinex // Retinex
expreti->set_inconsistent(!spotState->expreti); expreti->set_inconsistent(!spotState->expreti);

View File

@ -109,6 +109,8 @@ private:
FlatCurveEditor* HHmaskblshape; FlatCurveEditor* HHmaskblshape;
// TM // TM
CurveEditorGroup* const masktmCurveEditorG; CurveEditorGroup* const masktmCurveEditorG;
CurveEditorGroup* const mask2tmCurveEditorG;
DiagonalCurveEditor* Lmasktmshape;
FlatCurveEditor* CCmasktmshape; FlatCurveEditor* CCmasktmshape;
FlatCurveEditor* LLmasktmshape; FlatCurveEditor* LLmasktmshape;
FlatCurveEditor* HHmasktmshape; FlatCurveEditor* HHmasktmshape;

View File

@ -1130,6 +1130,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).gammasktm = locallab.spots.at(j).gammasktm && pSpot.gammasktm == otherSpot.gammasktm; locallab.spots.at(j).gammasktm = locallab.spots.at(j).gammasktm && pSpot.gammasktm == otherSpot.gammasktm;
locallab.spots.at(j).slomasktm = locallab.spots.at(j).slomasktm && pSpot.slomasktm == otherSpot.slomasktm; locallab.spots.at(j).slomasktm = locallab.spots.at(j).slomasktm && pSpot.slomasktm == otherSpot.slomasktm;
locallab.spots.at(j).lapmasktm = locallab.spots.at(j).lapmasktm && pSpot.lapmasktm == otherSpot.lapmasktm; locallab.spots.at(j).lapmasktm = locallab.spots.at(j).lapmasktm && pSpot.lapmasktm == otherSpot.lapmasktm;
locallab.spots.at(j).Lmasktmcurve = locallab.spots.at(j).Lmasktmcurve && pSpot.Lmasktmcurve == otherSpot.Lmasktmcurve;
// Retinex // Retinex
locallab.spots.at(j).expreti = locallab.spots.at(j).expreti && pSpot.expreti == otherSpot.expreti; locallab.spots.at(j).expreti = locallab.spots.at(j).expreti && pSpot.expreti == otherSpot.expreti;
locallab.spots.at(j).retinexMethod = locallab.spots.at(j).retinexMethod && pSpot.retinexMethod == otherSpot.retinexMethod; locallab.spots.at(j).retinexMethod = locallab.spots.at(j).retinexMethod && pSpot.retinexMethod == otherSpot.retinexMethod;
@ -3393,6 +3394,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).lapmasktm = mods.locallab.spots.at(i).lapmasktm; toEdit.locallab.spots.at(i).lapmasktm = mods.locallab.spots.at(i).lapmasktm;
} }
if (locallab.spots.at(i).Lmasktmcurve) {
toEdit.locallab.spots.at(i).Lmasktmcurve = mods.locallab.spots.at(i).Lmasktmcurve;
}
// Retinex // Retinex
if (locallab.spots.at(i).expreti) { if (locallab.spots.at(i).expreti) {
toEdit.locallab.spots.at(i).expreti = mods.locallab.spots.at(i).expreti; toEdit.locallab.spots.at(i).expreti = mods.locallab.spots.at(i).expreti;
@ -4913,6 +4918,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
gammasktm(v), gammasktm(v),
slomasktm(v), slomasktm(v),
lapmasktm(v), lapmasktm(v),
Lmasktmcurve(v),
// Retinex // Retinex
expreti(v), expreti(v),
retinexMethod(v), retinexMethod(v),
@ -5195,6 +5201,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
gammasktm = v; gammasktm = v;
slomasktm = v; slomasktm = v;
lapmasktm = v; lapmasktm = v;
Lmasktmcurve = v;
// Retinex // Retinex
expreti = v; expreti = v;
retinexMethod = v; retinexMethod = v;

View File

@ -549,6 +549,7 @@ public:
bool gammasktm; bool gammasktm;
bool slomasktm; bool slomasktm;
bool lapmasktm; bool lapmasktm;
bool Lmasktmcurve;
// Retinex // Retinex
bool expreti; bool expreti;
bool retinexMethod; bool retinexMethod;