2nd levels and resid dynamic range compression contrast wavelet

This commit is contained in:
Desmis 2019-12-16 14:16:12 +01:00
parent 1981b17245
commit 81e08265ec
12 changed files with 97 additions and 31 deletions

View File

@ -1102,7 +1102,7 @@ HISTORY_MSG_862;Local - Contrast Sigma luminance
HISTORY_MSG_863;Local - Contrast Merge Original
HISTORY_MSG_864;Local - Contrast Detail
HISTORY_MSG_865;Local - Contrast Anchor
HISTORY_MSG_866;Local - Contrast Curve compression
HISTORY_MSG_867;Local - Contrast Amount residual
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
@ -2196,7 +2196,7 @@ TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4
TP_LOCALLAB_BLURCOL;Radius Mask Blur
TP_LOCALLAB_BLURDE;Blur Shape detection
TP_LOCALLAB_BLURLC;Luminance only
TP_LOCALLAB_BLURLC;Luminance Residual Image Only
TP_LOCALLAB_BLURLEVELFRA;Blur Levels
TP_LOCALLAB_BLURRESIDFRA;Blur Residual
TP_LOCALLAB_BUTTON_ADD;Add
@ -2296,6 +2296,7 @@ TP_LOCALLAB_FATDETAIL;Detail
TP_LOCALLAB_FATFRA;Dynamic Range Compression
TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal - use Fattal Tone mapping algorithm.\nAnchor allows selection according to the images over or under exposed.\nUseful to increase Luminance for a Second spot near the current and using mask
TP_LOCALLAB_FATLEVEL;Detail levels
TP_LOCALLAB_FATRES;Amount Residual Image
TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask
TP_LOCALLAB_FEATH_TOOLTIP;Gradient width in percent of the Spot diagonal\n..
TP_LOCALLAB_FEATVALUE;Feather gradient
@ -2455,7 +2456,7 @@ TP_LOCALLAB_REFLABEL;Ref. (0..1) Chroma=%1 Luma=%2 Hue=%3
TP_LOCALLAB_REN_DIALOG_LAB;Enter the new Control Spot name
TP_LOCALLAB_REN_DIALOG_NAME;Renaming Control Spot
TP_LOCALLAB_RESID;Residual Image
TP_LOCALLAB_RESIDBLUR;Blur
TP_LOCALLAB_RESIDBLUR;Blur Residual Image
TP_LOCALLAB_RESIDCHRO;Residual image Chroma
TP_LOCALLAB_RESIDCONT;Residual image Contrast
TP_LOCALLAB_RETI;Dehaze - Retinex Strong local contrast

View File

@ -314,7 +314,7 @@ public:
static void strcurv_data(std::string retistr, int *s_datc, int &siz);
void blendstruc(int bfw, int bfh, LabImage* bufcolorig, float radius, float stru, array2D<float> & blend2, int sk, bool multiThread);
void wavcontrast4(float ** tmp, float contrast, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads, const LocwavCurve & locwavCurve, bool & locwavutili,
void wavcontrast4(float ** tmp, float contrast, float fatres, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads, const LocwavCurve & locwavCurve, bool & locwavutili,
const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev,
const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon,
const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp,

View File

@ -3999,7 +3999,7 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
bool wavcurvecon = false;
bool loccompwavutili = false;
bool wavcurvecomp = false;
wavcontrast4(bufmaskblurcol->L, contrast, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f);
wavcontrast4(bufmaskblurcol->L, contrast, 0.f, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f);
}
@ -6736,7 +6736,7 @@ void ImProcFunctions::fftw_tile_blur(int GW, int GH, int tilssize, int max_numbl
fftwf_destroy_plan(plan_backward_blox[1]);
fftwf_cleanup();
}
void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads,
void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float fatres, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads,
const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev,
const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon,
const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp,
@ -6753,6 +6753,39 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur,
int H_L = wdspot->level_H(0);
float *wav_L0 = wdspot->coeff0;
FattalToneMappingParams fatParams;
fatParams.threshold = fatdet;
fatParams.anchor = fatanch;
if (fatres > 0.f) {
fatParams.enabled = true;
fatParams.amount = fatres;
array2D<float> bufl(W_L, H_L);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
bufl[y][x] = wav_L0[y * W_L + x];
}
}
ToneMapFattal02(nullptr, fatParams, 3, true, bufl, W_L, H_L);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
wav_L0[y * W_L + x] = bufl[y][x];
}
}
}
if (radblur > 0.f) {
array2D<float> bufl(W_L, H_L);
#ifdef _OPENMP
@ -6933,11 +6966,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur,
float ****templevel = nullptr;
if (wavcurvelev || wavcurvecomp) {
FattalToneMappingParams fatParams;
fatParams.enabled = wavcurvecomp;
fatParams.threshold = fatdet;
fatParams.amount = 50;
fatParams.anchor = fatanch;
templevel = new float***[dir];
@ -6972,6 +7001,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur,
//Compress dynamic range
if (wavcurvecomp) {
printf("Dynamic Range levels\n");
for (int dir = 1; dir < 4; dir++) {
for (int level = level_bl; level < maxlvl; ++level) {
int W_L = wdspot->level_W(level);
@ -6992,7 +7022,9 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur,
//blur level and dir
if (wavcurvelev) {
if (wavcurvelev && radlevblur > 0.f) {
printf("Blur levels\n");
for (int dir = 1; dir < 4; dir++) {
for (int level = level_bl; level < maxlvl; ++level) {
int W_L = wdspot->level_W(level);
@ -9121,7 +9153,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
bool wavcurvecon = false;
bool loccompwavutili = false;
bool wavcurvecomp = false;
wavcontrast4(bufmaskblurbl->L, contrast, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f);
wavcontrast4(bufmaskblurbl->L, contrast, 0.f, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, 1.f, maxlvl, 0.f, 0.f);
}
int shado = params->locallab.spots.at(sp).shadmaskbl;
@ -10954,8 +10986,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
const float sigma = params->locallab.spots.at(sp).sigma;
const float fatdet = params->locallab.spots.at(sp).fatdet;
const float fatanch = params->locallab.spots.at(sp).fatanch;
const float fatres = params->locallab.spots.at(sp).fatres;
wavcontrast4(tmp1->L, contrast, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, loccompwavCurve, loccompwavutili, wavcurvecomp, sigma, maxlvl, fatdet, fatanch);
wavcontrast4(tmp1->L, contrast, fatres, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, loccompwavCurve, loccompwavutili, wavcurvecomp, sigma, maxlvl, fatdet, fatanch);
const float satur = params->locallab.spots.at(sp).residchro;

View File

@ -892,6 +892,7 @@ enum ProcEventCode {
Evlocallabfatdet = 863,
Evlocallabfatanch = 864,
EvlocallabwavCurvecomp = 865,
Evlocallabfatres = 866,
NUMOFEVENTS
};

View File

@ -2728,6 +2728,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
sigma(1.0),
fatdet(40.0),
fatanch(50.0),
fatres(0.0),
clarilres(0.0),
claricres(0.0),
clarisoft(1.0),
@ -3121,6 +3122,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& sigma == other.sigma
&& fatdet == other.fatdet
&& fatanch == other.fatanch
&& fatres == other.fatres
&& clarilres == other.clarilres
&& claricres == other.claricres
&& clarisoft == other.clarisoft
@ -4494,6 +4496,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sigma, "Locallab", "Sigma_" + std::to_string(i), spot.sigma, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatdet, "Locallab", "Fatdet_" + std::to_string(i), spot.fatdet, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatanch, "Locallab", "Fatanch_" + std::to_string(i), spot.fatanch, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatres, "Locallab", "Fatres_" + std::to_string(i), spot.fatres, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).clarilres, "Locallab", "ClariLres_" + std::to_string(i), spot.clarilres, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).claricres, "Locallab", "ClariCres_" + std::to_string(i), spot.claricres, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).clarisoft, "Locallab", "Clarisoft_" + std::to_string(i), spot.clarisoft, keyFile);
@ -6016,6 +6019,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Sigma_" + std::to_string(i), pedited, spot.sigma, spotEdited.sigma);
assignFromKeyfile(keyFile, "Locallab", "Fatdet_" + std::to_string(i), pedited, spot.fatdet, spotEdited.fatdet);
assignFromKeyfile(keyFile, "Locallab", "Fatanch_" + std::to_string(i), pedited, spot.fatanch, spotEdited.fatanch);
assignFromKeyfile(keyFile, "Locallab", "Fatres_" + std::to_string(i), pedited, spot.fatres, spotEdited.fatres);
assignFromKeyfile(keyFile, "Locallab", "ClariLres_" + std::to_string(i), pedited, spot.clarilres, spotEdited.clarilres);
assignFromKeyfile(keyFile, "Locallab", "ClariCres_" + std::to_string(i), pedited, spot.claricres, spotEdited.claricres);
assignFromKeyfile(keyFile, "Locallab", "Clarisoft_" + std::to_string(i), pedited, spot.clarisoft, spotEdited.clarisoft);

View File

@ -1271,6 +1271,7 @@ struct LocallabParams {
double sigma;
double fatdet;
double fatanch;
double fatres;
double clarilres;
double claricres;
double clarisoft;

View File

@ -895,7 +895,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // Evlocallaboriglc
LUMINANCECURVE, // Evlocallabfatdet
LUMINANCECURVE, // Evlocallabfatanch
LUMINANCECURVE //EvlocallabwavCurvecomp
LUMINANCECURVE, //EvlocallabwavCurvecomp
LUMINANCECURVE //Evlocallabfatres
};
namespace rtengine

View File

@ -1098,7 +1098,6 @@ void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingPa
constexpr float min_luminance = 1.f;
TMatrix ws = ICCStore::getInstance()->workingSpaceMatrix(params->icm.workingProfile);
printf("OK 1\n");
#ifdef _OPENMP
#pragma omp parallel for if(multiThread)
#endif
@ -1112,7 +1111,6 @@ printf("OK 1\n");
}
}
}
printf("OK 2\n");
float oldMedian;
const float percentile = float(LIM(fatParams.anchor, 1, 100)) / 100.f;
@ -1152,10 +1150,8 @@ printf("OK 2\n");
}
rescale_nearest(Yr, L, multiThread);
printf("OK 3\n");
tmo_fattal02(w2, h2, L, L, alpha, beta, noise, detail_level, multiThread);
printf("OK 4\n");
const float hr = float(h2) / float(h);
const float wr = float(w2) / float(w);
@ -1189,7 +1185,6 @@ printf("OK 4\n");
}
}
}
printf("OK 5\n");
}

View File

@ -563,6 +563,7 @@ residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100, 100, 1, 0))
sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
fatdet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))),
fatanch(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))),
multiplier(
[this]() -> std::array<Adjuster*, 6> {
@ -742,7 +743,6 @@ retitoolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETITOOLFRA")))),
residFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")))),
clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))),
blurlevelFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")))),
blurresidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURRESIDFRA")))),
contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTFRA")))),
compFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_COMPFRA")))),
grainFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRAINFRA")))),
@ -2871,6 +2871,7 @@ pe(nullptr)
sigma->setAdjusterListener(this);
fatdet->setAdjusterListener(this);
fatanch->setAdjusterListener(this);
fatres->setAdjusterListener(this);
clarilres->setAdjusterListener(this);
clarisoft->setLogScale(10, -10);
clarisoft->setAdjusterListener(this);
@ -2883,24 +2884,23 @@ pe(nullptr)
clariFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock());
clariBox->pack_start(*clarilres);
clariBox->pack_start(*claricres);
clariBox->pack_start(*clarisoft);
clariBox->pack_start(*claricres);
clariBox->pack_start(*clarisoft);
clariBox->pack_start(*origlc);
clariFrame->add(*clariBox);
blurresidFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const blurcontraBox = Gtk::manage(new ToolParamBlock());
blurcontraBox->pack_start(*residblur);
blurcontraBox->pack_start(*blurlc);
blurresidFrame->add(*blurcontraBox);
Gtk::HSeparator* const separatorblu = Gtk::manage(new Gtk::HSeparator());
blurlevelFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const blurlevcontBox = Gtk::manage(new ToolParamBlock());
blurlevcontBox->pack_start(*levelblur);
blurlevcontBox->pack_start(*LocalcurveEditorwavlev, Gtk::PACK_SHRINK, 4);
blurlevcontBox->pack_start(*separatorblu);
blurlevcontBox->pack_start(*residblur);
blurlevcontBox->pack_start(*blurlc);
blurlevelFrame->add(*blurlevcontBox);
contFrame->set_label_align(0.025, 0.5);
@ -2909,11 +2909,15 @@ pe(nullptr)
contlevBox->pack_start(*LocalcurveEditorwavcon, Gtk::PACK_SHRINK, 4);
contFrame->add(*contlevBox);
Gtk::HSeparator* const separatorcomp = Gtk::manage(new Gtk::HSeparator());
compFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const compBox = Gtk::manage(new ToolParamBlock());
compBox->pack_start(*fatdet);
compBox->pack_start(*fatanch);
compBox->pack_start(*LocalcurveEditorwavcomp, Gtk::PACK_SHRINK, 4);
compBox->pack_start(*separatorcomp);
compBox->pack_start(*fatres);
compFrame->add(*compBox);
setExpandAlignProperties(expcontrastpyr, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
@ -2923,7 +2927,6 @@ pe(nullptr)
blurcontBox->pack_start(*clariFrame);
blurcontBox->pack_start(*contFrame);
blurcontBox->pack_start(*compFrame);
blurcontBox->pack_start(*blurresidFrame);
blurcontBox->pack_start(*blurlevelFrame);
expcontrastpyr->add(*blurcontBox, false);
@ -5092,6 +5095,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).sigma = sigma->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fatdet = fatdet->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fatanch = fatanch->getValue();
pp->locallab.spots.at(pp->locallab.selspot).fatres = fatres->getValue();
pp->locallab.spots.at(pp->locallab.selspot).clarilres = clarilres->getValue();
pp->locallab.spots.at(pp->locallab.selspot).claricres = claricres->getValue();
pp->locallab.spots.at(pp->locallab.selspot).clarisoft = clarisoft->getValue();
@ -5488,6 +5492,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pe->locallab.spots.at(pp->locallab.selspot).sigma = pe->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fatdet = pe->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fatanch = pe->locallab.spots.at(pp->locallab.selspot).fatanch || fatanch->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).fatres = pe->locallab.spots.at(pp->locallab.selspot).fatres || fatres->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).clarilres = pe->locallab.spots.at(pp->locallab.selspot).clarilres || clarilres->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).claricres = pe->locallab.spots.at(pp->locallab.selspot).claricres || claricres->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).clarisoft = pe->locallab.spots.at(pp->locallab.selspot).clarisoft || clarisoft->getEditedState();
@ -5881,6 +5886,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pedited->locallab.spots.at(pp->locallab.selspot).sigma = pedited->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fatdet = pedited->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fatanch = pedited->locallab.spots.at(pp->locallab.selspot).fatanch || fatanch->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).fatres = pedited->locallab.spots.at(pp->locallab.selspot).fatres || fatres->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).clarilres = pedited->locallab.spots.at(pp->locallab.selspot).clarilres || clarilres->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).claricres = pedited->locallab.spots.at(pp->locallab.selspot).claricres || claricres->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).clarisoft = pedited->locallab.spots.at(pp->locallab.selspot).clarisoft || clarisoft->getEditedState();
@ -6405,6 +6411,7 @@ void Locallab::localcontMethodChanged()
sigma->hide();
fatdet->hide();
fatanch->hide();
fatres->hide();
clarilres->hide();
claricres->hide();
clarisoft->hide();
@ -6430,6 +6437,7 @@ void Locallab::localcontMethodChanged()
sigma->show();
fatdet->show();
fatanch->show();
fatres->show();
clarilres->show();
claricres->show();
clarisoft->show();
@ -8438,6 +8446,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
sigma->setDefault(defSpot->sigma);
fatdet->setDefault(defSpot->fatdet);
fatanch->setDefault(defSpot->fatanch);
fatres->setDefault(defSpot->fatres);
clarilres->setDefault(defSpot->clarilres);
claricres->setDefault(defSpot->claricres);
clarisoft->setDefault(defSpot->clarisoft);
@ -8673,6 +8682,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
sigma->setDefaultEditedState(Irrelevant);
fatdet->setDefaultEditedState(Irrelevant);
fatanch->setDefaultEditedState(Irrelevant);
fatres->setDefaultEditedState(Irrelevant);
clarilres->setDefaultEditedState(Irrelevant);
claricres->setDefaultEditedState(Irrelevant);
clarisoft->setDefaultEditedState(Irrelevant);
@ -8913,6 +8923,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
sigma->setDefaultEditedState(defSpotState->sigma ? Edited : UnEdited);
fatdet->setDefaultEditedState(defSpotState->fatdet ? Edited : UnEdited);
fatanch->setDefaultEditedState(defSpotState->fatanch ? Edited : UnEdited);
fatres->setDefaultEditedState(defSpotState->fatres ? Edited : UnEdited);
clarilres->setDefaultEditedState(defSpotState->clarilres ? Edited : UnEdited);
claricres->setDefaultEditedState(defSpotState->claricres ? Edited : UnEdited);
clarisoft->setDefaultEditedState(defSpotState->clarisoft ? Edited : UnEdited);
@ -10096,6 +10107,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
}
}
if (a == fatres) {
if (listener) {
listener->panelChanged(Evlocallabfatres, fatres->getTextValue());
}
}
if (a == clarilres) {
if (listener) {
listener->panelChanged(Evlocallabclarilres, clarilres->getTextValue());
@ -10570,6 +10587,7 @@ void Locallab::setBatchMode(bool batchMode)
sigma->showEditedCB();
fatdet->showEditedCB();
fatanch->showEditedCB();
fatres->showEditedCB();
clarilres->showEditedCB();
claricres->showEditedCB();
clarisoft->showEditedCB();
@ -11623,6 +11641,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
sigma->setValue(pp->locallab.spots.at(index).sigma);
fatdet->setValue(pp->locallab.spots.at(index).fatdet);
fatanch->setValue(pp->locallab.spots.at(index).fatanch);
fatres->setValue(pp->locallab.spots.at(index).fatres);
clarilres->setValue(pp->locallab.spots.at(index).clarilres);
claricres->setValue(pp->locallab.spots.at(index).claricres);
clarisoft->setValue(pp->locallab.spots.at(index).clarisoft);
@ -12123,6 +12142,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
sigma->setEditedState(spotState->sigma ? Edited : UnEdited);
fatdet->setEditedState(spotState->fatdet ? Edited : UnEdited);
fatanch->setEditedState(spotState->fatanch ? Edited : UnEdited);
fatres->setEditedState(spotState->fatres ? Edited : UnEdited);
clarilres->setEditedState(spotState->clarilres ? Edited : UnEdited);
claricres->setEditedState(spotState->claricres ? Edited : UnEdited);
clarisoft->setEditedState(spotState->clarisoft ? Edited : UnEdited);
@ -12635,6 +12655,7 @@ void Locallab::updateSpecificGUIState()
sigma->hide();
fatdet->hide();
fatanch->hide();
fatres->hide();
clarilres->hide();
claricres->hide();
clarisoft->hide();
@ -12659,6 +12680,7 @@ void Locallab::updateSpecificGUIState()
sigma->show();
fatdet->show();
fatanch->show();
fatres->show();
residchro->show();
clarilres->show();
claricres->show();

View File

@ -362,6 +362,7 @@ private:
Adjuster* const sigma;
Adjuster* const fatdet;
Adjuster* const fatanch;
Adjuster* const fatres;
// Contrast by detail levels
const std::array<Adjuster*, 6> multiplier;
Adjuster* const chromacbdl;
@ -581,7 +582,6 @@ private:
Gtk::Frame* const residFrame;
Gtk::Frame* const clariFrame;
Gtk::Frame* const blurlevelFrame;
Gtk::Frame* const blurresidFrame;
Gtk::Frame* const contFrame;
Gtk::Frame* const compFrame;
Gtk::Frame* const grainFrame;

View File

@ -1264,6 +1264,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).sigma = locallab.spots.at(j).sigma && pSpot.sigma == otherSpot.sigma;
locallab.spots.at(j).fatdet = locallab.spots.at(j).fatdet && pSpot.fatdet == otherSpot.fatdet;
locallab.spots.at(j).fatanch = locallab.spots.at(j).fatanch && pSpot.fatanch == otherSpot.fatanch;
locallab.spots.at(j).fatres = locallab.spots.at(j).fatres && pSpot.fatres == otherSpot.fatres;
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;
@ -4017,6 +4018,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).fatanch = mods.locallab.spots.at(i).fatanch;
}
if (locallab.spots.at(i).fatres) {
toEdit.locallab.spots.at(i).fatres = mods.locallab.spots.at(i).fatres;
}
if (locallab.spots.at(i).clarilres) {
toEdit.locallab.spots.at(i).clarilres = mods.locallab.spots.at(i).clarilres;
}
@ -5540,6 +5545,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
sigma(v),
fatdet(v),
fatanch(v),
fatres(v),
clarilres(v),
claricres(v),
clarisoft(v),
@ -5923,6 +5929,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
sigma = v;
fatdet = v;
fatanch = v;
fatres = v;
clarilres = v;
claricres = v;
clarisoft = v;

View File

@ -697,6 +697,7 @@ public:
bool sigma;
bool fatdet;
bool fatanch;
bool fatres;
bool clarilres;
bool claricres;
bool clarisoft;