Merge Locallab tool "Denoise" into Locallab tool "Blur & Noise"

This commit is contained in:
Pandagrapher 2020-04-19 15:19:48 +02:00
parent 99b4a056c8
commit dd4eb44971
12 changed files with 465 additions and 607 deletions

View File

@ -2269,7 +2269,6 @@ TP_LOCALLAB_CURVENSOB2;Combined HueChroma + Contrast threshold (experimental)
TP_LOCALLAB_DARKRETI;Darkness
TP_LOCALLAB_LIGHTRETI;Lightness
TP_LOCALLAB_THRESRETI;Threshold
TP_LOCALLAB_DENOIS;Denoise
TP_LOCALLAB_DEHAZ;Dehaze
TP_LOCALLAB_EXPMETHOD_TOOLTIP;Standard : use an algorithm similar as main Exposure but in L*a*b* and taking account of deltaE.\n\nLaplacian & PDE : use another algorithm also with deltaE and with Poisson equation to solve Laplacian in Fourier space.\nPDE lead to very different results and needs differents settings that Standard\nMay be usefull for low exposure.\nPDE reduce artifacts and noise.
TP_LOCALLAB_FFTW;Use Fast Fourier Transform
@ -2426,7 +2425,7 @@ TP_LOCALLAB_VIBRANCE;Vibrance
TP_LOCALLAB_WARM;Warm - Cool & Color artifacts
TP_LOCALLAB_WARM_TOOLTIP;This slider use Ciecam algorithm and acts as White Balance, it can warm or cool the area selected.\nIt can also in some cases reduce color artifacts.
TP_LOCALLAB_SPOTNAME;New Spot
TP_LOCALLAB_BLUFR;Smooth - Blur - Grain (& additional denoise)
TP_LOCALLAB_BLUFR;Smooth - Blur - Grain - Denoise
TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n*Blur the background by a RT-spot fully covering the image (high values for scope and transition) - normal or inverse.\n*Isolate the foreground by one or more excluding RT-spot with the tools you want (increse scope), you can use a mask to enhance and amplify the effects.\n\nThis module can be used in additional noise reduction,including "median" and "Guided filter"
TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4
@ -2850,13 +2849,12 @@ TP_LOCALLAB_EXP_TOOLNAME;Locallab Exposure
TP_LOCALLAB_SH_TOOLNAME;Locallab Shadows Highlight
TP_LOCALLAB_VIB_TOOLNAME;Locallab Vibrance
TP_LOCALLAB_SOFT_TOOLNAME;Locallab Soft Light
TP_LOCALLAB_BLUR_TOOLNAME;Locallab Blur & Noise
TP_LOCALLAB_BLUR_TOOLNAME;Locallab Blur, Noise & Denoise
TP_LOCALLAB_TONE_TOOLNAME;Locallab Tone Mapping
TP_LOCALLAB_RET_TOOLNAME;Locallab Retinex
TP_LOCALLAB_SHARP_TOOLNAME;Locallab Sharpening
TP_LOCALLAB_LC_TOOLNAME;Locallab Local Constrast
TP_LOCALLAB_CBDL_TOOLNAME;Locallab CBDL
TP_LOCALLAB_DEN_TOOLNAME;Locallab Denoise
TP_LOCALLAB_LOG_TOOLNAME;Locallab Encoding log
TP_LOCALLAB_WAMASKCOL;Ψ Mask Wavelet level
TP_LOCALLAB_WARM;Warm - Cool & Color artifacts
@ -2877,6 +2875,8 @@ TP_LOCALLAB_WAVMASK;Ψ Mask Levels local contrast
TP_LOCALLAB_WAVMED;Ψ Wavelet normal
TP_LOCALLAB_WEDIANHI;Median Hi
TP_LOCALLAB_WHITE_EV;White Ev
TP_LOCALLAB_BLNOI_EXP;Blur & Noise
TP_LOCALLAB_DENOI_EXP;Denoise
TP_LOCAL_HEIGHT;Bottom
TP_LOCAL_HEIGHT_T;Top
TP_LOCAL_WIDTH;Right

View File

@ -794,7 +794,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.shapmet = 1;
}
lp.denoiena = locallab.spots.at(sp).expdenoi;
lp.denoiena = locallab.spots.at(sp).expblur;
bool wavcurveden = false;
float local_noiself = 0.f;

View File

@ -602,7 +602,7 @@ enum ProcEventCode {
Evlocallabchromacbdl = 576,
EvlocallabThresho = 577,
Evlocallabsensicb = 578,
EvLocenadenoi = 579,
// EvLocenadenoi = 579,
Evlocallabnoiselumf = 580,
Evlocallabnoiselumc = 581,
Evlocallabnoiselumdetail = 582,

View File

@ -2636,6 +2636,20 @@ LocallabParams::LocallabSpot::LocallabSpot() :
blurMethod("norm"),
medMethod("33"),
activlum(true),
noiselumf(0.),
noiselumf0(0.),
noiselumf2(0.),
noiselumc(0.),
noiselumdetail(0.),
noiselequal(7),
noisechrof(0.),
noisechroc(0.),
noisechrodetail(0.),
adjblur(0),
bilateral(0),
sensiden(20),
detailthr(0),
locwavcurveden{(double)FCT_MinMaxCPoints, 0.0, 0.0, 0.0, 0.35, 0.5, 0., 0.35, 0.35, 1.0, 0.0, 0.35, 0.35},
CCmaskblcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
LLmaskblcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
HHmaskblcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
@ -2811,23 +2825,6 @@ LocallabParams::LocallabSpot::LocallabSpot() :
slomaskcb(0.0),
lapmaskcb(0.0),
Lmaskcbcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0},
// Denoise
visidenoi(false),
expdenoi(false),
noiselumf(0.),
noiselumf0(0.),
noiselumf2(0.),
noiselumc(0.),
noiselumdetail(0.),
noiselequal(7),
noisechrof(0.),
noisechroc(0.),
noisechrodetail(0.),
adjblur(0),
bilateral(0),
sensiden(20),
detailthr(0),
locwavcurveden{(double)FCT_MinMaxCPoints, 0.0, 0.0, 0.0, 0.35, 0.5, 0., 0.35, 0.35, 1.0, 0.0, 0.35, 0.35},
// Log encoding
visilog(false),
explog(false),
@ -3081,6 +3078,20 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& blurMethod == other.blurMethod
&& medMethod == other.medMethod
&& activlum == other.activlum
&& noiselumf == other.noiselumf
&& noiselumf0 == other.noiselumf0
&& noiselumf2 == other.noiselumf2
&& noiselumc == other.noiselumc
&& noiselumdetail == other.noiselumdetail
&& noiselequal == other.noiselequal
&& noisechrof == other.noisechrof
&& noisechroc == other.noisechroc
&& noisechrodetail == other.noisechrodetail
&& adjblur == other.adjblur
&& bilateral == other.bilateral
&& sensiden == other.sensiden
&& detailthr == other.detailthr
&& locwavcurveden == other.locwavcurveden
&& CCmaskblcurve == other.CCmaskblcurve
&& LLmaskblcurve == other.LLmaskblcurve
&& HHmaskblcurve == other.HHmaskblcurve
@ -3265,23 +3276,6 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& slomaskcb == other.slomaskcb
&& lapmaskcb == other.lapmaskcb
&& Lmaskcbcurve == other.Lmaskcbcurve
// Denoise
&& visidenoi == other.visidenoi
&& expdenoi == other.expdenoi
&& noiselumf == other.noiselumf
&& noiselumf0 == other.noiselumf0
&& noiselumf2 == other.noiselumf2
&& noiselumc == other.noiselumc
&& noiselumdetail == other.noiselumdetail
&& noiselequal == other.noiselequal
&& noisechrof == other.noisechrof
&& noisechroc == other.noisechroc
&& noisechrodetail == other.noisechrodetail
&& adjblur == other.adjblur
&& bilateral == other.bilateral
&& sensiden == other.sensiden
&& detailthr == other.detailthr
&& locwavcurveden == other.locwavcurveden
// Log encoding
&& visilog == other.visilog
&& explog == other.explog
@ -4509,6 +4503,20 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blurMethod, "Locallab", "BlurMethod_" + std::to_string(i), spot.blurMethod, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).medMethod, "Locallab", "MedMethod_" + std::to_string(i), spot.medMethod, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).activlum, "Locallab", "activlum_" + std::to_string(i), spot.activlum, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumf, "Locallab", "noiselumf_" + std::to_string(i), spot.noiselumf, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumf0, "Locallab", "noiselumf0_" + std::to_string(i), spot.noiselumf0, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumf2, "Locallab", "noiselumf2_" + std::to_string(i), spot.noiselumf2, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumc, "Locallab", "noiselumc_" + std::to_string(i), spot.noiselumc, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumdetail, "Locallab", "noiselumdetail_" + std::to_string(i), spot.noiselumdetail, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselequal, "Locallab", "noiselequal_" + std::to_string(i), spot.noiselequal, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noisechrof, "Locallab", "noisechrof_" + std::to_string(i), spot.noisechrof, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noisechroc, "Locallab", "noisechroc_" + std::to_string(i), spot.noisechroc, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noisechrodetail, "Locallab", "noisechrodetail_" + std::to_string(i), spot.noisechrodetail, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).adjblur, "Locallab", "Adjblur_" + std::to_string(i), spot.adjblur, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).bilateral, "Locallab", "Bilateral_" + std::to_string(i), spot.bilateral, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensiden, "Locallab", "Sensiden_" + std::to_string(i), spot.sensiden, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).detailthr, "Locallab", "Detailthr_" + std::to_string(i), spot.detailthr, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).locwavcurveden, "Locallab", "LocwavCurveden_" + std::to_string(i), spot.locwavcurveden, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskblcurve, "Locallab", "CCmaskblCurve_" + std::to_string(i), spot.CCmaskblcurve, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskblcurve, "Locallab", "LLmaskblCurve_" + std::to_string(i), spot.LLmaskblcurve, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskblcurve, "Locallab", "HHmaskblCurve_" + std::to_string(i), spot.HHmaskblcurve, keyFile);
@ -4694,24 +4702,6 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskcb, "Locallab", "Lapmaskcb_" + std::to_string(i), spot.lapmaskcb, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).Lmaskcbcurve, "Locallab", "LmaskcbCurve_" + std::to_string(i), spot.Lmaskcbcurve, keyFile);
}
// Denoise
if ((!pedited || pedited->locallab.spots.at(i).visidenoi) && spot.visidenoi) {
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expdenoi, "Locallab", "Expdenoi_" + std::to_string(i), spot.expdenoi, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumf, "Locallab", "noiselumf_" + std::to_string(i), spot.noiselumf, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumf0, "Locallab", "noiselumf0_" + std::to_string(i), spot.noiselumf0, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumf2, "Locallab", "noiselumf2_" + std::to_string(i), spot.noiselumf2, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumc, "Locallab", "noiselumc_" + std::to_string(i), spot.noiselumc, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselumdetail, "Locallab", "noiselumdetail_" + std::to_string(i), spot.noiselumdetail, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noiselequal, "Locallab", "noiselequal_" + std::to_string(i), spot.noiselequal, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noisechrof, "Locallab", "noisechrof_" + std::to_string(i), spot.noisechrof, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noisechroc, "Locallab", "noisechroc_" + std::to_string(i), spot.noisechroc, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).noisechrodetail, "Locallab", "noisechrodetail_" + std::to_string(i), spot.noisechrodetail, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).adjblur, "Locallab", "Adjblur_" + std::to_string(i), spot.adjblur, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).bilateral, "Locallab", "Bilateral_" + std::to_string(i), spot.bilateral, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensiden, "Locallab", "Sensiden_" + std::to_string(i), spot.sensiden, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).detailthr, "Locallab", "Detailthr_" + std::to_string(i), spot.detailthr, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).locwavcurveden, "Locallab", "LocwavCurveden_" + std::to_string(i), spot.locwavcurveden, keyFile);
}
// Log encoding
if ((!pedited || pedited->locallab.spots.at(i).visilog) && spot.visilog) {
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).explog, "Locallab", "Explog_" + std::to_string(i), spot.explog, keyFile);
@ -6102,6 +6092,20 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "BlurMethod_" + std::to_string(i), pedited, spot.blurMethod, spotEdited.blurMethod);
assignFromKeyfile(keyFile, "Locallab", "MedMethod_" + std::to_string(i), pedited, spot.medMethod, spotEdited.medMethod);
assignFromKeyfile(keyFile, "Locallab", "activlum_" + std::to_string(i), pedited, spot.activlum, spotEdited.activlum);
assignFromKeyfile(keyFile, "Locallab", "noiselumf_" + std::to_string(i), pedited, spot.noiselumf, spotEdited.noiselumf);
assignFromKeyfile(keyFile, "Locallab", "noiselumf0_" + std::to_string(i), pedited, spot.noiselumf0, spotEdited.noiselumf0);
assignFromKeyfile(keyFile, "Locallab", "noiselumf2_" + std::to_string(i), pedited, spot.noiselumf2, spotEdited.noiselumf2);
assignFromKeyfile(keyFile, "Locallab", "noiselumc_" + std::to_string(i), pedited, spot.noiselumc, spotEdited.noiselumc);
assignFromKeyfile(keyFile, "Locallab", "noiselumdetail_" + std::to_string(i), pedited, spot.noiselumdetail, spotEdited.noiselumdetail);
assignFromKeyfile(keyFile, "Locallab", "noiselequal_" + std::to_string(i), pedited, spot.noiselequal, spotEdited.noiselequal);
assignFromKeyfile(keyFile, "Locallab", "noisechrof_" + std::to_string(i), pedited, spot.noisechrof, spotEdited.noisechrof);
assignFromKeyfile(keyFile, "Locallab", "noisechroc_" + std::to_string(i), pedited, spot.noisechroc, spotEdited.noisechroc);
assignFromKeyfile(keyFile, "Locallab", "noisechrodetail_" + std::to_string(i), pedited, spot.noisechrodetail, spotEdited.noisechrodetail);
assignFromKeyfile(keyFile, "Locallab", "Adjblur_" + std::to_string(i), pedited, spot.adjblur, spotEdited.adjblur);
assignFromKeyfile(keyFile, "Locallab", "Bilateral_" + std::to_string(i), pedited, spot.bilateral, spotEdited.bilateral);
assignFromKeyfile(keyFile, "Locallab", "Sensiden_" + std::to_string(i), pedited, spot.sensiden, spotEdited.sensiden);
assignFromKeyfile(keyFile, "Locallab", "Detailthr_" + std::to_string(i), pedited, spot.detailthr, spotEdited.detailthr);
assignFromKeyfile(keyFile, "Locallab", "LocwavCurveden_" + std::to_string(i), pedited, spot.locwavcurveden, spotEdited.locwavcurveden);
assignFromKeyfile(keyFile, "Locallab", "CCmaskblCurve_" + std::to_string(i), pedited, spot.CCmaskblcurve, spotEdited.CCmaskblcurve);
assignFromKeyfile(keyFile, "Locallab", "LLmaskblCurve_" + std::to_string(i), pedited, spot.LLmaskblcurve, spotEdited.LLmaskblcurve);
assignFromKeyfile(keyFile, "Locallab", "HHmaskblCurve_" + std::to_string(i), pedited, spot.HHmaskblcurve, spotEdited.HHmaskblcurve);
@ -6266,8 +6270,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "localedgMethod_" + std::to_string(i), pedited, spot.localedgMethod, spotEdited.localedgMethod);
assignFromKeyfile(keyFile, "Locallab", "localneiMethod_" + std::to_string(i), pedited, spot.localneiMethod, spotEdited.localneiMethod);
assignFromKeyfile(keyFile, "Locallab", "LocwavCurve_" + std::to_string(i), pedited, spot.locwavcurve, spotEdited.locwavcurve);
assignFromKeyfile(keyFile, "Locallab", "LoclevwavCurve_" + std::to_string(i), pedited, spot.loclevwavcurve, spotEdited.loclevwavcurve);
assignFromKeyfile(keyFile, "Locallab", "LocconwavCurve_" + std::to_string(i), pedited, spot.locconwavcurve, spotEdited.locconwavcurve);
assignFromKeyfile(keyFile, "Locallab", "LoccompwavCurve_" + std::to_string(i), pedited, spot.loccompwavcurve, spotEdited.loccompwavcurve);
@ -6322,27 +6324,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Slomaskcb_" + std::to_string(i), pedited, spot.slomaskcb, spotEdited.slomaskcb);
assignFromKeyfile(keyFile, "Locallab", "Lapmaskcb_" + std::to_string(i), pedited, spot.lapmaskcb, spotEdited.lapmaskcb);
assignFromKeyfile(keyFile, "Locallab", "LmaskcbCurve_" + std::to_string(i), pedited, spot.Lmaskcbcurve, spotEdited.Lmaskcbcurve);
// Denoise
spot.visidenoi = assignFromKeyfile(keyFile, "Locallab", "Expdenoi_" + std::to_string(i), pedited, spot.expdenoi, spotEdited.expdenoi);
if (spot.visidenoi) {
spotEdited.visidenoi = true;
}
assignFromKeyfile(keyFile, "Locallab", "noiselumf_" + std::to_string(i), pedited, spot.noiselumf, spotEdited.noiselumf);
assignFromKeyfile(keyFile, "Locallab", "noiselumf0_" + std::to_string(i), pedited, spot.noiselumf0, spotEdited.noiselumf0);
assignFromKeyfile(keyFile, "Locallab", "noiselumf2_" + std::to_string(i), pedited, spot.noiselumf2, spotEdited.noiselumf2);
assignFromKeyfile(keyFile, "Locallab", "noiselumc_" + std::to_string(i), pedited, spot.noiselumc, spotEdited.noiselumc);
assignFromKeyfile(keyFile, "Locallab", "noiselumdetail_" + std::to_string(i), pedited, spot.noiselumdetail, spotEdited.noiselumdetail);
assignFromKeyfile(keyFile, "Locallab", "noiselequal_" + std::to_string(i), pedited, spot.noiselequal, spotEdited.noiselequal);
assignFromKeyfile(keyFile, "Locallab", "noisechrof_" + std::to_string(i), pedited, spot.noisechrof, spotEdited.noisechrof);
assignFromKeyfile(keyFile, "Locallab", "noisechroc_" + std::to_string(i), pedited, spot.noisechroc, spotEdited.noisechroc);
assignFromKeyfile(keyFile, "Locallab", "noisechrodetail_" + std::to_string(i), pedited, spot.noisechrodetail, spotEdited.noisechrodetail);
assignFromKeyfile(keyFile, "Locallab", "Adjblur_" + std::to_string(i), pedited, spot.adjblur, spotEdited.adjblur);
assignFromKeyfile(keyFile, "Locallab", "Bilateral_" + std::to_string(i), pedited, spot.bilateral, spotEdited.bilateral);
assignFromKeyfile(keyFile, "Locallab", "Sensiden_" + std::to_string(i), pedited, spot.sensiden, spotEdited.sensiden);
assignFromKeyfile(keyFile, "Locallab", "Detailthr_" + std::to_string(i), pedited, spot.detailthr, spotEdited.detailthr);
assignFromKeyfile(keyFile, "Locallab", "LocwavCurveden_" + std::to_string(i), pedited, spot.locwavcurveden, spotEdited.locwavcurveden);
// Log encoding
spot.visilog = assignFromKeyfile(keyFile, "Locallab", "Explog_" + std::to_string(i), pedited, spot.explog, spotEdited.explog);

View File

@ -1179,6 +1179,20 @@ struct LocallabParams {
Glib::ustring blurMethod; // norm, inv
Glib::ustring medMethod; // none, 33, 55, 77, 99
bool activlum;
double noiselumf;
double noiselumf0;
double noiselumf2;
double noiselumc;
double noiselumdetail;
int noiselequal;
double noisechrof;
double noisechroc;
double noisechrodetail;
int adjblur;
int bilateral;
int sensiden;
int detailthr;
std::vector<double> locwavcurveden;
std::vector<double> CCmaskblcurve;
std::vector<double> LLmaskblcurve;
std::vector<double> HHmaskblcurve;
@ -1354,23 +1368,6 @@ struct LocallabParams {
double slomaskcb;
double lapmaskcb;
std::vector<double> Lmaskcbcurve;
// Denoise
bool visidenoi;
bool expdenoi;
double noiselumf;
double noiselumf0;
double noiselumf2;
double noiselumc;
double noiselumdetail;
int noiselequal;
double noisechrof;
double noisechroc;
double noisechrodetail;
int adjblur;
int bilateral;
int sensiden;
int detailthr;
std::vector<double> locwavcurveden;
// Log encoding
bool visilog;
bool explog;

View File

@ -160,7 +160,6 @@ Locallab::Locallab():
expsharp(Gtk::manage(new LocallabSharp())),
expcontrast(Gtk::manage(new LocallabContrast())),
expcbdl(Gtk::manage(new LocallabCBDL())),
expdenoi(Gtk::manage(new LocallabDenoise())),
explog(Gtk::manage(new LocallabLog())),
// Other widgets
@ -196,7 +195,6 @@ Locallab::Locallab():
addTool(toolpanel, expsharp);
addTool(toolpanel, expcontrast);
addTool(toolpanel, expcbdl);
addTool(toolpanel, expdenoi);
addTool(toolpanel, explog);
panel->pack_start(*toolpanel, false, false);

View File

@ -113,7 +113,6 @@ private:
LocallabSharp* const expsharp;
LocallabContrast* const expcontrast;
LocallabCBDL* const expcbdl;
LocallabDenoise* const expdenoi;
LocallabLog* const explog;
std::vector<LocallabTool*> locallabTools;

View File

@ -30,6 +30,9 @@
#define MINRAD 1.5
#define MAXRAD 10000
#define CENTERRAD 100
#define MINCHRO 0.
#define MAXCHRO 150.
#define MAXCHROCC 100.
using namespace rtengine;
using namespace procparams;
@ -5126,7 +5129,7 @@ void LocallabSoft::updateSoftGUI()
LocallabBlur::LocallabBlur():
LocallabTool(this, M("TP_LOCALLAB_BLUR_TOOLNAME"), M("TP_LOCALLAB_BLUFR"), true),
// Blur & Noise specific widgets
// Blur, Noise & Denoise specific widgets
blMethod(Gtk::manage(new MyComboBoxText())),
fftwbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTWBLUR")))),
radius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADIUS"), MINRAD, MAXRAD, 0.1, 1.5, nullptr, nullptr, &blurSlider2radius, &blurRadius2Slider))),
@ -5144,6 +5147,21 @@ LocallabBlur::LocallabBlur():
blurMethod(Gtk::manage(new MyComboBoxText())),
chroMethod(Gtk::manage(new MyComboBoxText())),
activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))),
LocalcurveEditorwavden(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVDEN"))),
wavshapeden(static_cast<FlatCurveEditor*>(LocalcurveEditorwavden->addCurve(CT_Flat, "", nullptr, false, false))),
noiselumf0(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINEZERO"), MINCHRO, MAXCHRO, 0.01, 0.))),
noiselumf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINE"), MINCHRO, MAXCHRO, 0.01, 0.))),
noiselumf2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINETWO"), MINCHRO, MAXCHRO, 0.01, 0.))),
noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),
noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0., 100., 0.01, 0.))),
noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))),
noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 0.01, 0.))),
noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),
noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0., 100., 0.01, 0.))),
detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 0))),
adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-red-small.png"))))),
bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))),
sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIDEN"), 0, 100, 1, 20))),
expmaskbl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWPLUS")))),
showmaskblMethod(Gtk::manage(new MyComboBoxText())),
enablMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
@ -5172,10 +5190,8 @@ LocallabBlur::LocallabBlur():
const bool showtooltip = options.showtooltip;
const int complexsoft = options.complexity;
// Parameter Blur & Noise specific widgets
if (showtooltip) {
exp->set_tooltip_markup(M("TP_LOCALLAB_BLUMETHOD_TOOLTIP"));
}
// Parameter Blur, Noise & Denoise specific widgets
blMethod->append(M("TP_LOCALLAB_BLUR"));
blMethod->append(M("TP_LOCALLAB_BLMED"));
@ -5242,6 +5258,51 @@ LocallabBlur::LocallabBlur():
activlumConn = activlum->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::activlumChanged));
LocalcurveEditorwavden->setCurveListener(this);
wavshapeden->setIdentityValue(0.);
wavshapeden->setResetCurve(FlatCurveType(defSpot.locwavcurveden.at(0)), defSpot.locwavcurveden);
if (showtooltip) {
wavshapeden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
}
LocalcurveEditorwavden->curveListComplete();
noiselumf0->setAdjusterListener(this);
noiselumf->setAdjusterListener(this);
noiselumf2->setAdjusterListener(this);
if (showtooltip) {
noiselumc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP"));
}
noiselumc->setAdjusterListener(this);
noiselumdetail->setAdjusterListener(this);
noiselequal->setAdjusterListener(this);
noisechrof->setAdjusterListener(this);
if (showtooltip) {
noisechroc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP"));
}
noisechroc->setAdjusterListener(this);
noisechrodetail->setAdjusterListener(this);
detailthr->setAdjusterListener(this);
adjblur->setAdjusterListener(this);
bilateral->setAdjusterListener(this);
sensiden->setAdjusterListener(this);
setExpandAlignProperties(expmaskbl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
if (showtooltip) {
@ -5350,30 +5411,70 @@ LocallabBlur::LocallabBlur():
csThresholdblur->setAdjusterListener(this);
// Add Blur & Noise specific widgets to GUI
pack_start(*blMethod);
// Add Blur, Noise & Denoise specific widgets to GUI
MyExpander* const expblnoise = Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_BLNOI_EXP")));
setExpandAlignProperties(expblnoise, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
if (complexsoft < 2) {
pack_start(*fftwbl, Gtk::PACK_SHRINK, 0);
if (showtooltip) {
expblnoise->set_tooltip_markup(M("TP_LOCALLAB_BLUMETHOD_TOOLTIP"));
}
pack_start(*radius);
pack_start(*strength);
expblnoise->set_expanded(false);
ToolParamBlock* const blnoisebox = Gtk::manage(new ToolParamBlock());
blnoisebox->pack_start(*blMethod);
if (complexsoft < 2) {
blnoisebox->pack_start(*fftwbl, Gtk::PACK_SHRINK, 0);
}
blnoisebox->pack_start(*radius);
blnoisebox->pack_start(*strength);
ToolParamBlock* const grainBox = Gtk::manage(new ToolParamBlock());
grainBox->pack_start(*isogr);
grainBox->pack_start(*strengr);
grainBox->pack_start(*scalegr);
grainFrame->add(*grainBox);
pack_start(*grainFrame);
pack_start(*medMethod);
pack_start(*itera);
pack_start(*guidbl);
pack_start(*strbl);
pack_start(*epsbl);
pack_start(*sensibn);
pack_start(*blurMethod);
pack_start(*chroMethod);
// pack_start(*activlum);
blnoisebox->pack_start(*grainFrame);
blnoisebox->pack_start(*medMethod);
blnoisebox->pack_start(*itera);
blnoisebox->pack_start(*guidbl);
blnoisebox->pack_start(*strbl);
blnoisebox->pack_start(*epsbl);
blnoisebox->pack_start(*sensibn);
blnoisebox->pack_start(*blurMethod);
blnoisebox->pack_start(*chroMethod);
// blnoisebox->pack_start(*activlum);
expblnoise->add(*blnoisebox, false);
pack_start(*expblnoise);
MyExpander* const expdenoise = Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI_EXP")));
setExpandAlignProperties(expdenoise, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
if (showtooltip) {
expdenoise->set_tooltip_markup(M("TP_LOCALLAB_DENOI_TOOLTIP"));
}
expdenoise->set_expanded(false);
ToolParamBlock* const denoisebox = Gtk::manage(new ToolParamBlock());
Gtk::Frame* const wavFrame = Gtk::manage(new Gtk::Frame());
ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock());
wavBox->pack_start(*LocalcurveEditorwavden, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
// wavBox->pack_start(*noiselumf0);
// wavBox->pack_start(*noiselumf);
// wavBox->pack_start(*noiselumf2);
// wavBox->pack_start(*noiselumc);
wavBox->pack_start(*noiselumdetail);
wavBox->pack_start(*noiselequal);
wavBox->pack_start(*noisechrof);
wavBox->pack_start(*noisechroc);
wavBox->pack_start(*noisechrodetail);
wavBox->pack_start(*detailthr);
wavBox->pack_start(*adjblur);
wavFrame->add(*wavBox);
denoisebox->pack_start(*wavFrame);
denoisebox->pack_start(*bilateral);
denoisebox->pack_start(*sensiden);
expdenoise->add(*denoisebox, false);
pack_start(*expdenoise);
ToolParamBlock* const maskblBox = Gtk::manage(new ToolParamBlock());
maskblBox->pack_start(*showmaskblMethod, Gtk::PACK_SHRINK, 4);
maskblBox->pack_start(*enablMask, Gtk::PACK_SHRINK, 0);
@ -5420,6 +5521,7 @@ LocallabBlur::~LocallabBlur()
delete maskblCurveEditorG;
delete mask2blCurveEditorG;
delete mask2blCurveEditorGwav;
delete LocalcurveEditorwavden;
}
void LocallabBlur::resetMaskView()
@ -5537,6 +5639,20 @@ void LocallabBlur::read(const rtengine::procparams::ProcParams* pp, const Params
}
activlum->set_active(pp->locallab.spots.at(index).activlum);
wavshapeden->setCurve(pp->locallab.spots.at(index).locwavcurveden);
noiselumf0->setValue(pp->locallab.spots.at(index).noiselumf0);
noiselumf->setValue(pp->locallab.spots.at(index).noiselumf);
noiselumf2->setValue(pp->locallab.spots.at(index).noiselumf2);
noiselumc->setValue(pp->locallab.spots.at(index).noiselumc);
noiselumdetail->setValue(pp->locallab.spots.at(index).noiselumdetail);
noiselequal->setValue((double)pp->locallab.spots.at(index).noiselequal);
noisechrof->setValue(pp->locallab.spots.at(index).noisechrof);
noisechroc->setValue(pp->locallab.spots.at(index).noisechroc);
noisechrodetail->setValue(pp->locallab.spots.at(index).noisechrodetail);
detailthr->setValue((double)pp->locallab.spots.at(index).detailthr);
adjblur->setValue((double)pp->locallab.spots.at(index).adjblur);
bilateral->setValue((double)pp->locallab.spots.at(index).bilateral);
sensiden->setValue((double)pp->locallab.spots.at(index).sensiden);
enablMask->set_active(pp->locallab.spots.at(index).enablMask);
CCmaskblshape->setCurve(pp->locallab.spots.at(index).CCmaskblcurve);
LLmaskblshape->setCurve(pp->locallab.spots.at(index).LLmaskblcurve);
@ -5646,6 +5762,20 @@ void LocallabBlur::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped
}
pp->locallab.spots.at(index).activlum = activlum->get_active();
pp->locallab.spots.at(index).locwavcurveden = wavshapeden->getCurve();
pp->locallab.spots.at(index).noiselumf0 = noiselumf0->getValue();
pp->locallab.spots.at(index).noiselumf = noiselumf->getValue();
pp->locallab.spots.at(index).noiselumf2 = noiselumf2->getValue();
pp->locallab.spots.at(index).noiselumc = noiselumc->getValue();
pp->locallab.spots.at(index).noiselumdetail = noiselumdetail->getValue();
pp->locallab.spots.at(index).noiselequal = noiselequal->getIntValue();
pp->locallab.spots.at(index).noisechrof = noisechrof->getValue();
pp->locallab.spots.at(index).noisechroc = noisechroc->getValue();
pp->locallab.spots.at(index).noisechrodetail = noisechrodetail->getValue();
pp->locallab.spots.at(index).detailthr = detailthr->getIntValue();
pp->locallab.spots.at(index).adjblur = adjblur->getIntValue();
pp->locallab.spots.at(index).bilateral = bilateral->getIntValue();
pp->locallab.spots.at(index).sensiden = sensiden->getIntValue();
pp->locallab.spots.at(index).enablMask = enablMask->get_active();
pp->locallab.spots.at(index).LLmaskblcurve = LLmaskblshape->getCurve();
pp->locallab.spots.at(index).CCmaskblcurve = CCmaskblshape->getCurve();
@ -5685,6 +5815,19 @@ void LocallabBlur::setDefaults(const rtengine::procparams::ProcParams* defParams
strbl->setDefault((double)defSpot.strbl);
epsbl->setDefault((double)defSpot.epsbl);
sensibn->setDefault((double)defSpot.sensibn);
noiselumf0->setDefault(defSpot.noiselumf0);
noiselumf->setDefault(defSpot.noiselumf);
noiselumf2->setDefault(defSpot.noiselumf2);
noiselumc->setDefault(defSpot.noiselumc);
noiselumdetail->setDefault(defSpot.noiselumdetail);
noiselequal->setDefault((double)defSpot.noiselequal);
noisechrof->setDefault(defSpot.noisechrof);
noisechroc->setDefault(defSpot.noisechroc);
noisechrodetail->setDefault(defSpot.noisechrodetail);
detailthr->setDefault((double)defSpot.detailthr);
adjblur->setDefault((double)defSpot.adjblur);
bilateral->setDefault((double)defSpot.bilateral);
sensiden->setDefault((double)defSpot.sensiden);
strumaskbl->setDefault(defSpot.strumaskbl);
blendmaskbl->setDefault((double)defSpot.blendmaskbl);
radmaskbl->setDefault(defSpot.radmaskbl);
@ -5772,6 +5915,97 @@ void LocallabBlur::adjusterChanged(Adjuster* a, double newval)
}
}
if (a == noiselumf0) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumf0,
noiselumf0->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumf) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumf,
noiselumf->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumf2) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumf2,
noiselumf2->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumc) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumc,
noiselumc->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumdetail) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumdetail,
noiselumdetail->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselequal) {
if (listener) {
listener->panelChanged(Evlocallabnoiselequal,
noiselequal->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noisechrof) {
if (listener) {
listener->panelChanged(Evlocallabnoisechrof,
noisechrof->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noisechroc) {
if (listener) {
listener->panelChanged(Evlocallabnoisechroc,
noisechroc->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noisechrodetail) {
if (listener) {
listener->panelChanged(Evlocallabnoisechrodetail,
noisechrodetail->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == detailthr) {
if (listener) {
listener->panelChanged(Evlocallabdetailthr,
detailthr->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == adjblur) {
if (listener) {
listener->panelChanged(Evlocallabadjblur,
adjblur->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == bilateral) {
if (listener) {
listener->panelChanged(Evlocallabbilateral,
bilateral->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == sensiden) {
if (listener) {
listener->panelChanged(Evlocallabsensiden,
sensiden->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == strumaskbl) {
if (listener) {
listener->panelChanged(Evlocallabstrumaskbl,
@ -5843,6 +6077,13 @@ void LocallabBlur::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int ne
void LocallabBlur::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == wavshapeden) {
if (listener) {
listener->panelChanged(EvlocallabwavCurveden,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (ce == CCmaskblshape) {
if (listener) {
listener->panelChanged(EvlocallabCCmaskblshape,

View File

@ -582,6 +582,21 @@ private:
MyComboBoxText* const blurMethod;
MyComboBoxText* const chroMethod;
Gtk::CheckButton* const activlum;
CurveEditorGroup* const LocalcurveEditorwavden;
FlatCurveEditor* const wavshapeden;
Adjuster* const noiselumf0;
Adjuster* const noiselumf;
Adjuster* const noiselumf2;
Adjuster* const noiselumc;
Adjuster* const noiselumdetail;
Adjuster* const noiselequal;
Adjuster* const noisechrof;
Adjuster* const noisechroc;
Adjuster* const noisechrodetail;
Adjuster* const detailthr;
Adjuster* const adjblur;
Adjuster* const bilateral;
Adjuster* const sensiden;
MyExpander* const expmaskbl;
MyComboBoxText* const showmaskblMethod;
Gtk::CheckButton* const enablMask;
@ -1048,42 +1063,6 @@ private:
void lumacontrastPlusPressed();
};
/* ==== LocallabDenoise ==== */
class LocallabDenoise:
public Gtk::VBox,
public LocallabTool
{
private:
CurveEditorGroup* const LocalcurveEditorwavden;
FlatCurveEditor* const wavshapeden;
Adjuster* const noiselumf0;
Adjuster* const noiselumf;
Adjuster* const noiselumf2;
Adjuster* const noiselumc;
Adjuster* const noiselumdetail;
Adjuster* const noiselequal;
Adjuster* const noisechrof;
Adjuster* const noisechroc;
Adjuster* const noisechrodetail;
Adjuster* const detailthr;
Adjuster* const adjblur;
Adjuster* const bilateral;
Adjuster* const sensiden;
public:
LocallabDenoise();
~LocallabDenoise();
void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
void adjusterChanged(Adjuster* a, double newval);
void curveChanged(CurveEditor* ce);
private:
void enabledChanged();
};
/* ==== LocallabLog ==== */
class LocallabLog:
public Gtk::VBox,

View File

@ -25,9 +25,6 @@
#include "locallab.h"
#include "rtimage.h"
#define MINCHRO 0.
#define MAXCHRO 150.
#define MAXCHROCC 100.
#define MINNEIGH 0.1
#define MAXNEIGH 1500
#define CENTERNEIGH 200
@ -4135,319 +4132,6 @@ void LocallabCBDL::lumacontrastPlusPressed()
adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used
}
/* ==== LocallabDenoise ==== */
LocallabDenoise::LocallabDenoise():
LocallabTool(this, M("TP_LOCALLAB_DEN_TOOLNAME"), M("TP_LOCALLAB_DENOIS"), true),
// Denoise specific widgets
LocalcurveEditorwavden(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVDEN"))),
wavshapeden(static_cast<FlatCurveEditor*>(LocalcurveEditorwavden->addCurve(CT_Flat, "", nullptr, false, false))),
noiselumf0(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINEZERO"), MINCHRO, MAXCHRO, 0.01, 0.))),
noiselumf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINE"), MINCHRO, MAXCHRO, 0.01, 0.))),
noiselumf2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINETWO"), MINCHRO, MAXCHRO, 0.01, 0.))),
noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),
noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0., 100., 0.01, 0.))),
noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))),
noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 0.01, 0.))),
noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),
noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0., 100., 0.01, 0.))),
detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 0))),
adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-red-small.png"))))),
bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))),
sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIDEN"), 0, 100, 1, 20)))
{
const bool showtooltip = options.showtooltip;
const LocallabParams::LocallabSpot defSpot;
// Parameter Denoise specific widgets
if (showtooltip) {
exp->set_tooltip_markup(M("TP_LOCALLAB_DENOI_TOOLTIP"));
}
LocalcurveEditorwavden->setCurveListener(this);
wavshapeden->setIdentityValue(0.);
wavshapeden->setResetCurve(FlatCurveType(defSpot.locwavcurveden.at(0)), defSpot.locwavcurveden);
if (showtooltip) {
wavshapeden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
}
LocalcurveEditorwavden->curveListComplete();
noiselumf0->setAdjusterListener(this);
noiselumf->setAdjusterListener(this);
noiselumf2->setAdjusterListener(this);
if (showtooltip) {
noiselumc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP"));
}
noiselumc->setAdjusterListener(this);
noiselumdetail->setAdjusterListener(this);
noiselequal->setAdjusterListener(this);
noisechrof->setAdjusterListener(this);
if (showtooltip) {
noisechroc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP"));
}
noisechroc->setAdjusterListener(this);
noisechrodetail->setAdjusterListener(this);
detailthr->setAdjusterListener(this);
adjblur->setAdjusterListener(this);
bilateral->setAdjusterListener(this);
sensiden->setAdjusterListener(this);
// Add Denoise specific widgets to GUI
Gtk::Frame* const wavFrame = Gtk::manage(new Gtk::Frame());
ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock());
wavBox->pack_start(*LocalcurveEditorwavden, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
// wavBox->pack_start(*noiselumf0);
// wavBox->pack_start(*noiselumf);
// wavBox->pack_start(*noiselumf2);
// wavBox->pack_start(*noiselumc);
wavBox->pack_start(*noiselumdetail);
wavBox->pack_start(*noiselequal);
wavBox->pack_start(*noisechrof);
wavBox->pack_start(*noisechroc);
wavBox->pack_start(*noisechrodetail);
wavBox->pack_start(*detailthr);
wavBox->pack_start(*adjblur);
wavFrame->add(*wavBox);
pack_start(*wavFrame);
pack_start(*bilateral);
pack_start(*sensiden);
}
LocallabDenoise::~LocallabDenoise()
{
delete LocalcurveEditorwavden;
}
void LocallabDenoise::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
spotName = pp->locallab.spots.at(index).name; // Update spot name according to selected spot
exp->set_visible(pp->locallab.spots.at(index).visidenoi);
exp->setEnabled(pp->locallab.spots.at(index).expdenoi);
wavshapeden->setCurve(pp->locallab.spots.at(index).locwavcurveden);
noiselumf0->setValue(pp->locallab.spots.at(index).noiselumf0);
noiselumf->setValue(pp->locallab.spots.at(index).noiselumf);
noiselumf2->setValue(pp->locallab.spots.at(index).noiselumf2);
noiselumc->setValue(pp->locallab.spots.at(index).noiselumc);
noiselumdetail->setValue(pp->locallab.spots.at(index).noiselumdetail);
noiselequal->setValue((double)pp->locallab.spots.at(index).noiselequal);
noisechrof->setValue(pp->locallab.spots.at(index).noisechrof);
noisechroc->setValue(pp->locallab.spots.at(index).noisechroc);
noisechrodetail->setValue(pp->locallab.spots.at(index).noisechrodetail);
detailthr->setValue((double)pp->locallab.spots.at(index).detailthr);
adjblur->setValue((double)pp->locallab.spots.at(index).adjblur);
bilateral->setValue((double)pp->locallab.spots.at(index).bilateral);
sensiden->setValue((double)pp->locallab.spots.at(index).sensiden);
}
// Enable all listeners
enableListener();
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabDenoise::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
pp->locallab.spots.at(index).expdenoi = exp->getEnabled();
pp->locallab.spots.at(index).visidenoi = exp->get_visible();
pp->locallab.spots.at(index).locwavcurveden = wavshapeden->getCurve();
pp->locallab.spots.at(index).noiselumf0 = noiselumf0->getValue();
pp->locallab.spots.at(index).noiselumf = noiselumf->getValue();
pp->locallab.spots.at(index).noiselumf2 = noiselumf2->getValue();
pp->locallab.spots.at(index).noiselumc = noiselumc->getValue();
pp->locallab.spots.at(index).noiselumdetail = noiselumdetail->getValue();
pp->locallab.spots.at(index).noiselequal = noiselequal->getIntValue();
pp->locallab.spots.at(index).noisechrof = noisechrof->getValue();
pp->locallab.spots.at(index).noisechroc = noisechroc->getValue();
pp->locallab.spots.at(index).noisechrodetail = noisechrodetail->getValue();
pp->locallab.spots.at(index).detailthr = detailthr->getIntValue();
pp->locallab.spots.at(index).adjblur = adjblur->getIntValue();
pp->locallab.spots.at(index).bilateral = bilateral->getIntValue();
pp->locallab.spots.at(index).sensiden = sensiden->getIntValue();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabDenoise::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot defSpot = defParams->locallab.spots.at(index);
// Set default values for adjuster widgets
noiselumf0->setDefault(defSpot.noiselumf0);
noiselumf->setDefault(defSpot.noiselumf);
noiselumf2->setDefault(defSpot.noiselumf2);
noiselumc->setDefault(defSpot.noiselumc);
noiselumdetail->setDefault(defSpot.noiselumdetail);
noiselequal->setDefault((double)defSpot.noiselequal);
noisechrof->setDefault(defSpot.noisechrof);
noisechroc->setDefault(defSpot.noisechroc);
noisechrodetail->setDefault(defSpot.noisechrodetail);
detailthr->setDefault((double)defSpot.detailthr);
adjblur->setDefault((double)defSpot.adjblur);
bilateral->setDefault((double)defSpot.bilateral);
sensiden->setDefault((double)defSpot.sensiden);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabDenoise::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->getEnabled()) {
if (a == noiselumf0) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumf0,
noiselumf0->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumf) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumf,
noiselumf->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumf2) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumf2,
noiselumf2->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumc) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumc,
noiselumc->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselumdetail) {
if (listener) {
listener->panelChanged(Evlocallabnoiselumdetail,
noiselumdetail->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noiselequal) {
if (listener) {
listener->panelChanged(Evlocallabnoiselequal,
noiselequal->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noisechrof) {
if (listener) {
listener->panelChanged(Evlocallabnoisechrof,
noisechrof->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noisechroc) {
if (listener) {
listener->panelChanged(Evlocallabnoisechroc,
noisechroc->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == noisechrodetail) {
if (listener) {
listener->panelChanged(Evlocallabnoisechrodetail,
noisechrodetail->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == detailthr) {
if (listener) {
listener->panelChanged(Evlocallabdetailthr,
detailthr->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == adjblur) {
if (listener) {
listener->panelChanged(Evlocallabadjblur,
adjblur->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == bilateral) {
if (listener) {
listener->panelChanged(Evlocallabbilateral,
bilateral->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (a == sensiden) {
if (listener) {
listener->panelChanged(Evlocallabsensiden,
sensiden->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
}
}
}
}
void LocallabDenoise::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == wavshapeden) {
if (listener) {
listener->panelChanged(EvlocallabwavCurveden,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
}
}
}
}
void LocallabDenoise::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenadenoi,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
} else {
listener->panelChanged(EvLocenadenoi,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
}
}
}
}
/* ==== LocallabLog ==== */
LocallabLog::LocallabLog():
LocallabTool(this, M("TP_LOCALLAB_LOG_TOOLNAME"), M("TP_LOCALLAB_LOG"), false),

View File

@ -1178,6 +1178,20 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).blurMethod = locallab.spots.at(j).blurMethod && pSpot.blurMethod == otherSpot.blurMethod;
locallab.spots.at(j).medMethod = locallab.spots.at(j).medMethod && pSpot.medMethod == otherSpot.medMethod;
locallab.spots.at(j).activlum = locallab.spots.at(j).activlum && pSpot.activlum == otherSpot.activlum;
locallab.spots.at(j).noiselumf = locallab.spots.at(j).noiselumf && pSpot.noiselumf == otherSpot.noiselumf;
locallab.spots.at(j).noiselumf0 = locallab.spots.at(j).noiselumf0 && pSpot.noiselumf0 == otherSpot.noiselumf0;
locallab.spots.at(j).noiselumf2 = locallab.spots.at(j).noiselumf2 && pSpot.noiselumf2 == otherSpot.noiselumf2;
locallab.spots.at(j).noiselumc = locallab.spots.at(j).noiselumc && pSpot.noiselumc == otherSpot.noiselumc;
locallab.spots.at(j).noiselumdetail = locallab.spots.at(j).noiselumdetail && pSpot.noiselumdetail == otherSpot.noiselumdetail;
locallab.spots.at(j).noiselequal = locallab.spots.at(j).noiselequal && pSpot.noiselequal == otherSpot.noiselequal;
locallab.spots.at(j).noisechrof = locallab.spots.at(j).noisechrof && pSpot.noisechrof == otherSpot.noisechrof;
locallab.spots.at(j).noisechroc = locallab.spots.at(j).noisechroc && pSpot.noisechroc == otherSpot.noisechroc;
locallab.spots.at(j).noisechrodetail = locallab.spots.at(j).noisechrodetail && pSpot.noisechrodetail == otherSpot.noisechrodetail;
locallab.spots.at(j).adjblur = locallab.spots.at(j).adjblur && pSpot.adjblur == otherSpot.adjblur;
locallab.spots.at(j).bilateral = locallab.spots.at(j).bilateral && pSpot.bilateral == otherSpot.bilateral;
locallab.spots.at(j).sensiden = locallab.spots.at(j).sensiden && pSpot.sensiden == otherSpot.sensiden;
locallab.spots.at(j).detailthr = locallab.spots.at(j).detailthr && pSpot.detailthr == otherSpot.detailthr;
locallab.spots.at(j).locwavcurveden = locallab.spots.at(j).locwavcurveden && pSpot.locwavcurveden == otherSpot.locwavcurveden;
locallab.spots.at(j).CCmaskblcurve = locallab.spots.at(j).CCmaskblcurve && pSpot.CCmaskblcurve == otherSpot.CCmaskblcurve;
locallab.spots.at(j).LLmaskblcurve = locallab.spots.at(j).LLmaskblcurve && pSpot.LLmaskblcurve == otherSpot.LLmaskblcurve;
locallab.spots.at(j).HHmaskblcurve = locallab.spots.at(j).HHmaskblcurve && pSpot.HHmaskblcurve == otherSpot.HHmaskblcurve;
@ -1357,23 +1371,6 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).slomaskcb = locallab.spots.at(j).slomaskcb && pSpot.slomaskcb == otherSpot.slomaskcb;
locallab.spots.at(j).lapmaskcb = locallab.spots.at(j).lapmaskcb && pSpot.lapmaskcb == otherSpot.lapmaskcb;
locallab.spots.at(j).Lmaskcbcurve = locallab.spots.at(j).Lmaskcbcurve && pSpot.Lmaskcbcurve == otherSpot.Lmaskcbcurve;
// Denoise
locallab.spots.at(j).visidenoi = locallab.spots.at(j).visidenoi && pSpot.visidenoi == otherSpot.visidenoi;
locallab.spots.at(j).expdenoi = locallab.spots.at(j).expdenoi && pSpot.expdenoi == otherSpot.expdenoi;
locallab.spots.at(j).noiselumf = locallab.spots.at(j).noiselumf && pSpot.noiselumf == otherSpot.noiselumf;
locallab.spots.at(j).noiselumf0 = locallab.spots.at(j).noiselumf0 && pSpot.noiselumf0 == otherSpot.noiselumf0;
locallab.spots.at(j).noiselumf2 = locallab.spots.at(j).noiselumf2 && pSpot.noiselumf2 == otherSpot.noiselumf2;
locallab.spots.at(j).noiselumc = locallab.spots.at(j).noiselumc && pSpot.noiselumc == otherSpot.noiselumc;
locallab.spots.at(j).noiselumdetail = locallab.spots.at(j).noiselumdetail && pSpot.noiselumdetail == otherSpot.noiselumdetail;
locallab.spots.at(j).noiselequal = locallab.spots.at(j).noiselequal && pSpot.noiselequal == otherSpot.noiselequal;
locallab.spots.at(j).noisechrof = locallab.spots.at(j).noisechrof && pSpot.noisechrof == otherSpot.noisechrof;
locallab.spots.at(j).noisechroc = locallab.spots.at(j).noisechroc && pSpot.noisechroc == otherSpot.noisechroc;
locallab.spots.at(j).noisechrodetail = locallab.spots.at(j).noisechrodetail && pSpot.noisechrodetail == otherSpot.noisechrodetail;
locallab.spots.at(j).adjblur = locallab.spots.at(j).adjblur && pSpot.adjblur == otherSpot.adjblur;
locallab.spots.at(j).bilateral = locallab.spots.at(j).bilateral && pSpot.bilateral == otherSpot.bilateral;
locallab.spots.at(j).sensiden = locallab.spots.at(j).sensiden && pSpot.sensiden == otherSpot.sensiden;
locallab.spots.at(j).detailthr = locallab.spots.at(j).detailthr && pSpot.detailthr == otherSpot.detailthr;
locallab.spots.at(j).locwavcurveden = locallab.spots.at(j).locwavcurveden && pSpot.locwavcurveden == otherSpot.locwavcurveden;
// Log encoding
locallab.spots.at(j).visilog = locallab.spots.at(j).visilog && pSpot.visilog == otherSpot.visilog;
locallab.spots.at(j).explog = locallab.spots.at(j).explog && pSpot.explog == otherSpot.explog;
@ -3705,6 +3702,62 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).activlum = mods.locallab.spots.at(i).activlum;
}
if (locallab.spots.at(i).noiselumf) {
toEdit.locallab.spots.at(i).noiselumf = mods.locallab.spots.at(i).noiselumf;
}
if (locallab.spots.at(i).noiselumf0) {
toEdit.locallab.spots.at(i).noiselumf0 = mods.locallab.spots.at(i).noiselumf0;
}
if (locallab.spots.at(i).noiselumf2) {
toEdit.locallab.spots.at(i).noiselumf2 = mods.locallab.spots.at(i).noiselumf2;
}
if (locallab.spots.at(i).noiselumc) {
toEdit.locallab.spots.at(i).noiselumc = mods.locallab.spots.at(i).noiselumc;
}
if (locallab.spots.at(i).noiselumdetail) {
toEdit.locallab.spots.at(i).noiselumdetail = mods.locallab.spots.at(i).noiselumdetail;
}
if (locallab.spots.at(i).noiselequal) {
toEdit.locallab.spots.at(i).noiselequal = mods.locallab.spots.at(i).noiselequal;
}
if (locallab.spots.at(i).noisechrof) {
toEdit.locallab.spots.at(i).noisechrof = mods.locallab.spots.at(i).noisechrof;
}
if (locallab.spots.at(i).noisechroc) {
toEdit.locallab.spots.at(i).noisechroc = mods.locallab.spots.at(i).noisechroc;
}
if (locallab.spots.at(i).noisechrodetail) {
toEdit.locallab.spots.at(i).noisechrodetail = mods.locallab.spots.at(i).noisechrodetail;
}
if (locallab.spots.at(i).adjblur) {
toEdit.locallab.spots.at(i).adjblur = mods.locallab.spots.at(i).adjblur;
}
if (locallab.spots.at(i).bilateral) {
toEdit.locallab.spots.at(i).bilateral = mods.locallab.spots.at(i).bilateral;
}
if (locallab.spots.at(i).sensiden) {
toEdit.locallab.spots.at(i).sensiden = mods.locallab.spots.at(i).sensiden;
}
if (locallab.spots.at(i).detailthr) {
toEdit.locallab.spots.at(i).detailthr = mods.locallab.spots.at(i).detailthr;
}
if (locallab.spots.at(i).locwavcurveden) {
toEdit.locallab.spots.at(i).locwavcurveden = mods.locallab.spots.at(i).locwavcurveden;
}
if (locallab.spots.at(i).CCmaskblcurve) {
toEdit.locallab.spots.at(i).CCmaskblcurve = mods.locallab.spots.at(i).CCmaskblcurve;
}
@ -4392,71 +4445,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).Lmaskcbcurve = mods.locallab.spots.at(i).Lmaskcbcurve;
}
// Denoise
if (locallab.spots.at(i).visidenoi) {
toEdit.locallab.spots.at(i).visidenoi = mods.locallab.spots.at(i).visidenoi;
}
if (locallab.spots.at(i).expdenoi) {
toEdit.locallab.spots.at(i).expdenoi = mods.locallab.spots.at(i).expdenoi;
}
if (locallab.spots.at(i).noiselumf) {
toEdit.locallab.spots.at(i).noiselumf = mods.locallab.spots.at(i).noiselumf;
}
if (locallab.spots.at(i).noiselumf0) {
toEdit.locallab.spots.at(i).noiselumf0 = mods.locallab.spots.at(i).noiselumf0;
}
if (locallab.spots.at(i).noiselumf2) {
toEdit.locallab.spots.at(i).noiselumf2 = mods.locallab.spots.at(i).noiselumf2;
}
if (locallab.spots.at(i).noiselumc) {
toEdit.locallab.spots.at(i).noiselumc = mods.locallab.spots.at(i).noiselumc;
}
if (locallab.spots.at(i).noiselumdetail) {
toEdit.locallab.spots.at(i).noiselumdetail = mods.locallab.spots.at(i).noiselumdetail;
}
if (locallab.spots.at(i).noiselequal) {
toEdit.locallab.spots.at(i).noiselequal = mods.locallab.spots.at(i).noiselequal;
}
if (locallab.spots.at(i).noisechrof) {
toEdit.locallab.spots.at(i).noisechrof = mods.locallab.spots.at(i).noisechrof;
}
if (locallab.spots.at(i).noisechroc) {
toEdit.locallab.spots.at(i).noisechroc = mods.locallab.spots.at(i).noisechroc;
}
if (locallab.spots.at(i).noisechrodetail) {
toEdit.locallab.spots.at(i).noisechrodetail = mods.locallab.spots.at(i).noisechrodetail;
}
if (locallab.spots.at(i).adjblur) {
toEdit.locallab.spots.at(i).adjblur = mods.locallab.spots.at(i).adjblur;
}
if (locallab.spots.at(i).bilateral) {
toEdit.locallab.spots.at(i).bilateral = mods.locallab.spots.at(i).bilateral;
}
if (locallab.spots.at(i).sensiden) {
toEdit.locallab.spots.at(i).sensiden = mods.locallab.spots.at(i).sensiden;
}
if (locallab.spots.at(i).detailthr) {
toEdit.locallab.spots.at(i).detailthr = mods.locallab.spots.at(i).detailthr;
}
if (locallab.spots.at(i).locwavcurveden) {
toEdit.locallab.spots.at(i).locwavcurveden = mods.locallab.spots.at(i).locwavcurveden;
}
// Log encoding
if (locallab.spots.at(i).visilog) {
toEdit.locallab.spots.at(i).visilog = mods.locallab.spots.at(i).visilog;
@ -5703,6 +5691,20 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
blurMethod(v),
medMethod(v),
activlum(v),
noiselumf(v),
noiselumf0(v),
noiselumf2(v),
noiselumc(v),
noiselumdetail(v),
noiselequal(v),
noisechrof(v),
noisechroc(v),
noisechrodetail(v),
adjblur(v),
bilateral(v),
sensiden(v),
detailthr(v),
locwavcurveden(v),
CCmaskblcurve(v),
LLmaskblcurve(v),
HHmaskblcurve(v),
@ -5878,23 +5880,6 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
slomaskcb(v),
lapmaskcb(v),
Lmaskcbcurve(v),
// Denoise
visidenoi(v),
expdenoi(v),
noiselumf(v),
noiselumf0(v),
noiselumf2(v),
noiselumc(v),
noiselumdetail(v),
noiselequal(v),
noisechrof(v),
noisechroc(v),
noisechrodetail(v),
adjblur(v),
bilateral(v),
sensiden(v),
detailthr(v),
locwavcurveden(v),
// Log encoding
visilog(v),
explog(v),
@ -6141,6 +6126,20 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
blurMethod = v;
medMethod = v;
activlum = v;
noiselumf = v;
noiselumf0 = v;
noiselumf2 = v;
noiselumc = v;
noiselumdetail = v;
noiselequal = v;
noisechrof = v;
noisechroc = v;
noisechrodetail = v;
adjblur = v;
bilateral = v;
sensiden = v;
detailthr = v;
locwavcurveden = v;
CCmaskblcurve = v;
LLmaskblcurve = v;
HHmaskblcurve = v;
@ -6320,23 +6319,6 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
slomaskcb = v;
lapmaskcb = v;
Lmaskcbcurve = v;
// Denoise
visidenoi = v;
expdenoi = v;
noiselumf = v;
noiselumf0 = v;
noiselumf2 = v;
noiselumc = v;
noiselumdetail = v;
noiselequal = v;
noisechrof = v;
noisechroc = v;
noisechrodetail = v;
adjblur = v;
bilateral = v;
sensiden = v;
detailthr = v;
locwavcurveden = v;
// Log encoding
visilog = v;
explog = v;

View File

@ -607,6 +607,20 @@ public:
bool blurMethod;
bool medMethod;
bool activlum;
bool noiselumf;
bool noiselumf0;
bool noiselumf2;
bool noiselumc;
bool noiselumdetail;
bool noiselequal;
bool noisechrof;
bool noisechroc;
bool noisechrodetail;
bool adjblur;
bool bilateral;
bool sensiden;
bool detailthr;
bool locwavcurveden;
bool CCmaskblcurve;
bool LLmaskblcurve;
bool HHmaskblcurve;
@ -782,23 +796,6 @@ public:
bool slomaskcb;
bool lapmaskcb;
bool Lmaskcbcurve;
// Denoise
bool visidenoi;
bool expdenoi;
bool noiselumf;
bool noiselumf0;
bool noiselumf2;
bool noiselumc;
bool noiselumdetail;
bool noiselequal;
bool noisechrof;
bool noisechroc;
bool noisechrodetail;
bool adjblur;
bool bilateral;
bool sensiden;
bool detailthr;
bool locwavcurveden;
// Log encoding
bool visilog;
bool explog;