add Laplacian threshold to mask Retinex

This commit is contained in:
Desmis 2019-10-06 14:30:39 +02:00
parent 38963a3282
commit 38b53ca9b6
11 changed files with 141 additions and 6 deletions

View File

@ -995,6 +995,7 @@ HISTORY_MSG_754;Local - Reti Clip
HISTORY_MSG_755;Local - TM use tm mask
HISTORY_MSG_756;Local - Exp use algo exposure mask
HISTORY_MSG_757;Local - Exp Laplacian mask
HISTORY_MSG_758;Local - Reti Laplacian mask
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
@ -2219,6 +2220,7 @@ TP_LOCALLAB_RETI_FFTW_TOOLTIP;FFT improve quality and allow big radius, but incr
TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP;If enabled Mask uses Restored Datas after Transmission Map instead of Original datas
TP_LOCALLAB_SOFTRETI;Reduce artifact deltaE
TP_LOCALLAB_SOFTRETI_TOOLTIP;Take into account deltaE to improve Transmission map
TP_LOCALLAB_LAPRAD_TOOLTIP;Avoid using Radius and Laplace Threshold simultaneously
TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain
TP_LOCALLAB_TRANSMISSIONMAP;Transmission map
TP_LOCALLAB_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction.\nYou can act on this curve to change Transmission and reduce the artifacts

View File

@ -194,7 +194,7 @@ public:
void fftw_convol_blur2(float **input2, float **output2, int bfw, int bfh, float radius, int fftkern, int algo);
void fftw_tile_blur(int GW, int GH, int tilssize , int max_numblox_W, int min_numblox_W, float **tmp1, int numThreads, double radius);
void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_L, int H_L, int skip, const LocCCmaskCurve & locccmasretiCurve, bool &lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool &llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, int llretiMask, bool retiMasktmap, bool retiMask,
float rad, float gamm, float slop, float chro, float blend, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, bool multiThread);
float rad, float lap, float gamm, float slop, float chro, float blend, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, bool multiThread);
void MSRLocal(int sp, bool fftw, int lum, float** reducDE, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, int bfwr, int bfhr, const procparams::LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
const LocCCmaskCurve & locccmasretiCurve, bool &lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool &llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, int llretiMask, LabImage * transformed, bool retiMasktmap, bool retiMask);

View File

@ -95,6 +95,68 @@ void calcGammaLut(double gamma, double ts, LUTf &gammaLut)
}
}
static float *discrete_laplacian_threshold_reti(float * data_out, const float * data_in, size_t nx, size_t ny, float t)
{//same as in iplocallab.cc
BENCHFUN
size_t i, j;
float *ptr_out;
float diff = 0.f;
const float *ptr_in, *ptr_in_xm1, *ptr_in_xp1, *ptr_in_ym1, *ptr_in_yp1;
if (NULL == data_in || NULL == data_out) {
fprintf(stderr, "a pointer is NULL and should not be so\n");
abort();
}
ptr_in = data_in;
ptr_in_xm1 = data_in - 1;
ptr_in_xp1 = data_in + 1;
ptr_in_ym1 = data_in - nx;
ptr_in_yp1 = data_in + nx;
ptr_out = data_out;
for (j = 0; j < ny; j++) {
for (i = 0; i < nx; i++) {
*ptr_out = 0.f;
if (0 < i) {
diff = *ptr_in - *ptr_in_xm1;
if (fabs(diff) > t) {
*ptr_out += diff;
}
}
if (nx - 1 > i) {
diff = *ptr_in - *ptr_in_xp1;
if (fabs(diff) > t) {
*ptr_out += diff;
}
}
if (0 < j) {
diff = *ptr_in - *ptr_in_ym1;
if (fabs(diff) > t) {
*ptr_out += diff;
}
}
if (ny - 1 > j) {
diff = *ptr_in - *ptr_in_yp1;
if (fabs(diff) > t) {
*ptr_out += diff;
}
}
ptr_in++;
ptr_in_xm1++;
ptr_in_xp1++;
ptr_in_ym1++;
ptr_in_yp1++;
ptr_out++;
}
}
return data_out;
}
void retinex_scales(float* scales, int nscales, int mode, int s, float high)
{
@ -852,7 +914,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
void ImProcFunctions::maskforretinex(int sp, int before, float ** luminance, float ** out, int W_L, int H_L, int skip, const LocCCmaskCurve & locccmasretiCurve, bool &lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool &llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, int llretiMask, bool retiMasktmap, bool retiMask,
float rad, float gamm, float slop, float chro, float blend, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, bool multiThread)
float rad, float lap, float gamm, float slop, float chro, float blend, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, bool multiThread)
{
array2D<float> loctemp(W_L, H_L);
array2D<float> ble(W_L, H_L);
@ -953,6 +1015,35 @@ void ImProcFunctions::maskforretinex(int sp, int before, float ** luminance, flo
bufmaskblurreti->L[ir][jr] = lutTonemaskreti[L_];
}
if (lap > 0.f) {
float *datain = new float[H_L * W_L];
float *data_tmp = new float[H_L * W_L];
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
datain[y * W_L + x] = bufmaskblurreti->L[y][x];
}
}
(void) discrete_laplacian_threshold_reti(data_tmp, datain, W_L, H_L, 200.f * lap);
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) {
bufmaskblurreti->L[y][x] = data_tmp[y * W_L + x];
}
}
delete [] datain;
delete [] data_tmp;
}
//blend
#ifdef _OPENMP
@ -1572,11 +1663,12 @@ void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, float** reducDE, LabI
float gamm = loc.spots.at(sp).gammaskreti;
float blend = loc.spots.at(sp).blendmaskreti;
float chro = loc.spots.at(sp).chromaskreti;
float lap = loc.spots.at(sp).lapmaskreti;
if (lum == 1 && (llretiMask == 3 || llretiMask == 0 || llretiMask == 2 || llretiMask == 4)) { //only mask with luminance on last scale
int before = 1;
maskforretinex(sp, before, luminance, nullptr, W_L, H_L, skip, locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, retiMasktmap, retiMask,
rad, gamm, slop, chro, blend , bufreti, bufmask, buforig, buforigmas, multiThread);
rad, lap, gamm, slop, chro, blend , bufreti, bufmask, buforig, buforigmas, multiThread);
}
//mask does not interfered with datas displayed

View File

@ -784,6 +784,7 @@ enum ProcEventCode {
EvLocallabEnatmMaskaft = 754,
EvLocallabEnaExpMaskaft = 755,
Evlocallablapmasktm = 756,
Evlocallablapmaskreti = 757,
NUMOFEVENTS
};

View File

@ -2602,10 +2602,11 @@ LocallabParams::LocallabSpot::LocallabSpot() :
enaretiMask(false),
enaretiMasktmap(true),
blendmaskreti(0),
radmaskreti(10.0),
radmaskreti(0.0),
chromaskreti(0.0),
gammaskreti(1.0),
slomaskreti(0.0),
lapmaskreti(0.0),
scalereti(2.0),
darkness(2.0),
lightnessreti(1.0),
@ -2876,6 +2877,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& chromaskreti == other.chromaskreti
&& gammaskreti == other.gammaskreti
&& slomaskreti == other.slomaskreti
&& lapmaskreti == other.lapmaskreti
&& scalereti == other.scalereti
&& darkness == other.darkness
&& lightnessreti == other.lightnessreti
@ -4132,6 +4134,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromaskreti, "Locallab", "Chromaskreti_" + std::to_string(i), spot.chromaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskreti, "Locallab", "Gammaskreti_" + std::to_string(i), spot.gammaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskreti, "Locallab", "Slomaskreti_" + std::to_string(i), spot.slomaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskreti, "Locallab", "Lapmaskreti_" + std::to_string(i), spot.lapmaskreti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).scalereti, "Locallab", "Scalereti_" + std::to_string(i), spot.scalereti, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).darkness, "Locallab", "Darkness_" + std::to_string(i), spot.darkness, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lightnessreti, "Locallab", "Lightnessreti_" + std::to_string(i), spot.lightnessreti, keyFile);
@ -5515,6 +5518,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Chromaskreti_" + std::to_string(i), pedited, spot.chromaskreti, spotEdited.chromaskreti);
assignFromKeyfile(keyFile, "Locallab", "Gammaskreti_" + std::to_string(i), pedited, spot.gammaskreti, spotEdited.gammaskreti);
assignFromKeyfile(keyFile, "Locallab", "Slomaskreti_" + std::to_string(i), pedited, spot.slomaskreti, spotEdited.slomaskreti);
assignFromKeyfile(keyFile, "Locallab", "Lapmaskreti_" + std::to_string(i), pedited, spot.lapmaskreti, spotEdited.lapmaskreti);
assignFromKeyfile(keyFile, "Locallab", "Scalereti_" + std::to_string(i), pedited, spot.scalereti, spotEdited.scalereti);
assignFromKeyfile(keyFile, "Locallab", "Darkness_" + std::to_string(i), pedited, spot.darkness, spotEdited.darkness);
assignFromKeyfile(keyFile, "Locallab", "Lightnessreti_" + std::to_string(i), pedited, spot.lightnessreti, spotEdited.lightnessreti);

View File

@ -1155,6 +1155,7 @@ struct LocallabParams {
double chromaskreti;
double gammaskreti;
double slomaskreti;
double lapmaskreti;
double scalereti;
double darkness;
double lightnessreti;

View File

@ -783,10 +783,10 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabcliptm
LUMINANCECURVE, //Evlocallabenatmmaskaft
LUMINANCECURVE, //EvlocallabenaExpmaskaft
LUMINANCECURVE //Evlocallablapmasktm
LUMINANCECURVE, //Evlocallablapmasktm
LUMINANCECURVE //Evlocallablapmaskreti
};
namespace rtengine
{

View File

@ -281,6 +281,7 @@ Locallab::Locallab():
chromaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))),
slomaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
lapmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
scalereti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALERETI"), 1.0, 10.0, 1., 2.))),
darkness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DARKRETI"), 0.01, 6.0, 0.01, 2.0))),
lightnessreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTRETI"), 0.01, 4.0, 0.01, 1.))),
@ -1264,6 +1265,10 @@ Locallab::Locallab():
showmasktmMethodConn = showmasktmMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmasktmMethodChanged));
if (showtooltip) {
radmasktm->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
lapmasktm->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
}
blendmasktm->setAdjusterListener(this);
@ -1480,6 +1485,10 @@ Locallab::Locallab():
showmaskretiMethodConn = showmaskretiMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskretiMethodChanged));
if (showtooltip) {
radmaskreti->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
lapmaskreti->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
}
blendmaskreti->setAdjusterListener(this);
@ -1487,6 +1496,7 @@ Locallab::Locallab():
chromaskreti->setAdjusterListener(this);
gammaskreti->setAdjusterListener(this);
slomaskreti->setAdjusterListener(this);
lapmaskreti->setAdjusterListener(this);
scalereti->setAdjusterListener(this);
darkness->setAdjusterListener(this);
lightnessreti->setAdjusterListener(this);
@ -1499,6 +1509,7 @@ Locallab::Locallab():
maskretiBox->pack_start(*maskretiCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
maskretiBox->pack_start(*blendmaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*radmaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*lapmaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*chromaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*gammaskreti, Gtk::PACK_SHRINK, 0);
maskretiBox->pack_start(*slomaskreti, Gtk::PACK_SHRINK, 0);
@ -3213,6 +3224,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pp->locallab.spots.at(pp->locallab.selspot).chromaskreti = chromaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).gammaskreti = gammaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).slomaskreti = slomaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lapmaskreti = lapmaskreti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).scalereti = scalereti->getValue();
pp->locallab.spots.at(pp->locallab.selspot).darkness = darkness->getValue();
pp->locallab.spots.at(pp->locallab.selspot).lightnessreti = lightnessreti->getValue();
@ -3491,6 +3503,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pe->locallab.spots.at(pp->locallab.selspot).chromaskreti = pe->locallab.spots.at(pp->locallab.selspot).chromaskreti || chromaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).gammaskreti = pe->locallab.spots.at(pp->locallab.selspot).gammaskreti || gammaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).slomaskreti = pe->locallab.spots.at(pp->locallab.selspot).slomaskreti || slomaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lapmaskreti = pe->locallab.spots.at(pp->locallab.selspot).lapmaskreti || lapmaskreti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).scalereti = pe->locallab.spots.at(pp->locallab.selspot).scalereti || scalereti->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).darkness = pe->locallab.spots.at(pp->locallab.selspot).darkness || darkness->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).lightnessreti = pe->locallab.spots.at(pp->locallab.selspot).lightnessreti || lightnessreti->getEditedState();
@ -3767,6 +3780,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
pedited->locallab.spots.at(pp->locallab.selspot).chromaskreti = pedited->locallab.spots.at(pp->locallab.selspot).chromaskreti || chromaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).gammaskreti = pedited->locallab.spots.at(pp->locallab.selspot).gammaskreti || gammaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).slomaskreti = pedited->locallab.spots.at(pp->locallab.selspot).slomaskreti || slomaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskreti = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskreti || lapmaskreti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).scalereti = pedited->locallab.spots.at(pp->locallab.selspot).scalereti || scalereti->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).darkness = pedited->locallab.spots.at(pp->locallab.selspot).darkness || darkness->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).lightnessreti = pedited->locallab.spots.at(pp->locallab.selspot).lightnessreti || lightnessreti->getEditedState();
@ -5568,6 +5582,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
chromaskreti->setDefault(defSpot->chromaskreti);
gammaskreti->setDefault(defSpot->gammaskreti);
slomaskreti->setDefault(defSpot->slomaskreti);
lapmaskreti->setDefault(defSpot->lapmaskreti);
scalereti->setDefault(defSpot->scalereti);
darkness->setDefault(defSpot->darkness);
lightnessreti->setDefault(defSpot->lightnessreti);
@ -5734,6 +5749,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
chromaskreti->setDefaultEditedState(Irrelevant);
gammaskreti->setDefaultEditedState(Irrelevant);
slomaskreti->setDefaultEditedState(Irrelevant);
lapmaskreti->setDefaultEditedState(Irrelevant);
scalereti->setDefaultEditedState(Irrelevant);
darkness->setDefaultEditedState(Irrelevant);
lightnessreti->setDefaultEditedState(Irrelevant);
@ -5904,6 +5920,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
chromaskreti->setDefaultEditedState(defSpotState->chromaskreti ? Edited : UnEdited);
gammaskreti->setDefaultEditedState(defSpotState->gammaskreti ? Edited : UnEdited);
slomaskreti->setDefaultEditedState(defSpotState->slomaskreti ? Edited : UnEdited);
lapmaskreti->setDefaultEditedState(defSpotState->lapmaskreti ? Edited : UnEdited);
scalereti->setDefaultEditedState(defSpotState->scalereti ? Edited : UnEdited);
darkness->setDefaultEditedState(defSpotState->darkness ? Edited : UnEdited);
lightnessreti->setDefaultEditedState(defSpotState->lightnessreti ? Edited : UnEdited);
@ -6641,6 +6658,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
}
}
if (a == lapmaskreti) {
if (listener) {
listener->panelChanged(Evlocallablapmaskreti, lapmaskreti->getTextValue());
}
}
if (a == scalereti) {
if (scalereti->getValue() == 1) {
LocalcurveEditorgainT->hide();
@ -7102,6 +7125,7 @@ void Locallab::setBatchMode(bool batchMode)
chromaskreti->showEditedCB();
gammaskreti->showEditedCB();
slomaskreti->showEditedCB();
lapmaskreti->showEditedCB();
scalereti->showEditedCB();
darkness->showEditedCB();
lightnessreti->showEditedCB();
@ -7741,6 +7765,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
chromaskreti->setValue(pp->locallab.spots.at(index).chromaskreti);
gammaskreti->setValue(pp->locallab.spots.at(index).gammaskreti);
slomaskreti->setValue(pp->locallab.spots.at(index).slomaskreti);
lapmaskreti->setValue(pp->locallab.spots.at(index).lapmaskreti);
scalereti->setValue(pp->locallab.spots.at(index).scalereti);
darkness->setValue(pp->locallab.spots.at(index).darkness);
lightnessreti->setValue(pp->locallab.spots.at(index).lightnessreti);
@ -8069,6 +8094,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
chromaskreti->setEditedState(spotState->chromaskreti ? Edited : UnEdited);
gammaskreti->setEditedState(spotState->gammaskreti ? Edited : UnEdited);
slomaskreti->setEditedState(spotState->slomaskreti ? Edited : UnEdited);
lapmaskreti->setEditedState(spotState->lapmaskreti ? Edited : UnEdited);
scalereti->setEditedState(spotState->scalereti ? Edited : UnEdited);
darkness->setEditedState(spotState->darkness ? Edited : UnEdited);
lightnessreti->setEditedState(spotState->lightnessreti ? Edited : UnEdited);

View File

@ -231,6 +231,7 @@ private:
Adjuster* const chromaskreti;
Adjuster* const gammaskreti;
Adjuster* const slomaskreti;
Adjuster* const lapmaskreti;
Adjuster* const scalereti;
Adjuster* const darkness;
Adjuster* const lightnessreti;

View File

@ -1147,6 +1147,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).chromaskreti = locallab.spots.at(j).chromaskreti && pSpot.chromaskreti == otherSpot.chromaskreti;
locallab.spots.at(j).gammaskreti = locallab.spots.at(j).gammaskreti && pSpot.gammaskreti == otherSpot.gammaskreti;
locallab.spots.at(j).slomaskreti = locallab.spots.at(j).slomaskreti && pSpot.slomaskreti == otherSpot.slomaskreti;
locallab.spots.at(j).lapmaskreti = locallab.spots.at(j).lapmaskreti && pSpot.lapmaskreti == otherSpot.lapmaskreti;
locallab.spots.at(j).scalereti = locallab.spots.at(j).scalereti && pSpot.scalereti == otherSpot.scalereti;
locallab.spots.at(j).darkness = locallab.spots.at(j).darkness && pSpot.darkness == otherSpot.darkness;
locallab.spots.at(j).lightnessreti = locallab.spots.at(j).lightnessreti && pSpot.lightnessreti == otherSpot.lightnessreti;
@ -3440,6 +3441,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).slomaskreti = mods.locallab.spots.at(i).slomaskreti;
}
if (locallab.spots.at(i).lapmaskreti) {
toEdit.locallab.spots.at(i).lapmaskreti = mods.locallab.spots.at(i).lapmaskreti;
}
if (locallab.spots.at(i).scalereti) {
toEdit.locallab.spots.at(i).scalereti = mods.locallab.spots.at(i).scalereti;
}
@ -4855,6 +4860,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
chromaskreti(v),
gammaskreti(v),
slomaskreti(v),
lapmaskreti(v),
scalereti(v),
darkness(v),
lightnessreti(v),
@ -5122,6 +5128,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
chromaskreti = v;
gammaskreti = v;
slomaskreti = v;
lapmaskreti = v;
scalereti = v;
darkness = v;
lightnessreti = v;

View File

@ -565,6 +565,7 @@ public:
bool chromaskreti;
bool gammaskreti;
bool slomaskreti;
bool lapmaskreti;
bool scalereti;
bool darkness;
bool lightnessreti;