Wavelet levels - Added Damper to local contrast final

This commit is contained in:
Desmis 2020-04-13 09:04:38 +02:00
parent 60bb7b520b
commit 71da91c85f
8 changed files with 51 additions and 8 deletions

View File

@ -816,6 +816,7 @@ HISTORY_MSG_WAVBL;Blur levels
HISTORY_MSG_BLURWAV;Blur luminance HISTORY_MSG_BLURWAV;Blur luminance
HISTORY_MSG_BLURCWAV;Blur chroma HISTORY_MSG_BLURCWAV;Blur chroma
HISTORY_MSG_EDGEFFECT;Edge Damper HISTORY_MSG_EDGEFFECT;Edge Damper
HISTORY_MSG_SIGMAFIN;Final contrast Damper
HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b> HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
HISTORY_SNAPSHOT;Snapshot HISTORY_SNAPSHOT;Snapshot
@ -2227,6 +2228,7 @@ TP_WAVELET_EDSL;Threshold Sliders
TP_WAVELET_EDTYPE;Local contrast method TP_WAVELET_EDTYPE;Local contrast method
TP_WAVELET_EDVAL;Strength TP_WAVELET_EDVAL;Strength
TP_WAVELET_FINAL;Final Touchup TP_WAVELET_FINAL;Final Touchup
TP_WAVELET_FINCFRAME;Final Local Contrast
TP_WAVELET_FINEST;Finest TP_WAVELET_FINEST;Finest
TP_WAVELET_HIGHLIGHT;Highlight luminance range TP_WAVELET_HIGHLIGHT;Highlight luminance range
TP_WAVELET_HS1;Whole luminance range TP_WAVELET_HS1;Whole luminance range
@ -2273,7 +2275,7 @@ TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight
TP_WAVELET_OLDSH;Algorithm using negatives values TP_WAVELET_OLDSH;Algorithm using negatives values
TP_WAVELET_OPACITY;Opacity Blue-Yellow TP_WAVELET_OPACITY;Opacity Blue-Yellow
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
TP_WAVELET_OPACITYWL;Final local contrast TP_WAVELET_OPACITYWL;Local contrast
TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right. TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right.
TP_WAVELET_PASTEL;Pastel chroma TP_WAVELET_PASTEL;Pastel chroma
TP_WAVELET_PROC;Process TP_WAVELET_PROC;Process
@ -2294,6 +2296,7 @@ TP_WAVELET_SHA;Sharp mask
TP_WAVELET_SHFRAME;Shadows/Highlights TP_WAVELET_SHFRAME;Shadows/Highlights
TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_SHOWMASK;Show wavelet 'mask'
TP_WAVELET_SIGMA;Damper TP_WAVELET_SIGMA;Damper
TP_WAVELET_SIGMAFIN;Damper
TP_WAVELET_SIGMA_TOOLTIP;The effect of the contrast sliders is stronger in medium contrast details, and weaker in high and low contrast details.\n With this slider you can control how quickly the effect dampens towards the extreme contrasts.\n The higher the slider is set, the wider the range of contrasts which will get a strong change, and the higher the risk to generate artifacts.\n The lower it is, the more pinpoint will the effect be applied to a narrow range of contrast values. TP_WAVELET_SIGMA_TOOLTIP;The effect of the contrast sliders is stronger in medium contrast details, and weaker in high and low contrast details.\n With this slider you can control how quickly the effect dampens towards the extreme contrasts.\n The higher the slider is set, the wider the range of contrasts which will get a strong change, and the higher the risk to generate artifacts.\n The lower it is, the more pinpoint will the effect be applied to a narrow range of contrast values.
TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN;Skin targetting/protection
TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected.

View File

@ -113,6 +113,7 @@ struct cont_params {
int TMmeth; int TMmeth;
float tmstrength; float tmstrength;
float balan; float balan;
float sigmafin;
int ite; int ite;
int contmet; int contmet;
bool opaW; bool opaW;
@ -191,6 +192,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
cp.ite = params->wavelet.iter; cp.ite = params->wavelet.iter;
cp.tonemap = params->wavelet.tmrs != 0; cp.tonemap = params->wavelet.tmrs != 0;
cp.bam = false; cp.bam = false;
cp.sigmafin = params->wavelet.sigmafin;
if (params->wavelet.TMmethod == "cont") { if (params->wavelet.TMmethod == "cont") {
cp.contmet = 1; cp.contmet = 1;
@ -2955,11 +2957,11 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0,
if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve
float insigma = 0.666f; //SD float insigma = 0.666f; //SD
float logmax = log(MaxP[level]); //log Max float logmax = log(MaxP[level]); //log Max
float rapX = (mean[level] + sigma[level]) / MaxP[level]; //rapport between sD / max float rapX = (mean[level] + cp.sigmafin * sigma[level]) / MaxP[level]; //rapport between sD / max
float inx = log(insigma); float inx = log(insigma);
float iny = log(rapX); float iny = log(rapX);
float rap = inx / iny; //koef float rap = inx / iny; //koef
float asig = 0.166f / sigma[level]; float asig = 0.166f / (sigma[level] * cp.sigmafin);
float bsig = 0.5f - asig * mean[level]; float bsig = 0.5f - asig * mean[level];
float amean = 0.5f / mean[level]; float amean = 0.5f / mean[level];
@ -2970,7 +2972,7 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0,
for (int i = 0; i < W_L * H_L; i++) { for (int i = 0; i < W_L * H_L; i++) {
float absciss; float absciss;
if (std::fabs(WavCoeffs_L[dir][i]) >= (mean[level] + sigma[level])) { //for max if (std::fabs(WavCoeffs_L[dir][i]) >= (mean[level] + cp.sigmafin * sigma[level])) { //for max
float valcour = xlogf(std::fabs(WavCoeffs_L[dir][i])); float valcour = xlogf(std::fabs(WavCoeffs_L[dir][i]));
float valc = valcour - logmax; float valc = valcour - logmax;
float vald = valc * rap; float vald = valc * rap;

View File

@ -2263,6 +2263,7 @@ WaveletParams::WaveletParams() :
tmr(false), tmr(false),
strength(100), strength(100),
balance(0), balance(0),
sigmafin(1.0),
iter(0), iter(0),
expcontrast(false), expcontrast(false),
expchroma(false), expchroma(false),
@ -2377,6 +2378,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
&& tmr == other.tmr && tmr == other.tmr
&& strength == other.strength && strength == other.strength
&& balance == other.balance && balance == other.balance
&& sigmafin == other.sigmafin
&& iter == other.iter && iter == other.iter
&& expcontrast == other.expcontrast && expcontrast == other.expcontrast
&& expchroma == other.expchroma && expchroma == other.expchroma
@ -3514,6 +3516,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->wavelet.enabled, "Wavelet", "Enabled", wavelet.enabled, keyFile); saveToKeyfile(!pedited || pedited->wavelet.enabled, "Wavelet", "Enabled", wavelet.enabled, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.strength, "Wavelet", "Strength", wavelet.strength, keyFile); saveToKeyfile(!pedited || pedited->wavelet.strength, "Wavelet", "Strength", wavelet.strength, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.balance, "Wavelet", "Balance", wavelet.balance, keyFile); saveToKeyfile(!pedited || pedited->wavelet.balance, "Wavelet", "Balance", wavelet.balance, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.sigmafin, "Wavelet", "Sigmafin", wavelet.sigmafin, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.iter, "Wavelet", "Iter", wavelet.iter, keyFile); saveToKeyfile(!pedited || pedited->wavelet.iter, "Wavelet", "Iter", wavelet.iter, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.thres, "Wavelet", "MaxLev", wavelet.thres, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thres, "Wavelet", "MaxLev", wavelet.thres, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, keyFile);
@ -4691,6 +4694,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Wavelet", "Enabled", pedited, wavelet.enabled, pedited->wavelet.enabled); assignFromKeyfile(keyFile, "Wavelet", "Enabled", pedited, wavelet.enabled, pedited->wavelet.enabled);
assignFromKeyfile(keyFile, "Wavelet", "Strength", pedited, wavelet.strength, pedited->wavelet.strength); assignFromKeyfile(keyFile, "Wavelet", "Strength", pedited, wavelet.strength, pedited->wavelet.strength);
assignFromKeyfile(keyFile, "Wavelet", "Balance", pedited, wavelet.balance, pedited->wavelet.balance); assignFromKeyfile(keyFile, "Wavelet", "Balance", pedited, wavelet.balance, pedited->wavelet.balance);
assignFromKeyfile(keyFile, "Wavelet", "Sigmafin", pedited, wavelet.sigmafin, pedited->wavelet.sigmafin);
assignFromKeyfile(keyFile, "Wavelet", "Iter", pedited, wavelet.iter, pedited->wavelet.iter); assignFromKeyfile(keyFile, "Wavelet", "Iter", pedited, wavelet.iter, pedited->wavelet.iter);
assignFromKeyfile(keyFile, "Wavelet", "Median", pedited, wavelet.median, pedited->wavelet.median); assignFromKeyfile(keyFile, "Wavelet", "Median", pedited, wavelet.median, pedited->wavelet.median);
assignFromKeyfile(keyFile, "Wavelet", "Medianlev", pedited, wavelet.medianlev, pedited->wavelet.medianlev); assignFromKeyfile(keyFile, "Wavelet", "Medianlev", pedited, wavelet.medianlev, pedited->wavelet.medianlev);

View File

@ -1221,6 +1221,7 @@ struct WaveletParams {
bool tmr; bool tmr;
int strength; int strength;
int balance; int balance;
double sigmafin;
int iter; int iter;
bool expcontrast; bool expcontrast;
bool expchroma; bool expchroma;

View File

@ -475,6 +475,7 @@ void ParamsEdited::set(bool v)
wavelet.strength = v; wavelet.strength = v;
wavelet.balance = v; wavelet.balance = v;
wavelet.iter = v; wavelet.iter = v;
wavelet.sigmafin = v;
wavelet.median = v; wavelet.median = v;
wavelet.medianlev = v; wavelet.medianlev = v;
wavelet.linkedg = v; wavelet.linkedg = v;
@ -1085,6 +1086,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength; wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength;
wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance; wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance;
wavelet.iter = wavelet.iter && p.wavelet.iter == other.wavelet.iter; wavelet.iter = wavelet.iter && p.wavelet.iter == other.wavelet.iter;
wavelet.sigmafin = wavelet.sigmafin && p.wavelet.sigmafin == other.wavelet.sigmafin;
wavelet.median = wavelet.median && p.wavelet.median == other.wavelet.median; wavelet.median = wavelet.median && p.wavelet.median == other.wavelet.median;
wavelet.medianlev = wavelet.medianlev && p.wavelet.medianlev == other.wavelet.medianlev; wavelet.medianlev = wavelet.medianlev && p.wavelet.medianlev == other.wavelet.medianlev;
wavelet.linkedg = wavelet.linkedg && p.wavelet.linkedg == other.wavelet.linkedg; wavelet.linkedg = wavelet.linkedg && p.wavelet.linkedg == other.wavelet.linkedg;
@ -2893,6 +2895,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.wavelet.balance = mods.wavelet.balance; toEdit.wavelet.balance = mods.wavelet.balance;
} }
if (wavelet.sigmafin) {
toEdit.wavelet.sigmafin = mods.wavelet.sigmafin;
}
if (wavelet.iter) { if (wavelet.iter) {
toEdit.wavelet.iter = mods.wavelet.iter; toEdit.wavelet.iter = mods.wavelet.iter;
} }

View File

@ -499,6 +499,7 @@ struct WaveletParamsEdited {
bool strength; bool strength;
bool balance; bool balance;
bool iter; bool iter;
bool sigmafin;
bool median; bool median;
bool medianlev; bool medianlev;
bool linkedg; bool linkedg;

View File

@ -112,6 +112,7 @@ Wavelet::Wavelet() :
strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))), strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))),
balance(Gtk::manage(new Adjuster(M("TP_WAVELET_BALANCE"), -30, 100, 1, 0))), balance(Gtk::manage(new Adjuster(M("TP_WAVELET_BALANCE"), -30, 100, 1, 0))),
iter(Gtk::manage(new Adjuster(M("TP_WAVELET_ITER"), -3, 3, 1, 0))), iter(Gtk::manage(new Adjuster(M("TP_WAVELET_ITER"), -3, 3, 1, 0))),
sigmafin(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMAFIN"), 0.025, 2.5, 0.01, 1.))),
hueskin(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKIN"), -314., 314., -5., 25., 170., 120., 0, false))), hueskin(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKIN"), -314., 314., -5., 25., 170., 120., 0, false))),
hueskin2(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKY"), -314., 314., -260., -250, -130., -140., 0, false))), hueskin2(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKY"), -314., 314., -260., -250, -130., -140., 0, false))),
hllev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HIGHLIGHT"), 0., 100., 50., 75., 100., 98., 0, false))), hllev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HIGHLIGHT"), 0., 100., 50., 75., 100., 98., 0, false))),
@ -162,6 +163,7 @@ Wavelet::Wavelet() :
blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))), blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))),
chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))), chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))),
chroFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROFRAME")))), chroFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROFRAME")))),
fincFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_FINCFRAME")))),
wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))), wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))),
labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))), labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))),
labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))), labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))),
@ -207,6 +209,8 @@ Wavelet::Wavelet() :
EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV"); EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV");
EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV"); EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV");
EvWavedgeffect = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_EDGEFFECT"); EvWavedgeffect = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_EDGEFFECT");
EvWavsigmafin = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_SIGMAFIN");
expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings));
expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast)); expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast));
@ -978,7 +982,7 @@ Wavelet::Wavelet() :
iter->setAdjusterListener(this); iter->setAdjusterListener(this);
iter->set_tooltip_text(M("TP_WAVELET_ITER_TOOLTIP")); iter->set_tooltip_text(M("TP_WAVELET_ITER_TOOLTIP"));
Gtk::HSeparator* const separatorbalend = Gtk::manage(new Gtk::HSeparator()); // Gtk::HSeparator* const separatorbalend = Gtk::manage(new Gtk::HSeparator());
opacityCurveEditorWL->setCurveListener(this); opacityCurveEditorWL->setCurveListener(this);
@ -986,6 +990,7 @@ Wavelet::Wavelet() :
opacityShapeWL->setIdentityValue(0.); opacityShapeWL->setIdentityValue(0.);
opacityShapeWL->setResetCurve(FlatCurveType(default_params.opacityCurveWL.at(0)), default_params.opacityCurveWL); opacityShapeWL->setResetCurve(FlatCurveType(default_params.opacityCurveWL.at(0)), default_params.opacityCurveWL);
opacityShapeWL->setTooltip(M("TP_WAVELET_OPACITYWL_TOOLTIP")); opacityShapeWL->setTooltip(M("TP_WAVELET_OPACITYWL_TOOLTIP"));
sigmafin->setAdjusterListener(this);
// This will add the reset button at the end of the curveType buttons // This will add the reset button at the end of the curveType buttons
opacityCurveEditorWL->curveListComplete(); opacityCurveEditorWL->curveListComplete();
@ -1004,6 +1009,13 @@ Wavelet::Wavelet() :
tmr->set_tooltip_text(M("TP_WAVELET_BALCHRO_TOOLTIP")); tmr->set_tooltip_text(M("TP_WAVELET_BALCHRO_TOOLTIP"));
tmrConn = tmr->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::tmrToggled)); tmrConn = tmr->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::tmrToggled));
fincFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const fincBox = Gtk::manage(new ToolParamBlock());
fincBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2);
fincBox->pack_start(*sigmafin);
fincFrame->add(*fincBox);
ToolParamBlock* const finalBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const finalBox = Gtk::manage(new ToolParamBlock());
finalBox->pack_start(*ctboxBA); finalBox->pack_start(*ctboxBA);
@ -1014,9 +1026,10 @@ Wavelet::Wavelet() :
finalBox->pack_start(*iter); finalBox->pack_start(*iter);
finalBox->pack_start(*tmr); finalBox->pack_start(*tmr);
finalBox->pack_start(*separatorbalend, Gtk::PACK_SHRINK, 2); // finalBox->pack_start(*separatorbalend, Gtk::PACK_SHRINK, 2);
finalBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2); // finalBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2);
// finalBox->pack_start(*sigmafin);
finalBox->pack_start(*fincFrame);
finalBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); finalBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4);
finalBox->pack_start(*softradend); finalBox->pack_start(*softradend);
@ -1420,6 +1433,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
strength->setValue(pp->wavelet.strength); strength->setValue(pp->wavelet.strength);
balance->setValue(pp->wavelet.balance); balance->setValue(pp->wavelet.balance);
iter->setValue(pp->wavelet.iter); iter->setValue(pp->wavelet.iter);
sigmafin->setValue(pp->wavelet.sigmafin);
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
correction[i]->setValue(pp->wavelet.c[i]); correction[i]->setValue(pp->wavelet.c[i]);
@ -1537,6 +1551,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
thres->setEditedState(pedited->wavelet.thres ? Edited : UnEdited); thres->setEditedState(pedited->wavelet.thres ? Edited : UnEdited);
balance->setEditedState(pedited->wavelet.balance ? Edited : UnEdited); balance->setEditedState(pedited->wavelet.balance ? Edited : UnEdited);
iter->setEditedState(pedited->wavelet.iter ? Edited : UnEdited); iter->setEditedState(pedited->wavelet.iter ? Edited : UnEdited);
sigmafin->setEditedState(pedited->wavelet.sigmafin ? Edited : UnEdited);
threshold->setEditedState(pedited->wavelet.threshold ? Edited : UnEdited); threshold->setEditedState(pedited->wavelet.threshold ? Edited : UnEdited);
threshold2->setEditedState(pedited->wavelet.threshold2 ? Edited : UnEdited); threshold2->setEditedState(pedited->wavelet.threshold2 ? Edited : UnEdited);
edgedetect->setEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited); edgedetect->setEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited);
@ -1808,6 +1823,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pp->wavelet.iter = (int) iter->getValue(); pp->wavelet.iter = (int) iter->getValue();
pp->wavelet.wavclCurve = clshape->getCurve(); pp->wavelet.wavclCurve = clshape->getCurve();
pp->wavelet.sigmafin = sigmafin->getValue();
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
pp->wavelet.c[i] = (int) correction[i]->getValue(); pp->wavelet.c[i] = (int) correction[i]->getValue();
@ -1914,6 +1930,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pedited->wavelet.softradend = softradend->getEditedState(); pedited->wavelet.softradend = softradend->getEditedState();
pedited->wavelet.balance = balance->getEditedState(); pedited->wavelet.balance = balance->getEditedState();
pedited->wavelet.iter = iter->getEditedState(); pedited->wavelet.iter = iter->getEditedState();
pedited->wavelet.sigmafin = sigmafin->getEditedState();
pedited->wavelet.wavclCurve = !clshape->isUnChanged(); pedited->wavelet.wavclCurve = !clshape->isUnChanged();
pedited->wavelet.expcontrast = !expcontrast->get_inconsistent(); pedited->wavelet.expcontrast = !expcontrast->get_inconsistent();
pedited->wavelet.expchroma = !expchroma->get_inconsistent(); pedited->wavelet.expchroma = !expchroma->get_inconsistent();
@ -2094,6 +2111,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit
strength->setDefault(defParams->wavelet.strength); strength->setDefault(defParams->wavelet.strength);
balance->setDefault(defParams->wavelet.balance); balance->setDefault(defParams->wavelet.balance);
iter->setDefault(defParams->wavelet.iter); iter->setDefault(defParams->wavelet.iter);
sigmafin->setDefault(defParams->wavelet.sigmafin);
sigma->setDefault(defParams->wavelet.sigma); sigma->setDefault(defParams->wavelet.sigma);
offset->setDefault(defParams->wavelet.offset); offset->setDefault(defParams->wavelet.offset);
lowthr->setDefault(defParams->wavelet.lowthr); lowthr->setDefault(defParams->wavelet.lowthr);
@ -2216,6 +2234,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit
strength->setDefaultEditedState(pedited->wavelet.strength ? Edited : UnEdited); strength->setDefaultEditedState(pedited->wavelet.strength ? Edited : UnEdited);
balance->setDefaultEditedState(pedited->wavelet.balance ? Edited : UnEdited); balance->setDefaultEditedState(pedited->wavelet.balance ? Edited : UnEdited);
iter->setDefaultEditedState(pedited->wavelet.iter ? Edited : UnEdited); iter->setDefaultEditedState(pedited->wavelet.iter ? Edited : UnEdited);
sigmafin->setDefaultEditedState(pedited->wavelet.sigmafin ? Edited : UnEdited);
level0noise->setDefaultEditedState(pedited->wavelet.level0noise ? Edited : UnEdited); level0noise->setDefaultEditedState(pedited->wavelet.level0noise ? Edited : UnEdited);
level1noise->setDefaultEditedState(pedited->wavelet.level1noise ? Edited : UnEdited); level1noise->setDefaultEditedState(pedited->wavelet.level1noise ? Edited : UnEdited);
level2noise->setDefaultEditedState(pedited->wavelet.level2noise ? Edited : UnEdited); level2noise->setDefaultEditedState(pedited->wavelet.level2noise ? Edited : UnEdited);
@ -2278,6 +2297,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit
strength->setDefaultEditedState(Irrelevant); strength->setDefaultEditedState(Irrelevant);
balance->setDefaultEditedState(Irrelevant); balance->setDefaultEditedState(Irrelevant);
iter->setDefaultEditedState(Irrelevant); iter->setDefaultEditedState(Irrelevant);
sigmafin->setDefaultEditedState(Irrelevant);
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
correction[i]->setDefaultEditedState(Irrelevant); correction[i]->setDefaultEditedState(Irrelevant);
@ -2810,6 +2830,7 @@ void Wavelet::setBatchMode(bool batchMode)
strength->showEditedCB(); strength->showEditedCB();
balance->showEditedCB(); balance->showEditedCB();
iter->showEditedCB(); iter->showEditedCB();
sigmafin->showEditedCB();
level0noise->showEditedCB(); level0noise->showEditedCB();
level1noise->showEditedCB(); level1noise->showEditedCB();
level2noise->showEditedCB(); level2noise->showEditedCB();
@ -2959,6 +2980,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval)
listener->panelChanged(EvWavbalance, balance->getTextValue()); listener->panelChanged(EvWavbalance, balance->getTextValue());
} else if (a == iter) { } else if (a == iter) {
listener->panelChanged(EvWaviter, iter->getTextValue()); listener->panelChanged(EvWaviter, iter->getTextValue());
} else if (a == sigmafin) {
listener->panelChanged(EvWavsigmafin, sigmafin->getTextValue());
} else if (a == greenhigh) { } else if (a == greenhigh) {
listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue()); listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue());
} else if (a == bluehigh) { } else if (a == bluehigh) {

View File

@ -93,6 +93,7 @@ private:
rtengine::ProcEvent EvWavresblur; rtengine::ProcEvent EvWavresblur;
rtengine::ProcEvent EvWavresblurc; rtengine::ProcEvent EvWavresblurc;
rtengine::ProcEvent EvWavedgeffect; rtengine::ProcEvent EvWavedgeffect;
rtengine::ProcEvent EvWavsigmafin;
void foldAllButMe(GdkEventButton* event, MyExpander *expander); void foldAllButMe(GdkEventButton* event, MyExpander *expander);
@ -218,6 +219,7 @@ private:
Adjuster* const strength; Adjuster* const strength;
Adjuster* const balance; Adjuster* const balance;
Adjuster* const iter; Adjuster* const iter;
Adjuster* const sigmafin;
Adjuster* greenlow; Adjuster* greenlow;
Adjuster* bluelow; Adjuster* bluelow;
@ -294,6 +296,7 @@ private:
Gtk::Frame* const blurFrame; Gtk::Frame* const blurFrame;
Gtk::Frame* const chromaFrame; Gtk::Frame* const chromaFrame;
Gtk::Frame* const chroFrame; Gtk::Frame* const chroFrame;
Gtk::Frame* const fincFrame;
Gtk::Label* const wavLabels; Gtk::Label* const wavLabels;
Gtk::Label* const labmC; Gtk::Label* const labmC;