Add contrast curve to mask 1 Blur and Denoise

This commit is contained in:
Desmis 2019-10-15 17:59:27 +02:00
parent df007c66c9
commit 6468db2bd3
15 changed files with 85 additions and 1 deletions

View File

@ -1013,6 +1013,7 @@ HISTORY_MSG_772;Local - SH Mask contrast curve
HISTORY_MSG_773;Local - TM Mask contrast curve HISTORY_MSG_773;Local - TM Mask contrast curve
HISTORY_MSG_774;Local - Reti Mask contrast curve HISTORY_MSG_774;Local - Reti Mask contrast curve
HISTORY_MSG_775;Local - CBDL Mask contrast curve HISTORY_MSG_775;Local - CBDL Mask contrast curve
HISTORY_MSG_776;Local - Blur Denoise 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

@ -892,12 +892,14 @@ void Crop::update(int todo)
bool localmasktmutili = parent->localmasktmutili; bool localmasktmutili = parent->localmasktmutili;
bool localmaskretiutili = parent->localmaskretiutili; bool localmaskretiutili = parent->localmaskretiutili;
bool localmaskcbutili = parent->localmaskcbutili; bool localmaskcbutili = parent->localmaskcbutili;
bool localmaskblutili = parent->localmaskblutili;
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 lmasktmlocalcurve2(65536, 0);
LUTf lmaskretilocalcurve2(65536, 0); LUTf lmaskretilocalcurve2(65536, 0);
LUTf lmaskcblocalcurve2(65536, 0); LUTf lmaskcblocalcurve2(65536, 0);
LUTf lmaskbllocalcurve2(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);
@ -1009,6 +1011,8 @@ void Crop::update(int todo)
CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve2, sca);
localmaskcbutili = false; localmaskcbutili = false;
CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve2, sca); CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve2, sca);
localmaskblutili = false;
CurveFactory::curvemaskLocal(localmaskblutili, params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve2, sca);
double ecomp = params.locallab.spots.at(sp).expcomp; double ecomp = params.locallab.spots.at(sp).expcomp;
@ -1053,6 +1057,7 @@ void Crop::update(int todo)
lmasktmlocalcurve2, localmasktmutili, lmasktmlocalcurve2, localmasktmutili,
lmaskretilocalcurve2, localmaskretiutili, lmaskretilocalcurve2, localmaskretiutili,
lmaskcblocalcurve2, localmaskcbutili, lmaskcblocalcurve2, localmaskcbutili,
lmaskbllocalcurve2, localmaskblutili,
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 +1081,7 @@ void Crop::update(int todo)
lmasktmlocalcurve2, localmasktmutili, lmasktmlocalcurve2, localmasktmutili,
lmaskretilocalcurve2, localmaskretiutili, lmaskretilocalcurve2, localmaskretiutili,
lmaskcblocalcurve2, localmaskcbutili, lmaskcblocalcurve2, localmaskcbutili,
lmaskbllocalcurve2, localmaskblutili,
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,
@ -1097,6 +1103,7 @@ void Crop::update(int todo)
lmasktmlocalcurve2.clear(); lmasktmlocalcurve2.clear();
lmaskretilocalcurve2.clear(); lmaskretilocalcurve2.clear();
lmaskcblocalcurve2.clear(); lmaskcblocalcurve2.clear();
lmaskbllocalcurve2.clear();
hltonecurveloc2.clear(); hltonecurveloc2.clear();
shtonecurveloc2.clear(); shtonecurveloc2.clear();
tonecurveloc2.clear(); tonecurveloc2.clear();

View File

@ -177,6 +177,7 @@ ImProcCoordinator::ImProcCoordinator() :
lmasktmlocalcurve(65536, 0), lmasktmlocalcurve(65536, 0),
lmaskretilocalcurve(65536, 0), lmaskretilocalcurve(65536, 0),
lmaskcblocalcurve(65536, 0), lmaskcblocalcurve(65536, 0),
lmaskbllocalcurve(65536, 0),
locallutili(false), locallutili(false),
localcutili(false), localcutili(false),
localexutili(false), localexutili(false),
@ -189,6 +190,7 @@ ImProcCoordinator::ImProcCoordinator() :
localmasktmutili(false), localmasktmutili(false),
localmaskretiutili(false), localmaskretiutili(false),
localmaskcbutili(false), localmaskcbutili(false),
localmaskblutili(false),
lcmasexputili(false), lcmasexputili(false),
lhmasexputili(false), lhmasexputili(false),
llmasexputili(false), llmasexputili(false),
@ -935,6 +937,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
localmasktmutili = false; localmasktmutili = false;
localmaskretiutili = false; localmaskretiutili = false;
localmaskcbutili = false; localmaskcbutili = false;
localmaskblutili = false;
lcmasSHutili = false; lcmasSHutili = false;
lhmasSHutili = false; lhmasSHutili = false;
llmasSHutili = false; llmasSHutili = false;
@ -988,6 +991,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
CurveFactory::curvemaskLocal(localmasktmutili, params->locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, sca); CurveFactory::curvemaskLocal(localmasktmutili, params->locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskretiutili, params->locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, sca); CurveFactory::curvemaskLocal(localmaskretiutili, params->locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskcbutili, params->locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, sca); CurveFactory::curvemaskLocal(localmaskcbutili, params->locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, sca);
CurveFactory::curvemaskLocal(localmaskblutili, params->locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, 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;
@ -1047,6 +1051,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasktmlocalcurve, localmasktmutili, lmasktmlocalcurve, localmasktmutili,
lmaskretilocalcurve, localmaskretiutili, lmaskretilocalcurve, localmaskretiutili,
lmaskcblocalcurve, localmaskcbutili, lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
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,
@ -1069,6 +1074,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasktmlocalcurve, localmasktmutili, lmasktmlocalcurve, localmasktmutili,
lmaskretilocalcurve, localmaskretiutili, lmaskretilocalcurve, localmaskretiutili,
lmaskcblocalcurve, localmaskcbutili, lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
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,
@ -1097,6 +1103,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
lmasktmlocalcurve.clear(); lmasktmlocalcurve.clear();
lmaskretilocalcurve.clear(); lmaskretilocalcurve.clear();
lmaskcblocalcurve.clear(); lmaskcblocalcurve.clear();
lmaskbllocalcurve.clear();
hltonecurveloc.clear(); hltonecurveloc.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();

View File

@ -239,6 +239,7 @@ protected:
LUTf lmasktmlocalcurve; LUTf lmasktmlocalcurve;
LUTf lmaskretilocalcurve; LUTf lmaskretilocalcurve;
LUTf lmaskcblocalcurve; LUTf lmaskcblocalcurve;
LUTf lmaskbllocalcurve;
// LUTu lhist16loc; // LUTu lhist16loc;
LocretigainCurve locRETgainCurve; LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve; LocretitransCurve locRETtransCurve;
@ -280,6 +281,7 @@ protected:
bool localmasktmutili; bool localmasktmutili;
bool localmaskretiutili; bool localmaskretiutili;
bool localmaskcbutili; bool localmaskcbutili;
bool localmaskblutili;
bool lcmasexputili; bool lcmasexputili;
bool lhmasexputili; bool lhmasexputili;
bool llmasexputili; bool llmasexputili;

View File

@ -231,6 +231,7 @@ public:
LUTf & lmasktmlocalcurve, bool & localmasktmutili, LUTf & lmasktmlocalcurve, bool & localmasktmutili,
LUTf & lmaskretilocalcurve, bool & localmaskretiutili, LUTf & lmaskretilocalcurve, bool & localmaskretiutili,
LUTf & lmaskcblocalcurve, bool & localmaskcbutili, LUTf & lmaskcblocalcurve, bool & localmaskcbutili,
LUTf & lmaskbllocalcurve, bool & localmaskblutili,
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

@ -6718,6 +6718,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
LUTf & lmasktmlocalcurve, bool & localmasktmutili, LUTf & lmasktmlocalcurve, bool & localmasktmutili,
LUTf & lmaskretilocalcurve, bool & localmaskretiutili, LUTf & lmaskretilocalcurve, bool & localmaskretiutili,
LUTf & lmaskcblocalcurve, bool & localmaskcbutili, LUTf & lmaskcblocalcurve, bool & localmaskcbutili,
LUTf & lmaskbllocalcurve, bool & localmaskblutili,
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,
@ -6973,6 +6974,17 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
} }
if (lmaskbllocalcurve && localmaskblutili) {
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < GH; ir++)
for (int jr = 0; jr < GW; jr++) {
bufmaskblurbl->L[ir][jr] = 0.5f * lmaskbllocalcurve[2.f * bufmaskblurbl->L[ir][jr]];
}
}
float lap = params->locallab.spots.at(sp).lapmaskbl; float lap = params->locallab.spots.at(sp).lapmaskbl;
bool pde = params->locallab.spots.at(sp).laplac; bool pde = params->locallab.spots.at(sp).laplac;

View File

@ -802,6 +802,7 @@ enum ProcEventCode {
EvlocallabLmasktmshape = 772, EvlocallabLmasktmshape = 772,
EvlocallabLmaskretishape = 773, EvlocallabLmaskretishape = 773,
EvlocallabLmaskcbshape = 774, EvlocallabLmaskcbshape = 774,
EvlocallabLmaskblshape = 775,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -2567,6 +2567,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
gammaskbl(1.0), gammaskbl(1.0),
slomaskbl(0.0), slomaskbl(0.0),
lapmaskbl(0.0), lapmaskbl(0.0),
Lmaskblcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
// Tone Mapping // Tone Mapping
exptonemap(false), exptonemap(false),
stren(0.5), stren(0.5),
@ -2855,6 +2856,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& gammaskbl == other.gammaskbl && gammaskbl == other.gammaskbl
&& slomaskbl == other.slomaskbl && slomaskbl == other.slomaskbl
&& lapmaskbl == other.lapmaskbl && lapmaskbl == other.lapmaskbl
&& Lmaskblcurve == other.Lmaskblcurve
// Tone Mapping // Tone Mapping
&& exptonemap == other.exptonemap && exptonemap == other.exptonemap
&& stren == other.stren && stren == other.stren
@ -4129,6 +4131,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskbl, "Locallab", "Gammaskbl_" + std::to_string(i), spot.gammaskbl, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskbl, "Locallab", "Gammaskbl_" + std::to_string(i), spot.gammaskbl, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskbl, "Locallab", "Slomaskbl_" + std::to_string(i), spot.slomaskbl, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskbl, "Locallab", "Slomaskbl_" + std::to_string(i), spot.slomaskbl, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskbl, "Locallab", "Lapmaskbl_" + std::to_string(i), spot.lapmaskbl, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskbl, "Locallab", "Lapmaskbl_" + std::to_string(i), spot.lapmaskbl, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmaskblcurve, "Locallab", "LmaskblCurve_" + std::to_string(i), spot.Lmaskblcurve, keyFile);
// Tone Mapping // Tone Mapping
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).exptonemap, "Locallab", "Exptonemap_" + std::to_string(i), spot.exptonemap, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).exptonemap, "Locallab", "Exptonemap_" + std::to_string(i), spot.exptonemap, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).stren, "Locallab", "Stren_" + std::to_string(i), spot.stren, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).stren, "Locallab", "Stren_" + std::to_string(i), spot.stren, keyFile);
@ -5530,6 +5533,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Gammaskbl_" + std::to_string(i), pedited, spot.gammaskbl, spotEdited.gammaskbl); assignFromKeyfile(keyFile, "Locallab", "Gammaskbl_" + std::to_string(i), pedited, spot.gammaskbl, spotEdited.gammaskbl);
assignFromKeyfile(keyFile, "Locallab", "Slomaskbl_" + std::to_string(i), pedited, spot.slomaskbl, spotEdited.slomaskbl); assignFromKeyfile(keyFile, "Locallab", "Slomaskbl_" + std::to_string(i), pedited, spot.slomaskbl, spotEdited.slomaskbl);
assignFromKeyfile(keyFile, "Locallab", "Lapmaskbl_" + std::to_string(i), pedited, spot.lapmaskbl, spotEdited.lapmaskbl); assignFromKeyfile(keyFile, "Locallab", "Lapmaskbl_" + std::to_string(i), pedited, spot.lapmaskbl, spotEdited.lapmaskbl);
assignFromKeyfile(keyFile, "Locallab", "LmaskblCurve_" + std::to_string(i), pedited, spot.Lmaskblcurve, spotEdited.Lmaskblcurve);
// Tone Mapping // Tone Mapping
assignFromKeyfile(keyFile, "Locallab", "Exptonemap_" + std::to_string(i), pedited, spot.exptonemap, spotEdited.exptonemap); assignFromKeyfile(keyFile, "Locallab", "Exptonemap_" + std::to_string(i), pedited, spot.exptonemap, spotEdited.exptonemap);
assignFromKeyfile(keyFile, "Locallab", "Stren_" + std::to_string(i), pedited, spot.stren, spotEdited.stren); assignFromKeyfile(keyFile, "Locallab", "Stren_" + std::to_string(i), pedited, spot.stren, spotEdited.stren);

View File

@ -1116,6 +1116,7 @@ struct LocallabParams {
double gammaskbl; double gammaskbl;
double slomaskbl; double slomaskbl;
double lapmaskbl; double lapmaskbl;
std::vector<double> Lmaskblcurve;
// Tone Mapping // Tone Mapping
bool exptonemap; bool exptonemap;
double stren; double stren;

View File

@ -801,7 +801,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //EvlocallabLmaskSHshape LUMINANCECURVE, //EvlocallabLmaskSHshape
LUMINANCECURVE, //EvlocallabLmasktmshape LUMINANCECURVE, //EvlocallabLmasktmshape
LUMINANCECURVE, //EvlocallabLmaskretishape LUMINANCECURVE, //EvlocallabLmaskretishape
LUMINANCECURVE //EvlocallabLmaskcbshape LUMINANCECURVE, //EvlocallabLmaskcbshape
LUMINANCECURVE //EvlocallabLmaskblshape
}; };
namespace rtengine namespace rtengine

View File

@ -1130,6 +1130,7 @@ private:
LUTf lmasktmlocalcurve(65536, 0); LUTf lmasktmlocalcurve(65536, 0);
LUTf lmaskretilocalcurve(65536, 0); LUTf lmaskretilocalcurve(65536, 0);
LUTf lmaskcblocalcurve(65536, 0); LUTf lmaskcblocalcurve(65536, 0);
LUTf lmaskbllocalcurve(65536, 0);
// int maxspot = 1; // int maxspot = 1;
float** shbuffer = nullptr; float** shbuffer = nullptr;
@ -1158,6 +1159,7 @@ private:
bool localmasktmutili = false; bool localmasktmutili = false;
bool localmaskretiutili = false; bool localmaskretiutili = false;
bool localmaskcbutili = false; bool localmaskcbutili = false;
bool localmaskblutili = false;
bool lcmasexputili = false; bool lcmasexputili = false;
bool lhmasexputili = false; bool lhmasexputili = false;
bool llmasexputili = false; bool llmasexputili = false;
@ -1212,6 +1214,7 @@ private:
CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 1); CurveFactory::curvemaskLocal(localmasktmutili, params.locallab.spots.at(sp).Lmasktmcurve, lmasktmlocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, 1); CurveFactory::curvemaskLocal(localmaskretiutili, params.locallab.spots.at(sp).Lmaskreticurve, lmaskretilocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, 1); CurveFactory::curvemaskLocal(localmaskcbutili, params.locallab.spots.at(sp).Lmaskcbcurve, lmaskcblocalcurve, 1);
CurveFactory::curvemaskLocal(localmaskblutili, params.locallab.spots.at(sp).Lmaskblcurve, lmaskbllocalcurve, 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;
@ -1252,6 +1255,7 @@ private:
lmasktmlocalcurve, localmasktmutili, lmasktmlocalcurve, localmasktmutili,
lmaskretilocalcurve, localmaskretiutili, lmaskretilocalcurve, localmaskretiutili,
lmaskcblocalcurve, localmaskcbutili, lmaskcblocalcurve, localmaskcbutili,
lmaskbllocalcurve, localmaskblutili,
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,
@ -1275,6 +1279,7 @@ private:
lmasktmlocalcurve.clear(); lmasktmlocalcurve.clear();
lmaskretilocalcurve.clear(); lmaskretilocalcurve.clear();
lmaskcblocalcurve.clear(); lmaskcblocalcurve.clear();
lmaskbllocalcurve.clear();
shtonecurveloc.clear(); shtonecurveloc.clear();
tonecurveloc.clear(); tonecurveloc.clear();
lightCurveloc.clear(); lightCurveloc.clear();

View File

@ -167,6 +167,7 @@ Locallab::Locallab():
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"))),
mask2blCurveEditorG(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"))),
@ -2123,6 +2124,24 @@ Locallab::Locallab():
HHmaskblshape->setBottomBarColorProvider(this, 6); HHmaskblshape->setBottomBarColorProvider(this, 6);
maskblCurveEditorG->curveListComplete(); maskblCurveEditorG->curveListComplete();
mask2blCurveEditorG->setCurveListener(this);
Lmaskblshape = static_cast<DiagonalCurveEditor*>(mask2blCurveEditorG->addCurve(CT_Diagonal, "L(L)"));
Lmaskblshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskblcurve.at(0)), defSpot.Lmaskblcurve);
if (showtooltip) {
Lmaskblshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
}
std::vector<GradientMilestone> mLmaskblshape;
mLmaskblshape.push_back(GradientMilestone(0., 0., 0., 0.));
mLmaskblshape.push_back(GradientMilestone(1., 1., 1., 1.));
Lmaskblshape->setBottomBarBgGradient(mLmaskblshape);
Lmaskblshape->setLeftBarBgGradient(mLmaskblshape);
mask2blCurveEditorG->curveListComplete();
enablMaskConn = enablMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enablMaskChanged)); enablMaskConn = enablMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enablMaskChanged));
showmaskblMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskblMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
@ -2188,6 +2207,7 @@ Locallab::Locallab():
maskblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0); maskblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0);
maskblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0); maskblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0);
maskblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0); maskblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0);
maskblBox->pack_start(*mask2blCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmaskbl->add(*maskblBox, false); expmaskbl->add(*maskblBox, false);
panel->pack_start(*expmaskbl); panel->pack_start(*expmaskbl);
@ -2331,6 +2351,7 @@ Locallab::~Locallab()
delete LocalcurveEditorwav; delete LocalcurveEditorwav;
delete masktmCurveEditorG; delete masktmCurveEditorG;
delete maskblCurveEditorG; delete maskblCurveEditorG;
delete mask2blCurveEditorG;
delete maskretiCurveEditorG; delete maskretiCurveEditorG;
delete mask2retiCurveEditorG; delete mask2retiCurveEditorG;
delete maskcbCurveEditorG; delete maskcbCurveEditorG;
@ -3393,6 +3414,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).slomaskbl = slomaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskbl = slomaskbl->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmaskbl = lapmaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskbl = lapmaskbl->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fftwbl = fftwbl->get_active(); pp->locallab.spots.at(pp->locallab.selspot).fftwbl = fftwbl->get_active();
pp->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = Lmaskblshape->getCurve();
// Tone Mapping // Tone Mapping
pp->locallab.spots.at(pp->locallab.selspot).exptonemap = exptonemap->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).exptonemap = exptonemap->getEnabled();
@ -3698,6 +3720,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).slomaskbl = pe->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskbl = pe->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fftwbl = pe->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).fftwbl = pe->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged();
// Tone Mapping // Tone Mapping
pe->locallab.spots.at(pp->locallab.selspot).exptonemap = pe->locallab.spots.at(pp->locallab.selspot).activlum || !exptonemap->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).exptonemap = pe->locallab.spots.at(pp->locallab.selspot).activlum || !exptonemap->get_inconsistent();
pe->locallab.spots.at(pp->locallab.selspot).stren = pe->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).stren = pe->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState();
@ -3990,6 +4013,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl = pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl = pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fftwbl = pedited->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).fftwbl = pedited->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged();
// Tone Mapping // Tone Mapping
pedited->locallab.spots.at(pp->locallab.selspot).exptonemap = pedited->locallab.spots.at(pp->locallab.selspot).exptonemap || !exptonemap->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).exptonemap = pedited->locallab.spots.at(pp->locallab.selspot).exptonemap || !exptonemap->get_inconsistent();
pedited->locallab.spots.at(pp->locallab.selspot).stren = pedited->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).stren = pedited->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState();
@ -4395,6 +4419,12 @@ void Locallab::curveChanged(CurveEditor* ce)
} }
} }
if (ce == Lmaskblshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskblshape, M("HISTORY_CUSTOMCURVE"));
}
}
} }
// TM // TM
@ -8154,6 +8184,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
slomaskbl->setValue(pp->locallab.spots.at(index).slomaskbl); slomaskbl->setValue(pp->locallab.spots.at(index).slomaskbl);
lapmaskbl->setValue(pp->locallab.spots.at(index).lapmaskbl); lapmaskbl->setValue(pp->locallab.spots.at(index).lapmaskbl);
fftwbl->set_active(pp->locallab.spots.at(index).fftwbl); fftwbl->set_active(pp->locallab.spots.at(index).fftwbl);
Lmaskblshape->setCurve(pp->locallab.spots.at(index).Lmaskblcurve);
// Tone Mapping // Tone Mapping
exptonemap->setEnabled(pp->locallab.spots.at(index).exptonemap); exptonemap->setEnabled(pp->locallab.spots.at(index).exptonemap);
@ -8504,6 +8535,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
slomaskbl->setEditedState(spotState->slomaskbl ? Edited : UnEdited); slomaskbl->setEditedState(spotState->slomaskbl ? Edited : UnEdited);
lapmaskbl->setEditedState(spotState->lapmaskbl ? Edited : UnEdited); lapmaskbl->setEditedState(spotState->lapmaskbl ? Edited : UnEdited);
fftwbl->set_inconsistent(multiImage && !spotState->fftwbl); fftwbl->set_inconsistent(multiImage && !spotState->fftwbl);
Lmaskblshape->setUnChanged(!spotState->Lmaskblcurve);
// Tone Mapping // Tone Mapping
exptonemap->set_inconsistent(!spotState->exptonemap); exptonemap->set_inconsistent(!spotState->exptonemap);

View File

@ -104,6 +104,8 @@ private:
DiagonalCurveEditor* skinTonesCurve; DiagonalCurveEditor* skinTonesCurve;
//Blur and noise //Blur and noise
CurveEditorGroup* const maskblCurveEditorG; CurveEditorGroup* const maskblCurveEditorG;
CurveEditorGroup* const mask2blCurveEditorG;
DiagonalCurveEditor* Lmaskblshape;
FlatCurveEditor* CCmaskblshape; FlatCurveEditor* CCmaskblshape;
FlatCurveEditor* LLmaskblshape; FlatCurveEditor* LLmaskblshape;
FlatCurveEditor* HHmaskblshape; FlatCurveEditor* HHmaskblshape;

View File

@ -1107,6 +1107,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).slomaskbl = locallab.spots.at(j).slomaskbl && pSpot.slomaskbl == otherSpot.slomaskbl; locallab.spots.at(j).slomaskbl = locallab.spots.at(j).slomaskbl && pSpot.slomaskbl == otherSpot.slomaskbl;
locallab.spots.at(j).lapmaskbl = locallab.spots.at(j).lapmaskbl && pSpot.lapmaskbl == otherSpot.lapmaskbl; locallab.spots.at(j).lapmaskbl = locallab.spots.at(j).lapmaskbl && pSpot.lapmaskbl == otherSpot.lapmaskbl;
locallab.spots.at(j).fftwbl = locallab.spots.at(j).fftwbl && pSpot.fftwbl == otherSpot.fftwbl; locallab.spots.at(j).fftwbl = locallab.spots.at(j).fftwbl && pSpot.fftwbl == otherSpot.fftwbl;
locallab.spots.at(j).Lmaskblcurve = locallab.spots.at(j).Lmaskblcurve && pSpot.Lmaskblcurve == otherSpot.Lmaskblcurve;
// Tone Mapping // Tone Mapping
locallab.spots.at(j).exptonemap = locallab.spots.at(j).exptonemap && pSpot.exptonemap == otherSpot.exptonemap; locallab.spots.at(j).exptonemap = locallab.spots.at(j).exptonemap && pSpot.exptonemap == otherSpot.exptonemap;
locallab.spots.at(j).stren = locallab.spots.at(j).stren && pSpot.stren == otherSpot.stren; locallab.spots.at(j).stren = locallab.spots.at(j).stren && pSpot.stren == otherSpot.stren;
@ -3307,6 +3308,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).lapmaskbl = mods.locallab.spots.at(i).lapmaskbl; toEdit.locallab.spots.at(i).lapmaskbl = mods.locallab.spots.at(i).lapmaskbl;
} }
if (locallab.spots.at(i).Lmaskblcurve) {
toEdit.locallab.spots.at(i).Lmaskblcurve = mods.locallab.spots.at(i).Lmaskblcurve;
}
// Tone Mapping // Tone Mapping
if (locallab.spots.at(i).exptonemap) { if (locallab.spots.at(i).exptonemap) {
toEdit.locallab.spots.at(i).exptonemap = mods.locallab.spots.at(i).exptonemap; toEdit.locallab.spots.at(i).exptonemap = mods.locallab.spots.at(i).exptonemap;
@ -4905,6 +4910,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
gammaskbl(v), gammaskbl(v),
slomaskbl(v), slomaskbl(v),
lapmaskbl(v), lapmaskbl(v),
Lmaskblcurve(v),
// Tone Mapping // Tone Mapping
exptonemap(v), exptonemap(v),
stren(v), stren(v),
@ -5190,6 +5196,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
gammaskbl = v; gammaskbl = v;
slomaskbl = v; slomaskbl = v;
lapmaskbl = v; lapmaskbl = v;
Lmaskblcurve = v;
// Tone Mapping // Tone Mapping
exptonemap = v; exptonemap = v;
stren = v; stren = v;

View File

@ -526,6 +526,7 @@ public:
bool gammaskbl; bool gammaskbl;
bool slomaskbl; bool slomaskbl;
bool lapmaskbl; bool lapmaskbl;
bool Lmaskblcurve;
// Tone Mapping // Tone Mapping
bool exptonemap; bool exptonemap;
bool stren; bool stren;