avoid division by zero for H=f(H)

This commit is contained in:
Desmis 2019-01-28 14:46:36 +01:00
parent bd2e244593
commit cdcaa1f27f

View File

@ -3682,7 +3682,6 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
varsens = lp.senscb; varsens = lp.senscb;
} }
// printf("varsen=%f \n", varsens);
//sobel //sobel
sobelref /= 100.; sobelref /= 100.;
@ -3864,12 +3863,11 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
if (senstype == 1 || senstype == 0) { if (senstype == 1 || senstype == 0) {
cla = buf_a_cat[loy - begy][lox - begx]; cla = buf_a_cat[loy - begy][lox - begx];
clb = buf_b_cat[loy - begy][lox - begx]; clb = buf_b_cat[loy - begy][lox - begx];
// printf("a=%f b=%f", cla, clb);
} }
float reducdE = 0.f; float reducdE = 0.f;
float mindE = 2.f + 0.05f * varsens;//between 2 and 7 float mindE = 2.f + 0.05f * varsens;//between 2 and 7
float maxdE = 5.f + 1.5f * varsens; // between 5 and 150, we can chnage this values float maxdE = 5.f + 1.5f * varsens; // between 5 and 150, we can change this values, with a slider ??
float ar = 1.f / (mindE - maxdE); float ar = 1.f / (mindE - maxdE);
@ -3895,7 +3893,6 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
float realhhdE = reducdE * hhro; float realhhdE = reducdE * hhro;
float addh = 0.f; float addh = 0.f;
// float chromhr = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x]));
float2 sincosval; float2 sincosval;
sincosval.y = 1.f; sincosval.y = 1.f;
sincosval.x = 0.0f; sincosval.x = 0.0f;
@ -3929,8 +3926,8 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
float diflc = lightc * fli - original->L[y][x]; float diflc = lightc * fli - original->L[y][x];
diflc *= factorx; diflc *= factorx;
transformed->L[y][x] = CLIP(original->L[y][x] + diflc); transformed->L[y][x] = CLIP(original->L[y][x] + diflc);
} else if (senstype == 1 || senstype == 0) {//exposure the TODO color and light } else if (senstype == 1 || senstype == 0) {
transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE);//kch fach transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE);
diflc = 328.f * factorx * realstrdE; diflc = 328.f * factorx * realstrdE;
} }
@ -3977,8 +3974,19 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
if (senstype == 0 && HHutili && hhro != 0.f) { if (senstype == 0 && HHutili && hhro != 0.f) {
float chromhr = sqrt(SQR(original->a[y][x] + difa) + SQR(original->b[y][x]) + difb); float chromhr = sqrt(SQR(original->a[y][x] + difa) + SQR(original->b[y][x]) + difb);
float faca = (original->a[y][x] + difa) / original->a[y][x]; float epsia = 0.f;
float facb = (original->b[y][x] + difb) / original->b[y][x]; float epsib = 0.f;
if (original->a[y][x] == 0.f) {
epsia = 0.001f;
}
if (original->b[y][x] == 0.f) {
epsib = 0.001f;
}
float faca = (original->a[y][x] + difa) / (original->a[y][x] + epsia);
float facb = (original->b[y][x] + difb) / (original->b[y][x] + epsib);
sincosval = xsincosf(newhr); sincosval = xsincosf(newhr);
transformed->a[y][x] = CLIPC(chromhr * sincosval.y * faca) ; transformed->a[y][x] = CLIPC(chromhr * sincosval.y * faca) ;
@ -4052,8 +4060,19 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
if (senstype == 0 && HHutili && hhro != 0.f) { if (senstype == 0 && HHutili && hhro != 0.f) {
float chromhr = sqrt(SQR(original->a[y][x] + difa) + SQR(original->b[y][x]) + difb); float chromhr = sqrt(SQR(original->a[y][x] + difa) + SQR(original->b[y][x]) + difb);
float faca = (original->a[y][x] + difa) / original->a[y][x]; float epsia = 0.f;
float facb = (original->b[y][x] + difb) / original->b[y][x]; float epsib = 0.f;
if (original->a[y][x] == 0.f) {
epsia = 0.001f;
}
if (original->b[y][x] == 0.f) {
epsib = 0.001f;
}
float faca = (original->a[y][x] + difa) / (original->a[y][x] + epsia);
float facb = (original->b[y][x] + difb) / (original->b[y][x] + epsib);
sincosval = xsincosf(newhr); sincosval = xsincosf(newhr);
transformed->a[y][x] = CLIPC(chromhr * sincosval.y * faca) ; transformed->a[y][x] = CLIPC(chromhr * sincosval.y * faca) ;
@ -4070,8 +4089,6 @@ void ImProcFunctions::transit_shapedetect(int senstype, LabImage * bufexporig, L
} }
} }
} }
} }
} }
@ -8592,7 +8609,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
transit_shapedetect(0, bufcolorig, originalmaskcol, buflight, bufchro, buf_a, buf_b, bufhh, HHutili, hueref, chromaref, lumaref, sobelref, blend2, lp, original, transformed, cx, cy, sk); transit_shapedetect(0, bufcolorig, originalmaskcol, buflight, bufchro, buf_a, buf_b, bufhh, HHutili, hueref, chromaref, lumaref, sobelref, blend2, lp, original, transformed, cx, cy, sk);
// ColorLight_Local(moddE, powdE, call, bufcolorig, originalmaskcol, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sobelref, blend2, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk);
if (call <= 3) { if (call <= 3) {