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_DARKRETI;Darkness
TP_LOCALLAB_LIGHTRETI;Lightness TP_LOCALLAB_LIGHTRETI;Lightness
TP_LOCALLAB_THRESRETI;Threshold TP_LOCALLAB_THRESRETI;Threshold
TP_LOCALLAB_DENOIS;Denoise
TP_LOCALLAB_DEHAZ;Dehaze 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_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 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;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_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_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_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_BLUR;Gaussian Blur - Noise - Grain
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4 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_SH_TOOLNAME;Locallab Shadows Highlight
TP_LOCALLAB_VIB_TOOLNAME;Locallab Vibrance TP_LOCALLAB_VIB_TOOLNAME;Locallab Vibrance
TP_LOCALLAB_SOFT_TOOLNAME;Locallab Soft Light 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_TONE_TOOLNAME;Locallab Tone Mapping
TP_LOCALLAB_RET_TOOLNAME;Locallab Retinex TP_LOCALLAB_RET_TOOLNAME;Locallab Retinex
TP_LOCALLAB_SHARP_TOOLNAME;Locallab Sharpening TP_LOCALLAB_SHARP_TOOLNAME;Locallab Sharpening
TP_LOCALLAB_LC_TOOLNAME;Locallab Local Constrast TP_LOCALLAB_LC_TOOLNAME;Locallab Local Constrast
TP_LOCALLAB_CBDL_TOOLNAME;Locallab CBDL TP_LOCALLAB_CBDL_TOOLNAME;Locallab CBDL
TP_LOCALLAB_DEN_TOOLNAME;Locallab Denoise
TP_LOCALLAB_LOG_TOOLNAME;Locallab Encoding log TP_LOCALLAB_LOG_TOOLNAME;Locallab Encoding log
TP_LOCALLAB_WAMASKCOL;Ψ Mask Wavelet level TP_LOCALLAB_WAMASKCOL;Ψ Mask Wavelet level
TP_LOCALLAB_WARM;Warm - Cool & Color artifacts 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_WAVMED;Ψ Wavelet normal
TP_LOCALLAB_WEDIANHI;Median Hi TP_LOCALLAB_WEDIANHI;Median Hi
TP_LOCALLAB_WHITE_EV;White Ev TP_LOCALLAB_WHITE_EV;White Ev
TP_LOCALLAB_BLNOI_EXP;Blur & Noise
TP_LOCALLAB_DENOI_EXP;Denoise
TP_LOCAL_HEIGHT;Bottom TP_LOCAL_HEIGHT;Bottom
TP_LOCAL_HEIGHT_T;Top TP_LOCAL_HEIGHT_T;Top
TP_LOCAL_WIDTH;Right 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.shapmet = 1;
} }
lp.denoiena = locallab.spots.at(sp).expdenoi; lp.denoiena = locallab.spots.at(sp).expblur;
bool wavcurveden = false; bool wavcurveden = false;
float local_noiself = 0.f; float local_noiself = 0.f;

View File

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

View File

@ -2636,6 +2636,20 @@ LocallabParams::LocallabSpot::LocallabSpot() :
blurMethod("norm"), blurMethod("norm"),
medMethod("33"), medMethod("33"),
activlum(true), 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}, 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}, 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}, 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), slomaskcb(0.0),
lapmaskcb(0.0), lapmaskcb(0.0),
Lmaskcbcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.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 // Log encoding
visilog(false), visilog(false),
explog(false), explog(false),
@ -3081,6 +3078,20 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& blurMethod == other.blurMethod && blurMethod == other.blurMethod
&& medMethod == other.medMethod && medMethod == other.medMethod
&& activlum == other.activlum && 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 && CCmaskblcurve == other.CCmaskblcurve
&& LLmaskblcurve == other.LLmaskblcurve && LLmaskblcurve == other.LLmaskblcurve
&& HHmaskblcurve == other.HHmaskblcurve && HHmaskblcurve == other.HHmaskblcurve
@ -3265,23 +3276,6 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& slomaskcb == other.slomaskcb && slomaskcb == other.slomaskcb
&& lapmaskcb == other.lapmaskcb && lapmaskcb == other.lapmaskcb
&& Lmaskcbcurve == other.Lmaskcbcurve && 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 // Log encoding
&& visilog == other.visilog && visilog == other.visilog
&& explog == other.explog && 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).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).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).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).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).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); 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).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); 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 // Log encoding
if ((!pedited || pedited->locallab.spots.at(i).visilog) && spot.visilog) { 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); 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", "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", "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", "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", "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", "LLmaskblCurve_" + std::to_string(i), pedited, spot.LLmaskblcurve, spotEdited.LLmaskblcurve);
assignFromKeyfile(keyFile, "Locallab", "HHmaskblCurve_" + std::to_string(i), pedited, spot.HHmaskblcurve, spotEdited.HHmaskblcurve); 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", "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", "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", "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", "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", "LocconwavCurve_" + std::to_string(i), pedited, spot.locconwavcurve, spotEdited.locconwavcurve);
assignFromKeyfile(keyFile, "Locallab", "LoccompwavCurve_" + std::to_string(i), pedited, spot.loccompwavcurve, spotEdited.loccompwavcurve); 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", "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", "Lapmaskcb_" + std::to_string(i), pedited, spot.lapmaskcb, spotEdited.lapmaskcb);
assignFromKeyfile(keyFile, "Locallab", "LmaskcbCurve_" + std::to_string(i), pedited, spot.Lmaskcbcurve, spotEdited.Lmaskcbcurve); 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 // Log encoding
spot.visilog = assignFromKeyfile(keyFile, "Locallab", "Explog_" + std::to_string(i), pedited, spot.explog, spotEdited.explog); 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 blurMethod; // norm, inv
Glib::ustring medMethod; // none, 33, 55, 77, 99 Glib::ustring medMethod; // none, 33, 55, 77, 99
bool activlum; 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> CCmaskblcurve;
std::vector<double> LLmaskblcurve; std::vector<double> LLmaskblcurve;
std::vector<double> HHmaskblcurve; std::vector<double> HHmaskblcurve;
@ -1354,23 +1368,6 @@ struct LocallabParams {
double slomaskcb; double slomaskcb;
double lapmaskcb; double lapmaskcb;
std::vector<double> Lmaskcbcurve; 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 // Log encoding
bool visilog; bool visilog;
bool explog; bool explog;

View File

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

View File

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

View File

@ -30,6 +30,9 @@
#define MINRAD 1.5 #define MINRAD 1.5
#define MAXRAD 10000 #define MAXRAD 10000
#define CENTERRAD 100 #define CENTERRAD 100
#define MINCHRO 0.
#define MAXCHRO 150.
#define MAXCHROCC 100.
using namespace rtengine; using namespace rtengine;
using namespace procparams; using namespace procparams;
@ -5126,7 +5129,7 @@ void LocallabSoft::updateSoftGUI()
LocallabBlur::LocallabBlur(): LocallabBlur::LocallabBlur():
LocallabTool(this, M("TP_LOCALLAB_BLUR_TOOLNAME"), M("TP_LOCALLAB_BLUFR"), true), 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())), blMethod(Gtk::manage(new MyComboBoxText())),
fftwbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTWBLUR")))), 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))), 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())), blurMethod(Gtk::manage(new MyComboBoxText())),
chroMethod(Gtk::manage(new MyComboBoxText())), chroMethod(Gtk::manage(new MyComboBoxText())),
activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))), 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")))), expmaskbl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWPLUS")))),
showmaskblMethod(Gtk::manage(new MyComboBoxText())), showmaskblMethod(Gtk::manage(new MyComboBoxText())),
enablMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enablMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
@ -5172,10 +5190,8 @@ LocallabBlur::LocallabBlur():
const bool showtooltip = options.showtooltip; const bool showtooltip = options.showtooltip;
const int complexsoft = options.complexity; const int complexsoft = options.complexity;
// Parameter Blur & Noise specific widgets // Parameter Blur, Noise & Denoise specific widgets
if (showtooltip) {
exp->set_tooltip_markup(M("TP_LOCALLAB_BLUMETHOD_TOOLTIP"));
}
blMethod->append(M("TP_LOCALLAB_BLUR")); blMethod->append(M("TP_LOCALLAB_BLUR"));
blMethod->append(M("TP_LOCALLAB_BLMED")); blMethod->append(M("TP_LOCALLAB_BLMED"));
@ -5242,6 +5258,51 @@ LocallabBlur::LocallabBlur():
activlumConn = activlum->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::activlumChanged)); 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); setExpandAlignProperties(expmaskbl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
if (showtooltip) { if (showtooltip) {
@ -5350,30 +5411,70 @@ LocallabBlur::LocallabBlur():
csThresholdblur->setAdjusterListener(this); csThresholdblur->setAdjusterListener(this);
// Add Blur & Noise specific widgets to GUI // Add Blur, Noise & Denoise specific widgets to GUI
pack_start(*blMethod); 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) { if (showtooltip) {
pack_start(*fftwbl, Gtk::PACK_SHRINK, 0); expblnoise->set_tooltip_markup(M("TP_LOCALLAB_BLUMETHOD_TOOLTIP"));
} }
pack_start(*radius); expblnoise->set_expanded(false);
pack_start(*strength); 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()); ToolParamBlock* const grainBox = Gtk::manage(new ToolParamBlock());
grainBox->pack_start(*isogr); grainBox->pack_start(*isogr);
grainBox->pack_start(*strengr); grainBox->pack_start(*strengr);
grainBox->pack_start(*scalegr); grainBox->pack_start(*scalegr);
grainFrame->add(*grainBox); grainFrame->add(*grainBox);
pack_start(*grainFrame); blnoisebox->pack_start(*grainFrame);
pack_start(*medMethod); blnoisebox->pack_start(*medMethod);
pack_start(*itera); blnoisebox->pack_start(*itera);
pack_start(*guidbl); blnoisebox->pack_start(*guidbl);
pack_start(*strbl); blnoisebox->pack_start(*strbl);
pack_start(*epsbl); blnoisebox->pack_start(*epsbl);
pack_start(*sensibn); blnoisebox->pack_start(*sensibn);
pack_start(*blurMethod); blnoisebox->pack_start(*blurMethod);
pack_start(*chroMethod); blnoisebox->pack_start(*chroMethod);
// pack_start(*activlum); // 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()); ToolParamBlock* const maskblBox = Gtk::manage(new ToolParamBlock());
maskblBox->pack_start(*showmaskblMethod, Gtk::PACK_SHRINK, 4); maskblBox->pack_start(*showmaskblMethod, Gtk::PACK_SHRINK, 4);
maskblBox->pack_start(*enablMask, Gtk::PACK_SHRINK, 0); maskblBox->pack_start(*enablMask, Gtk::PACK_SHRINK, 0);
@ -5420,6 +5521,7 @@ LocallabBlur::~LocallabBlur()
delete maskblCurveEditorG; delete maskblCurveEditorG;
delete mask2blCurveEditorG; delete mask2blCurveEditorG;
delete mask2blCurveEditorGwav; delete mask2blCurveEditorGwav;
delete LocalcurveEditorwavden;
} }
void LocallabBlur::resetMaskView() 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); 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); enablMask->set_active(pp->locallab.spots.at(index).enablMask);
CCmaskblshape->setCurve(pp->locallab.spots.at(index).CCmaskblcurve); CCmaskblshape->setCurve(pp->locallab.spots.at(index).CCmaskblcurve);
LLmaskblshape->setCurve(pp->locallab.spots.at(index).LLmaskblcurve); 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).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).enablMask = enablMask->get_active();
pp->locallab.spots.at(index).LLmaskblcurve = LLmaskblshape->getCurve(); pp->locallab.spots.at(index).LLmaskblcurve = LLmaskblshape->getCurve();
pp->locallab.spots.at(index).CCmaskblcurve = CCmaskblshape->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); strbl->setDefault((double)defSpot.strbl);
epsbl->setDefault((double)defSpot.epsbl); epsbl->setDefault((double)defSpot.epsbl);
sensibn->setDefault((double)defSpot.sensibn); 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); strumaskbl->setDefault(defSpot.strumaskbl);
blendmaskbl->setDefault((double)defSpot.blendmaskbl); blendmaskbl->setDefault((double)defSpot.blendmaskbl);
radmaskbl->setDefault(defSpot.radmaskbl); 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 (a == strumaskbl) {
if (listener) { if (listener) {
listener->panelChanged(Evlocallabstrumaskbl, listener->panelChanged(Evlocallabstrumaskbl,
@ -5843,6 +6077,13 @@ void LocallabBlur::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int ne
void LocallabBlur::curveChanged(CurveEditor* ce) void LocallabBlur::curveChanged(CurveEditor* ce)
{ {
if (isLocActivated && exp->getEnabled()) { if (isLocActivated && exp->getEnabled()) {
if (ce == wavshapeden) {
if (listener) {
listener->panelChanged(EvlocallabwavCurveden,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(spotName) + ")");
}
}
if (ce == CCmaskblshape) { if (ce == CCmaskblshape) {
if (listener) { if (listener) {
listener->panelChanged(EvlocallabCCmaskblshape, listener->panelChanged(EvlocallabCCmaskblshape,

View File

@ -582,6 +582,21 @@ private:
MyComboBoxText* const blurMethod; MyComboBoxText* const blurMethod;
MyComboBoxText* const chroMethod; MyComboBoxText* const chroMethod;
Gtk::CheckButton* const activlum; 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; MyExpander* const expmaskbl;
MyComboBoxText* const showmaskblMethod; MyComboBoxText* const showmaskblMethod;
Gtk::CheckButton* const enablMask; Gtk::CheckButton* const enablMask;
@ -1048,42 +1063,6 @@ private:
void lumacontrastPlusPressed(); 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 ==== */ /* ==== LocallabLog ==== */
class LocallabLog: class LocallabLog:
public Gtk::VBox, public Gtk::VBox,

View File

@ -25,9 +25,6 @@
#include "locallab.h" #include "locallab.h"
#include "rtimage.h" #include "rtimage.h"
#define MINCHRO 0.
#define MAXCHRO 150.
#define MAXCHROCC 100.
#define MINNEIGH 0.1 #define MINNEIGH 0.1
#define MAXNEIGH 1500 #define MAXNEIGH 1500
#define CENTERNEIGH 200 #define CENTERNEIGH 200
@ -4135,319 +4132,6 @@ void LocallabCBDL::lumacontrastPlusPressed()
adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used 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::LocallabLog(): LocallabLog::LocallabLog():
LocallabTool(this, M("TP_LOCALLAB_LOG_TOOLNAME"), M("TP_LOCALLAB_LOG"), false), 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).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).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).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).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).LLmaskblcurve = locallab.spots.at(j).LLmaskblcurve && pSpot.LLmaskblcurve == otherSpot.LLmaskblcurve;
locallab.spots.at(j).HHmaskblcurve = locallab.spots.at(j).HHmaskblcurve && pSpot.HHmaskblcurve == otherSpot.HHmaskblcurve; 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).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).lapmaskcb = locallab.spots.at(j).lapmaskcb && pSpot.lapmaskcb == otherSpot.lapmaskcb;
locallab.spots.at(j).Lmaskcbcurve = locallab.spots.at(j).Lmaskcbcurve && pSpot.Lmaskcbcurve == otherSpot.Lmaskcbcurve; 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 // Log encoding
locallab.spots.at(j).visilog = locallab.spots.at(j).visilog && pSpot.visilog == otherSpot.visilog; 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; 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; 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) { if (locallab.spots.at(i).CCmaskblcurve) {
toEdit.locallab.spots.at(i).CCmaskblcurve = mods.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; 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 // Log encoding
if (locallab.spots.at(i).visilog) { if (locallab.spots.at(i).visilog) {
toEdit.locallab.spots.at(i).visilog = mods.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), blurMethod(v),
medMethod(v), medMethod(v),
activlum(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), CCmaskblcurve(v),
LLmaskblcurve(v), LLmaskblcurve(v),
HHmaskblcurve(v), HHmaskblcurve(v),
@ -5878,23 +5880,6 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
slomaskcb(v), slomaskcb(v),
lapmaskcb(v), lapmaskcb(v),
Lmaskcbcurve(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 // Log encoding
visilog(v), visilog(v),
explog(v), explog(v),
@ -6141,6 +6126,20 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
blurMethod = v; blurMethod = v;
medMethod = v; medMethod = v;
activlum = 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; CCmaskblcurve = v;
LLmaskblcurve = v; LLmaskblcurve = v;
HHmaskblcurve = v; HHmaskblcurve = v;
@ -6320,23 +6319,6 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
slomaskcb = v; slomaskcb = v;
lapmaskcb = v; lapmaskcb = v;
Lmaskcbcurve = 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 // Log encoding
visilog = v; visilog = v;
explog = v; explog = v;

View File

@ -607,6 +607,20 @@ public:
bool blurMethod; bool blurMethod;
bool medMethod; bool medMethod;
bool activlum; 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 CCmaskblcurve;
bool LLmaskblcurve; bool LLmaskblcurve;
bool HHmaskblcurve; bool HHmaskblcurve;
@ -782,23 +796,6 @@ public:
bool slomaskcb; bool slomaskcb;
bool lapmaskcb; bool lapmaskcb;
bool Lmaskcbcurve; 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 // Log encoding
bool visilog; bool visilog;
bool explog; bool explog;