Add contrast by level to wavelet pyramid
This commit is contained in:
parent
66e0309696
commit
2f414e20ed
@ -1097,6 +1097,8 @@ HISTORY_MSG_857;Local - Contrast Blur Residual
|
||||
HISTORY_MSG_858;Local - Contrast Luminance only
|
||||
HISTORY_MSG_859;Local - Contrast Maximum Blur levels
|
||||
HISTORY_MSG_860;Local - Contrast Curve Blur levels
|
||||
HISTORY_MSG_861;Local - Contrast Curve Contrast levels
|
||||
HISTORY_MSG_862;Local - Contrast Sigma luminance
|
||||
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
|
||||
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
|
||||
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
|
||||
@ -2222,6 +2224,7 @@ TP_LOCALLAB_COL_VIS;Status
|
||||
TP_LOCALLAB_COMPLEX_METHOD;Software Complexity
|
||||
TP_LOCALLAB_COMPLEX_TOOLTIP; Allow user to select Local adjustements rubrics.
|
||||
TP_LOCALLAB_CONTCOL;Contrast threshold Mask Blur
|
||||
TP_LOCALLAB_CONTFRA;Contrast by Level
|
||||
TP_LOCALLAB_CONTRAST;Contrast
|
||||
TP_LOCALLAB_CONTRESID;Contrast
|
||||
TP_LOCALLAB_CONTTHR;Contrast Threshold
|
||||
@ -2518,6 +2521,7 @@ TP_LOCALLAB_SHOWSTRUC;Show structure Spot
|
||||
TP_LOCALLAB_SHOWSTRUCEX;Show structure Spot - disabled in "normal"
|
||||
TP_LOCALLAB_SHOWT;4 - Mask and modifications
|
||||
TP_LOCALLAB_SHOWVI;3 - Mask and modifications
|
||||
TP_LOCALLAB_SIGMAWAV;Sigma
|
||||
TP_LOCALLAB_SIM;Simple
|
||||
TP_LOCALLAB_SLOMASKCOL;Slope mask
|
||||
TP_LOCALLAB_SLOSH;Slope
|
||||
@ -2577,6 +2581,7 @@ TP_LOCALLAB_WAMASKCOL;Mask Wavelet level
|
||||
TP_LOCALLAB_WARM;Warm - Cool & Color artifacts
|
||||
TP_LOCALLAB_WARM_TOOLTIP;This slider use Ciecam algorithm and acts as White Balance, it can warm or cool the area selected.\nIt can also in some cases reduce color artifacts.
|
||||
TP_LOCALLAB_WAV;Levels local contrast
|
||||
TP_LOCALLAB_WAVCON;Contrast by Level
|
||||
TP_LOCALLAB_WAVE;Wavelet
|
||||
TP_LOCALLAB_WAVHIGH;Wavelet high
|
||||
TP_LOCALLAB_WAVLEV;Blur by Level
|
||||
|
@ -928,6 +928,7 @@ void Crop::update(int todo)
|
||||
bool llmasblutili = parent->llmasblutili;
|
||||
bool locwavutili = parent->locwavutili;
|
||||
bool loclevwavutili = parent->loclevwavutili;
|
||||
bool locconwavutili = parent->locconwavutili;
|
||||
bool lmasutiliblwav = parent->lmasutiliblwav;
|
||||
bool lmasutilicolwav = parent->lmasutilicolwav;
|
||||
|
||||
@ -968,6 +969,7 @@ void Crop::update(int todo)
|
||||
LocwavCurve loclmasCurveblwav;
|
||||
LocwavCurve loclmasCurvecolwav;
|
||||
LocwavCurve loclevwavCurve;
|
||||
LocwavCurve locconwavCurve;
|
||||
|
||||
LocretigainCurverab locRETgainCurverab;
|
||||
locallutili = false;
|
||||
@ -1012,6 +1014,7 @@ void Crop::update(int todo)
|
||||
|
||||
locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili);
|
||||
loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve, loclevwavutili);
|
||||
locconwavCurve.Set(params.locallab.spots.at(sp).locconwavcurve, locconwavutili);
|
||||
locallutili = false;
|
||||
CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve2, sca);
|
||||
localclutili = false;
|
||||
@ -1104,6 +1107,7 @@ void Crop::update(int todo)
|
||||
loclmasCurvecolwav,lmasutilicolwav,
|
||||
locwavCurve, locwavutili,
|
||||
loclevwavCurve, loclevwavutili,
|
||||
locconwavCurve, locconwavutili,
|
||||
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
|
||||
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav,
|
||||
parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
|
||||
@ -1136,6 +1140,7 @@ void Crop::update(int todo)
|
||||
loclmasCurvecolwav,lmasutilicolwav,
|
||||
locwavCurve, locwavutili,
|
||||
loclevwavCurve, loclevwavutili,
|
||||
locconwavCurve, locconwavutili,
|
||||
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
|
||||
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
|
||||
@ -1192,6 +1197,7 @@ void Crop::update(int todo)
|
||||
lochhmasblCurve.Reset();
|
||||
locwavCurve.Reset();
|
||||
loclevwavCurve.Reset();
|
||||
locconwavCurve.Reset();
|
||||
loclmasCurveblwav.Reset();
|
||||
loclmasCurvecolwav.Reset();
|
||||
|
||||
|
@ -220,6 +220,7 @@ ImProcCoordinator::ImProcCoordinator() :
|
||||
llmascbutili(false),
|
||||
locwavutili(false),
|
||||
loclevwavutili(false),
|
||||
locconwavutili(false),
|
||||
lmasutiliblwav(false),
|
||||
lmasutilicolwav(false),
|
||||
LHutili(false),
|
||||
@ -1081,6 +1082,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
||||
lcmasutili = false;
|
||||
locwavutili = false;
|
||||
loclevwavutili = false;
|
||||
locconwavutili = false;
|
||||
lmasutiliblwav = false;
|
||||
lmasutilicolwav = false;
|
||||
locRETgainCurve.Set(params->locallab.spots.at(sp).localTgaincurve);
|
||||
@ -1117,6 +1119,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
||||
|
||||
locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve, locwavutili);
|
||||
loclevwavCurve.Set(params->locallab.spots.at(sp).loclevwavcurve, loclevwavutili);
|
||||
locconwavCurve.Set(params->locallab.spots.at(sp).locconwavcurve, locconwavutili);
|
||||
CurveFactory::curveLocal(locallutili, params->locallab.spots.at(sp).llcurve, lllocalcurve, sca);
|
||||
CurveFactory::curveLocal(localclutili, params->locallab.spots.at(sp).clcurve, cllocalcurve, sca);
|
||||
CurveFactory::curveLocal(locallcutili, params->locallab.spots.at(sp).lccurve, lclocalcurve, sca);
|
||||
@ -1225,6 +1228,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
||||
loclmasCurvecolwav, lmasutilicolwav,
|
||||
locwavCurve, locwavutili,
|
||||
loclevwavCurve, loclevwavutili,
|
||||
locconwavCurve, locconwavutili,
|
||||
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
||||
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav,
|
||||
locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask,
|
||||
@ -1262,6 +1266,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
||||
loclmasCurvecolwav, lmasutilicolwav,
|
||||
locwavCurve, locwavutili,
|
||||
loclevwavCurve, loclevwavutili,
|
||||
locconwavCurve, locconwavutili,
|
||||
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
||||
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
|
||||
@ -1340,6 +1345,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
||||
lochhmasblCurve.Reset();
|
||||
locwavCurve.Reset();
|
||||
loclevwavCurve.Reset();
|
||||
locconwavCurve.Reset();
|
||||
loclmasCurveblwav.Reset();
|
||||
loclmasCurvecolwav.Reset();
|
||||
}
|
||||
|
@ -285,6 +285,7 @@ protected:
|
||||
LocwavCurve loclmasCurveblwav;
|
||||
LocwavCurve loclmasCurvecolwav;
|
||||
LocwavCurve loclevwavCurve;
|
||||
LocwavCurve locconwavCurve;
|
||||
|
||||
bool locallutili;
|
||||
bool localclutili;
|
||||
@ -327,6 +328,7 @@ protected:
|
||||
bool llmasblutili;
|
||||
bool locwavutili;
|
||||
bool loclevwavutili;
|
||||
bool locconwavutili;
|
||||
bool lmasutiliblwav;
|
||||
bool lmasutilicolwav;
|
||||
bool LHutili;
|
||||
|
@ -299,6 +299,7 @@ public:
|
||||
const LocwavCurve & loclmasCurvecolwav, bool & lmasutilicolwav,
|
||||
const LocwavCurve & locwavCurve, bool & locwavutili,
|
||||
const LocwavCurve & loclevwavCurve, bool & loclevwavutili,
|
||||
const LocwavCurve & locconwavCurve, bool & locconwavutili,
|
||||
bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc,
|
||||
double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav,
|
||||
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
|
||||
@ -312,7 +313,7 @@ public:
|
||||
static void strcurv_data(std::string retistr, int *s_datc, int &siz);
|
||||
void blendstruc(int bfw, int bfh, LabImage* bufcolorig, float radius, float stru, array2D<float> & blend2, int sk, bool multiThread);
|
||||
|
||||
void wavcontrast4(float ** tmp, float contrast, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads, const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev, int & maxlvl);
|
||||
void wavcontrast4(float ** tmp, float contrast, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads, const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev, const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon, float sigm, int & maxlvl);
|
||||
void transit_shapedetect2(int call, int senstype, const LabImage * bufexporig, const LabImage * bufexpfin, LabImage * originalmask, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk);
|
||||
|
||||
void transit_shapedetect_retinex(int call, int senstype, LabImage * bufexporig, LabImage * bufmask, LabImage * buforigmas, float **buflight, float **bufchro, const float hueref, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk);
|
||||
|
@ -3995,7 +3995,9 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
|
||||
LocwavCurve dummy;
|
||||
bool loclevwavutili = false;
|
||||
bool wavcurvelev = false;
|
||||
wavcontrast4(bufmaskblurcol->L, contrast, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, maxlvl);
|
||||
bool locconwavutili = false;
|
||||
bool wavcurvecon = false;
|
||||
wavcontrast4(bufmaskblurcol->L, contrast, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, 1.f, maxlvl);
|
||||
|
||||
}
|
||||
|
||||
@ -6732,7 +6734,8 @@ void ImProcFunctions::fftw_tile_blur(int GW, int GH, int tilssize, int max_numbl
|
||||
fftwf_destroy_plan(plan_backward_blox[1]);
|
||||
fftwf_cleanup();
|
||||
}
|
||||
void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads, const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev, int & maxlvl)
|
||||
void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur, float radlevblur, int bfw, int bfh, int level_bl, int level_hl, int level_br, int level_hr, int sk, bool numThreads,
|
||||
const LocwavCurve & locwavCurve, bool & locwavutili, const LocwavCurve & loclevwavCurve, bool & loclevwavutili, bool wavcurvelev, const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon, float sigm, int & maxlvl)
|
||||
{
|
||||
wavelet_decomposition *wdspot = new wavelet_decomposition(tmp[0], bfw, bfh, level_br, 1, sk, numThreads, 6);
|
||||
|
||||
@ -6774,10 +6777,6 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur,
|
||||
}
|
||||
|
||||
if (contrast != 0.) {
|
||||
// int W_L = wdspot->level_W(0);
|
||||
// int H_L = wdspot->level_H(0);
|
||||
// float *wav_L0 = wdspot->coeff0;
|
||||
|
||||
|
||||
double avedbl = 0.0; // use double precision for large summations
|
||||
|
||||
@ -6822,6 +6821,76 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float contrast, float radblur,
|
||||
float MaxP[10];
|
||||
float MaxN[10];
|
||||
Evaluate2(*wdspot, mean, meanN, sigma, sigmaN, MaxP, MaxN);
|
||||
|
||||
if (wavcurvecon) {
|
||||
float beta;
|
||||
float mea[9];
|
||||
|
||||
for (int dir = 1; dir < 4; dir++) {
|
||||
for (int level = level_bl; level < maxlvl; ++level) {
|
||||
int W_L = wdspot->level_W(level);
|
||||
int H_L = wdspot->level_H(level);
|
||||
float **wav_L = wdspot->level_coeffs(level);
|
||||
mea[0] = mean[level] / 6.f;
|
||||
mea[1] = mean[level] / 2.f;
|
||||
mea[2] = mean[level]; // 50% data
|
||||
mea[3] = mean[level] + sigm * sigma[level] / 2.f;
|
||||
mea[4] = mean[level] + sigm * sigma[level]; //66%
|
||||
mea[5] = mean[level] + sigm * 1.2f * sigma[level];
|
||||
mea[6] = mean[level] + sigm * 1.5f * sigma[level]; //
|
||||
mea[7] = mean[level] + sigm * 2.f * sigma[level]; //95%
|
||||
mea[8] = mean[level] + sigm * 2.5f * sigma[level]; //99%
|
||||
|
||||
if (locconwavCurve && locconwavutili) {
|
||||
|
||||
float cpMul = 200.f * (locconwavCurve[level * 50.f] - 0.5f);
|
||||
|
||||
if(cpMul > 0.f) {
|
||||
cpMul *= 2.f;
|
||||
}
|
||||
|
||||
cpMul /= sk;
|
||||
|
||||
for (int i = 0; i < W_L * H_L; i++) {
|
||||
|
||||
if (cpMul < 0.f) {
|
||||
beta = 1.f; // disabled for negatives values "less contrast"
|
||||
} else {
|
||||
float WavCL = fabsf(wav_L[dir][i]);
|
||||
|
||||
//reduction amplification: max action between mean / 2 and mean + sigma
|
||||
// arbitrary coefficient, we can add a slider !!
|
||||
if (WavCL < mea[0]) {
|
||||
beta = 0.6f; //preserve very low contrast (sky...)
|
||||
} else if (WavCL < mea[1]) {
|
||||
beta = 0.8f;
|
||||
} else if (WavCL < mea[2]) {
|
||||
beta = 1.f; //standard
|
||||
} else if (WavCL < mea[3]) {
|
||||
beta = 1.f;
|
||||
} else if (WavCL < mea[4]) {
|
||||
beta = 0.8f; //+sigma
|
||||
} else if (WavCL < mea[5]) {
|
||||
beta = 0.6f;
|
||||
} else if (WavCL < mea[6]) {
|
||||
beta = 0.4f;
|
||||
} else if (WavCL < mea[7]) {
|
||||
beta = 0.2f; // + 2 sigma
|
||||
} else if (WavCL < mea[8]) {
|
||||
beta = 0.1f;
|
||||
} else {
|
||||
beta = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
float alpha = (1024.f + 15.f * (float) cpMul * beta) / 1024.f ;
|
||||
wav_L[dir][i] *= alpha;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float alow = 1.f;
|
||||
float blow = 0.f;
|
||||
|
||||
@ -8480,6 +8549,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
const LocwavCurve & loclmasCurvecolwav, bool & lmasutilicolwav,
|
||||
const LocwavCurve & locwavCurve, bool & locwavutili,
|
||||
const LocwavCurve & loclevwavCurve, bool & loclevwavutili,
|
||||
const LocwavCurve & locconwavCurve, bool & locconwavutili,
|
||||
bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc,
|
||||
double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, int &lastsav,
|
||||
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
|
||||
@ -8877,7 +8947,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
LocwavCurve dummy;
|
||||
bool loclevwavutili = false;
|
||||
bool wavcurvelev = false;
|
||||
wavcontrast4(bufmaskblurbl->L, contrast, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, maxlvl);
|
||||
bool locconwavutili = false;
|
||||
bool wavcurvecon = false;
|
||||
wavcontrast4(bufmaskblurbl->L, contrast, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, 1.f, maxlvl);
|
||||
}
|
||||
|
||||
int shado = params->locallab.spots.at(sp).shadmaskbl;
|
||||
@ -10556,8 +10628,19 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
}
|
||||
|
||||
bool wavcurvecon = false;
|
||||
|
||||
if ((lp.lcamount > 0.f || wavcurve || wavcurvelev || params->locallab.spots.at(sp).residblur > 0.f || params->locallab.spots.at(sp).levelblur > 0.f || params->locallab.spots.at(sp).residcont != 0.f || params->locallab.spots.at(sp).clarilres != 0.f || params->locallab.spots.at(sp).claricres != 0.f) && call < 3 && lp.lcena) {
|
||||
if (locconwavCurve && locconwavutili) {
|
||||
if (lp.locmet == 1) {
|
||||
for (int i = 0; i < 500; i++) {
|
||||
if (locconwavCurve[i] != 0.5) {
|
||||
wavcurvecon = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((lp.lcamount > 0.f || wavcurve || wavcurvelev || wavcurvecon || params->locallab.spots.at(sp).residblur > 0.f || params->locallab.spots.at(sp).levelblur > 0.f || params->locallab.spots.at(sp).residcont != 0.f || params->locallab.spots.at(sp).clarilres != 0.f || params->locallab.spots.at(sp).claricres != 0.f) && call < 3 && lp.lcena) {
|
||||
int ystart = std::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0);
|
||||
int yend = std::min(static_cast<int>(lp.yc + lp.ly) - cy, original->H);
|
||||
int xstart = std::max(static_cast<int>(lp.xc - lp.lxL) - cx, 0);
|
||||
@ -10803,8 +10886,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
const float radblur = (params->locallab.spots.at(sp).residblur) / sk;
|
||||
const bool blurlc = params->locallab.spots.at(sp).blurlc;
|
||||
const float radlevblur = (params->locallab.spots.at(sp).levelblur) / sk;
|
||||
const float sigma = params->locallab.spots.at(sp).sigma;
|
||||
|
||||
wavcontrast4(tmp1->L, contrast, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, maxlvl);
|
||||
wavcontrast4(tmp1->L, contrast, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, sigma, maxlvl);
|
||||
|
||||
const float satur = params->locallab.spots.at(sp).residchro;
|
||||
|
||||
|
@ -886,6 +886,8 @@ enum ProcEventCode {
|
||||
Evlocallabblurlc = 857,
|
||||
Evlocallablevelblur = 858,
|
||||
EvlocallabwavCurvelev = 859,
|
||||
EvlocallabwavCurvecon = 860,
|
||||
Evlocallabsigma = 861,
|
||||
NUMOFEVENTS
|
||||
};
|
||||
|
||||
|
@ -2725,6 +2725,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
||||
residblur(0.0),
|
||||
levelblur(0.0),
|
||||
residchro(0.0),
|
||||
sigma(1.0),
|
||||
clarilres(0.0),
|
||||
claricres(0.0),
|
||||
clarisoft(0.0),
|
||||
@ -2735,6 +2736,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
||||
locwavcurve{(double)FCT_MinMaxCPoints, 0.0, 0.5, 0.35, 0.35, 1., 0.5, 0.35, 0.35},
|
||||
csthreshold(0, 0, 5, 5, false),
|
||||
loclevwavcurve{(double)FCT_MinMaxCPoints, 0.0, 0.0, 0.0, 0.35, 0.5, 0., 0.35, 0.35, 1.0, 0.0, 0.35, 0.35},
|
||||
locconwavcurve{(double)FCT_MinMaxCPoints, 0.0, 0.5, 0.35, 0.35, 1., 0.5, 0.35, 0.35},
|
||||
// Contrast by detail levels
|
||||
expcbdl(false),
|
||||
mult{1.0, 1.0, 1.0, 1.0, 1.0, 1.0},
|
||||
@ -3112,6 +3114,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
||||
&& residblur == other.residblur
|
||||
&& levelblur == other.levelblur
|
||||
&& residchro == other.residchro
|
||||
&& sigma == other.sigma
|
||||
&& clarilres == other.clarilres
|
||||
&& claricres == other.claricres
|
||||
&& clarisoft == other.clarisoft
|
||||
@ -3122,6 +3125,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
||||
&& locwavcurve == other.locwavcurve
|
||||
&& csthreshold == other.csthreshold
|
||||
&& loclevwavcurve == other.loclevwavcurve
|
||||
&& locconwavcurve == other.locconwavcurve
|
||||
// Constrast by detail levels
|
||||
&& expcbdl == other.expcbdl
|
||||
&& [this, &other]()->bool {
|
||||
@ -4479,6 +4483,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residblur, "Locallab", "Residblur_" + std::to_string(i), spot.residblur, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).levelblur, "Locallab", "Levelblur_" + std::to_string(i), spot.levelblur, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residchro, "Locallab", "Residchro_" + std::to_string(i), spot.residchro, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sigma, "Locallab", "Sigma_" + std::to_string(i), spot.sigma, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).clarilres, "Locallab", "ClariLres_" + std::to_string(i), spot.clarilres, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).claricres, "Locallab", "ClariCres_" + std::to_string(i), spot.claricres, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).clarisoft, "Locallab", "Clarisoft_" + std::to_string(i), spot.clarisoft, keyFile);
|
||||
@ -4488,6 +4493,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).localcontMethod, "Locallab", "localcontMethod_" + std::to_string(i), spot.localcontMethod, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).locwavcurve, "Locallab", "LocwavCurve_" + std::to_string(i), spot.locwavcurve, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).loclevwavcurve, "Locallab", "LoclevwavCurve_" + std::to_string(i), spot.loclevwavcurve, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).locconwavcurve, "Locallab", "LocconwavCurve_" + std::to_string(i), spot.locconwavcurve, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).csthreshold, "Locallab", "CSThreshold_" + std::to_string(i), spot.csthreshold.toVector(), keyFile);
|
||||
// Contrast by detail levels
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expcbdl, "Locallab", "Expcbdl_" + std::to_string(i), spot.expcbdl, keyFile);
|
||||
@ -5995,6 +6001,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
||||
assignFromKeyfile(keyFile, "Locallab", "Residblur_" + std::to_string(i), pedited, spot.residblur, spotEdited.residblur);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Levelblur_" + std::to_string(i), pedited, spot.levelblur, spotEdited.levelblur);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Residchro_" + std::to_string(i), pedited, spot.residchro, spotEdited.residchro);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Sigma_" + std::to_string(i), pedited, spot.sigma, spotEdited.sigma);
|
||||
assignFromKeyfile(keyFile, "Locallab", "ClariLres_" + std::to_string(i), pedited, spot.clarilres, spotEdited.clarilres);
|
||||
assignFromKeyfile(keyFile, "Locallab", "ClariCres_" + std::to_string(i), pedited, spot.claricres, spotEdited.claricres);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Clarisoft_" + std::to_string(i), pedited, spot.clarisoft, spotEdited.clarisoft);
|
||||
@ -6004,6 +6011,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
||||
assignFromKeyfile(keyFile, "Locallab", "localcontMethod_" + std::to_string(i), pedited, spot.localcontMethod, spotEdited.localcontMethod);
|
||||
assignFromKeyfile(keyFile, "Locallab", "LocwavCurve_" + std::to_string(i), pedited, spot.locwavcurve, spotEdited.locwavcurve);
|
||||
assignFromKeyfile(keyFile, "Locallab", "LoclevwavCurve_" + std::to_string(i), pedited, spot.loclevwavcurve, spotEdited.loclevwavcurve);
|
||||
assignFromKeyfile(keyFile, "Locallab", "LocconwavCurve_" + std::to_string(i), pedited, spot.locconwavcurve, spotEdited.locconwavcurve);
|
||||
if (keyFile.has_key("Locallab", "CSThreshold_" + std::to_string(i))) {
|
||||
|
||||
const std::vector<int> thresh = keyFile.get_integer_list("Locallab", "CSThreshold_" + std::to_string(i));
|
||||
|
@ -1268,6 +1268,7 @@ struct LocallabParams {
|
||||
double residblur;
|
||||
double levelblur;
|
||||
double residchro;
|
||||
double sigma;
|
||||
double clarilres;
|
||||
double claricres;
|
||||
double clarisoft;
|
||||
@ -1278,6 +1279,7 @@ struct LocallabParams {
|
||||
std::vector<double> locwavcurve;
|
||||
Threshold<int> csthreshold;
|
||||
std::vector<double> loclevwavcurve;
|
||||
std::vector<double> locconwavcurve;
|
||||
|
||||
// Contrast by detail levels
|
||||
bool expcbdl;
|
||||
|
@ -889,7 +889,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, //Evlocallabresidblur
|
||||
LUMINANCECURVE, // Evlocallabblurlc
|
||||
LUMINANCECURVE, //Evlocallablevelblur
|
||||
LUMINANCECURVE //EvlocallabwavCurvelev
|
||||
LUMINANCECURVE, //EvlocallabwavCurvelev
|
||||
LUMINANCECURVE, //EvlocallabwavCurvecon
|
||||
LUMINANCECURVE //Evlocallabsigma
|
||||
|
||||
};
|
||||
|
||||
|
@ -1117,6 +1117,7 @@ private:
|
||||
LocwavCurve loclmasCurvecolwav;
|
||||
LocwavCurve locwavCurve;
|
||||
LocwavCurve loclevwavCurve;
|
||||
LocwavCurve locconwavCurve;
|
||||
LUTf lllocalcurve(65536, 0);
|
||||
LUTf lclocalcurve(65536, 0);
|
||||
LUTf cllocalcurve(65536, 0);
|
||||
@ -1192,6 +1193,7 @@ private:
|
||||
bool llmasblutili = false;
|
||||
bool locwavutili = false;
|
||||
bool loclevwavutili = false;
|
||||
bool locconwavutili = false;
|
||||
bool lmasutiliblwav = false;
|
||||
bool lmasutilicolwav = false;
|
||||
locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve);
|
||||
@ -1228,6 +1230,7 @@ private:
|
||||
|
||||
locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili);
|
||||
loclevwavCurve.Set(params.locallab.spots.at(sp).loclevwavcurve, loclevwavutili);
|
||||
locconwavCurve.Set(params.locallab.spots.at(sp).locconwavcurve, locconwavutili);
|
||||
CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, 1);
|
||||
CurveFactory::curveLocal(localclutili, params.locallab.spots.at(sp).clcurve, cllocalcurve, 1);
|
||||
CurveFactory::curveLocal(locallcutili, params.locallab.spots.at(sp).lccurve, lclocalcurve, 1);
|
||||
@ -1300,6 +1303,7 @@ private:
|
||||
loclmasCurvecolwav,lmasutilicolwav,
|
||||
locwavCurve, locwavutili,
|
||||
loclevwavCurve, loclevwavutili,
|
||||
locconwavCurve, locconwavutili,
|
||||
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
||||
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
|
||||
|
@ -348,6 +348,9 @@ Locallab::Locallab():
|
||||
LocalcurveEditorwavlev(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVLEV"))),
|
||||
wavshapelev(static_cast<FlatCurveEditor*>(LocalcurveEditorwavlev->addCurve(CT_Flat, "", nullptr, false, false))),
|
||||
|
||||
LocalcurveEditorwavcon(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCON"))),
|
||||
wavshapecon(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcon->addCurve(CT_Flat, "", nullptr, false, false))),
|
||||
|
||||
//CBDL
|
||||
maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
|
||||
mask2cbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
|
||||
@ -554,6 +557,7 @@ clarisoft(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARISOFT"), 0., 100., 0.5, 0.
|
||||
claricres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARICRES"), -20., 100., 0.5, 0.))),
|
||||
sensilc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIS"), 0, 100, 1, 19))),
|
||||
residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100, 100, 1, 0))),
|
||||
sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.3, 2., 0.01, 1.))),
|
||||
multiplier(
|
||||
[this]() -> std::array<Adjuster*, 6> {
|
||||
std::array<Adjuster*, 6> res = {};
|
||||
@ -732,6 +736,7 @@ residFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")))),
|
||||
clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))),
|
||||
blurlevelFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")))),
|
||||
blurresidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURRESIDFRA")))),
|
||||
contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTFRA")))),
|
||||
grainFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRAINFRA")))),
|
||||
logFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGFRA")))),
|
||||
logPFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGPFRA")))),
|
||||
@ -2797,6 +2802,18 @@ pe(nullptr)
|
||||
|
||||
LocalcurveEditorwavlev->curveListComplete();
|
||||
|
||||
LocalcurveEditorwavcon->setCurveListener(this);
|
||||
|
||||
wavshapecon->setIdentityValue(0.);
|
||||
wavshapecon->setResetCurve(FlatCurveType(defSpot.locconwavcurve.at(0)), defSpot.locconwavcurve);
|
||||
|
||||
if (showtooltip) {
|
||||
// wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP"));
|
||||
}
|
||||
|
||||
LocalcurveEditorwavcon->curveListComplete();
|
||||
|
||||
|
||||
localcontMethod->append(M("TP_LOCALLAB_LOCCONT"));
|
||||
localcontMethod->append(M("TP_LOCALLAB_WAVE"));
|
||||
localcontMethod->set_active(0);
|
||||
@ -2828,6 +2845,7 @@ pe(nullptr)
|
||||
residblur->setAdjusterListener(this);
|
||||
levelblur->setAdjusterListener(this);
|
||||
residchro->setAdjusterListener(this);
|
||||
sigma->setAdjusterListener(this);
|
||||
clarilres->setAdjusterListener(this);
|
||||
clarisoft->setAdjusterListener(this);
|
||||
claricres->setAdjusterListener(this);
|
||||
@ -2862,6 +2880,12 @@ pe(nullptr)
|
||||
blurlevcontBox->pack_start(*LocalcurveEditorwavlev, Gtk::PACK_SHRINK, 4);
|
||||
blurlevelFrame->add(*blurlevcontBox);
|
||||
|
||||
contFrame->set_label_align(0.025, 0.5);
|
||||
ToolParamBlock* const contlevBox = Gtk::manage(new ToolParamBlock());
|
||||
contlevBox->pack_start(*sigma);
|
||||
contlevBox->pack_start(*LocalcurveEditorwavcon, Gtk::PACK_SHRINK, 4);
|
||||
contFrame->add(*contlevBox);
|
||||
|
||||
setExpandAlignProperties(expcontrastpyr, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||
expcontrastpyr->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcontrastpyr));
|
||||
expcontrastpyr->setLevel(2);
|
||||
@ -2869,6 +2893,7 @@ pe(nullptr)
|
||||
blurcontBox->pack_start(*clariFrame);
|
||||
blurcontBox->pack_start(*blurresidFrame);
|
||||
blurcontBox->pack_start(*blurlevelFrame);
|
||||
blurcontBox->pack_start(*contFrame);
|
||||
|
||||
expcontrastpyr->add(*blurcontBox, false);
|
||||
|
||||
@ -3556,6 +3581,7 @@ Locallab::~Locallab()
|
||||
delete LocalcurveEditorgainT;
|
||||
delete LocalcurveEditorwav;
|
||||
delete LocalcurveEditorwavlev;
|
||||
delete LocalcurveEditorwavcon;
|
||||
delete masktmCurveEditorG;
|
||||
delete maskblCurveEditorG;
|
||||
delete mask2blCurveEditorG;
|
||||
@ -5031,6 +5057,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pp->locallab.spots.at(pp->locallab.selspot).residblur = residblur->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).levelblur = levelblur->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).residchro = residchro->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).sigma = sigma->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).clarilres = clarilres->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).claricres = claricres->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).clarisoft = clarisoft->getValue();
|
||||
@ -5040,6 +5067,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pp->locallab.spots.at(pp->locallab.selspot).locwavcurve = wavshape->getCurve();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).csthreshold = csThreshold->getValue<int>();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).loclevwavcurve = wavshapelev->getCurve();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).locconwavcurve = wavshapecon->getCurve();
|
||||
|
||||
if (localcontMethod->get_active_row_number() == 0) {
|
||||
pp->locallab.spots.at(pp->locallab.selspot).localcontMethod = "loc";
|
||||
@ -5421,6 +5449,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pe->locallab.spots.at(pp->locallab.selspot).residblur = pe->locallab.spots.at(pp->locallab.selspot).residblur || residblur->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).levelblur = pe->locallab.spots.at(pp->locallab.selspot).levelblur || levelblur->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).residchro = pe->locallab.spots.at(pp->locallab.selspot).residchro || residchro->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).sigma = pe->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).clarilres = pe->locallab.spots.at(pp->locallab.selspot).clarilres || clarilres->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).claricres = pe->locallab.spots.at(pp->locallab.selspot).claricres || claricres->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).clarisoft = pe->locallab.spots.at(pp->locallab.selspot).clarisoft || clarisoft->getEditedState();
|
||||
@ -5431,6 +5460,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pe->locallab.spots.at(pp->locallab.selspot).locwavcurve = pe->locallab.spots.at(pp->locallab.selspot).locwavcurve || !wavshape->isUnChanged();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).loclevwavcurve = pe->locallab.spots.at(pp->locallab.selspot).loclevwavcurve || !wavshapelev->isUnChanged();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).csthreshold = pe->locallab.spots.at(pp->locallab.selspot).csthreshold || csThreshold->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).locconwavcurve = pe->locallab.spots.at(pp->locallab.selspot).locconwavcurve || !wavshapecon->isUnChanged();
|
||||
// Contrast by detail levels
|
||||
pe->locallab.spots.at(pp->locallab.selspot).expcbdl = pe->locallab.spots.at(pp->locallab.selspot).expcbdl || !expcbdl->get_inconsistent();
|
||||
|
||||
@ -5808,6 +5838,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).residblur = pedited->locallab.spots.at(pp->locallab.selspot).residblur || residblur->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).levelblur = pedited->locallab.spots.at(pp->locallab.selspot).levelblur || levelblur->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).residchro = pedited->locallab.spots.at(pp->locallab.selspot).residchro || residchro->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).sigma = pedited->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).clarilres = pedited->locallab.spots.at(pp->locallab.selspot).clarilres || clarilres->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).claricres = pedited->locallab.spots.at(pp->locallab.selspot).claricres || claricres->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).clarisoft = pedited->locallab.spots.at(pp->locallab.selspot).clarisoft || clarisoft->getEditedState();
|
||||
@ -5817,6 +5848,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).locwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).locwavcurve || !wavshape->isUnChanged();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).loclevwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).loclevwavcurve || !wavshapelev->isUnChanged();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).csthreshold = pedited->locallab.spots.at(pp->locallab.selspot).csthreshold || csThreshold->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).locconwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).locconwavcurve || !wavshapecon->isUnChanged();
|
||||
// Contrast by detail levels
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).expcbdl = pedited->locallab.spots.at(pp->locallab.selspot).expcbdl || !expcbdl->get_inconsistent();
|
||||
|
||||
@ -6302,6 +6334,12 @@ void Locallab::curveChanged(CurveEditor* ce)
|
||||
}
|
||||
}
|
||||
|
||||
if (ce == wavshapecon) {
|
||||
if (listener) {
|
||||
listener->panelChanged(EvlocallabwavCurvecon, M("HISTORY_CUSTOMCURVE"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -6314,6 +6352,7 @@ void Locallab::localcontMethodChanged()
|
||||
residblur->hide();
|
||||
levelblur->hide();
|
||||
residchro->hide();
|
||||
sigma->hide();
|
||||
clarilres->hide();
|
||||
claricres->hide();
|
||||
clarisoft->hide();
|
||||
@ -6325,6 +6364,7 @@ void Locallab::localcontMethodChanged()
|
||||
lclightness->show();
|
||||
LocalcurveEditorwav->hide();
|
||||
LocalcurveEditorwavlev->hide();
|
||||
LocalcurveEditorwavcon->hide();
|
||||
fftwlc->show();
|
||||
blurlc->show();
|
||||
} else if (localcontMethod->get_active_row_number() == 1) {
|
||||
@ -6333,6 +6373,7 @@ void Locallab::localcontMethodChanged()
|
||||
residblur->show();
|
||||
levelblur->show();
|
||||
residchro->show();
|
||||
sigma->show();
|
||||
clarilres->show();
|
||||
claricres->show();
|
||||
clarisoft->show();
|
||||
@ -6343,7 +6384,8 @@ void Locallab::localcontMethodChanged()
|
||||
lcdarkness->hide();
|
||||
lclightness->hide();
|
||||
LocalcurveEditorwav->show();
|
||||
LocalcurveEditorwavlev->show();
|
||||
LocalcurveEditorwavlev->hide();
|
||||
LocalcurveEditorwavcon->hide();
|
||||
fftwlc->hide();
|
||||
blurlc->show();
|
||||
}
|
||||
@ -8312,6 +8354,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
|
||||
residblur->setDefault(defSpot->residblur);
|
||||
levelblur->setDefault(defSpot->levelblur);
|
||||
residchro->setDefault(defSpot->residchro);
|
||||
sigma->setDefault(defSpot->sigma);
|
||||
clarilres->setDefault(defSpot->clarilres);
|
||||
claricres->setDefault(defSpot->claricres);
|
||||
clarisoft->setDefault(defSpot->clarisoft);
|
||||
@ -8544,6 +8587,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
|
||||
residblur->setDefaultEditedState(Irrelevant);
|
||||
levelblur->setDefaultEditedState(Irrelevant);
|
||||
residchro->setDefaultEditedState(Irrelevant);
|
||||
sigma->setDefaultEditedState(Irrelevant);
|
||||
clarilres->setDefaultEditedState(Irrelevant);
|
||||
claricres->setDefaultEditedState(Irrelevant);
|
||||
clarisoft->setDefaultEditedState(Irrelevant);
|
||||
@ -8781,6 +8825,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
|
||||
residblur->setDefaultEditedState(defSpotState->residblur ? Edited : UnEdited);
|
||||
levelblur->setDefaultEditedState(defSpotState->levelblur ? Edited : UnEdited);
|
||||
residchro->setDefaultEditedState(defSpotState->residchro ? Edited : UnEdited);
|
||||
sigma->setDefaultEditedState(defSpotState->sigma ? Edited : UnEdited);
|
||||
clarilres->setDefaultEditedState(defSpotState->clarilres ? Edited : UnEdited);
|
||||
claricres->setDefaultEditedState(defSpotState->claricres ? Edited : UnEdited);
|
||||
clarisoft->setDefaultEditedState(defSpotState->clarisoft ? Edited : UnEdited);
|
||||
@ -9946,6 +9991,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
|
||||
}
|
||||
}
|
||||
|
||||
if (a ==sigma) {
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallabsigma, sigma->getTextValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (a == clarilres) {
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallabclarilres, clarilres->getTextValue());
|
||||
@ -10417,6 +10468,7 @@ void Locallab::setBatchMode(bool batchMode)
|
||||
residblur->showEditedCB();
|
||||
levelblur->showEditedCB();
|
||||
residchro->showEditedCB();
|
||||
sigma->showEditedCB();
|
||||
clarilres->showEditedCB();
|
||||
claricres->showEditedCB();
|
||||
clarisoft->showEditedCB();
|
||||
@ -11465,6 +11517,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
residblur->setValue(pp->locallab.spots.at(index).residblur);
|
||||
levelblur->setValue(pp->locallab.spots.at(index).levelblur);
|
||||
residchro->setValue(pp->locallab.spots.at(index).residchro);
|
||||
sigma->setValue(pp->locallab.spots.at(index).sigma);
|
||||
clarilres->setValue(pp->locallab.spots.at(index).clarilres);
|
||||
claricres->setValue(pp->locallab.spots.at(index).claricres);
|
||||
clarisoft->setValue(pp->locallab.spots.at(index).clarisoft);
|
||||
@ -11492,6 +11545,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
|
||||
wavshape->setCurve(pp->locallab.spots.at(index).locwavcurve);
|
||||
wavshapelev->setCurve(pp->locallab.spots.at(index).loclevwavcurve);
|
||||
wavshapecon->setCurve(pp->locallab.spots.at(index).locconwavcurve);
|
||||
|
||||
if (fftwlc->get_active()) {
|
||||
lcradius->setLimits(20, 1000, 1, 80);
|
||||
@ -11959,6 +12013,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
residblur->setEditedState(spotState->residblur ? Edited : UnEdited);
|
||||
levelblur->setEditedState(spotState->levelblur ? Edited : UnEdited);
|
||||
residchro->setEditedState(spotState->residchro ? Edited : UnEdited);
|
||||
sigma->setEditedState(spotState->sigma ? Edited : UnEdited);
|
||||
clarilres->setEditedState(spotState->clarilres ? Edited : UnEdited);
|
||||
claricres->setEditedState(spotState->claricres ? Edited : UnEdited);
|
||||
clarisoft->setEditedState(spotState->clarisoft ? Edited : UnEdited);
|
||||
@ -11968,6 +12023,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
wavshape->setUnChanged(!spotState->locwavcurve);
|
||||
wavshapelev->setUnChanged(!spotState->loclevwavcurve);
|
||||
csThreshold->setEditedState(spotState->csthreshold ? Edited : UnEdited);
|
||||
wavshapecon->setUnChanged(!spotState->locconwavcurve);
|
||||
|
||||
if (!spotState->retinexMethod) {
|
||||
localcontMethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||
@ -12465,6 +12521,7 @@ void Locallab::updateSpecificGUIState()
|
||||
residblur->hide();
|
||||
levelblur->hide();
|
||||
residchro->hide();
|
||||
sigma->hide();
|
||||
clarilres->hide();
|
||||
claricres->hide();
|
||||
clarisoft->hide();
|
||||
@ -12476,6 +12533,7 @@ void Locallab::updateSpecificGUIState()
|
||||
lclightness->show();
|
||||
LocalcurveEditorwav->hide();
|
||||
LocalcurveEditorwavlev->hide();
|
||||
LocalcurveEditorwavcon->hide();
|
||||
fftwlc->show();
|
||||
blurlc->show();
|
||||
} else if (localcontMethod->get_active_row_number() == 1) {
|
||||
@ -12483,6 +12541,7 @@ void Locallab::updateSpecificGUIState()
|
||||
residcont->show();
|
||||
residblur->show();
|
||||
levelblur->show();
|
||||
sigma->show();
|
||||
residchro->show();
|
||||
clarilres->show();
|
||||
claricres->show();
|
||||
@ -12495,6 +12554,7 @@ void Locallab::updateSpecificGUIState()
|
||||
lclightness->hide();
|
||||
LocalcurveEditorwav->show();
|
||||
LocalcurveEditorwavlev->show();
|
||||
LocalcurveEditorwavcon->show();
|
||||
fftwlc->hide();
|
||||
blurlc->show();
|
||||
}
|
||||
|
@ -168,6 +168,8 @@ private:
|
||||
FlatCurveEditor* const wavshape;
|
||||
CurveEditorGroup* const LocalcurveEditorwavlev;
|
||||
FlatCurveEditor* const wavshapelev;
|
||||
CurveEditorGroup* const LocalcurveEditorwavcon;
|
||||
FlatCurveEditor* const wavshapecon;
|
||||
|
||||
//Cbdl
|
||||
CurveEditorGroup* const maskcbCurveEditorG;
|
||||
@ -355,6 +357,7 @@ private:
|
||||
Adjuster* const claricres;
|
||||
Adjuster* const sensilc;
|
||||
Adjuster* const residchro;
|
||||
Adjuster* const sigma;
|
||||
// Contrast by detail levels
|
||||
const std::array<Adjuster*, 6> multiplier;
|
||||
Adjuster* const chromacbdl;
|
||||
@ -573,6 +576,7 @@ private:
|
||||
Gtk::Frame* const clariFrame;
|
||||
Gtk::Frame* const blurlevelFrame;
|
||||
Gtk::Frame* const blurresidFrame;
|
||||
Gtk::Frame* const contFrame;
|
||||
Gtk::Frame* const grainFrame;
|
||||
Gtk::Frame* const logFrame;
|
||||
Gtk::Frame* const logPFrame;
|
||||
|
@ -1261,6 +1261,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
locallab.spots.at(j).residblur = locallab.spots.at(j).residblur && pSpot.residblur == otherSpot.residblur;
|
||||
locallab.spots.at(j).levelblur = locallab.spots.at(j).levelblur && pSpot.levelblur == otherSpot.levelblur;
|
||||
locallab.spots.at(j).residchro = locallab.spots.at(j).residchro && pSpot.residchro == otherSpot.residchro;
|
||||
locallab.spots.at(j).sigma = locallab.spots.at(j).sigma && pSpot.sigma == otherSpot.sigma;
|
||||
locallab.spots.at(j).clarilres = locallab.spots.at(j).clarilres && pSpot.clarilres == otherSpot.clarilres;
|
||||
locallab.spots.at(j).claricres = locallab.spots.at(j).claricres && pSpot.claricres == otherSpot.claricres;
|
||||
locallab.spots.at(j).clarisoft = locallab.spots.at(j).clarisoft && pSpot.clarisoft == otherSpot.clarisoft;
|
||||
@ -1270,6 +1271,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
locallab.spots.at(j).localcontMethod = locallab.spots.at(j).localcontMethod && pSpot.localcontMethod == otherSpot.localcontMethod;
|
||||
locallab.spots.at(j).locwavcurve = locallab.spots.at(j).locwavcurve && pSpot.locwavcurve == otherSpot.locwavcurve;
|
||||
locallab.spots.at(j).loclevwavcurve = locallab.spots.at(j).loclevwavcurve && pSpot.loclevwavcurve == otherSpot.loclevwavcurve;
|
||||
locallab.spots.at(j).locconwavcurve = locallab.spots.at(j).locconwavcurve && pSpot.locconwavcurve == otherSpot.locconwavcurve;
|
||||
locallab.spots.at(j).csthreshold = locallab.spots.at(j).csthreshold && pSpot.csthreshold == otherSpot.csthreshold;
|
||||
// Contrast by detail levels
|
||||
locallab.spots.at(j).expcbdl = locallab.spots.at(j).expcbdl && pSpot.expcbdl == otherSpot.expcbdl;
|
||||
@ -3999,6 +4001,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.locallab.spots.at(i).residchro = mods.locallab.spots.at(i).residchro;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).sigma) {
|
||||
toEdit.locallab.spots.at(i).sigma = mods.locallab.spots.at(i).sigma;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).clarilres) {
|
||||
toEdit.locallab.spots.at(i).clarilres = mods.locallab.spots.at(i).clarilres;
|
||||
}
|
||||
@ -4035,6 +4041,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.locallab.spots.at(i).loclevwavcurve = mods.locallab.spots.at(i).loclevwavcurve;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).locconwavcurve) {
|
||||
toEdit.locallab.spots.at(i).locconwavcurve = mods.locallab.spots.at(i).locconwavcurve;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).csthreshold) {
|
||||
toEdit.locallab.spots.at(i).csthreshold = mods.locallab.spots.at(i).csthreshold;
|
||||
}
|
||||
@ -5507,6 +5517,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
||||
residblur(v),
|
||||
levelblur(v),
|
||||
residchro(v),
|
||||
sigma(v),
|
||||
clarilres(v),
|
||||
claricres(v),
|
||||
clarisoft(v),
|
||||
@ -5516,6 +5527,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
||||
localcontMethod(v),
|
||||
locwavcurve(v),
|
||||
loclevwavcurve(v),
|
||||
locconwavcurve(v),
|
||||
csthreshold(v),
|
||||
// Contrast by detail levels
|
||||
expcbdl(v),
|
||||
@ -5884,6 +5896,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
||||
residblur = v;
|
||||
levelblur = v;
|
||||
residchro = v;
|
||||
sigma = v;
|
||||
clarilres = v;
|
||||
claricres = v;
|
||||
clarisoft = v;
|
||||
@ -5893,6 +5906,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
||||
localcontMethod = v;
|
||||
locwavcurve = v;
|
||||
loclevwavcurve = v;
|
||||
locconwavcurve = v;
|
||||
csthreshold = v;
|
||||
// Contrast by detail levels
|
||||
expcbdl = v;
|
||||
|
@ -694,6 +694,7 @@ public:
|
||||
bool residblur;
|
||||
bool levelblur;
|
||||
bool residchro;
|
||||
bool sigma;
|
||||
bool clarilres;
|
||||
bool claricres;
|
||||
bool clarisoft;
|
||||
@ -703,6 +704,7 @@ public:
|
||||
bool localcontMethod;
|
||||
bool locwavcurve;
|
||||
bool loclevwavcurve;
|
||||
bool locconwavcurve;
|
||||
bool csthreshold;
|
||||
// Contrast by detail levels
|
||||
bool expcbdl;
|
||||
|
Loading…
x
Reference in New Issue
Block a user