* Change Itcwb in simpleprocess * Change for auto RGBgrey * remove unnecessary code
This commit is contained in:
parent
0e835e8c00
commit
5acf1c0a7f
@ -271,17 +271,260 @@ private:
|
||||
|
||||
// set the color temperature
|
||||
currWB = ColorTemp(params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method, params.wb.observer);
|
||||
ColorTemp currWBitc;
|
||||
if (params.wb.method == "autitcgreen" && flush) {
|
||||
imgsrc->getrgbloc(0, 0, fh, fw, 0, 0, fh, fw, params.wb);
|
||||
}
|
||||
const bool autowb = params.wb.method == "autitcgreen";
|
||||
ColorTemp autoWB;
|
||||
int dread = 0;
|
||||
int bia = 1;
|
||||
float studgood = 1000.f;
|
||||
int nocam = 0;
|
||||
int kcam = 0;
|
||||
float minchrom = 1000.f;
|
||||
float delta = 0.f;
|
||||
int kmin = 20;
|
||||
float minhist = 1000000000.f;
|
||||
float maxhist = -1000.f;
|
||||
double tempitc = 5000.f;
|
||||
double greenitc = 1.;
|
||||
float temp0 = 5000.f;
|
||||
bool extra = false;
|
||||
bool forcewbgrey = false;
|
||||
|
||||
if (!params.wb.enabled) {
|
||||
currWB = ColorTemp();
|
||||
} else if (params.wb.method == "Camera") {
|
||||
currWB = imgsrc->getWB();
|
||||
} else if (params.wb.method == "autold") {
|
||||
} else if (params.wb.method == "autold") {//for Auto RGB
|
||||
double rm, gm, bm;
|
||||
imgsrc->getAutoWBMultipliers(rm, gm, bm);
|
||||
currWB.update(rm, gm, bm, params.wb.equal, params.wb.observer, params.wb.tempBias);
|
||||
}
|
||||
|
||||
} else if (autowb && flush) {//for auto Itcwb - flush to enable only when batch
|
||||
//code similar to that present in improccoordinator.cc
|
||||
float tem = 5000.f;
|
||||
float gre = 1.f;
|
||||
double tempref0bias = 5000.;
|
||||
tempitc = 5000.f;
|
||||
bool autowb1 = true;
|
||||
double green_thres = 0.8;
|
||||
|
||||
{
|
||||
currWBitc = imgsrc->getWB();
|
||||
|
||||
double greenref = currWBitc.getGreen();
|
||||
double tempref0bias0 = currWBitc.getTemp();
|
||||
|
||||
if (greenref > green_thres && params.wb.itcwb_prim == "srgb") {
|
||||
forcewbgrey = true;
|
||||
}
|
||||
|
||||
if (!forcewbgrey && (tempref0bias0 < 3300.f) && (greenref < 1.13f && greenref > 0.88f)) { //seems good with temp and green...To fixe...limits 1.13 and 0.88
|
||||
if (settings->verbose) {
|
||||
printf("Keep camera settings temp=%f green=%f\n", tempref0bias0, greenref);
|
||||
}
|
||||
|
||||
autowb1 = true;
|
||||
kcam = 1;
|
||||
}
|
||||
|
||||
if (autowb1) {
|
||||
//alternative to camera if camera settings out, using autowb grey to find new ref, then mixed with camera
|
||||
// kcam = 0;
|
||||
params.wb.method = "autold";
|
||||
double rm, gm, bm;
|
||||
tempitc = 5000.f;
|
||||
greenitc = 1.;
|
||||
currWBitc = imgsrc->getWB();
|
||||
tempref0bias = currWBitc.getTemp();
|
||||
double greenref = currWBitc.getGreen();
|
||||
bool pargref = true;
|
||||
bool pargre = true;
|
||||
|
||||
if ((greenref > 1.5f || tempref0bias < 3300.f || tempref0bias > 7700.f || forcewbgrey) && kcam != 1 && !params.wb.itcwb_sampling) { //probably camera out to adjust...
|
||||
imgsrc->getAutoWBMultipliersitc(extra, tempref0bias, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params.wb, params.icm, params.raw, params.toneCurve);
|
||||
imgsrc->wbMul2Camera(rm, gm, bm);
|
||||
imgsrc->wbCamera2Mul(rm, gm, bm);
|
||||
ColorTemp ct(rm, gm, bm, 1.0, currWB.getObserver());
|
||||
tem = ct.getTemp();
|
||||
gre = ct.getGreen();
|
||||
|
||||
if (gre > 1.3f) {
|
||||
pargre = false;
|
||||
}
|
||||
|
||||
if (greenref > 1.3f) {
|
||||
pargref = false;
|
||||
}
|
||||
|
||||
double deltemp = tem - tempref0bias;
|
||||
|
||||
if (gre > 1.5f && !forcewbgrey) { //probable wrong value
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value
|
||||
gre = 0.5f + 0.5f * LIM(gre, 0.9f, 1.1f);//empirical formula in case system out
|
||||
} else {
|
||||
if (!forcewbgrey) {
|
||||
gre = 0.2f + 0.8f * LIM(gre, 0.85f, 1.15f);
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value
|
||||
nocam = 0;
|
||||
} else {//set temp and green to init itcwb algorithm
|
||||
double grepro = LIM(greenref, green_thres, 1.15);
|
||||
gre = 0.5f * grepro + 0.5f * LIM(gre, 0.9f, 1.1f);//empirical green between green camera and autowb grey
|
||||
|
||||
if (abs(deltemp) < 400.) { //arbitraries thresholds to refine
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
|
||||
if (deltemp > 0.) {
|
||||
nocam = 1;
|
||||
} else {
|
||||
nocam = 2;
|
||||
}
|
||||
} else if (abs(deltemp) < 900.) { //other arbitrary threshold
|
||||
tem = 0.4 * tem + 0.6 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
|
||||
if (deltemp > 0.) {
|
||||
nocam = 3;
|
||||
} else {
|
||||
nocam = 4;
|
||||
}
|
||||
} else if (abs(deltemp) < 1500. && tempref0bias < 4500.f) {
|
||||
if ((pargre && pargref) || (!pargre && !pargref)) {
|
||||
tem = 0.45 * tem + 0.55 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (pargre && !pargref) {
|
||||
tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (!pargre && pargref) {
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
nocam = 5;
|
||||
} else if (abs(deltemp) < 1500. && tempref0bias >= 4500.f) {
|
||||
if ((pargre && pargref) || (!pargre && !pargref)) {
|
||||
tem = 0.45 * tem + 0.55 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (pargre && !pargref) {
|
||||
tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (!pargre && pargref) {
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
nocam = 6;
|
||||
} else if (abs(deltemp) >= 1500. && tempref0bias < 5500.f) {
|
||||
if (tem >= 4500.f) {
|
||||
if ((pargre && pargref) || (!pargre && !pargref)) {
|
||||
tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (pargre && !pargref) {
|
||||
tem = 0.8 * tem + 0.2 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (!pargre && pargref) {
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
nocam = 7;
|
||||
} else {
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
nocam = 8;
|
||||
}
|
||||
} else if (abs(deltemp) >= 1500. && tempref0bias >= 5500.f) {
|
||||
if (tem >= 10000.f) {
|
||||
tem = 0.99 * tem + 0.01 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
nocam = 9;
|
||||
} else {
|
||||
if ((pargre && pargref) || (!pargre && !pargref)) {
|
||||
tem = 0.45 * tem + 0.55 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (pargre && !pargref) {
|
||||
tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
if (!pargre && pargref) {
|
||||
tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey
|
||||
}
|
||||
|
||||
nocam = 10;
|
||||
}
|
||||
} else {
|
||||
tem = 0.4 * tem + 0.6 * tempref0bias;
|
||||
nocam = 11;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tempitc = tem ;
|
||||
|
||||
extra = true;
|
||||
|
||||
if (settings->verbose) {
|
||||
printf("Using new references AWB grey or mixed Enable Extra - temgrey=%f gregrey=%f tempitc=%f nocam=%i\n", (double) tem, (double) gre, (double) tempitc, nocam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
params.wb.method = "autitcgreen";
|
||||
|
||||
}
|
||||
|
||||
float greenitc_low = 1.f;
|
||||
float tempitc_low = 5000.f;
|
||||
{
|
||||
double rm, gm, bm;
|
||||
greenitc = 1.;
|
||||
currWBitc = imgsrc->getWB();
|
||||
currWBitc = currWBitc.convertObserver(params.wb.observer);//change the temp/green couple with the same multipliers
|
||||
|
||||
double tempref = currWBitc.getTemp() * (1. + params.wb.tempBias);
|
||||
double greenref = currWBitc.getGreen();
|
||||
greenitc = greenref;
|
||||
|
||||
if ((greenref > 1.5f || tempref0bias < 3300.f || tempref0bias > 7700.f || forcewbgrey) && autowb1 && kcam != 1 && !params.wb.itcwb_sampling) { //probably camera out to adjust = greenref ? tempref0bias ?
|
||||
tempref = tem * (1. + params.wb.tempBias);
|
||||
greenref = gre;
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if(params.wb.itcwb_sampling) {
|
||||
greenitc_low = greenref;
|
||||
tempitc_low = tempref;
|
||||
}
|
||||
|
||||
if (settings->verbose && params.wb.method == "autitcgreen") {
|
||||
printf("tempref=%f greref=%f tempitc=%f greenitc=%f\n", tempref, greenref, tempitc, greenitc);
|
||||
}
|
||||
|
||||
imgsrc->getAutoWBMultipliersitc(extra, tempref, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params.wb, params.icm, params.raw, params.toneCurve);
|
||||
|
||||
|
||||
params.wb.temperature = tempitc;
|
||||
params.wb.green = greenitc;
|
||||
|
||||
if(params.wb.itcwb_sampling) {
|
||||
params.wb.temperature = tempitc_low;
|
||||
params.wb.green = greenitc_low;
|
||||
}
|
||||
|
||||
currWB = ColorTemp(params.wb.temperature, params.wb.green, 1., params.wb.method, params.wb.observer);
|
||||
currWB.getMultipliers(rm, gm, bm);
|
||||
autoWB.update(rm, gm, bm, params.wb.equal, params.wb.observer, params.wb.tempBias);
|
||||
|
||||
}
|
||||
|
||||
currWB = autoWB;
|
||||
}
|
||||
//end WB auto
|
||||
|
||||
calclum = nullptr ;
|
||||
params.dirpyrDenoise.getCurves(noiseLCurve, noiseCCurve);
|
||||
autoNR = (float) settings->nrauto;//
|
||||
@ -2116,7 +2359,6 @@ IImagefloat* processImage(ProcessingJob* pjob, int& errorCode, ProgressListener*
|
||||
|
||||
void batchProcessingThread(ProcessingJob* job, BatchProcessingListener* bpl)
|
||||
{
|
||||
|
||||
ProcessingJob* currentJob = job;
|
||||
|
||||
while (currentJob) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user