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) {
const float blur = rad < 0.f ? -1.f / rad : 1.f + rad;
const int r1 = max(int(4 / sk * blur + 0.5), 1);
const int r2 = max(int(25 / sk * blur + 0.5), 1);
const float tmpblur = rad < 0.f ? -1.f / rad : 1.f + rad;
const int r1 = std::max<int>(4 / sk * tmpblur + 0.5, 1);
const int r2 = std::max<int>(25 / sk * tmpblur + 0.5, 1);
constexpr float epsilmax = 0.0005f;
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 level = level_bl; level < maxlvl; ++level) {
if (MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) {
int W_L = wdspot->level_W(level);
int H_L = wdspot->level_H(level);
const int W_L = wdspot->level_W(level);
const int H_L = wdspot->level_H(level);
float **wav_L = wdspot->level_coeffs(level);
float effect = lp.sigmalc2;
float offs = 1.f;
const float effect = lp.sigmalc2;
constexpr float offset = 1.f;
float mea[10];
calceffect(level, mean, sigma, mea, effect, offs);
float insigma = 0.666f; //SD
float logmax = log(MaxP[level]); //log Max
float rapX = (mean[level] + lp.sigmalc2 * sigma[level]) / MaxP[level]; //rapport between sD / max
float inx = log(insigma);
float iny = log(rapX);
float rap = inx / iny; //koef
float asig = 0.166f / (sigma[level] * lp.sigmalc2);
float bsig = 0.5f - asig * mean[level];
float amean = 0.5f / mean[level];
calceffect(level, mean, sigma, mea, effect, offset);
constexpr float insigma = 0.666f; //SD
const float logmax = std::log(MaxP[level]); //log Max
const float rapX = (mean[level] + lp.sigmalc2 * sigma[level]) / MaxP[level]; //rapport between sD / max
const float inx = std::log(insigma);
const float iny = std::log(rapX);
const float rap = inx / iny; //koef
const float asig = 0.166f / (sigma[level] * lp.sigmalc2);
const float bsig = 0.5f - asig * mean[level];
const float amean = 0.5f / mean[level];
#ifdef _OPENMP
#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 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;
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];
if (std::fabs(val) >= (mean[level] + lp.sigmalc2 * sigma[level])) { //for max
float valcour = xlogf(std::fabs(val));
float valc = valcour - logmax;
float vald = valc * rap;
absciss = xexpf(vald);
const float valc = xlogf(std::fabs(val)) - logmax;
absciss = xexpf(valc * rap);
} else if (std::fabs(val) >= mean[level]) {
absciss = asig * std::fabs(val) + bsig;
} 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 H_L = wdspot->level_H(0);
float *koeLi[12];
float maxkoeLi[12];
float * beta = nullptr;
beta = new float[W_L * H_L];
float maxkoeLi[12] = {0.f};
float *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++) {
maxkoeLi[y] = 0.f; //9
}
koeLibuffer = new float[12 * H_L * W_L]; //12
for (int i = 0; i < 12; i++) { //9
for (int i = 0; i < 12; i++) {
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++) {
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 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 dir = 1; dir < 4; dir++) {
int W_L = wdspot->level_W(lvl);
int H_L = wdspot->level_H(lvl);
const int W_L = wdspot->level_W(lvl);
const int H_L = wdspot->level_H(lvl);
float **wav_L = wdspot->level_coeffs(lvl);
float effect = lp.sigmaed;
float offs = 1.f;
const float effect = lp.sigmaed;
constexpr float offset = 1.f;
float mea[10];
for (int co = 0; co < H_L * W_L; co++) {
beta[co] = 1.f;
}
calceffect(lvl, mean, sigma, mea, effect, offs);
calceffect(lvl, mean, sigma, mea, effect, offset);
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]) {
beta[co] = 0.05f;
@ -8134,14 +8118,12 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
beta[co] = 0.05f;
}
}
// printf("Chromablu=%f \n", chromablu);
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
}
}
tmC.free();
delete [] tmCBuffer;
float aamp = 1.f + lp.thigw / 100.f;
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 LUTf& lllocalcurve, bool locallutili,
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,
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,
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
if (params->locallab.enabled) {
if (!params->locallab.enabled) {
return;
}
BENCHFUN
#ifdef _DEBUG
// init variables to display Munsell corrections
MunsellDebugInfo* MunsDebugInfo = new MunsellDebugInfo();
#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;
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;
#endif
}
}
}