Take into account deltaE to reduce artifacts with Transmission Map
This commit is contained in:
parent
2ed52360f5
commit
015cef4e74
@ -902,7 +902,7 @@ HISTORY_MSG_653;Local - SH mask chroma
|
||||
HISTORY_MSG_654;Local - SH mask gamma
|
||||
HISTORY_MSG_655;Local - SH mask slope
|
||||
HISTORY_MSG_656;Local - Color soft radius
|
||||
HISTORY_MSG_657;Local - Retinex Guided Filter radius
|
||||
HISTORY_MSG_657;Local - Retinex Reduce artifacts
|
||||
HISTORY_MSG_658;Local - CBDL soft radius
|
||||
HISTORY_MSG_659;Local Spot transition-weakening
|
||||
HISTORY_MSG_660;Local - cbdl clarity
|
||||
@ -2212,6 +2212,8 @@ TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP;Adapt these values according to images - if
|
||||
TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improve quality and allow big radius, but increases the treatment time.\nThe treatment time depends on the surface to be treated.\nTo be used preferably for large radius.\n\nDimensions can be reduced by a few pixels to optimize FFTW.\nThis optimization can reduce the treatment time by a factor of 1.5 to 10.\n
|
||||
TP_LOCALLAB_RETI_FFTW_TOOLTIP;FFT improve quality and allow big radius, but increases the treatment time.\nThe treatment time depends on the surface to be treated\nThe treatment time depends on the value of scale (be carefull to high values).\nTo be used preferably for large radius.\n\nDimensions can be reduced by a few pixels to optimize FFTW.\nThis optimization can reduce the treatment time by a factor of 1.5 to 10.\nOptimization not used in Preview
|
||||
TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP;If enabled Mask uses Restored Datas after Transmission Map instead of Original datas
|
||||
TP_LOCALLAB_SOFTRETI;Reduce artifact deltaE
|
||||
TP_LOCALLAB_SOFTRETI_TOOLTIP;Take into account deltaE to improve Transmission map
|
||||
TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain
|
||||
TP_LOCALLAB_TRANSMISSIONMAP;Transmission map
|
||||
TP_LOCALLAB_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction.\nYou can act on this curve to change Transmission and reduce the artifacts
|
||||
|
@ -194,7 +194,7 @@ public:
|
||||
void fftw_convol_blur2(float **input2, float **output2, int bfw, int bfh, float radius, int fftkern, int algo);
|
||||
void fftw_tile_blur(int GW, int GH, int tilssize , int max_numblox_W, int min_numblox_W, float **tmp1, int numThreads, double radius);
|
||||
|
||||
void MSRLocal(int sp, bool fftw, int lum, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, int bfwr, int bfhr, const procparams::LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
|
||||
void MSRLocal(int sp, bool fftw, int lum, float** reducDE, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, int bfwr, int bfhr, const procparams::LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
|
||||
const LocCCmaskCurve & locccmasretiCurve, bool &lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool &llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, int llretiMask, LabImage * transformed, bool retiMasktmap, bool retiMask);
|
||||
void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &chromarefblur, double &lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, float &avg);
|
||||
void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot);
|
||||
|
@ -67,6 +67,7 @@
|
||||
#define CLIP42_35(x) LIM(x, 0.42, 3.5)
|
||||
#define CLIP2_30(x) LIM(x, 0.2, 3.)
|
||||
#define CLIPMAX(x) LIM(x,0.f,500000.f)
|
||||
#define CLIPdE(x) LIM(x,0.3f,1.f)
|
||||
|
||||
#pragma GCC diagnostic warning "-Wall"
|
||||
#pragma GCC diagnostic warning "-Wextra"
|
||||
@ -8806,6 +8807,46 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
}
|
||||
|
||||
float raddE = params->locallab.spots.at(sp).softradiusret;
|
||||
|
||||
//calc dE and reduction to use in MSR to reduce artifacts
|
||||
const int limscope = 80;
|
||||
const float mindE = 4.f + MINSCOPE * lp.sensh * lp.thr;
|
||||
const float maxdE = 5.f + MAXSCOPE * lp.sensh * (1 + 0.1f * lp.thr);
|
||||
const float mindElim = 2.f + MINSCOPE * limscope * lp.thr;
|
||||
const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr);
|
||||
const float refa = chromaref * cos(hueref);
|
||||
const float refb = chromaref * sin(hueref);
|
||||
|
||||
|
||||
float *reducDE[Hd] ALIGNED16;
|
||||
float *reducDEBuffer = new float[Hd * Wd];
|
||||
|
||||
for (int i = 0; i < Hd; i++) {
|
||||
reducDE[i] = &reducDEBuffer[i * Wd];
|
||||
}
|
||||
|
||||
// float minreduc = 1000000.f;
|
||||
// float maxreduc = -1000000.f;
|
||||
float ade = 0.01f * raddE;
|
||||
float bde = 100.f - raddE;
|
||||
float sensibefore = ade * lp.sensh + bde;//we can change sensitivity 0.1 90 or 0.3 70 or 0.4 60
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for schedule(dynamic,16)
|
||||
#endif
|
||||
|
||||
for (int y = 0; y < transformed->H ; y++)
|
||||
for (int x = 0; x < transformed->W; x++) {
|
||||
float dE = sqrt(SQR(refa - bufreti->a[y][x] / 327.68f) + SQR(refb - bufreti->b[y][x] / 327.68f) + SQR(lumaref - bufreti->b[y][x] / 327.68f));
|
||||
float reducdE;
|
||||
calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sensibefore, reducdE);
|
||||
reducDE[y][x] = CLIPdE(reducdE);
|
||||
// if(reducDE[y][x] > maxreduc) maxreduc = reducDE[y][x];
|
||||
// if(reducDE[y][x] < minreduc) minreduc = reducDE[y][x];
|
||||
|
||||
}
|
||||
|
||||
// printf("reducdemax=%f reducmin=%f\n", maxreduc, minreduc);
|
||||
float *orig[Hd] ALIGNED16;
|
||||
float *origBuffer = new float[Hd * Wd];
|
||||
|
||||
@ -8893,7 +8934,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
bool fftw = lp.ftwreti;
|
||||
//fftw = false;
|
||||
//for Retinex Mask are incorporated in MSR
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 1, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 1, reducDE, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, transformed, lp.enaretiMasktmap, lp.enaretiMask);
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
@ -9021,7 +9062,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
bool fftw = false;
|
||||
|
||||
if (params->locallab.spots.at(sp).chrrt > 40.f) { //second step active Retinex Chroma
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 0, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 1, 4, 0.8f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 0, nullptr, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 1, 4, 0.8f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, transformed, lp.enaretiMasktmap, lp.enaretiMask);
|
||||
}
|
||||
|
||||
@ -9098,6 +9139,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
|
||||
delete tmpl;
|
||||
delete [] reducDEBuffer;
|
||||
delete [] origBuffer;
|
||||
delete [] origBuffer1;
|
||||
|
||||
@ -9273,6 +9315,41 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
}
|
||||
|
||||
float raddE = params->locallab.spots.at(sp).softradiusret;
|
||||
|
||||
//calc dE and reduction to use in MSR to reduce artifacts
|
||||
const int limscope = 80;
|
||||
const float mindE = 4.f + MINSCOPE * lp.sensh * lp.thr;
|
||||
const float maxdE = 5.f + MAXSCOPE * lp.sensh * (1 + 0.1f * lp.thr);
|
||||
const float mindElim = 2.f + MINSCOPE * limscope * lp.thr;
|
||||
const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr);
|
||||
const float refa = chromaref * cos(hueref);
|
||||
const float refb = chromaref * sin(hueref);
|
||||
|
||||
|
||||
float *reducDE[Hd] ALIGNED16;
|
||||
float *reducDEBuffer = new float[Hd * Wd];
|
||||
|
||||
for (int i = 0; i < Hd; i++) {
|
||||
reducDE[i] = &reducDEBuffer[i * Wd];
|
||||
}
|
||||
|
||||
float ade = 0.01f * raddE;
|
||||
float bde = 100.f - raddE;
|
||||
float sensibefore = ade * lp.sensh + bde;//we can change sensitivity 0.1 90 or 0.3 70 or 0.4 60
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for schedule(dynamic,16)
|
||||
#endif
|
||||
|
||||
for (int y = ystart; y < yend ; y++)
|
||||
for (int x = xstart; x < xend; x++) {
|
||||
float dE = sqrt(SQR(refa - bufreti->a[y - ystart][x - xstart] / 327.68f) + SQR(refb - bufreti->b[y - ystart][x - xstart] / 327.68f) + SQR(lumaref - bufreti->b[y - ystart][x - xstart] / 327.68f));
|
||||
float reducdE;
|
||||
calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sensibefore, reducdE);
|
||||
reducDE[y - ystart][x - xstart] = CLIPdE(reducdE);
|
||||
|
||||
}
|
||||
|
||||
float *orig[Hd] ALIGNED16;
|
||||
float *origBuffer = new float[Hd * Wd];
|
||||
|
||||
@ -9358,7 +9435,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
bool fftw = lp.ftwreti;
|
||||
//for Retinex Mask are incorporated in MSR
|
||||
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 1, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, bfwr, bfhr, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 1, reducDE, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, bfwr, bfhr, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, transformed, lp.enaretiMasktmap, lp.enaretiMask);
|
||||
|
||||
#ifdef _OPENMP
|
||||
@ -9496,7 +9573,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
bool fftw = false;
|
||||
|
||||
if (params->locallab.spots.at(sp).chrrt > 40.f) { //second step active Retinex Chroma
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 0, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 1, 4, 0.8f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
ImProcFunctions::MSRLocal(sp, fftw, 0, nullptr, bufreti, bufmask, buforig, buforigmas, orig, tmpl->L, orig1, Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 1, 4, 0.8f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||
locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, transformed, lp.enaretiMasktmap, lp.enaretiMask);
|
||||
}
|
||||
|
||||
@ -9573,6 +9650,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
|
||||
delete tmpl;
|
||||
delete [] reducDEBuffer;
|
||||
delete [] origBuffer;
|
||||
delete [] origBuffer1;
|
||||
|
||||
|
@ -861,7 +861,6 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
bufmaskblurreti.reset(new LabImage(W_L, H_L));
|
||||
std::unique_ptr<LabImage> bufmaskorigreti;
|
||||
bufmaskorigreti.reset(new LabImage(W_L, H_L));
|
||||
printf("mask 1\n");
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for schedule(dynamic,16)
|
||||
#endif
|
||||
@ -878,7 +877,6 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
}
|
||||
}
|
||||
|
||||
printf("mask 2\n");
|
||||
|
||||
float fab = 4000.f;//value must be good in most cases
|
||||
|
||||
@ -934,7 +932,6 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
}
|
||||
}
|
||||
|
||||
printf("mask 3\n");
|
||||
|
||||
if (loc.spots.at(sp).radmaskreti > 0.f) {
|
||||
guidedFilter(guid, ble, ble, loc.spots.at(sp).radmaskreti * 10.f / skip, 0.001, multiThread, 4);
|
||||
@ -956,7 +953,6 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
bufmaskblurreti->L[ir][jr] = lutTonemaskreti[L_];
|
||||
}
|
||||
|
||||
printf("mask 4\n");
|
||||
|
||||
//blend
|
||||
#ifdef _OPENMP
|
||||
@ -993,7 +989,6 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
}
|
||||
}
|
||||
|
||||
printf("mask 5\n");
|
||||
|
||||
}
|
||||
|
||||
@ -1029,11 +1024,9 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
gaussianBlur(buforig->a, buforigmas->a, W_L, H_L, radius);
|
||||
gaussianBlur(buforig->b, buforigmas->b, W_L, H_L, radius);
|
||||
}
|
||||
printf("mask 6\n");
|
||||
|
||||
}
|
||||
|
||||
printf("mask 7\n");
|
||||
|
||||
if (llretiMask == 3) {
|
||||
|
||||
@ -1054,7 +1047,7 @@ void maskforretinex(int sp, int before, float ** luminance, float ** out, int W_
|
||||
}
|
||||
|
||||
|
||||
void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, int bfwr, int bfhr, const LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
|
||||
void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, float** reducDE, LabImage * bufreti, LabImage * bufmask, LabImage * buforig, LabImage * buforigmas, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, int bfwr, int bfhr, const LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
|
||||
const LocCCmaskCurve & locccmasretiCurve, bool &lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool &llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, int llretiMask, LabImage * transformed, bool retiMasktmap, bool retiMask)
|
||||
{
|
||||
BENCHFUN
|
||||
@ -1080,7 +1073,6 @@ void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, LabImage * bufreti, L
|
||||
float ilimD = 1.f / limD;
|
||||
float threslum = loc.spots.at(sp).limd;
|
||||
const float elogt = 2.71828f;
|
||||
float radi = loc.spots.at(sp).softradiusret;
|
||||
|
||||
if (!logli) {
|
||||
useHslLin = true;
|
||||
@ -1306,379 +1298,266 @@ void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, LabImage * bufreti, L
|
||||
|
||||
}
|
||||
|
||||
if (scal >= 1 && radi > 100000.f) {//always desactivated
|
||||
float mintran = luminance[0][0];
|
||||
float maxtran = mintran;
|
||||
|
||||
if (scal == 1) {
|
||||
float kval = 1.f;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for reduction(min:mintran) reduction(max:maxtran) schedule(dynamic,16)
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int ir = 0; ir < H_L; ir++) {
|
||||
for (int jr = 0; jr < W_L; jr++) {
|
||||
mintran = rtengine::min(luminance[ir][jr], mintran);
|
||||
maxtran = rtengine::max(luminance[ir][jr], maxtran);
|
||||
for (int y = 0; y < H_L; ++y) {
|
||||
for (int x = 0; x < W_L; ++x) {
|
||||
float threslow = threslum * 163.f;
|
||||
|
||||
if (src[y][x] < threslow) {
|
||||
kval = src[y][x] / threslow;
|
||||
}
|
||||
}
|
||||
|
||||
float deltatran = maxtran - mintran;
|
||||
|
||||
// printf("minT=%f maxT=%f delt=%f \n", mintran, maxtran, deltatran);
|
||||
//here add GuidFilter for transmission map
|
||||
array2D<float> ble(W_L, H_L);
|
||||
array2D<float> guid(W_L, H_L);
|
||||
// float clipt = loc.spots.at(sp).cliptm;
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
guid[i][j] = src[i][j] / 32768.f;
|
||||
ble[i][j] = LIM((luminance[i][j] - mintran) / deltatran, 0.f, 1.f);
|
||||
}
|
||||
|
||||
double epsilmax = 0.9;
|
||||
double epsilmin = 1e-5;
|
||||
|
||||
if (radi > 0.f) {
|
||||
double aepsil = (epsilmax - epsilmin) / 90.f;
|
||||
double bepsil = epsilmax - 100.f * aepsil;
|
||||
double epsil = aepsil * radi + bepsil;
|
||||
|
||||
float blur = 10.f / skip * (0.00001f + 0.8f * radi);
|
||||
rtengine::guidedFilter(guid, ble, ble, blur, epsil, multiThread, 4);
|
||||
|
||||
}
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
luminance[i][j] = ble[i][j] * deltatran + mintran;
|
||||
}
|
||||
|
||||
ble(0, 0);
|
||||
guid(0, 0);
|
||||
}
|
||||
|
||||
|
||||
if (scal == 1) {
|
||||
float kval = 1.f;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int y = 0; y < H_L; ++y) {
|
||||
for (int x = 0; x < W_L; ++x) {
|
||||
float threslow = threslum * 163.f;
|
||||
|
||||
if (src[y][x] < threslow) {
|
||||
kval = src[y][x] / threslow;
|
||||
}
|
||||
}
|
||||
for (int y = 0; y < H_L; ++y) {
|
||||
for (int x = 0; x < W_L; ++x) {
|
||||
float buf = (src[y][x] - out[y][x]) * value_1;
|
||||
buf *= (buf > 0.f) ? lig : dar;
|
||||
luminance[y][x] = LIM(src[y][x] + (1.f + kval) * buf, -32768.f, 32768.f);
|
||||
}
|
||||
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int y = 0; y < H_L; ++y) {
|
||||
for (int x = 0; x < W_L; ++x) {
|
||||
float buf = (src[y][x] - out[y][x]) * value_1;
|
||||
buf *= (buf > 0.f) ? lig : dar;
|
||||
luminance[y][x] = LIM(src[y][x] + (1.f + kval) * buf, -32768.f, 32768.f);
|
||||
}
|
||||
}
|
||||
|
||||
double avg = 0.f;
|
||||
int ng = 0;
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i++) {
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
avg += luminance[i][j];
|
||||
ng++;
|
||||
}
|
||||
}
|
||||
|
||||
avg /= ng;
|
||||
avg /= 32768.f;
|
||||
avg = LIM01(avg);
|
||||
float contreal = 0.5f * vart;
|
||||
DiagonalCurve reti_contrast({
|
||||
DCT_NURBS,
|
||||
0, 0,
|
||||
avg - avg * (0.6 - contreal / 250.0), avg - avg * (0.6 + contreal / 250.0),
|
||||
avg + (1 - avg) * (0.6 - contreal / 250.0), avg + (1 - avg) * (0.6 + contreal / 250.0),
|
||||
1, 1
|
||||
});
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
float buf = LIM01(luminance[i][j] / 32768.f);
|
||||
buf = reti_contrast.getVal(buf);
|
||||
buf *= 32768.f;
|
||||
luminance[i][j] = buf;
|
||||
}
|
||||
}
|
||||
|
||||
if (scal == 1 && radi > 1000000.f) {//always desactivated
|
||||
float mintran = luminance[0][0];
|
||||
float maxtran = mintran;
|
||||
double avg = 0.f;
|
||||
int ng = 0;
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for reduction(min:mintran) reduction(max:maxtran) schedule(dynamic,16)
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int ir = 0; ir < H_L; ir++) {
|
||||
for (int jr = 0; jr < W_L; jr++) {
|
||||
mintran = rtengine::min(luminance[ir][jr], mintran);
|
||||
maxtran = rtengine::max(luminance[ir][jr], maxtran);
|
||||
}
|
||||
for (int i = 0; i < H_L; i++) {
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
avg += luminance[i][j];
|
||||
ng++;
|
||||
}
|
||||
|
||||
float deltatran = maxtran - mintran;
|
||||
array2D<float> ble(W_L, H_L);
|
||||
array2D<float> guid(W_L, H_L);
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
guid[i][j] = src[i][j] / 32768.f;
|
||||
ble[i][j] = (luminance[i][j] - mintran) / deltatran;
|
||||
}
|
||||
|
||||
double epsilmax = 0.9;
|
||||
double epsilmin = 1e-4;
|
||||
|
||||
if (radi > 0.f) {
|
||||
double aepsil = (epsilmax - epsilmin) / 90.f;
|
||||
double bepsil = epsilmax - 100.f * aepsil;
|
||||
double epsil = aepsil * radi + bepsil;
|
||||
|
||||
float blur = 10.f / skip * (0.001f + 0.2f * radi);
|
||||
rtengine::guidedFilter(guid, ble, ble, blur, epsil, multiThread, 4);
|
||||
|
||||
}
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
luminance[i][j] = ble[i][j] * deltatran + mintran;
|
||||
}
|
||||
|
||||
ble(0, 0);
|
||||
guid(0, 0);
|
||||
|
||||
}
|
||||
|
||||
delete [] buffer;
|
||||
delete [] outBuffer;
|
||||
outBuffer = nullptr;
|
||||
delete [] srcBuffer;
|
||||
srcBuffer = nullptr;
|
||||
|
||||
float str = strength * (chrome == 0 ? 1.f : 0.8f * (chrT - 0.4f));
|
||||
const float maxclip = (chrome == 0 ? 32768.f : 50000.f);
|
||||
|
||||
if (scal != 1) {
|
||||
mean = 0.f;
|
||||
stddv = 0.f;
|
||||
|
||||
mean_stddv2(luminance, mean, stddv, W_L, H_L, maxtr, mintr);
|
||||
// printf("mean=%f std=%f delta=%f maxtr=%f mintr=%f\n", mean, stddv, delta, maxtr, mintr);
|
||||
|
||||
if (locRETtransCcurve && mean != 0.f && stddv != 0.f) { //if curve
|
||||
float asig = 0.166666f / stddv;
|
||||
float bsig = 0.5f - asig * mean;
|
||||
float amax = 0.333333f / (maxtr - mean - stddv);
|
||||
float bmax = 1.f - amax * maxtr;
|
||||
float amin = 0.333333f / (mean - stddv - mintr);
|
||||
float bmin = -amin * mintr;
|
||||
|
||||
asig *= 500.f;
|
||||
bsig *= 500.f;
|
||||
amax *= 500.f;
|
||||
bmax *= 500.f;
|
||||
amin *= 500.f;
|
||||
bmin *= 500.f;
|
||||
avg /= ng;
|
||||
avg /= 32768.f;
|
||||
avg = LIM01(avg);
|
||||
float contreal = 0.5f * vart;
|
||||
DiagonalCurve reti_contrast({
|
||||
DCT_NURBS,
|
||||
0, 0,
|
||||
avg - avg * (0.6 - contreal / 250.0), avg - avg * (0.6 + contreal / 250.0),
|
||||
avg + (1 - avg) * (0.6 - contreal / 250.0), avg + (1 - avg) * (0.6 + contreal / 250.0),
|
||||
1, 1
|
||||
});
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel
|
||||
#endif
|
||||
{
|
||||
float absciss;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp for schedule(dynamic,16)
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i++)
|
||||
for (int j = 0; j < W_L; j++) { //for mintr to maxtr evalate absciss in function of original transmission
|
||||
if (LIKELY(fabsf(luminance[i][j] - mean) < stddv)) {
|
||||
absciss = asig * luminance[i][j] + bsig;
|
||||
} else if (luminance[i][j] >= mean) {
|
||||
absciss = amax * luminance[i][j] + bmax;
|
||||
} else { /*if(luminance[i][j] <= mean - stddv)*/
|
||||
absciss = amin * luminance[i][j] + bmin;
|
||||
}
|
||||
|
||||
//TODO : move multiplication by 4.f and subtraction of 1.f inside the curve
|
||||
luminance[i][j] *= (-1.f + 4.f * locRETtransCcurve[absciss]); //new transmission
|
||||
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < H_L; i++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
float buf = LIM01(luminance[i][j] / 32768.f);
|
||||
buf = reti_contrast.getVal(buf);
|
||||
buf *= 32768.f;
|
||||
luminance[i][j] = buf;
|
||||
}
|
||||
}
|
||||
|
||||
float epsil = 0.1f;
|
||||
|
||||
mini = mean - vart * stddv;
|
||||
delete [] buffer;
|
||||
delete [] outBuffer;
|
||||
outBuffer = nullptr;
|
||||
delete [] srcBuffer;
|
||||
srcBuffer = nullptr;
|
||||
|
||||
if (mini < mintr) {
|
||||
mini = mintr + epsil;
|
||||
}
|
||||
float str = strength * (chrome == 0 ? 1.f : 0.8f * (chrT - 0.4f));
|
||||
const float maxclip = (chrome == 0 ? 32768.f : 50000.f);
|
||||
|
||||
maxi = mean + vart * stddv;
|
||||
if (scal != 1) {
|
||||
mean = 0.f;
|
||||
stddv = 0.f;
|
||||
|
||||
if (maxi > maxtr) {
|
||||
maxi = maxtr - epsil;
|
||||
}
|
||||
mean_stddv2(luminance, mean, stddv, W_L, H_L, maxtr, mintr);
|
||||
// printf("mean=%f std=%f delta=%f maxtr=%f mintr=%f\n", mean, stddv, delta, maxtr, mintr);
|
||||
|
||||
delta = maxi - mini;
|
||||
// printf("maxi=%f mini=%f mean=%f std=%f delta=%f maxtr=%f mintr=%f\n", maxi, mini, mean, stddv, delta, maxtr, mintr);
|
||||
|
||||
if (!delta) {
|
||||
delta = 1.0f;
|
||||
}
|
||||
|
||||
float cdfactor = (clipt * 32768.f) / delta;
|
||||
maxCD = -9999999.f;
|
||||
minCD = 9999999.f;
|
||||
//prepare work for curve gain
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i++) {
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
luminance[i][j] = luminance[i][j] - mini;
|
||||
}
|
||||
}
|
||||
|
||||
mean = 0.f;
|
||||
stddv = 0.f;
|
||||
// I call mean_stddv2 instead of mean_stddv ==> logBetaGain
|
||||
|
||||
mean_stddv2(luminance, mean, stddv, W_L, H_L, maxtr, mintr);
|
||||
float asig = 0.f, bsig = 0.f, amax = 0.f, bmax = 0.f, amin = 0.f, bmin = 0.f;
|
||||
const bool hasRetGainCurve = locRETgainCcurve && mean != 0.f && stddv != 0.f;
|
||||
|
||||
if (hasRetGainCurve) { //if curve
|
||||
asig = 0.166666f / stddv;
|
||||
bsig = 0.5f - asig * mean;
|
||||
amax = 0.333333f / (maxtr - mean - stddv);
|
||||
bmax = 1.f - amax * maxtr;
|
||||
amin = 0.333333f / (mean - stddv - mintr);
|
||||
bmin = -amin * mintr;
|
||||
|
||||
asig *= 500.f;
|
||||
bsig *= 500.f;
|
||||
amax *= 500.f;
|
||||
bmax *= 500.f;
|
||||
amin *= 500.f;
|
||||
bmin *= 500.f;
|
||||
cdfactor *= 2.f;
|
||||
}
|
||||
if (locRETtransCcurve && mean != 0.f && stddv != 0.f) { //if curve
|
||||
float asig = 0.166666f / stddv;
|
||||
float bsig = 0.5f - asig * mean;
|
||||
float amax = 0.333333f / (maxtr - mean - stddv);
|
||||
float bmax = 1.f - amax * maxtr;
|
||||
float amin = 0.333333f / (mean - stddv - mintr);
|
||||
float bmin = -amin * mintr;
|
||||
|
||||
asig *= 500.f;
|
||||
bsig *= 500.f;
|
||||
amax *= 500.f;
|
||||
bmax *= 500.f;
|
||||
amin *= 500.f;
|
||||
bmin *= 500.f;
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel
|
||||
#endif
|
||||
{
|
||||
// float absciss;
|
||||
float cdmax = -999999.f, cdmin = 999999.f;
|
||||
float gan = 0.5f;
|
||||
|
||||
float absciss;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp for schedule(dynamic,16)
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
|
||||
if (hasRetGainCurve) {
|
||||
float absciss;
|
||||
|
||||
if (LIKELY(fabsf(luminance[i][j] - mean) < stddv)) {
|
||||
absciss = asig * luminance[i][j] + bsig;
|
||||
} else if (luminance[i][j] >= mean) {
|
||||
absciss = amax * luminance[i][j] + bmax;
|
||||
} else {
|
||||
absciss = amin * luminance[i][j] + bmin;
|
||||
}
|
||||
|
||||
gan = locRETgainCcurve[absciss]; //new gain function transmission
|
||||
for (int i = 0; i < H_L; i++)
|
||||
for (int j = 0; j < W_L; j++) { //for mintr to maxtr evalate absciss in function of original transmission
|
||||
if (LIKELY(fabsf(luminance[i][j] - mean) < stddv)) {
|
||||
absciss = asig * luminance[i][j] + bsig;
|
||||
} else if (luminance[i][j] >= mean) {
|
||||
absciss = amax * luminance[i][j] + bmax;
|
||||
} else { /*if(luminance[i][j] <= mean - stddv)*/
|
||||
absciss = amin * luminance[i][j] + bmin;
|
||||
}
|
||||
|
||||
float cd = gan * cdfactor * luminance[i][j] + offse;
|
||||
//TODO : move multiplication by 4.f and subtraction of 1.f inside the curve
|
||||
luminance[i][j] *= (-1.f + 4.f * locRETtransCcurve[absciss]); //new transmission
|
||||
|
||||
cdmax = cd > cdmax ? cd : cdmax;
|
||||
cdmin = cd < cdmin ? cd : cdmin;
|
||||
luminance[i][j] = intp(str, clipretinex(cd, 0.f, maxclip), originalLuminance[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float epsil = 0.1f;
|
||||
|
||||
mini = mean - vart * stddv;
|
||||
|
||||
if (mini < mintr) {
|
||||
mini = mintr + epsil;
|
||||
}
|
||||
|
||||
maxi = mean + vart * stddv;
|
||||
|
||||
if (maxi > maxtr) {
|
||||
maxi = maxtr - epsil;
|
||||
}
|
||||
|
||||
delta = maxi - mini;
|
||||
// printf("maxi=%f mini=%f mean=%f std=%f delta=%f maxtr=%f mintr=%f\n", maxi, mini, mean, stddv, delta, maxtr, mintr);
|
||||
|
||||
if (!delta) {
|
||||
delta = 1.0f;
|
||||
}
|
||||
|
||||
float cdfactor = (clipt * 32768.f) / delta;
|
||||
maxCD = -9999999.f;
|
||||
minCD = 9999999.f;
|
||||
//prepare work for curve gain
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i++) {
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
luminance[i][j] = luminance[i][j] - mini;
|
||||
}
|
||||
}
|
||||
|
||||
mean = 0.f;
|
||||
stddv = 0.f;
|
||||
// I call mean_stddv2 instead of mean_stddv ==> logBetaGain
|
||||
|
||||
mean_stddv2(luminance, mean, stddv, W_L, H_L, maxtr, mintr);
|
||||
float asig = 0.f, bsig = 0.f, amax = 0.f, bmax = 0.f, amin = 0.f, bmin = 0.f;
|
||||
const bool hasRetGainCurve = locRETgainCcurve && mean != 0.f && stddv != 0.f;
|
||||
|
||||
if (hasRetGainCurve) { //if curve
|
||||
asig = 0.166666f / stddv;
|
||||
bsig = 0.5f - asig * mean;
|
||||
amax = 0.333333f / (maxtr - mean - stddv);
|
||||
bmax = 1.f - amax * maxtr;
|
||||
amin = 0.333333f / (mean - stddv - mintr);
|
||||
bmin = -amin * mintr;
|
||||
|
||||
asig *= 500.f;
|
||||
bsig *= 500.f;
|
||||
amax *= 500.f;
|
||||
bmax *= 500.f;
|
||||
amin *= 500.f;
|
||||
bmin *= 500.f;
|
||||
cdfactor *= 2.f;
|
||||
}
|
||||
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp critical
|
||||
#pragma omp parallel
|
||||
#endif
|
||||
{
|
||||
maxCD = maxCD > cdmax ? maxCD : cdmax;
|
||||
minCD = minCD < cdmin ? minCD : cdmin;
|
||||
}
|
||||
}
|
||||
{
|
||||
// float absciss;
|
||||
float cdmax = -999999.f, cdmin = 999999.f;
|
||||
float gan = 0.5f;
|
||||
|
||||
|
||||
} else {
|
||||
#ifdef _OPENMP
|
||||
#pragma omp for schedule(dynamic,16)
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
luminance[i][j] = LIM(luminance[i][j], 0.f, maxclip) * str + (1.f - str) * originalLuminance[i][j];
|
||||
|
||||
if (hasRetGainCurve) {
|
||||
float absciss;
|
||||
|
||||
if (LIKELY(fabsf(luminance[i][j] - mean) < stddv)) {
|
||||
absciss = asig * luminance[i][j] + bsig;
|
||||
} else if (luminance[i][j] >= mean) {
|
||||
absciss = amax * luminance[i][j] + bmax;
|
||||
} else {
|
||||
absciss = amin * luminance[i][j] + bmin;
|
||||
}
|
||||
|
||||
gan = locRETgainCcurve[absciss]; //new gain function transmission
|
||||
}
|
||||
|
||||
float cd = gan * cdfactor * luminance[i][j] + offse;
|
||||
|
||||
cdmax = cd > cdmax ? cd : cdmax;
|
||||
cdmin = cd < cdmin ? cd : cdmin;
|
||||
luminance[i][j] = intp(str * reducDE[i][j], clipretinex(cd, 0.f, maxclip), originalLuminance[i][j]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (lum == 1 && (llretiMask == 3 || llretiMask == 0 || llretiMask == 2 || llretiMask == 4)) { //only mask with luminance on last scale
|
||||
int before = 1;
|
||||
maskforretinex(sp, before, luminance, nullptr, W_L, H_L, skip, locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, retiMasktmap, retiMask,
|
||||
loc, bufreti, bufmask, buforig, buforigmas, multiThread);
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp critical
|
||||
#endif
|
||||
{
|
||||
maxCD = maxCD > cdmax ? maxCD : cdmax;
|
||||
minCD = minCD < cdmin ? minCD : cdmin;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Tmean = mean;
|
||||
Tsigma = stddv;
|
||||
Tmin = mintr;
|
||||
Tmax = maxtr;
|
||||
} else {
|
||||
#ifdef _OPENMP
|
||||
#pragma omp for schedule(dynamic,16)
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < H_L; i ++)
|
||||
for (int j = 0; j < W_L; j++) {
|
||||
luminance[i][j] = LIM(luminance[i][j], 0.f, maxclip) * str + (1.f - str) * originalLuminance[i][j];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (lum == 1 && (llretiMask == 3 || llretiMask == 0 || llretiMask == 2 || llretiMask == 4)) { //only mask with luminance on last scale
|
||||
int before = 1;
|
||||
maskforretinex(sp, before, luminance, nullptr, W_L, H_L, skip, locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, retiMasktmap, retiMask,
|
||||
loc, bufreti, bufmask, buforig, buforigmas, multiThread);
|
||||
}
|
||||
|
||||
|
||||
Tmean = mean;
|
||||
Tsigma = stddv;
|
||||
Tmin = mintr;
|
||||
Tmax = maxtr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2585,14 +2585,14 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
||||
offs(0.0),
|
||||
dehaz(0),
|
||||
depth(25),
|
||||
sensih(30),
|
||||
sensih(60),
|
||||
localTgaincurve{(double)FCT_MinMaxCPoints, 0.0, 0.12, 0.35, 0.35, 0.70, 0.50, 0.35, 0.35, 1.00, 0.12, 0.35, 0.35},
|
||||
localTtranscurve{(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.5, 0.5, 0.35, 0.35, 1.00, 0.50, 0.35, 0.35},
|
||||
inversret(false),
|
||||
equilret(true),
|
||||
loglin(false),
|
||||
lumonly(false),
|
||||
softradiusret(0.0),
|
||||
softradiusret(40.0),
|
||||
CCmaskreticurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35 },
|
||||
LLmaskreticurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
|
||||
HHmaskreticurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
|
||||
|
@ -273,8 +273,8 @@ Locallab::Locallab():
|
||||
offs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFS"), -16386., 32768., 1., 0.))),
|
||||
dehaz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZ"), 0, 100, 1, 0))),
|
||||
depth(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEPTH"), 0, 100, 1, 25))),
|
||||
sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIH"), 0, 100, 1, 30))),
|
||||
softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GUIDFILTER"), 0.0, 100.0, 0.5, 0.))),
|
||||
sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIH"), 0, 100, 1, 60))),
|
||||
softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRETI"), 0.0, 100.0, 0.5, 40.))),
|
||||
blendmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
|
||||
radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))),
|
||||
chromaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
|
||||
@ -1370,7 +1370,7 @@ Locallab::Locallab():
|
||||
softradiusret->setAdjusterListener(this);
|
||||
|
||||
if (showtooltip) {
|
||||
softradiusret->set_tooltip_text(M("TP_LOCALLAB_GUIDFILTER_TOOLTIP"));
|
||||
softradiusret->set_tooltip_text(M("TP_LOCALLAB_SOFTRETI_TOOLTIP"));
|
||||
}
|
||||
|
||||
mMLabels = Gtk::manage(new Gtk::Label("---"));
|
||||
@ -1527,7 +1527,7 @@ Locallab::Locallab():
|
||||
retiBox->pack_start(*scalereti);
|
||||
retiBox->pack_start(*darkness);
|
||||
retiBox->pack_start(*lightnessreti);
|
||||
// retiBox->pack_start(*softradiusret);
|
||||
retiBox->pack_start(*softradiusret);
|
||||
retiBox->pack_start(*limd);
|
||||
retiBox->pack_start(*cliptm);
|
||||
retiBox->pack_start(*offs);
|
||||
|
Loading…
x
Reference in New Issue
Block a user