Local adjustments - Denoise and Guided Filter - Recovery based on luminance mask (#6032)
* Slider recovery threshold guidedfilter * Enable GuidedFilter recovery based on mask * Enable inverse GF recovery * Small changes GUI * Recovery GUI denoise LA * Enable recovery denoise with mask luminance * Fixed bad compilation error * Fixed bad behavior GUI expert - basic * Another fixed bad behavior GUI * First changes and verifications algo and GUI * Others GUI modifications * Fixed bug compilation and reset and clean code * Some changes in algo - new tooltip * Added calcdif to denoise - prepare GUI - change some tooltips * Change tooltips * Change some settings * Small Change settings default curve denoise
This commit is contained in:
parent
5a2d2dc6b4
commit
94f54b6443
@ -1231,6 +1231,14 @@ HISTORY_MSG_983;Local - denoise threshold mask high
|
|||||||
HISTORY_MSG_984;Local - denoise threshold mask low
|
HISTORY_MSG_984;Local - denoise threshold mask low
|
||||||
HISTORY_MSG_985;Local - denoise Laplacian
|
HISTORY_MSG_985;Local - denoise Laplacian
|
||||||
HISTORY_MSG_986;Local - denoise reinforce
|
HISTORY_MSG_986;Local - denoise reinforce
|
||||||
|
HISTORY_MSG_987;Local - GF recovery threshold
|
||||||
|
HISTORY_MSG_988;Local - GF threshold mask low
|
||||||
|
HISTORY_MSG_989;Local - GF threshold mask high
|
||||||
|
HISTORY_MSG_990;Local - Denoise recovery threshold
|
||||||
|
HISTORY_MSG_991;Local - Denoise threshold mask low
|
||||||
|
HISTORY_MSG_992;Local - Denoise threshold mask high
|
||||||
|
HISTORY_MSG_993;Local - Denoise Inverse algo
|
||||||
|
HISTORY_MSG_994;Local - GF Inverse algo
|
||||||
HISTORY_MSG_BLSHAPE;Blur by level
|
HISTORY_MSG_BLSHAPE;Blur by level
|
||||||
HISTORY_MSG_BLURCWAV;Blur chroma
|
HISTORY_MSG_BLURCWAV;Blur chroma
|
||||||
HISTORY_MSG_BLURWAV;Blur luminance
|
HISTORY_MSG_BLURWAV;Blur luminance
|
||||||
@ -2551,6 +2559,7 @@ TP_LOCALLAB_DENOICHROF_TOOLTIP;Allows you to adjust fine-detail chrominance nois
|
|||||||
TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP;Allows you to direct the chroma noise reduction towards either the blue-yellow or red-green colors.
|
TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP;Allows you to direct the chroma noise reduction towards either the blue-yellow or red-green colors.
|
||||||
TP_LOCALLAB_DENOIEQUAL_TOOLTIP;Allows you to carry out more or less noise reduction in either the shadows or the highlights.
|
TP_LOCALLAB_DENOIEQUAL_TOOLTIP;Allows you to carry out more or less noise reduction in either the shadows or the highlights.
|
||||||
TP_LOCALLAB_DENOI1_EXP;Denoise based on luminance mask
|
TP_LOCALLAB_DENOI1_EXP;Denoise based on luminance mask
|
||||||
|
TP_LOCALLAB_DENOI2_EXP;Recovery based on luminance mask
|
||||||
TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP;Allows you to recover luminance detail by progressively applying a Fourier transform (DCT).
|
TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP;Allows you to recover luminance detail by progressively applying a Fourier transform (DCT).
|
||||||
TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. “Aggressive” mode removes low frequency detail.
|
TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. “Aggressive” mode removes low frequency detail.
|
||||||
TP_LOCALLAB_DENOIS;Ψ Denoise
|
TP_LOCALLAB_DENOIS;Ψ Denoise
|
||||||
@ -2672,6 +2681,7 @@ TP_LOCALLAB_INVBL;Inverse
|
|||||||
TP_LOCALLAB_INVBL_TOOLTIP;Alternative to ‘Inverse’ mode: use two spots\nFirst Spot:\n full image - delimiter outside preview\n RT-spot shape: rectangle. Transition 100\n\nSecond spot : Excluding spot
|
TP_LOCALLAB_INVBL_TOOLTIP;Alternative to ‘Inverse’ mode: use two spots\nFirst Spot:\n full image - delimiter outside preview\n RT-spot shape: rectangle. Transition 100\n\nSecond spot : Excluding spot
|
||||||
TP_LOCALLAB_INVERS;Inverse
|
TP_LOCALLAB_INVERS;Inverse
|
||||||
TP_LOCALLAB_INVERS_TOOLTIP;Fewer possibilities if selected (Inverse).\n\nAlternative: use two spots\nFirst Spot:\n full image - delimiter outside preview\n RT-spot shape: rectangle. Transition 100\n\nSecond spot: Excluding spot
|
TP_LOCALLAB_INVERS_TOOLTIP;Fewer possibilities if selected (Inverse).\n\nAlternative: use two spots\nFirst Spot:\n full image - delimiter outside preview\n RT-spot shape: rectangle. Transition 100\n\nSecond spot: Excluding spot
|
||||||
|
TP_LOCALLAB_INVMASK;Inverse algorithm
|
||||||
TP_LOCALLAB_ISOGR;Coarseness (ISO)
|
TP_LOCALLAB_ISOGR;Coarseness (ISO)
|
||||||
TP_LOCALLAB_LABBLURM;Blur Mask
|
TP_LOCALLAB_LABBLURM;Blur Mask
|
||||||
TP_LOCALLAB_LABEL;Local Adjustments
|
TP_LOCALLAB_LABEL;Local Adjustments
|
||||||
@ -2760,13 +2770,25 @@ TP_LOCALLAB_MASKCOM;Common Color Mask
|
|||||||
TP_LOCALLAB_MASKCOM_TOOLNAME;Common Color Mask - 13
|
TP_LOCALLAB_MASKCOM_TOOLNAME;Common Color Mask - 13
|
||||||
TP_LOCALLAB_MASKCOM_TOOLTIP;A tool in its own right.\nCan be used to adjust the image appearance (chrominance, luminance, contrast) and texture as a function of Scope.
|
TP_LOCALLAB_MASKCOM_TOOLTIP;A tool in its own right.\nCan be used to adjust the image appearance (chrominance, luminance, contrast) and texture as a function of Scope.
|
||||||
TP_LOCALLAB_MASKCURVE_TOOLTIP;The 3 curves are set to 1 (maximum) by default:\nC=f(C) the chroma varies according to the chrominance. You can decrease the chroma to improve the selection. By setting this curve close to zero (with a low value of C to activate the curve) you can desaturate the background in Inverse mode.\nL=f(L) the luminance varies according to the luminance, so you can decrease the brightness to improve the selection.\nL and C = f(H) luminance and chroma vary with hue, so you can decrease luminance and chroma to improve selection
|
TP_LOCALLAB_MASKCURVE_TOOLTIP;The 3 curves are set to 1 (maximum) by default:\nC=f(C) the chroma varies according to the chrominance. You can decrease the chroma to improve the selection. By setting this curve close to zero (with a low value of C to activate the curve) you can desaturate the background in Inverse mode.\nL=f(L) the luminance varies according to the luminance, so you can decrease the brightness to improve the selection.\nL and C = f(H) luminance and chroma vary with hue, so you can decrease luminance and chroma to improve selection
|
||||||
|
TP_LOCALLAB_MASKDDECAY;Decay strength
|
||||||
|
TP_LOCALLAB_MASKDECAY_TOOLTIP;Manages the rate of decay for the gray levels in the mask.\n Decay = 1 linear, Decay > 1 sharper parabolic transitions, Decay < 1 more gradual transitions
|
||||||
TP_LOCALLAB_MASKH;Hue curve
|
TP_LOCALLAB_MASKH;Hue curve
|
||||||
TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications.\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n if the mask is very dark - below the threshold 'dark' - denoise will be increased if reinforce > 1.\n if the mask is clear - above the threshold 'light' - denoise will be progressively cancelled.\n between the two, denoise will be maintained at the settings without mask.
|
TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n if the mask is very dark - below the threshold 'dark' - denoise will be increased if reinforce > 1.\n if the mask is clear - above the threshold 'light' - denoise will be progressively cancelled.\n between the two, denoise will be maintained at the settings without mask.
|
||||||
TP_LOCALLAB_MASKLCTHR;Light area luminance % threshold
|
TP_LOCALLAB_MASKDE_TOOLTIP;Used to direct the Denoise based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n If the mask is below the ‘dark’ threshold, then the Denoise will be applied progressively.\n if the mask is above the ‘light’ threshold, then the Denoise will be applied progressively.\n Between the two, the image settings without the Denoise will be maintained.
|
||||||
TP_LOCALLAB_MASKLCTHRLOW; Dark area luminance % threshold
|
TP_LOCALLAB_MASKGF_TOOLTIP;Used to direct the Guided Filter based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n If the mask is below the ‘dark’ threshold, then the GF will be applied progressively.\n if the mask is above the ‘light’ threshold, then the GF will be applied progressively.\n Between the two, the image settings without the GF will be maintained.
|
||||||
TP_LOCALLAB_MASKLNOISELOW;Reinforce denoise in dark areas
|
TP_LOCALLAB_MASKDEINV_TOOLTIP;Reverses the way the algorithm interprets the mask.\nIf checked black and very light areas will be decreased.
|
||||||
|
TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP;Light-tone limit above which denoise will be progressively applied.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels: ‘structure mask’, ‘Smooth radius’, ‘Gamma and slope’, ‘Contrast curve’, ‘Local contrast wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0
|
||||||
|
TP_LOCALLAB_MASKHIGTHRES_TOOLTIP;Light-tone limit above which 'Guided Filter' will be progressively applied.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels: ‘structure mask’, ‘Smooth radius’, ‘Gamma and slope’, ‘Contrast curve’, ‘Local contrast wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0
|
||||||
|
TP_LOCALLAB_MASKHIGTHRES_TOOLTIP;Light limit above which the GuidedFilter will be applied progressively.\n You can used some tools in 'mask and modifications' to change the gray levels: 'structure mask', 'Smooth radius', 'Gamma and slope', 'Contrast curve', 'Local contrast wavelet'.\n You can use 'lockable color picker' on mask to see what areas will be take into account. Be carefull in 'settings' to Background color mask = 0
|
||||||
|
TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP;Light limit above which the denoise will be applied progressively.\n You can used some tools in 'mask and modifications' to change the gray levels: 'structure mask', 'Smooth radius', 'Gamma and slope', 'Contrast curve', 'Local contrast wavelet'.\n You can use 'lockable color picker' on mask to see what areas will be take into account. Be carefull in 'settings' to Background color mask = 0
|
||||||
|
TP_LOCALLAB_MASKLCTHR;Light area luminance threshold
|
||||||
|
TP_LOCALLAB_MASKLCTHRLOW;Dark area luminance threshold
|
||||||
|
TP_LOCALLAB_MASKLNOISELOW;Reinforce denoise in dark and light areas
|
||||||
|
TP_LOCALLAB_MASKLOWTHRES_TOOLTIP;Dark-tone limit below which 'Guided Filter' will be progressively applied.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels: ‘structure mask’, ‘Smooth radius’, ‘Gamma and slope’, ‘Contrast curve’, ‘Local contrast wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0
|
||||||
|
TP_LOCALLAB_MASKLOWTHRESD_TOOLTIP;Dark-tone limit below which denoise will be progressively applied.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels: ‘structure mask’, ‘Smooth radius’, ‘Gamma and slope’, ‘Contrast curve’, ‘Local contrast wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0
|
||||||
TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications)
|
TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications)
|
||||||
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications)
|
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications)
|
||||||
|
TP_LOCALLAB_MASKRECOTHRES;Recovery threshold
|
||||||
TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allows you to make fine adjustments.
|
TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allows you to make fine adjustments.
|
||||||
TP_LOCALLAB_MED;Medium
|
TP_LOCALLAB_MED;Medium
|
||||||
TP_LOCALLAB_MEDIAN;Median Low
|
TP_LOCALLAB_MEDIAN;Median Low
|
||||||
|
@ -150,6 +150,26 @@ constexpr float exclusion(float a, float b)
|
|||||||
return a + b - 2.f * a * b;
|
return a + b - 2.f * a * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void calcdif(float lmr, float &lmrc)
|
||||||
|
{ //approximative change between gamma sRGB g=2.4 s=12.92 and gamma LAB g=3.0 s=9.03
|
||||||
|
//useful to calculate action with dark and light area mask
|
||||||
|
//differences in 3 parts linear...very small diffrences with real...
|
||||||
|
float a0 = 7.6f / 11.6f;//11.6 sRGB - 7.6 Lab...11.6 max difference
|
||||||
|
float a01 = 62.f - 7.6f; //60 sRGB 62 Lab 60 max difference
|
||||||
|
float a11 = 60.f - 11.6f;
|
||||||
|
float a1 = a01 / a11;
|
||||||
|
float b1 = 62.f - a1 * 60.f;
|
||||||
|
float a2 = (100.f - 62.f) / (100.f - 60.f);
|
||||||
|
float b2 = 100.f - a2 * 100.f;
|
||||||
|
if(lmr < 11.6f) {
|
||||||
|
lmrc = a0 * lmr;
|
||||||
|
} else if (lmr < 60.) {
|
||||||
|
lmrc = a1 * lmr + b1;
|
||||||
|
} else {
|
||||||
|
lmrc = a2 * lmr + b2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void calcGammaLut(double gamma, double ts, LUTf &gammaLut)
|
void calcGammaLut(double gamma, double ts, LUTf &gammaLut)
|
||||||
{
|
{
|
||||||
double pwr = 1.0 / gamma;
|
double pwr = 1.0 / gamma;
|
||||||
@ -546,6 +566,8 @@ struct local_params {
|
|||||||
int softmet;
|
int softmet;
|
||||||
int blurmet;
|
int blurmet;
|
||||||
int blmet;
|
int blmet;
|
||||||
|
bool invmaskd;
|
||||||
|
bool invmask;
|
||||||
int smasktyp;
|
int smasktyp;
|
||||||
int chromet;
|
int chromet;
|
||||||
int quamet;
|
int quamet;
|
||||||
@ -557,6 +579,13 @@ struct local_params {
|
|||||||
float noiself2;
|
float noiself2;
|
||||||
float noiseldetail;
|
float noiseldetail;
|
||||||
int detailthr;
|
int detailthr;
|
||||||
|
float recothr;
|
||||||
|
float lowthr;
|
||||||
|
float higthr;
|
||||||
|
float recothrd;
|
||||||
|
float lowthrd;
|
||||||
|
float higthrd;
|
||||||
|
float decayd;
|
||||||
int noiselequal;
|
int noiselequal;
|
||||||
float noisechrodetail;
|
float noisechrodetail;
|
||||||
float bilat;
|
float bilat;
|
||||||
@ -846,6 +875,19 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
|
|||||||
lp.blurmet = 1;
|
lp.blurmet = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(sp).invmask == false) {
|
||||||
|
lp.invmask = false;
|
||||||
|
} else if (locallab.spots.at(sp).invmask == true) {
|
||||||
|
lp.invmask = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(sp).invmaskd == false) {
|
||||||
|
lp.invmaskd = false;
|
||||||
|
} else if (locallab.spots.at(sp).invmaskd == true) {
|
||||||
|
lp.invmaskd = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (locallab.spots.at(sp).showmaskblMethodtyp == "blur") {
|
if (locallab.spots.at(sp).showmaskblMethodtyp == "blur") {
|
||||||
lp.smasktyp = 0;
|
lp.smasktyp = 0;
|
||||||
} else if (locallab.spots.at(sp).showmaskblMethodtyp == "nois") {
|
} else if (locallab.spots.at(sp).showmaskblMethodtyp == "nois") {
|
||||||
@ -982,7 +1024,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
|
|||||||
if (lp.denoiena) {
|
if (lp.denoiena) {
|
||||||
local_noiself0 = 250.f * locwavCurveden[0];
|
local_noiself0 = 250.f * locwavCurveden[0];
|
||||||
local_noiself = 250.f * locwavCurveden[166];
|
local_noiself = 250.f * locwavCurveden[166];
|
||||||
local_noiself2 = 250.f * locwavCurveden[323];
|
local_noiself2 = 250.f * locwavCurveden[333];
|
||||||
local_noiselc = 200.f * locwavCurveden[500];
|
local_noiselc = 200.f * locwavCurveden[500];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -992,6 +1034,13 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
|
|||||||
float local_noisechrodetail = (float)locallab.spots.at(sp).noisechrodetail;
|
float local_noisechrodetail = (float)locallab.spots.at(sp).noisechrodetail;
|
||||||
int local_sensiden = locallab.spots.at(sp).sensiden;
|
int local_sensiden = locallab.spots.at(sp).sensiden;
|
||||||
float local_detailthr = (float)locallab.spots.at(sp).detailthr;
|
float local_detailthr = (float)locallab.spots.at(sp).detailthr;
|
||||||
|
float local_recothr = (float)locallab.spots.at(sp).recothres;
|
||||||
|
float local_lowthr = (float)locallab.spots.at(sp).lowthres;
|
||||||
|
float local_higthr = (float)locallab.spots.at(sp).higthres;
|
||||||
|
float local_recothrd = (float)locallab.spots.at(sp).recothresd;
|
||||||
|
float local_lowthrd = (float)locallab.spots.at(sp).lowthresd;
|
||||||
|
float local_higthrd = (float)locallab.spots.at(sp).higthresd;
|
||||||
|
float local_decayd = (float)locallab.spots.at(sp).decayd;
|
||||||
|
|
||||||
float local_noisecf = ((float)locallab.spots.at(sp).noisechrof) / 10.f;
|
float local_noisecf = ((float)locallab.spots.at(sp).noisechrof) / 10.f;
|
||||||
float local_noisecc = ((float)locallab.spots.at(sp).noisechroc) / 10.f;
|
float local_noisecc = ((float)locallab.spots.at(sp).noisechroc) / 10.f;
|
||||||
@ -1339,6 +1388,13 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
|
|||||||
lp.noiself2 = local_noiself2;
|
lp.noiself2 = local_noiself2;
|
||||||
lp.noiseldetail = local_noiseldetail;
|
lp.noiseldetail = local_noiseldetail;
|
||||||
lp.detailthr = local_detailthr;
|
lp.detailthr = local_detailthr;
|
||||||
|
lp.recothr = local_recothr;
|
||||||
|
lp.lowthr = local_lowthr;
|
||||||
|
lp.higthr = local_higthr;
|
||||||
|
lp.recothrd = local_recothrd;
|
||||||
|
lp.lowthrd = local_lowthrd;
|
||||||
|
lp.higthrd = local_higthrd;
|
||||||
|
lp.decayd = local_decayd;
|
||||||
lp.noiselequal = local_noiselequal;
|
lp.noiselequal = local_noiselequal;
|
||||||
lp.noisechrodetail = local_noisechrodetail;
|
lp.noisechrodetail = local_noisechrodetail;
|
||||||
lp.noiselc = local_noiselc;
|
lp.noiselc = local_noiselc;
|
||||||
@ -8933,14 +8989,22 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
|
|
||||||
if(lp.enablMask && lp.lnoiselow !=1.f && lp.smasktyp != 0) {
|
if(lp.enablMask && lp.lnoiselow !=1.f && lp.smasktyp != 0) {
|
||||||
//this code has been reviewed by Ingo in september 2020 PR5903
|
//this code has been reviewed by Ingo in september 2020 PR5903
|
||||||
|
float higc;
|
||||||
float hig = lp.thrhigh;
|
float hig = lp.thrhigh;
|
||||||
if(lp.thrhigh < lp.thrlow) {
|
calcdif(hig, higc);
|
||||||
hig = lp.thrlow + 0.01f;
|
float low = lp.thrlow;
|
||||||
|
float lowc;
|
||||||
|
calcdif(low, lowc);
|
||||||
|
|
||||||
|
if(higc < lowc) {
|
||||||
|
higc = lowc + 0.01f;
|
||||||
}
|
}
|
||||||
float alow = -(lp.lnoiselow - 1.f) / lp.thrlow;
|
|
||||||
|
float alow = -(lp.lnoiselow - 1.f) / lowc;
|
||||||
float blow = lp.lnoiselow;
|
float blow = lp.lnoiselow;
|
||||||
float ahigh = 0.9999f / (hig - 100.f);
|
float ahigh = 0.9999f / (higc - 100.f);
|
||||||
float bhigh = 1.f - hig * ahigh;
|
float bhigh = 1.f - higc * ahigh;
|
||||||
|
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp parallel for if (multiThread)
|
||||||
#endif
|
#endif
|
||||||
@ -8949,12 +9013,12 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
const float lM = bufmaskblurbl->L[ir][jr];
|
const float lM = bufmaskblurbl->L[ir][jr];
|
||||||
const float lmr = lM / 327.68f;
|
const float lmr = lM / 327.68f;
|
||||||
|
|
||||||
if (lM < 327.68f * lp.thrlow) {
|
if (lM < 327.68f * lowc) {
|
||||||
noisevarlum[(ir >> 1) * GW2 + (jr >> 1)] *= alow * lmr + blow; //3.f;//increase denoise
|
noisevarlum[(ir >> 1) * GW2 + (jr >> 1)] *= alow * lmr + blow;
|
||||||
} else if (lM < 327.68f * hig) {
|
} else if (lM < 327.68f * higc) {
|
||||||
// do nothing - denoise not change
|
// do nothing - denoise not change
|
||||||
} else {
|
} else {
|
||||||
noisevarlum[(ir >> 1) * GW2 + (jr >> 1)] *= ahigh * lmr + bhigh; //0.01f;//quasi suppress denoise
|
noisevarlum[(ir >> 1) * GW2 + (jr >> 1)] *= ahigh * lmr + bhigh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9348,8 +9412,81 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeNoise_Local(call, lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
|
||||||
if(lp.smasktyp != 0) {
|
if(lp.smasktyp != 0) {
|
||||||
|
if(lp.enablMask && lp.recothrd != 1.f && lp.smasktyp != 0) {
|
||||||
|
LabImage tmp3(GW, GH);
|
||||||
|
|
||||||
|
for (int ir = 0; ir < GH; ir++){
|
||||||
|
for (int jr = 0; jr < GW; jr++) {
|
||||||
|
tmp3.L[ir][jr] = original->L[ir][jr];
|
||||||
|
tmp3.a[ir][jr] = original->a[ir][jr];
|
||||||
|
tmp3.b[ir][jr] = original->b[ir][jr];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
array2D<float> masklum;
|
||||||
|
masklum(GW, GH);
|
||||||
|
for (int ir = 0; ir < GH; ir++)
|
||||||
|
for (int jr = 0; jr < GW; jr++) {
|
||||||
|
masklum[ir][jr] = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float hig = lp.higthrd;
|
||||||
|
float higc;
|
||||||
|
calcdif(hig, higc);
|
||||||
|
float low = lp.lowthrd;
|
||||||
|
float lowc;
|
||||||
|
calcdif(low, lowc);
|
||||||
|
|
||||||
|
if(higc < lowc) {
|
||||||
|
higc = lowc + 0.01f;
|
||||||
|
}
|
||||||
|
float th = (lp.recothrd - 1.f);
|
||||||
|
float ahigh = th / (higc - 100.f);
|
||||||
|
float bhigh = 1.f - higc * ahigh;
|
||||||
|
|
||||||
|
float alow = th / lowc;
|
||||||
|
float blow = 1.f - th;
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int ir = 0; ir < GH; ir++)
|
||||||
|
for (int jr = 0; jr < GW; jr++) {
|
||||||
|
const float lM = bufmaskblurbl->L[ir][jr];
|
||||||
|
const float lmr = lM / 327.68f;
|
||||||
|
if (lM < 327.68f * lowc) {
|
||||||
|
masklum[ir][jr] = alow * lmr + blow;
|
||||||
|
} else if (lM < 327.68f * higc) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
masklum[ir][jr] = ahigh * lmr + bhigh;
|
||||||
|
}
|
||||||
|
float k = masklum[ir][jr];
|
||||||
|
if(lp.invmaskd == true) {
|
||||||
|
masklum[ir][jr] = 1 - pow(k, lp.decayd);
|
||||||
|
} else {
|
||||||
|
masklum[ir][jr] = pow(k, lp.decayd);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
boxblur(masklum, masklum, 10 / sk, GW, GH, false);
|
||||||
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int i = 0; i < GH; ++i) {
|
||||||
|
for (int j = 0; j < GW; ++j) {
|
||||||
|
tmp1.L[i][j] = (tmp3.L[i][j] - tmp1.L[i][j]) * LIM01(masklum[i][j]) + tmp1.L[i][j];
|
||||||
|
tmp1.a[i][j] = (tmp3.a[i][j] - tmp1.a[i][j]) * LIM01(masklum[i][j]) + tmp1.a[i][j];
|
||||||
|
tmp1.b[i][j] = (tmp3.b[i][j] - tmp1.b[i][j]) * LIM01(masklum[i][j]) + tmp1.b[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
masklum.free();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
DeNoise_Local(call, lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
DeNoise_Local(call, lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
||||||
} else {
|
} else {
|
||||||
DeNoise_Local(call, lp, original, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
DeNoise_Local(call, lp, original, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
||||||
@ -9535,15 +9672,21 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
if(lp.enablMask && lp.lnoiselow != 1.f && lp.smasktyp != 0) {
|
if(lp.enablMask && lp.lnoiselow != 1.f && lp.smasktyp != 0) {
|
||||||
//this code has been reviewed by Ingo in september 2020 PR5903
|
//this code has been reviewed by Ingo in september 2020 PR5903
|
||||||
//i just change parameters to better progressivity
|
//i just change parameters to better progressivity
|
||||||
|
float higc;
|
||||||
float hig = lp.thrhigh;
|
float hig = lp.thrhigh;
|
||||||
if(lp.thrhigh < lp.thrlow) {
|
calcdif(hig, higc);
|
||||||
hig = lp.thrlow + 0.01f;
|
float low = lp.thrlow;
|
||||||
|
float lowc;
|
||||||
|
calcdif(low, lowc);
|
||||||
|
|
||||||
|
if(higc < lowc) {
|
||||||
|
higc = lowc + 0.01f;
|
||||||
}
|
}
|
||||||
|
|
||||||
float alow = -(lp.lnoiselow - 1.f) / lp.thrlow;
|
float alow = -(lp.lnoiselow - 1.f) / lowc;
|
||||||
float blow = lp.lnoiselow;
|
float blow = lp.lnoiselow;
|
||||||
float ahigh = 0.9999f / (hig - 100.f);
|
float ahigh = 0.9999f / (higc - 100.f);
|
||||||
float bhigh = 1.f - hig * ahigh;
|
float bhigh = 1.f - higc * ahigh;
|
||||||
|
|
||||||
|
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
@ -9553,9 +9696,9 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
for (int jr = 0; jr < bfw; jr++) {
|
for (int jr = 0; jr < bfw; jr++) {
|
||||||
const float lM = bufmaskblurbl->L[ir + ystart][jr + xstart];
|
const float lM = bufmaskblurbl->L[ir + ystart][jr + xstart];
|
||||||
const float lmr = lM / 327.68f;
|
const float lmr = lM / 327.68f;
|
||||||
if (lM < 327.68f * lp.thrlow) {
|
if (lM < 327.68f * lowc) {
|
||||||
noisevarlum[(ir >> 1) * bfw2 + (jr >> 1)] *= alow * lmr + blow;
|
noisevarlum[(ir >> 1) * bfw2 + (jr >> 1)] *= alow * lmr + blow;
|
||||||
} else if (lM < 327.68f * hig) {
|
} else if (lM < 327.68f * higc) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} else {
|
} else {
|
||||||
noisevarlum[(ir >> 1) * bfw2 + (jr >> 1)] *= ahigh * lmr + bhigh;
|
noisevarlum[(ir >> 1) * bfw2 + (jr >> 1)] *= ahigh * lmr + bhigh;
|
||||||
@ -9948,6 +10091,91 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (lp.smasktyp != 0) {
|
if (lp.smasktyp != 0) {
|
||||||
|
if(lp.enablMask && lp.recothrd != 1.f && lp.smasktyp != 0) {
|
||||||
|
LabImage tmp3(bfw, bfh);
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
||||||
|
#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) {
|
||||||
|
tmp3.L[loy - begy][lox - begx] = original->L[y][x];
|
||||||
|
tmp3.a[loy - begy][lox - begx] = original->a[y][x];
|
||||||
|
tmp3.b[loy - begy][lox - begx] = original->b[y][x];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
array2D<float> masklum;
|
||||||
|
masklum(bfw, bfh);
|
||||||
|
for (int ir = 0; ir < bfh; ir++){
|
||||||
|
for (int jr = 0; jr < bfw; jr++) {
|
||||||
|
masklum[ir][jr] = 1.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float hig = lp.higthrd;
|
||||||
|
float higc;
|
||||||
|
calcdif(hig, higc);
|
||||||
|
float low = lp.lowthrd;
|
||||||
|
float lowc;
|
||||||
|
calcdif(low, lowc);
|
||||||
|
|
||||||
|
if(higc < lowc) {
|
||||||
|
higc = lowc + 0.01f;
|
||||||
|
}
|
||||||
|
float th = (lp.recothrd - 1.f);
|
||||||
|
float ahigh = th / (higc - 100.f);
|
||||||
|
float bhigh = 1.f - higc * ahigh;
|
||||||
|
|
||||||
|
float alow = th / lowc;
|
||||||
|
float blow = 1.f - th;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int y = ystart; y < yend; y++) {
|
||||||
|
for (int x = xstart, lox = cx + x; x < xend; x++, lox++) {
|
||||||
|
|
||||||
|
const float lM = bufmaskblurbl->L[y][x];
|
||||||
|
const float lmr = lM / 327.68f;
|
||||||
|
if (lM < 327.68f * lowc) {
|
||||||
|
masklum[y-ystart][x-xstart] = alow * lmr + blow;
|
||||||
|
} else if (lM < 327.68f * higc) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
masklum[y-ystart][x-xstart] = ahigh * lmr + bhigh;
|
||||||
|
}
|
||||||
|
float k = masklum[y-ystart][x-xstart];
|
||||||
|
if(lp.invmaskd == true) {
|
||||||
|
masklum[y-ystart][x-xstart] = 1 - pow(k, lp.decayd);
|
||||||
|
} else {
|
||||||
|
masklum[y-ystart][x-xstart] = pow(k, lp.decayd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
boxblur(masklum, masklum, 10 / sk, bfw, bfh, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int y = 0; y < bfh; y++) {
|
||||||
|
for (int x = 0; x < bfw; x++) {
|
||||||
|
bufwv.L[y][x] = (tmp3.L[y][x] - bufwv.L[y][x]) * LIM01(masklum[y][x]) + bufwv.L[y][x];
|
||||||
|
bufwv.a[y][x] = (tmp3.a[y][x] - bufwv.a[y][x]) * LIM01(masklum[y][x]) + bufwv.a[y][x];
|
||||||
|
bufwv.b[y][x] = (tmp3.b[y][x] - bufwv.b[y][x]) * LIM01(masklum[y][x]) + bufwv.b[y][x];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
masklum.free();
|
||||||
|
}
|
||||||
|
|
||||||
DeNoise_Local2(lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, bufwv, cx, cy, sk);
|
DeNoise_Local2(lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, bufwv, cx, cy, sk);
|
||||||
} else {
|
} else {
|
||||||
DeNoise_Local2(lp, original, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, bufwv, cx, cy, sk);
|
DeNoise_Local2(lp, original, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, bufwv, cx, cy, sk);
|
||||||
@ -10705,6 +10933,8 @@ void ImProcFunctions::Lab_Local(
|
|||||||
// if (((radius > 1.5 * GAUSS_SKIP && lp.rad > 1.6) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 0 || lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) { // radius < GAUSS_SKIP means no gauss, just copy of original image
|
// if (((radius > 1.5 * GAUSS_SKIP && lp.rad > 1.6) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 0 || lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) { // radius < GAUSS_SKIP means no gauss, just copy of original image
|
||||||
std::unique_ptr<LabImage> tmp1;
|
std::unique_ptr<LabImage> tmp1;
|
||||||
std::unique_ptr<LabImage> tmp2;
|
std::unique_ptr<LabImage> tmp2;
|
||||||
|
std::unique_ptr<LabImage> tmp3;
|
||||||
|
std::unique_ptr<LabImage> maskk;
|
||||||
int ystart = rtengine::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0);
|
int ystart = rtengine::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0);
|
||||||
int yend = rtengine::min(static_cast<int>(lp.yc + lp.ly) - cy, original->H);
|
int yend = rtengine::min(static_cast<int>(lp.yc + lp.ly) - cy, original->H);
|
||||||
int xstart = rtengine::max(static_cast<int>(lp.xc - lp.lxL) - cx, 0);
|
int xstart = rtengine::max(static_cast<int>(lp.xc - lp.lxL) - cx, 0);
|
||||||
@ -10734,6 +10964,8 @@ void ImProcFunctions::Lab_Local(
|
|||||||
if (lp.blurmet == 0) {
|
if (lp.blurmet == 0) {
|
||||||
if (bfw > 0 && bfh > 0) {
|
if (bfw > 0 && bfh > 0) {
|
||||||
tmp1.reset(new LabImage(bfw, bfh));
|
tmp1.reset(new LabImage(bfw, bfh));
|
||||||
|
tmp3.reset(new LabImage(bfw, bfh));
|
||||||
|
maskk.reset(new LabImage(bfw, bfh));
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
||||||
#endif
|
#endif
|
||||||
@ -10748,12 +10980,16 @@ void ImProcFunctions::Lab_Local(
|
|||||||
} else if (lp.blurmet == 1) {
|
} else if (lp.blurmet == 1) {
|
||||||
tmp1.reset(new LabImage(transformed->W, transformed->H));
|
tmp1.reset(new LabImage(transformed->W, transformed->H));
|
||||||
tmp2.reset(new LabImage(transformed->W, transformed->H));
|
tmp2.reset(new LabImage(transformed->W, transformed->H));
|
||||||
|
tmp3.reset(new LabImage(transformed->W, transformed->H));
|
||||||
|
|
||||||
for (int y = 0; y < GH ; y++) {
|
for (int y = 0; y < GH ; y++) {
|
||||||
for (int x = 0; x < GW; x++) {
|
for (int x = 0; x < GW; x++) {
|
||||||
tmp2->L[y][x] = original->L[y][x];
|
tmp2->L[y][x] = original->L[y][x];
|
||||||
tmp2->a[y][x] = original->a[y][x];
|
tmp2->a[y][x] = original->a[y][x];
|
||||||
tmp2->b[y][x] = original->b[y][x];
|
tmp2->b[y][x] = original->b[y][x];
|
||||||
|
tmp3->L[y][x] = original->L[y][x];
|
||||||
|
tmp3->a[y][x] = original->a[y][x];
|
||||||
|
tmp3->b[y][x] = original->b[y][x];
|
||||||
tmp1->L[y][x] = original->L[y][x];
|
tmp1->L[y][x] = original->L[y][x];
|
||||||
tmp1->a[y][x] = original->a[y][x];
|
tmp1->a[y][x] = original->a[y][x];
|
||||||
tmp1->b[y][x] = original->b[y][x];
|
tmp1->b[y][x] = original->b[y][x];
|
||||||
@ -10968,6 +11204,9 @@ void ImProcFunctions::Lab_Local(
|
|||||||
tmp1->L[y - ystart][x - xstart] = original->L[y][x];
|
tmp1->L[y - ystart][x - xstart] = original->L[y][x];
|
||||||
tmp1->a[y - ystart][x - xstart] = original->a[y][x];
|
tmp1->a[y - ystart][x - xstart] = original->a[y][x];
|
||||||
tmp1->b[y - ystart][x - xstart] = original->b[y][x];
|
tmp1->b[y - ystart][x - xstart] = original->b[y][x];
|
||||||
|
tmp3->L[y - ystart][x - xstart] = original->L[y][x];
|
||||||
|
tmp3->a[y - ystart][x - xstart] = original->a[y][x];
|
||||||
|
tmp3->b[y - ystart][x - xstart] = original->b[y][x];
|
||||||
bufgb->L[y - ystart][x - xstart] = original->L[y][x];
|
bufgb->L[y - ystart][x - xstart] = original->L[y][x];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11044,6 +11283,67 @@ void ImProcFunctions::Lab_Local(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(lp.enablMask && lp.recothr != 1.f && lp.smasktyp != 1) {
|
||||||
|
array2D<float> masklum;
|
||||||
|
masklum(bfw, bfh);
|
||||||
|
for (int ir = 0; ir < bfh; ir++)
|
||||||
|
for (int jr = 0; jr < bfw; jr++) {
|
||||||
|
masklum[ir][jr] = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float hig = lp.higthr;
|
||||||
|
float higc;
|
||||||
|
calcdif(hig, higc);
|
||||||
|
float low = lp.lowthr;
|
||||||
|
float lowc;
|
||||||
|
calcdif(low, lowc);
|
||||||
|
|
||||||
|
if(higc < lowc) {
|
||||||
|
higc = lowc + 0.01f;
|
||||||
|
}
|
||||||
|
float th = (lp.recothr - 1.f);
|
||||||
|
float ahigh = th / (higc - 100.f);
|
||||||
|
float bhigh = 1.f - higc * ahigh;
|
||||||
|
|
||||||
|
float alow = th / lowc;
|
||||||
|
float blow = 1.f - th;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int ir = 0; ir < bfh; ir++)
|
||||||
|
for (int jr = 0; jr < bfw; jr++) {
|
||||||
|
const float lM = bufmaskblurbl->L[ir + ystart][jr + xstart];
|
||||||
|
const float lmr = lM / 327.68f;
|
||||||
|
if (lM < 327.68f * lowc) {
|
||||||
|
masklum[ir][jr] = alow * lmr + blow;
|
||||||
|
} else if (lM < 327.68f * higc) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
masklum[ir][jr] = ahigh * lmr + bhigh;
|
||||||
|
}
|
||||||
|
if(lp.invmask == true) {
|
||||||
|
float k = masklum[ir][jr];
|
||||||
|
masklum[ir][jr] = 1 - k*k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
boxblur(masklum, masklum, 10 / sk, bfw, bfh, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int i = 0; i < bfh; ++i) {
|
||||||
|
for (int j = 0; j < bfw; ++j) {
|
||||||
|
tmp1->L[i][j] = (tmp3->L[i][j] - tmp1->L[i][j]) * LIM01(masklum[i][j]) + tmp1->L[i][j];
|
||||||
|
tmp1->a[i][j] = (tmp3->a[i][j] - tmp1->a[i][j]) * LIM01(masklum[i][j]) + tmp1->a[i][j];
|
||||||
|
tmp1->b[i][j] = (tmp3->b[i][j] - tmp1->b[i][j]) * LIM01(masklum[i][j]) + tmp1->b[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
masklum.free();
|
||||||
|
}
|
||||||
|
|
||||||
delete tmpImage;
|
delete tmpImage;
|
||||||
}
|
}
|
||||||
@ -11060,6 +11360,9 @@ void ImProcFunctions::Lab_Local(
|
|||||||
tmp1->a[y][x] = original->a[y][x];
|
tmp1->a[y][x] = original->a[y][x];
|
||||||
tmp1->b[y][x] = original->b[y][x];
|
tmp1->b[y][x] = original->b[y][x];
|
||||||
tmp2->L[y][x] = original->L[y][x];
|
tmp2->L[y][x] = original->L[y][x];
|
||||||
|
tmp3->L[y][x] = original->L[y][x];
|
||||||
|
tmp3->a[y][x] = original->a[y][x];
|
||||||
|
tmp3->b[y][x] = original->b[y][x];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11135,6 +11438,66 @@ void ImProcFunctions::Lab_Local(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(lp.enablMask && lp.recothr != 1.f && lp.smasktyp != 1) {
|
||||||
|
array2D<float> masklum;
|
||||||
|
masklum(GW, GH);
|
||||||
|
for (int ir = 0; ir < GH; ir++)
|
||||||
|
for (int jr = 0; jr < GW; jr++) {
|
||||||
|
masklum[ir][jr] = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float hig = lp.higthr;
|
||||||
|
float higc;
|
||||||
|
calcdif(hig, higc);
|
||||||
|
float low = lp.lowthr;
|
||||||
|
float lowc;
|
||||||
|
calcdif(low, lowc);
|
||||||
|
|
||||||
|
if(higc < lowc) {
|
||||||
|
higc = lowc + 0.01f;
|
||||||
|
}
|
||||||
|
float th = (lp.recothr - 1.f);
|
||||||
|
float ahigh = th / (higc - 100.f);
|
||||||
|
float bhigh = 1.f - higc * ahigh;
|
||||||
|
|
||||||
|
float alow = th / lowc;
|
||||||
|
float blow = 1.f - th;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int ir = 0; ir < GH; ir++)
|
||||||
|
for (int jr = 0; jr < GW; jr++) {
|
||||||
|
const float lM = bufmaskblurbl->L[ir][jr];
|
||||||
|
const float lmr = lM / 327.68f;
|
||||||
|
if (lM < 327.68f * lowc) {
|
||||||
|
masklum[ir][jr] = alow * lmr + blow;
|
||||||
|
masklum[ir][jr] = alow * lmr + blow;
|
||||||
|
} else if (lM < 327.68f * higc) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
masklum[ir][jr] = (ahigh * lmr + bhigh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
boxblur(masklum, masklum, 10 / sk, GW, GH, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
for (int i = 0; i < GH; ++i) {
|
||||||
|
for (int j = 0; j < GW; ++j) {
|
||||||
|
tmp1->L[i][j] = (tmp3->L[i][j] - tmp1->L[i][j]) * LIM01(masklum[i][j]) + tmp1->L[i][j];
|
||||||
|
tmp1->a[i][j] = (tmp3->a[i][j] - tmp1->a[i][j]) * LIM01(masklum[i][j]) + tmp1->a[i][j];
|
||||||
|
tmp1->b[i][j] = (tmp3->b[i][j] - tmp1->b[i][j]) * LIM01(masklum[i][j]) + tmp1->b[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
masklum.free();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
delete tmpImage;
|
delete tmpImage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1007,8 +1007,17 @@ enum ProcEventCode {
|
|||||||
EvlocallabwavCurvehue = 981,
|
EvlocallabwavCurvehue = 981,
|
||||||
Evlocallablevelthr = 982,
|
Evlocallablevelthr = 982,
|
||||||
Evlocallablevelthrlow = 983,
|
Evlocallablevelthrlow = 983,
|
||||||
Evlocallabusemask1 = 984,
|
Evlocallabusemask1 = 984,
|
||||||
Evlocallablnoiselow = 985,
|
Evlocallablnoiselow = 985,
|
||||||
|
Evlocallabrecothres = 986,
|
||||||
|
Evlocallablowthres = 987,
|
||||||
|
Evlocallabhigthres = 988,
|
||||||
|
Evlocallabrecothresd = 989,
|
||||||
|
Evlocallablowthresd = 990,
|
||||||
|
Evlocallabhigthresd = 991,
|
||||||
|
Evlocallabinvmaskd = 992,
|
||||||
|
Evlocallabinvmask = 993,
|
||||||
|
Evlocallabdecayd = 994,
|
||||||
NUMOFEVENTS
|
NUMOFEVENTS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3298,6 +3298,13 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
|||||||
itera(1),
|
itera(1),
|
||||||
guidbl(0),
|
guidbl(0),
|
||||||
strbl(50),
|
strbl(50),
|
||||||
|
recothres(1.),
|
||||||
|
lowthres(12.),
|
||||||
|
higthres(85.),
|
||||||
|
recothresd(1.),
|
||||||
|
lowthresd(12.),
|
||||||
|
higthresd(85.),
|
||||||
|
decayd(2.),
|
||||||
isogr(400),
|
isogr(400),
|
||||||
strengr(0),
|
strengr(0),
|
||||||
scalegr(100),
|
scalegr(100),
|
||||||
@ -3308,7 +3315,9 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
|||||||
blurMethod("norm"),
|
blurMethod("norm"),
|
||||||
medMethod("33"),
|
medMethod("33"),
|
||||||
usemask(false),
|
usemask(false),
|
||||||
levelthr(40.),
|
invmaskd(false),
|
||||||
|
invmask(false),
|
||||||
|
levelthr(85.),
|
||||||
lnoiselow(1.),
|
lnoiselow(1.),
|
||||||
levelthrlow(12.),
|
levelthrlow(12.),
|
||||||
activlum(true),
|
activlum(true),
|
||||||
@ -3331,7 +3340,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
|||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0.35,
|
0.35,
|
||||||
0.5,
|
0.66,
|
||||||
0.,
|
0.,
|
||||||
0.35,
|
0.35,
|
||||||
0.35,
|
0.35,
|
||||||
@ -4342,6 +4351,13 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
|||||||
&& itera == other.itera
|
&& itera == other.itera
|
||||||
&& guidbl == other.guidbl
|
&& guidbl == other.guidbl
|
||||||
&& strbl == other.strbl
|
&& strbl == other.strbl
|
||||||
|
&& recothres == other.recothres
|
||||||
|
&& lowthres == other.lowthres
|
||||||
|
&& higthres == other.higthres
|
||||||
|
&& recothresd == other.recothresd
|
||||||
|
&& lowthresd == other.lowthresd
|
||||||
|
&& higthresd == other.higthresd
|
||||||
|
&& decayd == other.decayd
|
||||||
&& isogr == other.isogr
|
&& isogr == other.isogr
|
||||||
&& strengr == other.strengr
|
&& strengr == other.strengr
|
||||||
&& scalegr == other.scalegr
|
&& scalegr == other.scalegr
|
||||||
@ -4351,6 +4367,8 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
|||||||
&& quamethod == other.quamethod
|
&& quamethod == other.quamethod
|
||||||
&& blurMethod == other.blurMethod
|
&& blurMethod == other.blurMethod
|
||||||
&& usemask == other.usemask
|
&& usemask == other.usemask
|
||||||
|
&& invmaskd == other.invmaskd
|
||||||
|
&& invmask == other.invmask
|
||||||
&& levelthr == other.levelthr
|
&& levelthr == other.levelthr
|
||||||
&& lnoiselow == other.lnoiselow
|
&& lnoiselow == other.lnoiselow
|
||||||
&& levelthrlow == other.levelthrlow
|
&& levelthrlow == other.levelthrlow
|
||||||
@ -5928,6 +5946,13 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
|||||||
saveToKeyfile(!pedited || spot_edited->itera, "Locallab", "Iteramed_" + index_str, spot.itera, keyFile);
|
saveToKeyfile(!pedited || spot_edited->itera, "Locallab", "Iteramed_" + index_str, spot.itera, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->guidbl, "Locallab", "Guidbl_" + index_str, spot.guidbl, keyFile);
|
saveToKeyfile(!pedited || spot_edited->guidbl, "Locallab", "Guidbl_" + index_str, spot.guidbl, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->strbl, "Locallab", "Strbl_" + index_str, spot.strbl, keyFile);
|
saveToKeyfile(!pedited || spot_edited->strbl, "Locallab", "Strbl_" + index_str, spot.strbl, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->recothres, "Locallab", "Recothres_" + index_str, spot.recothres, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->lowthres, "Locallab", "Lowthres_" + index_str, spot.lowthres, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->higthres, "Locallab", "Higthres_" + index_str, spot.higthres, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->recothresd, "Locallab", "Recothresd_" + index_str, spot.recothresd, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->lowthresd, "Locallab", "Lowthresd_" + index_str, spot.lowthresd, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->higthresd, "Locallab", "Higthresd_" + index_str, spot.higthresd, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->decayd, "Locallab", "Decayd_" + index_str, spot.decayd, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->isogr, "Locallab", "Isogr_" + index_str, spot.isogr, keyFile);
|
saveToKeyfile(!pedited || spot_edited->isogr, "Locallab", "Isogr_" + index_str, spot.isogr, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->strengr, "Locallab", "Strengr_" + index_str, spot.strengr, keyFile);
|
saveToKeyfile(!pedited || spot_edited->strengr, "Locallab", "Strengr_" + index_str, spot.strengr, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->scalegr, "Locallab", "Scalegr_" + index_str, spot.scalegr, keyFile);
|
saveToKeyfile(!pedited || spot_edited->scalegr, "Locallab", "Scalegr_" + index_str, spot.scalegr, keyFile);
|
||||||
@ -5937,6 +5962,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
|||||||
saveToKeyfile(!pedited || spot_edited->quamethod, "Locallab", "QuaMethod_" + index_str, spot.quamethod, keyFile);
|
saveToKeyfile(!pedited || spot_edited->quamethod, "Locallab", "QuaMethod_" + index_str, spot.quamethod, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->blurMethod, "Locallab", "BlurMethod_" + index_str, spot.blurMethod, keyFile);
|
saveToKeyfile(!pedited || spot_edited->blurMethod, "Locallab", "BlurMethod_" + index_str, spot.blurMethod, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->usemask, "Locallab", "Usemaskb_" + index_str, spot.usemask, keyFile);
|
saveToKeyfile(!pedited || spot_edited->usemask, "Locallab", "Usemaskb_" + index_str, spot.usemask, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->invmaskd, "Locallab", "Invmaskd_" + index_str, spot.invmaskd, keyFile);
|
||||||
|
saveToKeyfile(!pedited || spot_edited->invmask, "Locallab", "Invmask_" + index_str, spot.invmask, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->levelthr, "Locallab", "Levelthr_" + index_str, spot.levelthr, keyFile);
|
saveToKeyfile(!pedited || spot_edited->levelthr, "Locallab", "Levelthr_" + index_str, spot.levelthr, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->lnoiselow, "Locallab", "Lnoiselow_" + index_str, spot.lnoiselow, keyFile);
|
saveToKeyfile(!pedited || spot_edited->lnoiselow, "Locallab", "Lnoiselow_" + index_str, spot.lnoiselow, keyFile);
|
||||||
saveToKeyfile(!pedited || spot_edited->levelthrlow, "Locallab", "Levelthrlow_" + index_str, spot.levelthrlow, keyFile);
|
saveToKeyfile(!pedited || spot_edited->levelthrlow, "Locallab", "Levelthrlow_" + index_str, spot.levelthrlow, keyFile);
|
||||||
@ -7730,6 +7757,13 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
|||||||
assignFromKeyfile(keyFile, "Locallab", "Iteramed_" + index_str, pedited, spot.itera, spotEdited.itera);
|
assignFromKeyfile(keyFile, "Locallab", "Iteramed_" + index_str, pedited, spot.itera, spotEdited.itera);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Guidbl_" + index_str, pedited, spot.guidbl, spotEdited.guidbl);
|
assignFromKeyfile(keyFile, "Locallab", "Guidbl_" + index_str, pedited, spot.guidbl, spotEdited.guidbl);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Strbl_" + index_str, pedited, spot.strbl, spotEdited.strbl);
|
assignFromKeyfile(keyFile, "Locallab", "Strbl_" + index_str, pedited, spot.strbl, spotEdited.strbl);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Recothres_" + index_str, pedited, spot.recothres, spotEdited.recothres);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Lowthres_" + index_str, pedited, spot.lowthres, spotEdited.lowthres);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Higthres_" + index_str, pedited, spot.higthres, spotEdited.higthres);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Recothresd_" + index_str, pedited, spot.recothresd, spotEdited.recothresd);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Lowthresd_" + index_str, pedited, spot.lowthresd, spotEdited.lowthresd);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Higthresd_" + index_str, pedited, spot.higthresd, spotEdited.higthresd);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Decayd_" + index_str, pedited, spot.decayd, spotEdited.decayd);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Isogr_" + index_str, pedited, spot.isogr, spotEdited.isogr);
|
assignFromKeyfile(keyFile, "Locallab", "Isogr_" + index_str, pedited, spot.isogr, spotEdited.isogr);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Strengr_" + index_str, pedited, spot.strengr, spotEdited.strengr);
|
assignFromKeyfile(keyFile, "Locallab", "Strengr_" + index_str, pedited, spot.strengr, spotEdited.strengr);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Scalegr_" + index_str, pedited, spot.scalegr, spotEdited.scalegr);
|
assignFromKeyfile(keyFile, "Locallab", "Scalegr_" + index_str, pedited, spot.scalegr, spotEdited.scalegr);
|
||||||
@ -7739,6 +7773,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
|||||||
assignFromKeyfile(keyFile, "Locallab", "QuaMethod_" + index_str, pedited, spot.quamethod, spotEdited.quamethod);
|
assignFromKeyfile(keyFile, "Locallab", "QuaMethod_" + index_str, pedited, spot.quamethod, spotEdited.quamethod);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "BlurMethod_" + index_str, pedited, spot.blurMethod, spotEdited.blurMethod);
|
assignFromKeyfile(keyFile, "Locallab", "BlurMethod_" + index_str, pedited, spot.blurMethod, spotEdited.blurMethod);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Usemaskb_" + index_str, pedited, spot.usemask, spotEdited.usemask);
|
assignFromKeyfile(keyFile, "Locallab", "Usemaskb_" + index_str, pedited, spot.usemask, spotEdited.usemask);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Invmaskd_" + index_str, pedited, spot.invmaskd, spotEdited.invmaskd);
|
||||||
|
assignFromKeyfile(keyFile, "Locallab", "Invmask_" + index_str, pedited, spot.invmask, spotEdited.invmask);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Levelthr_" + index_str, pedited, spot.levelthr, spotEdited.levelthr);
|
assignFromKeyfile(keyFile, "Locallab", "Levelthr_" + index_str, pedited, spot.levelthr, spotEdited.levelthr);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Lnoiselow_" + index_str, pedited, spot.lnoiselow, spotEdited.lnoiselow);
|
assignFromKeyfile(keyFile, "Locallab", "Lnoiselow_" + index_str, pedited, spot.lnoiselow, spotEdited.lnoiselow);
|
||||||
assignFromKeyfile(keyFile, "Locallab", "Levelthrlow_" + index_str, pedited, spot.levelthrlow, spotEdited.levelthrlow);
|
assignFromKeyfile(keyFile, "Locallab", "Levelthrlow_" + index_str, pedited, spot.levelthrlow, spotEdited.levelthrlow);
|
||||||
|
@ -1205,6 +1205,13 @@ struct LocallabParams {
|
|||||||
int itera;
|
int itera;
|
||||||
int guidbl;
|
int guidbl;
|
||||||
int strbl;
|
int strbl;
|
||||||
|
double recothres;
|
||||||
|
double lowthres;
|
||||||
|
double higthres;
|
||||||
|
double recothresd;
|
||||||
|
double lowthresd;
|
||||||
|
double higthresd;
|
||||||
|
double decayd;
|
||||||
int isogr;
|
int isogr;
|
||||||
int strengr;
|
int strengr;
|
||||||
int scalegr;
|
int scalegr;
|
||||||
@ -1215,6 +1222,8 @@ 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 usemask;
|
bool usemask;
|
||||||
|
bool invmaskd;
|
||||||
|
bool invmask;
|
||||||
double levelthr;
|
double levelthr;
|
||||||
double lnoiselow;
|
double lnoiselow;
|
||||||
double levelthrlow;
|
double levelthrlow;
|
||||||
|
@ -1012,7 +1012,17 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
|||||||
LUMINANCECURVE, // Evlocallablevelthr
|
LUMINANCECURVE, // Evlocallablevelthr
|
||||||
LUMINANCECURVE, // Evlocallablevelthrlow
|
LUMINANCECURVE, // Evlocallablevelthrlow
|
||||||
LUMINANCECURVE, //Evlocallabusemask1
|
LUMINANCECURVE, //Evlocallabusemask1
|
||||||
LUMINANCECURVE // Evlocallablnoiselow
|
LUMINANCECURVE, // Evlocallablnoiselow
|
||||||
|
LUMINANCECURVE, // Evlocallabrecothres
|
||||||
|
LUMINANCECURVE, // Evlocallablowthres
|
||||||
|
LUMINANCECURVE, // Evlocallabhigthres
|
||||||
|
LUMINANCECURVE, // Evlocallabrecothresd
|
||||||
|
LUMINANCECURVE, // Evlocallablowthresd
|
||||||
|
LUMINANCECURVE, // Evlocallabhigthresd
|
||||||
|
LUMINANCECURVE, // Evlocallabinvmaskd
|
||||||
|
LUMINANCECURVE, // Evlocallabinvmask
|
||||||
|
LUMINANCECURVE // Evlocallabdecayd
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5751,6 +5751,10 @@ LocallabBlur::LocallabBlur():
|
|||||||
guidbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GUIDBL"), 0, 1000, 1, 0))),
|
guidbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GUIDBL"), 0, 1000, 1, 0))),
|
||||||
strbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRBL"), 0, 100, 1, 50))),
|
strbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRBL"), 0, 100, 1, 50))),
|
||||||
epsbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EPSBL"), -10, 10, 1, 0))),
|
epsbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EPSBL"), -10, 10, 1, 0))),
|
||||||
|
expdenoise2(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
|
||||||
|
recothres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
|
||||||
|
lowthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
|
||||||
|
higthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
|
||||||
sensibn(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 40))),
|
sensibn(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 40))),
|
||||||
blurMethod(Gtk::manage(new MyComboBoxText())),
|
blurMethod(Gtk::manage(new MyComboBoxText())),
|
||||||
invbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVBL")))),
|
invbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVBL")))),
|
||||||
@ -5763,10 +5767,14 @@ LocallabBlur::LocallabBlur():
|
|||||||
expdenoise1(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI1_EXP")))),
|
expdenoise1(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI1_EXP")))),
|
||||||
maskusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
maskusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
||||||
maskunusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
|
maskunusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
|
||||||
|
maskusable2(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
||||||
|
maskunusable2(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
|
||||||
|
maskusable3(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
||||||
|
maskunusable3(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
|
||||||
usemask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_USEMASK")))),
|
usemask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_USEMASK")))),
|
||||||
lnoiselow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLNOISELOW"), 0.7, 2., 0.01, 1.))),
|
lnoiselow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLNOISELOW"), 0.7, 2., 0.01, 1.))),
|
||||||
levelthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 10., 100., 1., 40.))),
|
levelthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
|
||||||
levelthrlow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 100., 1., 12.))),
|
levelthrlow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
|
||||||
noiselumf0(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINEZERO"), MINCHRO, MAXCHRO, 0.01, 0.))),
|
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.))),
|
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.))),
|
noiselumf2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINETWO"), MINCHRO, MAXCHRO, 0.01, 0.))),
|
||||||
@ -5781,6 +5789,13 @@ LocallabBlur::LocallabBlur():
|
|||||||
detailFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DETAILFRA")))),
|
detailFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DETAILFRA")))),
|
||||||
detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 50))),
|
detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 50))),
|
||||||
adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-yellow-small.png")), Gtk::manage(new RTImage("circle-red-green-small.png"))))),
|
adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-yellow-small.png")), Gtk::manage(new RTImage("circle-red-green-small.png"))))),
|
||||||
|
expdenoise3(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
|
||||||
|
recothresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
|
||||||
|
lowthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
|
||||||
|
higthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
|
||||||
|
decayd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
|
||||||
|
invmaskd(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))),
|
||||||
|
invmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))),
|
||||||
bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))),
|
bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))),
|
||||||
sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
|
sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
|
||||||
neutral(Gtk::manage (new Gtk::Button (M ("TP_RETINEX_NEUTRAL")))),
|
neutral(Gtk::manage (new Gtk::Button (M ("TP_RETINEX_NEUTRAL")))),
|
||||||
@ -5832,6 +5847,8 @@ LocallabBlur::LocallabBlur():
|
|||||||
fftwblConn = fftwbl->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::fftwblChanged));
|
fftwblConn = fftwbl->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::fftwblChanged));
|
||||||
usemaskConn = usemask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::usemaskChanged));
|
usemaskConn = usemask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::usemaskChanged));
|
||||||
invblConn = invbl->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::invblChanged));
|
invblConn = invbl->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::invblChanged));
|
||||||
|
invmaskdConn = invmaskd->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::invmaskdChanged));
|
||||||
|
invmaskConn = invmask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabBlur::invmaskChanged));
|
||||||
|
|
||||||
radius->setAdjusterListener(this);
|
radius->setAdjusterListener(this);
|
||||||
|
|
||||||
@ -5861,6 +5878,10 @@ LocallabBlur::LocallabBlur():
|
|||||||
strbl->setAdjusterListener(this);
|
strbl->setAdjusterListener(this);
|
||||||
|
|
||||||
epsbl->setAdjusterListener(this);
|
epsbl->setAdjusterListener(this);
|
||||||
|
setExpandAlignProperties(expdenoise2, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||||
|
recothres->setAdjusterListener(this);
|
||||||
|
lowthres->setAdjusterListener(this);
|
||||||
|
higthres->setAdjusterListener(this);
|
||||||
|
|
||||||
sensibn->setAdjusterListener(this);
|
sensibn->setAdjusterListener(this);
|
||||||
|
|
||||||
@ -5936,6 +5957,11 @@ LocallabBlur::LocallabBlur():
|
|||||||
detailthr->setAdjusterListener(this);
|
detailthr->setAdjusterListener(this);
|
||||||
|
|
||||||
adjblur->setAdjusterListener(this);
|
adjblur->setAdjusterListener(this);
|
||||||
|
setExpandAlignProperties(expdenoise3, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||||
|
recothresd->setAdjusterListener(this);
|
||||||
|
lowthresd->setAdjusterListener(this);
|
||||||
|
higthresd->setAdjusterListener(this);
|
||||||
|
decayd->setAdjusterListener(this);
|
||||||
|
|
||||||
bilateral->setAdjusterListener(this);
|
bilateral->setAdjusterListener(this);
|
||||||
|
|
||||||
@ -6039,6 +6065,15 @@ LocallabBlur::LocallabBlur():
|
|||||||
blnoisebox->pack_start(*guidbl);
|
blnoisebox->pack_start(*guidbl);
|
||||||
blnoisebox->pack_start(*strbl);
|
blnoisebox->pack_start(*strbl);
|
||||||
blnoisebox->pack_start(*epsbl);
|
blnoisebox->pack_start(*epsbl);
|
||||||
|
ToolParamBlock* const wavBox2 = Gtk::manage(new ToolParamBlock());
|
||||||
|
wavBox2->pack_start(*maskusable2, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox2->pack_start(*maskunusable2, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox2->pack_start(*recothres);
|
||||||
|
wavBox2->pack_start(*lowthres);
|
||||||
|
wavBox2->pack_start(*higthres);
|
||||||
|
wavBox2->pack_start(*invmask);
|
||||||
|
expdenoise2->add(*wavBox2, false);
|
||||||
|
blnoisebox->pack_start(*expdenoise2);
|
||||||
blnoisebox->pack_start(*sensibn);
|
blnoisebox->pack_start(*sensibn);
|
||||||
// blnoisebox->pack_start(*blurMethod);
|
// blnoisebox->pack_start(*blurMethod);
|
||||||
blnoisebox->pack_start(*invbl);
|
blnoisebox->pack_start(*invbl);
|
||||||
@ -6077,6 +6112,16 @@ LocallabBlur::LocallabBlur():
|
|||||||
wavBox->pack_start(*detailFrame);
|
wavBox->pack_start(*detailFrame);
|
||||||
wavFrame->add(*wavBox);
|
wavFrame->add(*wavBox);
|
||||||
denoisebox->pack_start(*wavFrame);
|
denoisebox->pack_start(*wavFrame);
|
||||||
|
ToolParamBlock* const wavBox3 = Gtk::manage(new ToolParamBlock());
|
||||||
|
wavBox3->pack_start(*maskusable3, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox3->pack_start(*maskunusable3, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox3->pack_start(*recothresd);
|
||||||
|
wavBox3->pack_start(*lowthresd);
|
||||||
|
wavBox3->pack_start(*higthresd);
|
||||||
|
wavBox3->pack_start(*decayd);
|
||||||
|
wavBox3->pack_start(*invmaskd);
|
||||||
|
expdenoise3->add(*wavBox3, false);
|
||||||
|
denoisebox->pack_start(*expdenoise3);
|
||||||
denoisebox->pack_start(*bilateral);
|
denoisebox->pack_start(*bilateral);
|
||||||
denoisebox->pack_start(*sensiden);
|
denoisebox->pack_start(*sensiden);
|
||||||
denoisebox->pack_start(*neutral);
|
denoisebox->pack_start(*neutral);
|
||||||
@ -6158,6 +6203,10 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
wavshapeden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
|
wavshapeden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
|
||||||
wavhue->setTooltip(M("TP_LOCALLAB_WAVHUE_TOOLTIP"));
|
wavhue->setTooltip(M("TP_LOCALLAB_WAVHUE_TOOLTIP"));
|
||||||
expdenoise1->set_tooltip_markup(M("TP_LOCALLAB_MASKLC_TOOLTIP"));
|
expdenoise1->set_tooltip_markup(M("TP_LOCALLAB_MASKLC_TOOLTIP"));
|
||||||
|
expdenoise2->set_tooltip_markup(M("TP_LOCALLAB_MASKGF_TOOLTIP"));
|
||||||
|
expdenoise3->set_tooltip_markup(M("TP_LOCALLAB_MASKDE_TOOLTIP"));
|
||||||
|
invmask->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
|
||||||
|
invmaskd->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
|
||||||
LocalcurveEditorwavden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
|
LocalcurveEditorwavden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
|
||||||
noiselequal->set_tooltip_text(M("TP_LOCALLAB_DENOIEQUAL_TOOLTIP"));
|
noiselequal->set_tooltip_text(M("TP_LOCALLAB_DENOIEQUAL_TOOLTIP"));
|
||||||
noiselumdetail->set_tooltip_text(M("TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP"));
|
noiselumdetail->set_tooltip_text(M("TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP"));
|
||||||
@ -6190,6 +6239,11 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
lapmaskbl->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
|
lapmaskbl->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
|
||||||
csThresholdblur->set_tooltip_text(M("TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP"));
|
csThresholdblur->set_tooltip_text(M("TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP"));
|
||||||
sensiden->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
|
sensiden->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
|
||||||
|
lowthres->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRES_TOOLTIP"));
|
||||||
|
lowthresd->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESD_TOOLTIP"));
|
||||||
|
higthresd->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP"));
|
||||||
|
higthres->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRES_TOOLTIP"));
|
||||||
|
decayd->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
expblnoise->set_tooltip_markup("");
|
expblnoise->set_tooltip_markup("");
|
||||||
@ -6207,6 +6261,10 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
quamethod->set_tooltip_markup("");
|
quamethod->set_tooltip_markup("");
|
||||||
wavhue->setTooltip("");
|
wavhue->setTooltip("");
|
||||||
expdenoise1->set_tooltip_markup("");
|
expdenoise1->set_tooltip_markup("");
|
||||||
|
expdenoise2->set_tooltip_markup("");
|
||||||
|
expdenoise3->set_tooltip_markup("");
|
||||||
|
invmask->set_tooltip_text("");
|
||||||
|
invmaskd->set_tooltip_text("");
|
||||||
LocalcurveEditorwavden->setTooltip("");
|
LocalcurveEditorwavden->setTooltip("");
|
||||||
noiselequal->set_tooltip_text("");
|
noiselequal->set_tooltip_text("");
|
||||||
noiselumdetail->set_tooltip_text("");
|
noiselumdetail->set_tooltip_text("");
|
||||||
@ -6242,6 +6300,11 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
shadmaskblsha->set_tooltip_text("");
|
shadmaskblsha->set_tooltip_text("");
|
||||||
csThresholdblur->set_tooltip_text("");
|
csThresholdblur->set_tooltip_text("");
|
||||||
sensiden->set_tooltip_text("");
|
sensiden->set_tooltip_text("");
|
||||||
|
lowthres->set_tooltip_text("");
|
||||||
|
lowthresd->set_tooltip_text("");
|
||||||
|
higthresd->set_tooltip_text("");
|
||||||
|
higthres->set_tooltip_text("");
|
||||||
|
decayd->set_tooltip_text("");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6266,6 +6329,17 @@ void LocallabBlur::neutral_pressed ()
|
|||||||
wavshapeden->setCurve(defSpot.locwavcurveden);
|
wavshapeden->setCurve(defSpot.locwavcurveden);
|
||||||
wavhue->setCurve(defSpot.locwavcurvehue);
|
wavhue->setCurve(defSpot.locwavcurvehue);
|
||||||
usemask->set_active(defSpot.usemask);
|
usemask->set_active(defSpot.usemask);
|
||||||
|
invmaskd->set_active(defSpot.invmaskd);
|
||||||
|
invmask->set_active(defSpot.invmask);
|
||||||
|
recothresd->setValue(defSpot.recothresd);
|
||||||
|
lowthresd->setValue(defSpot.lowthresd);
|
||||||
|
higthresd->setValue(defSpot.higthresd);
|
||||||
|
decayd->setValue(defSpot.decayd);
|
||||||
|
recothres->setValue(defSpot.recothres);
|
||||||
|
lowthres->setValue(defSpot.lowthres);
|
||||||
|
higthres->setValue(defSpot.higthres);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocallabBlur::setDefaultExpanderVisibility()
|
void LocallabBlur::setDefaultExpanderVisibility()
|
||||||
@ -6273,6 +6347,8 @@ void LocallabBlur::setDefaultExpanderVisibility()
|
|||||||
expblnoise->set_expanded(false);
|
expblnoise->set_expanded(false);
|
||||||
expdenoise->set_expanded(false);
|
expdenoise->set_expanded(false);
|
||||||
expdenoise1->set_expanded(false);
|
expdenoise1->set_expanded(false);
|
||||||
|
expdenoise2->set_expanded(false);
|
||||||
|
expdenoise3->set_expanded(false);
|
||||||
expmaskbl->set_expanded(false);
|
expmaskbl->set_expanded(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6283,6 +6359,8 @@ void LocallabBlur::disableListener()
|
|||||||
blMethodConn.block(true);
|
blMethodConn.block(true);
|
||||||
fftwblConn.block(true);
|
fftwblConn.block(true);
|
||||||
usemaskConn.block(true);
|
usemaskConn.block(true);
|
||||||
|
invmaskdConn.block(true);
|
||||||
|
invmaskConn.block(true);
|
||||||
invblConn.block(true);
|
invblConn.block(true);
|
||||||
medMethodConn.block(true);
|
medMethodConn.block(true);
|
||||||
blurMethodConn.block(true);
|
blurMethodConn.block(true);
|
||||||
@ -6302,6 +6380,8 @@ void LocallabBlur::enableListener()
|
|||||||
blMethodConn.block(false);
|
blMethodConn.block(false);
|
||||||
fftwblConn.block(false);
|
fftwblConn.block(false);
|
||||||
usemaskConn.block(false);
|
usemaskConn.block(false);
|
||||||
|
invmaskdConn.block(false);
|
||||||
|
invmaskConn.block(false);
|
||||||
invblConn.block(false);
|
invblConn.block(false);
|
||||||
medMethodConn.block(false);
|
medMethodConn.block(false);
|
||||||
blurMethodConn.block(false);
|
blurMethodConn.block(false);
|
||||||
@ -6341,6 +6421,8 @@ void LocallabBlur::read(const rtengine::procparams::ProcParams* pp, const Params
|
|||||||
|
|
||||||
fftwbl->set_active(spot.fftwbl);
|
fftwbl->set_active(spot.fftwbl);
|
||||||
usemask->set_active(spot.usemask);
|
usemask->set_active(spot.usemask);
|
||||||
|
invmaskd->set_active(spot.invmaskd);
|
||||||
|
invmask->set_active(spot.invmask);
|
||||||
invbl->set_active(spot.invbl);
|
invbl->set_active(spot.invbl);
|
||||||
radius->setValue(spot.radius);
|
radius->setValue(spot.radius);
|
||||||
strength->setValue(spot.strength);
|
strength->setValue(spot.strength);
|
||||||
@ -6363,8 +6445,15 @@ void LocallabBlur::read(const rtengine::procparams::ProcParams* pp, const Params
|
|||||||
itera->setValue((double)spot.itera);
|
itera->setValue((double)spot.itera);
|
||||||
guidbl->setValue((double)spot.guidbl);
|
guidbl->setValue((double)spot.guidbl);
|
||||||
strbl->setValue((double)spot.strbl);
|
strbl->setValue((double)spot.strbl);
|
||||||
|
recothres->setValue((double)spot.recothres);
|
||||||
|
lowthres->setValue((double)spot.lowthres);
|
||||||
|
higthres->setValue((double)spot.higthres);
|
||||||
epsbl->setValue((double)spot.epsbl);
|
epsbl->setValue((double)spot.epsbl);
|
||||||
sensibn->setValue((double)spot.sensibn);
|
sensibn->setValue((double)spot.sensibn);
|
||||||
|
recothresd->setValue((double)spot.recothresd);
|
||||||
|
lowthresd->setValue((double)spot.lowthresd);
|
||||||
|
higthresd->setValue((double)spot.higthresd);
|
||||||
|
decayd->setValue((double)spot.decayd);
|
||||||
|
|
||||||
if (spot.blurMethod == "norm") {
|
if (spot.blurMethod == "norm") {
|
||||||
blurMethod->set_active(0);
|
blurMethod->set_active(0);
|
||||||
@ -6466,6 +6555,8 @@ void LocallabBlur::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped
|
|||||||
|
|
||||||
spot.fftwbl = fftwbl->get_active();
|
spot.fftwbl = fftwbl->get_active();
|
||||||
spot.usemask = usemask->get_active();
|
spot.usemask = usemask->get_active();
|
||||||
|
spot.invmaskd = invmaskd->get_active();
|
||||||
|
spot.invmask = invmask->get_active();
|
||||||
spot.invbl = invbl->get_active();
|
spot.invbl = invbl->get_active();
|
||||||
spot.radius = radius->getValue();
|
spot.radius = radius->getValue();
|
||||||
spot.strength = strength->getIntValue();
|
spot.strength = strength->getIntValue();
|
||||||
@ -6488,8 +6579,15 @@ void LocallabBlur::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped
|
|||||||
spot.itera = itera->getIntValue();
|
spot.itera = itera->getIntValue();
|
||||||
spot.guidbl = guidbl->getIntValue();
|
spot.guidbl = guidbl->getIntValue();
|
||||||
spot.strbl = strbl->getIntValue();
|
spot.strbl = strbl->getIntValue();
|
||||||
|
spot.recothres = recothres->getValue();
|
||||||
|
spot.lowthres = lowthres->getValue();
|
||||||
|
spot.higthres = higthres->getValue();
|
||||||
spot.epsbl = epsbl->getIntValue();
|
spot.epsbl = epsbl->getIntValue();
|
||||||
spot.sensibn = sensibn->getIntValue();
|
spot.sensibn = sensibn->getIntValue();
|
||||||
|
spot.recothresd = recothresd->getValue();
|
||||||
|
spot.lowthresd = lowthresd->getValue();
|
||||||
|
spot.higthresd = higthresd->getValue();
|
||||||
|
spot.decayd = decayd->getValue();
|
||||||
|
|
||||||
if (blurMethod->get_active_row_number() == 0) {
|
if (blurMethod->get_active_row_number() == 0) {
|
||||||
spot.blurMethod = "norm";
|
spot.blurMethod = "norm";
|
||||||
@ -6578,8 +6676,15 @@ void LocallabBlur::setDefaults(const rtengine::procparams::ProcParams* defParams
|
|||||||
itera->setDefault((double)defSpot.itera);
|
itera->setDefault((double)defSpot.itera);
|
||||||
guidbl->setDefault((double)defSpot.guidbl);
|
guidbl->setDefault((double)defSpot.guidbl);
|
||||||
strbl->setDefault((double)defSpot.strbl);
|
strbl->setDefault((double)defSpot.strbl);
|
||||||
|
recothres->setDefault((double)defSpot.recothres);
|
||||||
|
lowthres->setDefault((double)defSpot.lowthres);
|
||||||
|
higthres->setDefault((double)defSpot.higthres);
|
||||||
epsbl->setDefault((double)defSpot.epsbl);
|
epsbl->setDefault((double)defSpot.epsbl);
|
||||||
sensibn->setDefault((double)defSpot.sensibn);
|
sensibn->setDefault((double)defSpot.sensibn);
|
||||||
|
recothresd->setDefault((double)defSpot.recothresd);
|
||||||
|
lowthresd->setDefault((double)defSpot.lowthresd);
|
||||||
|
higthresd->setDefault((double)defSpot.higthresd);
|
||||||
|
decayd->setDefault((double)defSpot.decayd);
|
||||||
noiselumf0->setDefault(defSpot.noiselumf0);
|
noiselumf0->setDefault(defSpot.noiselumf0);
|
||||||
noiselumf->setDefault(defSpot.noiselumf);
|
noiselumf->setDefault(defSpot.noiselumf);
|
||||||
noiselumf2->setDefault(defSpot.noiselumf2);
|
noiselumf2->setDefault(defSpot.noiselumf2);
|
||||||
@ -6670,6 +6775,67 @@ void LocallabBlur::adjusterChanged(Adjuster* a, double newval)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (a == recothres) {
|
||||||
|
if(recothres->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 1) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallabrecothres,
|
||||||
|
recothres->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a == lowthres) {
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallablowthres,
|
||||||
|
lowthres->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a == higthres) {
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallabhigthres,
|
||||||
|
higthres->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a == recothresd) {
|
||||||
|
if(recothresd->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 0) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallabrecothresd,
|
||||||
|
recothresd->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a == lowthresd) {
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallablowthresd,
|
||||||
|
lowthresd->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a == higthresd) {
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallabhigthresd,
|
||||||
|
higthresd->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a == decayd) {
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(Evlocallabdecayd,
|
||||||
|
decayd->getTextValue() + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (a == epsbl) {
|
if (a == epsbl) {
|
||||||
if (listener) {
|
if (listener) {
|
||||||
listener->panelChanged(Evlocallabepsbl,
|
listener->panelChanged(Evlocallabepsbl,
|
||||||
@ -6954,11 +7120,13 @@ void LocallabBlur::convertParamToNormal()
|
|||||||
|
|
||||||
// Disable all listeners
|
// Disable all listeners
|
||||||
disableListener();
|
disableListener();
|
||||||
|
invmask->set_active(defSpot.invmask);
|
||||||
|
invmaskd->set_active(defSpot.invmaskd);
|
||||||
// Set hidden GUI widgets in Normal mode to default spot values
|
// Set hidden GUI widgets in Normal mode to default spot values
|
||||||
fftwbl->set_active(defSpot.fftwbl);
|
fftwbl->set_active(defSpot.fftwbl);
|
||||||
strumaskbl->setValue(defSpot.strumaskbl);
|
strumaskbl->setValue(defSpot.strumaskbl);
|
||||||
toolbl->set_active(defSpot.toolbl);
|
toolbl->set_active(defSpot.toolbl);
|
||||||
|
decayd->setValue(defSpot.decayd);
|
||||||
lapmaskbl->setValue(defSpot.lapmaskbl);
|
lapmaskbl->setValue(defSpot.lapmaskbl);
|
||||||
shadmaskbl->setValue((double)defSpot.shadmaskbl);
|
shadmaskbl->setValue((double)defSpot.shadmaskbl);
|
||||||
shadmaskblsha->setValue((double)defSpot.shadmaskblsha);
|
shadmaskblsha->setValue((double)defSpot.shadmaskblsha);
|
||||||
@ -6975,6 +7143,8 @@ void LocallabBlur::convertParamToSimple()
|
|||||||
|
|
||||||
// Disable all listeners
|
// Disable all listeners
|
||||||
disableListener();
|
disableListener();
|
||||||
|
invmask->set_active(defSpot.invmask);
|
||||||
|
invmaskd->set_active(defSpot.invmaskd);
|
||||||
|
|
||||||
// Set hidden specific GUI widgets in Simple mode to default spot values
|
// Set hidden specific GUI widgets in Simple mode to default spot values
|
||||||
showmaskblMethod->set_active(0);
|
showmaskblMethod->set_active(0);
|
||||||
@ -7001,6 +7171,15 @@ void LocallabBlur::convertParamToSimple()
|
|||||||
lnoiselow->setValue(defSpot.lnoiselow);
|
lnoiselow->setValue(defSpot.lnoiselow);
|
||||||
levelthrlow->setValue(defSpot.levelthrlow);
|
levelthrlow->setValue(defSpot.levelthrlow);
|
||||||
usemask->set_active(defSpot.usemask);
|
usemask->set_active(defSpot.usemask);
|
||||||
|
invmaskd->set_active(defSpot.invmaskd);
|
||||||
|
invmask->set_active(defSpot.invmask);
|
||||||
|
recothresd->setValue(defSpot.recothresd);
|
||||||
|
lowthresd->setValue(defSpot.lowthresd);
|
||||||
|
higthresd->setValue(defSpot.higthresd);
|
||||||
|
decayd->setValue(defSpot.decayd);
|
||||||
|
recothres->setValue(defSpot.recothres);
|
||||||
|
lowthres->setValue(defSpot.lowthres);
|
||||||
|
higthres->setValue(defSpot.higthres);
|
||||||
|
|
||||||
// Enable all listeners
|
// Enable all listeners
|
||||||
enableListener();
|
enableListener();
|
||||||
@ -7014,9 +7193,17 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
|
|||||||
fftwbl->hide();
|
fftwbl->hide();
|
||||||
expmaskbl->hide();
|
expmaskbl->hide();
|
||||||
expdenoise1->hide();
|
expdenoise1->hide();
|
||||||
|
expdenoise2->hide();
|
||||||
|
expdenoise3->hide();
|
||||||
maskusable->hide();
|
maskusable->hide();
|
||||||
maskunusable->hide();
|
maskunusable->hide();
|
||||||
|
maskusable2->hide();
|
||||||
|
maskunusable2->hide();
|
||||||
|
maskusable3->hide();
|
||||||
|
maskunusable3->hide();
|
||||||
|
decayd->hide();
|
||||||
|
invmask->hide();
|
||||||
|
invmaskd->hide();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Normal:
|
case Normal:
|
||||||
@ -7032,17 +7219,46 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
|
|||||||
// Specific Simple mode widgets are shown in Normal mode
|
// Specific Simple mode widgets are shown in Normal mode
|
||||||
expmaskbl->show();
|
expmaskbl->show();
|
||||||
expdenoise1->show();
|
expdenoise1->show();
|
||||||
|
expdenoise2->hide();
|
||||||
|
expdenoise3->show();
|
||||||
|
if (blMethod->get_active_row_number() == 2) {
|
||||||
|
expdenoise2->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
decayd->hide();
|
||||||
|
invmask->hide();
|
||||||
|
invmaskd->hide();
|
||||||
if(lnoiselow->getValue()!= 1.) {
|
if(lnoiselow->getValue()!= 1.) {
|
||||||
if (showmaskblMethodtyp->get_active_row_number() == 0) {
|
if (showmaskblMethodtyp->get_active_row_number() == 0) {
|
||||||
showmaskblMethodtyp->set_active(2);
|
showmaskblMethodtyp->set_active(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(recothres->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 1) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(recothresd->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 0) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (enablMask->get_active()) {
|
if (enablMask->get_active()) {
|
||||||
maskusable->show();
|
maskusable->show();
|
||||||
maskunusable->hide();
|
maskunusable->hide();
|
||||||
|
maskusable2->show();
|
||||||
|
maskunusable2->hide();
|
||||||
|
maskusable3->show();
|
||||||
|
maskunusable3->hide();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
maskusable->hide();
|
maskusable->hide();
|
||||||
maskunusable->show();
|
maskunusable->show();
|
||||||
|
maskusable2->hide();
|
||||||
|
maskunusable2->show();
|
||||||
|
maskusable3->hide();
|
||||||
|
maskunusable3->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -7052,8 +7268,20 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
|
|||||||
// Show widgets hidden in Normal and Simple mode
|
// Show widgets hidden in Normal and Simple mode
|
||||||
if (blMethod->get_active_row_number() == 0) { // Keep widget hidden when blMethod is > 0
|
if (blMethod->get_active_row_number() == 0) { // Keep widget hidden when blMethod is > 0
|
||||||
fftwbl->show();
|
fftwbl->show();
|
||||||
|
expdenoise2->hide();
|
||||||
}
|
}
|
||||||
|
if (blMethod->get_active_row_number() == 1) {
|
||||||
|
expdenoise2->hide();
|
||||||
|
}
|
||||||
|
if (blMethod->get_active_row_number() == 2) {
|
||||||
|
expdenoise2->show();
|
||||||
|
}
|
||||||
|
|
||||||
expdenoise1->show();
|
expdenoise1->show();
|
||||||
|
expdenoise3->show();
|
||||||
|
decayd->show();
|
||||||
|
invmask->show();
|
||||||
|
invmaskd->show();
|
||||||
|
|
||||||
expmaskbl->show();
|
expmaskbl->show();
|
||||||
strumaskbl->show();
|
strumaskbl->show();
|
||||||
@ -7068,12 +7296,31 @@ void LocallabBlur::updateGUIToMode(const modeType new_type)
|
|||||||
showmaskblMethodtyp->set_active(2);
|
showmaskblMethodtyp->set_active(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(recothres->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 1) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(recothresd->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 0) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (enablMask->get_active()) {
|
if (enablMask->get_active()) {
|
||||||
maskusable->show();
|
maskusable->show();
|
||||||
maskunusable->hide();
|
maskunusable->hide();
|
||||||
|
maskusable2->show();
|
||||||
|
maskunusable2->hide();
|
||||||
|
maskusable3->show();
|
||||||
|
maskunusable3->hide();
|
||||||
} else {
|
} else {
|
||||||
maskusable->hide();
|
maskusable->hide();
|
||||||
maskunusable->show();
|
maskunusable->show();
|
||||||
|
maskusable2->hide();
|
||||||
|
maskunusable2->show();
|
||||||
|
maskusable3->show();
|
||||||
|
maskunusable3->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -7152,6 +7399,37 @@ void LocallabBlur::usemaskChanged()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocallabBlur::invmaskdChanged()
|
||||||
|
{
|
||||||
|
if (isLocActivated && exp->getEnabled()) {
|
||||||
|
if (listener) {
|
||||||
|
if (invmaskd->get_active()) {
|
||||||
|
listener->panelChanged(Evlocallabinvmaskd,
|
||||||
|
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
} else {
|
||||||
|
listener->panelChanged(Evlocallabinvmaskd,
|
||||||
|
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocallabBlur::invmaskChanged()
|
||||||
|
{
|
||||||
|
if (isLocActivated && exp->getEnabled()) {
|
||||||
|
if (listener) {
|
||||||
|
if (invmask->get_active()) {
|
||||||
|
listener->panelChanged(Evlocallabinvmask,
|
||||||
|
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
} else {
|
||||||
|
listener->panelChanged(Evlocallabinvmask,
|
||||||
|
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void LocallabBlur::invblChanged()
|
void LocallabBlur::invblChanged()
|
||||||
{
|
{
|
||||||
const LocallabParams::LocallabSpot defSpot;
|
const LocallabParams::LocallabSpot defSpot;
|
||||||
@ -7257,6 +7535,16 @@ void LocallabBlur::showmaskblMethodtypChanged()
|
|||||||
showmaskblMethodtyp->set_active(2);
|
showmaskblMethodtyp->set_active(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(recothres->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 1) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(recothresd->getValue()!= 1.) {
|
||||||
|
if (showmaskblMethodtyp->get_active_row_number() == 0) {
|
||||||
|
showmaskblMethodtyp->set_active(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If mask preview is activated, deactivate all other tool mask preview
|
// If mask preview is activated, deactivate all other tool mask preview
|
||||||
if (locToolListener) {
|
if (locToolListener) {
|
||||||
@ -7274,9 +7562,17 @@ void LocallabBlur::enablMaskChanged()
|
|||||||
if (enablMask->get_active()) {
|
if (enablMask->get_active()) {
|
||||||
maskusable->show();
|
maskusable->show();
|
||||||
maskunusable->hide();
|
maskunusable->hide();
|
||||||
|
maskusable2->show();
|
||||||
|
maskunusable2->hide();
|
||||||
|
maskusable3->show();
|
||||||
|
maskunusable3->hide();
|
||||||
} else {
|
} else {
|
||||||
maskusable->hide();
|
maskusable->hide();
|
||||||
maskunusable->show();
|
maskunusable->show();
|
||||||
|
maskusable2->hide();
|
||||||
|
maskunusable2->show();
|
||||||
|
maskusable3->hide();
|
||||||
|
maskunusable3->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLocActivated && exp->getEnabled()) {
|
if (isLocActivated && exp->getEnabled()) {
|
||||||
@ -7329,7 +7625,7 @@ void LocallabBlur::updateBlurGUI()
|
|||||||
if (mode == Expert) { // Keep widget hidden in Normal and Simple mode
|
if (mode == Expert) { // Keep widget hidden in Normal and Simple mode
|
||||||
fftwbl->show();
|
fftwbl->show();
|
||||||
}
|
}
|
||||||
|
expdenoise2->hide();
|
||||||
radius->show();
|
radius->show();
|
||||||
strength->show();
|
strength->show();
|
||||||
grainFrame->show();
|
grainFrame->show();
|
||||||
@ -7337,6 +7633,9 @@ void LocallabBlur::updateBlurGUI()
|
|||||||
itera->hide();
|
itera->hide();
|
||||||
guidbl->hide();
|
guidbl->hide();
|
||||||
strbl->hide();
|
strbl->hide();
|
||||||
|
recothres->hide();
|
||||||
|
lowthres->hide();
|
||||||
|
higthres->hide();
|
||||||
epsbl->hide();
|
epsbl->hide();
|
||||||
activlum->show();
|
activlum->show();
|
||||||
} else if (blMethod->get_active_row_number() == 1) {
|
} else if (blMethod->get_active_row_number() == 1) {
|
||||||
@ -7348,6 +7647,10 @@ void LocallabBlur::updateBlurGUI()
|
|||||||
itera->show();
|
itera->show();
|
||||||
guidbl->hide();
|
guidbl->hide();
|
||||||
strbl->hide();
|
strbl->hide();
|
||||||
|
expdenoise2->hide();
|
||||||
|
recothres->hide();
|
||||||
|
lowthres->hide();
|
||||||
|
higthres->hide();
|
||||||
epsbl->hide();
|
epsbl->hide();
|
||||||
activlum->show();
|
activlum->show();
|
||||||
} else if (blMethod->get_active_row_number() == 2) {
|
} else if (blMethod->get_active_row_number() == 2) {
|
||||||
@ -7359,6 +7662,13 @@ void LocallabBlur::updateBlurGUI()
|
|||||||
itera->hide();
|
itera->hide();
|
||||||
guidbl->show();
|
guidbl->show();
|
||||||
strbl->show();
|
strbl->show();
|
||||||
|
expdenoise2->hide();
|
||||||
|
if (mode == Expert || mode == Normal){
|
||||||
|
expdenoise2->show();
|
||||||
|
recothres->show();
|
||||||
|
lowthres->show();
|
||||||
|
higthres->show();
|
||||||
|
}
|
||||||
epsbl->show();
|
epsbl->show();
|
||||||
activlum->hide();
|
activlum->hide();
|
||||||
}
|
}
|
||||||
|
@ -654,6 +654,10 @@ private:
|
|||||||
Adjuster* const guidbl;
|
Adjuster* const guidbl;
|
||||||
Adjuster* const strbl;
|
Adjuster* const strbl;
|
||||||
Adjuster* const epsbl;
|
Adjuster* const epsbl;
|
||||||
|
MyExpander* const expdenoise2;
|
||||||
|
Adjuster* const recothres;
|
||||||
|
Adjuster* const lowthres;
|
||||||
|
Adjuster* const higthres;
|
||||||
Adjuster* const sensibn;
|
Adjuster* const sensibn;
|
||||||
MyComboBoxText* const blurMethod;
|
MyComboBoxText* const blurMethod;
|
||||||
Gtk::CheckButton* const invbl;
|
Gtk::CheckButton* const invbl;
|
||||||
@ -666,6 +670,10 @@ private:
|
|||||||
MyExpander* const expdenoise1;
|
MyExpander* const expdenoise1;
|
||||||
Gtk::Label* const maskusable;
|
Gtk::Label* const maskusable;
|
||||||
Gtk::Label* const maskunusable;
|
Gtk::Label* const maskunusable;
|
||||||
|
Gtk::Label* const maskusable2;
|
||||||
|
Gtk::Label* const maskunusable2;
|
||||||
|
Gtk::Label* const maskusable3;
|
||||||
|
Gtk::Label* const maskunusable3;
|
||||||
|
|
||||||
Gtk::CheckButton* const usemask;
|
Gtk::CheckButton* const usemask;
|
||||||
Adjuster* const lnoiselow;
|
Adjuster* const lnoiselow;
|
||||||
@ -685,6 +693,15 @@ private:
|
|||||||
Gtk::Frame* const detailFrame;
|
Gtk::Frame* const detailFrame;
|
||||||
Adjuster* const detailthr;
|
Adjuster* const detailthr;
|
||||||
Adjuster* const adjblur;
|
Adjuster* const adjblur;
|
||||||
|
MyExpander* const expdenoise3;
|
||||||
|
Adjuster* const recothresd;
|
||||||
|
Adjuster* const lowthresd;
|
||||||
|
Adjuster* const higthresd;
|
||||||
|
Adjuster* const decayd;
|
||||||
|
|
||||||
|
Gtk::CheckButton* const invmaskd;
|
||||||
|
Gtk::CheckButton* const invmask;
|
||||||
|
|
||||||
Adjuster* const bilateral;
|
Adjuster* const bilateral;
|
||||||
Adjuster* const sensiden;
|
Adjuster* const sensiden;
|
||||||
Gtk::Button* neutral;
|
Gtk::Button* neutral;
|
||||||
@ -715,7 +732,7 @@ private:
|
|||||||
ThresholdAdjuster* const csThresholdblur;
|
ThresholdAdjuster* const csThresholdblur;
|
||||||
|
|
||||||
sigc::connection blMethodConn, fftwblConn, invblConn, medMethodConn, blurMethodConn, chroMethodConn, activlumConn, showmaskblMethodConn, showmaskblMethodtypConn, enablMaskConn, toolblConn;
|
sigc::connection blMethodConn, fftwblConn, invblConn, medMethodConn, blurMethodConn, chroMethodConn, activlumConn, showmaskblMethodConn, showmaskblMethodtypConn, enablMaskConn, toolblConn;
|
||||||
sigc::connection quamethodconn, usemaskConn, neutralconn;
|
sigc::connection quamethodconn, usemaskConn, invmaskdConn, invmaskConn, neutralconn;
|
||||||
public:
|
public:
|
||||||
LocallabBlur();
|
LocallabBlur();
|
||||||
~LocallabBlur();
|
~LocallabBlur();
|
||||||
@ -753,6 +770,8 @@ private:
|
|||||||
void blMethodChanged();
|
void blMethodChanged();
|
||||||
void fftwblChanged();
|
void fftwblChanged();
|
||||||
void usemaskChanged();
|
void usemaskChanged();
|
||||||
|
void invmaskdChanged();
|
||||||
|
void invmaskChanged();
|
||||||
void invblChanged();
|
void invblChanged();
|
||||||
void medMethodChanged();
|
void medMethodChanged();
|
||||||
void blurMethodChanged();
|
void blurMethodChanged();
|
||||||
|
@ -1276,6 +1276,13 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
|||||||
locallab.spots.at(j).itera = locallab.spots.at(j).itera && pSpot.itera == otherSpot.itera;
|
locallab.spots.at(j).itera = locallab.spots.at(j).itera && pSpot.itera == otherSpot.itera;
|
||||||
locallab.spots.at(j).guidbl = locallab.spots.at(j).guidbl && pSpot.guidbl == otherSpot.guidbl;
|
locallab.spots.at(j).guidbl = locallab.spots.at(j).guidbl && pSpot.guidbl == otherSpot.guidbl;
|
||||||
locallab.spots.at(j).strbl = locallab.spots.at(j).strbl && pSpot.strbl == otherSpot.strbl;
|
locallab.spots.at(j).strbl = locallab.spots.at(j).strbl && pSpot.strbl == otherSpot.strbl;
|
||||||
|
locallab.spots.at(j).recothres = locallab.spots.at(j).recothres && pSpot.recothres == otherSpot.recothres;
|
||||||
|
locallab.spots.at(j).lowthres = locallab.spots.at(j).lowthres && pSpot.lowthres == otherSpot.lowthres;
|
||||||
|
locallab.spots.at(j).higthres = locallab.spots.at(j).higthres && pSpot.higthres == otherSpot.higthres;
|
||||||
|
locallab.spots.at(j).recothresd = locallab.spots.at(j).recothresd && pSpot.recothresd == otherSpot.recothresd;
|
||||||
|
locallab.spots.at(j).lowthresd = locallab.spots.at(j).lowthresd && pSpot.lowthresd == otherSpot.lowthresd;
|
||||||
|
locallab.spots.at(j).higthresd = locallab.spots.at(j).higthresd && pSpot.higthresd == otherSpot.higthresd;
|
||||||
|
locallab.spots.at(j).decayd = locallab.spots.at(j).decayd && pSpot.decayd == otherSpot.decayd;
|
||||||
locallab.spots.at(j).isogr = locallab.spots.at(j).isogr && pSpot.isogr == otherSpot.isogr;
|
locallab.spots.at(j).isogr = locallab.spots.at(j).isogr && pSpot.isogr == otherSpot.isogr;
|
||||||
locallab.spots.at(j).strengr = locallab.spots.at(j).strengr && pSpot.strengr == otherSpot.strengr;
|
locallab.spots.at(j).strengr = locallab.spots.at(j).strengr && pSpot.strengr == otherSpot.strengr;
|
||||||
locallab.spots.at(j).scalegr = locallab.spots.at(j).scalegr && pSpot.scalegr == otherSpot.scalegr;
|
locallab.spots.at(j).scalegr = locallab.spots.at(j).scalegr && pSpot.scalegr == otherSpot.scalegr;
|
||||||
@ -1285,6 +1292,8 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
|||||||
locallab.spots.at(j).quamethod = locallab.spots.at(j).quamethod && pSpot.quamethod == otherSpot.quamethod;
|
locallab.spots.at(j).quamethod = locallab.spots.at(j).quamethod && pSpot.quamethod == otherSpot.quamethod;
|
||||||
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).usemask = locallab.spots.at(j).usemask && pSpot.usemask == otherSpot.usemask;
|
locallab.spots.at(j).usemask = locallab.spots.at(j).usemask && pSpot.usemask == otherSpot.usemask;
|
||||||
|
locallab.spots.at(j).invmaskd = locallab.spots.at(j).invmaskd && pSpot.invmaskd == otherSpot.invmaskd;
|
||||||
|
locallab.spots.at(j).invmask = locallab.spots.at(j).invmask && pSpot.invmask == otherSpot.invmask;
|
||||||
locallab.spots.at(j).levelthr = locallab.spots.at(j).levelthr && pSpot.levelthr == otherSpot.levelthr;
|
locallab.spots.at(j).levelthr = locallab.spots.at(j).levelthr && pSpot.levelthr == otherSpot.levelthr;
|
||||||
locallab.spots.at(j).lnoiselow = locallab.spots.at(j).lnoiselow && pSpot.lnoiselow == otherSpot.lnoiselow;
|
locallab.spots.at(j).lnoiselow = locallab.spots.at(j).lnoiselow && pSpot.lnoiselow == otherSpot.lnoiselow;
|
||||||
locallab.spots.at(j).levelthrlow = locallab.spots.at(j).levelthrlow && pSpot.levelthrlow == otherSpot.levelthrlow;
|
locallab.spots.at(j).levelthrlow = locallab.spots.at(j).levelthrlow && pSpot.levelthrlow == otherSpot.levelthrlow;
|
||||||
@ -4024,6 +4033,34 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
|||||||
toEdit.locallab.spots.at(i).strbl = mods.locallab.spots.at(i).strbl;
|
toEdit.locallab.spots.at(i).strbl = mods.locallab.spots.at(i).strbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).recothres) {
|
||||||
|
toEdit.locallab.spots.at(i).recothres = mods.locallab.spots.at(i).recothres;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).lowthres) {
|
||||||
|
toEdit.locallab.spots.at(i).lowthres = mods.locallab.spots.at(i).lowthres;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).higthres) {
|
||||||
|
toEdit.locallab.spots.at(i).higthres = mods.locallab.spots.at(i).higthres;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).recothresd) {
|
||||||
|
toEdit.locallab.spots.at(i).recothresd = mods.locallab.spots.at(i).recothresd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).lowthresd) {
|
||||||
|
toEdit.locallab.spots.at(i).lowthresd = mods.locallab.spots.at(i).lowthresd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).higthresd) {
|
||||||
|
toEdit.locallab.spots.at(i).higthresd = mods.locallab.spots.at(i).higthresd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).decayd) {
|
||||||
|
toEdit.locallab.spots.at(i).decayd = mods.locallab.spots.at(i).decayd;
|
||||||
|
}
|
||||||
|
|
||||||
if (locallab.spots.at(i).isogr) {
|
if (locallab.spots.at(i).isogr) {
|
||||||
toEdit.locallab.spots.at(i).isogr = mods.locallab.spots.at(i).isogr;
|
toEdit.locallab.spots.at(i).isogr = mods.locallab.spots.at(i).isogr;
|
||||||
}
|
}
|
||||||
@ -4060,6 +4097,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
|||||||
toEdit.locallab.spots.at(i).usemask = mods.locallab.spots.at(i).usemask;
|
toEdit.locallab.spots.at(i).usemask = mods.locallab.spots.at(i).usemask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).invmaskd) {
|
||||||
|
toEdit.locallab.spots.at(i).invmaskd = mods.locallab.spots.at(i).invmaskd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locallab.spots.at(i).invmask) {
|
||||||
|
toEdit.locallab.spots.at(i).invmask = mods.locallab.spots.at(i).invmask;
|
||||||
|
}
|
||||||
|
|
||||||
if (locallab.spots.at(i).levelthr) {
|
if (locallab.spots.at(i).levelthr) {
|
||||||
toEdit.locallab.spots.at(i).levelthr = mods.locallab.spots.at(i).levelthr;
|
toEdit.locallab.spots.at(i).levelthr = mods.locallab.spots.at(i).levelthr;
|
||||||
}
|
}
|
||||||
@ -6580,6 +6625,13 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
|||||||
itera(v),
|
itera(v),
|
||||||
guidbl(v),
|
guidbl(v),
|
||||||
strbl(v),
|
strbl(v),
|
||||||
|
recothres(v),
|
||||||
|
lowthres(v),
|
||||||
|
higthres(v),
|
||||||
|
recothresd(v),
|
||||||
|
lowthresd(v),
|
||||||
|
higthresd(v),
|
||||||
|
decayd(v),
|
||||||
isogr(v),
|
isogr(v),
|
||||||
strengr(v),
|
strengr(v),
|
||||||
scalegr(v),
|
scalegr(v),
|
||||||
@ -6588,6 +6640,8 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
|||||||
chroMethod(v),
|
chroMethod(v),
|
||||||
quamethod(v),
|
quamethod(v),
|
||||||
usemask(v),
|
usemask(v),
|
||||||
|
invmaskd(v),
|
||||||
|
invmask(v),
|
||||||
levelthr(v),
|
levelthr(v),
|
||||||
lnoiselow(v),
|
lnoiselow(v),
|
||||||
levelthrlow(v),
|
levelthrlow(v),
|
||||||
@ -7099,6 +7153,13 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
|||||||
itera = v;
|
itera = v;
|
||||||
guidbl = v;
|
guidbl = v;
|
||||||
strbl = v;
|
strbl = v;
|
||||||
|
recothres = v;
|
||||||
|
lowthres = v;
|
||||||
|
higthres = v;
|
||||||
|
recothresd = v;
|
||||||
|
lowthresd = v;
|
||||||
|
higthresd = v;
|
||||||
|
decayd = v;
|
||||||
isogr = v;
|
isogr = v;
|
||||||
strengr = v;
|
strengr = v;
|
||||||
scalegr = v;
|
scalegr = v;
|
||||||
@ -7107,6 +7168,8 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
|||||||
chroMethod = v;
|
chroMethod = v;
|
||||||
quamethod = v;
|
quamethod = v;
|
||||||
usemask = v;
|
usemask = v;
|
||||||
|
invmaskd = v;
|
||||||
|
invmask = v;
|
||||||
levelthr = v;
|
levelthr = v;
|
||||||
lnoiselow = v;
|
lnoiselow = v;
|
||||||
levelthrlow = v;
|
levelthrlow = v;
|
||||||
|
@ -613,6 +613,13 @@ public:
|
|||||||
bool itera;
|
bool itera;
|
||||||
bool guidbl;
|
bool guidbl;
|
||||||
bool strbl;
|
bool strbl;
|
||||||
|
bool recothres;
|
||||||
|
bool lowthres;
|
||||||
|
bool higthres;
|
||||||
|
bool recothresd;
|
||||||
|
bool lowthresd;
|
||||||
|
bool higthresd;
|
||||||
|
bool decayd;
|
||||||
bool isogr;
|
bool isogr;
|
||||||
bool strengr;
|
bool strengr;
|
||||||
bool scalegr;
|
bool scalegr;
|
||||||
@ -621,6 +628,8 @@ public:
|
|||||||
bool chroMethod;
|
bool chroMethod;
|
||||||
bool quamethod;
|
bool quamethod;
|
||||||
bool usemask;
|
bool usemask;
|
||||||
|
bool invmaskd;
|
||||||
|
bool invmask;
|
||||||
bool levelthr;
|
bool levelthr;
|
||||||
bool lnoiselow;
|
bool lnoiselow;
|
||||||
bool levelthrlow;
|
bool levelthrlow;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user