Improve exclude and reorganize qualitymethod
This commit is contained in:
parent
3a43f00566
commit
abfe2b92f8
@ -390,9 +390,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
|
|||||||
int local_sensiv = locallab.spots.at(sp).sensiv;
|
int local_sensiv = locallab.spots.at(sp).sensiv;
|
||||||
int local_sensiex = locallab.spots.at(sp).sensiex;
|
int local_sensiex = locallab.spots.at(sp).sensiex;
|
||||||
|
|
||||||
if (locallab.spots.at(sp).qualityMethod == "std") {
|
if (locallab.spots.at(sp).qualityMethod == "enh") {
|
||||||
lp.qualmet = 0;
|
|
||||||
} else if (locallab.spots.at(sp).qualityMethod == "enh") {
|
|
||||||
lp.qualmet = 1;
|
lp.qualmet = 1;
|
||||||
} else if (locallab.spots.at(sp).qualityMethod == "enhden") {
|
} else if (locallab.spots.at(sp).qualityMethod == "enhden") {
|
||||||
lp.qualmet = 2;
|
lp.qualmet = 2;
|
||||||
@ -3451,7 +3449,8 @@ void ImProcFunctions::Exclude_Local(int sen, float **deltaso, float **buflight,
|
|||||||
#else
|
#else
|
||||||
// float rhue = xatan2f(origblur->b[y][x], origblur->a[y][x]);
|
// float rhue = xatan2f(origblur->b[y][x], origblur->a[y][x]);
|
||||||
#endif
|
#endif
|
||||||
float rL = original->L[y][x] / 327.68f;
|
float rL = origblur->L[y][x] / 327.68f;
|
||||||
|
// float rLor = original->L[y][x] / 327.68f;
|
||||||
|
|
||||||
float cli = 1.f;
|
float cli = 1.f;
|
||||||
float clc = 1.f;
|
float clc = 1.f;
|
||||||
@ -3490,14 +3489,15 @@ void ImProcFunctions::Exclude_Local(int sen, float **deltaso, float **buflight,
|
|||||||
affsob = 1.f / pow((1.f + rsob), SQR(SQR(rs - minrs)));
|
affsob = 1.f / pow((1.f + rsob), SQR(SQR(rs - minrs)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// affsob = 1.f;
|
||||||
dE = affde * sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL));
|
dE = sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL));
|
||||||
|
// float dEor = affde * sqrt(SQR(refa - original->a[y][x] / 327.68f) + SQR(refb - original->b[y][x] / 327.68f) + SQR(lumaref - rLor));
|
||||||
|
|
||||||
cli = (buflight[loy - begy][lox - begx]);
|
cli = (buflight[loy - begy][lox - begx]);
|
||||||
clc = (bufchro[loy - begy][lox - begx]);
|
clc = (bufchro[loy - begy][lox - begx]);
|
||||||
|
|
||||||
float reducdE = 0.f;
|
float reducdE = 0.f;
|
||||||
|
// float reducdEor = 0.f;
|
||||||
float mindE = 2.f + minscope * varsens * lp.thr;
|
float mindE = 2.f + minscope * varsens * lp.thr;
|
||||||
float maxdE = 5.f + maxscope * varsens * (1 + 0.1f * lp.thr);
|
float maxdE = 5.f + maxscope * varsens * (1 + 0.1f * lp.thr);
|
||||||
|
|
||||||
@ -3508,24 +3508,37 @@ void ImProcFunctions::Exclude_Local(int sen, float **deltaso, float **buflight,
|
|||||||
if (dE > maxdE) {
|
if (dE > maxdE) {
|
||||||
reducdE = 0.f;
|
reducdE = 0.f;
|
||||||
}
|
}
|
||||||
|
// if (dEor > maxdE) {
|
||||||
|
// reducdEor = 0.f;
|
||||||
|
// }
|
||||||
|
|
||||||
if (dE > mindE && dE <= maxdE) {
|
if (dE > mindE && dE <= maxdE) {
|
||||||
reducdE = ar * dE + br;
|
reducdE = ar * dE + br;
|
||||||
}
|
}
|
||||||
|
// if (dEor > mindE && dEor <= maxdE) {
|
||||||
|
// reducdEor = ar * dEor + br;
|
||||||
|
// }
|
||||||
|
|
||||||
if (dE <= mindE) {
|
if (dE <= mindE) {
|
||||||
reducdE = 1.f;
|
reducdE = 1.f;
|
||||||
}
|
}
|
||||||
|
// if (dEor <= mindE) {
|
||||||
|
// reducdEor = 1.f;
|
||||||
|
// }
|
||||||
|
|
||||||
reducdE = pow(reducdE, lp.iterat);
|
reducdE = pow(reducdE, lp.iterat);
|
||||||
|
|
||||||
if (varsens > 99) {
|
if (varsens > 99) {
|
||||||
reducdE = 1.f;
|
reducdE = 1.f;
|
||||||
|
// reducdEor = 1.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
affde = reducdE;
|
||||||
|
|
||||||
float realstrdE = reducdE * cli;
|
// float realstrdE = reducdE * cli;
|
||||||
float realstrchdE = reducdE * clc;
|
// float realstrchdE = reducdE * clc;
|
||||||
|
float realstrdE = cli;
|
||||||
|
float realstrchdE = clc;
|
||||||
|
|
||||||
|
|
||||||
if (rL > 0.1f) { //to avoid crash with very low gamut in rare cases ex : L=0.01 a=0.5 b=-0.9
|
if (rL > 0.1f) { //to avoid crash with very low gamut in rare cases ex : L=0.01 a=0.5 b=-0.9
|
||||||
@ -3543,18 +3556,18 @@ void ImProcFunctions::Exclude_Local(int sen, float **deltaso, float **buflight,
|
|||||||
|
|
||||||
float difL;
|
float difL;
|
||||||
difL = rsv->L[loy - begy][lox - begx] - original->L[y][x];
|
difL = rsv->L[loy - begy][lox - begx] - original->L[y][x];
|
||||||
difL *= factorx * (100.f + realstrdE) / 100.f;
|
difL *= factorx; // * (100.f + realstrdE) / 100.f;
|
||||||
|
|
||||||
transformed->L[y][x] = CLIP(original->L[y][x] + difL * affsob);
|
transformed->L[y][x] = CLIP(original->L[y][x] + difL * affsob * affde);
|
||||||
|
|
||||||
float difa, difb;
|
float difa, difb;
|
||||||
|
|
||||||
difa = rsv->a[loy - begy][lox - begx] - original->a[y][x];
|
difa = rsv->a[loy - begy][lox - begx] - original->a[y][x];
|
||||||
difb = rsv->b[loy - begy][lox - begx] - original->b[y][x];
|
difb = rsv->b[loy - begy][lox - begx] - original->b[y][x];
|
||||||
difa *= factorx * (100.f + realstrchdE) / 100.f;
|
difa *= factorx; // * (100.f + realstrchdE) / 100.f;
|
||||||
difb *= factorx * (100.f + realstrchdE) / 100.f;
|
difb *= factorx; // * (100.f + realstrchdE) / 100.f;
|
||||||
transformed->a[y][x] = CLIPC(original->a[y][x] + difa * affsob);
|
transformed->a[y][x] = CLIPC(original->a[y][x] + difa * affsob * affde);
|
||||||
transformed->b[y][x] = CLIPC(original->b[y][x] + difb * affsob);
|
transformed->b[y][x] = CLIPC(original->b[y][x] + difb * affsob * affde);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -3564,18 +3577,18 @@ void ImProcFunctions::Exclude_Local(int sen, float **deltaso, float **buflight,
|
|||||||
float difL;
|
float difL;
|
||||||
|
|
||||||
difL = rsv->L[loy - begy][lox - begx] - original->L[y][x];
|
difL = rsv->L[loy - begy][lox - begx] - original->L[y][x];
|
||||||
difL *= (100.f + realstrdE) / 100.f;
|
// difL *= (100.f + realstrdE) / 100.f;
|
||||||
|
|
||||||
transformed->L[y][x] = CLIP(original->L[y][x] + difL * affsob);
|
transformed->L[y][x] = CLIP(original->L[y][x] + difL * affsob* affde);
|
||||||
float difa, difb;
|
float difa, difb;
|
||||||
|
|
||||||
difa = rsv->a[loy - begy][lox - begx] - original->a[y][x];
|
difa = rsv->a[loy - begy][lox - begx] - original->a[y][x];
|
||||||
difb = rsv->b[loy - begy][lox - begx] - original->b[y][x];
|
difb = rsv->b[loy - begy][lox - begx] - original->b[y][x];
|
||||||
difa *= (100.f + realstrchdE) / 100.f;
|
// difa *= (100.f + realstrchdE) / 100.f;
|
||||||
difb *= (100.f + realstrchdE) / 100.f;
|
// difb *= (100.f + realstrchdE) / 100.f;
|
||||||
|
|
||||||
transformed->a[y][x] = CLIPC(original->a[y][x] + difa * affsob);
|
transformed->a[y][x] = CLIPC(original->a[y][x] + difa * affsob * affde);
|
||||||
transformed->b[y][x] = CLIPC(original->b[y][x] + difb * affsob);
|
transformed->b[y][x] = CLIPC(original->b[y][x] + difb * affsob * affde);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,6 @@ ControlSpotPanel::ControlSpotPanel():
|
|||||||
structexclu_->setAdjusterListener(this);
|
structexclu_->setAdjusterListener(this);
|
||||||
excluBox->pack_start(*sensiexclu_);
|
excluBox->pack_start(*sensiexclu_);
|
||||||
excluBox->pack_start(*structexclu_);
|
excluBox->pack_start(*structexclu_);
|
||||||
// excluBox->pack_start(*struc_); // Uncomment this line to use the struc_ adjuster
|
|
||||||
excluFrame->add(*excluBox);
|
excluFrame->add(*excluBox);
|
||||||
pack_start(*excluFrame);
|
pack_start(*excluFrame);
|
||||||
|
|
||||||
|
@ -1132,13 +1132,10 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
r->centerY = pp->locallab.spots.at(i).centerY;
|
r->centerY = pp->locallab.spots.at(i).centerY;
|
||||||
r->circrad = pp->locallab.spots.at(i).circrad;
|
r->circrad = pp->locallab.spots.at(i).circrad;
|
||||||
|
|
||||||
/* if (pp->locallab.spots.at(i).qualityMethod == "std") {
|
|
||||||
r->qualityMethod = 0;
|
|
||||||
}*/
|
|
||||||
if (pp->locallab.spots.at(i).qualityMethod == "enh") {
|
if (pp->locallab.spots.at(i).qualityMethod == "enh") {
|
||||||
r->qualityMethod = 1;
|
r->qualityMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->qualityMethod = 2;
|
r->qualityMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->transit = pp->locallab.spots.at(i).transit;
|
r->transit = pp->locallab.spots.at(i).transit;
|
||||||
@ -1234,12 +1231,10 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
r->centerY = newSpot->centerY;
|
r->centerY = newSpot->centerY;
|
||||||
r->circrad = newSpot->circrad;
|
r->circrad = newSpot->circrad;
|
||||||
|
|
||||||
/* if (newSpot->qualityMethod == "std") {
|
if (newSpot->qualityMethod == "enh") {
|
||||||
r->qualityMethod = 0;
|
r->qualityMethod = 0;
|
||||||
} */ if (newSpot->qualityMethod == "enh") {
|
|
||||||
r->qualityMethod = 1;
|
|
||||||
} else {
|
} else {
|
||||||
r->qualityMethod = 2;
|
r->qualityMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->transit = newSpot->transit;
|
r->transit = newSpot->transit;
|
||||||
@ -1421,12 +1416,10 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
r->centerY = newSpot->centerY;
|
r->centerY = newSpot->centerY;
|
||||||
r->circrad = newSpot->circrad;
|
r->circrad = newSpot->circrad;
|
||||||
|
|
||||||
if (newSpot->qualityMethod == "std") {
|
if (newSpot->qualityMethod == "enh") {
|
||||||
r->qualityMethod = 0;
|
r->qualityMethod = 0;
|
||||||
} else if (newSpot->qualityMethod == "enh") {
|
|
||||||
r->qualityMethod = 1;
|
|
||||||
} else {
|
} else {
|
||||||
r->qualityMethod = 2;
|
r->qualityMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->transit = newSpot->transit;
|
r->transit = newSpot->transit;
|
||||||
@ -1510,9 +1503,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pp->locallab.spots.at(pp->locallab.selspot).centerY = r->centerY;
|
pp->locallab.spots.at(pp->locallab.selspot).centerY = r->centerY;
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).circrad = r->circrad;
|
pp->locallab.spots.at(pp->locallab.selspot).circrad = r->circrad;
|
||||||
|
|
||||||
/* if (r->qualityMethod == 0) {
|
if (r->qualityMethod == 0) {
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "std";
|
|
||||||
} */ if (r->qualityMethod == 1) {
|
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "enh";
|
pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "enh";
|
||||||
} else {
|
} else {
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "enhden";
|
pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "enhden";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user