iplocallab.cc: further cleanups

This commit is contained in:
Ingo Weyrich 2020-06-01 15:31:50 +02:00
parent bdef177e87
commit f6714b2171
2 changed files with 4895 additions and 4909 deletions

View File

@ -4106,9 +4106,9 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int
} }
if (rad != 0.f) { if (rad != 0.f) {
const float blur = rad < 0.f ? -1.f / rad : 1.f + rad; const float tmpblur = rad < 0.f ? -1.f / rad : 1.f + rad;
const int r1 = max(int(4 / sk * blur + 0.5), 1); const int r1 = std::max<int>(4 / sk * tmpblur + 0.5, 1);
const int r2 = max(int(25 / sk * blur + 0.5), 1); const int r2 = std::max<int>(25 / sk * tmpblur + 0.5, 1);
constexpr float epsilmax = 0.0005f; constexpr float epsilmax = 0.0005f;
constexpr float epsilmin = 0.00001f; constexpr float epsilmin = 0.00001f;
@ -7727,22 +7727,22 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
for (int dir = 1; dir < 4; dir++) { for (int dir = 1; dir < 4; dir++) {
for (int level = level_bl; level < maxlvl; ++level) { for (int level = level_bl; level < maxlvl; ++level) {
if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) {
int W_L = wdspot->level_W(level); const int W_L = wdspot->level_W(level);
int H_L = wdspot->level_H(level); const int H_L = wdspot->level_H(level);
float **wav_L = wdspot->level_coeffs(level); float **wav_L = wdspot->level_coeffs(level);
float effect = lp.sigmalc2; const float effect = lp.sigmalc2;
float offs = 1.f; constexpr float offset = 1.f;
float mea[10]; float mea[10];
calceffect(level, mean, sigma, mea, effect, offs); calceffect(level, mean, sigma, mea, effect, offset);
float insigma = 0.666f; //SD constexpr float insigma = 0.666f; //SD
float logmax = log(MaxP[level]); //log Max const float logmax = std::log(MaxP[level]); //log Max
float rapX = (mean[level] + lp.sigmalc2 * sigma[level]) / MaxP[level]; //rapport between sD / max const float rapX = (mean[level] + lp.sigmalc2 * sigma[level]) / MaxP[level]; //rapport between sD / max
float inx = log(insigma); const float inx = std::log(insigma);
float iny = log(rapX); const float iny = std::log(rapX);
float rap = inx / iny; //koef const float rap = inx / iny; //koef
float asig = 0.166f / (sigma[level] * lp.sigmalc2); const float asig = 0.166f / (sigma[level] * lp.sigmalc2);
float bsig = 0.5f - asig * mean[level]; const float bsig = 0.5f - asig * mean[level];
float amean = 0.5f / mean[level]; const float amean = 0.5f / mean[level];
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
@ -7750,7 +7750,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
for (int y = 0; y < H_L; y++) { for (int y = 0; y < H_L; y++) {
for (int x = 0; x < W_L; x++) { for (int x = 0; x < W_L; x++) {
float WavCL = std::fabs(wav_L[dir][y * W_L + x]); const float WavCL = std::fabs(wav_L[dir][y * W_L + x]);
float beta; float beta;
if (WavCL < mea[0]) { if (WavCL < mea[0]) {
@ -7781,10 +7781,8 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
float &val = wav_L[dir][y * W_L + x]; float &val = wav_L[dir][y * W_L + x];
if (std::fabs(val) >= (mean[level] + lp.sigmalc2 * sigma[level])) { //for max if (std::fabs(val) >= (mean[level] + lp.sigmalc2 * sigma[level])) { //for max
float valcour = xlogf(std::fabs(val)); const float valc = xlogf(std::fabs(val)) - logmax;
float valc = valcour - logmax; absciss = xexpf(valc * rap);
float vald = valc * rap;
absciss = xexpf(vald);
} else if (std::fabs(val) >= mean[level]) { } else if (std::fabs(val) >= mean[level]) {
absciss = asig * std::fabs(val) + bsig; absciss = asig * std::fabs(val) + bsig;
} else { } else {
@ -8059,34 +8057,23 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
int W_L = wdspot->level_W(0);//provisory W_L H_L int W_L = wdspot->level_W(0);//provisory W_L H_L
int H_L = wdspot->level_H(0); int H_L = wdspot->level_H(0);
float *koeLi[12]; float *koeLi[12];
float maxkoeLi[12]; float maxkoeLi[12] = {0.f};
float * beta = nullptr; float *beta = new float[W_L * H_L];
beta = new float[W_L * H_L];
float *koeLibuffer = nullptr; float *koeLibuffer = new float[12 * H_L * W_L]; //12
for (int y = 0; y < 12; y++) { for (int i = 0; i < 12; i++) {
maxkoeLi[y] = 0.f; //9
}
koeLibuffer = new float[12 * H_L * W_L]; //12
for (int i = 0; i < 12; i++) { //9
koeLi[i] = &koeLibuffer[i * W_L * H_L]; koeLi[i] = &koeLibuffer[i * W_L * H_L];
} }
for (int j = 0; j < 12; j++) //9 for (int j = 0; j < 12; j++) {
for (int i = 0; i < W_L * H_L; i++) { for (int i = 0; i < W_L * H_L; i++) {
koeLi[j][i] = 0.f; koeLi[j][i] = 0.f;
} }
float *tmCBuffer = new float[H_L * W_L];
float *tmC[H_L];
for (int i = 0; i < H_L; i++) {
tmC[i] = &tmCBuffer[i * W_L];
} }
array2D<float> tmC(W_L, H_L);
float gradw = lp.gradw; float gradw = lp.gradw;
float tloww = lp.tloww; float tloww = lp.tloww;
@ -8096,19 +8083,16 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
for (int lvl = 0; lvl < 4; lvl++) { for (int lvl = 0; lvl < 4; lvl++) {
for (int dir = 1; dir < 4; dir++) { for (int dir = 1; dir < 4; dir++) {
int W_L = wdspot->level_W(lvl); const int W_L = wdspot->level_W(lvl);
int H_L = wdspot->level_H(lvl); const int H_L = wdspot->level_H(lvl);
float **wav_L = wdspot->level_coeffs(lvl); float **wav_L = wdspot->level_coeffs(lvl);
float effect = lp.sigmaed; const float effect = lp.sigmaed;
float offs = 1.f; constexpr float offset = 1.f;
float mea[10]; float mea[10];
for (int co = 0; co < H_L * W_L; co++) { calceffect(lvl, mean, sigma, mea, effect, offset);
beta[co] = 1.f;
}
calceffect(lvl, mean, sigma, mea, effect, offs);
for (int co = 0; co < H_L * W_L; co++) { for (int co = 0; co < H_L * W_L; co++) {
float WavCL = std::fabs(wav_L[dir][co]); const float WavCL = std::fabs(wav_L[dir][co]);
if (WavCL < mea[0]) { if (WavCL < mea[0]) {
beta[co] = 0.05f; beta[co] = 0.05f;
@ -8134,14 +8118,12 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
beta[co] = 0.05f; beta[co] = 0.05f;
} }
} }
// printf("Chromablu=%f \n", chromablu);
calckoe(wav_L, gradw, tloww, koeLi, lvl, dir, W_L, H_L, edd, maxkoeLi, tmC); calckoe(wav_L, gradw, tloww, koeLi, lvl, dir, W_L, H_L, edd, maxkoeLi, tmC);
// return convolution KoeLi and maxkoeLi of level 0 1 2 3 and Dir Horiz, Vert, Diag // return convolution KoeLi and maxkoeLi of level 0 1 2 3 and Dir Horiz, Vert, Diag
} }
} }
tmC.free();
delete [] tmCBuffer;
float aamp = 1.f + lp.thigw / 100.f; float aamp = 1.f + lp.thigw / 100.f;
for (int lvl = 0; lvl < 4; lvl++) { for (int lvl = 0; lvl < 4; lvl++) {
@ -10180,7 +10162,8 @@ void clarimerge(struct local_params& lp, float &mL, float &mC, bool &exec, LabIm
} }
} }
void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, LabImage * lastorig, int cx, int cy, int oW, int oH, int sk, void ImProcFunctions::Lab_Local(
int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, LabImage * lastorig, int cx, int cy, int oW, int oH, int sk,
const LocretigainCurve& locRETgainCcurve, const LocretitransCurve& locRETtransCcurve, const LocretigainCurve& locRETgainCcurve, const LocretitransCurve& locRETtransCcurve,
const LUTf& lllocalcurve, bool locallutili, const LUTf& lllocalcurve, bool locallutili,
const LUTf& cllocalcurve, bool localclutili, const LUTf& cllocalcurve, bool localclutili,
@ -10216,17 +10199,21 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
bool LHutili, bool HHutili, const LUTf& cclocalcurve, bool localcutili, LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc, bool LHutili, bool HHutili, const LUTf& cclocalcurve, bool localcutili, LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc,
double& huerefblur, double& chromarefblur, double& lumarefblur, double& hueref, double& chromaref, double& lumaref, double& sobelref, int &lastsav, double& huerefblur, double& chromarefblur, double& lumarefblur, double& hueref, double& chromaref, double& lumaref, double& sobelref, int &lastsav,
bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
float & minCD, float & maxCD, float & mini, float & maxi, float & Tmean, float & Tsigma, float & Tmin, float & Tmax) float& minCD, float& maxCD, float& mini, float& maxi, float& Tmean, float& Tsigma, float& Tmin, float& Tmax
)
{ {
//general call of others functions : important return hueref, chromaref, lumaref //general call of others functions : important return hueref, chromaref, lumaref
if (params->locallab.enabled) { if (!params->locallab.enabled) {
return;
}
BENCHFUN BENCHFUN
#ifdef _DEBUG #ifdef _DEBUG
// init variables to display Munsell corrections // init variables to display Munsell corrections
MunsellDebugInfo* MunsDebugInfo = new MunsellDebugInfo(); MunsellDebugInfo* MunsDebugInfo = new MunsellDebugInfo();
#endif #endif
int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1 constexpr int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1
struct local_params lp; struct local_params lp;
calcLocalParams(sp, oW, oH, params->locallab, lp, prevDeltaE, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llsharMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili); calcLocalParams(sp, oW, oH, params->locallab, lp, prevDeltaE, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llsharMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili);
@ -15882,6 +15869,5 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
delete MunsDebugInfo; delete MunsDebugInfo;
#endif #endif
} }
}
} }