diff --git a/rtdata/languages/default b/rtdata/languages/default index 255cefce5..79cd54438 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -937,6 +937,8 @@ HISTORY_MSG_690;Local - Retinex scale HISTORY_MSG_691;Local - Retinex darkness HISTORY_MSG_692;Local - Retinex lightness HISTORY_MSG_693;Local - Retinex threshold +HISTORY_MSG_694;Local - Retinex Laplcian threshold +HISTORY_MSG_695;Local - Soft method HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2028,6 +2030,7 @@ TP_LOCALLAB_DEHAZ;Dehaze TP_LOCALLAB_GRIDONE;Color Toning TP_LOCALLAB_GRIDTWO;Direct TP_LOCALLAB_LUM;Curves LC +TP_LOCALLAB_LAPLACE;Laplacian threshold TP_LOCALLAB_HLH;Curves H TP_LOCALLAB_CHROMACBDL;Chroma TP_LOCALLAB_CHROMACB_TOOLTIP;Acts as an amplifier-reducer action compare to sliders of luminance.\nUnder 100 reduce, above 100 amplifie @@ -2129,7 +2132,10 @@ TP_LOCALLAB_SHOWSTRUC;Show structure TP_LOCALLAB_USEMASK;Use mask TP_LOCALLAB_SHADHIGH;Shadows Highlights - Gradient TP_LOCALLAB_SOFTRADIUSCOL;Soft radius -TP_LOCALLAB_SOFT;Soft Light +TP_LOCALLAB_SOFT;Soft Light and Original Retinex +TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Original Retinex is very different from others Retinex method.\nIts acts on grey and balance luminance. +TP_LOCALLAB_SOFTM;Soft Light +TP_LOCALLAB_RETIM;Original Retinex TP_LOCALLAB_STRENG;Strength TP_LOCALLAB_STRENGTH;Noise TP_LOCALLAB_STRUCCOL;Structure diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 0a40e16ca..4e8260907 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -219,6 +219,7 @@ struct local_params { int shamo, shdamp, shiter, senssha, sensv; float neig; float strng; + float lap; float lcamount; double shrad; double shblurr; @@ -246,6 +247,7 @@ struct local_params { int showmaskcbmet; int showmaskretimet; int blurmet; + int softmet; float noiself; float noiself0; float noiself2; @@ -402,6 +404,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float amo = ((float)locallab.spots.at(sp).amount); float strlight = ((float)locallab.spots.at(sp).streng); float strucc = locallab.spots.at(sp).struc; + float laplac = ((float)locallab.spots.at(sp).laplace); float thre = locallab.spots.at(sp).thresh; @@ -462,6 +465,12 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.enaretiMask = locallab.spots.at(sp).enaretiMask && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0; // if(lp.enaretiMask) printf("lp.enaretiMasktrue\n"); else printf("lp.enaretiMaskfalse\n"); + if (locallab.spots.at(sp).softMethod == "soft") { + lp.softmet = 0; + } else if (locallab.spots.at(sp).softMethod == "reti") { + lp.softmet = 1; + } + if (locallab.spots.at(sp).blurMethod == "norm") { lp.blurmet = 0; @@ -654,6 +663,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.senssf = local_sensisf; lp.strng = strlight; lp.neig = neigh; + lp.lap = laplac; if (lp.ligh >= -2.f && lp.ligh <= 2.f) { lp.ligh /= 5.f; @@ -5897,8 +5907,33 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o SoftLightParams softLightParams; softLightParams.enabled = true; softLightParams.strength = lp.strng; - ImProcFunctions::softLight(bufexpfin.get(), softLightParams); - + if(lp.softmet == 0) { + ImProcFunctions::softLight(bufexpfin.get(), softLightParams); + } else if(lp.softmet == 1) { + float *datain = new float[bfw*bfh]; + float *dataout = new float[bfw*bfh]; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + for (int y = 0; y < bfh; y++) { + for (int x = 0; x < bfw; x++) { + datain[y * bfw + x] = bufexpfin->L[y][x] / (10.9f * lp.lap); + } + } + + ImProcFunctions::retinex_pde(datain, dataout, bfw, bfh, 0.1f * lp.strng, 10.9f * lp.lap, 1); +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + for (int y = 0; y < bfh; y++) { + for (int x = 0; x < bfw; x++) { + bufexpfin->L[y][x] = dataout[y * bfw + x]; + } + } + delete [] datain; + delete [] dataout; + } #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif diff --git a/rtengine/procevents.h b/rtengine/procevents.h index f433c1361..f67d1690b 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -720,6 +720,8 @@ enum ProcEventCode { Evlocallabdarkness = 690, Evlocallablightnessreti = 691, Evlocallablimd = 692, + Evlocallablaplace = 693, + EvlocallabsoftMethod = 694, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 581a08c1d..ebb8a9a99 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2448,6 +2448,8 @@ LocallabParams::LocallabSpot::LocallabSpot() : expsoft(false), streng(0), sensisf(15), + laplace(30), + softMethod("soft"), // Blur & Noise expblur(false), radius(1.0), @@ -2661,6 +2663,8 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && expsoft == other.expsoft && streng == other.streng && sensisf == other.sensisf + && laplace == other.laplace + && softMethod == other.softMethod // Blur & Noise && expblur == other.expblur && radius == other.radius @@ -3830,6 +3834,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expsoft, "Locallab", "Expsoft_" + std::to_string(i), spot.expsoft, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).streng, "Locallab", "Streng_" + std::to_string(i), spot.streng, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensisf, "Locallab", "Sensisf_" + std::to_string(i), spot.sensisf, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).laplace, "Locallab", "Laplace_" + std::to_string(i), spot.laplace, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).softMethod, "Locallab", "SoftMethod_" + std::to_string(i), spot.softMethod, keyFile); // Blur & Noise saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expblur, "Locallab", "Expblur_" + std::to_string(i), spot.expblur, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).radius, "Locallab", "Radius_" + std::to_string(i), spot.radius, keyFile); @@ -5140,6 +5146,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Expsoft_" + std::to_string(i), pedited, spot.expsoft, spotEdited.expsoft); assignFromKeyfile(keyFile, "Locallab", "Streng_" + std::to_string(i), pedited, spot.streng, spotEdited.streng); assignFromKeyfile(keyFile, "Locallab", "Sensisf_" + std::to_string(i), pedited, spot.sensisf, spotEdited.sensisf); + assignFromKeyfile(keyFile, "Locallab", "Laplace_" + std::to_string(i), pedited, spot.laplace, spotEdited.laplace); + assignFromKeyfile(keyFile, "Locallab", "SoftMethod_" + std::to_string(i), pedited, spot.softMethod, spotEdited.softMethod); // Blur & Noise assignFromKeyfile(keyFile, "Locallab", "Expblur_" + std::to_string(i), pedited, spot.expblur, spotEdited.expblur); assignFromKeyfile(keyFile, "Locallab", "Radius_" + std::to_string(i), pedited, spot.radius, spotEdited.radius); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 8a95bb593..5251a5887 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1049,6 +1049,8 @@ struct LocallabParams { bool expsoft; int streng; int sensisf; + int laplace; + Glib::ustring softMethod; // Blur & Noise bool expblur; double radius; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 412c4522a..56bcd5f81 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -719,7 +719,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //Evlocallabscalereti LUMINANCECURVE, //Evlocallabdarkness LUMINANCECURVE, //Evlocallablightnessreti - LUMINANCECURVE //Evlocallablimd + LUMINANCECURVE, //Evlocallablimd + LUMINANCECURVE, //Evlocallablaplace + LUMINANCECURVE //EvlocallabsoftMethod }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 6f222722f..70a9e219d 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -133,6 +133,7 @@ Locallab::Locallab(): sensiv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), //Soft Light streng(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENG"), 1, 100, 1, 1))), + laplace(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPLACE"), 20, 40, 1, 30))), sensisf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 1, 100, 1, 15))), // Blur & Noise radius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADIUS"), 1.0, 100.0, 0.1, 1.0))), @@ -243,6 +244,8 @@ Locallab::Locallab(): showmaskSHMethod(Gtk::manage(new MyComboBoxText())), // Blur & Noise blurMethod(Gtk::manage(new MyComboBoxText())), + //soft Method + softMethod(Gtk::manage(new MyComboBoxText())), // Retinex retinexMethod(Gtk::manage(new MyComboBoxText())), showmaskretiMethod(Gtk::manage(new MyComboBoxText())), @@ -725,13 +728,22 @@ Locallab::Locallab(): // Soft Light expsoft->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsoft)); enablesoftConn = expsoft->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expsoft)); + softMethod->append(M("TP_LOCALLAB_SOFTM")); + softMethod->append(M("TP_LOCALLAB_RETIM")); + softMethod->set_active(0); + if(showtooltip) softMethod->set_tooltip_markup(M("TP_LOCALLAB_SOFTMETHOD_TOOLTIP")); + softMethodConn = softMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::softMethodChanged)); + streng->setAdjusterListener(this); + laplace->setAdjusterListener(this); sensisf->setAdjusterListener(this); ToolParamBlock* const softBox = Gtk::manage(new ToolParamBlock()); + softBox->pack_start(*softMethod); softBox->pack_start(*streng); + softBox->pack_start(*laplace); softBox->pack_start(*sensisf); expsoft->add(*softBox, false); expsoft->setLevel(2); @@ -2095,12 +2107,20 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).expsoft = expsoft->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).streng = streng->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensisf = sensisf->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).laplace = laplace->getIntValue(); + if (softMethod->get_active_row_number() == 0) { + pp->locallab.spots.at(pp->locallab.selspot).softMethod = "soft"; + } else if (softMethod->get_active_row_number() == 1) { + pp->locallab.spots.at(pp->locallab.selspot).softMethod = "reti"; + } + // Blur & Noise pp->locallab.spots.at(pp->locallab.selspot).expblur = expblur->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).radius = radius->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strength = strength->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensibn = sensibn->getIntValue(); + if (blurMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).blurMethod = "norm"; } else if (blurMethod->get_active_row_number() == 1) { @@ -2325,6 +2345,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).expsoft = pe->locallab.spots.at(pp->locallab.selspot).expsoft || !expsoft->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).streng = pe->locallab.spots.at(pp->locallab.selspot).streng || streng->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensisf = pe->locallab.spots.at(pp->locallab.selspot).sensisf || sensisf->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).laplace = pe->locallab.spots.at(pp->locallab.selspot).laplace || laplace->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).softMethod = pe->locallab.spots.at(pp->locallab.selspot).softMethod || softMethod->get_active_text() != M("GENERAL_UNCHANGED"); // Blur & Noise pe->locallab.spots.at(pp->locallab.selspot).expblur = pe->locallab.spots.at(pp->locallab.selspot).expblur || !expblur->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).radius = pe->locallab.spots.at(pp->locallab.selspot).radius || radius->getEditedState(); @@ -2542,6 +2564,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).expsoft = pedited->locallab.spots.at(pp->locallab.selspot).expsoft || !expsoft->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).streng = pedited->locallab.spots.at(pp->locallab.selspot).streng || streng->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensisf = pedited->locallab.spots.at(pp->locallab.selspot).sensisf || sensisf->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).laplace = pedited->locallab.spots.at(pp->locallab.selspot).laplace || laplace->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).softMethod = pedited->locallab.spots.at(pp->locallab.selspot).softMethod || softMethod->get_active_text() != M("GENERAL_UNCHANGED"); // Blur & Noise pedited->locallab.spots.at(pp->locallab.selspot).expblur = pedited->locallab.spots.at(pp->locallab.selspot).expblur || !expblur->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).radius = pedited->locallab.spots.at(pp->locallab.selspot).radius || radius->getEditedState(); @@ -2912,6 +2936,23 @@ void Locallab::retinexMethodChanged() } } +void Locallab::softMethodChanged() +{ + // printf("softMethodChanged\n"); + if (softMethod->get_active_row_number() == 0) { + laplace->hide(); + } else { + laplace->show(); + } + + if (getEnabled() && expsoft->getEnabled()) { + if (listener) { + listener->panelChanged(EvlocallabsoftMethod, softMethod->get_active_text()); + } + } +} + + void Locallab::blurMethodChanged() { // printf("blurMethodChanged\n"); @@ -3613,6 +3654,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe // Soft Light streng->setDefault((double)defSpot->streng); sensisf->setDefault((double)defSpot->sensisf); + laplace->setDefault((double)defSpot->laplace); // Blur & Noise radius->setDefault(defSpot->radius); strength->setDefault((double)defSpot->strength); @@ -3745,6 +3787,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe // Soft Light streng->setDefaultEditedState(Irrelevant); sensisf->setDefaultEditedState(Irrelevant); + laplace->setDefaultEditedState(Irrelevant); // Blur & Noise radius->setDefaultEditedState(Irrelevant); strength->setDefaultEditedState(Irrelevant); @@ -3881,6 +3924,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe // Soft Light streng->setDefaultEditedState(defSpotState->streng ? Edited : UnEdited); sensisf->setDefaultEditedState(defSpotState->sensisf ? Edited : UnEdited); + laplace->setDefaultEditedState(defSpotState->laplace ? Edited : UnEdited); // Blur & Noise radius->setDefaultEditedState(defSpotState->radius ? Edited : UnEdited); strength->setDefaultEditedState(defSpotState->strength ? Edited : UnEdited); @@ -4305,6 +4349,13 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) listener->panelChanged(Evlocallabsensisf, sensisf->getTextValue()); } } + + if (a == laplace) { + if (listener) { + listener->panelChanged(Evlocallablaplace, laplace->getTextValue()); + } + } + } @@ -4823,6 +4874,7 @@ void Locallab::setBatchMode(bool batchMode) // Soft Light streng->showEditedCB(); sensisf->showEditedCB(); + laplace->showEditedCB(); // Blur & Noise radius->showEditedCB(); streng->showEditedCB(); @@ -4902,6 +4954,8 @@ void Locallab::setBatchMode(bool batchMode) // Color & Light qualitycurveMethod->append(M("GENERAL_UNCHANGED")); gridMethod->append(M("GENERAL_UNCHANGED")); + // softlight + softMethod->append(M("GENERAL_UNCHANGED")); // Blur & Noise blurMethod->append(M("GENERAL_UNCHANGED")); // Retinex @@ -5073,6 +5127,7 @@ void Locallab::enableListener() pastsattogconn.block(false); // Soft Light enablesoftConn.block(false); + softMethodConn.block(false); // Blur & Noise enableblurConn.block(false); blurMethodConn.block(false); @@ -5129,6 +5184,7 @@ void Locallab::disableListener() pastsattogconn.block(true); // Soft Light enablesoftConn.block(true); + softMethodConn.block(true); // Blur & Noise enableblurConn.block(true); blurMethodConn.block(true); @@ -5271,6 +5327,13 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con expsoft->setEnabled(pp->locallab.spots.at(index).expsoft); streng->setValue(pp->locallab.spots.at(index).streng); sensisf->setValue(pp->locallab.spots.at(index).sensisf); + laplace->setValue(pp->locallab.spots.at(index).laplace); + + if (pp->locallab.spots.at(index).softMethod == "soft") { + softMethod->set_active(0); + } else if (pp->locallab.spots.at(index).softMethod == "reti") { + softMethod->set_active(1); + } // Blur & Noise expblur->setEnabled(pp->locallab.spots.at(index).expblur); @@ -5526,6 +5589,10 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con expsoft->set_inconsistent(!spotState->expsoft); streng->setEditedState(spotState->streng ? Edited : UnEdited); sensisf->setEditedState(spotState->sensisf ? Edited : UnEdited); + laplace->setEditedState(spotState->laplace ? Edited : UnEdited); + if (!spotState->softMethod) { + softMethod->set_active_text(M("GENERAL_UNCHANGED")); + } // Blur & Noise expblur->set_inconsistent(!spotState->expblur); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 3a293606a..ea6f46a0f 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -158,6 +158,7 @@ private: Adjuster* const sensiv; // Soft Light Adjuster* const streng; + Adjuster* const laplace; Adjuster* const sensisf; // Blur & Noise Adjuster* const radius; @@ -290,6 +291,9 @@ private: // Blur & Noise MyComboBoxText* const blurMethod; sigc::connection blurMethodConn; + //soft light + MyComboBoxText* const softMethod; + sigc::connection softMethodConn; // Retinex MyComboBoxText* const retinexMethod; sigc::connection retinexMethodConn; @@ -368,6 +372,8 @@ private: void showmaskSHMethodChanged(); // Blur & Noise void blurMethodChanged(); + // Soft light + void softMethodChanged(); // Retinex void retinexMethodChanged(); void showmaskretiMethodChanged(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index f81152ec7..9842ea6bf 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1038,6 +1038,8 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).expsoft = locallab.spots.at(j).expsoft && pSpot.expsoft == otherSpot.expsoft; locallab.spots.at(j).streng = locallab.spots.at(j).streng && pSpot.streng == otherSpot.streng; locallab.spots.at(j).sensisf = locallab.spots.at(j).sensisf && pSpot.sensisf == otherSpot.sensisf; + locallab.spots.at(j).laplace = locallab.spots.at(j).laplace && pSpot.laplace == otherSpot.laplace; + locallab.spots.at(j).softMethod = locallab.spots.at(j).softMethod && pSpot.softMethod == otherSpot.softMethod; // Blur & Noise locallab.spots.at(j).expblur = locallab.spots.at(j).expblur && pSpot.expblur == otherSpot.expblur; locallab.spots.at(j).radius = locallab.spots.at(j).radius && pSpot.radius == otherSpot.radius; @@ -2987,6 +2989,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sensisf = mods.locallab.spots.at(i).sensisf; } + if (locallab.spots.at(i).laplace) { + toEdit.locallab.spots.at(i).laplace = mods.locallab.spots.at(i).laplace; + } + + if (locallab.spots.at(i).softMethod) { + toEdit.locallab.spots.at(i).softMethod = mods.locallab.spots.at(i).softMethod; + } + // Blur & Noise if (locallab.spots.at(i).expblur) { toEdit.locallab.spots.at(i).expblur = mods.locallab.spots.at(i).expblur; @@ -4396,6 +4406,8 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : expsoft(v), streng(v), sensisf(v), + laplace(v), + softMethod(v), // Blur & Noise expblur(v), radius(v), @@ -4606,6 +4618,8 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) expsoft = v; streng = v; sensisf = v; + laplace = v; + softMethod = v; // Blur & Noise expblur = v; radius = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 3aa9c03e6..05807f7f4 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -465,6 +465,8 @@ public: bool expsoft; bool streng; bool sensisf; + bool laplace; + bool softMethod; // Blur & Noise bool expblur; bool radius;