Add threshold to wavelet pyramid dynamic compression
This commit is contained in:
parent
ce7da78aef
commit
40449b931b
@ -1124,6 +1124,7 @@ HISTORY_MSG_884;Local - Contrast Dynamic Range Laplacian
|
||||
HISTORY_MSG_885;Local - Contrast Dynamic Range Wavelet
|
||||
HISTORY_MSG_886;Local - Contrast Wavelet Curve Compression
|
||||
HISTORY_MSG_887;Local - Contrast Wavelet Compression Residual
|
||||
HISTORY_MSG_888;Local - Contrast Wavelet Threshold
|
||||
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
|
||||
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
|
||||
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
|
||||
@ -2595,6 +2596,7 @@ TP_LOCALLAB_TARGET_GRAY;Target Gray Point
|
||||
TP_LOCALLAB_THRES;Threshold structure
|
||||
TP_LOCALLAB_THRESDELTAE;Threshold ΔE-scope
|
||||
TP_LOCALLAB_THRESRETI;Threshold
|
||||
TP_LOCALLAB_THRESWAV;Threshold
|
||||
TP_LOCALLAB_TLABEL2;TM Effective Tm=%1 TM=%2
|
||||
TP_LOCALLAB_TLABEL;TM Datas Min=%1 Max=%2 Mean=%3 Sigma=%4 (Threshold)
|
||||
TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can act on Threshold to normalize
|
||||
|
@ -210,7 +210,7 @@ public:
|
||||
|
||||
void EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterates, int skip, struct cont_params& cp, int W_L, int H_L, float max0, float min0);
|
||||
void CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost);
|
||||
void Compresslevels(float **Source, int W_L, int H_L, float Compression, float DetailBoost);
|
||||
void Compresslevels(float **Source, int W_L, int H_L, float compression, float detailBoost, float thres, float maxp, float maxn);
|
||||
void ContrastResid(float * WavCoeffs_L0, struct cont_params &cp, int W_L, int H_L, float max0, float min0);
|
||||
|
||||
void EPDToneMap(LabImage *lab, unsigned int Iterates = 0, int skip = 1);
|
||||
@ -324,13 +324,13 @@ public:
|
||||
const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon,
|
||||
const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp,
|
||||
const LocwavCurve & loccomprewavCurve, bool & loccomprewavutili, bool wavcurvecompre,
|
||||
float sigm, float offs,int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress);
|
||||
float sigm, float offs,int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress, float thres);
|
||||
|
||||
void wavcont(wavelet_decomposition &wdspot, float ****templevel, int level_bl, int maxlvl,
|
||||
const LocwavCurve & loclevwavCurve, bool & loclevwavutili,
|
||||
const LocwavCurve & loccompwavCurve, bool & loccompwavutili,
|
||||
const LocwavCurve & loccomprewavCurve, bool & loccomprewavutili,
|
||||
float radlevblur, int process, procparams::FattalToneMappingParams &fatParams, float chromablu);
|
||||
float radlevblur, int process, procparams::FattalToneMappingParams &fatParams, float chromablu, float thres);
|
||||
|
||||
void wavcbd(wavelet_decomposition &wdspot, int level_bl, int maxlvl,
|
||||
const LocwavCurve & locconwavCurve, bool & locconwavutili, float sigm, float offs, float chromalev, int sk);
|
||||
|
@ -4096,7 +4096,7 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
|
||||
bool wavcurvecomp = false;
|
||||
bool loccomprewavutili = false;
|
||||
bool wavcurvecompre = false;
|
||||
wavcontrast4(bufmaskblurcol->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, false, 0.f);
|
||||
wavcontrast4(bufmaskblurcol->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, bfw, bfh, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurvecolwav, lmasutilicolwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, false, 0.f, 0.f);
|
||||
|
||||
}
|
||||
|
||||
@ -7044,28 +7044,32 @@ void ImProcFunctions::wavcbd(wavelet_decomposition &wdspot, int level_bl, int ma
|
||||
|
||||
}
|
||||
|
||||
void ImProcFunctions::Compresslevels(float **Source, int W_L, int H_L, float Compression, float DetailBoost)
|
||||
void ImProcFunctions::Compresslevels(float **Source, int W_L, int H_L, float compression, float detailBoost, float thres, float maxp, float maxn)
|
||||
{
|
||||
//J.Desmis 12-2019
|
||||
|
||||
float exponent;
|
||||
|
||||
if (DetailBoost > 0.f && DetailBoost < 0.05f) {
|
||||
float betemp = expf(-(2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
|
||||
if (detailBoost > 0.f && detailBoost < 0.05f) {
|
||||
float betemp = expf(-(2.f - detailBoost + 0.693147f)) - 1.f; //0.69315 = log(2)
|
||||
exponent = 1.2f * xlogf(-betemp);
|
||||
exponent /= 20.f;
|
||||
} else if (DetailBoost >= 0.05f && DetailBoost < 0.25f) {
|
||||
float betemp = expf(-(2.f - DetailBoost + 0.694f)) - 1.f;
|
||||
} else if (detailBoost >= 0.05f && detailBoost < 0.25f) {
|
||||
float betemp = expf(-(2.f - detailBoost + 0.693147f)) - 1.f;
|
||||
exponent = 1.2f * xlogf(-betemp);
|
||||
exponent /= (-75.f * DetailBoost + 23.75f);
|
||||
} else if (DetailBoost >= 0.25f) {
|
||||
float betemp = expf(-(2.f - DetailBoost + 0.694f)) - 1.f;
|
||||
exponent /= (-75.f * detailBoost + 23.75f);
|
||||
} else if (detailBoost >= 0.25f) {
|
||||
float betemp = expf(-(2.f - detailBoost + 0.693147f)) - 1.f;
|
||||
exponent = 1.2f * xlogf(-betemp);
|
||||
exponent /= (-2.f * DetailBoost + 5.5f);
|
||||
exponent /= (-2.f * detailBoost + 5.5f);
|
||||
} else {
|
||||
exponent = (Compression - 1.0f) / 20.f;
|
||||
exponent = (compression - 1.0f) / 20.f;
|
||||
}
|
||||
|
||||
exponent += 1.f;
|
||||
if(thres == 0.f) {
|
||||
thres = 0.00001f;
|
||||
}
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
@ -7073,10 +7077,10 @@ void ImProcFunctions::Compresslevels(float **Source, int W_L, int H_L, float Com
|
||||
|
||||
for (int y = 0; y < H_L; y++) {
|
||||
for (int x = 0; x < W_L; x++) {
|
||||
if (Source[y][x] > 0.f) {
|
||||
Source[y][x] = xexpf(xlogf(Source[y][x]) * exponent);
|
||||
} else {
|
||||
Source[y][x] = -xexpf(xlogf(-Source[y][x]) * exponent);
|
||||
if (Source[y][x] >= 0.f && Source[y][x] < (maxp - thres)) {
|
||||
Source[y][x] = xexpf(xlogf(Source[y][x] + thres) * exponent);
|
||||
} else if (Source[y][x] < 0.f && Source[y][x] > (maxn + thres)) {
|
||||
Source[y][x] = -xexpf(xlogf(-Source[y][x] + thres) * exponent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7088,7 +7092,7 @@ void ImProcFunctions::wavcont(wavelet_decomposition &wdspot, float ****templevel
|
||||
const LocwavCurve & loclevwavCurve, bool & loclevwavutili,
|
||||
const LocwavCurve & loccompwavCurve, bool & loccompwavutili,
|
||||
const LocwavCurve & loccomprewavCurve, bool & loccomprewavutili,
|
||||
float radlevblur, int process, FattalToneMappingParams &fatParams, float chromablu)
|
||||
float radlevblur, int process, FattalToneMappingParams &fatParams, float chromablu, float thres)
|
||||
{
|
||||
|
||||
#ifdef _OPENMP
|
||||
@ -7147,12 +7151,18 @@ void ImProcFunctions::wavcont(wavelet_decomposition &wdspot, float ****templevel
|
||||
}
|
||||
|
||||
if (process == 3) { //Dynamic compression wavelet
|
||||
float mean[10];
|
||||
float meanN[10];
|
||||
float sigma[10];
|
||||
float sigmaN[10];
|
||||
float MaxP[10];
|
||||
float MaxN[10];
|
||||
Evaluate2(wdspot, mean, meanN, sigma, sigmaN, MaxP, MaxN);
|
||||
|
||||
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);
|
||||
|
||||
if (loccomprewavCurve && loccomprewavutili) {
|
||||
float klev = 2.f * (loccomprewavCurve[level * 55.5f] - 0.5f);
|
||||
|
||||
@ -7160,14 +7170,18 @@ void ImProcFunctions::wavcont(wavelet_decomposition &wdspot, float ****templevel
|
||||
klev *= 2.f;
|
||||
}
|
||||
|
||||
float Compression = expf(-klev);
|
||||
float DetailBoost = klev;
|
||||
float compression = expf(-klev);
|
||||
float detailBoost = klev;
|
||||
|
||||
if (klev < 0.0f) {
|
||||
DetailBoost = 0.0f;
|
||||
detailBoost = 0.0f;
|
||||
}
|
||||
|
||||
Compresslevels(templevel[dir - 1][level], W_L, H_L, Compression, DetailBoost);
|
||||
|
||||
float thresref = mean[level];
|
||||
float thresreal = 0.2f * thres * thresref;
|
||||
|
||||
|
||||
Compresslevels(templevel[dir - 1][level], W_L, H_L, compression, detailBoost, thresreal, MaxP[level], MaxN[level]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7200,7 +7214,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
|
||||
const LocwavCurve & locconwavCurve, bool & locconwavutili, bool wavcurvecon,
|
||||
const LocwavCurve & loccompwavCurve, bool & loccompwavutili, bool wavcurvecomp,
|
||||
const LocwavCurve & loccomprewavCurve, bool & loccomprewavutili, bool wavcurvecompre,
|
||||
float sigm, float offs, int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress)
|
||||
float sigm, float offs, int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress, float thres)
|
||||
{
|
||||
wavelet_decomposition *wdspot = new wavelet_decomposition(tmp[0], bfw, bfh, maxlvl, 1, sk, numThreads, 6);
|
||||
|
||||
@ -7356,6 +7370,15 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
|
||||
|
||||
|
||||
if (wavcurvelev || wavcurvecomp || wavcurvecompre) {//compress dynamic and blur
|
||||
|
||||
float mean[10];
|
||||
float meanN[10];
|
||||
float sigma[10];
|
||||
float sigmaN[10];
|
||||
float MaxP[10];
|
||||
float MaxN[10];
|
||||
Evaluate2(*wdspot, mean, meanN, sigma, sigmaN, MaxP, MaxN);
|
||||
|
||||
fatParams.enabled = wavcurvecomp;
|
||||
|
||||
templevel = new float***[dir];
|
||||
@ -7379,15 +7402,15 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
|
||||
}
|
||||
|
||||
if (wavcurvelev && radlevblur > 0.f && blurena) {
|
||||
wavcont(*wdspot, templevel, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, fatParams, 1.f);
|
||||
wavcont(*wdspot, templevel, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, fatParams, 1.f, 0.f);
|
||||
}
|
||||
|
||||
if (wavcurvecomp && comprena) {
|
||||
wavcont(*wdspot, templevel, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 2, fatParams, 1.f);
|
||||
wavcont(*wdspot, templevel, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 2, fatParams, 1.f, 0.f);
|
||||
}
|
||||
|
||||
if (wavcurvecompre && compreena) {
|
||||
wavcont(*wdspot, templevel, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 3, fatParams, 1.f);
|
||||
wavcont(*wdspot, templevel, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 3, fatParams, 1.f, thres);
|
||||
}
|
||||
|
||||
//free memory templevel
|
||||
@ -7557,7 +7580,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
|
||||
}
|
||||
|
||||
if (wavcurvelev && radlevblur > 0.f) {
|
||||
wavcont(*wdspota, templevela, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, fatParams, chromablu);
|
||||
wavcont(*wdspota, templevela, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, fatParams, chromablu, 0.f);
|
||||
}
|
||||
|
||||
wdspota->reconstruct(tmpa[0], 1.f);
|
||||
@ -7612,7 +7635,7 @@ void ImProcFunctions::wavcontrast4(float ** tmp, float ** tmpa, float ** tmpb, f
|
||||
}
|
||||
|
||||
if (wavcurvelev && radlevblur > 0.f) {
|
||||
wavcont(*wdspotb, templevelb, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, fatParams, chromablu);
|
||||
wavcont(*wdspotb, templevelb, level_bl, maxlvl, loclevwavCurve, loclevwavutili, loccompwavCurve, loccompwavutili, loccomprewavCurve, loccomprewavutili, radlevblur, 1, fatParams, chromablu, 0.f);
|
||||
}
|
||||
|
||||
wdspotb->reconstruct(tmpb[0], 1.f);
|
||||
@ -9647,7 +9670,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
bool wavcurvecomp = false;
|
||||
bool loccomprewavutili = false;
|
||||
bool wavcurvecompre = false;
|
||||
wavcontrast4(bufmaskblurbl->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, false, 0.f);
|
||||
wavcontrast4(bufmaskblurbl->L, nullptr, nullptr, contrast, 0.f, 0.f, 0.f, GW, GH, level_bl, level_hl, level_br, level_hr, sk, numThreads, loclmasCurveblwav, lmasutiliblwav, dummy, loclevwavutili, wavcurvelev, dummy, locconwavutili, wavcurvecon, dummy, loccompwavutili, wavcurvecomp, dummy, loccomprewavutili, wavcurvecompre, 1.f, 1.f, maxlvl, 0.f, 0.f, 1.f, 1.f, false, false, false, false, false, 0.f, 0.f);
|
||||
}
|
||||
|
||||
int shado = params->locallab.spots.at(sp).shadmaskbl;
|
||||
@ -11598,8 +11621,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
const bool comprena = params->locallab.spots.at(sp).wavcomp;
|
||||
const bool compreena = params->locallab.spots.at(sp).wavcompre;
|
||||
const float compress = params->locallab.spots.at(sp).residcomp;
|
||||
const float thres = params->locallab.spots.at(sp).threswav;
|
||||
|
||||
wavcontrast4(tmp1->L, tmp1->a, tmp1->b, contrast, fatres, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, loccompwavCurve, loccompwavutili, wavcurvecomp, loccomprewavCurve, loccomprewavutili, wavcurvecompre, sigma, offs, maxlvl, fatdet, fatanch, chrol, chrobl, blurlc, blurena, levelena, comprena, compreena, compress);
|
||||
wavcontrast4(tmp1->L, tmp1->a, tmp1->b, contrast, fatres, radblur, radlevblur, tmp1->W, tmp1->H, level_bl, level_hl, level_br, level_hr, sk, numThreads, locwavCurve, locwavutili, loclevwavCurve, loclevwavutili, wavcurvelev, locconwavCurve, locconwavutili, wavcurvecon, loccompwavCurve, loccompwavutili, wavcurvecomp, loccomprewavCurve, loccomprewavutili, wavcurvecompre, sigma, offs, maxlvl, fatdet, fatanch, chrol, chrobl, blurlc, blurena, levelena, comprena, compreena, compress, thres);
|
||||
|
||||
const float satur = params->locallab.spots.at(sp).residchro;
|
||||
|
||||
|
@ -1432,15 +1432,15 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress
|
||||
float exponent;
|
||||
|
||||
if (DetailBoost > 0.f && DetailBoost < 0.05f ) {
|
||||
float betemp = expf (- (2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
|
||||
float betemp = expf (- (2.f - DetailBoost + 0.693147f)) - 1.f; //0.693147 = log(2)
|
||||
exponent = 1.2f * xlogf( -betemp);
|
||||
exponent /= 20.f;
|
||||
} else if (DetailBoost >= 0.05f && DetailBoost < 0.25f ) {
|
||||
float betemp = expf (- (2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
|
||||
float betemp = expf (- (2.f - DetailBoost + 0.693147f)) - 1.f;
|
||||
exponent = 1.2f * xlogf( -betemp);
|
||||
exponent /= (-75.f * DetailBoost + 23.75f);
|
||||
} else if (DetailBoost >= 0.25f) {
|
||||
float betemp = expf (- (2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
|
||||
float betemp = expf (- (2.f - DetailBoost + 0.693147f)) - 1.f;
|
||||
exponent = 1.2f * xlogf( -betemp);
|
||||
exponent /= (-2.f * DetailBoost + 5.5f);
|
||||
} else {
|
||||
@ -1448,6 +1448,7 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress
|
||||
}
|
||||
|
||||
exponent += 1.f;
|
||||
const float eps = 0.0001f;
|
||||
|
||||
// now calculate Source = pow(Source, exponent)
|
||||
#ifdef __SSE2__
|
||||
@ -1456,17 +1457,19 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress
|
||||
#endif
|
||||
{
|
||||
vfloat exponentv = F2V(exponent);
|
||||
__m128 epsv = _mm_set1_ps( eps );
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < n - 3; i += 4) {
|
||||
STVFU(Source[i], xexpf(xlogf(LVFU(Source[i])) * exponentv));
|
||||
STVFU(Source[i], xexpf(xlogf(LVFU(Source[i]) + epsv) * exponentv));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = n - (n % 4); i < n; i++) {
|
||||
Source[i] = xexpf(xlogf(Source[i]) * exponent);
|
||||
Source[i] = xexpf(xlogf(Source[i] + eps) * exponent);
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -913,6 +913,7 @@ enum ProcEventCode {
|
||||
Evlocallabwavcompre = 884,
|
||||
EvlocallabwavCurvecompre = 885,
|
||||
Evlocallabresidcomp = 886,
|
||||
Evlocallabthreswav = 887,
|
||||
NUMOFEVENTS
|
||||
};
|
||||
|
||||
|
@ -2729,6 +2729,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
||||
residcomp(0.0),
|
||||
sigma(1.0),
|
||||
offset(1.0),
|
||||
threswav(0.1),
|
||||
chromalev(1.0),
|
||||
chromablu(1.0),
|
||||
fatdet(40.0),
|
||||
@ -3143,6 +3144,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
||||
&& residcomp == other.residcomp
|
||||
&& sigma == other.sigma
|
||||
&& offset == other.offset
|
||||
&& threswav == other.threswav
|
||||
&& chromalev == other.chromalev
|
||||
&& chromablu == other.chromablu
|
||||
&& fatdet == other.fatdet
|
||||
@ -4536,6 +4538,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).residcomp, "Locallab", "Residcomp_" + std::to_string(i), spot.residcomp, 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).offset, "Locallab", "Offset_" + std::to_string(i), spot.offset, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).threswav, "Locallab", "Threswav_" + std::to_string(i), spot.threswav, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromalev, "Locallab", "Chromalev_" + std::to_string(i), spot.chromalev, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromablu, "Locallab", "Chromablu_" + std::to_string(i), spot.chromablu, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).fatdet, "Locallab", "Fatdet_" + std::to_string(i), spot.fatdet, keyFile);
|
||||
@ -6080,6 +6083,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
||||
assignFromKeyfile(keyFile, "Locallab", "Residcomp_" + std::to_string(i), pedited, spot.residcomp, spotEdited.residcomp);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Sigma_" + std::to_string(i), pedited, spot.sigma, spotEdited.sigma);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Offset_" + std::to_string(i), pedited, spot.offset, spotEdited.offset);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Threswav_" + std::to_string(i), pedited, spot.threswav, spotEdited.threswav);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Chromalev_" + std::to_string(i), pedited, spot.chromalev, spotEdited.chromalev);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Chromablu_" + std::to_string(i), pedited, spot.chromablu, spotEdited.chromablu);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Fatdet_" + std::to_string(i), pedited, spot.fatdet, spotEdited.fatdet);
|
||||
|
@ -1272,6 +1272,7 @@ struct LocallabParams {
|
||||
double residcomp;
|
||||
double sigma;
|
||||
double offset;
|
||||
double threswav;
|
||||
double chromalev;
|
||||
double chromablu;
|
||||
double fatdet;
|
||||
|
@ -916,7 +916,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, //Evlocallabwavcomp
|
||||
LUMINANCECURVE, //Evlocallabwavcompre
|
||||
LUMINANCECURVE, //EvlocallabwavCurvecompre
|
||||
LUMINANCECURVE //Evlocallabresidcomp
|
||||
LUMINANCECURVE, //Evlocallabresidcomp
|
||||
LUMINANCECURVE //Evlocallabthreswav
|
||||
|
||||
};
|
||||
|
||||
|
@ -582,6 +582,7 @@ residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100., 100., 1.,
|
||||
residcomp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCOMP"), -1., 1., 0.01, 0.))),
|
||||
sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
|
||||
offset(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFSETWAV"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
|
||||
threswav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRESWAV"), 0.001, 1., 0.001, 0.1))),
|
||||
chromalev(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMALEV"), 0.01, 2., 0.01, 1.))),
|
||||
chromablu(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMABLU"), 0.01, 2., 0.01, 1.))),
|
||||
fatdet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))),
|
||||
@ -2950,6 +2951,7 @@ pe(nullptr)
|
||||
residcomp->setAdjusterListener(this);
|
||||
sigma->setAdjusterListener(this);
|
||||
offset->setAdjusterListener(this);
|
||||
threswav->setAdjusterListener(this);
|
||||
chromalev->setAdjusterListener(this);
|
||||
chromablu->setAdjusterListener(this);
|
||||
fatdet->setAdjusterListener(this);
|
||||
@ -3024,6 +3026,7 @@ pe(nullptr)
|
||||
wavcompre->set_active (false);
|
||||
compreFrame->set_label_widget(*wavcompre);
|
||||
compreBox->pack_start(*LocalcurveEditorwavcompre, Gtk::PACK_SHRINK, 4);
|
||||
compreBox->pack_start(*threswav);
|
||||
compreBox->pack_start(*residcomp);
|
||||
compreFrame->add(*compreBox);
|
||||
|
||||
@ -5340,6 +5343,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pp->locallab.spots.at(pp->locallab.selspot).residcomp = residcomp->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).sigma = sigma->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).offset = offset->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).threswav = threswav->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).chromalev = chromalev->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).chromablu = chromablu->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).fatdet = fatdet->getValue();
|
||||
@ -5757,6 +5761,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pe->locallab.spots.at(pp->locallab.selspot).residcomp = pe->locallab.spots.at(pp->locallab.selspot).residcomp || residcomp->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).offset = pe->locallab.spots.at(pp->locallab.selspot).offset || offset->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).threswav = pe->locallab.spots.at(pp->locallab.selspot).threswav || threswav->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).chromalev = pe->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).chromablu = pe->locallab.spots.at(pp->locallab.selspot).chromablu || chromablu->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).fatdet = pe->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState();
|
||||
@ -6173,6 +6178,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).residcomp = pedited->locallab.spots.at(pp->locallab.selspot).residcomp || residcomp->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).offset = pedited->locallab.spots.at(pp->locallab.selspot).offset || offset->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).threswav = pedited->locallab.spots.at(pp->locallab.selspot).threswav || threswav->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).chromalev = pedited->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).chromablu = pedited->locallab.spots.at(pp->locallab.selspot).chromablu || chromablu->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).fatdet = pedited->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState();
|
||||
@ -6764,6 +6770,7 @@ void Locallab::localcontMethodChanged()
|
||||
residcomp->hide();
|
||||
sigma->hide();
|
||||
offset->hide();
|
||||
threswav->hide();
|
||||
chromalev->hide();
|
||||
chromablu->hide();
|
||||
fatdet->hide();
|
||||
@ -6796,6 +6803,7 @@ void Locallab::localcontMethodChanged()
|
||||
residcomp->show();
|
||||
sigma->show();
|
||||
offset->show();
|
||||
threswav->show();
|
||||
chromalev->show();
|
||||
chromablu->show();
|
||||
fatdet->show();
|
||||
@ -8967,6 +8975,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
|
||||
residcomp->setDefault(defSpot->residcomp);
|
||||
sigma->setDefault(defSpot->sigma);
|
||||
offset->setDefault(defSpot->offset);
|
||||
threswav->setDefault(defSpot->threswav);
|
||||
chromalev->setDefault(defSpot->chromalev);
|
||||
chromablu->setDefault(defSpot->chromablu);
|
||||
fatdet->setDefault(defSpot->fatdet);
|
||||
@ -9210,6 +9219,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
|
||||
residcomp->setDefaultEditedState(Irrelevant);
|
||||
sigma->setDefaultEditedState(Irrelevant);
|
||||
offset->setDefaultEditedState(Irrelevant);
|
||||
threswav->setDefaultEditedState(Irrelevant);
|
||||
chromalev->setDefaultEditedState(Irrelevant);
|
||||
chromablu->setDefaultEditedState(Irrelevant);
|
||||
fatdet->setDefaultEditedState(Irrelevant);
|
||||
@ -9458,6 +9468,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
|
||||
residcomp->setDefaultEditedState(defSpotState->residcomp ? Edited : UnEdited);
|
||||
sigma->setDefaultEditedState(defSpotState->sigma ? Edited : UnEdited);
|
||||
offset->setDefaultEditedState(defSpotState->offset ? Edited : UnEdited);
|
||||
threswav->setDefaultEditedState(defSpotState->threswav ? Edited : UnEdited);
|
||||
chromalev->setDefaultEditedState(defSpotState->chromalev ? Edited : UnEdited);
|
||||
chromablu->setDefaultEditedState(defSpotState->chromablu ? Edited : UnEdited);
|
||||
fatdet->setDefaultEditedState(defSpotState->fatdet ? Edited : UnEdited);
|
||||
@ -10649,6 +10660,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
|
||||
}
|
||||
}
|
||||
|
||||
if (a == threswav) {
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallabthreswav, threswav->getTextValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (a == chromalev) {
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallabchromalev, chromalev->getTextValue());
|
||||
@ -11172,6 +11189,7 @@ void Locallab::setBatchMode(bool batchMode)
|
||||
residcomp->showEditedCB();
|
||||
sigma->showEditedCB();
|
||||
offset->showEditedCB();
|
||||
threswav->showEditedCB();
|
||||
chromalev->showEditedCB();
|
||||
chromablu->showEditedCB();
|
||||
fatdet->showEditedCB();
|
||||
@ -12246,6 +12264,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
residcomp->setValue(pp->locallab.spots.at(index).residcomp);
|
||||
sigma->setValue(pp->locallab.spots.at(index).sigma);
|
||||
offset->setValue(pp->locallab.spots.at(index).offset);
|
||||
threswav->setValue(pp->locallab.spots.at(index).threswav);
|
||||
chromalev->setValue(pp->locallab.spots.at(index).chromalev);
|
||||
chromablu->setValue(pp->locallab.spots.at(index).chromablu);
|
||||
fatdet->setValue(pp->locallab.spots.at(index).fatdet);
|
||||
@ -12768,6 +12787,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
residcomp->setEditedState(spotState->residcomp ? Edited : UnEdited);
|
||||
sigma->setEditedState(spotState->sigma ? Edited : UnEdited);
|
||||
offset->setEditedState(spotState->offset ? Edited : UnEdited);
|
||||
threswav->setEditedState(spotState->threswav ? Edited : UnEdited);
|
||||
chromalev->setEditedState(spotState->chromalev ? Edited : UnEdited);
|
||||
chromablu->setEditedState(spotState->chromablu ? Edited : UnEdited);
|
||||
fatdet->setEditedState(spotState->fatdet ? Edited : UnEdited);
|
||||
@ -13300,6 +13320,7 @@ void Locallab::updateSpecificGUIState()
|
||||
residcomp->hide();
|
||||
sigma->hide();
|
||||
offset->hide();
|
||||
threswav->hide();
|
||||
chromalev->hide();
|
||||
chromablu->hide();
|
||||
fatdet->hide();
|
||||
@ -13330,6 +13351,7 @@ void Locallab::updateSpecificGUIState()
|
||||
levelblur->show();
|
||||
sigma->show();
|
||||
offset->show();
|
||||
threswav->show();
|
||||
chromalev->show();
|
||||
chromablu->show();
|
||||
fatdet->show();
|
||||
|
@ -374,6 +374,7 @@ private:
|
||||
Adjuster* const residcomp;
|
||||
Adjuster* const sigma;
|
||||
Adjuster* const offset;
|
||||
Adjuster* const threswav;
|
||||
Adjuster* const chromalev;
|
||||
Adjuster* const chromablu;
|
||||
Adjuster* const fatdet;
|
||||
|
@ -1265,6 +1265,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
locallab.spots.at(j).residcomp = locallab.spots.at(j).residcomp && pSpot.residcomp == otherSpot.residcomp;
|
||||
locallab.spots.at(j).sigma = locallab.spots.at(j).sigma && pSpot.sigma == otherSpot.sigma;
|
||||
locallab.spots.at(j).offset = locallab.spots.at(j).offset && pSpot.offset == otherSpot.offset;
|
||||
locallab.spots.at(j).threswav = locallab.spots.at(j).threswav && pSpot.threswav == otherSpot.threswav;
|
||||
locallab.spots.at(j).chromalev = locallab.spots.at(j).chromalev && pSpot.chromalev == otherSpot.chromalev;
|
||||
locallab.spots.at(j).chromablu = locallab.spots.at(j).chromablu && pSpot.chromablu == otherSpot.chromablu;
|
||||
locallab.spots.at(j).fatdet = locallab.spots.at(j).fatdet && pSpot.fatdet == otherSpot.fatdet;
|
||||
@ -4043,6 +4044,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.locallab.spots.at(i).offset = mods.locallab.spots.at(i).offset;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).threswav) {
|
||||
toEdit.locallab.spots.at(i).threswav = mods.locallab.spots.at(i).threswav;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).chromalev) {
|
||||
toEdit.locallab.spots.at(i).chromalev = mods.locallab.spots.at(i).chromalev;
|
||||
}
|
||||
@ -5644,6 +5649,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
||||
residcomp(v),
|
||||
sigma(v),
|
||||
offset(v),
|
||||
threswav(v),
|
||||
chromalev(v),
|
||||
chromablu(v),
|
||||
fatdet(v),
|
||||
@ -6048,6 +6054,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
||||
residcomp = v;
|
||||
sigma = v;
|
||||
offset = v;
|
||||
threswav = v;
|
||||
chromalev = v;
|
||||
chromablu = v;
|
||||
fatdet = v;
|
||||
|
@ -698,6 +698,7 @@ public:
|
||||
bool residcomp;
|
||||
bool sigma;
|
||||
bool offset;
|
||||
bool threswav;
|
||||
bool chromalev;
|
||||
bool chromablu;
|
||||
bool fatdet;
|
||||
|
Loading…
x
Reference in New Issue
Block a user