add bilateral to local denoise and enhanced GUI
This commit is contained in:
parent
42d0f550c9
commit
9713604b12
@ -843,6 +843,7 @@ HISTORY_MSG_594;Local - Noise chro detail
|
|||||||
HISTORY_MSG_595;Local - Noise Scope
|
HISTORY_MSG_595;Local - Noise Scope
|
||||||
HISTORY_MSG_597;Local L*a*b*
|
HISTORY_MSG_597;Local L*a*b*
|
||||||
HISTORY_MSG_598;Local - Bottom
|
HISTORY_MSG_598;Local - Bottom
|
||||||
|
HISTORY_MSG_599;Local - Noise bilateral
|
||||||
HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
|
HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
|
||||||
HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness
|
HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness
|
||||||
HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast
|
HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast
|
||||||
@ -1826,6 +1827,7 @@ TP_LOCALLAB_ADJBLUR;Adjust and Blur
|
|||||||
TP_LOCALLAB_ARTIF;Reduce artifacts - Improve algoritm
|
TP_LOCALLAB_ARTIF;Reduce artifacts - Improve algoritm
|
||||||
TP_LOCALLAB_ARTIF_TOOLTIP;Only active for Color-light, Exposure, Retinex, Vibrance, ToneMapping, CBDL.
|
TP_LOCALLAB_ARTIF_TOOLTIP;Only active for Color-light, Exposure, Retinex, Vibrance, ToneMapping, CBDL.
|
||||||
TP_LOCALLAB_AVOID;Avoid color shift
|
TP_LOCALLAB_AVOID;Avoid color shift
|
||||||
|
TP_LOCALLAB_BILATERAL;Bilateral filter
|
||||||
TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct blur and noise with all settings.\nInverse - Inverse blur and noise without scope and whithout enhanced algorithm.\nSymmetric - inverse blur and noise with all settings. Be careful some results may be curious
|
TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct blur and noise with all settings.\nInverse - Inverse blur and noise without scope and whithout enhanced algorithm.\nSymmetric - inverse blur and noise with all settings. Be careful some results may be curious
|
||||||
TP_LOCALLAB_BLUFR;Blur & Noise
|
TP_LOCALLAB_BLUFR;Blur & Noise
|
||||||
TP_LOCALLAB_BLNORM;Normal
|
TP_LOCALLAB_BLNORM;Normal
|
||||||
|
@ -1205,6 +1205,7 @@ void Crop::update(int todo)
|
|||||||
params.locallab.expexpose = true;
|
params.locallab.expexpose = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
params.locallab.bilateral = parent->bilaterals[sp];
|
||||||
|
|
||||||
|
|
||||||
std::vector<double> cretie;
|
std::vector<double> cretie;
|
||||||
@ -1679,6 +1680,7 @@ void Crop::update(int todo)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parent->bilaterals[sp] = params.locallab.bilateral = parent->bilaterals[0];
|
||||||
|
|
||||||
std::vector<double> ccret;
|
std::vector<double> ccret;
|
||||||
|
|
||||||
|
@ -157,6 +157,7 @@ ImProcCoordinator::ImProcCoordinator()
|
|||||||
noiselumcs(500, -10000),
|
noiselumcs(500, -10000),
|
||||||
noiselumdetails(500, -10000),
|
noiselumdetails(500, -10000),
|
||||||
noisechrodetails(500, -10000),
|
noisechrodetails(500, -10000),
|
||||||
|
bilaterals(500, -10000),
|
||||||
sensidens(500, -10000),
|
sensidens(500, -10000),
|
||||||
noisechrofs(500, -10000),
|
noisechrofs(500, -10000),
|
||||||
noisechrocs(500, -10000),
|
noisechrocs(500, -10000),
|
||||||
@ -873,7 +874,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int maxdata = 99; // 90 10020 //88 10019//87 10018 //86 10017 //85 10016;// 82 10015//78;//73 for 10011
|
int maxdata = 100; //99 10021 // 90 10020 //88 10019//87 10018 //86 10017 //85 10016;// 82 10015//78;//73 for 10011
|
||||||
|
|
||||||
if (fic0) {
|
if (fic0) {
|
||||||
//find current version mip
|
//find current version mip
|
||||||
@ -917,7 +918,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
//initilize newues when first utilisation of Locallab. Prepare creation of Mip files
|
//initilize newues when first utilisation of Locallab. Prepare creation of Mip files
|
||||||
for (int sp = 1; sp < maxspot; sp++) { // spots default
|
for (int sp = 1; sp < maxspot; sp++) { // spots default
|
||||||
int t_sp = sp;
|
int t_sp = sp;
|
||||||
int t_mipversion = 10021;//new value for each change
|
int t_mipversion = 10022;//new value for each change
|
||||||
int t_circrad = 18;
|
int t_circrad = 18;
|
||||||
int t_locX = 250;
|
int t_locX = 250;
|
||||||
int t_locY = 250;
|
int t_locY = 250;
|
||||||
@ -1048,6 +1049,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
//10021
|
//10021
|
||||||
int t_expdenoi = 0;
|
int t_expdenoi = 0;
|
||||||
|
|
||||||
|
//10022
|
||||||
|
int t_bilateral = 0;
|
||||||
|
|
||||||
int t_expcolor = 0;
|
int t_expcolor = 0;
|
||||||
int t_expvibrance = 0;
|
int t_expvibrance = 0;
|
||||||
int t_expblur = 0;
|
int t_expblur = 0;
|
||||||
@ -1151,6 +1155,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
fic << "Warm=" << t_warm << '@' << endl;
|
fic << "Warm=" << t_warm << '@' << endl;
|
||||||
fic << "Noiselumdetail=" << t_noiselumdetail << '@' << endl;
|
fic << "Noiselumdetail=" << t_noiselumdetail << '@' << endl;
|
||||||
fic << "Noisechrodetail=" << t_noisechrodetail << '@' << endl;
|
fic << "Noisechrodetail=" << t_noisechrodetail << '@' << endl;
|
||||||
|
|
||||||
fic << "Sensiden=" << t_sensiden << '@' << endl;
|
fic << "Sensiden=" << t_sensiden << '@' << endl;
|
||||||
fic << "Expdenoi=" << t_expdenoi << '@' << endl;
|
fic << "Expdenoi=" << t_expdenoi << '@' << endl;
|
||||||
fic << "Expcolor=" << t_expcolor << '@' << endl;
|
fic << "Expcolor=" << t_expcolor << '@' << endl;
|
||||||
@ -1162,6 +1167,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
fic << "Expcbdl=" << t_expcbdl << '@' << endl;
|
fic << "Expcbdl=" << t_expcbdl << '@' << endl;
|
||||||
fic << "Expexpose=" << t_expexpose << '@' << endl;
|
fic << "Expexpose=" << t_expexpose << '@' << endl;
|
||||||
|
|
||||||
|
fic << "Bilateral=" << t_bilateral << '@' << endl;
|
||||||
|
|
||||||
fic << "curveReti=" << t_curvret << '@' << endl;
|
fic << "curveReti=" << t_curvret << '@' << endl;
|
||||||
fic << "curveLL=" << t_curvll << '@' << endl;
|
fic << "curveLL=" << t_curvll << '@' << endl;
|
||||||
fic << "curveLH=" << t_curvlh << '@' << endl;
|
fic << "curveLH=" << t_curvlh << '@' << endl;
|
||||||
@ -1471,6 +1478,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
dataspot[93][0] = expexposes[0] = 1;
|
dataspot[93][0] = expexposes[0] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dataspot[94][0] = bilaterals[0] = params.locallab.bilateral;
|
||||||
|
|
||||||
// for all curves work around - I do not know how to do with params curves...
|
// for all curves work around - I do not know how to do with params curves...
|
||||||
//curve Reti local
|
//curve Reti local
|
||||||
@ -1773,6 +1781,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
maxind = 84;
|
maxind = 84;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (versionmip == 10021) {
|
||||||
|
maxind = 92;
|
||||||
|
}
|
||||||
|
|
||||||
while (getline(fich, line)) {
|
while (getline(fich, line)) {
|
||||||
spotline = line;
|
spotline = line;
|
||||||
std::size_t pos = spotline.find("=");
|
std::size_t pos = spotline.find("=");
|
||||||
@ -2026,7 +2038,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (versionmip <= 10021) {//
|
||||||
|
for (int sp = 1; sp < maxspot; sp++) { // spots default
|
||||||
|
dataspot[94][sp] = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//here we change the number of spot
|
//here we change the number of spot
|
||||||
|
|
||||||
@ -2036,7 +2053,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
|
|
||||||
for (int sp = ns + 1 ; sp < maxspot; sp++) { // spots default
|
for (int sp = ns + 1 ; sp < maxspot; sp++) { // spots default
|
||||||
int t_sp = sp;
|
int t_sp = sp;
|
||||||
int t_mipversion = 10021;
|
int t_mipversion = 10022;
|
||||||
int t_circrad = 18;
|
int t_circrad = 18;
|
||||||
int t_locX = 250;
|
int t_locX = 250;
|
||||||
int t_locY = 250;
|
int t_locY = 250;
|
||||||
@ -2168,6 +2185,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
int t_expcbdl = 0;
|
int t_expcbdl = 0;
|
||||||
int t_expexpose = 0;
|
int t_expexpose = 0;
|
||||||
|
|
||||||
|
//10022
|
||||||
|
int t_bilateral = 0;
|
||||||
|
|
||||||
fic << "Mipversion=" << t_mipversion << '@' << endl;
|
fic << "Mipversion=" << t_mipversion << '@' << endl;
|
||||||
fic << "Spot=" << t_sp << '@' << endl;
|
fic << "Spot=" << t_sp << '@' << endl;
|
||||||
fic << "Circrad=" << t_circrad << '@' << endl;
|
fic << "Circrad=" << t_circrad << '@' << endl;
|
||||||
@ -2258,6 +2278,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
fic << "Warm=" << t_warm << '@' << endl;
|
fic << "Warm=" << t_warm << '@' << endl;
|
||||||
fic << "Noiselumdetail=" << t_noiselumdetail << '@' << endl;
|
fic << "Noiselumdetail=" << t_noiselumdetail << '@' << endl;
|
||||||
fic << "Noisechrodetail=" << t_noisechrodetail << '@' << endl;
|
fic << "Noisechrodetail=" << t_noisechrodetail << '@' << endl;
|
||||||
|
|
||||||
fic << "Sensiden=" << t_sensiden << '@' << endl;
|
fic << "Sensiden=" << t_sensiden << '@' << endl;
|
||||||
fic << "Expdenoi=" << t_expdenoi << '@' << endl;
|
fic << "Expdenoi=" << t_expdenoi << '@' << endl;
|
||||||
fic << "Expcolor=" << t_expcolor << '@' << endl;
|
fic << "Expcolor=" << t_expcolor << '@' << endl;
|
||||||
@ -2269,6 +2290,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
fic << "Expcbdl=" << t_expcbdl << '@' << endl;
|
fic << "Expcbdl=" << t_expcbdl << '@' << endl;
|
||||||
fic << "Expexpose=" << t_expexpose << '@' << endl;
|
fic << "Expexpose=" << t_expexpose << '@' << endl;
|
||||||
|
|
||||||
|
fic << "Bilateral=" << t_bilateral << '@' << endl;
|
||||||
|
|
||||||
fic << "curveReti=" << t_curvret << '@' << endl;
|
fic << "curveReti=" << t_curvret << '@' << endl;
|
||||||
fic << "curveLL=" << t_curvll << '@' << endl;
|
fic << "curveLL=" << t_curvll << '@' << endl;
|
||||||
fic << "curveLH=" << t_curvlh << '@' << endl;
|
fic << "curveLH=" << t_curvlh << '@' << endl;
|
||||||
@ -2694,6 +2717,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
params.locallab.expexpose = true;
|
params.locallab.expexpose = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
params.locallab.bilateral = bilaterals[sp] = dataspot[94][sp];
|
||||||
|
|
||||||
int *s_datc;
|
int *s_datc;
|
||||||
s_datc = new int[70];
|
s_datc = new int[70];
|
||||||
@ -3333,6 +3357,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
expexposes[sp] = 1;
|
expexposes[sp] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dataspot[94][sp] = bilaterals[sp] = params.locallab.bilateral = dataspot[94][0];
|
||||||
|
|
||||||
int *s_datc;
|
int *s_datc;
|
||||||
s_datc = new int[70];
|
s_datc = new int[70];
|
||||||
int siz;
|
int siz;
|
||||||
@ -3572,7 +3598,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
|
|
||||||
for (int spe = 1; spe < maxspot; spe++) {
|
for (int spe = 1; spe < maxspot; spe++) {
|
||||||
int t_sp = spe;
|
int t_sp = spe;
|
||||||
int t_mipversion = 10021;
|
int t_mipversion = 10022;
|
||||||
int t_circrad = dataspot[2][spe];
|
int t_circrad = dataspot[2][spe];
|
||||||
int t_locX = dataspot[3][spe];
|
int t_locX = dataspot[3][spe];
|
||||||
int t_locY = dataspot[4][spe];
|
int t_locY = dataspot[4][spe];
|
||||||
@ -3674,6 +3700,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
int t_expcbdl = dataspot[92][spe];
|
int t_expcbdl = dataspot[92][spe];
|
||||||
int t_expexpose = dataspot[93][spe];
|
int t_expexpose = dataspot[93][spe];
|
||||||
|
|
||||||
|
int t_bilateral = dataspot[94][spe];
|
||||||
|
|
||||||
int t_huerefblur = dataspot[maxdata - 5][spe];
|
int t_huerefblur = dataspot[maxdata - 5][spe];
|
||||||
int t_hueref = dataspot[maxdata - 4][spe];
|
int t_hueref = dataspot[maxdata - 4][spe];
|
||||||
int t_chromaref = dataspot[maxdata - 3][spe];
|
int t_chromaref = dataspot[maxdata - 3][spe];
|
||||||
@ -3793,6 +3821,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
|
|||||||
fou << "Expcbdl=" << t_expcbdl << '@' << endl;
|
fou << "Expcbdl=" << t_expcbdl << '@' << endl;
|
||||||
fou << "Expexpose=" << t_expexpose << '@' << endl;
|
fou << "Expexpose=" << t_expexpose << '@' << endl;
|
||||||
|
|
||||||
|
fou << "Bilateral=" << t_bilateral << '@' << endl;
|
||||||
|
|
||||||
fou << "huerefblur=" << t_huerefblur << '@' << endl;
|
fou << "huerefblur=" << t_huerefblur << '@' << endl;
|
||||||
fou << "hueref=" << t_hueref << '@' << endl;
|
fou << "hueref=" << t_hueref << '@' << endl;
|
||||||
fou << "chromaref=" << t_chromaref << '@' << endl;
|
fou << "chromaref=" << t_chromaref << '@' << endl;
|
||||||
|
@ -308,6 +308,7 @@ protected:
|
|||||||
LUTi noiselumcs;
|
LUTi noiselumcs;
|
||||||
LUTi noiselumdetails;
|
LUTi noiselumdetails;
|
||||||
LUTi noisechrodetails;
|
LUTi noisechrodetails;
|
||||||
|
LUTi bilaterals;
|
||||||
LUTi sensidens;
|
LUTi sensidens;
|
||||||
LUTi noisechrofs;
|
LUTi noisechrofs;
|
||||||
LUTi noisechrocs;
|
LUTi noisechrocs;
|
||||||
|
@ -318,6 +318,7 @@ public:
|
|||||||
//void DeNoise_Local(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy);
|
//void DeNoise_Local(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy);
|
||||||
// void ColorLight_Local(int call, LabImage * bufcolorig, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy);
|
// void ColorLight_Local(int call, LabImage * bufcolorig, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy);
|
||||||
void DeNoise_Local(int call, const struct local_params& lp, int levred, float hueplus, float huemoins, float hueref, float dhueden, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
|
void DeNoise_Local(int call, const struct local_params& lp, int levred, float hueplus, float huemoins, float hueref, float dhueden, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
|
||||||
|
void DeNoise_Local_imp(const struct local_params& lp, int levred, float hueplus, float huemoins, float hueref, float dhueden, LabImage* original, LabImage* transformed, LabImage* tmp1, int cx, int cy, int sk);
|
||||||
|
|
||||||
|
|
||||||
void fftw_denoise(int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D<float> *Lin, int numThreads, const struct local_params & lp, int chrom);
|
void fftw_denoise(int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D<float> *Lin, int numThreads, const struct local_params & lp, int chrom);
|
||||||
|
@ -145,6 +145,7 @@ struct local_params {
|
|||||||
float noiself;
|
float noiself;
|
||||||
float noiseldetail;
|
float noiseldetail;
|
||||||
float noisechrodetail;
|
float noisechrodetail;
|
||||||
|
float bilat;
|
||||||
float noiselc;
|
float noiselc;
|
||||||
float noisecf;
|
float noisecf;
|
||||||
float noisecc;
|
float noisecc;
|
||||||
@ -471,7 +472,7 @@ static void calcLocalParams(int oW, int oH, const LocallabParams& locallab, stru
|
|||||||
lp.noisecf = local_noisecf;
|
lp.noisecf = local_noisecf;
|
||||||
lp.noisecc = local_noisecc;
|
lp.noisecc = local_noisecc;
|
||||||
lp.sensden = local_sensiden;
|
lp.sensden = local_sensiden;
|
||||||
|
lp.bilat = locallab.bilateral;
|
||||||
|
|
||||||
lp.strengt = streng;
|
lp.strengt = streng;
|
||||||
lp.gamm = gam;
|
lp.gamm = gam;
|
||||||
@ -1864,6 +1865,229 @@ void ImProcFunctions::addGaNoise(LabImage *lab, LabImage *dst, const float mean,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImProcFunctions::DeNoise_Local_imp(const struct local_params& lp, int levred, float hueplus, float huemoins, float hueref, float dhueden, LabImage* original, LabImage* transformed, LabImage* tmp1, int cx, int cy, int sk)
|
||||||
|
{
|
||||||
|
// local denoise
|
||||||
|
//simple algo , perhaps we can improve as the others, but noise is here and not good for hue detection
|
||||||
|
// BENCHFUN
|
||||||
|
const float ach = (float)lp.trans / 100.f;
|
||||||
|
constexpr float delhu = 0.1f; //between 0.05 and 0.2
|
||||||
|
|
||||||
|
|
||||||
|
float factnoise1 = 1.f + (lp.noisecf) / 500.f;
|
||||||
|
float factnoise2 = 1.f + (lp.noisecc) / 500.f;
|
||||||
|
|
||||||
|
constexpr float apl = (-1.f) / delhu;
|
||||||
|
const float bpl = - apl * hueplus;
|
||||||
|
constexpr float amo = 1.f / delhu;
|
||||||
|
const float bmo = - amo * huemoins;
|
||||||
|
/*
|
||||||
|
constexpr float pb = 4.f;
|
||||||
|
constexpr float pa = (1.f - pb) / 40.f;
|
||||||
|
*/
|
||||||
|
int GW = transformed->W;
|
||||||
|
int GH = transformed->H;
|
||||||
|
|
||||||
|
LabImage *origblur = nullptr;
|
||||||
|
|
||||||
|
origblur = new LabImage(GW, GH);
|
||||||
|
|
||||||
|
float radius = 3.f / sk;
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
gaussianBlur(original->L, origblur->L, GW, GH, radius);
|
||||||
|
gaussianBlur(original->a, origblur->a, GW, GH, radius);
|
||||||
|
gaussianBlur(original->b, origblur->b, GW, GH, radius);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
const float ahu = 1.f / (2.8f * lp.sensden - 280.f);
|
||||||
|
const float bhu = 1.f - ahu * 2.8f * lp.sensden;
|
||||||
|
*/
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel if (multiThread)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#ifdef __SSE2__
|
||||||
|
float atan2Buffer[transformed->W] ALIGNED16;
|
||||||
|
float sqrtBuffer[transformed->W] ALIGNED16;
|
||||||
|
vfloat c327d68v = F2V(327.68f);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int y = 0; y < transformed->H; y++) {
|
||||||
|
const int loy = cy + y;
|
||||||
|
|
||||||
|
const bool isZone0 = loy > lp.yc + lp.ly || loy < lp.yc - lp.lyT; // whole line is zone 0 => we can skip a lot of processing
|
||||||
|
|
||||||
|
if (isZone0) { // outside selection and outside transition zone => no effect, keep original values
|
||||||
|
for (int x = 0; x < transformed->W; x++) {
|
||||||
|
transformed->L[y][x] = original->L[y][x];
|
||||||
|
transformed->a[y][x] = original->a[y][x];
|
||||||
|
transformed->b[y][x] = original->b[y][x];
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __SSE2__
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (; i < transformed->W - 3; i += 4) {
|
||||||
|
vfloat av = LVFU(origblur->a[y][i]);
|
||||||
|
vfloat bv = LVFU(origblur->b[y][i]);
|
||||||
|
STVF(atan2Buffer[i], xatan2f(bv, av));
|
||||||
|
STVF(sqrtBuffer[i], _mm_sqrt_ps(SQRV(bv) + SQRV(av)) / c327d68v);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < transformed->W; i++) {
|
||||||
|
atan2Buffer[i] = xatan2f(origblur->b[y][i], origblur->a[y][i]);
|
||||||
|
sqrtBuffer[i] = sqrt(SQR(origblur->b[y][i]) + SQR(origblur->a[y][i])) / 327.68f;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int x = 0, lox = cx + x; x < transformed->W; x++, lox++) {
|
||||||
|
int zone = 0;
|
||||||
|
// int lox = cx + x;
|
||||||
|
int begx = int (lp.xc - lp.lxL);
|
||||||
|
int begy = int (lp.yc - lp.lyT);
|
||||||
|
|
||||||
|
float localFactor = 1.f;
|
||||||
|
calcTransition(lox, loy, ach, lp, zone, localFactor);
|
||||||
|
|
||||||
|
if (zone == 0) { // outside selection and outside transition zone => no effect, keep original values
|
||||||
|
transformed->L[y][x] = original->L[y][x];
|
||||||
|
transformed->a[y][x] = original->a[y][x];
|
||||||
|
transformed->b[y][x] = original->b[y][x];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __SSE2__
|
||||||
|
const float rhue = atan2Buffer[x];
|
||||||
|
// const float rchro = sqrtBuffer[x];
|
||||||
|
#else
|
||||||
|
const float rhue = xatan2f(origblur->b[y][x], origblur->a[y][x]);
|
||||||
|
// const float rchro = sqrt(SQR(origblur->b[y][x]) + SQR(origblur->a[y][x])) / 327.68f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// float rL = original->L[y][x] / 327.68f;
|
||||||
|
|
||||||
|
float khu = 0.f;
|
||||||
|
// bool kzon = false;
|
||||||
|
|
||||||
|
// algo with detection of hue ==> artifacts for noisy images ==> denoise before
|
||||||
|
if (levred == 7 && lp.sensden < 90.f) { // after 90 plein effect
|
||||||
|
//hue detection
|
||||||
|
if ((hueref + dhueden) < rtengine::RT_PI && rhue < hueplus && rhue > huemoins) { //transition are good
|
||||||
|
if (rhue >= hueplus - delhu) {
|
||||||
|
khu = apl * rhue + bpl;
|
||||||
|
} else if (rhue < huemoins + delhu) {
|
||||||
|
khu = amo * rhue + bmo;
|
||||||
|
} else {
|
||||||
|
khu = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kzon = true;
|
||||||
|
|
||||||
|
} else if ((hueref + dhueden) >= rtengine::RT_PI && (rhue > huemoins || rhue < hueplus)) {
|
||||||
|
if (rhue >= hueplus - delhu && rhue < hueplus) {
|
||||||
|
khu = apl * rhue + bpl;
|
||||||
|
} else if (rhue >= huemoins && rhue < huemoins + delhu) {
|
||||||
|
khu = amo * rhue + bmo;
|
||||||
|
} else {
|
||||||
|
khu = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kzon = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((hueref - dhueden) > -rtengine::RT_PI && rhue < hueplus && rhue > huemoins) {
|
||||||
|
if (rhue >= hueplus - delhu && rhue < hueplus) {
|
||||||
|
khu = apl * rhue + bpl;
|
||||||
|
} else if (rhue >= huemoins && rhue < huemoins + delhu) {
|
||||||
|
khu = amo * rhue + bmo;
|
||||||
|
} else {
|
||||||
|
khu = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kzon = true;
|
||||||
|
|
||||||
|
} else if ((hueref - dhueden) <= -rtengine::RT_PI && (rhue > huemoins || rhue < hueplus)) {
|
||||||
|
if (rhue >= hueplus - delhu && rhue < hueplus) {
|
||||||
|
khu = apl * rhue + bpl;
|
||||||
|
} else if (rhue >= huemoins && rhue < huemoins + delhu) {
|
||||||
|
khu = amo * rhue + bmo;
|
||||||
|
} else {
|
||||||
|
khu = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kzon = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
khu = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (zone) {
|
||||||
|
case 0: { // outside selection and outside transition zone => no effect, keep original values
|
||||||
|
transformed->L[y][x] = original->L[y][x];
|
||||||
|
transformed->a[y][x] = original->a[y][x];
|
||||||
|
transformed->b[y][x] = original->b[y][x];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 1: { // inside transition zone
|
||||||
|
float factorx = localFactor;
|
||||||
|
float difL, difa, difb;
|
||||||
|
|
||||||
|
difL = tmp1->L[loy - begy][lox - begx] - original->L[y][x];
|
||||||
|
difa = tmp1->a[loy - begy][lox - begx] - original->a[y][x];
|
||||||
|
difb = tmp1->b[loy - begy][lox - begx] - original->b[y][x];
|
||||||
|
|
||||||
|
difL *= factorx * khu;
|
||||||
|
difa *= factorx * khu;
|
||||||
|
difb *= factorx * khu;
|
||||||
|
transformed->L[y][x] = original->L[y][x] + difL;
|
||||||
|
transformed->a[y][x] = (original->a[y][x] + difa) * factnoise1 * factnoise2;
|
||||||
|
transformed->b[y][x] = (original->b[y][x] + difb) * factnoise1 * factnoise2 ;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 2: { // inside selection => full effect, no transition
|
||||||
|
float difL, difa, difb;
|
||||||
|
|
||||||
|
difL = tmp1->L[loy - begy][lox - begx] - original->L[y][x];
|
||||||
|
difa = tmp1->a[loy - begy][lox - begx] - original->a[y][x];
|
||||||
|
difb = tmp1->b[loy - begy][lox - begx] - original->b[y][x];
|
||||||
|
|
||||||
|
difL *= khu;
|
||||||
|
difa *= khu;
|
||||||
|
difb *= khu;
|
||||||
|
|
||||||
|
transformed->L[y][x] = original->L[y][x] + difL;
|
||||||
|
transformed->a[y][x] = (original->a[y][x] + difa) * factnoise1 * factnoise2;
|
||||||
|
transformed->b[y][x] = (original->b[y][x] + difb) * factnoise1 * factnoise2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete origblur;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ImProcFunctions::DeNoise_Local(int call, const struct local_params& lp, int levred, float hueplus, float huemoins, float hueref, float dhueden, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk)
|
void ImProcFunctions::DeNoise_Local(int call, const struct local_params& lp, int levred, float hueplus, float huemoins, float hueref, float dhueden, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk)
|
||||||
{
|
{
|
||||||
// local denoise
|
// local denoise
|
||||||
@ -9173,6 +9397,59 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original,
|
|||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
//local impulse
|
||||||
|
if ((lp.bilat > 0.f) && lp.denoiena) {
|
||||||
|
int bfh = int (lp.ly + lp.lyT) + del; //bfw bfh real size of square zone
|
||||||
|
int bfw = int (lp.lx + lp.lxL) + del;
|
||||||
|
|
||||||
|
LabImage *bufwv = nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
bufwv = new LabImage(bfw, bfh); //buffer for data in zone limit
|
||||||
|
|
||||||
|
|
||||||
|
int begy = lp.yc - lp.lyT;
|
||||||
|
int begx = lp.xc - lp.lxL;
|
||||||
|
int yEn = lp.yc + lp.ly;
|
||||||
|
int xEn = lp.xc + lp.lx;
|
||||||
|
float hueplus = huerefblur + dhueden;
|
||||||
|
float huemoins = huerefblur - dhueden;
|
||||||
|
|
||||||
|
if (hueplus > rtengine::RT_PI) {
|
||||||
|
hueplus = huerefblur + dhueden - 2.f * rtengine::RT_PI;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (huemoins < -rtengine::RT_PI) {
|
||||||
|
huemoins = huerefblur - dhueden + 2.f * rtengine::RT_PI;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int y = 0; y < transformed->H ; y++) //{
|
||||||
|
for (int x = 0; x < transformed->W; x++) {
|
||||||
|
int lox = cx + x;
|
||||||
|
int loy = cy + y;
|
||||||
|
|
||||||
|
if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) {
|
||||||
|
bufwv->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas
|
||||||
|
bufwv->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas
|
||||||
|
bufwv->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
double thr = (float) lp.bilat / 20.0;
|
||||||
|
|
||||||
|
if (bfh > 8 && bfw > 8) {
|
||||||
|
ImProcFunctions::impulse_nr(bufwv, thr);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeNoise_Local_imp(lp, levred, hueplus, huemoins, huerefblur, dhueden, original, transformed, bufwv, cx, cy, sk);
|
||||||
|
delete bufwv;
|
||||||
|
}
|
||||||
|
|
||||||
//local denoise
|
//local denoise
|
||||||
//all these variables are to prevent use of denoise when non necessary
|
//all these variables are to prevent use of denoise when non necessary
|
||||||
// but with qualmet = 2 (default for best quality) we must denoise chroma with little values to prevent artifacts due to variations of Hue
|
// but with qualmet = 2 (default for best quality) we must denoise chroma with little values to prevent artifacts due to variations of Hue
|
||||||
|
@ -625,30 +625,53 @@ enum ProcEventCode {
|
|||||||
Evlocallabhuerefblur = 595,
|
Evlocallabhuerefblur = 595,
|
||||||
EvlocallabEnabled = 596,
|
EvlocallabEnabled = 596,
|
||||||
EvlocallablocY = 597,
|
EvlocallablocY = 597,
|
||||||
|
Evlocallabbilateral = 598,
|
||||||
NUMOFEVENTS
|
NUMOFEVENTS
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ProcEvent {
|
class ProcEvent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
ProcEvent(): code_(0) {}
|
ProcEvent(): code_(0) {}
|
||||||
ProcEvent(ProcEventCode code): code_(code) {}
|
ProcEvent(ProcEventCode code): code_(code) {}
|
||||||
explicit ProcEvent(int code): code_(code) {}
|
explicit ProcEvent(int code): code_(code) {}
|
||||||
operator int() { return code_; }
|
operator int()
|
||||||
|
{
|
||||||
|
return code_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int code_;
|
int code_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
inline bool operator==(ProcEvent a, ProcEvent b) { return int(a) == int(b); }
|
inline bool operator==(ProcEvent a, ProcEvent b)
|
||||||
inline bool operator==(ProcEvent a, ProcEventCode b) { return int(a) == int(b); }
|
{
|
||||||
inline bool operator==(ProcEventCode a, ProcEvent b) { return int(a) == int(b); }
|
return int(a) == int(b);
|
||||||
inline bool operator!=(ProcEvent a, ProcEvent b) { return int(a) != int(b); }
|
}
|
||||||
inline bool operator!=(ProcEvent a, ProcEventCode b) { return int(a) != int(b); }
|
inline bool operator==(ProcEvent a, ProcEventCode b)
|
||||||
inline bool operator!=(ProcEventCode a, ProcEvent b) { return int(a) != int(b); }
|
{
|
||||||
|
return int(a) == int(b);
|
||||||
|
}
|
||||||
|
inline bool operator==(ProcEventCode a, ProcEvent b)
|
||||||
|
{
|
||||||
|
return int(a) == int(b);
|
||||||
|
}
|
||||||
|
inline bool operator!=(ProcEvent a, ProcEvent b)
|
||||||
|
{
|
||||||
|
return int(a) != int(b);
|
||||||
|
}
|
||||||
|
inline bool operator!=(ProcEvent a, ProcEventCode b)
|
||||||
|
{
|
||||||
|
return int(a) != int(b);
|
||||||
|
}
|
||||||
|
inline bool operator!=(ProcEventCode a, ProcEvent b)
|
||||||
|
{
|
||||||
|
return int(a) != int(b);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2406,6 +2406,7 @@ noiselumf(0),
|
|||||||
noiselumc(0),
|
noiselumc(0),
|
||||||
noiselumdetail(0),
|
noiselumdetail(0),
|
||||||
noisechrodetail(0),
|
noisechrodetail(0),
|
||||||
|
bilateral(0),
|
||||||
sensiden(30),
|
sensiden(30),
|
||||||
noisechrof(0),
|
noisechrof(0),
|
||||||
noisechroc(0),
|
noisechroc(0),
|
||||||
@ -2542,6 +2543,7 @@ bool LocallabParams::operator ==(const LocallabParams& other) const
|
|||||||
&& noiselumc == other.noiselumc
|
&& noiselumc == other.noiselumc
|
||||||
&& noiselumdetail == other.noiselumdetail
|
&& noiselumdetail == other.noiselumdetail
|
||||||
&& noisechrodetail == other.noisechrodetail
|
&& noisechrodetail == other.noisechrodetail
|
||||||
|
&& bilateral == other.bilateral
|
||||||
&& sensiden == other.sensiden
|
&& sensiden == other.sensiden
|
||||||
&& noisechrof == other.noisechrof
|
&& noisechrof == other.noisechrof
|
||||||
&& noisechroc == other.noisechroc
|
&& noisechroc == other.noisechroc
|
||||||
@ -3534,6 +3536,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
|||||||
saveToKeyfile(!pedited || pedited->locallab.noiselumc, "Locallab", "noiselumc", locallab.noiselumc, keyFile);
|
saveToKeyfile(!pedited || pedited->locallab.noiselumc, "Locallab", "noiselumc", locallab.noiselumc, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->locallab.noiselumdetail, "Locallab", "noiselumdetail", locallab.noiselumdetail, keyFile);
|
saveToKeyfile(!pedited || pedited->locallab.noiselumdetail, "Locallab", "noiselumdetail", locallab.noiselumdetail, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->locallab.noisechrodetail, "Locallab", "noisechrodetail", locallab.noisechrodetail, keyFile);
|
saveToKeyfile(!pedited || pedited->locallab.noisechrodetail, "Locallab", "noisechrodetail", locallab.noisechrodetail, keyFile);
|
||||||
|
saveToKeyfile(!pedited || pedited->locallab.bilateral, "Locallab", "Bilateral", locallab.bilateral, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->locallab.sensiden, "Locallab", "Sensiden", locallab.sensiden, keyFile);
|
saveToKeyfile(!pedited || pedited->locallab.sensiden, "Locallab", "Sensiden", locallab.sensiden, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->locallab.noisechrof, "Locallab", "noisechrof", locallab.noisechrof, keyFile);
|
saveToKeyfile(!pedited || pedited->locallab.noisechrof, "Locallab", "noisechrof", locallab.noisechrof, keyFile);
|
||||||
saveToKeyfile(!pedited || pedited->locallab.noisechroc, "Locallab", "noisechroc", locallab.noisechroc, keyFile);
|
saveToKeyfile(!pedited || pedited->locallab.noisechroc, "Locallab", "noisechroc", locallab.noisechroc, keyFile);
|
||||||
@ -4610,6 +4613,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
|||||||
assignFromKeyfile(keyFile, "Locallab", "noiselumc", pedited, locallab.noiselumc, pedited->locallab.noiselumc);
|
assignFromKeyfile(keyFile, "Locallab", "noiselumc", pedited, locallab.noiselumc, pedited->locallab.noiselumc);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "noiselumdetail", pedited, locallab.noiselumdetail, pedited->locallab.noiselumdetail);
|
assignFromKeyfile(keyFile, "Locallab", "noiselumdetail", pedited, locallab.noiselumdetail, pedited->locallab.noiselumdetail);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "noisechrodetail", pedited, locallab.noisechrodetail, pedited->locallab.noisechrodetail);
|
assignFromKeyfile(keyFile, "Locallab", "noisechrodetail", pedited, locallab.noisechrodetail, pedited->locallab.noisechrodetail);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Bilateral", pedited, locallab.bilateral, pedited->locallab.bilateral);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Sensiden", pedited, locallab.sensiden, pedited->locallab.sensiden);
|
assignFromKeyfile(keyFile, "Locallab", "Sensiden", pedited, locallab.sensiden, pedited->locallab.sensiden);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "noisechrof", pedited, locallab.noisechrof, pedited->locallab.noisechrof);
|
assignFromKeyfile(keyFile, "Locallab", "noisechrof", pedited, locallab.noisechrof, pedited->locallab.noisechrof);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "noisechroc", pedited, locallab.noisechroc, pedited->locallab.noisechroc);
|
assignFromKeyfile(keyFile, "Locallab", "noisechroc", pedited, locallab.noisechroc, pedited->locallab.noisechroc);
|
||||||
|
@ -343,8 +343,7 @@ struct RetinexParams {
|
|||||||
/**
|
/**
|
||||||
* Parameters of the luminance curve
|
* Parameters of the luminance curve
|
||||||
*/
|
*/
|
||||||
struct LCurveParams
|
struct LCurveParams {
|
||||||
{
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
std::vector<double> lcurve;
|
std::vector<double> lcurve;
|
||||||
std::vector<double> acurve;
|
std::vector<double> acurve;
|
||||||
@ -371,7 +370,7 @@ struct LCurveParams
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters for local contrast
|
* Parameters for local contrast
|
||||||
*/
|
*/
|
||||||
struct LocalContrastParams {
|
struct LocalContrastParams {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
int radius;
|
int radius;
|
||||||
@ -936,6 +935,7 @@ struct LocallabParams {
|
|||||||
int noiselumc;
|
int noiselumc;
|
||||||
int noiselumdetail;
|
int noiselumdetail;
|
||||||
int noisechrodetail;
|
int noisechrodetail;
|
||||||
|
int bilateral;
|
||||||
int sensiden;
|
int sensiden;
|
||||||
int noisechrof;
|
int noisechrof;
|
||||||
int noisechroc;
|
int noisechroc;
|
||||||
|
@ -624,11 +624,13 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
|||||||
LUMINANCECURVE, // Evlocallabsensiden
|
LUMINANCECURVE, // Evlocallabsensiden
|
||||||
LUMINANCECURVE, // Evlocallabhuerefblur
|
LUMINANCECURVE, // Evlocallabhuerefblur
|
||||||
LUMINANCECURVE, // EvlocallabEnabled
|
LUMINANCECURVE, // EvlocallabEnabled
|
||||||
LUMINANCECURVE // EvlocallablocY
|
LUMINANCECURVE, // EvlocallablocY
|
||||||
|
LUMINANCECURVE // Evlocallabbilateral
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
namespace rtengine {
|
namespace rtengine
|
||||||
|
{
|
||||||
|
|
||||||
RefreshMapper::RefreshMapper():
|
RefreshMapper::RefreshMapper():
|
||||||
next_event_(rtengine::NUMOFEVENTS)
|
next_event_(rtengine::NUMOFEVENTS)
|
||||||
@ -654,6 +656,7 @@ void RefreshMapper::mapEvent(ProcEvent event, int action)
|
|||||||
int RefreshMapper::getAction(ProcEvent event) const
|
int RefreshMapper::getAction(ProcEvent event) const
|
||||||
{
|
{
|
||||||
auto it = actions_.find(event);
|
auto it = actions_.find(event);
|
||||||
|
|
||||||
if (it == actions_.end()) {
|
if (it == actions_.end()) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1103,7 +1103,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
ifstream fich(datalab, ios::in);
|
ifstream fich(datalab, ios::in);
|
||||||
int maxdata = 99; // 91 10021 //88 10019 //87 10018//86 10017//85 10016 //82;//78;//73 10011
|
int maxdata = 100; //99 10021 // 91 10021 //88 10019 //87 10018//86 10017//85 10016 //82;//78;//73 10011
|
||||||
|
|
||||||
if (fich && versionmip != 0) {
|
if (fich && versionmip != 0) {
|
||||||
std::string inser;
|
std::string inser;
|
||||||
@ -1396,6 +1396,8 @@ private:
|
|||||||
dataspots[93][0] = 1;
|
dataspots[93][0] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dataspots[94][0] = params.locallab.bilateral;
|
||||||
|
|
||||||
dataspots[maxdata - 5][0] = 100.f * params.locallab.huerefblur;
|
dataspots[maxdata - 5][0] = 100.f * params.locallab.huerefblur;
|
||||||
dataspots[maxdata - 4][0] = 100.f * params.locallab.hueref;
|
dataspots[maxdata - 4][0] = 100.f * params.locallab.hueref;
|
||||||
dataspots[maxdata - 3][0] = params.locallab.chromaref;
|
dataspots[maxdata - 3][0] = params.locallab.chromaref;
|
||||||
@ -1924,6 +1926,7 @@ private:
|
|||||||
params.locallab.expexpose = true;
|
params.locallab.expexpose = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
params.locallab.bilateral = dataspots[94][sp];
|
||||||
|
|
||||||
|
|
||||||
params.locallab.huerefblur = ((float) dataspots[maxdata - 5][sp]) / 100.f;
|
params.locallab.huerefblur = ((float) dataspots[maxdata - 5][sp]) / 100.f;
|
||||||
|
@ -108,6 +108,7 @@ Locallab::Locallab():
|
|||||||
noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), 0, 100, 1, 0))),
|
noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), 0, 100, 1, 0))),
|
||||||
noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0, 100, 1, 50))),
|
noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0, 100, 1, 50))),
|
||||||
noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0, 100, 1, 50))),
|
noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0, 100, 1, 50))),
|
||||||
|
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, 30))),
|
sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIDEN"), 0, 100, 1, 30))),
|
||||||
noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), 0, 100, 1, 0))),
|
noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), 0, 100, 1, 0))),
|
||||||
noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), 0, 100, 1, 0))),
|
noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), 0, 100, 1, 0))),
|
||||||
@ -134,6 +135,7 @@ Locallab::Locallab():
|
|||||||
shapeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHFR")))),
|
shapeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHFR")))),
|
||||||
superFrame(Gtk::manage(new Gtk::Frame())),
|
superFrame(Gtk::manage(new Gtk::Frame())),
|
||||||
dustFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DUST")))),
|
dustFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DUST")))),
|
||||||
|
wavFrame(Gtk::manage(new Gtk::Frame())),
|
||||||
|
|
||||||
// artifVBox (Gtk::manage (new Gtk::VBox ())),
|
// artifVBox (Gtk::manage (new Gtk::VBox ())),
|
||||||
// shapeVBox (Gtk::manage (new Gtk::VBox ())),
|
// shapeVBox (Gtk::manage (new Gtk::VBox ())),
|
||||||
@ -649,19 +651,27 @@ Locallab::Locallab():
|
|||||||
noiselumc->setAdjusterListener(this);
|
noiselumc->setAdjusterListener(this);
|
||||||
noiselumdetail->setAdjusterListener(this);
|
noiselumdetail->setAdjusterListener(this);
|
||||||
noisechrodetail->setAdjusterListener(this);
|
noisechrodetail->setAdjusterListener(this);
|
||||||
|
bilateral->setAdjusterListener(this);
|
||||||
sensiden->setAdjusterListener(this);
|
sensiden->setAdjusterListener(this);
|
||||||
|
|
||||||
noisechrof->setAdjusterListener(this);
|
noisechrof->setAdjusterListener(this);
|
||||||
|
|
||||||
noisechroc->setAdjusterListener(this);
|
noisechroc->setAdjusterListener(this);
|
||||||
ToolParamBlock* const denoisBox = Gtk::manage(new ToolParamBlock());
|
|
||||||
|
|
||||||
denoisBox->pack_start(*noiselumf);
|
ToolParamBlock* const denoisBox = Gtk::manage(new ToolParamBlock());
|
||||||
denoisBox->pack_start(*noiselumc);
|
ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock());
|
||||||
denoisBox->pack_start(*noiselumdetail);
|
|
||||||
denoisBox->pack_start(*noisechrof);
|
wavBox->pack_start(*noiselumf);
|
||||||
denoisBox->pack_start(*noisechroc);
|
wavBox->pack_start(*noiselumc);
|
||||||
denoisBox->pack_start(*noisechrodetail);
|
wavBox->pack_start(*noiselumdetail);
|
||||||
|
wavBox->pack_start(*noisechrof);
|
||||||
|
wavBox->pack_start(*noisechroc);
|
||||||
|
wavBox->pack_start(*noisechrodetail);
|
||||||
|
|
||||||
|
wavFrame->add(*wavBox);
|
||||||
|
denoisBox->pack_start(*wavFrame);
|
||||||
|
|
||||||
|
denoisBox->pack_start(*bilateral);
|
||||||
denoisBox->pack_start(*sensiden);
|
denoisBox->pack_start(*sensiden);
|
||||||
|
|
||||||
neutrHBox1 = Gtk::manage(new Gtk::HBox());
|
neutrHBox1 = Gtk::manage(new Gtk::HBox());
|
||||||
@ -692,10 +702,11 @@ Locallab::Locallab():
|
|||||||
|
|
||||||
superBox->pack_start(*lightness);
|
superBox->pack_start(*lightness);
|
||||||
superBox->pack_start(*contrast);
|
superBox->pack_start(*contrast);
|
||||||
|
superBox->pack_start(*chroma);
|
||||||
|
|
||||||
superFrame->add(*superBox);
|
superFrame->add(*superBox);
|
||||||
colorBox->pack_start(*superFrame);
|
colorBox->pack_start(*superFrame);
|
||||||
|
|
||||||
colorBox->pack_start(*chroma);
|
|
||||||
colorBox->pack_start(*warm);
|
colorBox->pack_start(*warm);
|
||||||
colorBox->pack_start(*sensi);
|
colorBox->pack_start(*sensi);
|
||||||
|
|
||||||
@ -1318,6 +1329,7 @@ void Locallab::neutral_pressed()
|
|||||||
noisechrof->resetValue(false);
|
noisechrof->resetValue(false);
|
||||||
noisechroc->resetValue(false);
|
noisechroc->resetValue(false);
|
||||||
noisechrodetail->resetValue(false);
|
noisechrodetail->resetValue(false);
|
||||||
|
bilateral->resetValue(false);
|
||||||
sensiden->resetValue(false);
|
sensiden->resetValue(false);
|
||||||
|
|
||||||
|
|
||||||
@ -1881,15 +1893,16 @@ bool Locallab::localComputed_()
|
|||||||
expexpose->setEnabled(true);
|
expexpose->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bilateral->setValue(nextdatasp[94]);
|
||||||
|
|
||||||
double intermedblur = 0.01 * (double) nextdatasp[94];
|
double intermedblur = 0.01 * (double) nextdatasp[95];
|
||||||
huerefblur->setValue(intermedblur);
|
huerefblur->setValue(intermedblur);
|
||||||
double intermed = 0.01 * (double) nextdatasp[95];
|
double intermed = 0.01 * (double) nextdatasp[96];
|
||||||
hueref->setValue(intermed);
|
hueref->setValue(intermed);
|
||||||
|
|
||||||
chromaref->setValue(nextdatasp[96]);
|
chromaref->setValue(nextdatasp[97]);
|
||||||
lumaref->setValue(nextdatasp[97]);
|
lumaref->setValue(nextdatasp[98]);
|
||||||
sobelref->setValue(nextdatasp[98]);
|
sobelref->setValue(nextdatasp[99]);
|
||||||
|
|
||||||
int *s_datc;
|
int *s_datc;
|
||||||
s_datc = new int[70];
|
s_datc = new int[70];
|
||||||
@ -2206,7 +2219,7 @@ bool Locallab::localComputed_()
|
|||||||
|
|
||||||
void Locallab::localChanged(int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat)
|
void Locallab::localChanged(int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat)
|
||||||
{
|
{
|
||||||
for (int i = 2; i < 99; i++) {
|
for (int i = 2; i < 100; i++) {
|
||||||
nextdatasp[i] = datasp[i][sp];
|
nextdatasp[i] = datasp[i][sp];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2297,6 +2310,7 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
noisechrof->setEditedState(pedited->locallab.noisechrof ? Edited : UnEdited);
|
noisechrof->setEditedState(pedited->locallab.noisechrof ? Edited : UnEdited);
|
||||||
noisechroc->setEditedState(pedited->locallab.noisechroc ? Edited : UnEdited);
|
noisechroc->setEditedState(pedited->locallab.noisechroc ? Edited : UnEdited);
|
||||||
noisechrodetail->setEditedState(pedited->locallab.noisechrodetail ? Edited : UnEdited);
|
noisechrodetail->setEditedState(pedited->locallab.noisechrodetail ? Edited : UnEdited);
|
||||||
|
bilateral->setEditedState(pedited->locallab.bilateral ? Edited : UnEdited);
|
||||||
sensiden->setEditedState(pedited->locallab.sensiden ? Edited : UnEdited);
|
sensiden->setEditedState(pedited->locallab.sensiden ? Edited : UnEdited);
|
||||||
|
|
||||||
pastels->setEditedState(pedited->locallab.pastels ? Edited : UnEdited);
|
pastels->setEditedState(pedited->locallab.pastels ? Edited : UnEdited);
|
||||||
@ -2511,6 +2525,7 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
noisechrof->setValue(pp->locallab.noisechrof);
|
noisechrof->setValue(pp->locallab.noisechrof);
|
||||||
noisechroc->setValue(pp->locallab.noisechroc);
|
noisechroc->setValue(pp->locallab.noisechroc);
|
||||||
noisechrodetail->setValue(pp->locallab.noisechrodetail);
|
noisechrodetail->setValue(pp->locallab.noisechrodetail);
|
||||||
|
bilateral->setValue(pp->locallab.bilateral);
|
||||||
sensiden->setValue(pp->locallab.sensiden);
|
sensiden->setValue(pp->locallab.sensiden);
|
||||||
expcolor->setEnabled(pp->locallab.expcolor);
|
expcolor->setEnabled(pp->locallab.expcolor);
|
||||||
expexpose->setEnabled(pp->locallab.expexpose);
|
expexpose->setEnabled(pp->locallab.expexpose);
|
||||||
@ -2938,6 +2953,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pp->locallab.noiselumc = noiselumc->getIntValue();
|
pp->locallab.noiselumc = noiselumc->getIntValue();
|
||||||
pp->locallab.noiselumdetail = noiselumdetail->getIntValue();
|
pp->locallab.noiselumdetail = noiselumdetail->getIntValue();
|
||||||
pp->locallab.noisechrodetail = noisechrodetail->getIntValue();
|
pp->locallab.noisechrodetail = noisechrodetail->getIntValue();
|
||||||
|
pp->locallab.bilateral = bilateral->getIntValue();
|
||||||
pp->locallab.sensiden = sensiden->getIntValue();
|
pp->locallab.sensiden = sensiden->getIntValue();
|
||||||
pp->locallab.noiselumf = noiselumf->getIntValue();
|
pp->locallab.noiselumf = noiselumf->getIntValue();
|
||||||
pp->locallab.noisechrof = noisechrof->getIntValue();
|
pp->locallab.noisechrof = noisechrof->getIntValue();
|
||||||
@ -3054,6 +3070,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pedited->locallab.noiselumc = noiselumc->getEditedState();
|
pedited->locallab.noiselumc = noiselumc->getEditedState();
|
||||||
pedited->locallab.noiselumdetail = noiselumdetail->getEditedState();
|
pedited->locallab.noiselumdetail = noiselumdetail->getEditedState();
|
||||||
pedited->locallab.noisechrodetail = noisechrodetail->getEditedState();
|
pedited->locallab.noisechrodetail = noisechrodetail->getEditedState();
|
||||||
|
pedited->locallab.bilateral = bilateral->getEditedState();
|
||||||
pedited->locallab.sensiden = sensiden->getEditedState();
|
pedited->locallab.sensiden = sensiden->getEditedState();
|
||||||
pedited->locallab.noisechrof = noisechrof->getEditedState();
|
pedited->locallab.noisechrof = noisechrof->getEditedState();
|
||||||
pedited->locallab.noisechroc = noisechroc->getEditedState();
|
pedited->locallab.noisechroc = noisechroc->getEditedState();
|
||||||
@ -3829,6 +3846,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
|
|||||||
noiselumc->setDefault(defParams->locallab.noiselumc);
|
noiselumc->setDefault(defParams->locallab.noiselumc);
|
||||||
noiselumdetail->setDefault(defParams->locallab.noiselumdetail);
|
noiselumdetail->setDefault(defParams->locallab.noiselumdetail);
|
||||||
noisechrodetail->setDefault(defParams->locallab.noisechrodetail);
|
noisechrodetail->setDefault(defParams->locallab.noisechrodetail);
|
||||||
|
bilateral->setDefault(defParams->locallab.bilateral);
|
||||||
sensiden->setDefault(defParams->locallab.sensiden);
|
sensiden->setDefault(defParams->locallab.sensiden);
|
||||||
noisechrof->setDefault(defParams->locallab.noisechrof);
|
noisechrof->setDefault(defParams->locallab.noisechrof);
|
||||||
noisechroc->setDefault(defParams->locallab.noisechroc);
|
noisechroc->setDefault(defParams->locallab.noisechroc);
|
||||||
@ -3907,6 +3925,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
|
|||||||
noiselumc->setDefaultEditedState(pedited->locallab.noiselumc ? Edited : UnEdited);
|
noiselumc->setDefaultEditedState(pedited->locallab.noiselumc ? Edited : UnEdited);
|
||||||
noiselumdetail->setDefaultEditedState(pedited->locallab.noiselumdetail ? Edited : UnEdited);
|
noiselumdetail->setDefaultEditedState(pedited->locallab.noiselumdetail ? Edited : UnEdited);
|
||||||
noisechrodetail->setDefaultEditedState(pedited->locallab.noisechrodetail ? Edited : UnEdited);
|
noisechrodetail->setDefaultEditedState(pedited->locallab.noisechrodetail ? Edited : UnEdited);
|
||||||
|
bilateral->setDefaultEditedState(pedited->locallab.bilateral ? Edited : UnEdited);
|
||||||
sensiden->setDefaultEditedState(pedited->locallab.sensiden ? Edited : UnEdited);
|
sensiden->setDefaultEditedState(pedited->locallab.sensiden ? Edited : UnEdited);
|
||||||
noisechrof->setDefaultEditedState(pedited->locallab.noisechrof ? Edited : UnEdited);
|
noisechrof->setDefaultEditedState(pedited->locallab.noisechrof ? Edited : UnEdited);
|
||||||
noisechroc->setDefaultEditedState(pedited->locallab.noisechroc ? Edited : UnEdited);
|
noisechroc->setDefaultEditedState(pedited->locallab.noisechroc ? Edited : UnEdited);
|
||||||
@ -3984,6 +4003,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
|
|||||||
noiselumc->setDefaultEditedState(Irrelevant);
|
noiselumc->setDefaultEditedState(Irrelevant);
|
||||||
noiselumdetail->setDefaultEditedState(Irrelevant);
|
noiselumdetail->setDefaultEditedState(Irrelevant);
|
||||||
noisechrodetail->setDefaultEditedState(Irrelevant);
|
noisechrodetail->setDefaultEditedState(Irrelevant);
|
||||||
|
bilateral->setDefaultEditedState(Irrelevant);
|
||||||
sensiden->setDefaultEditedState(Irrelevant);
|
sensiden->setDefaultEditedState(Irrelevant);
|
||||||
noisechrof->setDefaultEditedState(Irrelevant);
|
noisechrof->setDefaultEditedState(Irrelevant);
|
||||||
noisechroc->setDefaultEditedState(Irrelevant);
|
noisechroc->setDefaultEditedState(Irrelevant);
|
||||||
@ -4164,6 +4184,8 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
|
|||||||
listener->panelChanged(Evlocallabnoiselumdetail, noiselumdetail->getTextValue());
|
listener->panelChanged(Evlocallabnoiselumdetail, noiselumdetail->getTextValue());
|
||||||
} else if (a == noisechrodetail) {
|
} else if (a == noisechrodetail) {
|
||||||
listener->panelChanged(Evlocallabnoisechrodetail, noisechrodetail->getTextValue());
|
listener->panelChanged(Evlocallabnoisechrodetail, noisechrodetail->getTextValue());
|
||||||
|
} else if (a == bilateral) {
|
||||||
|
listener->panelChanged(Evlocallabbilateral, bilateral->getTextValue());
|
||||||
} else if (a == sensiden) {
|
} else if (a == sensiden) {
|
||||||
listener->panelChanged(Evlocallabsensiden, sensiden->getTextValue());
|
listener->panelChanged(Evlocallabsensiden, sensiden->getTextValue());
|
||||||
} else if (a == noisechrof) {
|
} else if (a == noisechrof) {
|
||||||
@ -4357,6 +4379,7 @@ void Locallab::trimValues(rtengine::procparams::ProcParams * pp)
|
|||||||
noiselumc->trimValue(pp->locallab.noiselumc);
|
noiselumc->trimValue(pp->locallab.noiselumc);
|
||||||
noiselumdetail->trimValue(pp->locallab.noiselumdetail);
|
noiselumdetail->trimValue(pp->locallab.noiselumdetail);
|
||||||
noisechrodetail->trimValue(pp->locallab.noisechrodetail);
|
noisechrodetail->trimValue(pp->locallab.noisechrodetail);
|
||||||
|
bilateral->trimValue(pp->locallab.bilateral);
|
||||||
sensiden->trimValue(pp->locallab.sensiden);
|
sensiden->trimValue(pp->locallab.sensiden);
|
||||||
noisechrof->trimValue(pp->locallab.noisechrof);
|
noisechrof->trimValue(pp->locallab.noisechrof);
|
||||||
noisechroc->trimValue(pp->locallab.noisechroc);
|
noisechroc->trimValue(pp->locallab.noisechroc);
|
||||||
@ -4446,6 +4469,7 @@ void Locallab::setBatchMode(bool batchMode)
|
|||||||
noiselumc->showEditedCB();
|
noiselumc->showEditedCB();
|
||||||
noiselumdetail->showEditedCB();
|
noiselumdetail->showEditedCB();
|
||||||
noisechrodetail->showEditedCB();
|
noisechrodetail->showEditedCB();
|
||||||
|
bilateral->showEditedCB();
|
||||||
sensiden->showEditedCB();
|
sensiden->showEditedCB();
|
||||||
noisechroc->showEditedCB();
|
noisechroc->showEditedCB();
|
||||||
noiselumf->showEditedCB();
|
noiselumf->showEditedCB();
|
||||||
|
@ -117,6 +117,7 @@ private:
|
|||||||
Adjuster* const noiselumc;
|
Adjuster* const noiselumc;
|
||||||
Adjuster* const noiselumdetail;
|
Adjuster* const noiselumdetail;
|
||||||
Adjuster* const noisechrodetail;
|
Adjuster* const noisechrodetail;
|
||||||
|
Adjuster* const bilateral;
|
||||||
Adjuster* const sensiden;
|
Adjuster* const sensiden;
|
||||||
|
|
||||||
Adjuster* const noisechrof;
|
Adjuster* const noisechrof;
|
||||||
@ -144,6 +145,7 @@ private:
|
|||||||
Gtk::Frame* const shapeFrame;
|
Gtk::Frame* const shapeFrame;
|
||||||
Gtk::Frame* const superFrame;
|
Gtk::Frame* const superFrame;
|
||||||
Gtk::Frame* const dustFrame;
|
Gtk::Frame* const dustFrame;
|
||||||
|
Gtk::Frame* const wavFrame;
|
||||||
|
|
||||||
Gtk::Label* const labmdh;
|
Gtk::Label* const labmdh;
|
||||||
Gtk::Label* const labqual;
|
Gtk::Label* const labqual;
|
||||||
@ -236,7 +238,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int nextdatasp[99];
|
int nextdatasp[100];
|
||||||
int nextlength;
|
int nextlength;
|
||||||
std::string nextstr;
|
std::string nextstr;
|
||||||
std::string nextstr2;
|
std::string nextstr2;
|
||||||
|
@ -355,6 +355,7 @@ void ParamsEdited::set(bool v)
|
|||||||
locallab.noiselumc = v;
|
locallab.noiselumc = v;
|
||||||
locallab.noiselumdetail = v;
|
locallab.noiselumdetail = v;
|
||||||
locallab.noisechrodetail = v;
|
locallab.noisechrodetail = v;
|
||||||
|
locallab.bilateral = v;
|
||||||
locallab.sensiden = v;
|
locallab.sensiden = v;
|
||||||
locallab.noisechrof = v;
|
locallab.noisechrof = v;
|
||||||
locallab.noisechroc = v;
|
locallab.noisechroc = v;
|
||||||
@ -763,12 +764,12 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
|||||||
labCurve.rstprotection = labCurve.rstprotection && p.labCurve.rstprotection == other.labCurve.rstprotection;
|
labCurve.rstprotection = labCurve.rstprotection && p.labCurve.rstprotection == other.labCurve.rstprotection;
|
||||||
labCurve.lcredsk = labCurve.lcredsk && p.labCurve.lcredsk == other.labCurve.lcredsk;
|
labCurve.lcredsk = labCurve.lcredsk && p.labCurve.lcredsk == other.labCurve.lcredsk;
|
||||||
|
|
||||||
localContrast.enabled = localContrast.enabled && p.localContrast.enabled == other.localContrast.enabled;
|
localContrast.enabled = localContrast.enabled && p.localContrast.enabled == other.localContrast.enabled;
|
||||||
localContrast.radius = localContrast.radius && p.localContrast.radius == other.localContrast.radius;
|
localContrast.radius = localContrast.radius && p.localContrast.radius == other.localContrast.radius;
|
||||||
localContrast.amount = localContrast.amount && p.localContrast.amount == other.localContrast.amount;
|
localContrast.amount = localContrast.amount && p.localContrast.amount == other.localContrast.amount;
|
||||||
localContrast.darkness = localContrast.darkness && p.localContrast.darkness == other.localContrast.darkness;
|
localContrast.darkness = localContrast.darkness && p.localContrast.darkness == other.localContrast.darkness;
|
||||||
localContrast.lightness = localContrast.lightness && p.localContrast.lightness == other.localContrast.lightness;
|
localContrast.lightness = localContrast.lightness && p.localContrast.lightness == other.localContrast.lightness;
|
||||||
|
|
||||||
rgbCurves.enabled = rgbCurves.enabled && p.rgbCurves.enabled == other.rgbCurves.enabled;
|
rgbCurves.enabled = rgbCurves.enabled && p.rgbCurves.enabled == other.rgbCurves.enabled;
|
||||||
rgbCurves.lumamode = rgbCurves.lumamode && p.rgbCurves.lumamode == other.rgbCurves.lumamode;
|
rgbCurves.lumamode = rgbCurves.lumamode && p.rgbCurves.lumamode == other.rgbCurves.lumamode;
|
||||||
rgbCurves.rcurve = rgbCurves.rcurve && p.rgbCurves.rcurve == other.rgbCurves.rcurve;
|
rgbCurves.rcurve = rgbCurves.rcurve && p.rgbCurves.rcurve == other.rgbCurves.rcurve;
|
||||||
@ -1031,6 +1032,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
|||||||
locallab.noiselumc = locallab.noiselumc && p.locallab.noiselumc == other.locallab.noiselumc;
|
locallab.noiselumc = locallab.noiselumc && p.locallab.noiselumc == other.locallab.noiselumc;
|
||||||
locallab.noiselumdetail = locallab.noiselumdetail && p.locallab.noiselumdetail == other.locallab.noiselumdetail;
|
locallab.noiselumdetail = locallab.noiselumdetail && p.locallab.noiselumdetail == other.locallab.noiselumdetail;
|
||||||
locallab.noisechrodetail = locallab.noisechrodetail && p.locallab.noisechrodetail == other.locallab.noisechrodetail;
|
locallab.noisechrodetail = locallab.noisechrodetail && p.locallab.noisechrodetail == other.locallab.noisechrodetail;
|
||||||
|
locallab.bilateral = locallab.bilateral && p.locallab.bilateral == other.locallab.bilateral;
|
||||||
locallab.sensiden = locallab.sensiden && p.locallab.sensiden == other.locallab.sensiden;
|
locallab.sensiden = locallab.sensiden && p.locallab.sensiden == other.locallab.sensiden;
|
||||||
locallab.noisechrof = locallab.noisechrof && p.locallab.noisechrof == other.locallab.noisechrof;
|
locallab.noisechrof = locallab.noisechrof && p.locallab.noisechrof == other.locallab.noisechrof;
|
||||||
locallab.noisechroc = locallab.noisechroc && p.locallab.noisechroc == other.locallab.noisechroc;
|
locallab.noisechroc = locallab.noisechroc && p.locallab.noisechroc == other.locallab.noisechroc;
|
||||||
@ -1548,7 +1550,7 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
|||||||
if (labCurve.enabled) {
|
if (labCurve.enabled) {
|
||||||
toEdit.labCurve.enabled = mods.labCurve.enabled;
|
toEdit.labCurve.enabled = mods.labCurve.enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (labCurve.lcurve) {
|
if (labCurve.lcurve) {
|
||||||
toEdit.labCurve.lcurve = mods.labCurve.lcurve;
|
toEdit.labCurve.lcurve = mods.labCurve.lcurve;
|
||||||
}
|
}
|
||||||
@ -1612,15 +1614,19 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
|||||||
if (localContrast.enabled) {
|
if (localContrast.enabled) {
|
||||||
toEdit.localContrast.enabled = mods.localContrast.enabled;
|
toEdit.localContrast.enabled = mods.localContrast.enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localContrast.radius) {
|
if (localContrast.radius) {
|
||||||
toEdit.localContrast.radius = mods.localContrast.radius;
|
toEdit.localContrast.radius = mods.localContrast.radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localContrast.amount) {
|
if (localContrast.amount) {
|
||||||
toEdit.localContrast.amount = mods.localContrast.amount;
|
toEdit.localContrast.amount = mods.localContrast.amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localContrast.darkness) {
|
if (localContrast.darkness) {
|
||||||
toEdit.localContrast.darkness = mods.localContrast.darkness;
|
toEdit.localContrast.darkness = mods.localContrast.darkness;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localContrast.lightness) {
|
if (localContrast.lightness) {
|
||||||
toEdit.localContrast.lightness = mods.localContrast.lightness;
|
toEdit.localContrast.lightness = mods.localContrast.lightness;
|
||||||
}
|
}
|
||||||
@ -2668,6 +2674,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
|||||||
toEdit.locallab.noisechrodetail = mods.locallab.noisechrodetail;
|
toEdit.locallab.noisechrodetail = mods.locallab.noisechrodetail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locallab.bilateral) {
|
||||||
|
toEdit.locallab.bilateral = mods.locallab.bilateral;
|
||||||
|
}
|
||||||
|
|
||||||
if (locallab.sensiden) {
|
if (locallab.sensiden) {
|
||||||
toEdit.locallab.sensiden = mods.locallab.sensiden;
|
toEdit.locallab.sensiden = mods.locallab.sensiden;
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class LocalContrastParamsEdited {
|
class LocalContrastParamsEdited
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool radius;
|
bool radius;
|
||||||
@ -478,6 +479,7 @@ public:
|
|||||||
bool noiselumc;
|
bool noiselumc;
|
||||||
bool noiselumdetail;
|
bool noiselumdetail;
|
||||||
bool noisechrodetail;
|
bool noisechrodetail;
|
||||||
|
bool bilateral;
|
||||||
bool sensiden;
|
bool sensiden;
|
||||||
bool noisechrof;
|
bool noisechrof;
|
||||||
bool noisechroc;
|
bool noisechroc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user