From dd070dbd3d251be0ef1d6dea0a81ce95fac0d125 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 29 Apr 2020 11:11:08 +0200 Subject: [PATCH] Added Damper to wavelet local contrast and gradient --- rtdata/languages/default | 4 ++- rtengine/iplocallab.cc | 64 ++++++++++++++++++++++++++++++---------- rtengine/procevents.h | 2 ++ rtengine/procparams.cc | 8 +++++ rtengine/procparams.h | 2 ++ rtengine/refreshmap.cc | 4 ++- rtgui/locallabtools.h | 2 ++ rtgui/locallabtools2.cc | 30 +++++++++++++++++++ rtgui/paramsedited.cc | 14 +++++++++ rtgui/paramsedited.h | 2 ++ 10 files changed, 114 insertions(+), 18 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 185a2d993..25277d06d 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1157,6 +1157,8 @@ HISTORY_MSG_916;Local - Residual wavelet shadows HISTORY_MSG_917;Local - Residual wavelet shadows threshold HISTORY_MSG_918;Local - Residual wavelet highlights HISTORY_MSG_919;Local - Residual wavelet highlights threshold +HISTORY_MSG_920;Local - Wavelet sigma LC +HISTORY_MSG_921;Local - Wavelet Graduated sigma LC2 HISTORY_MSG_CAT02PRESET;Cat02 automatic preset HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction @@ -2330,7 +2332,7 @@ TP_LOCALLAB_CLARICRES;Merge Chroma TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask - Blend & Soft images TP_LOCALLAB_CLARILRES;Merge Luma TP_LOCALLAB_CLARISOFT;Soft radius -TP_LOCALLAB_CLARISOFT_TOOLTIP;Enabled for Clarity & Sharp mask.\nContrast by level.\nLevel Dynamic Range Compression.\nDirectional contrast.\nGraduated filter local contrast +TP_LOCALLAB_CLARISOFT_TOOLTIP;Enabled for Clarity and Sharp mask if Merge Luma different from zero.\n\nEnabled for all wavelets pyramid modules.\nDisabled if Soft radius = 0 TP_LOCALLAB_CLARITYML;Clarity TP_LOCALLAB_CLARI_TOOLTIP;Under or equal level wavelet 4, 'Sharp mask' is enabled.\nAbove level wavelet 5 'Clarity' is enabled.\nUsefull if you use 'Level dynamic Range Compression' TP_LOCALLAB_CLIPTM;Clip Restored datas (gain) diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 5aeedcee5..df7d46581 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -450,6 +450,8 @@ struct local_params { float sigmadr; float sigmabl; float sigmaed; + float sigmalc; + float sigmalc2; float residsha; float residshathr; float residhi; @@ -1245,6 +1247,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.sigmadr = locallab.spots.at(sp).sigmadr; lp.sigmabl = locallab.spots.at(sp).sigmabl; lp.sigmaed = locallab.spots.at(sp).sigmaed; + lp.sigmalc = locallab.spots.at(sp).sigmalc; + lp.sigmalc2 = locallab.spots.at(sp).sigmalc2; lp.residsha = locallab.spots.at(sp).residsha; lp.residshathr = locallab.spots.at(sp).residshathr; lp.residhi = locallab.spots.at(sp).residhi; @@ -7810,7 +7814,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float } } } - +//printf("lp.sigmalc2 = %f\n", lp.sigmalc2); float mean[10]; float meanN[10]; float sigma[10]; @@ -7839,15 +7843,21 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float int W_L = wdspot->level_W(level); int H_L = wdspot->level_H(level); float **wav_L = wdspot->level_coeffs(level); + float effect = lp.sigmalc2; + float offs = 1.f; + float mea[10]; + float beta = 1.f; + calceffect(level, mean, sigma, mea, effect, offs); + if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { float insigma = 0.666f; //SD float logmax = log(MaxP[level]); //log Max - float rapX = (mean[level] + sigma[level]) / MaxP[level]; //rapport between sD / max + float rapX = (mean[level] + lp.sigmalc2 * sigma[level]) / MaxP[level]; //rapport between sD / max float inx = log(insigma); float iny = log(rapX); float rap = inx / iny; //koef - float asig = 0.166f / sigma[level]; + float asig = 0.166f / (sigma[level] * lp.sigmalc2); float bsig = 0.5f - asig * mean[level]; float amean = 0.5f / mean[level]; @@ -7857,11 +7867,36 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float for (int y = 0; y < H_L; y++) { for (int x = 0; x < W_L; x++) { + float WavCL = std::fabs(wav_L[dir][y * W_L + x]); + + if (WavCL < mea[0]) { + beta = 0.05f; + } else if (WavCL < mea[1]) { + beta = 0.2f; + } else if (WavCL < mea[2]) { + beta = 0.7f; + } else if (WavCL < mea[3]) { + beta = 1.f; //standard + } else if (WavCL < mea[4]) { + beta = 1.f; + } else if (WavCL < mea[5]) { + beta = 0.8f; //+sigma + } else if (WavCL < mea[6]) { + beta = 0.6f; + } else if (WavCL < mea[7]) { + beta = 0.5f; + } else if (WavCL < mea[8]) { + beta = 0.4f; // + 2 sigma + } else if (WavCL < mea[9]) { + beta = 0.3f; + } else { + beta = 0.1f; + } float absciss; float &val = wav_L[dir][y * W_L + x]; - if (fabsf(val) >= (mean[level] + sigma[level])) { //for max + if (fabsf(val) >= (mean[level] + lp.sigmalc2 * sigma[level])) { //for max float valcour = xlogf(fabsf(val)); float valc = valcour - logmax; float vald = valc * rap; @@ -7890,20 +7925,17 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float } } - float kc = 0.5f * klev * factorwav[y][x] * absciss; + float kc = 0.8f * klev * factorwav[y][x] * absciss; float reduceeffect = kc <= 0.f ? 1.f : 1.5f; float kinterm = 1.f + reduceeffect * kc; kinterm = kinterm <= 0.f ? 0.01f : kinterm; - - val *= kinterm; + val *= (1.f + (kinterm - 1.f) * beta); } } } } } - - } //declare a and b if need @@ -8557,11 +8589,11 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { float insigma = 0.666f; //SD float logmax = log(MaxP[level]); //log Max - float rapX = (mean[level] + sigma[level]) / MaxP[level]; //rapport between sD / max + float rapX = (mean[level] + lp.sigmalc * sigma[level]) / MaxP[level]; //rapport between sD / max float inx = log(insigma); float iny = log(rapX); float rap = inx / iny; //koef - float asig = 0.166f / sigma[level]; + float asig = 0.166f / (sigma[level] * lp.sigmalc); float bsig = 0.5f - asig * mean[level]; float amean = 0.5f / mean[level]; @@ -8574,7 +8606,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float float absciss; float &val = wav_L[dir][i]; - if (fabsf(val) >= (mean[level] + sigma[level])) { //for max + if (fabsf(val) >= (mean[level] + lp.sigmalc * sigma[level])) { //for max float valcour = xlogf(fabsf(val)); float valc = valcour - logmax; float vald = valc * rap; @@ -13035,7 +13067,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float thr = 0.001f; int flag = 0; - + if (maxlvl <= 4) { mL0 = 0.f; mC0 = 0.f; @@ -13053,7 +13085,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o mL0 = mL = mC0 = mC = 0.f; } - if (exec || compreena || comprena || levelena || lp.wavgradl) { + if (exec || compreena || comprena || levelena || blurena || lp.wavgradl || locwavCurve || lp.edgwena) { bool origl = false; // origlc = false; LabImage *mergfile = origl ? tmpres.get() : tmp1.get(); @@ -13069,7 +13101,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o tmp1->b[x][y] = CLIPC((1.f + mC0) * mergfile->b[x][y] - mC * tmpresid->b[x][y]); } - if (softr != 0.f && (compreena || comprena || levelena || lp.wavgradl || fabs(mL) > 0.001f)) { + if (softr != 0.f && (compreena || locwavCurve || comprena || blurena || levelena || lp.wavgradl || lp.edgwena || fabs(mL) > 0.001f)) { softproc(tmpres.get(), tmp1.get(), softr, bfh, bfw, 0.0001, 0.00001, thr, sk, multiThread, flag); } } @@ -13094,7 +13126,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o JaggedArray loctemp(bfw, bfh); if (call == 2) { //call from simpleprocess - printf("bfw=%i bfh=%i\n", bfw, bfh); + // printf("bfw=%i bfh=%i\n", bfw, bfh); if (bfw < mSPsharp || bfh < mSPsharp) { printf("too small RT-spot - minimum size 39 * 39\n"); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 5584ac9f8..c1df2bfd6 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -942,6 +942,8 @@ enum ProcEventCode { Evlocallabresidshathr = 916, Evlocallabresidhi = 917, Evlocallabresidhithr = 918, + Evlocallabsigmalc = 919, + Evlocallabsigmalc2 = 920, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 60333b2f6..3f5744e11 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -3336,6 +3336,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : lcamount(0.0), lcdarkness(1.0), lclightness(1.0), + sigmalc(1.0), levelwav(4), residcont(0.0), residsha(0.0), @@ -3359,6 +3360,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : clarilres(0.0), claricres(0.0), clarisoft(1.0), + sigmalc2(1.0), strwav(0.0), angwav(0.0), strengthw(0.0), @@ -3953,6 +3955,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && lcamount == other.lcamount && lcdarkness == other.lcdarkness && lclightness == other.lclightness + && sigmalc == other.sigmalc && levelwav == other.levelwav && residcont == other.residcont && residsha == other.residsha @@ -3976,6 +3979,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && clarilres == other.clarilres && claricres == other.claricres && clarisoft == other.clarisoft + && sigmalc2 == other.sigmalc2 && strwav == other.strwav && angwav == other.angwav && strengthw == other.strengthw @@ -5397,6 +5401,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->lcamount, "Locallab", "Lcamount_" + index_str, spot.lcamount, keyFile); saveToKeyfile(!pedited || spot_edited->lcdarkness, "Locallab", "Lcdarkness_" + index_str, spot.lcdarkness, keyFile); saveToKeyfile(!pedited || spot_edited->lclightness, "Locallab", "Lclightness_" + index_str, spot.lclightness, keyFile); + saveToKeyfile(!pedited || spot_edited->sigmalc, "Locallab", "Sigmalc_" + index_str, spot.sigmalc, keyFile); saveToKeyfile(!pedited || spot_edited->levelwav, "Locallab", "Levelwav_" + index_str, spot.levelwav, keyFile); saveToKeyfile(!pedited || spot_edited->residcont, "Locallab", "Residcont_" + index_str, spot.residcont, keyFile); saveToKeyfile(!pedited || spot_edited->residsha, "Locallab", "Residsha_" + index_str, spot.residsha, keyFile); @@ -5420,6 +5425,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->clarilres, "Locallab", "ClariLres_" + index_str, spot.clarilres, keyFile); saveToKeyfile(!pedited || spot_edited->claricres, "Locallab", "ClariCres_" + index_str, spot.claricres, keyFile); saveToKeyfile(!pedited || spot_edited->clarisoft, "Locallab", "Clarisoft_" + index_str, spot.clarisoft, keyFile); + saveToKeyfile(!pedited || spot_edited->sigmalc2, "Locallab", "Sigmalc2_" + index_str, spot.sigmalc2, keyFile); saveToKeyfile(!pedited || spot_edited->strwav, "Locallab", "Strwav_" + index_str, spot.strwav, keyFile); saveToKeyfile(!pedited || spot_edited->angwav, "Locallab", "Angwav_" + index_str, spot.angwav, keyFile); saveToKeyfile(!pedited || spot_edited->strengthw, "Locallab", "Strengthw_" + index_str, spot.strengthw, keyFile); @@ -7050,6 +7056,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Lcamount_" + index_str, pedited, spot.lcamount, spotEdited.lcamount); assignFromKeyfile(keyFile, "Locallab", "Lcdarkness_" + index_str, pedited, spot.lcdarkness, spotEdited.lcdarkness); assignFromKeyfile(keyFile, "Locallab", "Lclightness_" + index_str, pedited, spot.lclightness, spotEdited.lclightness); + assignFromKeyfile(keyFile, "Locallab", "Sigmalc_" + index_str, pedited, spot.sigmalc, spotEdited.sigmalc); assignFromKeyfile(keyFile, "Locallab", "Levelwav_" + index_str, pedited, spot.levelwav, spotEdited.levelwav); assignFromKeyfile(keyFile, "Locallab", "Residcont_" + index_str, pedited, spot.residcont, spotEdited.residcont); assignFromKeyfile(keyFile, "Locallab", "Residsha_" + index_str, pedited, spot.residsha, spotEdited.residsha); @@ -7073,6 +7080,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "ClariLres_" + index_str, pedited, spot.clarilres, spotEdited.clarilres); assignFromKeyfile(keyFile, "Locallab", "ClariCres_" + index_str, pedited, spot.claricres, spotEdited.claricres); assignFromKeyfile(keyFile, "Locallab", "Clarisoft_" + index_str, pedited, spot.clarisoft, spotEdited.clarisoft); + assignFromKeyfile(keyFile, "Locallab", "Sigmalc2_" + index_str, pedited, spot.sigmalc2, spotEdited.sigmalc2); assignFromKeyfile(keyFile, "Locallab", "Strwav_" + index_str, pedited, spot.strwav, spotEdited.strwav); assignFromKeyfile(keyFile, "Locallab", "Angwav_" + index_str, pedited, spot.angwav, spotEdited.angwav); assignFromKeyfile(keyFile, "Locallab", "Strengthw_" + index_str, pedited, spot.strengthw, spotEdited.strengthw); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 2ec4b7f90..8441545b8 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1290,6 +1290,7 @@ struct LocallabParams { double lcamount; double lcdarkness; double lclightness; + double sigmalc; int levelwav; double residcont; double residsha; @@ -1313,6 +1314,7 @@ struct LocallabParams { double clarilres; double claricres; double clarisoft; + double sigmalc2; double strwav; double angwav; double strengthw; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 3fd6cebc9..036222438 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -945,7 +945,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // Evlocallabresidsha LUMINANCECURVE, // Evlocallabresidshathr LUMINANCECURVE, // Evlocallabresidhi - LUMINANCECURVE // Evlocallabresidhithr + LUMINANCECURVE, // Evlocallabresidhithr + LUMINANCECURVE, // Evlocallabsigmalc + LUMINANCECURVE // Evlocallabsigmalc2 }; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 9446a38ac..23dedb3c0 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -881,6 +881,7 @@ private: Adjuster* const lcamount; Adjuster* const lcdarkness; Adjuster* const lclightness; + Adjuster* const sigmalc; CurveEditorGroup* const LocalcurveEditorwav; FlatCurveEditor* const wavshape; Adjuster* const levelwav; @@ -902,6 +903,7 @@ private: MyExpander* const expcontrastpyr; Gtk::Frame* const gradwavFrame; Gtk::CheckButton* const wavgradl; + Adjuster* const sigmalc2; Adjuster* const strwav; Adjuster* const angwav; Gtk::Frame* const edgFrame; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 55c4ec127..291bd7c88 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -2002,6 +2002,7 @@ LocallabContrast::LocallabContrast(): lcamount(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_AMOUNT"), 0, 1.0, 0.01, 0))), lcdarkness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_DARKNESS"), 0, 3.0, 0.01, 1.0))), lclightness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_LIGHTNESS"), 0, 3.0, 0.01, 1.0))), + sigmalc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), LocalcurveEditorwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAV"))), wavshape(static_cast(LocalcurveEditorwav->addCurve(CT_Flat, "", nullptr, false, false))), levelwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LEVELWAV"), 1, 9, 1, 4))), @@ -2023,6 +2024,7 @@ LocallabContrast::LocallabContrast(): expcontrastpyr(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::HBox())))), gradwavFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADWAVFRA")))), wavgradl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_GRALWFRA")))), + sigmalc2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), strwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4.0, 4.0, 0.05, 0.))), angwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))), edgFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_EDGSHARPFRA")))), @@ -2115,6 +2117,7 @@ LocallabContrast::LocallabContrast(): lcdarkness->setAdjusterListener(this); lclightness->setAdjusterListener(this); + sigmalc->setAdjusterListener(this); LocalcurveEditorwav->setCurveListener(this); @@ -2184,6 +2187,7 @@ LocallabContrast::LocallabContrast(): wavgradlConn = wavgradl->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavgradlChanged)); + sigmalc2->setAdjusterListener(this); strwav->setAdjusterListener(this); angwav->setAdjusterListener(this); @@ -2413,6 +2417,7 @@ LocallabContrast::LocallabContrast(): pack_start(*lcamount); pack_start(*lcdarkness); pack_start(*lclightness); + pack_start(*sigmalc); pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor // pack_start(*levelwav); pack_start(*csThreshold); @@ -2442,6 +2447,7 @@ LocallabContrast::LocallabContrast(): ToolParamBlock* const blurcontBox = Gtk::manage(new ToolParamBlock()); gradwavFrame->set_label_widget(*wavgradl); ToolParamBlock* const gradwavBox = Gtk::manage(new ToolParamBlock()); + gradwavBox->pack_start(*sigmalc2); gradwavBox->pack_start(*strwav); gradwavBox->pack_start(*angwav); gradwavFrame->add(*gradwavBox); @@ -2642,6 +2648,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa lcamount->setValue(pp->locallab.spots.at(index).lcamount); lcdarkness->setValue(pp->locallab.spots.at(index).lcdarkness); lclightness->setValue(pp->locallab.spots.at(index).lclightness); + sigmalc->setValue(pp->locallab.spots.at(index).sigmalc); wavshape->setCurve(pp->locallab.spots.at(index).locwavcurve); levelwav->setValue((double)pp->locallab.spots.at(index).levelwav); csThreshold->setValue(pp->locallab.spots.at(index).csthreshold); @@ -2657,6 +2664,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa clarisoft->setValue(pp->locallab.spots.at(index).clarisoft); origlc->set_active(pp->locallab.spots.at(index).origlc); wavgradl->set_active(pp->locallab.spots.at(index).wavgradl); + sigmalc2->setValue(pp->locallab.spots.at(index).sigmalc2); strwav->setValue(pp->locallab.spots.at(index).strwav); angwav->setValue(pp->locallab.spots.at(index).angwav); wavedg->set_active(pp->locallab.spots.at(index).wavedg); @@ -2761,6 +2769,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pp->locallab.spots.at(index).lcamount = lcamount->getValue(); pp->locallab.spots.at(index).lcdarkness = lcdarkness->getValue(); pp->locallab.spots.at(index).lclightness = lclightness->getValue(); + pp->locallab.spots.at(index).sigmalc = sigmalc->getValue(); pp->locallab.spots.at(index).locwavcurve = wavshape->getCurve(); pp->locallab.spots.at(index).levelwav = levelwav->getIntValue(); pp->locallab.spots.at(index).csthreshold = csThreshold->getValue(); @@ -2776,6 +2785,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pp->locallab.spots.at(index).clarisoft = clarisoft->getValue(); pp->locallab.spots.at(index).origlc = origlc->get_active(); pp->locallab.spots.at(index).wavgradl = wavgradl->get_active(); + pp->locallab.spots.at(index).sigmalc2 = sigmalc2->getValue(); pp->locallab.spots.at(index).strwav = strwav->getValue(); pp->locallab.spots.at(index).angwav = angwav->getValue(); pp->locallab.spots.at(index).wavedg = wavedg->get_active(); @@ -2856,6 +2866,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa lcamount->setDefault(defSpot.lcamount); lcdarkness->setDefault(defSpot.lcdarkness); lclightness->setDefault(defSpot.lclightness); + sigmalc->setDefault(defSpot.sigmalc); levelwav->setDefault((double)defSpot.levelwav); csThreshold->setDefault(defSpot.csthreshold); residcont->setDefault(defSpot.residcont); @@ -2868,6 +2879,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa clarilres->setDefault(defSpot.clarilres); claricres->setDefault(defSpot.claricres); clarisoft->setDefault(defSpot.clarisoft); + sigmalc2->setDefault(defSpot.sigmalc2); strwav->setDefault(defSpot.strwav); angwav->setDefault(defSpot.angwav); strengthw->setDefault(defSpot.strengthw); @@ -2931,6 +2943,13 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval) } } + if (a == sigmalc) { + if (listener) { + listener->panelChanged(Evlocallabsigmalc, + sigmalc->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == levelwav) { if (listener) { listener->panelChanged(Evlocallablevelwav, @@ -3008,6 +3027,13 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval) } } + if (a == sigmalc2) { + if (listener) { + listener->panelChanged(Evlocallabsigmalc2, + sigmalc2->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == strwav) { if (listener) { listener->panelChanged(Evlocallabstrwav, @@ -3540,6 +3566,7 @@ void LocallabContrast::updateContrastGUI1() lcamount->show(); lcdarkness->show(); lclightness->show(); + sigmalc->hide(); LocalcurveEditorwav->hide(); levelwav->hide(); csThreshold->hide(); @@ -3551,6 +3578,7 @@ void LocallabContrast::updateContrastGUI1() residhithr->hide(); shresFrame->hide(); clariFrame->hide(); + sigmalc2->hide(); strwav->hide(); angwav->hide(); strengthw->hide(); @@ -3586,6 +3614,7 @@ void LocallabContrast::updateContrastGUI1() lcamount->hide(); lcdarkness->hide(); lclightness->hide(); + sigmalc->show(); LocalcurveEditorwav->show(); levelwav->show(); csThreshold->show(); @@ -3597,6 +3626,7 @@ void LocallabContrast::updateContrastGUI1() residhithr->show(); shresFrame->show(); clariFrame->show(); + sigmalc2->show(); strwav->show(); angwav->show(); strengthw->show(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index d9feb9134..af45f9335 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1318,6 +1318,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).lcamount = locallab.spots.at(j).lcamount && pSpot.lcamount == otherSpot.lcamount; locallab.spots.at(j).lcdarkness = locallab.spots.at(j).lcdarkness && pSpot.lcdarkness == otherSpot.lcdarkness; locallab.spots.at(j).lclightness = locallab.spots.at(j).lclightness && pSpot.lclightness == otherSpot.lclightness; + locallab.spots.at(j).sigmalc = locallab.spots.at(j).sigmalc && pSpot.sigmalc == otherSpot.sigmalc; locallab.spots.at(j).levelwav = locallab.spots.at(j).levelwav && pSpot.levelwav == otherSpot.levelwav; locallab.spots.at(j).residcont = locallab.spots.at(j).residcont && pSpot.residcont == otherSpot.residcont; locallab.spots.at(j).residsha = locallab.spots.at(j).residsha && pSpot.residsha == otherSpot.residsha; @@ -1341,6 +1342,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).clarilres = locallab.spots.at(j).clarilres && pSpot.clarilres == otherSpot.clarilres; locallab.spots.at(j).claricres = locallab.spots.at(j).claricres && pSpot.claricres == otherSpot.claricres; locallab.spots.at(j).clarisoft = locallab.spots.at(j).clarisoft && pSpot.clarisoft == otherSpot.clarisoft; + locallab.spots.at(j).sigmalc2 = locallab.spots.at(j).sigmalc2 && pSpot.sigmalc2 == otherSpot.sigmalc2; locallab.spots.at(j).strwav = locallab.spots.at(j).strwav && pSpot.strwav == otherSpot.strwav; locallab.spots.at(j).angwav = locallab.spots.at(j).angwav && pSpot.angwav == otherSpot.angwav; locallab.spots.at(j).strengthw = locallab.spots.at(j).strengthw && pSpot.strengthw == otherSpot.strengthw; @@ -4198,6 +4200,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).lclightness = mods.locallab.spots.at(i).lclightness; } + if (locallab.spots.at(i).sigmalc) { + toEdit.locallab.spots.at(i).sigmalc = mods.locallab.spots.at(i).sigmalc; + } + if (locallab.spots.at(i).levelwav) { toEdit.locallab.spots.at(i).levelwav = mods.locallab.spots.at(i).levelwav; } @@ -4291,6 +4297,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).clarisoft = mods.locallab.spots.at(i).clarisoft; } + if (locallab.spots.at(i).sigmalc2) { + toEdit.locallab.spots.at(i).sigmalc2 = mods.locallab.spots.at(i).sigmalc2; + } + if (locallab.spots.at(i).strwav) { toEdit.locallab.spots.at(i).strwav = mods.locallab.spots.at(i).strwav; } @@ -5998,6 +6008,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : lcamount(v), lcdarkness(v), lclightness(v), + sigmalc(v), levelwav(v), residcont(v), residsha(v), @@ -6021,6 +6032,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : clarilres(v), claricres(v), clarisoft(v), + sigmalc2(v), strwav(v), angwav(v), strengthw(v), @@ -6437,6 +6449,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) lcamount = v; lcdarkness = v; lclightness = v; + sigmalc = v; levelwav = v; residcont = v; residsha = v; @@ -6460,6 +6473,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) clarilres = v; claricres = v; clarisoft = v; + sigmalc2 = v; strwav = v; angwav = v; strengthw = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index d11569ab7..5a1c40c4c 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -718,6 +718,7 @@ public: bool lcamount; bool lcdarkness; bool lclightness; + bool sigmalc; bool levelwav; bool residcont; bool residsha; @@ -741,6 +742,7 @@ public: bool clarilres; bool claricres; bool clarisoft; + bool sigmalc2; bool strwav; bool angwav; bool strengthw;