From 48d30e50c729d20be14036089d136eb4c5726339 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 22 Mar 2019 18:20:00 +0100 Subject: [PATCH 001/264] Wavelet Clarity and Unsharp mask --- rtdata/languages/default | 17 + rtengine/dcrop.cc | 112 +- rtengine/improccoordinator.cc | 152 ++- rtengine/ipwavelet.cc | 949 ++++++++------- rtengine/procparams.cc | 24 + rtengine/procparams.h | 6 + rtengine/simpleprocess.cc | 561 +++++---- rtgui/paramsedited.cc | 38 +- rtgui/paramsedited.h | 6 + rtgui/wavelet.cc | 2115 ++++++++++++++++++--------------- rtgui/wavelet.h | 21 +- 11 files changed, 2327 insertions(+), 1674 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 09f6fe9c1..432da3054 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -780,6 +780,12 @@ HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +HISTORY_MSG_WAVCLARI;Clarity +HISTORY_MSG_WAVUSHAMET;Clarity method +HISTORY_MSG_WAVMERGEL;Merge L +HISTORY_MSG_WAVMERGEC;Merge C +HISTORY_MSG_WAVSOFTRAD;Soft radius clarity +HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2129,6 +2135,7 @@ TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold betwe TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" TP_WAVELET_CHSL;Sliders TP_WAVELET_CHTYPE;Chrominance method +TP_WAVELET_CLARI;Clarity - Usharp Mask TP_WAVELET_COLORT;Opacity Red-Green TP_WAVELET_COMPCONT;Contrast TP_WAVELET_COMPGAMMA;Compression gamma @@ -2211,6 +2218,8 @@ TP_WAVELET_MEDGREINF;First level TP_WAVELET_MEDI;Reduce artifacts in blue sky TP_WAVELET_MEDILEV;Edge detection TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. +TP_WAVELET_MERGEL;Merge Luma +TP_WAVELET_MERGEC;Merge Chroma TP_WAVELET_NEUTRAL;Neutral TP_WAVELET_NOIS;Denoise TP_WAVELET_NOISE;Denoise and Refine @@ -2238,6 +2247,7 @@ TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. TP_WAVELET_SKY;Sky targetting/protection TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. +TP_WAVELET_SOFTRAD;Soft Radius TP_WAVELET_STREN;Strength TP_WAVELET_STRENGTH;Strength TP_WAVELET_SUPE;Extra @@ -2256,6 +2266,13 @@ TP_WAVELET_TMSTRENGTH;Compression strength TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. TP_WAVELET_TMTYPE;Compression method TP_WAVELET_TON;Toning +TP_WAVELET_USHARP;Clarity method +TP_WAVELET_USH;None +TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels +TP_WAVELET_SHA;Sharp mask +TP_WAVELET_CLA;Clarity +TP_WAVELET_USHARP;Sharp method +TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment TP_WBALANCE_AUTO;Auto TP_WBALANCE_CAMERA;Camera TP_WBALANCE_CLOUDY;Cloudy diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 0872049d8..695fd9056 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -23,6 +23,7 @@ #include "procparams.h" #include "refreshmap.h" #include "rt_math.h" +#include "guidedfilter.h" namespace { @@ -43,7 +44,7 @@ extern const Settings* settings; Crop::Crop(ImProcCoordinator* parent, EditDataProvider *editDataProvider, bool isDetailWindow) : PipetteBuffer(editDataProvider), origCrop(nullptr), laboCrop(nullptr), labnCrop(nullptr), - cropImg (nullptr), transCrop (nullptr), cieCrop (nullptr), + cropImg(nullptr), transCrop(nullptr), cieCrop(nullptr), updating(false), newUpdatePending(false), skip(10), cropx(0), cropy(0), cropw(-1), croph(-1), trafx(0), trafy(0), trafw(-1), trafh(-1), @@ -825,15 +826,17 @@ void Crop::update(int todo) parent->ipf.workingtrc(workingCrop, workingCrop, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, parent->getCustomTransformOut(), false, true, true); } } + double rrm, ggm, bbm; DCPProfile::ApplyState as; DCPProfile *dcpProf = parent->imgsrc->getDCP(params.icm, as); LUTu histToneCurve; - parent->ipf.rgbProc (workingCrop, laboCrop, this, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, + parent->ipf.rgbProc(workingCrop, laboCrop, this, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, params.toneCurve.saturation, parent->rCurve, parent->gCurve, parent->bCurve, parent->colourToningSatLimit, parent->colourToningSatLimitOpacity, parent->ctColorCurve, parent->ctOpacityCurve, parent->opautili, parent->clToningcurve, parent->cl2Toningcurve, parent->customToneCurve1, parent->customToneCurve2, parent->beforeToneCurveBW, parent->afterToneCurveBW, rrm, ggm, bbm, parent->bwAutoR, parent->bwAutoG, parent->bwAutoB, dcpProf, as, histToneCurve); + if (workingCrop != baseCrop) { delete workingCrop; } @@ -893,8 +896,8 @@ void Crop::update(int todo) parent->ipf.MLsharpen(labnCrop); if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) { - parent->ipf.MLmicrocontrast (labnCrop); - parent->ipf.sharpening (labnCrop, params.sharpening, parent->sharpMask); + parent->ipf.MLmicrocontrast(labnCrop); + parent->ipf.sharpening(labnCrop, params.sharpening, parent->sharpMask); } } @@ -938,7 +941,7 @@ void Crop::update(int todo) if (params.wavelet.Tilesmethod == "big") { realtile = 22; - } else /*if (params.wavelet.Tilesmethod == "lit")*/ { + } else { /*if (params.wavelet.Tilesmethod == "lit")*/ realtile = 12; } @@ -985,15 +988,106 @@ void Crop::update(int todo) LUTu dummy; params.wavelet.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); + LabImage *unshar = nullptr; + Glib::ustring provis; + LabImage *provradius = nullptr; + + if (WaveParams.softrad > 0.f) { + provradius = new LabImage(labnCrop->W, labnCrop->H); + provradius->CopyFrom(labnCrop); + } + + + + if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + + unshar = new LabImage(labnCrop->W, labnCrop->H); + provis = params.wavelet.CLmethod; + params.wavelet.CLmethod = "all"; + parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); + unshar->CopyFrom(labnCrop); + + params.wavelet.CLmethod = provis; + + } parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); + + if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + + float mL = (float)(WaveParams.mergeL / 100.f); + float mC = (float)(WaveParams.mergeC / 100.f); + float mL0; + float mC0; + + if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { + mL0 = mC0 = 0.f; + mL = -mL; + mC = -mC; + } else if (WaveParams.CLmethod == "sup" && WaveParams.Backmethod == "resid") { + mL0 = mL; + mC0 = mC; + } else { + mL0 = mL = mC0 = mC = 0.f; + } + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int x = 0; x < labnCrop->H; x++) + for (int y = 0; y < labnCrop->W; y++) { + labnCrop->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * labnCrop->L[x][y]; + labnCrop->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * labnCrop->a[x][y]; + labnCrop->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * labnCrop->b[x][y]; + } + + delete unshar; + unshar = NULL; + + if (WaveParams.softrad > 0.f) { + array2D ble(labnCrop->W, labnCrop->H); + array2D guid(labnCrop->W, labnCrop->H); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < labnCrop->H ; ir++) + for (int jr = 0; jr < labnCrop->W; jr++) { + ble[ir][jr] = (labnCrop->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + + float blur = 10.f / skip * (0.1f + 0.8f * WaveParams.softrad); + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, false); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < labnCrop->H; ir++) + for (int jr = 0; jr < labnCrop->W; jr++) { + labnCrop->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; + } + } + + if (WaveParams.softrad > 0.f) { + delete provradius; + provradius = NULL; + } + + + } + + } - parent->ipf.softLight(labnCrop); + parent->ipf.softLight(labnCrop); - // } - - // } if (params.colorappearance.enabled) { float fnum = parent->imgsrc->getMetaData()->getFNumber(); // F number float fiso = parent->imgsrc->getMetaData()->getISOSpeed() ; // ISO diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index ec047f853..c6207964f 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -28,6 +28,7 @@ #include #include #include +#include "guidedfilter.h" #include "color.h" #ifdef _OPENMP #include @@ -45,11 +46,11 @@ ImProcCoordinator::ImProcCoordinator() : fattal_11_dcrop_cache(nullptr), previmg(nullptr), workimg(nullptr), - ncie (nullptr), - imgsrc (nullptr), - lastAwbEqual (0.), - lastAwbTempBias (0.0), - monitorIntent (RI_RELATIVE), + ncie(nullptr), + imgsrc(nullptr), + lastAwbEqual(0.), + lastAwbTempBias(0.0), + monitorIntent(RI_RELATIVE), softProof(false), gamutCheck(false), sharpMask(false), @@ -181,12 +182,12 @@ ImProcCoordinator::~ImProcCoordinator() imgsrc->decreaseRef(); - if(customTransformIn) { + if (customTransformIn) { cmsDeleteTransform(customTransformIn); customTransformIn = nullptr; } - if(customTransformOut) { + if (customTransformOut) { cmsDeleteTransform(customTransformOut); customTransformOut = nullptr; } @@ -271,9 +272,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) imgsrc->setCurrentFrame(params->raw.bayersensor.imageNum); imgsrc->preprocess(rp, params->lensProf, params->coarse); + if (flatFieldAutoClipListener && rp.ff_AutoClipControl) { flatFieldAutoClipListener->flatFieldAutoClipValueChanged(imgsrc->getFlatFieldAutoClipValue()); } + imgsrc->getRAWHistogram(histRedRaw, histGreenRaw, histBlueRaw); highDetailPreprocessComputed = highDetailNeeded; @@ -307,8 +310,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) printf("Demosaic X-Trans image with using method: %s\n", rp.xtranssensor.method.c_str()); } } - if(imgsrc->getSensorType() == ST_BAYER) { - if(params->raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) { + + if (imgsrc->getSensorType() == ST_BAYER) { + if (params->raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) { imgsrc->setBorder(params->raw.bayersensor.border); } else { imgsrc->setBorder(std::max(params->raw.bayersensor.border, 2)); @@ -316,6 +320,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) { imgsrc->setBorder(params->raw.xtranssensor.border); } + bool autoContrast = imgsrc->getSensorType() == ST_BAYER ? params->raw.bayersensor.dualDemosaicAutoContrast : params->raw.xtranssensor.dualDemosaicAutoContrast; double contrastThreshold = imgsrc->getSensorType() == ST_BAYER ? params->raw.bayersensor.dualDemosaicContrast : params->raw.xtranssensor.dualDemosaicContrast; imgsrc->demosaic(rp, autoContrast, contrastThreshold); //enabled demosaic @@ -323,6 +328,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (imgsrc->getSensorType() == ST_BAYER && bayerAutoContrastListener && autoContrast) { bayerAutoContrastListener->autoContrastChanged(autoContrast ? contrastThreshold : -1.0); } + if (imgsrc->getSensorType() == ST_FUJI_XTRANS && xtransAutoContrastListener && autoContrast) { xtransAutoContrastListener->autoContrastChanged(autoContrast ? contrastThreshold : -1.0); } @@ -578,7 +584,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) progress("Exposure curve & CIELAB conversion...", 100 * readyphase / numofphases); - if (todo & (M_AUTOEXP | M_RGBCURVE)) { + if (todo & (M_AUTOEXP | M_RGBCURVE)) { if (params->icm.workingTRC == "Custom") { //exec TRC IN free if (oprevi == orig_prev) { oprevi = new Imagefloat(pW, pH); @@ -590,17 +596,21 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") { const int cw = oprevi->getWidth(); const int ch = oprevi->getHeight(); + // put gamma TRC to 1 - if(customTransformIn) { + if (customTransformIn) { cmsDeleteTransform(customTransformIn); customTransformIn = nullptr; } + ipf.workingtrc(oprevi, oprevi, cw, ch, -5, params->icm.workingProfile, 2.4, 12.92310, customTransformIn, true, false, true); + //adjust TRC - if(customTransformOut) { + if (customTransformOut) { cmsDeleteTransform(customTransformOut); customTransformOut = nullptr; } + ipf.workingtrc(oprevi, oprevi, cw, ch, 5, params->icm.workingProfile, params->icm.workingTRCGamma, params->icm.workingTRCSlope, customTransformOut, false, true, true); } } @@ -608,7 +618,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if ((todo & M_RGBCURVE) || (todo & M_CROP)) { - // if (hListener) oprevi->calcCroppedHistogram(params, scale, histCropped); + // if (hListener) oprevi->calcCroppedHistogram(params, scale, histCropped); //complexCurve also calculated pre-curves histogram depending on crop CurveFactory::complexCurve(params->toneCurve.expcomp, params->toneCurve.black / 65535.0, @@ -702,7 +712,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) DCPProfile::ApplyState as; DCPProfile *dcpProf = imgsrc->getDCP(params->icm, as); - ipf.rgbProc (oprevi, oprevl, nullptr, hltonecurve, shtonecurve, tonecurve, params->toneCurve.saturation, + ipf.rgbProc(oprevi, oprevl, nullptr, hltonecurve, shtonecurve, tonecurve, params->toneCurve.saturation, rCurve, gCurve, bCurve, colourToningSatLimit, colourToningSatLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, beforeToneCurveBW, afterToneCurveBW, rrm, ggm, bbm, bwAutoR, bwAutoG, bwAutoB, params->toneCurve.expcomp, params->toneCurve.hlcompr, params->toneCurve.hlcomprthresh, dcpProf, as, histToneCurve); if (params->blackwhite.enabled && params->blackwhite.autoc && abwListener) { @@ -838,20 +848,119 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) //CurveFactory::curveWavContL ( wavcontlutili,params->wavelet.lcurve, wavclCurve, LUTu & histogramwavcl, LUTu & outBeforeWavCLurveHistogram,int skip); CurveFactory::curveWavContL(wavcontlutili, params->wavelet.wavclCurve, wavclCurve, scale == 1 ? 1 : 16); - if ((params->wavelet.enabled)) { WaveletParams WaveParams = params->wavelet; - // WaveParams.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY); WaveParams.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); - int kall = 0; progress("Wavelet...", 100 * readyphase / numofphases); - // ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, scale); + LabImage *unshar = nullptr; + Glib::ustring provis; + LabImage *provradius = nullptr; + + if (WaveParams.softrad > 0.f) { + provradius = new LabImage(pW, pH); + provradius->CopyFrom(nprevl); + } + + + + + if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + unshar = new LabImage(pW, pH); + provis = params->wavelet.CLmethod; + params->wavelet.CLmethod = "all"; + ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); + + unshar->CopyFrom(nprevl); + + params->wavelet.CLmethod = provis; + + } + ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); + if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + float mL = (float)(WaveParams.mergeL / 100.f); + float mC = (float)(WaveParams.mergeC / 100.f); + float mL0; + float mC0; + + if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { + mL0 = mC0 = 0.f; + mL = -mL; + mC = -mC; + } else if (WaveParams.CLmethod == "sup" && WaveParams.Backmethod == "resid") { + mL0 = mL; + mC0 = mC; + } else { + mL0 = mL = mC0 = mC = 0.f; + } + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int x = 0; x < pH; x++) + for (int y = 0; y < pW; y++) { + nprevl->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * nprevl->L[x][y]; + nprevl->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * nprevl->a[x][y]; + nprevl->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * nprevl->b[x][y]; + } + + delete unshar; + unshar = NULL; + + if (WaveParams.softrad > 0.f) { + array2D ble(pW, pH); + array2D guid(pW, pH); + /* + #ifdef _OPENMP + const int numThreads = omp_get_max_threads(); + #endif + + bool multiTh = false; + + if (numThreads > 1) { + multiTh = true; + } + */ +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < pH; ir++) + for (int jr = 0; jr < pW; jr++) { + ble[ir][jr] = (nprevl->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + + float blur = 10.f / scale * (0.1f + 0.8f * WaveParams.softrad); + // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, false); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < pH; ir++) + for (int jr = 0; jr < pW; jr++) { + nprevl->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; + } + } + + if (WaveParams.softrad > 0.f) { + delete provradius; + provradius = NULL; + } + + + } } - ipf.softLight(nprevl); + ipf.softLight(nprevl); if (params->colorappearance.enabled) { //L histo and Chroma histo for ciecam @@ -1010,6 +1119,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) hListener->histogramChanged(histRed, histGreen, histBlue, histLuma, histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRedRaw, histGreenRaw, histBlueRaw, histChroma, histLRETI); } } + if (orig_prev != oprevi) { delete oprevi; oprevi = nullptr; @@ -1307,7 +1417,7 @@ void ImProcCoordinator::getSoftProofing(bool &softProof, bool &gamutCheck) gamutCheck = this->gamutCheck; } -void ImProcCoordinator::setSharpMask (bool sharpMask) +void ImProcCoordinator::setSharpMask(bool sharpMask) { this->sharpMask = sharpMask; } @@ -1477,7 +1587,7 @@ void ImProcCoordinator::process() while (changeSinceLast) { const bool panningRelatedChange = - params->toneCurve != nextParams->toneCurve + params->toneCurve != nextParams->toneCurve || params->labCurve != nextParams->labCurve || params->localContrast != nextParams->localContrast || params->rgbCurves != nextParams->rgbCurves diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index d3595b42c..8b5f33b74 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -41,6 +41,7 @@ #include "EdgePreservingDecomposition.h" #include "iccstore.h" #include "procparams.h" +#include "guidedfilter.h" #ifdef _OPENMP #include @@ -149,38 +150,46 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // init variables to display Munsell corrections MunsellDebugInfo* MunsDebugInfo = new MunsellDebugInfo(); #endif - TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix (params->icm.workingProfile); + TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(params->icm.workingProfile); const double wip[3][3] = { {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, {wiprof[2][0], wiprof[2][1], wiprof[2][2]} }; const short int imheight = lab->H, imwidth = lab->W; + LabImage *provradius = nullptr; + + if (waparams.softradend > 0.f && params->wavelet.expfinal) { + provradius = new LabImage(lab->W, lab->H); + provradius->CopyFrom(lab); + } + struct cont_params cp; + cp.avoi = params->wavelet.avoid; - if(params->wavelet.Medgreinf == "more") { + if (params->wavelet.Medgreinf == "more") { cp.reinforce = 1; } - if(params->wavelet.Medgreinf == "none") { + if (params->wavelet.Medgreinf == "none") { cp.reinforce = 2; } - if(params->wavelet.Medgreinf == "less") { + if (params->wavelet.Medgreinf == "less") { cp.reinforce = 3; } - if(params->wavelet.NPmethod == "none") { + if (params->wavelet.NPmethod == "none") { cp.lip3 = false; } - if(params->wavelet.NPmethod == "low") { + if (params->wavelet.NPmethod == "low") { cp.lip3 = true; cp.neigh = 0; } - if(params->wavelet.NPmethod == "high") { + if (params->wavelet.NPmethod == "high") { cp.lip3 = true; cp.neigh = 1; } @@ -192,27 +201,27 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.tonemap = false; cp.bam = false; - if(params->wavelet.tmrs == 0) { + if (params->wavelet.tmrs == 0) { cp.tonemap = false; } else { cp.tonemap = true; } - if(params->wavelet.TMmethod == "cont") { + if (params->wavelet.TMmethod == "cont") { cp.contmet = 1; - } else if(params->wavelet.TMmethod == "tm") { + } else if (params->wavelet.TMmethod == "tm") { cp.contmet = 2; } - if(params->wavelet.BAmethod != "none") { + if (params->wavelet.BAmethod != "none") { cp.bam = true; } - if(params->wavelet.BAmethod == "sli") { + if (params->wavelet.BAmethod == "sli") { cp.BAmet = 1; } - if(params->wavelet.BAmethod == "cur") { + if (params->wavelet.BAmethod == "cur") { cp.BAmet = 2; } @@ -226,15 +235,15 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.toningena = params->wavelet.exptoning; cp.noiseena = params->wavelet.expnoise; - if(params->wavelet.Backmethod == "black") { + if (params->wavelet.Backmethod == "black") { cp.backm = 0; } - if(params->wavelet.Backmethod == "grey") { + if (params->wavelet.Backmethod == "grey") { cp.backm = 1; } - if(params->wavelet.Backmethod == "resid") { + if (params->wavelet.Backmethod == "resid") { cp.backm = 2; } @@ -246,7 +255,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.edgsens = 60.f; cp.edgampl = 10.f; - if(cp.lipp) { + if (cp.lipp) { cp.edgsens = (float) params->wavelet.edgesensi; cp.edgampl = (float) params->wavelet.edgeampli; } @@ -257,7 +266,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const static const float scales[10] = {1.f, 2.f, 4.f, 8.f, 16.f, 32.f, 64.f, 128.f, 256.f, 512.f}; float scaleskip[10]; - for(int sc = 0; sc < 10; sc++) { + for (int sc = 0; sc < 10; sc++) { scaleskip[sc] = scales[sc] / skip; } @@ -267,23 +276,23 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //int DaubLen = settings->daubech ? 8 : 6; int DaubLen; - if(params->wavelet.daubcoeffmethod == "2_") { + if (params->wavelet.daubcoeffmethod == "2_") { DaubLen = 4; } - if(params->wavelet.daubcoeffmethod == "4_") { + if (params->wavelet.daubcoeffmethod == "4_") { DaubLen = 6; } - if(params->wavelet.daubcoeffmethod == "6_") { + if (params->wavelet.daubcoeffmethod == "6_") { DaubLen = 8; } - if(params->wavelet.daubcoeffmethod == "10_") { + if (params->wavelet.daubcoeffmethod == "10_") { DaubLen = 12; } - if(params->wavelet.daubcoeffmethod == "14_") { + if (params->wavelet.daubcoeffmethod == "14_") { DaubLen = 16; } @@ -292,11 +301,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // if(params->wavelet.CHSLmethod=="CU") cp.CHSLmet=2; cp.EDmet = 1; - if(params->wavelet.EDmethod == "SL") { + if (params->wavelet.EDmethod == "SL") { cp.EDmet = 1; } - if(params->wavelet.EDmethod == "CU") { + if (params->wavelet.EDmethod == "CU") { cp.EDmet = 2; } @@ -316,29 +325,29 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.CHmet = 0; cp.HSmet = false; - if(params->wavelet.CHmethod == "with") { + if (params->wavelet.CHmethod == "with") { cp.CHmet = 1; } - if(params->wavelet.CHmethod == "link") { + if (params->wavelet.CHmethod == "link") { cp.CHmet = 2; } - if(params->wavelet.HSmethod == "with") { + if (params->wavelet.HSmethod == "with") { cp.HSmet = true; } cp.strength = min(1.f, max(0.f, ((float)params->wavelet.strength / 100.f))); - for(int m = 0; m < maxmul; m++) { + for (int m = 0; m < maxmul; m++) { cp.mulC[m] = waparams.ch[m]; } - if(waOpacityCurveRG) { + if (waOpacityCurveRG) { cp.opaRG = true; } - if(cp.opaRG) { + if (cp.opaRG) { cp.mulopaRG[0] = 200.f * (waOpacityCurveRG[0] - 0.5f); cp.mulopaRG[1] = 200.f * (waOpacityCurveRG[62] - 0.5f); cp.mulopaRG[2] = 200.f * (waOpacityCurveRG[125] - 0.5f); @@ -349,16 +358,16 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.mulopaRG[7] = 200.f * (waOpacityCurveRG[438] - 0.5f); cp.mulopaRG[8] = 200.f * (waOpacityCurveRG[500] - 0.5f); } else { - for(int level = 0; level < 9; level++) { + for (int level = 0; level < 9; level++) { cp.mulopaRG[level] = 0.f; } } - if(waOpacityCurveBY) { + if (waOpacityCurveBY) { cp.opaBY = true; } - if(cp.opaBY) { + if (cp.opaBY) { cp.mulopaBY[0] = 200.f * (waOpacityCurveBY[0] - 0.5f); cp.mulopaBY[1] = 200.f * (waOpacityCurveBY[62] - 0.5f); cp.mulopaBY[2] = 200.f * (waOpacityCurveBY[125] - 0.5f); @@ -369,47 +378,47 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.mulopaBY[7] = 200.f * (waOpacityCurveBY[438] - 0.5f); cp.mulopaBY[8] = 200.f * (waOpacityCurveBY[500] - 0.5f); } else { - for(int level = 0; level < 9; level++) { + for (int level = 0; level < 9; level++) { cp.mulopaBY[level] = 0.f; } } - if(wavCLVCcurve) { + if (wavCLVCcurve) { cp.edgcurv = true; } - if(waOpacityCurveWL) { + if (waOpacityCurveWL) { cp.diagcurv = true; } - for(int m = 0; m < maxmul; m++) { + for (int m = 0; m < maxmul; m++) { cp.mul[m] = waparams.c[m]; } cp.mul[9] = (float) waparams.sup; - for(int sc = 0; sc < 10; sc++) { //reduce strength if zoom < 100% for contrast - if(sc == 0) { - if(scaleskip[sc] < 1.f) { + for (int sc = 0; sc < 10; sc++) { //reduce strength if zoom < 100% for contrast + if (sc == 0) { + if (scaleskip[sc] < 1.f) { cp.mul[sc] *= (atten0 * scaleskip[sc]); } } else { - if(scaleskip[sc] < 1.f) { + if (scaleskip[sc] < 1.f) { cp.mul[sc] *= (atten123 * scaleskip[sc]); } } } // if(settings->verbose) printf("Wav mul 0=%f 1=%f 2=%f 3=%f 4=%f 5=%f 6=%f 7=%f 8=%f 9=%f\n",cp.mul[0],cp.mul[1],cp.mul[2],cp.mul[3],cp.mul[4],cp.mul[5],cp.mul[6],cp.mul[7],cp.mul[8],cp.mul[9]); - for(int sc = 0; sc < 9; sc++) { //reduce strength if zoom < 100% for chroma and tuning - if(sc == 0) { - if(scaleskip[sc] < 1.f) { + for (int sc = 0; sc < 9; sc++) { //reduce strength if zoom < 100% for chroma and tuning + if (sc == 0) { + if (scaleskip[sc] < 1.f) { cp.mulC[sc] *= (atten0 * scaleskip[sc]); cp.mulopaRG[sc] *= (atten0 * scaleskip[sc]); cp.mulopaBY[sc] *= (atten0 * scaleskip[sc]); } } else { - if(scaleskip[sc] < 1.f) { + if (scaleskip[sc] < 1.f) { cp.mulC[sc] *= (atten123 * scaleskip[sc]); cp.mulopaRG[sc] *= (atten123 * scaleskip[sc]); cp.mulopaBY[sc] *= (atten123 * scaleskip[sc]); @@ -489,28 +498,28 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int minwin = min(imwidth, imheight); int maxlevelcrop = 9; - if(cp.mul[9] != 0) { + if (cp.mul[9] != 0) { maxlevelcrop = 10; } // adap maximum level wavelet to size of crop - if(minwin * skip < 1024) { + if (minwin * skip < 1024) { maxlevelcrop = 9; //sampling wavelet 512 } - if(minwin * skip < 512) { + if (minwin * skip < 512) { maxlevelcrop = 8; //sampling wavelet 256 } - if(minwin * skip < 256) { + if (minwin * skip < 256) { maxlevelcrop = 7; //sampling 128 } - if(minwin * skip < 128) { + if (minwin * skip < 128) { maxlevelcrop = 6; } - if(minwin < 64) { + if (minwin < 64) { maxlevelcrop = 5; } @@ -518,7 +527,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwav = params->wavelet.thres; - if(levwav == 9 && cp.mul[9] != 0) { + if (levwav == 9 && cp.mul[9] != 0) { levwav = 10; } @@ -530,7 +539,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // if(cp.mul[levwav-1]!=0.f) // break; // I suppress this fonctionality ==> crash for level < 3 - if(levwav < 1) { + if (levwav < 1) { return; // nothing to do } @@ -540,11 +549,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //output buffer int realtile = 0; - if(params->wavelet.Tilesmethod == "big") { + if (params->wavelet.Tilesmethod == "big") { realtile = 22; } - if(params->wavelet.Tilesmethod == "lit") { + if (params->wavelet.Tilesmethod == "lit") { realtile = 12; } @@ -552,16 +561,16 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int overlap = (int) tilesize * 0.125f; int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip; - if(params->wavelet.Tilesmethod == "full") { + if (params->wavelet.Tilesmethod == "full") { kall = 0; } - Tile_calc (tilesize, overlap, kall, imwidth, imheight, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip); + Tile_calc(tilesize, overlap, kall, imwidth, imheight, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip); const int numtiles = numtiles_W * numtiles_H; LabImage * dsttmp; - if(numtiles == 1) { + if (numtiles == 1) { dsttmp = dst; } else { dsttmp = new LabImage(imwidth, imheight); @@ -576,58 +585,57 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int minsizetile = min(tilewidth, tileheight); int maxlev2 = 10; - if(minsizetile < 1024 && levwav == 10) { + if (minsizetile < 1024 && levwav == 10) { maxlev2 = 9; } - if(minsizetile < 512) { + if (minsizetile < 512) { maxlev2 = 8; } - if(minsizetile < 256) { + if (minsizetile < 256) { maxlev2 = 7; } - if(minsizetile < 128) { + if (minsizetile < 128) { maxlev2 = 6; } levwav = min(maxlev2, levwav); //printf("levwav = %d\n",levwav); - #ifdef _OPENMP int numthreads = 1; int maxnumberofthreadsforwavelet = 0; //reduce memory for big tile size - if(kall != 0) { - if(realtile <= 22) { + if (kall != 0) { + if (realtile <= 22) { maxnumberofthreadsforwavelet = 2; } - if(realtile <= 20) { + if (realtile <= 20) { maxnumberofthreadsforwavelet = 3; } - if(realtile <= 18) { + if (realtile <= 18) { maxnumberofthreadsforwavelet = 4; } - if(realtile <= 16) { + if (realtile <= 16) { maxnumberofthreadsforwavelet = 6; } - if(realtile <= 14) { + if (realtile <= 14) { maxnumberofthreadsforwavelet = 8; } //printf("maxNRT=%d\n",maxnumberofthreadsforwavelet); - if((maxnumberofthreadsforwavelet == 6 || maxnumberofthreadsforwavelet == 8) && levwav == 10) { + if ((maxnumberofthreadsforwavelet == 6 || maxnumberofthreadsforwavelet == 8) && levwav == 10) { maxnumberofthreadsforwavelet -= 2; } - if(levwav <= 7 && maxnumberofthreadsforwavelet == 8) { + if (levwav <= 7 && maxnumberofthreadsforwavelet == 8) { maxnumberofthreadsforwavelet = 0; } } @@ -636,13 +644,13 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // Calculate number of tiles. If less than omp_get_max_threads(), then limit num_threads to number of tiles - if( options.rgbDenoiseThreadLimit > 0) { + if (options.rgbDenoiseThreadLimit > 0) { maxnumberofthreadsforwavelet = min(max(options.rgbDenoiseThreadLimit / 2, 1), maxnumberofthreadsforwavelet); } numthreads = MIN(numtiles, omp_get_max_threads()); - if(maxnumberofthreadsforwavelet > 0) { + if (maxnumberofthreadsforwavelet > 0) { numthreads = MIN(numthreads, maxnumberofthreadsforwavelet); } @@ -650,20 +658,20 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const wavNestedLevels = omp_get_max_threads() / numthreads; bool oldNested = omp_get_nested(); - if(wavNestedLevels < 2) { + if (wavNestedLevels < 2) { wavNestedLevels = 1; } else { omp_set_nested(true); } - if(maxnumberofthreadsforwavelet > 0) - while(wavNestedLevels * numthreads > maxnumberofthreadsforwavelet) { + if (maxnumberofthreadsforwavelet > 0) + while (wavNestedLevels * numthreads > maxnumberofthreadsforwavelet) { wavNestedLevels--; } #endif - if(settings->verbose) { + if (settings->verbose) { printf("Ip Wavelet uses %d main thread(s) and up to %d nested thread(s) for each main thread\n", numthreads, wavNestedLevels); } @@ -703,10 +711,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float **Lold = nullptr; float *LoldBuffer = nullptr; - if(numtiles == 1) { // untiled processing => we can use output buffer for labco + if (numtiles == 1) { // untiled processing => we can use output buffer for labco labco = dst; - if(cp.avoi) { // we need a buffer to hold a copy of the L channel + if (cp.avoi) { // we need a buffer to hold a copy of the L channel Lold = new float*[tileheight]; LoldBuffer = new float[tilewidth * tileheight]; memcpy(LoldBuffer, lab->L[0], tilewidth * tileheight * sizeof(float)); @@ -741,7 +749,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const _mm_storeu_ps(&varhue[i1][j1], huev); _mm_storeu_ps(&varchro[i1][j1], chrov); - if(labco != lab) { + if (labco != lab) { _mm_storeu_ps(&(labco->L[i1][j1]), LVFU(lab->L[i][j])); _mm_storeu_ps(&(labco->a[i1][j1]), av); _mm_storeu_ps(&(labco->b[i1][j1]), bv); @@ -759,7 +767,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const varhue[i1][j1] = xatan2f(b, a); varchro[i1][j1] = (sqrtf(a * a + b * b)) / 327.68f; - if(labco != lab) { + if (labco != lab) { labco->L[i1][j1] = lab->L[i][j]; labco->a[i1][j1] = a; labco->b[i1][j1] = b; @@ -768,7 +776,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } //to avoid artifacts in blue sky - if(params->wavelet.median) { + if (params->wavelet.median) { float** tmL; int wid = labco->W; int hei = labco->H; @@ -779,8 +787,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const tmL[i] = new float[wid]; } - for(int i = borderL; i < hei - borderL; i++ ) { - for(int j = borderL; j < wid - borderL; j++) { + for (int i = borderL; i < hei - borderL; i++) { + for (int j = borderL; j < wid - borderL; j++) { tmL[i][j] = labco->L[i][j]; } } @@ -791,14 +799,14 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int i = 1; i < hei - 1; i++) { for (int j = 1; j < wid - 1; j++) { - if((varhue[i][j] < -1.3f && varhue[i][j] > - 2.5f) && (varchro[i][j] > 15.f && varchro[i][j] < 55.f) && labco->L[i][j] > 6000.f) { //blue sky + med3x3 ==> after for more effect use denoise - tmL[i][j] = median(labco->L[i][j] , labco->L[i - 1][j], labco->L[i + 1][j] , labco->L[i][j + 1], labco->L[i][j - 1], labco->L[i - 1][j - 1], labco->L[i - 1][j + 1], labco->L[i + 1][j - 1], labco->L[i + 1][j + 1]); //3x3 + if ((varhue[i][j] < -1.3f && varhue[i][j] > - 2.5f) && (varchro[i][j] > 15.f && varchro[i][j] < 55.f) && labco->L[i][j] > 6000.f) { //blue sky + med3x3 ==> after for more effect use denoise + tmL[i][j] = median(labco->L[i][j], labco->L[i - 1][j], labco->L[i + 1][j], labco->L[i][j + 1], labco->L[i][j - 1], labco->L[i - 1][j - 1], labco->L[i - 1][j + 1], labco->L[i + 1][j - 1], labco->L[i + 1][j + 1]); //3x3 } } } - for(int i = borderL; i < hei - borderL; i++ ) { - for(int j = borderL; j < wid - borderL; j++) { + for (int i = borderL; i < hei - borderL; i++) { + for (int j = borderL; j < wid - borderL; j++) { labco->L[i][j] = tmL[i][j]; } } @@ -811,7 +819,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // end blue sky } - if(numtiles == 1) { + if (numtiles == 1) { // reduce the varhue array to get faster access in following processing and reduce peak memory usage float temphue[(tilewidth + 1) / 2] ALIGNED64; @@ -825,7 +833,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const memcpy(varhue[i], temphue, ((tilewidth + 1) / 2) * sizeof(float)); } - for(int i = (tileheight + 1) / 2; i < tileheight; i++) { + for (int i = (tileheight + 1) / 2; i < tileheight; i++) { delete [] varhue[i]; varhue[i] = nullptr; } @@ -842,20 +850,20 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwavL = levwav; bool ref0 = false; - if((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f || cp.lev3s > 0.f) && cp.noiseena) { + if ((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f || cp.lev3s > 0.f) && cp.noiseena) { ref0 = true; } // printf("LevwavL before: %d\n",levwavL); - if(cp.contrast == 0.f && !cp.tonemap && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels - while(levwavL > 0 && cp.mul[levwavL - 1] == 0.f) { // cp.mul[level] == 0.f means no changes to level + if (cp.contrast == 0.f && !cp.tonemap && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels + while (levwavL > 0 && cp.mul[levwavL - 1] == 0.f) { // cp.mul[level] == 0.f means no changes to level levwavL--; } } // printf("LevwavL after: %d\n",levwavL); // if(cp.noiseena){ - if(levwavL < 4 ) { + if (levwavL < 4) { levwavL = 4; //to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! } @@ -863,10 +871,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // else { // if(levwavL < 3) levwavL=3;//to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! // } - if(levwavL > 0) { - wavelet_decomposition* Ldecomp = new wavelet_decomposition (labco->data, labco->W, labco->H, levwavL, 1, skip, max(1, wavNestedLevels), DaubLen ); + if (levwavL > 0) { + wavelet_decomposition* Ldecomp = new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, max(1, wavNestedLevels), DaubLen); - if(!Ldecomp->memoryAllocationFailed) { + if (!Ldecomp->memoryAllocationFailed) { float madL[8][3]; #ifdef _OPENMP @@ -886,19 +894,19 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const bool ref = false; - if((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f || cp.lev3s > 0.f) && cp.noiseena) { + if ((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f || cp.lev3s > 0.f) && cp.noiseena) { ref = true; } bool contr = false; - for(int f = 0; f < levwavL; f++) { - if(cp.mul[f] != 0.f) { + for (int f = 0; f < levwavL; f++) { + if (cp.mul[f] != 0.f) { contr = true; } } - if(cp.val > 0 || ref || contr) {//edge + if (cp.val > 0 || ref || contr) { //edge Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } @@ -910,7 +918,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const vari[2] = 8.f * SQR((cp.lev2n / 125.0) * (1.0 + cp.lev2n / 25.0)); vari[3] = 8.f * SQR((cp.lev3n / 125.0) * (1.0 + cp.lev3n / 25.0)); - if((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) { + if ((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) { int edge = 1; vari[0] = max(0.0001f, vari[0]); vari[1] = max(0.0001f, vari[1]); @@ -937,7 +945,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const WaveletcontAllL(labco, varhue, varchro, *Ldecomp, cp, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); - if(cp.val > 0 || ref || contr || cp.diagcurv) {//edge + if (cp.val > 0 || ref || contr || cp.diagcurv) { //edge Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } @@ -964,21 +972,21 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } - if(!hhutili) {//always a or b + if (!hhutili) { //always a or b int levwava = levwav; // printf("Levwava before: %d\n",levwava); - if(cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels - while(levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f )) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { + if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + while (levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f)) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { levwava--; } } //printf("Levwava after: %d\n",levwava); - if(levwava > 0) { - wavelet_decomposition* adecomp = new wavelet_decomposition (labco->data + datalen, labco->W, labco->H, levwava, 1, skip, max(1, wavNestedLevels), DaubLen ); + if (levwava > 0) { + wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, max(1, wavNestedLevels), DaubLen); - if(!adecomp->memoryAllocationFailed) { + if (!adecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); adecomp->reconstruct(labco->data + datalen, cp.strength); } @@ -989,17 +997,17 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwavb = levwav; //printf("Levwavb before: %d\n",levwavb); - if(cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels - while(levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f )) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { + if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + while (levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f)) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { levwavb--; } } // printf("Levwavb after: %d\n",levwavb); - if(levwavb > 0) { - wavelet_decomposition* bdecomp = new wavelet_decomposition (labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, max(1, wavNestedLevels), DaubLen ); + if (levwavb > 0) { + wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, max(1, wavNestedLevels), DaubLen); - if(!bdecomp->memoryAllocationFailed) { + if (!bdecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *bdecomp, waOpacityCurveW, cp, false); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); } @@ -1010,21 +1018,21 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwavab = levwav; // printf("Levwavab before: %d\n",levwavab); - if(cp.chrores == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels - while(levwavab > 0 && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavab - 1] == 0.f )) || (cp.CHmet != 2 && (levwavab == 10 || (!cp.curv || cp.mulC[levwavab - 1] == 0.f))))) && (!cp.opaRG || levwavab == 10 || (cp.opaRG && cp.mulopaRG[levwavab - 1] == 0.f)) && ((levwavab == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavab - 1] == 0.f)))) { + if (cp.chrores == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels + while (levwavab > 0 && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavab - 1] == 0.f)) || (cp.CHmet != 2 && (levwavab == 10 || (!cp.curv || cp.mulC[levwavab - 1] == 0.f))))) && (!cp.opaRG || levwavab == 10 || (cp.opaRG && cp.mulopaRG[levwavab - 1] == 0.f)) && ((levwavab == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavab - 1] == 0.f)))) { levwavab--; } } // printf("Levwavab after: %d\n",levwavab); - if(levwavab > 0) { - wavelet_decomposition* adecomp = new wavelet_decomposition (labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, max(1, wavNestedLevels), DaubLen ); - wavelet_decomposition* bdecomp = new wavelet_decomposition (labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, max(1, wavNestedLevels), DaubLen ); + if (levwavab > 0) { + wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, max(1, wavNestedLevels), DaubLen); + wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, max(1, wavNestedLevels), DaubLen); - if(!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { + if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); WaveletcontAllAB(labco, varhue, varchro, *bdecomp, waOpacityCurveW, cp, false); - WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili ); + WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); adecomp->reconstruct(labco->data + datalen, cp.strength); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); @@ -1040,12 +1048,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const delete hhCurve; } - if(numtiles > 1 || (numtiles == 1 /*&& cp.avoi*/)) {//in all case since I add contrast curve + if (numtiles > 1 || (numtiles == 1 /*&& cp.avoi*/)) { //in all case since I add contrast curve //calculate mask for feathering output tile overlaps float Vmask[height + overlap] ALIGNED16; float Hmask[width + overlap] ALIGNED16; - if(numtiles > 1) { + if (numtiles > 1) { for (int i = 0; i < height; i++) { Vmask[i] = 1; } @@ -1091,7 +1099,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float xBuffer[rowWidth] ALIGNED64; float yBuffer[rowWidth] ALIGNED64; - if(cp.avoi) { + if (cp.avoi) { int col; __m128 av, bv; __m128 cv, yv, xv; @@ -1100,7 +1108,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const __m128 c327d68v = _mm_set1_ps(327.68f); vmask xyMask; - for(col = 0; col < rowWidth - 3; col += 4) { + for (col = 0; col < rowWidth - 3; col += 4) { av = LVFU(labco->a[i1][col]); bv = LVFU(labco->b[i1][col]); STVF(atan2Buffer[col], xatan2f(bv, av)); @@ -1117,7 +1125,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } - for(; col < rowWidth; col++) { + for (; col < rowWidth; col++) { float a = labco->a[i1][col]; float b = labco->b[i1][col]; atan2Buffer[col] = xatan2f(b, a); @@ -1133,7 +1141,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int j = tileleft; j < tileright; j++) { int j1 = j - tileleft; - if(cp.avoi) { //Gamut and Munsell + if (cp.avoi) { //Gamut and Munsell #ifdef __SSE2__ float HH = atan2Buffer[j1]; float Chprov1 = chprovBuffer[j1]; @@ -1153,7 +1161,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const L = labco->L[i1][j1]; const float Lin = labco->L[i1][j1]; - if(wavclCurve && cp.finena) { + if (wavclCurve && cp.finena) { labco->L[i1][j1] = (0.5f * Lin + 1.5f * wavclCurve[Lin]) / 2.f; //apply contrast curve } @@ -1184,8 +1192,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const Color::AllMunsellLch(true, Lprov1, Lprov2, HH, Chprov, memChprov, correctionHue, correctlum); #endif - if(correctionHue != 0.f || correctlum != 0.f) { // only calculate sin and cos if HH changed - if(fabs(correctionHue) < 0.015f) { + if (correctionHue != 0.f || correctlum != 0.f) { // only calculate sin and cos if HH changed + if (fabs(correctionHue) < 0.015f) { HH += correctlum; // correct only if correct Munsell chroma very little. } @@ -1198,7 +1206,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const L = labco->L[i1][j1]; const float Lin = labco->L[i1][j1]; - if(wavclCurve && cp.finena) { + if (wavclCurve && cp.finena) { labco->L[i1][j1] = (0.5f * Lin + 1.5f * wavclCurve[Lin]) / 2.f; //apply contrast curve } @@ -1207,7 +1215,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const b = labco->b[i1][j1]; } - if(numtiles > 1) { + if (numtiles > 1) { float factor = Vmask[i1] * Hmask[j1]; dsttmp->L[i][j] += factor * L; dsttmp->a[i][j] += factor * a; @@ -1222,19 +1230,19 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } - if(LoldBuffer != nullptr) { + if (LoldBuffer != nullptr) { delete [] LoldBuffer; delete [] Lold; } - if(numtiles > 1) { + if (numtiles > 1) { delete labco; } } } for (int i = 0; i < tileheight; i++) - if(varhue[i] != nullptr) { + if (varhue[i] != nullptr) { delete [] varhue[i]; } @@ -1251,11 +1259,54 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const omp_set_nested(oldNested); #endif - if(numtiles != 1) { + if (numtiles != 1) { dst->CopyFrom(dsttmp); delete dsttmp; } + if (waparams.softradend > 0.f && cp.finena) { + array2D ble(lab->W, lab->H); + array2D guid(lab->W, lab->H); + + bool multiTh = false; + +#ifdef _OPENMP + if (numthreads > 1) { + multiTh = true; + } +#endif + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < lab->H; ir++) + for (int jr = 0; jr < lab->W; jr++) { + ble[ir][jr] = (dst->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + + float blur = 10.f / skip * (0.1f + 0.1f * waparams.softradend); + + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < lab->H; ir++) + for (int jr = 0; jr < lab->W; jr++) { + dst->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; + } + } + + if (waparams.softradend > 0.f && cp.finena) { + delete provradius; + provradius = NULL; + } + #ifdef _DEBUG delete MunsDebugInfo; #endif @@ -1267,7 +1318,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const #undef offset #undef epsilon -void ImProcFunctions::Aver( float * RESTRICT DataList, int datalen, float &averagePlus, float &averageNeg, float &max, float &min) +void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &averagePlus, float &averageNeg, float &max, float &min) { //find absolute mean @@ -1286,19 +1337,19 @@ void ImProcFunctions::Aver( float * RESTRICT DataList, int datalen, float &aver #pragma omp for reduction(+:averaP,averaN,countP,countN) nowait #endif - for(int i = 0; i < datalen; i++) { - if(DataList[i] >= thres) { + for (int i = 0; i < datalen; i++) { + if (DataList[i] >= thres) { averaP += DataList[i]; - if(DataList[i] > lmax) { + if (DataList[i] > lmax) { lmax = DataList[i]; } countP++; - } else if(DataList[i] < -thres) { + } else if (DataList[i] < -thres) { averaN += DataList[i]; - if(DataList[i] < lmin) { + if (DataList[i] < lmin) { lmin = DataList[i]; } @@ -1315,13 +1366,13 @@ void ImProcFunctions::Aver( float * RESTRICT DataList, int datalen, float &aver } } - if(countP > 0) { + if (countP > 0) { averagePlus = averaP / countP; } else { averagePlus = 0; } - if(countN > 0) { + if (countN > 0) { averageNeg = averaN / countN; } else { averageNeg = 0; @@ -1330,7 +1381,7 @@ void ImProcFunctions::Aver( float * RESTRICT DataList, int datalen, float &aver } -void ImProcFunctions::Sigma( float * RESTRICT DataList, int datalen, float averagePlus, float averageNeg, float &sigmaPlus, float &sigmaNeg) +void ImProcFunctions::Sigma(float * RESTRICT DataList, int datalen, float averagePlus, float averageNeg, float &sigmaPlus, float &sigmaNeg) { int countP = 0, countN = 0; double variP = 0.0, variN = 0.0; // use double precision for large summations @@ -1340,23 +1391,23 @@ void ImProcFunctions::Sigma( float * RESTRICT DataList, int datalen, float aver #pragma omp parallel for reduction(+:variP,variN,countP,countN) num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif - for(int i = 0; i < datalen; i++) { - if(DataList[i] >= thres) { + for (int i = 0; i < datalen; i++) { + if (DataList[i] >= thres) { variP += SQR(DataList[i] - averagePlus); countP++; - } else if(DataList[i] <= -thres) { + } else if (DataList[i] <= -thres) { variN += SQR(DataList[i] - averageNeg); countN++; } } - if(countP > 0) { + if (countP > 0) { sigmaPlus = sqrt(variP / countP); } else { sigmaPlus = 0; } - if(countN > 0) { + if (countN > 0) { sigmaNeg = sqrt(variN / countN); } else { sigmaNeg = 0; @@ -1377,12 +1428,12 @@ void ImProcFunctions::Evaluate2(wavelet_decomposition &WaveletCoeffs_L, float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl); - Eval2 (WavCoeffs_L, lvl, Wlvl_L, Hlvl_L, mean, meanN, sigma, sigmaN, MaxP, MaxN); + Eval2(WavCoeffs_L, lvl, Wlvl_L, Hlvl_L, mean, meanN, sigma, sigmaN, MaxP, MaxN); } } -void ImProcFunctions::Eval2 (float ** WavCoeffs_L, int level, - int W_L, int H_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN) +void ImProcFunctions::Eval2(float ** WavCoeffs_L, int level, + int W_L, int H_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN) { float avLP[4], avLN[4]; @@ -1432,17 +1483,17 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress float exponent; - if(DetailBoost > 0.f && DetailBoost < 0.05f ) { + if (DetailBoost > 0.f && DetailBoost < 0.05f) { float betemp = expf(-(2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2) - exponent = 1.2f * xlogf( -betemp); + exponent = 1.2f * xlogf(-betemp); exponent /= 20.f; - } else if(DetailBoost >= 0.05f && DetailBoost < 0.25f ) { + } else if (DetailBoost >= 0.05f && DetailBoost < 0.25f) { float betemp = expf(-(2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2) - exponent = 1.2f * xlogf( -betemp); + exponent = 1.2f * xlogf(-betemp); exponent /= (-75.f * DetailBoost + 23.75f); - } else if(DetailBoost >= 0.25f) { + } else if (DetailBoost >= 0.25f) { float betemp = expf(-(2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2) - exponent = 1.2f * xlogf( -betemp); + exponent = 1.2f * xlogf(-betemp); exponent /= (-2.f * DetailBoost + 5.5f); } else { exponent = (Compression - 1.0f) / 20.f; @@ -1461,12 +1512,12 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress #pragma omp for #endif - for(int i = 0; i < n - 3; i += 4) { + for (int i = 0; i < n - 3; i += 4) { STVFU(Source[i], xexpf(xlogf(LVFU(Source[i])) * exponentv)); } } - for(int i = n - (n % 4); i < n; i++) { + for (int i = n - (n % 4); i < n; i++) { Source[i] = xexpf(xlogf(Source[i]) * exponent); } @@ -1475,7 +1526,7 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress #pragma omp parallel for #endif - for(int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { Source[i] = xexpf(xlogf(Source[i]) * exponent); } @@ -1489,7 +1540,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp float gamm = params->wavelet.gamma; cp.TMmeth = 2; //default after testing - if(cp.TMmeth == 1) { + if (cp.TMmeth == 1) { min0 = 0.0f; max0 = 32768.f; } else if (cp.TMmeth == 2) { @@ -1500,7 +1551,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp #pragma omp parallel for #endif - for(int i = 0; i < W_L * H_L; i++) { + for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L0[i] = (WavCoeffs_L0[i] - min0) / max0; WavCoeffs_L0[i] *= gamm; } @@ -1508,7 +1559,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp float Compression = expf(-stren); //This modification turns numbers symmetric around 0 into exponents. float DetailBoost = stren; - if(stren < 0.0f) { + if (stren < 0.0f) { DetailBoost = 0.0f; //Go with effect of exponent only if uncompressing. } @@ -1520,7 +1571,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp #pragma omp parallel for // removed schedule(dynamic,10) #endif - for(int ii = 0; ii < W_L * H_L; ii++) { + for (int ii = 0; ii < W_L * H_L; ii++) { WavCoeffs_L0[ii] = WavCoeffs_L0[ii] * max0 * (1.f / gamm) + min0; } } @@ -1540,7 +1591,7 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat EdgePreservingDecomposition epd2(W_L, H_L); cp.TMmeth = 2; //default after testing - if(cp.TMmeth == 1) { + if (cp.TMmeth == 1) { min0 = 0.0f; max0 = 32768.f; } else if (cp.TMmeth == 2) { @@ -1552,7 +1603,7 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat #pragma omp parallel for #endif - for(int i = 0; i < W_L * H_L; i++) { + for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L0[i] = (WavCoeffs_L0[i] - min0) / max0; WavCoeffs_L0[i] *= gamm; } @@ -1560,12 +1611,12 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat float Compression = expf(-stren); //This modification turns numbers symmetric around 0 into exponents. float DetailBoost = stren; - if(stren < 0.0f) { + if (stren < 0.0f) { DetailBoost = 0.0f; //Go with effect of exponent only if uncompressing. } //Auto select number of iterates. Note that p->EdgeStopping = 0 makes a Gaussian blur. - if(Iterates == 0) { + if (Iterates == 0) { Iterates = (unsigned int)(edgest * 15.0f); } @@ -1577,7 +1628,7 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat #pragma omp parallel for // removed schedule(dynamic,10) #endif - for(int ii = 0; ii < W_L * H_L; ii++) { + for (int ii = 0; ii < W_L * H_L; ii++) { WavCoeffs_L0[ii] = WavCoeffs_L0[ii] * max0 * (1.f / gamm) + min0; } } @@ -1592,7 +1643,7 @@ void ImProcFunctions::WaveletcontAllLfinal(wavelet_decomposition &WaveletCoeffs_ int Wlvl_L = WaveletCoeffs_L.level_W(lvl); int Hlvl_L = WaveletCoeffs_L.level_H(lvl); float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl); - finalContAllL (WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, mean, sigma, MaxP, waOpacityCurveWL); + finalContAllL(WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, mean, sigma, MaxP, waOpacityCurveWL); } } } @@ -1615,7 +1666,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float max0 = 0.f; float min0 = FLT_MAX; - if(contrast != 0.f || (cp.tonemap && cp.resena)) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step + if (contrast != 0.f || (cp.tonemap && cp.resena)) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step #ifdef _OPENMP #pragma omp parallel for reduction(+:avedbl) num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif @@ -1635,12 +1686,12 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #pragma omp for #endif - for(int i = 0; i < W_L * H_L; i++) { - if(WavCoeffs_L0[i] < lminL) { + for (int i = 0; i < W_L * H_L; i++) { + if (WavCoeffs_L0[i] < lminL) { lminL = WavCoeffs_L0[i]; } - if(WavCoeffs_L0[i] > lmaxL) { + if (WavCoeffs_L0[i] > lmaxL) { lmaxL = WavCoeffs_L0[i]; } @@ -1650,11 +1701,11 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #pragma omp critical #endif { - if(lminL < min0) { + if (lminL < min0) { min0 = lminL; } - if(lmaxL > max0) { + if (lmaxL > max0) { max0 = lmaxL; } } @@ -1666,7 +1717,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * // printf("MAXmax0=%f MINmin0=%f\n",max0,min0); //tone mapping - if(cp.tonemap && cp.contmet == 2 && cp.resena) { + if (cp.tonemap && cp.contmet == 2 && cp.resena) { //iterate = 5 EPDToneMapResid(WavCoeffs_L0, 5, skip, cp, W_L, H_L, max0, min0); @@ -1691,7 +1742,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float *koeLibuffer = nullptr; - for(int y = 0; y < 12; y++) { + for (int y = 0; y < 12; y++) { maxkoeLi[y] = 0.f; //9 } @@ -1701,7 +1752,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * koeLi[i] = &koeLibuffer[i * W_L * H_L]; } - for(int j = 0; j < 12; j++) //9 + for (int j = 0; j < 12; j++) //9 for (int i = 0; i < W_L * H_L; i++) { koeLi[j][i] = 0.f; } @@ -1710,17 +1761,17 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif { - if(contrast != 0.f && cp.resena && max0 > 0.0) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step + if (contrast != 0.f && cp.resena && max0 > 0.0) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step { #ifdef _OPENMP #pragma omp for #endif for (int i = 0; i < W_L * H_L; i++) { //contrast - if(WavCoeffs_L0[i] < 32768.f) { + if (WavCoeffs_L0[i] < 32768.f) { float prov; - if( WavCoeffs_L0[i] > ave) { + if (WavCoeffs_L0[i] > ave) { float kh = ah * (WavCoeffs_L0[i] / 327.68f) + bh; prov = WavCoeffs_L0[i]; WavCoeffs_L0[i] = ave + kh * (WavCoeffs_L0[i] - ave); @@ -1738,7 +1789,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } - if(cp.tonemap && cp.contmet == 1 && cp.resena) { + if (cp.tonemap && cp.contmet == 1 && cp.resena) { float maxp = max0 * 256.f; float minp = min0 * 256.f; #ifdef _OPENMP @@ -1751,7 +1802,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #pragma omp barrier #endif - if((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step + if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step #ifdef _OPENMP #pragma omp for nowait #endif @@ -1763,15 +1814,15 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * //shadow float alp = 3.f; //increase contrast sahdow in lowlights between 1 and ?? - if(cp.th > (100.f - tran)) { + if (cp.th > (100.f - tran)) { tran = 100.f - cp.th; } - if(LL100 < cp.th) { + if (LL100 < cp.th) { float aalp = (1.f - alp) / cp.th; //no changes for LL100 = cp.th float kk = aalp * LL100 + alp; WavCoeffs_L0[i] *= (1.f + kk * cp.conres / 200.f); - } else if(LL100 < cp.th + tran) { + } else if (LL100 < cp.th + tran) { float ath = -cp.conres / tran; float bth = cp.conres - ath * cp.th; WavCoeffs_L0[i] *= (1.f + (LL100 * ath + bth) / 200.f); @@ -1780,13 +1831,13 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * //highlight tran = 5.f; - if(cp.thH < (tran)) { + if (cp.thH < (tran)) { tran = cp.thH; } - if(LL100 > cp.thH) { + if (LL100 > cp.thH) { WavCoeffs_L0[i] *= (1.f + cp.conresH / 200.f); - } else if(LL100 > (cp.thH - tran)) { + } else if (LL100 > (cp.thH - tran)) { float athH = cp.conresH / tran; float bthH = cp.conresH - athH * cp.thH; WavCoeffs_L0[i] *= (1.f + (LL100 * athH + bthH) / 200.f); @@ -1806,7 +1857,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float eddlipampl = 1.f + cp.edgampl / 50.f; - if(cp.detectedge) { //enabled Lipschitz control...more memory..more time... + if (cp.detectedge) { //enabled Lipschitz control...more memory..more time... float *tmCBuffer = new float[H_L * W_L]; float *tmC[H_L]; @@ -1824,7 +1875,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * int H_L = WaveletCoeffs_L.level_H(lvl); float ** WavCoeffs_LL = WaveletCoeffs_L.level_coeffs(lvl); - calckoe(WavCoeffs_LL, cp, koeLi, lvl , dir, W_L, H_L, edd, maxkoeLi, tmC); + calckoe(WavCoeffs_LL, cp, 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 } } @@ -1843,7 +1894,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * //treatment of koeLi and maxkoeLi float interm = 0.f; - if(cp.lip3 && cp.lipp) { + if (cp.lip3 && cp.lipp) { // comparison between pixel and neighbours const auto neigh = cp.neigh == 1; const auto kneigh = neigh ? 28.f : 38.f; @@ -1882,11 +1933,11 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * //Liamp=1 for eddlipinfl //liamp > 1 for alp >eddlipinfl and alph < 1 //Liamp < 1 for alp < eddlipinfl and alph > 0 - if(alph > 1.f) { + if (alph > 1.f) { alph = 1.f / alph; } - if(beta > 1.f) { + if (beta > 1.f) { beta = 1.f / beta; } @@ -1896,14 +1947,14 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float bet = 1.f; //if(cp.lip3) {//enhance algorithm - if(alph > eddlipinfl && beta < 0.85f * eddlipinfl) { //0.85 arbitrary value ==> eliminate from edge if H V D too different + if (alph > eddlipinfl && beta < 0.85f * eddlipinfl) { //0.85 arbitrary value ==> eliminate from edge if H V D too different bet = beta; } //} float AmpLip = 1.f; - if(alph > eddlipinfl) { + if (alph > eddlipinfl) { AmpLip = alipinfl * alph + blipinfl; //If beta low reduce kampli kampli = SQR(bet) * AmpLip * aamp; } else { @@ -1923,7 +1974,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * interm *= kampli; - if(interm < cp.eddetthr / eddlow) { + if (interm < cp.eddetthr / eddlow) { interm = 0.01f; //eliminate too low values } @@ -1949,7 +2000,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl); - ContAllL (koeLi, maxkoeLi, true, maxlvl, labco, varhue, varchrom, WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); + ContAllL(koeLi, maxkoeLi, true, maxlvl, labco, varhue, varchrom, WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); } @@ -1957,7 +2008,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } //delete edge detection - if(koeLibuffer) { + if (koeLibuffer) { delete [] koeLibuffer; } } @@ -1998,7 +2049,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a, STVF(chrbuffer[k], chrv); } - for(; k < W_L; k++) { + for (; k < W_L; k++) { huebuffer[k] = xatan2f(WavCoeffs_b0[i * W_L + k], WavCoeffs_a0[i * W_L + k]); chrbuffer[k] = sqrtf(SQR(WavCoeffs_b0[i * W_L + k]) + SQR(WavCoeffs_a0[i * W_L + k])) / 327.68f; } @@ -2044,7 +2095,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif { - if(cp.chrores != 0.f && cp.resena) { // cp.chrores == 0.f means all will be multiplied by 1.f, so we can skip the processing of residual + if (cp.chrores != 0.f && cp.resena) { // cp.chrores == 0.f means all will be multiplied by 1.f, so we can skip the processing of residual #ifdef _OPENMP #pragma omp for nowait @@ -2058,22 +2109,22 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float modhue = varhue[ii][jj]; float scale = 1.f; - if(skyprot > 0.f) { - if((modhue < cp.t_ry && modhue > cp.t_ly)) { + if (skyprot > 0.f) { + if ((modhue < cp.t_ry && modhue > cp.t_ly)) { scale = (100.f - cp.sky) / 100.1f; - } else if((modhue >= cp.t_ry && modhue < cp.b_ry)) { + } else if ((modhue >= cp.t_ry && modhue < cp.b_ry)) { scale = (100.f - cp.sky) / 100.1f; float ar = (scale - 1.f) / (cp.t_ry - cp.b_ry); float br = scale - cp.t_ry * ar; scale = ar * modhue + br; - } else if((modhue > cp.b_ly && modhue < cp.t_ly)) { + } else if ((modhue > cp.b_ly && modhue < cp.t_ly)) { scale = (100.f - cp.sky) / 100.1f; float al = (scale - 1.f) / (-cp.b_ly + cp.t_ly); float bl = scale - cp.t_ly * al; scale = al * modhue + bl; } - } else if(skyprot < 0.f) { - if((modhue > cp.t_ry || modhue < cp.t_ly)) { + } else if (skyprot < 0.f) { + if ((modhue > cp.t_ry || modhue < cp.t_ly)) { scale = (100.f + cp.sky) / 100.1f; } @@ -2097,7 +2148,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float } } - if(cp.cbena && cp.resena) {//if user select Toning and color balance + if (cp.cbena && cp.resena) { //if user select Toning and color balance #ifdef _OPENMP #pragma omp for nowait @@ -2110,24 +2161,24 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float sca = 1.f; //amplifer - reducter...about 1, but perhaps 0.6 or 1.3 - if(useChannelA) {//green red (little magenta) + if (useChannelA) { //green red (little magenta) //transition to avoid artifacts with 6 between 30 to 36 and 63 to 69 float aa = (cp.grmed - cp.grlow) / 6.f; float bb = cp.grlow - 30.f * aa; float aaa = (cp.grhigh - cp.grmed) / 6.f; float bbb = cp.grmed - 63.f * aaa; - if(LL < 30.f) { //shadows + if (LL < 30.f) { //shadows WavCoeffs_ab0[i] += cp.grlow * (sca) * 300.f; - } else if(LL >= 30.f && LL < 36.f) { //transition + } else if (LL >= 30.f && LL < 36.f) { //transition float tr = aa * LL + bb; WavCoeffs_ab0[i] += tr * (sca) * 300.f; - } else if(LL >= 36.f && LL < 63.f) { //midtones + } else if (LL >= 36.f && LL < 63.f) { //midtones WavCoeffs_ab0[i] += cp.grmed * (sca) * 300.f; - } else if(LL >= 63.f && LL < 69.f) { //transition + } else if (LL >= 63.f && LL < 69.f) { //transition float trh = aaa * LL + bbb; WavCoeffs_ab0[i] += trh * (sca) * 300.f; - } else if(LL >= 69.f) { //highlights + } else if (LL >= 69.f) { //highlights WavCoeffs_ab0[i] += cp.grhigh * (sca) * 300.f; } } else { //blue yellow @@ -2137,17 +2188,17 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float aaa1 = (cp.blhigh - cp.blmed) / 6.f; float bbb1 = cp.blmed - 63.f * aaa1; - if(LL < 30.f) { + if (LL < 30.f) { WavCoeffs_ab0[i] += cp.bllow * (sca) * 300.f; - } else if(LL >= 30.f && LL < 36.f) { + } else if (LL >= 30.f && LL < 36.f) { float tr1 = aa1 * LL + bb1; WavCoeffs_ab0[i] += tr1 * (sca) * 300.f; - } else if(LL >= 36.f && LL < 63.f) { + } else if (LL >= 36.f && LL < 63.f) { WavCoeffs_ab0[i] += cp.blmed * (sca) * 300.f; - } else if(LL >= 63.f && LL < 69.f) { + } else if (LL >= 63.f && LL < 69.f) { float trh1 = aaa1 * LL + bbb1; WavCoeffs_ab0[i] += trh1 * (sca) * 300.f; - } else if(LL >= 69.f) { + } else if (LL >= 69.f) { WavCoeffs_ab0[i] += cp.blhigh * (sca) * 300.f; } } @@ -2165,7 +2216,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float int Hlvl_ab = WaveletCoeffs_ab.level_H(lvl); float ** WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); - ContAllAB (labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); + ContAllAB(labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); } } @@ -2181,7 +2232,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c int borderL = 2; // printf("cpedth=%f\n",cp.eddetthr); - if(cp.eddetthr < 30.f) { + if (cp.eddetthr < 30.f) { borderL = 1; // I calculate coefficients with r size matrix 3x3 r=1 ; 5x5 r=2; 7x7 r=3 @@ -2205,7 +2256,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c } } - } else if(cp.eddetthr >= 30.f && cp.eddetthr < 50.f) { + } else if (cp.eddetthr >= 30.f && cp.eddetthr < 50.f) { borderL = 1; for (int i = 1; i < H_L - 1; i++) { //sigma=0.85 @@ -2221,7 +2272,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c } - else if(cp.eddetthr >= 50.f && cp.eddetthr < 75.f) { + else if (cp.eddetthr >= 50.f && cp.eddetthr < 75.f) { borderL = 1; for (int i = 1; i < H_L - 1; i++) { @@ -2233,11 +2284,11 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c } } - else if(cp.eddetthr >= 75.f) { + else if (cp.eddetthr >= 75.f) { borderL = 2; //if(cp.lip3 && level > 1) { - if(level > 1) {// do not activate 5x5 if level 0 or 1 + if (level > 1) { // do not activate 5x5 if level 0 or 1 for (int i = 2; i < H_L - 2; i++) { for (int j = 2; j < W_L - 2; j++) { @@ -2255,7 +2306,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c // 4 9 12 9 4 // 2 4 5 4 2 // divi 159 - if(cp.eddetthr < 85.f) { //sigma=1.1 + if (cp.eddetthr < 85.f) { //sigma=1.1 tmC[i][j] = (15.f * WavCoeffs_LL[dir][i * W_L + j] + 10.f * WavCoeffs_LL[dir][(i - 1) * W_L + j] + 10.f * WavCoeffs_LL[dir][(i + 1) * W_L + j] + 10.f * WavCoeffs_LL[dir][i * W_L + j + 1] + 10.f * WavCoeffs_LL[dir][i * W_L + j - 1] + 7.f * WavCoeffs_LL[dir][(i - 1) * W_L + j - 1] + 7.f * WavCoeffs_LL[dir][(i - 1) * W_L + j + 1] + 7.f * WavCoeffs_LL[dir][(i + 1) * W_L + j - 1] + 7.f * WavCoeffs_LL[dir][(i + 1) * W_L + j + 1] @@ -2306,24 +2357,24 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c thr2 += cp.eddet / 30.f; //to test float diffFactor = (cp.eddet / 100.f); - for(int i = 0; i < H_L; i++ ) { - for(int j = 0; j < W_L; j++) { + for (int i = 0; i < H_L; i++) { + for (int j = 0; j < W_L; j++) { koeLi[level * 3 + dir - 1][i * W_L + j] = 1.f; } } - for(int i = borderL; i < H_L - borderL; i++ ) { - for(int j = borderL; j < W_L - borderL; j++) { + for (int i = borderL; i < H_L - borderL; i++) { + for (int j = borderL; j < W_L - borderL; j++) { // my own algo : probably a little false, but simpler as Lipschitz ! // Thr2 = maximum of the function ==> Lipsitch says = probably edge // float temp = WavCoeffs_LL[dir][i*W_L + j]; // if(temp>=0.f && temp < thr) temp = thr; // if(temp < 0.f && temp > -thr) temp = -thr; - float temp = max(fabsf(WavCoeffs_LL[dir][i * W_L + j]), thr ); + float temp = max(fabsf(WavCoeffs_LL[dir][i * W_L + j]), thr); koeLi[level * 3 + dir - 1][i * W_L + j] = min(thr2, fabs(tmC[i][j] / temp)); // limit maxi //it will be more complicated to calculate both Wh and Wv, but we have also Wd==> pseudo Lipschitz - if(koeLi[level * 3 + dir - 1][i * W_L + j] > maxkoeLi[level * 3 + dir - 1]) { + if (koeLi[level * 3 + dir - 1][i * W_L + j] > maxkoeLi[level * 3 + dir - 1]) { maxkoeLi[level * 3 + dir - 1] = koeLi[level * 3 + dir - 1][i * W_L + j]; } @@ -2335,10 +2386,10 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c } -void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, - int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) +void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, + int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) { - if(cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f ) { //curve + if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve float insigma = 0.666f; //SD float logmax = log(MaxP[level]); //log Max float rapX = (mean[level] + sigma[level]) / MaxP[level]; //rapport between sD / max @@ -2356,12 +2407,12 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, for (int i = 0; i < W_L * H_L; i++) { float absciss; - if(fabsf(WavCoeffs_L[dir][i]) >= (mean[level] + sigma[level])) { //for max + if (fabsf(WavCoeffs_L[dir][i]) >= (mean[level] + sigma[level])) { //for max float valcour = xlogf(fabsf(WavCoeffs_L[dir][i])); float valc = valcour - logmax; float vald = valc * rap; absciss = xexpf(vald); - } else if(fabsf(WavCoeffs_L[dir][i]) >= mean[level]) { + } else if (fabsf(WavCoeffs_L[dir][i]) >= mean[level]) { absciss = asig * fabsf(WavCoeffs_L[dir][i]) + bsig; } else { absciss = amean * fabsf(WavCoeffs_L[dir][i]); @@ -2382,34 +2433,34 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, int choiceClevel = 0; - if(params->wavelet.CLmethod == "one") { + if (params->wavelet.CLmethod == "one") { choiceClevel = 0; - } else if(params->wavelet.CLmethod == "inf") { + } else if (params->wavelet.CLmethod == "inf") { choiceClevel = 1; - } else if(params->wavelet.CLmethod == "sup") { + } else if (params->wavelet.CLmethod == "sup") { choiceClevel = 2; - } else if(params->wavelet.CLmethod == "all") { + } else if (params->wavelet.CLmethod == "all") { choiceClevel = 3; } int choiceDir = 0; - if(params->wavelet.Dirmethod == "one") { + if (params->wavelet.Dirmethod == "one") { choiceDir = 1; - } else if(params->wavelet.Dirmethod == "two") { + } else if (params->wavelet.Dirmethod == "two") { choiceDir = 2; - } else if(params->wavelet.Dirmethod == "thr") { + } else if (params->wavelet.Dirmethod == "thr") { choiceDir = 3; - } else if(params->wavelet.Dirmethod == "all") { + } else if (params->wavelet.Dirmethod == "all") { choiceDir = 0; } int dir1 = (choiceDir == 2) ? 1 : 2; int dir2 = (choiceDir == 3) ? 1 : 3; - if(choiceClevel < 3) { // not all levels visible, paint residual - if(level == 0) { - if(cp.backm != 2) { // nothing to change when residual is used as background + if (choiceClevel < 3) { // not all levels visible, paint residual + if (level == 0) { + if (cp.backm != 2) { // nothing to change when residual is used as background float backGroundColor = (cp.backm == 1) ? 12000.f : 0.f; for (int i = 0; i < W_L * H_L; i++) { @@ -2419,10 +2470,10 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, } } - if(choiceClevel == 0) { // Only one level + if (choiceClevel == 0) { // Only one level - if(choiceDir == 0) { // All directions - if(level != choicelevel) { // zero all for the levels != choicelevel + if (choiceDir == 0) { // All directions + if (level != choicelevel) { // zero all for the levels != choicelevel for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir][i] = 0.f; @@ -2431,21 +2482,21 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, } } else { // zero the unwanted directions for level == choicelevel - if(choicelevel >= cp.maxilev) { + if (choicelevel >= cp.maxilev) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir][i] = 0.f; } } - } else if(level != choicelevel) { // zero all for the levels != choicelevel + } else if (level != choicelevel) { // zero all for the levels != choicelevel for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f; } } } - } else if(choiceClevel == 1) { // Only below level - if(choiceDir == 0) { // All directions - if(level > choicelevel) { + } else if (choiceClevel == 1) { // Only below level + if (choiceDir == 0) { // All directions + if (level > choicelevel) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir][i] = 0.f; @@ -2453,15 +2504,15 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, } } } else { // zero the unwanted directions for level >= choicelevel - if(level > choicelevel) { + if (level > choicelevel) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f; } } } - } else if(choiceClevel == 2) { // Only above level - if(choiceDir == 0) { // All directions - if(level <= choicelevel) { + } else if (choiceClevel == 2) { // Only above level + if (choiceDir == 0) { // All directions + if (level <= choicelevel) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir][i] = 0.f; @@ -2469,7 +2520,7 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, } } } else { // zero the unwanted directions for level >= choicelevel - if(choicelevel >= cp.maxilev) { + if (choicelevel >= cp.maxilev) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir][i] = 0.f; @@ -2478,7 +2529,7 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, } - else if(level <= choicelevel) { + else if (level <= choicelevel) { for (int i = 0; i < W_L * H_L; i++) { WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f; } @@ -2489,16 +2540,16 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0, } -void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * labco, float ** varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, - int W_L, int H_L, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili) +void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * labco, float ** varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, + int W_L, int H_L, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili) { - assert (level >= 0); - assert (maxlvl > level); + assert(level >= 0); + assert(maxlvl > level); static const float scales[10] = {1.f, 2.f, 4.f, 8.f, 16.f, 32.f, 64.f, 128.f, 256.f, 512.f}; float scaleskip[10]; - for(int sc = 0; sc < 10; sc++) { + for (int sc = 0; sc < 10; sc++) { scaleskip[sc] = scales[sc] / skip; } @@ -2510,11 +2561,11 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float aedstr = (eddstrength - 1.f) / 90.f; float bedstr = 1.f - 10.f * aedstr; - if(cp.val > 0 && cp.edgeena) { + if (cp.val > 0 && cp.edgeena) { float * koe = nullptr; float maxkoe = 0.f; - if(!lipschitz) { + if (!lipschitz) { koe = new float [H_L * W_L]; for (int i = 0; i < W_L * H_L; i++) { @@ -2523,7 +2574,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit maxkoe = 0.f; - if(cp.detectedge) { + if (cp.detectedge) { float** tmC; int borderL = 1; tmC = new float*[H_L]; @@ -2549,25 +2600,25 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit - for(int i = borderL; i < H_L - borderL; i++ ) { - for(int j = borderL; j < W_L - borderL; j++) { + for (int i = borderL; i < H_L - borderL; i++) { + for (int j = borderL; j < W_L - borderL; j++) { // my own algo : probably a little false, but simpler as Lipschitz ! float thr = 40.f; //avoid artifact eg. noise...to test float thr2 = edd; //edd can be modified in option ed_detect thr2 += cp.eddet / 30.f; //to test float temp = WavCoeffs_L[dir][i * W_L + j]; - if(temp >= 0.f && temp < thr) { + if (temp >= 0.f && temp < thr) { temp = thr; } - if(temp < 0.f && temp > -thr) { + if (temp < 0.f && temp > -thr) { temp = -thr; } koe[i * W_L + j] = min(thr2, fabs(tmC[i][j] / temp)); - if(koe[i * W_L + j] > maxkoe) { + if (koe[i * W_L + j] > maxkoe) { maxkoe = koe[i * W_L + j]; } @@ -2575,7 +2626,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit diff *= (cp.eddet / 100.f); float interm = maxkoe - diff; - if(interm < cp.eddetthr / 30.f) { + if (interm < cp.eddetthr / 30.f) { interm = 0.01f; } @@ -2608,18 +2659,18 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float repart = (float)cp.til; float brepart; - if(cp.reinforce == 1) { + if (cp.reinforce == 1) { brepart = 3.f; } - if(cp.reinforce == 3) { + if (cp.reinforce == 3) { brepart = 0.5f; //arbitrary value to increase / decrease repart, between 1 and 0 } float arepart = -(brepart - 1.f) / (lim0 / 60.f); if (cp.reinforce != 2) { - if(rad < lim0 / 60.f) { + if (rad < lim0 / 60.f) { repart *= (arepart * rad + brepart); //linear repartition of repart } } @@ -2633,35 +2684,35 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float expkoef = -pow(fabs(rad - lev), koef); //reduce effect for high levels if (cp.reinforce == 3) { - if(rad < lim0 / 60.f && level == 0) { + if (rad < lim0 / 60.f && level == 0) { expkoef *= abs(repart); //reduce effect for low values of rad and level=0==> quasi only level 1 is effective } } if (cp.reinforce == 1) { - if(rad < lim0 / 60.f && level == 1) { + if (rad < lim0 / 60.f && level == 1) { expkoef /= repart; //increase effect for low values of rad and level=1==> quasi only level 0 is effective } } //take into account local contrast - float refin = value * exp (expkoef); + float refin = value * exp(expkoef); - if(cp.link && cp.noiseena) { //combi + if (cp.link && cp.noiseena) { //combi { - if(level == 0) { + if (level == 0) { refin *= (1.f + cp.lev0s / 50.f); // we can change this sensibility! } - if(level == 1) { + if (level == 1) { refin *= (1.f + cp.lev1s / 50.f); } - if(level == 2) { + if (level == 2) { refin *= (1.f + cp.lev2s / 50.f); } - if(level == 3) { + if (level == 3) { refin *= (1.f + cp.lev3s / 50.f); } } @@ -2669,7 +2720,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float edgePrecalc = 1.f + refin; //estimate edge "pseudo variance" - if(cp.EDmet == 2 && MaxP[level] > 0.f) { //curve + if (cp.EDmet == 2 && MaxP[level] > 0.f) { //curve // if(exa) {//curve float insigma = 0.666f; //SD float logmax = log(MaxP[level]); //log Max @@ -2685,21 +2736,21 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float kmul; int borderL = 1; - for(int i = borderL; i < H_L - borderL; i++ ) { - for(int j = borderL; j < W_L - borderL; j++) { + for (int i = borderL; i < H_L - borderL; i++) { + for (int j = borderL; j < W_L - borderL; j++) { int k = i * W_L + j; - if(cp.detectedge) { - if(!lipschitz) { - if(cp.eddet > 10.f) { + if (cp.detectedge) { + if (!lipschitz) { + if (cp.eddet > 10.f) { edge = (aedstr * cp.eddet + bedstr) * (edgePrecalc * (1.f + koe[k])) / (1.f + 0.9f * maxkoe); } else { edge = (edgePrecalc * (1.f + koe[k])) / (1.f + 0.9f * maxkoe); } } - if(lipschitz) { - if(level < 4) { + if (lipschitz) { + if (level < 4) { edge = 1.f + (edgePrecalc - 1.f) * (koeLi[level * 3][k]) / (1.f + 0.9f * maxkoeLi[level * 3 + dir - 1]); } else { edge = edgePrecalc; @@ -2709,16 +2760,16 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit edge = edgePrecalc; } - if(cp.edgcurv) { - if(fabs(WavCoeffs_L[dir][k]) >= (mean[level] + sigma[level])) { //for max + if (cp.edgcurv) { + if (fabs(WavCoeffs_L[dir][k]) >= (mean[level] + sigma[level])) { //for max float valcour = log(fabs(WavCoeffs_L[dir][k])); float valc = valcour - logmax; float vald = valc * rap; absciss = exp(vald); - } else if(fabs(WavCoeffs_L[dir][k]) >= mean[level] && fabs(WavCoeffs_L[dir][k]) < (mean[level] + sigma[level])) { + } else if (fabs(WavCoeffs_L[dir][k]) >= mean[level] && fabs(WavCoeffs_L[dir][k]) < (mean[level] + sigma[level])) { absciss = asig * fabs(WavCoeffs_L[dir][k]) + bsig; - } else if(fabs(WavCoeffs_L[dir][k]) < mean[level]) { + } else if (fabs(WavCoeffs_L[dir][k]) < mean[level]) { absciss = amean * fabs(WavCoeffs_L[dir][k]); } @@ -2740,7 +2791,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float am = (abssd - bbssd) / 0.666f; float kmuld = 0.f; - if(absciss > 0.666f && absciss < 1.f) { + if (absciss > 0.666f && absciss < 1.f) { kmul = a_abssd * absciss + b_abssd; //about max ==> kinterm kmuld = da_abssd * absciss + db_abssd; } else { @@ -2751,20 +2802,20 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float kc = kmul * (wavCLVCcurve[absciss * 500.f] - 0.5f); float kcd = kmuld * (wavCLVCcurve[absciss * 500.f] - 0.5f); - if(kc >= 0.f) { + if (kc >= 0.f) { float reduceeffect = 0.6f; kinterm = 1.f + reduceeffect * kmul * (wavCLVCcurve[absciss * 500.f] - 0.5f); //about 1 to 3 general and big amplification for max (under 0) } else { kinterm = 1.f - (SQR(kcd)) / 10.f; } - if(kinterm < 0.f) { + if (kinterm < 0.f) { kinterm = 0.01f; } edge *= kinterm; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } } @@ -2772,7 +2823,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit WavCoeffs_L[dir][k] *= edge; } } - } else if(cp.EDmet == 1) { //threshold adjuster + } else if (cp.EDmet == 1) { //threshold adjuster float MaxPCompare = MaxP[level] * SQR(cp.edg_max / 100.f); //100 instead of b_r...case if b_r < 100 float MaxNCompare = MaxN[level] * SQR(cp.edg_max / 100.f); //always reduce a little edge for near max values float edgeSdCompare = (mean[level] + 1.5f * sigma[level]) * SQR(cp.edg_sd / t_r); // 1.5 standard deviation #80% range between mean 50% and 80% @@ -2781,7 +2832,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float edgeMeanFactor = cbrt(cp.edg_mean / t_l); float interm; - if(cp.edg_low < 10.f) { + if (cp.edg_low < 10.f) { interm = cbrt((5.f + cp.edg_low) / 5.f); } else { interm = 1.437f; //cbrt(3); @@ -2795,21 +2846,21 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit //for (int i=0; i 10.f) { + if (cp.detectedge) { + if (!lipschitz) { + if (cp.eddet > 10.f) { edge = (aedstr * cp.eddet + bedstr) * (edgePrecalc * (1.f + koe[k])) / (1.f + 0.9f * maxkoe); } else { edge = (edgePrecalc * (1.f + koe[k])) / (1.f + 0.9f * maxkoe); } } - if(lipschitz) { - if(level < 4) { + if (lipschitz) { + if (level < 4) { edge = 1.f + (edgePrecalc - 1.f) * (koeLi[level * 3][k]) / (1.f + 0.9f * maxkoeLi[level * 3 + dir - 1]); } else { edge = edgePrecalc; @@ -2829,17 +2880,17 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit // If we move sliders to the left, local contrast is reduced // if we move sliders to the right local contrast is increased // MaxP, MaxN, mean, sigma are calculated if necessary (val > 0) by evaluate2(), eval2(), aver() , sigma() - if(b_r < 100.f && cp.edg_max / b_r > 1.f) { //in case of b_r < 100 and slider move to right + if (b_r < 100.f && cp.edg_max / b_r > 1.f) { //in case of b_r < 100 and slider move to right if (WavCoeffs_L[dir][k] > MaxPCompare * cp.edg_max / b_r) { edge *= edgMaxFsup; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } } else if (WavCoeffs_L[dir][k] < MaxNCompare * cp.edg_max / b_r) { edge *= edgMaxFsup; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } } @@ -2848,14 +2899,14 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit if (WavCoeffs_L[dir][k] > MaxPCompare) { edge *= edgeMaxFactor; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } }//reduce edge if > new max else if (WavCoeffs_L[dir][k] < MaxNCompare) { edge *= edgeMaxFactor; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } } @@ -2864,7 +2915,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit //if (fabs(WavCoeffs_L[dir][i]) > edgeSdCompare) { edge *= edgeSdFactor; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } }//modify effect if sd change @@ -2872,7 +2923,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit if (fabs(WavCoeffs_L[dir][k]) < edgeMeanCompare) { edge *= edgeMeanFactor; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } } // modify effect if mean change @@ -2880,7 +2931,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit if (fabs(WavCoeffs_L[dir][k]) < edgeLowCompare) { edge *= edgeLowFactor; - if(edge < 1.f) { + if (edge < 1.f) { edge = 1.f; } } @@ -2890,29 +2941,29 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit } } - if(!lipschitz) { + if (!lipschitz) { delete [] koe; } } - if(!cp.link && cp.noiseena) { //used both with denoise 1 2 3 + if (!cp.link && cp.noiseena) { //used both with denoise 1 2 3 float refine = 0.f; for (int i = 0; i < W_L * H_L; i++) { - if(level == 0) { + if (level == 0) { refine = cp.lev0s / 40.f; } - if(level == 1) { + if (level == 1) { refine = cp.lev1s / 40.f; } - if(level == 2) { + if (level == 2) { refine = cp.lev2s / 40.f; } - if(level == 3) { + if (level == 3) { refine = cp.lev3s / 40.f; } @@ -2923,7 +2974,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float cpMul = cp.mul[level]; - if(cpMul != 0.f && cp.contena) { // cpMul == 0.f means all will be multiplied by 1.f, so we can skip this + if (cpMul != 0.f && cp.contena) { // cpMul == 0.f means all will be multiplied by 1.f, so we can skip this const float skinprot = params->wavelet.skinprotect; const float skinprotneg = -skinprot; @@ -2950,30 +3001,30 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit for (int i = 0; i < W_L * H_L; i++) { float kLlev = 1.f; - if(cpMul < 0.f) { + if (cpMul < 0.f) { beta = 1.f; // disabled for negatives values "less contrast" } else { float WavCL = fabsf(WavCoeffs_L[dir][i]); //reduction amplification: max action between mean / 2 and mean + sigma // arbitrary coefficient, we can add a slider !! - if(WavCL < mea[0]) { + if (WavCL < mea[0]) { beta = 0.6f; //preserve very low contrast (sky...) - } else if(WavCL < mea[1]) { + } else if (WavCL < mea[1]) { beta = 0.8f; - } else if(WavCL < mea[2]) { + } else if (WavCL < mea[2]) { beta = 1.f; //standard - } else if(WavCL < mea[3]) { + } else if (WavCL < mea[3]) { beta = 1.f; - } else if(WavCL < mea[4]) { + } else if (WavCL < mea[4]) { beta = 0.8f; //+sigma - } else if(WavCL < mea[5]) { + } else if (WavCL < mea[5]) { beta = 0.6f; - } else if(WavCL < mea[6]) { + } else if (WavCL < mea[6]) { beta = 0.4f; - } else if(WavCL < mea[7]) { + } else if (WavCL < mea[7]) { beta = 0.2f; // + 2 sigma - } else if(WavCL < mea[8]) { + } else if (WavCL < mea[8]) { beta = 0.1f; } else { beta = 0.0f; @@ -2992,8 +3043,8 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit LL100res = WavCoeffs_L0[i] / 327.68f; float delta = fabs(LL100init - LL100res) / (maxlvl / 2); - for(int ml = 0; ml < maxlvl; ml++) { - if(ml < maxlvl / 2) { + for (int ml = 0; ml < maxlvl; ml++) { + if (ml < maxlvl / 2) { kH[ml] = (LL100res + ml * delta) / LL100res; // fixed a priori max to level middle } else { kH[ml] = (LL100init - ml * delta) / LL100res; @@ -3001,16 +3052,16 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit } - if(useChromAndHue) { + if (useChromAndHue) { float modhue = varhue[ii][jj]; modchro = varchrom[ii * 2][jj * 2]; // hue chroma skin with initial lab datas scale = 1.f; - if(skinprot > 0.f) { - Color::SkinSatCbdl2 (LL100, modhue, modchro, skinprot, scale, true, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); //0 for skin and extand - } else if(skinprot < 0.f) { - Color::SkinSatCbdl2 (LL100, modhue, modchro, skinprotneg, scale, false, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); + if (skinprot > 0.f) { + Color::SkinSatCbdl2(LL100, modhue, modchro, skinprot, scale, true, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); //0 for skin and extand + } else if (skinprot < 0.f) { + Color::SkinSatCbdl2(LL100, modhue, modchro, skinprotneg, scale, false, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); if (scale == 1.f) { scale = factorHard; @@ -3021,14 +3072,14 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit } - if(Chutili) { + if (Chutili) { int i_i = i / W_L; int j_j = i - i_i * W_L; double lr; float modhue2 = varhue[i_i][j_j]; float valparam = float((ChCurve->getVal(lr = Color::huelab_to_huehsv2(modhue2)) - 0.5f)); //get valparam=f(H) - if(valparam > 0.f) { + if (valparam > 0.f) { scale2 = 1.f + 3.f * valparam; //arbitrary value } else { scale2 = 1.f + 1.9f * valparam; //near 0 but not zero if curve # 0 @@ -3039,7 +3090,7 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float diagacc = 1.f; float alpha = (1024.f + 15.f * (float) cpMul * scale * scale2 * beta * diagacc) / 1024.f ; - if(cp.HSmet && cp.contena) { + if (cp.HSmet && cp.contena) { float aaal = (1.f - alpha) / ((cp.b_lhl - cp.t_lhl) * kH[level]); float bbal = 1.f - aaal * cp.b_lhl * kH[level]; float aaar = (alpha - 1.f) / (cp.t_rhl - cp.b_rhl) * kH[level]; @@ -3050,24 +3101,24 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float aaarS = (alpha - 1.f) / (cp.t_rsl - cp.b_rsl); float bbbrS = 1.f - cp.b_rsl * aaarS; - if(level <= cp.numlevH) { //in function of levels - if((LL100 > cp.t_lhl * kH[level] && LL100 < cp.t_rhl * kH[level])) { + if (level <= cp.numlevH) { //in function of levels + if ((LL100 > cp.t_lhl * kH[level] && LL100 < cp.t_rhl * kH[level])) { kLlev = alpha; - } else if((LL100 > cp.b_lhl * kH[level] && LL100 <= cp.t_lhl * kH[level])) { + } else if ((LL100 > cp.b_lhl * kH[level] && LL100 <= cp.t_lhl * kH[level])) { kLlev = aaal * LL100 + bbal; - } else if((LL100 > cp.t_rhl * kH[level] && LL100 <= cp.b_rhl * kH[level])) { + } else if ((LL100 > cp.t_rhl * kH[level] && LL100 <= cp.b_rhl * kH[level])) { kLlev = aaar * LL100 + bbbr; } else { kLlev = 1.f; } } - if(level >= (9 - cp.numlevS)) { - if((LL100 > cp.t_lsl && LL100 < cp.t_rsl)) { + if (level >= (9 - cp.numlevS)) { + if ((LL100 > cp.t_lsl && LL100 < cp.t_rsl)) { kLlev = alpha; - } else if((LL100 > cp.b_lsl && LL100 <= cp.t_lsl)) { + } else if ((LL100 > cp.b_lsl && LL100 <= cp.t_lsl)) { kLlev = aaalS * LL100 + bbalS; - } else if((LL100 > cp.t_rsl && LL100 <= cp.b_rsl)) { + } else if ((LL100 > cp.t_rsl && LL100 <= cp.b_rsl)) { kLlev = aaarS * LL100 + bbbrS; } else { kLlev = 1.f; @@ -3082,27 +3133,27 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit } } - if(waOpacityCurveW) { + if (waOpacityCurveW) { cp.opaW = true; } - if(cp.bam && cp.finena) { - if(cp.opaW && cp.BAmet == 2) { + if (cp.bam && cp.finena) { + if (cp.opaW && cp.BAmet == 2) { int iteration = cp.ite; int itplus = 7 + iteration; int itmoins = 7 - iteration; int med = maxlvl / 2; int it; - if(level < med) { + if (level < med) { it = itmoins; - } else if(level == med) { + } else if (level == med) { it = 7; - } else /*if(level > med)*/ { + } else { /*if(level > med)*/ it = itplus; } - for(int j = 0; j < it; j++) { + for (int j = 0; j < it; j++) { //float bal = cp.balan;//-100 +100 float kba = 1.f; @@ -3115,11 +3166,11 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float k1 = 0.3f * (waOpacityCurveW[6.f * LL100] - 0.5f); //k1 between 0 and 0.5 0.5==> 1/6=0.16 float k2 = k1 * 2.f; - if(dir < 3) { + if (dir < 3) { kba = 1.f + k1; } - if(dir == 3) { + if (dir == 3) { kba = 1.f - k2; } @@ -3128,22 +3179,22 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit } } - if(cp.BAmet == 1) { + if (cp.BAmet == 1) { int iteration = cp.ite; int itplus = 7 + iteration; int itmoins = 7 - iteration; int med = maxlvl / 2; int it; - if(level < med) { + if (level < med) { it = itmoins; - } else if(level == med) { + } else if (level == med) { it = 7; - } else /*if(level > med)*/ { + } else { /*if(level > med)*/ it = itplus; } - for(int j = 0; j < it; j++) { + for (int j = 0; j < it; j++) { float bal = cp.balan;//-100 +100 float kba = 1.f; @@ -3160,12 +3211,12 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit float b0 = 100000.f; float a0 = -4970.f; - if(LL100 > 80.f) { + if (LL100 > 80.f) { k1 = aa * LL100 + bb; k2 = 0.5f * k1; } - if(LL100 < 20.f) { + if (LL100 < 20.f) { k1 = a0 * LL100 + b0; k2 = 0.5f * k1; } @@ -3174,11 +3225,11 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit //k2=300.f; //k1=0.3f*(waOpacityCurveW[6.f*LL100]-0.5f);//k1 between 0 and 0.5 0.5==> 1/6=0.16 //k2=k1*2.f; - if(dir < 3) { + if (dir < 3) { kba = 1.f + bal / k1; } - if(dir == 3) { + if (dir == 3) { kba = 1.f - bal / k2; } @@ -3194,12 +3245,12 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit choicelevel = choicelevel == -1 ? 4 : choicelevel; } -void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, float **varchrom, float ** WavCoeffs_ab, float * WavCoeffs_ab0, int level, int dir, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, - int W_ab, int H_ab, const bool useChannelA) +void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, float **varchrom, float ** WavCoeffs_ab, float * WavCoeffs_ab0, int level, int dir, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, + int W_ab, int H_ab, const bool useChannelA) { float cpMul = cp.mul[level]; - if(cpMul != 0.f && cp.CHmet == 2 && cp.chro != 0.f && cp.chromena) { // cpMul == 0.f or cp.chro = 0.f means all will be multiplied by 1.f, so we can skip this + if (cpMul != 0.f && cp.CHmet == 2 && cp.chro != 0.f && cp.chromena) { // cpMul == 0.f or cp.chro = 0.f means all will be multiplied by 1.f, so we can skip this const float skinprot = params->wavelet.skinprotect; const float skinprotneg = -skinprot; const float factorHard = (1.f - skinprotneg / 100.f); @@ -3210,7 +3261,7 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, float alphaC = (1024.f + 15.f * cpMul * cpChrom / 50.f) / 1024.f ; for (int i = 0; i < W_ab * H_ab; i++) { - if(useSkinControl) { + if (useSkinControl) { int ii = i / W_ab; int jj = i - ii * W_ab; float LL100 = labco->L[ii * 2][jj * 2] / 327.68f; @@ -3219,10 +3270,10 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, // hue chroma skin with initial lab datas float scale = 1.f; - if(skinprot > 0.f) { - Color::SkinSatCbdl2 (LL100, modhue, modchro, skinprot, scale, true, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); //0 for skin and extand - } else if(skinprot < 0.f) { - Color::SkinSatCbdl2 (LL100, modhue, modchro, skinprotneg, scale, false, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); + if (skinprot > 0.f) { + Color::SkinSatCbdl2(LL100, modhue, modchro, skinprot, scale, true, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); //0 for skin and extand + } else if (skinprot < 0.f) { + Color::SkinSatCbdl2(LL100, modhue, modchro, skinprotneg, scale, false, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 0); scale = (scale == 1.f) ? factorHard : 1.f; } @@ -3238,7 +3289,7 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, float cpMulC = cp.mulC[level]; // if( (cp.curv || cp.CHSLmet==1) && cp.CHmet!=2 && level < 9 && cpMulC != 0.f) { // cpMulC == 0.f means all will be multiplied by 1.f, so we can skip - if( cp.CHmet != 2 && level < 9 && cpMulC != 0.f && cp.chromena) { // cpMulC == 0.f means all will be multiplied by 1.f, so we can skip + if (cp.CHmet != 2 && level < 9 && cpMulC != 0.f && cp.chromena) { // cpMulC == 0.f means all will be multiplied by 1.f, so we can skip const float skinprot = params->wavelet.skinprotect; const float skinprotneg = -skinprot; const float factorHard = (1.f - skinprotneg / 100.f); @@ -3251,37 +3302,37 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, float scale = 1.f; float modchro = varchrom[ii * 2][jj * 2]; - if(useSkinControl) { + if (useSkinControl) { // hue chroma skin with initial lab datas float LL100 = labco->L[ii * 2][jj * 2] / 327.68f; float modhue = varhue[ii][jj]; - if(skinprot > 0.f) { - Color::SkinSatCbdl2 (LL100, modhue, modchro, skinprot, scale, true, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 1); //1 for curve - } else if(skinprot < 0.f) { - Color::SkinSatCbdl2 (LL100, modhue, modchro, skinprotneg, scale, false, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 1); + if (skinprot > 0.f) { + Color::SkinSatCbdl2(LL100, modhue, modchro, skinprot, scale, true, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 1); //1 for curve + } else if (skinprot < 0.f) { + Color::SkinSatCbdl2(LL100, modhue, modchro, skinprotneg, scale, false, cp.b_l, cp.t_l, cp.t_r, cp.b_r, 1); scale = (scale == 1.f) ? factorHard : 1.f; } } float beta = (1024.f + 20.f * cpMulC * scale) / 1024.f ; - if(beta < 0.02f) { + if (beta < 0.02f) { beta = 0.02f; } float kClev = beta; - if(cp.CHmet == 1) { - if(level < cp.chrom) { + if (cp.CHmet == 1) { + if (level < cp.chrom) { //linear for saturated - if((modchro > cp.t_lsat && modchro < cp.t_rsat)) { + if ((modchro > cp.t_lsat && modchro < cp.t_rsat)) { kClev = beta; - } else if((modchro > cp.b_lsat && modchro <= cp.t_lsat)) { + } else if ((modchro > cp.b_lsat && modchro <= cp.t_lsat)) { float aaal = (1.f - beta) / (cp.b_lsat - cp.t_lsat); float bbal = 1.f - aaal * cp.b_lsat; kClev = aaal * modchro + bbal; - } else if((modchro > cp.t_rsat && modchro <= cp.b_rsat)) { + } else if ((modchro > cp.t_rsat && modchro <= cp.b_rsat)) { float aaar = (beta - 1.f) / (cp.t_rsat - cp.b_rsat); float bbbr = 1.f - cp.b_rsat * aaar; kClev = aaar * modchro + bbbr; @@ -3290,13 +3341,13 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, } } else { //linear for pastel - if((modchro > cp.t_lpast && modchro < cp.t_rpast)) { + if ((modchro > cp.t_lpast && modchro < cp.t_rpast)) { kClev = beta; - } else if((modchro > cp.b_lpast && modchro <= cp.t_lpast)) { + } else if ((modchro > cp.b_lpast && modchro <= cp.t_lpast)) { float aaalS = (1.f - beta) / (cp.b_lpast - cp.t_lpast); float bbalS = 1.f - aaalS * cp.b_lpast; kClev = aaalS * modchro + bbalS; - } else if((modchro > cp.t_rpast && modchro <= cp.b_rpast)) { + } else if ((modchro > cp.t_rpast && modchro <= cp.b_rpast)) { float aaarS = (beta - 1.f) / (cp.t_rpast - cp.b_rpast); float bbbrS = 1.f - cp.b_rpast * aaarS; kClev = aaarS * modchro + bbbrS; @@ -3304,7 +3355,7 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, kClev = 1.f; } } - } else if(cp.CHmet == 0) { + } else if (cp.CHmet == 0) { kClev = beta; } @@ -3315,19 +3366,21 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, bool useOpacity; float mulOpacity = 0.f; - if(useChannelA) { + if (useChannelA) { useOpacity = cp.opaRG; - if(level < 9) { + + if (level < 9) { mulOpacity = cp.mulopaRG[level]; } } else { useOpacity = cp.opaBY; - if(level < 9) { + + if (level < 9) { mulOpacity = cp.mulopaBY[level]; } } - if((useOpacity && level < 9 && mulOpacity != 0.f) && cp.toningena) { //toning + if ((useOpacity && level < 9 && mulOpacity != 0.f) && cp.toningena) { //toning float beta = (1024.f + 20.f * mulOpacity) / 1024.f ; @@ -3339,28 +3392,28 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, // WavCoeffs_ab[dir][i] += beta; } - if(waOpacityCurveW) { + if (waOpacityCurveW) { cp.opaW = true; } - if(cp.bam && cp.diag) { + if (cp.bam && cp.diag) { //printf("OK Chroma\n"); - if(cp.opaW && cp.BAmet == 2) { + if (cp.opaW && cp.BAmet == 2) { int iteration = cp.ite; int itplus = 7 + iteration; int itmoins = 7 - iteration; int med = maxlvl / 2; int it; - if(level < med) { + if (level < med) { it = itmoins; - } else if(level == med) { + } else if (level == med) { it = 7; - } else /*if(level > med)*/ { + } else { /*if(level > med)*/ it = itplus; } - for(int j = 0; j < it; j++) { + for (int j = 0; j < it; j++) { //float bal = cp.balan;//-100 +100 float kba = 1.f; @@ -3373,11 +3426,11 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, float k1 = 0.3f * (waOpacityCurveW[6.f * LL100] - 0.5f); //k1 between 0 and 0.5 0.5==> 1/6=0.16 float k2 = k1 * 2.f; - if(dir < 3) { + if (dir < 3) { kba = 1.f + k1; } - if(dir == 3) { + if (dir == 3) { kba = 1.f - k2; } @@ -3386,22 +3439,22 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, } } - if(cp.BAmet == 1) { + if (cp.BAmet == 1) { int iteration = cp.ite; int itplus = 7 + iteration; int itmoins = 7 - iteration; int med = maxlvl / 2; int it; - if(level < med) { + if (level < med) { it = itmoins; - } else if(level == med) { + } else if (level == med) { it = 7; - } else /*if(level > med)*/ { + } else { /*if(level > med)*/ it = itplus; } - for(int j = 0; j < it; j++) { + for (int j = 0; j < it; j++) { float bal = cp.balan;//-100 +100 float kba = 1.f; @@ -3418,12 +3471,12 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, float b0 = 100000.f; float a0 = -4970.f; - if(LL100 > 80.f) { + if (LL100 > 80.f) { k1 = aa * LL100 + bb; k2 = 0.5f * k1; } - if(LL100 < 20.f) { + if (LL100 < 20.f) { k1 = a0 * LL100 + b0; k2 = 0.5f * k1; } @@ -3432,11 +3485,11 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, //k2=300.f; //k1=0.3f*(waOpacityCurveW[6.f*LL100]-0.5f);//k1 between 0 and 0.5 0.5==> 1/6=0.16 //k2=k1*2.f; - if(dir < 3) { + if (dir < 3) { kba = 1.f + bal / k1; } - if(dir == 3) { + if (dir == 3) { kba = 1.f - bal / k2; } @@ -3452,34 +3505,34 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, choicelevel = choicelevel == -1 ? 4 : choicelevel; int choiceClevel = 0; - if(params->wavelet.CLmethod == "one") { + if (params->wavelet.CLmethod == "one") { choiceClevel = 0; - } else if(params->wavelet.CLmethod == "inf") { + } else if (params->wavelet.CLmethod == "inf") { choiceClevel = 1; - } else if(params->wavelet.CLmethod == "sup") { + } else if (params->wavelet.CLmethod == "sup") { choiceClevel = 2; - } else if(params->wavelet.CLmethod == "all") { + } else if (params->wavelet.CLmethod == "all") { choiceClevel = 3; } int choiceDir = 0; - if(params->wavelet.Dirmethod == "one") { + if (params->wavelet.Dirmethod == "one") { choiceDir = 1; - } else if(params->wavelet.Dirmethod == "two") { + } else if (params->wavelet.Dirmethod == "two") { choiceDir = 2; - } else if(params->wavelet.Dirmethod == "thr") { + } else if (params->wavelet.Dirmethod == "thr") { choiceDir = 3; - } else if(params->wavelet.Dirmethod == "all") { + } else if (params->wavelet.Dirmethod == "all") { choiceDir = 0; } int dir1 = (choiceDir == 2) ? 1 : 2; int dir2 = (choiceDir == 3) ? 1 : 3; - if(choiceClevel < 3) { // not all levels visible, paint residual - if(level == 0) { - if(cp.backm != 2) { // nothing to change when residual is used as background + if (choiceClevel < 3) { // not all levels visible, paint residual + if (level == 0) { + if (cp.backm != 2) { // nothing to change when residual is used as background for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab0[i] = 0.f; } @@ -3487,9 +3540,9 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, } } - if(choiceClevel == 0) { // Only one level - if(choiceDir == 0) { // All directions - if(level != choicelevel) { // zero all for the levels != choicelevel + if (choiceClevel == 0) { // Only one level + if (choiceDir == 0) { // All directions + if (level != choicelevel) { // zero all for the levels != choicelevel for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir][i] = 0.f; @@ -3497,21 +3550,21 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, } } } else { // zero the unwanted directions for level == choicelevel - if(choicelevel >= cp.maxilev) { + if (choicelevel >= cp.maxilev) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir][i] = 0.f; } } - } else if(level != choicelevel) { // zero all for the levels != choicelevel + } else if (level != choicelevel) { // zero all for the levels != choicelevel for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f; } } } - } else if(choiceClevel == 1) { // Only below level - if(choiceDir == 0) { // All directions - if(level > choicelevel) { + } else if (choiceClevel == 1) { // Only below level + if (choiceDir == 0) { // All directions + if (level > choicelevel) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir][i] = 0.f; @@ -3519,15 +3572,15 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, } } } else { // zero the unwanted directions for level >= choicelevel - if(level > choicelevel) { + if (level > choicelevel) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f; } } } - } else if(choiceClevel == 2) { // Only above level - if(choiceDir == 0) { // All directions - if(level <= choicelevel) { + } else if (choiceClevel == 2) { // Only above level + if (choiceDir == 0) { // All directions + if (level <= choicelevel) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir][i] = 0.f; @@ -3535,13 +3588,13 @@ void ImProcFunctions::ContAllAB (LabImage * labco, int maxlvl, float ** varhue, } } } else { // zero the unwanted directions for level >= choicelevel - if(choicelevel >= cp.maxilev) { + if (choicelevel >= cp.maxilev) { for (int dir = 1; dir < 4; dir++) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir][i] = 0.f; } } - } else if(level <= choicelevel) { + } else if (level <= choicelevel) { for (int i = 0; i < W_ab * H_ab; i++) { WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f; } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 6d914bb27..1bbab3f74 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2150,6 +2150,10 @@ WaveletParams::WaveletParams() : bluemed(0), greenhigh(0), bluehigh(0), + mergeL(40.), + mergeC(20.), + softrad(0.), + softradend(0.), lipst(false), avoid(false), tmr(false), @@ -2165,6 +2169,7 @@ WaveletParams::WaveletParams() : expfinal(false), exptoning(false), expnoise(false), + expclari(false), Lmethod(4), CLmethod("all"), Backmethod("grey"), @@ -2172,6 +2177,7 @@ WaveletParams::WaveletParams() : daubcoeffmethod("4_"), CHmethod("without"), Medgreinf("less"), + ushamethod("none"), CHSLmethod("SL"), EDmethod("CU"), NPmethod("none"), @@ -2239,6 +2245,10 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && bluemed == other.bluemed && greenhigh == other.greenhigh && bluehigh == other.bluehigh + && mergeL == other.mergeL + && mergeC == other.mergeC + && softrad == other.softrad + && softradend == other.softradend && lipst == other.lipst && avoid == other.avoid && tmr == other.tmr @@ -2259,6 +2269,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && expedge == other.expedge && expresid == other.expresid && expfinal == other.expfinal + && expclari == other.expclari && exptoning == other.exptoning && expnoise == other.expnoise && Lmethod == other.Lmethod @@ -2268,6 +2279,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && daubcoeffmethod == other.daubcoeffmethod && CHmethod == other.CHmethod && Medgreinf == other.Medgreinf + && ushamethod == other.ushamethod && CHSLmethod == other.CHSLmethod && EDmethod == other.EDmethod && NPmethod == other.NPmethod @@ -3335,6 +3347,10 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.bluehigh, "Wavelet", "CBbluehigh", wavelet.bluehigh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.bluemed, "Wavelet", "CBbluemed", wavelet.bluemed, keyFile); saveToKeyfile(!pedited || pedited->wavelet.bluelow, "Wavelet", "CBbluelow", wavelet.bluelow, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.mergeL, "Wavelet", "MergeL", wavelet.mergeL, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.mergeC, "Wavelet", "MergeC", wavelet.mergeC, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.softrad, "Wavelet", "Softrad", wavelet.softrad, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.softradend, "Wavelet", "Softradend", wavelet.softradend, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expcontrast, "Wavelet", "Expcontrast", wavelet.expcontrast, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expchroma, "Wavelet", "Expchroma", wavelet.expchroma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expedge, "Wavelet", "Expedge", wavelet.expedge, keyFile); @@ -3342,6 +3358,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.expfinal, "Wavelet", "Expfinal", wavelet.expfinal, keyFile); saveToKeyfile(!pedited || pedited->wavelet.exptoning, "Wavelet", "Exptoning", wavelet.exptoning, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expnoise, "Wavelet", "Expnoise", wavelet.expnoise, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.expclari, "Wavelet", "Expclari", wavelet.expclari, keyFile); for (int i = 0; i < 9; i++) { std::stringstream ss; @@ -3376,6 +3393,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.chroma, "Wavelet", "ThresholdChroma", wavelet.chroma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.CHmethod, "Wavelet", "CHromaMethod", wavelet.CHmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.Medgreinf, "Wavelet", "Medgreinf", wavelet.Medgreinf, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.ushamethod, "Wavelet", "Ushamethod", wavelet.ushamethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.CHSLmethod, "Wavelet", "CHSLromaMethod", wavelet.CHSLmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.EDmethod, "Wavelet", "EDMethod", wavelet.EDmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.NPmethod, "Wavelet", "NPMethod", wavelet.NPmethod, keyFile); @@ -4457,6 +4475,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "CBbluehigh", pedited, wavelet.bluehigh, pedited->wavelet.bluehigh); assignFromKeyfile(keyFile, "Wavelet", "CBbluemed", pedited, wavelet.bluemed, pedited->wavelet.bluemed); assignFromKeyfile(keyFile, "Wavelet", "CBbluelow", pedited, wavelet.bluelow, pedited->wavelet.bluelow); + assignFromKeyfile(keyFile, "Wavelet", "MergeL", pedited, wavelet.mergeL, pedited->wavelet.mergeL); + assignFromKeyfile(keyFile, "Wavelet", "MergeC", pedited, wavelet.mergeC, pedited->wavelet.mergeC); + assignFromKeyfile(keyFile, "Wavelet", "Softrad", pedited, wavelet.softrad, pedited->wavelet.softrad); + assignFromKeyfile(keyFile, "Wavelet", "Softradend", pedited, wavelet.softradend, pedited->wavelet.softradend); assignFromKeyfile(keyFile, "Wavelet", "Lipst", pedited, wavelet.lipst, pedited->wavelet.lipst); assignFromKeyfile(keyFile, "Wavelet", "AvoidColorShift", pedited, wavelet.avoid, pedited->wavelet.avoid); assignFromKeyfile(keyFile, "Wavelet", "TMr", pedited, wavelet.tmr, pedited->wavelet.tmr); @@ -4478,6 +4500,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "DaubMethod", pedited, wavelet.daubcoeffmethod, pedited->wavelet.daubcoeffmethod); assignFromKeyfile(keyFile, "Wavelet", "CHromaMethod", pedited, wavelet.CHmethod, pedited->wavelet.CHmethod); assignFromKeyfile(keyFile, "Wavelet", "Medgreinf", pedited, wavelet.Medgreinf, pedited->wavelet.Medgreinf); + assignFromKeyfile(keyFile, "Wavelet", "Ushamethod", pedited, wavelet.ushamethod, pedited->wavelet.ushamethod); assignFromKeyfile(keyFile, "Wavelet", "CHSLromaMethod", pedited, wavelet.CHSLmethod, pedited->wavelet.CHSLmethod); assignFromKeyfile(keyFile, "Wavelet", "EDMethod", pedited, wavelet.EDmethod, pedited->wavelet.EDmethod); assignFromKeyfile(keyFile, "Wavelet", "NPMethod", pedited, wavelet.NPmethod, pedited->wavelet.NPmethod); @@ -4684,6 +4707,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "Expfinal", pedited, wavelet.expfinal, pedited->wavelet.expfinal); assignFromKeyfile(keyFile, "Wavelet", "Exptoning", pedited, wavelet.exptoning, pedited->wavelet.exptoning); assignFromKeyfile(keyFile, "Wavelet", "Expnoise", pedited, wavelet.expnoise, pedited->wavelet.expnoise); + assignFromKeyfile(keyFile, "Wavelet", "Expclari", pedited, wavelet.expclari, pedited->wavelet.expclari); } if (keyFile.has_group("Directional Pyramid Equalizer")) { diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 0982fda48..f2328217a 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1180,6 +1180,10 @@ struct WaveletParams { int bluemed; int greenhigh; int bluehigh; + double mergeL; + double mergeC; + double softrad; + double softradend; bool lipst; bool avoid; @@ -1196,6 +1200,7 @@ struct WaveletParams { bool expfinal; bool exptoning; bool expnoise; + bool expclari; int Lmethod; Glib::ustring CLmethod; @@ -1204,6 +1209,7 @@ struct WaveletParams { Glib::ustring daubcoeffmethod; Glib::ustring CHmethod; Glib::ustring Medgreinf; + Glib::ustring ushamethod; Glib::ustring CHSLmethod; Glib::ustring EDmethod; Glib::ustring NPmethod; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index ff2b234a3..52ab5a590 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -30,6 +30,8 @@ #include "rawimagesource.h" #include "../rtgui/multilangmgr.h" #include "mytime.h" +#include "guidedfilter.h" + #undef THREAD_PRIORITY_NORMAL namespace rtengine @@ -40,7 +42,7 @@ namespace { template -void adjust_radius (const T &default_param, double scale_factor, T ¶m) +void adjust_radius(const T &default_param, double scale_factor, T ¶m) { const double delta = (param - default_param) * scale_factor; param = default_param + delta; @@ -56,10 +58,10 @@ public: ProgressListener* pl, bool flush ) : - job (static_cast (pjob)), - errorCode (errorCode), - pl (pl), - flush (flush), + job(static_cast(pjob)), + errorCode(errorCode), + pl(pl), + flush(flush), // internal state ii(nullptr), imgsrc(nullptr), @@ -139,14 +141,14 @@ private: errorCode = 0; if (pl) { - pl->setProgressStr ("PROGRESSBAR_PROCESSING"); - pl->setProgress (0.0); + pl->setProgressStr("PROGRESSBAR_PROCESSING"); + pl->setProgress(0.0); } ii = job->initialImage; if (!ii) { - ii = InitialImage::load (job->fname, job->isRaw, &errorCode); + ii = InitialImage::load(job->fname, job->isRaw, &errorCode); if (errorCode) { delete job; @@ -157,11 +159,12 @@ private: procparams::ProcParams& params = job->pparams; // acquire image from imagesource - imgsrc = ii->getImageSource (); + imgsrc = ii->getImageSource(); - tr = getCoarseBitMask (params.coarse); - if(imgsrc->getSensorType() == ST_BAYER) { - if(params.raw.bayersensor.method!= RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) { + tr = getCoarseBitMask(params.coarse); + + if (imgsrc->getSensorType() == ST_BAYER) { + if (params.raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) { imgsrc->setBorder(params.raw.bayersensor.border); } else { imgsrc->setBorder(std::max(params.raw.bayersensor.border, 2)); @@ -169,7 +172,8 @@ private: } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) { imgsrc->setBorder(params.raw.xtranssensor.border); } - imgsrc->getFullSize (fw, fh, tr); + + imgsrc->getFullSize(fw, fh, tr); // check the crop params if (params.crop.x > fw || params.crop.y > fh) { @@ -203,29 +207,31 @@ private: // MyTime t1,t2; // t1.set(); - ipf_p.reset (new ImProcFunctions (¶ms, true)); + ipf_p.reset(new ImProcFunctions(¶ms, true)); ImProcFunctions &ipf = * (ipf_p.get()); - imgsrc->setCurrentFrame (params.raw.bayersensor.imageNum); - imgsrc->preprocess ( params.raw, params.lensProf, params.coarse, params.dirpyrDenoise.enabled); + imgsrc->setCurrentFrame(params.raw.bayersensor.imageNum); + imgsrc->preprocess(params.raw, params.lensProf, params.coarse, params.dirpyrDenoise.enabled); if (pl) { - pl->setProgress (0.20); + pl->setProgress(0.20); } + bool autoContrast = imgsrc->getSensorType() == ST_BAYER ? params.raw.bayersensor.dualDemosaicAutoContrast : params.raw.xtranssensor.dualDemosaicAutoContrast; double contrastThreshold = imgsrc->getSensorType() == ST_BAYER ? params.raw.bayersensor.dualDemosaicContrast : params.raw.xtranssensor.dualDemosaicContrast; - imgsrc->demosaic (params.raw, autoContrast, contrastThreshold); + imgsrc->demosaic(params.raw, autoContrast, contrastThreshold); if (pl) { - pl->setProgress (0.30); + pl->setProgress(0.30); } - pp = PreviewProps (0, 0, fw, fh, 1); + + pp = PreviewProps(0, 0, fw, fh, 1); if (params.retinex.enabled) { //enabled Retinex - LUTf cdcurve (65536, 0); - LUTf mapcurve (65536, 0); + LUTf cdcurve(65536, 0); + LUTf mapcurve(65536, 0); LUTu dummy; RetinextransmissionCurve dehatransmissionCurve; RetinexgaintransmissionCurve dehagaintransmissionCurve; @@ -233,39 +239,39 @@ private: bool mapcontlutili = false; bool useHsl = false; // multi_array2D conversionBuffer(1, 1); - multi_array2D conversionBuffer (1, 1); - imgsrc->retinexPrepareBuffers (params.icm, params.retinex, conversionBuffer, dummy); - imgsrc->retinexPrepareCurves (params.retinex, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, dehacontlutili, mapcontlutili, useHsl, dummy, dummy ); + multi_array2D conversionBuffer(1, 1); + imgsrc->retinexPrepareBuffers(params.icm, params.retinex, conversionBuffer, dummy); + imgsrc->retinexPrepareCurves(params.retinex, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, dehacontlutili, mapcontlutili, useHsl, dummy, dummy); float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; - imgsrc->retinex ( params.icm, params.retinex, params.toneCurve, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, conversionBuffer, dehacontlutili, mapcontlutili, useHsl, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, dummy); + imgsrc->retinex(params.icm, params.retinex, params.toneCurve, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, conversionBuffer, dehacontlutili, mapcontlutili, useHsl, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, dummy); } if (pl) { - pl->setProgress (0.40); + pl->setProgress(0.40); } - imgsrc->HLRecovery_Global ( params.toneCurve ); + imgsrc->HLRecovery_Global(params.toneCurve); if (pl) { - pl->setProgress (0.45); + pl->setProgress(0.45); } // set the color temperature - currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method); + currWB = ColorTemp(params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method); if (!params.wb.enabled) { currWB = ColorTemp(); } else if (params.wb.method == "Camera") { - currWB = imgsrc->getWB (); + currWB = imgsrc->getWB(); } else if (params.wb.method == "Auto") { double rm, gm, bm; - imgsrc->getAutoWBMultipliers (rm, gm, bm); - currWB.update (rm, gm, bm, params.wb.equal, params.wb.tempBias); + imgsrc->getAutoWBMultipliers(rm, gm, bm); + currWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias); } calclum = nullptr ; - params.dirpyrDenoise.getCurves (noiseLCurve, noiseCCurve); + params.dirpyrDenoise.getCurves(noiseLCurve, noiseCCurve); autoNR = (float) settings->nrauto;// autoNRmax = (float) settings->nrautomax;// @@ -282,7 +288,7 @@ private: // const int tilesize = 768; // const int overlap = 96; int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip; - ipf.Tile_calc (tilesize, overlap, 2, fw, fh, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip); + ipf.Tile_calc(tilesize, overlap, 2, fw, fh, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip); int nbtl = numtiles_W * numtiles_H; if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "AUT") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "AUTO")) { @@ -335,16 +341,16 @@ private: // Imagefloat *origCropPart;//init auto noise // origCropPart = new Imagefloat (crW, crH);//allocate memory if (params.dirpyrDenoise.enabled) {//evaluate Noise - LUTf gamcurve (65536, 0); + LUTf gamcurve(65536, 0); float gam, gamthresh, gamslope; - ipf.RGB_denoise_infoGamCurve (params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope); + ipf.RGB_denoise_infoGamCurve(params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope); #ifdef _OPENMP #pragma omp parallel #endif { Imagefloat *origCropPart;//init auto noise - origCropPart = new Imagefloat (crW, crH);//allocate memory - Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves + origCropPart = new Imagefloat(crW, crH); //allocate memory + Imagefloat *provicalc = new Imagefloat((crW + 1) / 2, (crH + 1) / 2); //for denoise curves int skipP = 1; #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) nowait @@ -354,20 +360,20 @@ private: for (int hcr = 0; hcr < numtiles_H; hcr++) { int beg_tileW = wcr * tileWskip + tileWskip / 2.f - crW / 2.f; int beg_tileH = hcr * tileHskip + tileHskip / 2.f - crH / 2.f; - PreviewProps ppP (beg_tileW, beg_tileH, crW, crH, skipP); - imgsrc->getImage (currWB, tr, origCropPart, ppP, params.toneCurve, params.raw ); + PreviewProps ppP(beg_tileW, beg_tileH, crW, crH, skipP); + imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw); //baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve); // we only need image reduced to 1/4 here for (int ii = 0; ii < crH; ii += 2) { for (int jj = 0; jj < crW; jj += 2) { - provicalc->r (ii >> 1, jj >> 1) = origCropPart->r (ii, jj); - provicalc->g (ii >> 1, jj >> 1) = origCropPart->g (ii, jj); - provicalc->b (ii >> 1, jj >> 1) = origCropPart->b (ii, jj); + provicalc->r(ii >> 1, jj >> 1) = origCropPart->r(ii, jj); + provicalc->g(ii >> 1, jj >> 1) = origCropPart->g(ii, jj); + provicalc->b(ii >> 1, jj >> 1) = origCropPart->b(ii, jj); } } - imgsrc->convertColorSpace (provicalc, params.icm, currWB); //for denoise luminance curve + imgsrc->convertColorSpace(provicalc, params.icm, currWB); //for denoise luminance curve float maxr = 0.f; float maxb = 0.f; float pondcorrec = 1.0f; @@ -380,11 +386,11 @@ private: maxblueaut = 0.f; chromina = 0.f; sigma = 0.f; - ipf.RGB_denoise_info (origCropPart, provicalc, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope, params.dirpyrDenoise, imgsrc->getDirPyrDenoiseExpComp(), chaut, Nb, redaut, blueaut, maxredaut, maxblueaut, minredaut, minblueaut, chromina, sigma, lumema, sigma_L, redyel, skinc, nsknc); + ipf.RGB_denoise_info(origCropPart, provicalc, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope, params.dirpyrDenoise, imgsrc->getDirPyrDenoiseExpComp(), chaut, Nb, redaut, blueaut, maxredaut, maxblueaut, minredaut, minblueaut, chromina, sigma, lumema, sigma_L, redyel, skinc, nsknc); float multip = 1.f; float adjustr = 1.f; - if (params.icm.workingProfile == "ProPhoto") { + if (params.icm.workingProfile == "ProPhoto") { adjustr = 1.f; // } else if (params.icm.workingProfile == "Adobe RGB") { adjustr = 1.f / 1.3f; @@ -406,11 +412,11 @@ private: multip = 2.f; //take into account gamma for TIF / JPG approximate value...not good for gamma=1 } - float maxmax = max (maxredaut, maxblueaut); + float maxmax = max(maxredaut, maxblueaut); float delta; int mode = 2; int lissage = settings->leveldnliss; - ipf.calcautodn_info (chaut, delta, Nb, levaut, maxmax, lumema, chromina, mode, lissage, redyel, skinc, nsknc); + ipf.calcautodn_info(chaut, delta, Nb, levaut, maxmax, lumema, chromina, mode, lissage, redyel, skinc, nsknc); // printf("PROCESS cha=%f red=%f bl=%f redM=%f bluM=%f chrom=%f sigm=%f lum=%f sigL=%f\n",chaut,redaut,blueaut, maxredaut, maxblueaut, chromina, sigma, lumema, sigma_L); if (maxredaut > maxblueaut) { @@ -509,7 +515,7 @@ private: if (settings->verbose) { t2pone.set(); - printf ("Info denoise ponderated performed in %d usec:\n", t2pone.etime (t1pone)); + printf("Info denoise ponderated performed in %d usec:\n", t2pone.etime(t1pone)); } } @@ -550,9 +556,9 @@ private: } if (params.dirpyrDenoise.enabled) {//evaluate Noise - LUTf gamcurve (65536, 0); + LUTf gamcurve(65536, 0); float gam, gamthresh, gamslope; - ipf.RGB_denoise_infoGamCurve (params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope); + ipf.RGB_denoise_infoGamCurve(params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope); int Nb[9]; int coordW[3];//coordinate of part of image to measure noise int coordH[3]; @@ -569,8 +575,8 @@ private: #endif { Imagefloat *origCropPart;//init auto noise - origCropPart = new Imagefloat (crW, crH);//allocate memory - Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves + origCropPart = new Imagefloat(crW, crH); //allocate memory + Imagefloat *provicalc = new Imagefloat((crW + 1) / 2, (crH + 1) / 2); //for denoise curves #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) nowait @@ -578,24 +584,24 @@ private: for (int wcr = 0; wcr <= 2; wcr++) { for (int hcr = 0; hcr <= 2; hcr++) { - PreviewProps ppP (coordW[wcr], coordH[hcr], crW, crH, 1); - imgsrc->getImage (currWB, tr, origCropPart, ppP, params.toneCurve, params.raw); + PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1); + imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw); //baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve); // we only need image reduced to 1/4 here for (int ii = 0; ii < crH; ii += 2) { for (int jj = 0; jj < crW; jj += 2) { - provicalc->r (ii >> 1, jj >> 1) = origCropPart->r (ii, jj); - provicalc->g (ii >> 1, jj >> 1) = origCropPart->g (ii, jj); - provicalc->b (ii >> 1, jj >> 1) = origCropPart->b (ii, jj); + provicalc->r(ii >> 1, jj >> 1) = origCropPart->r(ii, jj); + provicalc->g(ii >> 1, jj >> 1) = origCropPart->g(ii, jj); + provicalc->b(ii >> 1, jj >> 1) = origCropPart->b(ii, jj); } } - imgsrc->convertColorSpace (provicalc, params.icm, currWB); //for denoise luminance curve + imgsrc->convertColorSpace(provicalc, params.icm, currWB); //for denoise luminance curve int nb = 0; float chaut = 0.f, redaut = 0.f, blueaut = 0.f, maxredaut = 0.f, maxblueaut = 0.f, minredaut = 0.f, minblueaut = 0.f, chromina = 0.f, sigma = 0.f, lumema = 0.f, sigma_L = 0.f, redyel = 0.f, skinc = 0.f, nsknc = 0.f; - ipf.RGB_denoise_info (origCropPart, provicalc, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope, params.dirpyrDenoise, imgsrc->getDirPyrDenoiseExpComp(), chaut, nb, redaut, blueaut, maxredaut, maxblueaut, minredaut, minblueaut, chromina, sigma, lumema, sigma_L, redyel, skinc, nsknc); + ipf.RGB_denoise_info(origCropPart, provicalc, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope, params.dirpyrDenoise, imgsrc->getDirPyrDenoiseExpComp(), chaut, nb, redaut, blueaut, maxredaut, maxblueaut, minredaut, minblueaut, chromina, sigma, lumema, sigma_L, redyel, skinc, nsknc); Nb[hcr * 3 + wcr] = nb; ch_M[hcr * 3 + wcr] = chaut; max_r[hcr * 3 + wcr] = maxredaut; @@ -631,7 +637,7 @@ private: float MinRMoy = 0.f; float MinBMoy = 0.f; - if (params.icm.workingProfile == "ProPhoto") { + if (params.icm.workingProfile == "ProPhoto") { adjustr = 1.f; } else if (params.icm.workingProfile == "Adobe RGB") { adjustr = 1.f / 1.3f; @@ -658,8 +664,8 @@ private: int lissage = settings->leveldnliss; for (int k = 0; k < 9; k++) { - float maxmax = max (max_r[k], max_b[k]); - ipf.calcautodn_info (ch_M[k], delta[k], Nb[k], levaut, maxmax, lumL[k], chromC[k], mode, lissage, ry[k], sk[k], pcsk[k] ); + float maxmax = max(max_r[k], max_b[k]); + ipf.calcautodn_info(ch_M[k], delta[k], Nb[k], levaut, maxmax, lumL[k], chromC[k], mode, lissage, ry[k], sk[k], pcsk[k]); // printf("ch_M=%f delta=%f\n",ch_M[k], delta[k]); } @@ -732,17 +738,17 @@ private: if (settings->verbose) { t2aue.set(); - printf ("Info denoise auto performed in %d usec:\n", t2aue.etime (t1aue)); + printf("Info denoise auto performed in %d usec:\n", t2aue.etime(t1aue)); } //end evaluate noise } - baseImg = new Imagefloat (fw, fh); - imgsrc->getImage (currWB, tr, baseImg, pp, params.toneCurve, params.raw); + baseImg = new Imagefloat(fw, fh); + imgsrc->getImage(currWB, tr, baseImg, pp, params.toneCurve, params.raw); if (pl) { - pl->setProgress (0.50); + pl->setProgress(0.50); } // LUTf Noisecurve (65536,0); @@ -758,9 +764,10 @@ private: if (params.toneCurve.autoexp) { LUTu aehist; int aehistcompr; - imgsrc->getAutoExpHistogram (aehist, aehistcompr); - ipf.getAutoExp (aehist, aehistcompr, params.toneCurve.clip, expcomp, bright, contr, black, hlcompr, hlcomprthresh); + imgsrc->getAutoExpHistogram(aehist, aehistcompr); + ipf.getAutoExp(aehist, aehistcompr, params.toneCurve.clip, expcomp, bright, contr, black, hlcompr, hlcomprthresh); } + if (params.toneCurve.histmatching) { if (!params.toneCurve.fromHistMatching) { imgsrc->getAutoMatchedToneCurve(params.icm, params.toneCurve.curve); @@ -776,7 +783,7 @@ private: params.toneCurve.brightness = 0; params.toneCurve.contrast = 0; params.toneCurve.black = 0; - } + } // at this stage, we can flush the raw data to free up quite an important amount of memory // commented out because it makes the application crash when batch processing... @@ -815,22 +822,22 @@ private: noiseLCurve.Reset(); } - if (denoiseParams.enabled && (noiseLCurve || noiseCCurve )) { + if (denoiseParams.enabled && (noiseLCurve || noiseCCurve)) { // we only need image reduced to 1/4 here - calclum = new Imagefloat ((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve + calclum = new Imagefloat((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve #ifdef _OPENMP #pragma omp parallel for #endif for (int ii = 0; ii < fh; ii += 2) { for (int jj = 0; jj < fw; jj += 2) { - calclum->r (ii >> 1, jj >> 1) = baseImg->r (ii, jj); - calclum->g (ii >> 1, jj >> 1) = baseImg->g (ii, jj); - calclum->b (ii >> 1, jj >> 1) = baseImg->b (ii, jj); + calclum->r(ii >> 1, jj >> 1) = baseImg->r(ii, jj); + calclum->g(ii >> 1, jj >> 1) = baseImg->g(ii, jj); + calclum->b(ii >> 1, jj >> 1) = baseImg->b(ii, jj); } } - imgsrc->convertColorSpace (calclum, params.icm, currWB); + imgsrc->convertColorSpace(calclum, params.icm, currWB); } if (denoiseParams.enabled) { @@ -839,7 +846,7 @@ private: // ipf.RGB_denoise(baseImg, baseImg, calclum, imgsrc->isRAW(), denoiseParams, params.defringe, imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, lldenoiseutili); float nresi, highresi; int kall = 2; - ipf.RGB_denoise (kall, baseImg, baseImg, calclum, ch_M, max_r, max_b, imgsrc->isRAW(), denoiseParams, imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, noiseCCurve, nresi, highresi); + ipf.RGB_denoise(kall, baseImg, baseImg, calclum, ch_M, max_r, max_b, imgsrc->isRAW(), denoiseParams, imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, noiseCCurve, nresi, highresi); } @@ -862,12 +869,12 @@ private: //ImProcFunctions ipf (¶ms, true); ImProcFunctions &ipf = * (ipf_p.get()); - imgsrc->convertColorSpace (baseImg, params.icm, currWB); + imgsrc->convertColorSpace(baseImg, params.icm, currWB); // perform first analysis - hist16 (65536); + hist16(65536); - ipf.firstAnalysis (baseImg, params, hist16); + ipf.firstAnalysis(baseImg, params, hist16); ipf.dehaze(baseImg); ipf.ToneMapFattal02(baseImg); @@ -875,14 +882,17 @@ private: // perform transform (excepted resizing) if (ipf.needsTransform()) { Imagefloat* trImg = nullptr; + if (ipf.needsLuminanceOnly()) { trImg = baseImg; } else { - trImg = new Imagefloat (fw, fh); + trImg = new Imagefloat(fw, fh); } - ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, - imgsrc->getMetaData(), imgsrc->getRotateDegree(), true); - if(trImg != baseImg) { + + ipf.transform(baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, + imgsrc->getMetaData(), imgsrc->getRotateDegree(), true); + + if (trImg != baseImg) { delete baseImg; baseImg = trImg; } @@ -898,10 +908,10 @@ private: if (params.dirpyrequalizer.cbdlMethod == "bef" && params.dirpyrequalizer.enabled && !params.colorappearance.enabled) { const int W = baseImg->getWidth(); const int H = baseImg->getHeight(); - LabImage labcbdl (W, H); - ipf.rgb2lab (*baseImg, labcbdl, params.icm.workingProfile); - ipf.dirpyrequalizer (&labcbdl, 1); - ipf.lab2rgb (labcbdl, *baseImg, params.icm.workingProfile); + LabImage labcbdl(W, H); + ipf.rgb2lab(*baseImg, labcbdl, params.icm.workingProfile); + ipf.dirpyrequalizer(&labcbdl, 1); + ipf.lab2rgb(labcbdl, *baseImg, params.icm.workingProfile); } //gamma TRC working @@ -921,45 +931,45 @@ private: // RGB processing - curve1 (65536); - curve2 (65536); - curve (65536, 0); - satcurve (65536, 0); - lhskcurve (65536, 0); - lumacurve (32770, 0); // lumacurve[32768] and lumacurve[32769] will be set to 32768 and 32769 later to allow linear interpolation - clcurve (65536, 0); - wavclCurve (65536, 0); + curve1(65536); + curve2(65536); + curve(65536, 0); + satcurve(65536, 0); + lhskcurve(65536, 0); + lumacurve(32770, 0); // lumacurve[32768] and lumacurve[32769] will be set to 32768 and 32769 later to allow linear interpolation + clcurve(65536, 0); + wavclCurve(65536, 0); //if(params.blackwhite.enabled) params.toneCurve.hrenabled=false; - CurveFactory::complexCurve (expcomp, black / 65535.0, hlcompr, hlcomprthresh, params.toneCurve.shcompr, bright, contr, - params.toneCurve.curve, params.toneCurve.curve2, - hist16, curve1, curve2, curve, dummy, customToneCurve1, customToneCurve2 ); + CurveFactory::complexCurve(expcomp, black / 65535.0, hlcompr, hlcomprthresh, params.toneCurve.shcompr, bright, contr, + params.toneCurve.curve, params.toneCurve.curve2, + hist16, curve1, curve2, curve, dummy, customToneCurve1, customToneCurve2); - CurveFactory::RGBCurve (params.rgbCurves.rcurve, rCurve, 1); - CurveFactory::RGBCurve (params.rgbCurves.gcurve, gCurve, 1); - CurveFactory::RGBCurve (params.rgbCurves.bcurve, bCurve, 1); + CurveFactory::RGBCurve(params.rgbCurves.rcurve, rCurve, 1); + CurveFactory::RGBCurve(params.rgbCurves.gcurve, gCurve, 1); + CurveFactory::RGBCurve(params.rgbCurves.bcurve, bCurve, 1); bool opautili = false; if (params.colorToning.enabled) { - TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix (params.icm.workingProfile); + TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(params.icm.workingProfile); double wp[3][3] = { {wprof[0][0], wprof[0][1], wprof[0][2]}, {wprof[1][0], wprof[1][1], wprof[1][2]}, {wprof[2][0], wprof[2][1], wprof[2][2]} }; - params.colorToning.getCurves (ctColorCurve, ctOpacityCurve, wp, opautili); - clToningcurve (65536, 0); - CurveFactory::curveToning (params.colorToning.clcurve, clToningcurve, 1); - cl2Toningcurve (65536, 0); - CurveFactory::curveToning (params.colorToning.cl2curve, cl2Toningcurve, 1); + params.colorToning.getCurves(ctColorCurve, ctOpacityCurve, wp, opautili); + clToningcurve(65536, 0); + CurveFactory::curveToning(params.colorToning.clcurve, clToningcurve, 1); + cl2Toningcurve(65536, 0); + CurveFactory::curveToning(params.colorToning.cl2curve, cl2Toningcurve, 1); } - labView = new LabImage (fw, fh); + labView = new LabImage(fw, fh); if (params.blackwhite.enabled) { - CurveFactory::curveBW (params.blackwhite.beforeCurve, params.blackwhite.afterCurve, hist16, dummy, customToneCurvebw1, customToneCurvebw2, 1); + CurveFactory::curveBW(params.blackwhite.beforeCurve, params.blackwhite.afterCurve, hist16, dummy, customToneCurvebw1, customToneCurvebw2, 1); } double rrm, ggm, bbm; @@ -970,7 +980,7 @@ private: if (params.colorToning.enabled && params.colorToning.autosat && params.colorToning.method != "LabGrid") { //for colortoning evaluation of saturation settings float moyS = 0.f; float eqty = 0.f; - ipf.moyeqt (baseImg, moyS, eqty);//return image : mean saturation and standard dev of saturation + ipf.moyeqt(baseImg, moyS, eqty); //return image : mean saturation and standard dev of saturation float satp = ((moyS + 1.5f * eqty) - 0.3f) / 0.7f; //1.5 sigma ==> 93% pixels with high saturation -0.3 / 0.7 convert to Hombre scale if (satp >= 0.92f) { @@ -988,18 +998,18 @@ private: autor = -9000.f; // This will ask to compute the "auto" values for the B&W tool (have to be inferior to -5000) DCPProfile::ApplyState as; - DCPProfile *dcpProf = imgsrc->getDCP (params.icm, as); + DCPProfile *dcpProf = imgsrc->getDCP(params.icm, as); LUTu histToneCurve; - ipf.rgbProc (baseImg, labView, nullptr, curve1, curve2, curve, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve, options.chunkSizeRGB, options.measure); + ipf.rgbProc(baseImg, labView, nullptr, curve1, curve2, curve, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve, options.chunkSizeRGB, options.measure); if (settings->verbose) { - printf ("Output image / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", autor, autog, autob); + printf("Output image / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", autor, autog, autob); } // if clut was used and size of clut cache == 1 we free the memory used by the clutstore (default clut cache size = 1 for 32 bit OS) - if ( params.filmSimulation.enabled && !params.filmSimulation.clutFilename.empty() && options.clutCacheSize == 1) { + if (params.filmSimulation.enabled && !params.filmSimulation.clutFilename.empty() && options.clutCacheSize == 1) { CLUTStore::getInstance().clearCache(); } @@ -1018,7 +1028,7 @@ private: baseImg = nullptr; if (pl) { - pl->setProgress (0.55); + pl->setProgress(0.55); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1033,7 +1043,7 @@ private: #pragma omp parallel #endif { - LUTu hist16thr (hist16.getSize()); // one temporary lookup table per thread + LUTu hist16thr(hist16.getSize()); // one temporary lookup table per thread hist16thr.clear(); #ifdef _OPENMP #pragma omp for schedule(static) nowait @@ -1041,7 +1051,7 @@ private: for (int i = 0; i < fh; i++) for (int j = 0; j < fw; j++) { - hist16thr[ (int) ((labView->L[i][j]))]++; + hist16thr[(int)((labView->L[i][j]))]++; } #ifdef _OPENMP @@ -1054,77 +1064,174 @@ private: } bool utili; - CurveFactory::complexLCurve (params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve, hist16, lumacurve, dummy, 1, utili); + CurveFactory::complexLCurve(params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve, hist16, lumacurve, dummy, 1, utili); bool clcutili; - CurveFactory::curveCL (clcutili, params.labCurve.clcurve, clcurve, 1); + CurveFactory::curveCL(clcutili, params.labCurve.clcurve, clcurve, 1); bool ccutili, cclutili; - CurveFactory::complexsgnCurve (autili, butili, ccutili, cclutili, params.labCurve.acurve, params.labCurve.bcurve, params.labCurve.cccurve, - params.labCurve.lccurve, curve1, curve2, satcurve, lhskcurve, 1); + CurveFactory::complexsgnCurve(autili, butili, ccutili, cclutili, params.labCurve.acurve, params.labCurve.bcurve, params.labCurve.cccurve, + params.labCurve.lccurve, curve1, curve2, satcurve, lhskcurve, 1); - ipf.chromiLuminanceCurve (nullptr, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy); + ipf.chromiLuminanceCurve(nullptr, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy); if ((params.colorappearance.enabled && !params.colorappearance.tonecie) || (!params.colorappearance.enabled)) { - ipf.EPDToneMap (labView, 5, 1); + ipf.EPDToneMap(labView, 5, 1); } - ipf.vibrance (labView); + ipf.vibrance(labView); ipf.labColorCorrectionRegions(labView); if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) { - ipf.impulsedenoise (labView); + ipf.impulsedenoise(labView); } // for all treatments Defringe, Sharpening, Contrast detail ,Microcontrast they are activated if "CIECAM" function are disabled if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) { - ipf.defringe (labView); + ipf.defringe(labView); } if (params.sharpenEdge.enabled) { - ipf.MLsharpen (labView); + ipf.MLsharpen(labView); } if (params.sharpenMicro.enabled) { - if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) { - ipf.MLmicrocontrast (labView); //!params.colorappearance.sharpcie + if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) { + ipf.MLmicrocontrast(labView); //!params.colorappearance.sharpcie } } if (((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) && params.sharpening.enabled) { - ipf.sharpening (labView, params.sharpening); + ipf.sharpening(labView, params.sharpening); } - WaveletParams WaveParams = params.wavelet; - WavCurve wavCLVCurve; - WavOpacityCurveRG waOpacityCurveRG; - WavOpacityCurveBY waOpacityCurveBY; - WavOpacityCurveW waOpacityCurveW; - WavOpacityCurveWL waOpacityCurveWL; - - params.wavelet.getCurves (wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL ); // directional pyramid wavelet if (params.dirpyrequalizer.cbdlMethod == "aft") { if ((params.colorappearance.enabled && !settings->autocielab) || !params.colorappearance.enabled) { - ipf.dirpyrequalizer (labView, 1); //TODO: this is the luminance tonecurve, not the RGB one + ipf.dirpyrequalizer(labView, 1); //TODO: this is the luminance tonecurve, not the RGB one } } - bool wavcontlutili = false; + if ((params.wavelet.enabled)) { + LabImage *unshar = nullptr; + Glib::ustring provis; - CurveFactory::curveWavContL (wavcontlutili, params.wavelet.wavclCurve, wavclCurve,/* hist16C, dummy,*/ 1); + bool wavcontlutili = false; + WaveletParams WaveParams = params.wavelet; + WavCurve wavCLVCurve; + WavOpacityCurveRG waOpacityCurveRG; + WavOpacityCurveBY waOpacityCurveBY; + WavOpacityCurveW waOpacityCurveW; + WavOpacityCurveWL waOpacityCurveWL; + LabImage *provradius = nullptr; - if (params.wavelet.enabled) { - ipf.ip_wavelet (labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); + if (WaveParams.softrad > 0.f) { + provradius = new LabImage(fw, fh); + provradius->CopyFrom(labView); + } + + params.wavelet.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); + + CurveFactory::curveWavContL(wavcontlutili, params.wavelet.wavclCurve, wavclCurve,/* hist16C, dummy,*/ 1); + + if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + unshar = new LabImage(fw, fh); + provis = params.wavelet.CLmethod; + params.wavelet.CLmethod = "all"; + ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); + unshar->CopyFrom(labView); + params.wavelet.CLmethod = provis; + } + + ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); + + if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + float mL = (float)(WaveParams.mergeL / 100.f); + float mC = (float)(WaveParams.mergeC / 100.f); + float mL0; + float mC0; + + if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { + mL0 = mC0 = 0.f; + mL = -mL; + mC = -mC; + } else if (WaveParams.CLmethod == "sup" && WaveParams.Backmethod == "resid") { + mL0 = mL; + mC0 = mC; + } else { + mL0 = mL = mC0 = mC = 0.f; + } + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int x = 0; x < fh; x++) + for (int y = 0; y < fw; y++) { + labView->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * labView->L[x][y]; + labView->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * labView->a[x][y]; + labView->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * labView->b[x][y]; + } + + delete unshar; + unshar = NULL; + + if (WaveParams.softrad > 0.f) { + array2D ble(fw, fh); + array2D guid(fw, fh); + /* + #ifdef _OPENMP + const int numThreads = omp_get_max_threads(); + #endif + + bool multiTh = false; + + if (numThreads > 1) { + multiTh = true; + } + */ +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < fh; ir++) + for (int jr = 0; jr < fw; jr++) { + ble[ir][jr] = (labView->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + + float blur = 10.f / 1 * (0.1f + 0.8f * WaveParams.softrad); + // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, false); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < fh; ir++) + for (int jr = 0; jr < fw; jr++) { + labView->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; + } + } + + if (WaveParams.softrad > 0.f) { + delete provradius; + provradius = NULL; + } + + } + + wavCLVCurve.Reset(); } - wavCLVCurve.Reset(); - ipf.softLight(labView); //Colorappearance and tone-mapping associated @@ -1136,9 +1243,9 @@ private: f_h = fh; } - CieImage *cieView = new CieImage (f_w, (f_h)); + CieImage *cieView = new CieImage(f_w, (f_h)); - CurveFactory::curveLightBrightColor ( + CurveFactory::curveLightBrightColor( params.colorappearance.curve, params.colorappearance.curve2, params.colorappearance.curve3, @@ -1152,24 +1259,26 @@ private: if (params.colorappearance.enabled) { double adap; int imgNum = 0; + if (imgsrc->getSensorType() == ST_BAYER) { imgNum = params.raw.bayersensor.imageNum; } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) { //imgNum = params.raw.xtranssensor.imageNum; } - float fnum = imgsrc->getMetaData()->getFNumber (imgNum); // F number - float fiso = imgsrc->getMetaData()->getISOSpeed (imgNum) ; // ISO - float fspeed = imgsrc->getMetaData()->getShutterSpeed (imgNum) ; //speed - float fcomp = imgsrc->getMetaData()->getExpComp (imgNum); //compensation + - + + float fnum = imgsrc->getMetaData()->getFNumber(imgNum); // F number + float fiso = imgsrc->getMetaData()->getISOSpeed(imgNum) ; // ISO + float fspeed = imgsrc->getMetaData()->getShutterSpeed(imgNum) ; //speed + float fcomp = imgsrc->getMetaData()->getExpComp(imgNum); //compensation + - if (fnum < 0.3f || fiso < 5.f || fspeed < 0.00001f) { adap = 2000.; }//if no exif data or wrong else { - float E_V = fcomp + log2 ((fnum * fnum) / fspeed / (fiso / 100.f)); + float E_V = fcomp + log2((fnum * fnum) / fspeed / (fiso / 100.f)); E_V += params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV - E_V += log2 (params.raw.expos); // exposure raw white point ; log2 ==> linear to EV - adap = powf (2.f, E_V - 3.f); //cd / m2 + E_V += log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV + adap = powf(2.f, E_V - 3.f); //cd / m2 } LUTf CAMBrightCurveJ; @@ -1177,7 +1286,7 @@ private: float CAMMean = NAN; float d, dj, yb; - ipf.ciecam_02float (cieView, float (adap), 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, d, dj, yb, 1); + ipf.ciecam_02float(cieView, float (adap), 1, 2, labView, ¶ms, customColCurve1, customColCurve2, customColCurve3, dummy, dummy, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, true, d, dj, yb, 1); } delete cieView; @@ -1191,11 +1300,11 @@ private: //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if (pl) { - pl->setProgress (0.60); + pl->setProgress(0.60); } int imw, imh; - double tmpScale = ipf.resizeScale (¶ms, fw, fh, imw, imh); + double tmpScale = ipf.resizeScale(¶ms, fw, fh, imw, imh); bool labResize = params.resize.enabled && params.resize.method != "Nearest" && (tmpScale != 1.0 || params.prsharpening.enabled); LabImage *tmplab; @@ -1209,7 +1318,7 @@ private: ch = params.crop.h; if (labResize) { // crop lab data - tmplab = new LabImage (cw, ch); + tmplab = new LabImage(cw, ch); for (int row = 0; row < ch; row++) { for (int col = 0; col < cw; col++) { @@ -1228,13 +1337,14 @@ private: if (labResize) { // resize lab data if ((labView->W != imw || labView->H != imh) && - (params.resize.allowUpscaling || (labView->W >= imw && labView->H >= imh))) { + (params.resize.allowUpscaling || (labView->W >= imw && labView->H >= imh))) { // resize image - tmplab = new LabImage (imw, imh); - ipf.Lanczos (labView, tmplab, tmpScale); + tmplab = new LabImage(imw, imh); + ipf.Lanczos(labView, tmplab, tmpScale); delete labView; labView = tmplab; } + cw = labView->W; ch = labView->H; @@ -1244,7 +1354,8 @@ private: labView->L[i][j] = labView->L[i][j] < 0.f ? 0.f : labView->L[i][j]; } } - ipf.sharpening (labView, params.prsharpening); + + ipf.sharpening(labView, params.prsharpening); } } @@ -1259,10 +1370,10 @@ private: // if Default gamma mode: we use the profile selected in the "Output profile" combobox; // gamma come from the selected profile, otherwise it comes from "Free gamma" tool - Imagefloat* readyImg = ipf.lab2rgbOut (labView, cx, cy, cw, ch, params.icm); + Imagefloat* readyImg = ipf.lab2rgbOut(labView, cx, cy, cw, ch, params.icm); if (settings->verbose) { - printf ("Output profile_: \"%s\"\n", params.icm.outputProfile.c_str()); + printf("Output profile_: \"%s\"\n", params.icm.outputProfile.c_str()); } delete labView; @@ -1272,42 +1383,44 @@ private: if (bwonly) { //force BW r=g=b if (settings->verbose) { - printf ("Force BW\n"); + printf("Force BW\n"); } for (int ccw = 0; ccw < cw; ccw++) { for (int cch = 0; cch < ch; cch++) { - readyImg->r (cch, ccw) = readyImg->g (cch, ccw); - readyImg->b (cch, ccw) = readyImg->g (cch, ccw); + readyImg->r(cch, ccw) = readyImg->g(cch, ccw); + readyImg->b(cch, ccw) = readyImg->g(cch, ccw); } } } if (pl) { - pl->setProgress (0.70); + pl->setProgress(0.70); } if (tmpScale != 1.0 && params.resize.method == "Nearest" && - (params.resize.allowUpscaling || (readyImg->getWidth() >= imw && readyImg->getHeight() >= imh))) { // resize rgb data (gamma applied) - Imagefloat* tempImage = new Imagefloat (imw, imh); - ipf.resize (readyImg, tempImage, tmpScale); + (params.resize.allowUpscaling || (readyImg->getWidth() >= imw && readyImg->getHeight() >= imh))) { // resize rgb data (gamma applied) + Imagefloat* tempImage = new Imagefloat(imw, imh); + ipf.resize(readyImg, tempImage, tmpScale); delete readyImg; readyImg = tempImage; } switch (params.metadata.mode) { - case MetaDataParams::TUNNEL: - // Sending back the whole first root, which won't necessarily be the selected frame number - // and may contain subframe depending on initial raw's hierarchy - readyImg->setMetadata (ii->getMetaData()->getRootExifData ()); - break; - case MetaDataParams::EDIT: - // ask for the correct frame number, but may contain subframe depending on initial raw's hierarchy - readyImg->setMetadata (ii->getMetaData()->getBestExifData(imgsrc, ¶ms.raw), params.exif, params.iptc); - break; - default: // case MetaDataParams::STRIP - // nothing to do - break; + case MetaDataParams::TUNNEL: + // Sending back the whole first root, which won't necessarily be the selected frame number + // and may contain subframe depending on initial raw's hierarchy + readyImg->setMetadata(ii->getMetaData()->getRootExifData()); + break; + + case MetaDataParams::EDIT: + // ask for the correct frame number, but may contain subframe depending on initial raw's hierarchy + readyImg->setMetadata(ii->getMetaData()->getBestExifData(imgsrc, ¶ms.raw), params.exif, params.iptc); + break; + + default: // case MetaDataParams::STRIP + // nothing to do + break; } @@ -1315,8 +1428,8 @@ private: if (customGamma) { if (!useLCMS) { // use corrected sRGB profile in order to apply a good TRC if present, otherwise use LCMS2 profile generated by lab2rgb16 w/ gamma - ProfileContent pc (jprof); - readyImg->setOutputProfile (pc.getData().c_str(), pc.getData().size()); + ProfileContent pc(jprof); + readyImg->setOutputProfile(pc.getData().c_str(), pc.getData().size()); } } else { // use the selected output profile if present, otherwise use LCMS2 profile generate by lab2rgb16 w/ gamma @@ -1324,23 +1437,23 @@ private: if (params.icm.outputProfile != "" && params.icm.outputProfile != ColorManagementParams::NoICMString) { // if ICCStore::getInstance()->getProfile send back an object, then ICCStore::getInstance()->getContent will do too - cmsHPROFILE jprof = ICCStore::getInstance()->getProfile (params.icm.outputProfile); //get outProfile + cmsHPROFILE jprof = ICCStore::getInstance()->getProfile(params.icm.outputProfile); //get outProfile if (jprof == nullptr) { if (settings->verbose) { - printf ("\"%s\" ICC output profile not found!\n - use LCMS2 substitution\n", params.icm.outputProfile.c_str()); + printf("\"%s\" ICC output profile not found!\n - use LCMS2 substitution\n", params.icm.outputProfile.c_str()); } } else { if (settings->verbose) { - printf ("Using \"%s\" output profile\n", params.icm.outputProfile.c_str()); + printf("Using \"%s\" output profile\n", params.icm.outputProfile.c_str()); } - ProfileContent pc = ICCStore::getInstance()->getContent (params.icm.outputProfile); - readyImg->setOutputProfile (pc.getData().c_str(), pc.getData().size()); + ProfileContent pc = ICCStore::getInstance()->getContent(params.icm.outputProfile); + readyImg->setOutputProfile(pc.getData().c_str(), pc.getData().size()); } } else { // No ICM - readyImg->setOutputProfile (nullptr, 0); + readyImg->setOutputProfile(nullptr, 0); } } @@ -1349,13 +1462,13 @@ private: // printf("Total:- %d usec\n", t2.etime(t1)); if (!job->initialImage) { - ii->decreaseRef (); + ii->decreaseRef(); } delete job; if (pl) { - pl->setProgress (0.75); + pl->setProgress(0.75); } /* curve1.reset();curve2.reset(); @@ -1379,10 +1492,10 @@ private: ImProcFunctions &ipf = * (ipf_p.get()); int imw, imh; - double scale_factor = ipf.resizeScale (¶ms, fw, fh, imw, imh); + double scale_factor = ipf.resizeScale(¶ms, fw, fh, imw, imh); - std::unique_ptr tmplab (new LabImage (fw, fh)); - ipf.rgb2lab (*baseImg, *tmplab, params.icm.workingProfile); + std::unique_ptr tmplab(new LabImage(fw, fh)); + ipf.rgb2lab(*baseImg, *tmplab, params.icm.workingProfile); if (params.crop.enabled) { int cx = params.crop.x; @@ -1390,7 +1503,7 @@ private: int cw = params.crop.w; int ch = params.crop.h; - std::unique_ptr cropped (new LabImage (cw, ch)); + std::unique_ptr cropped(new LabImage(cw, ch)); for (int row = 0; row < ch; row++) { for (int col = 0; col < cw; col++) { @@ -1400,29 +1513,29 @@ private: } } - tmplab = std::move (cropped); + tmplab = std::move(cropped); } - assert (params.resize.enabled); + assert(params.resize.enabled); // resize image if (params.resize.allowUpscaling || (imw <= fw && imh <= fh)) { - std::unique_ptr resized (new LabImage (imw, imh)); - ipf.Lanczos (tmplab.get(), resized.get(), scale_factor); - tmplab = std::move (resized); + std::unique_ptr resized(new LabImage(imw, imh)); + ipf.Lanczos(tmplab.get(), resized.get(), scale_factor); + tmplab = std::move(resized); } - adjust_procparams (scale_factor); + adjust_procparams(scale_factor); fw = imw; fh = imh; delete baseImg; - baseImg = new Imagefloat (fw, fh); - ipf.lab2rgb (*tmplab, *baseImg, params.icm.workingProfile); + baseImg = new Imagefloat(fw, fh); + ipf.lab2rgb(*tmplab, *baseImg, params.icm.workingProfile); } - void adjust_procparams (double scale_factor) + void adjust_procparams(double scale_factor) { procparams::ProcParams ¶ms = job->pparams; procparams::ProcParams defaultparams; @@ -1453,13 +1566,13 @@ private: lcurve[i] *= min(noise_factor /* * scale_factor*/, 1.0); } - noiseLCurve.Set (lcurve); + noiseLCurve.Set(lcurve); const char *medmethods[] = { "soft", "33", "55soft", "55", "77", "99" }; if (params.dirpyrDenoise.median) { auto &key = params.dirpyrDenoise.methodmed == "RGB" ? params.dirpyrDenoise.rgbmethod : params.dirpyrDenoise.medmethod; - for (int i = 1; i < int (sizeof (medmethods) / sizeof (const char *)); ++i) { + for (int i = 1; i < int (sizeof(medmethods) / sizeof(const char *)); ++i) { if (key == medmethods[i]) { int j = i - int (1.0 / scale_factor); @@ -1477,17 +1590,17 @@ private: params.epd.scale *= scale_factor; //params.epd.edgeStopping *= scale_factor; - const double dirpyreq_scale = min (scale_factor * 1.5, 1.0); + const double dirpyreq_scale = min(scale_factor * 1.5, 1.0); for (int i = 0; i < 6; ++i) { - adjust_radius (defaultparams.dirpyrequalizer.mult[i], dirpyreq_scale, - params.dirpyrequalizer.mult[i]); + adjust_radius(defaultparams.dirpyrequalizer.mult[i], dirpyreq_scale, + params.dirpyrequalizer.mult[i]); } params.dirpyrequalizer.threshold *= scale_factor; - adjust_radius (defaultparams.defringe.radius, scale_factor, - params.defringe.radius); + adjust_radius(defaultparams.defringe.radius, scale_factor, + params.defringe.radius); params.sh.radius *= scale_factor; params.localContrast.radius *= scale_factor; @@ -1582,40 +1695,40 @@ private: } // namespace -IImagefloat* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool flush) +IImagefloat* processImage(ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool flush) { - ImageProcessor proc (pjob, errorCode, pl, flush); + ImageProcessor proc(pjob, errorCode, pl, flush); return proc(); } -void batchProcessingThread (ProcessingJob* job, BatchProcessingListener* bpl) +void batchProcessingThread(ProcessingJob* job, BatchProcessingListener* bpl) { ProcessingJob* currentJob = job; while (currentJob) { int errorCode; - IImagefloat* img = processImage (currentJob, errorCode, bpl, true); + IImagefloat* img = processImage(currentJob, errorCode, bpl, true); if (errorCode) { - bpl->error (M ("MAIN_MSG_CANNOTLOAD")); + bpl->error(M("MAIN_MSG_CANNOTLOAD")); currentJob = nullptr; } else { try { - currentJob = bpl->imageReady (img); + currentJob = bpl->imageReady(img); } catch (Glib::Exception& ex) { - bpl->error (ex.what()); + bpl->error(ex.what()); currentJob = nullptr; } } } } -void startBatchProcessing (ProcessingJob* job, BatchProcessingListener* bpl) +void startBatchProcessing(ProcessingJob* job, BatchProcessingListener* bpl) { if (bpl) { - Glib::Thread::create (sigc::bind (sigc::ptr_fun (batchProcessingThread), job, bpl), 0, true, true, Glib::THREAD_PRIORITY_LOW); + Glib::Thread::create(sigc::bind(sigc::ptr_fun(batchProcessingThread), job, bpl), 0, true, true, Glib::THREAD_PRIORITY_LOW); } } diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 2c29b4f5b..cec0a5c92 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -473,7 +473,12 @@ void ParamsEdited::set(bool v) wavelet.bluemed = v; wavelet.bluelow = v; wavelet.lipst = v; + wavelet.mergeL = v; + wavelet.mergeC = v; + wavelet.softrad = v; + wavelet.softradend = v; wavelet.Medgreinf = v; + wavelet.ushamethod = v; wavelet.avoid = v; wavelet.tmr = v; wavelet.Lmethod = v; @@ -538,6 +543,7 @@ void ParamsEdited::set(bool v) // wavelet.enaedge = v; // wavelet.enares = v; wavelet.expfinal = v; + wavelet.expclari = v; wavelet.expcontrast = v; wavelet.expchroma = v; wavelet.expedge = v; @@ -1040,7 +1046,12 @@ void ParamsEdited::initFrom(const std::vector& wavelet.greenlow = wavelet.greenlow && p.wavelet.greenlow == other.wavelet.greenlow; wavelet.bluelow = wavelet.bluelow && p.wavelet.bluelow == other.wavelet.bluelow; wavelet.lipst = wavelet.lipst && p.wavelet.lipst == other.wavelet.lipst; - wavelet.Medgreinf = wavelet.Medgreinf && p.wavelet.Medgreinf == other.wavelet.Medgreinf; + wavelet.bluehigh = wavelet.bluehigh && p.wavelet.bluehigh == other.wavelet.bluehigh; + wavelet.mergeL = wavelet.mergeL && p.wavelet.mergeL == other.wavelet.mergeL; + wavelet.mergeC = wavelet.mergeC && p.wavelet.mergeC == other.wavelet.mergeC; + wavelet.softrad = wavelet.softrad && p.wavelet.softrad == other.wavelet.softrad; + wavelet.softradend = wavelet.softradend && p.wavelet.softradend == other.wavelet.softradend; + wavelet.ushamethod = wavelet.ushamethod && p.wavelet.ushamethod == other.wavelet.ushamethod; wavelet.avoid = wavelet.avoid && p.wavelet.avoid == other.wavelet.avoid; wavelet.tmr = wavelet.tmr && p.wavelet.tmr == other.wavelet.tmr; wavelet.Lmethod = wavelet.Lmethod && p.wavelet.Lmethod == other.wavelet.Lmethod; @@ -1107,6 +1118,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.expfinal = wavelet.expfinal && p.wavelet.expfinal == other.wavelet.expfinal; wavelet.exptoning = wavelet.exptoning && p.wavelet.exptoning == other.wavelet.exptoning; wavelet.expnoise = wavelet.expnoise && p.wavelet.expnoise == other.wavelet.expnoise; + wavelet.expclari = wavelet.expclari && p.wavelet.expclari == other.wavelet.expclari; for (int i = 0; i < 9; i++) { wavelet.c[i] = wavelet.c[i] && p.wavelet.c[i] == other.wavelet.c[i]; @@ -2802,6 +2814,22 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.bluelow = mods.wavelet.bluelow; } + if (wavelet.mergeL) { + toEdit.wavelet.mergeL = mods.wavelet.mergeL; + } + + if (wavelet.mergeC) { + toEdit.wavelet.mergeC = mods.wavelet.mergeC; + } + + if (wavelet.softrad) { + toEdit.wavelet.softrad = mods.wavelet.softrad; + } + + if (wavelet.softradend) { + toEdit.wavelet.softradend = mods.wavelet.softradend; + } + if (wavelet.lipst) { toEdit.wavelet.lipst = mods.wavelet.lipst; } @@ -2810,6 +2838,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.Medgreinf = mods.wavelet.Medgreinf; } + if (wavelet.ushamethod) { + toEdit.wavelet.ushamethod = mods.wavelet.ushamethod; + } + if (wavelet.avoid) { toEdit.wavelet.avoid = mods.wavelet.avoid; } @@ -2979,6 +3011,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.expfinal = mods.wavelet.expfinal; } + if (wavelet.expclari) { + toEdit.wavelet.expclari = mods.wavelet.expclari; + } + if (wavelet.exptoning) { toEdit.wavelet.exptoning = mods.wavelet.exptoning; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 95701e01a..13d575d90 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -475,6 +475,7 @@ struct WaveletParamsEdited { bool cbenab; bool lipst; bool Medgreinf; + bool ushamethod; bool avoid; bool tmr; bool c[9]; @@ -541,6 +542,10 @@ struct WaveletParamsEdited { bool bluemed; bool greenhigh; bool bluehigh; + bool mergeL; + bool mergeC; + bool softrad; + bool softradend; bool expcontrast; bool expchroma; bool expedge; @@ -548,6 +553,7 @@ struct WaveletParamsEdited { bool expfinal; bool exptoning; bool expnoise; + bool expclari; }; struct DirPyrEqualizerParamsEdited { diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 60915fa02..6aa86abfa 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -22,6 +22,7 @@ #include "edit.h" #include "guiutils.h" #include "rtimage.h" +#include "eventmapper.h" using namespace rtengine; using namespace rtengine::procparams; @@ -30,27 +31,27 @@ extern Options options; namespace { - GradientMilestone makeHsvGm(double position, float h, float s, float v) - { - float r; - float g; - float b; - Color::hsv2rgb01(h, s, v, r, g, b); - return GradientMilestone(position, r, g, b); +GradientMilestone makeHsvGm(double position, float h, float s, float v) +{ + float r; + float g; + float b; + Color::hsv2rgb01(h, s, v, r, g, b); + return GradientMilestone(position, r, g, b); +} + +std::vector makeWholeHueRange() +{ + std::vector res; + res.reserve(7); + + for (int i = 0; i < 7; ++i) { + const float x = static_cast(i) / 6.0f; + res.push_back(makeHsvGm(x, x, 0.5f, 0.5f)); } - std::vector makeWholeHueRange() - { - std::vector res; - res.reserve(7); - - for (int i = 0; i < 7; ++i) { - const float x = static_cast(i) / 6.0f; - res.push_back(makeHsvGm(x, x, 0.5f, 0.5f)); - } - - return res; - } + return res; +} } @@ -87,10 +88,10 @@ Wavelet::Wavelet() : contrast(Gtk::manage(new Adjuster(M("TP_WAVELET_CONTRA"), -100, 100, 1, 0))), thr(Gtk::manage(new Adjuster(M("TP_WAVELET_THR"), 0, 100, 1, 35))), thrH(Gtk::manage(new Adjuster(M("TP_WAVELET_THRH"), 0, 100, 1, 65))), - skinprotect(Gtk::manage( new Adjuster(M("TP_WAVELET_SKIN"), -100, 100, 1, 0.) )), - edgrad(Gtk::manage( new Adjuster(M("TP_WAVELET_EDRAD"), 0, 100, 1, 15) )), - edgval(Gtk::manage( new Adjuster(M("TP_WAVELET_EDVAL"), 0, 100, 1, 0) )), - edgthresh(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGTHRESH"), -50, 100, 1, 10 ))), + skinprotect(Gtk::manage(new Adjuster(M("TP_WAVELET_SKIN"), -100, 100, 1, 0.))), + edgrad(Gtk::manage(new Adjuster(M("TP_WAVELET_EDRAD"), 0, 100, 1, 15))), + edgval(Gtk::manage(new Adjuster(M("TP_WAVELET_EDVAL"), 0, 100, 1, 0))), + edgthresh(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGTHRESH"), -50, 100, 1, 10))), strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))), balance(Gtk::manage(new Adjuster(M("TP_WAVELET_BALANCE"), -30, 100, 1, 0))), iter(Gtk::manage(new Adjuster(M("TP_WAVELET_ITER"), -3, 3, 1, 0))), @@ -112,6 +113,10 @@ Wavelet::Wavelet() : edgedetectthr2(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR2"), -10, 100, 1, 0))), edgesensi(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60))), edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), + mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 40))), + mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), + softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), + softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), @@ -126,12 +131,14 @@ Wavelet::Wavelet() : daubcoeffmethod(Gtk::manage(new MyComboBoxText())), Dirmethod(Gtk::manage(new MyComboBoxText())), Medgreinf(Gtk::manage(new MyComboBoxText())), + ushamethod(Gtk::manage(new MyComboBoxText())), chanMixerHLFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_HIGHLIGHT")))), chanMixerMidFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_MIDTONES")))), chanMixerShadowsFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_SHADOWS")))), wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))), labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))), labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))), + usharpLabel(Gtk::manage(new Gtk::Label(M("TP_WAVELET_USHARP") + ":"))), expchroma(Gtk::manage(new MyExpander(true, M("TP_WAVELET_LEVCH")))), expcontrast(Gtk::manage(new MyExpander(true, M("TP_WAVELET_LEVF")))), expedge(Gtk::manage(new MyExpander(true, M("TP_WAVELET_EDGE")))), @@ -141,80 +148,92 @@ Wavelet::Wavelet() : expresid(Gtk::manage(new MyExpander(true, M("TP_WAVELET_RESID")))), expsettings(Gtk::manage(new MyExpander(false, M("TP_WAVELET_SETTINGS")))), exptoning(Gtk::manage(new MyExpander(true, M("TP_WAVELET_TON")))), - neutrHBox(Gtk::manage(new Gtk::HBox())) + expclari(Gtk::manage(new MyExpander(true, M("TP_WAVELET_CLARI")))), + neutrHBox(Gtk::manage(new Gtk::HBox())), + usharpHBox(Gtk::manage(new Gtk::HBox())) { CurveListener::setMulti(true); + auto m = ProcEventMapper::getInstance(); + EvWavenaclari = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCLARI"); + EvWavushamet = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVUSHAMET"); + EvWavmergeL = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMERGEL"); + EvWavmergeC = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMERGEC"); + EvWavsoftrad = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRAD"); + EvWavsoftradend = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRADEND"); - expsettings->signal_button_release_event().connect_notify( sigc::bind( sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings) ); + expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); - expcontrast->signal_button_release_event().connect_notify( sigc::bind( sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast) ); - enableContrastConn = expcontrast->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expcontrast) ); + expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast)); + enableContrastConn = expcontrast->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expcontrast)); - expchroma->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expchroma) ); - enableChromaConn = expchroma->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expchroma) ); + expchroma->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expchroma)); + enableChromaConn = expchroma->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expchroma)); - exptoning->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), exptoning) ); - enableToningConn = exptoning->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), exptoning) ); + exptoning->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), exptoning)); + enableToningConn = exptoning->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), exptoning)); - expnoise->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expnoise) ); - enableNoiseConn = expnoise->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expnoise) ); + expnoise->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expnoise)); + enableNoiseConn = expnoise->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expnoise)); - expedge->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expedge) ); - enableEdgeConn = expedge->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expedge) ); + expedge->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expedge)); + enableEdgeConn = expedge->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expedge)); - expgamut->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expgamut) ); + expgamut->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expgamut)); - expresid->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expresid) ); - enableResidConn = expresid->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expresid) ); + expresid->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expresid)); + enableResidConn = expresid->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expresid)); - expfinal->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expfinal) ); - enableFinalConn = expfinal->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expfinal) ); + expfinal->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expfinal)); + enableFinalConn = expfinal->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expfinal)); + + expclari->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expclari)); + enableclariConn = expclari->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expclari)); // Wavelet Settings - ToolParamBlock* const settingsBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const settingsBox = Gtk::manage(new ToolParamBlock()); - strength->setAdjusterListener (this); + strength->setAdjusterListener(this); - thres->set_tooltip_text (M("TP_WAVELET_LEVELS_TOOLTIP")); - thres->setAdjusterListener (this); + thres->set_tooltip_text(M("TP_WAVELET_LEVELS_TOOLTIP")); + thres->setAdjusterListener(this); - Tilesmethod->append (M("TP_WAVELET_TILESFULL")); - Tilesmethod->append (M("TP_WAVELET_TILESBIG")); - Tilesmethod->append (M("TP_WAVELET_TILESLIT")); - Tilesmethodconn = Tilesmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::TilesmethodChanged) ); - Tilesmethod->set_tooltip_text (M("TP_WAVELET_TILES_TOOLTIP")); + Tilesmethod->append(M("TP_WAVELET_TILESFULL")); + Tilesmethod->append(M("TP_WAVELET_TILESBIG")); + Tilesmethod->append(M("TP_WAVELET_TILESLIT")); + Tilesmethodconn = Tilesmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::TilesmethodChanged)); + Tilesmethod->set_tooltip_text(M("TP_WAVELET_TILES_TOOLTIP")); Gtk::HBox* const tilesizeHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const tilesizeLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_TILESIZE") + ":")); tilesizeHBox->pack_start(*tilesizeLabel, Gtk::PACK_SHRINK, 4); tilesizeHBox->pack_start(*Tilesmethod); daubcoeffmethod->set_sensitive(true); - daubcoeffmethod->append (M("TP_WAVELET_DAUB2")); - daubcoeffmethod->append (M("TP_WAVELET_DAUB4")); - daubcoeffmethod->append (M("TP_WAVELET_DAUB6")); - daubcoeffmethod->append (M("TP_WAVELET_DAUB10")); - daubcoeffmethod->append (M("TP_WAVELET_DAUB14")); - daubcoeffmethodconn = daubcoeffmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::daubcoeffmethodChanged) ); - daubcoeffmethod->set_tooltip_text (M("TP_WAVELET_DAUB_TOOLTIP")); + daubcoeffmethod->append(M("TP_WAVELET_DAUB2")); + daubcoeffmethod->append(M("TP_WAVELET_DAUB4")); + daubcoeffmethod->append(M("TP_WAVELET_DAUB6")); + daubcoeffmethod->append(M("TP_WAVELET_DAUB10")); + daubcoeffmethod->append(M("TP_WAVELET_DAUB14")); + daubcoeffmethodconn = daubcoeffmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::daubcoeffmethodChanged)); + daubcoeffmethod->set_tooltip_text(M("TP_WAVELET_DAUB_TOOLTIP")); Gtk::Label* const daubcoeffLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DAUB") + ":")); Gtk::HBox* const daubcoeffHBox = Gtk::manage(new Gtk::HBox()); daubcoeffHBox->pack_start(*daubcoeffLabel, Gtk::PACK_SHRINK, 4); daubcoeffHBox->pack_start(*daubcoeffmethod); - Backmethod->append (M("TP_WAVELET_B0")); - Backmethod->append (M("TP_WAVELET_B1")); - Backmethod->append (M("TP_WAVELET_B2")); - Backmethodconn = Backmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::BackmethodChanged) ); + Backmethod->append(M("TP_WAVELET_B0")); + Backmethod->append(M("TP_WAVELET_B1")); + Backmethod->append(M("TP_WAVELET_B2")); + Backmethodconn = Backmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::BackmethodChanged)); Gtk::HBox* const backgroundHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const backgroundLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_BACKGROUND") + ":")); backgroundHBox->pack_start(*backgroundLabel, Gtk::PACK_SHRINK, 4); backgroundHBox->pack_start(*Backmethod); - CLmethod->append (M("TP_WAVELET_LEVDIR_ONE")); - CLmethod->append (M("TP_WAVELET_LEVDIR_INF")); - CLmethod->append (M("TP_WAVELET_LEVDIR_SUP")); - CLmethod->append (M("TP_WAVELET_LEVDIR_ALL")); - CLmethodconn = CLmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::CLmethodChanged) ); + CLmethod->append(M("TP_WAVELET_LEVDIR_ONE")); + CLmethod->append(M("TP_WAVELET_LEVDIR_INF")); + CLmethod->append(M("TP_WAVELET_LEVDIR_SUP")); + CLmethod->append(M("TP_WAVELET_LEVDIR_ALL")); + CLmethodconn = CLmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::CLmethodChanged)); Gtk::HBox* const levdirMainHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const levdirMainLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_PROC") + ":")); levdirMainHBox->pack_start(*levdirMainLabel, Gtk::PACK_SHRINK, 4); @@ -222,25 +241,25 @@ Wavelet::Wavelet() : Lmethod->set_sensitive(false); Lmethod->set_sensitive(false); - Lmethod->append (M("TP_WAVELET_1")); - Lmethod->append (M("TP_WAVELET_2")); - Lmethod->append (M("TP_WAVELET_3")); - Lmethod->append (M("TP_WAVELET_4")); - Lmethod->append (M("TP_WAVELET_5")); - Lmethod->append (M("TP_WAVELET_6")); - Lmethod->append (M("TP_WAVELET_7")); - Lmethod->append (M("TP_WAVELET_8")); - Lmethod->append (M("TP_WAVELET_9")); - Lmethod->append (M("TP_WAVELET_SUPE")); - Lmethod->append (M("TP_WAVELET_RESID")); + Lmethod->append(M("TP_WAVELET_1")); + Lmethod->append(M("TP_WAVELET_2")); + Lmethod->append(M("TP_WAVELET_3")); + Lmethod->append(M("TP_WAVELET_4")); + Lmethod->append(M("TP_WAVELET_5")); + Lmethod->append(M("TP_WAVELET_6")); + Lmethod->append(M("TP_WAVELET_7")); + Lmethod->append(M("TP_WAVELET_8")); + Lmethod->append(M("TP_WAVELET_9")); + Lmethod->append(M("TP_WAVELET_SUPE")); + Lmethod->append(M("TP_WAVELET_RESID")); Lmethod->set_active(0); Dirmethod->set_sensitive(false); - Dirmethod->append (M("TP_WAVELET_DONE")); - Dirmethod->append (M("TP_WAVELET_DTWO")); - Dirmethod->append (M("TP_WAVELET_DTHR")); - Dirmethod->append (M("TP_WAVELET_DALL")); - Lmethodconn = Lmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::LmethodChanged) ); - Dirmethodconn = Dirmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::DirmethodChanged) ); + Dirmethod->append(M("TP_WAVELET_DONE")); + Dirmethod->append(M("TP_WAVELET_DTWO")); + Dirmethod->append(M("TP_WAVELET_DTHR")); + Dirmethod->append(M("TP_WAVELET_DALL")); + Lmethodconn = Lmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::LmethodChanged)); + Dirmethodconn = Dirmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::DirmethodChanged)); Gtk::HBox* const levdirSubHBox = Gtk::manage(new Gtk::HBox()); levdirSubHBox->pack_start(*Lmethod); levdirSubHBox->pack_start(*Dirmethod, Gtk::PACK_EXPAND_WIDGET, 2); // same, but 2 not 4? @@ -254,74 +273,74 @@ Wavelet::Wavelet() : settingsBox->pack_start(*levdirSubHBox); // Contrast - ToolParamBlock* const levBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const levBox = Gtk::manage(new ToolParamBlock()); - Gtk::HBox* const buttonBox = Gtk::manage (new Gtk::HBox(true, 10)); + Gtk::HBox* const buttonBox = Gtk::manage(new Gtk::HBox(true, 10)); levBox->pack_start(*buttonBox, Gtk::PACK_SHRINK, 2); - Gtk::Button* const contrastMinusButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_CONTRAST_MINUS"))); + Gtk::Button* const contrastMinusButton = Gtk::manage(new Gtk::Button(M("TP_WAVELET_CONTRAST_MINUS"))); buttonBox->pack_start(*contrastMinusButton); - contrastMinusPressedConn = contrastMinusButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::contrastMinusPressed)); + contrastMinusPressedConn = contrastMinusButton->signal_pressed().connect(sigc::mem_fun(*this, &Wavelet::contrastMinusPressed)); - Gtk::Button* const neutralButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_NEUTRAL"))); + Gtk::Button* const neutralButton = Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL"))); buttonBox->pack_start(*neutralButton); - neutralPressedConn = neutralButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::neutralPressed)); + neutralPressedConn = neutralButton->signal_pressed().connect(sigc::mem_fun(*this, &Wavelet::neutralPressed)); - Gtk::Button* const contrastPlusButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_CONTRAST_PLUS"))); + Gtk::Button* const contrastPlusButton = Gtk::manage(new Gtk::Button(M("TP_WAVELET_CONTRAST_PLUS"))); buttonBox->pack_start(*contrastPlusButton); - contrastPlusPressedConn = contrastPlusButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::contrastPlusPressed)); + contrastPlusPressedConn = contrastPlusButton->signal_pressed().connect(sigc::mem_fun(*this, &Wavelet::contrastPlusPressed)); buttonBox->show_all_children(); - for(int i = 0; i < 9; i++) { + for (int i = 0; i < 9; i++) { Glib::ustring ss; - switch( i ) { - case 0: - ss = Glib::ustring::compose( "%1 (%2)", (i + 1), M("TP_WAVELET_FINEST")); - break; + switch (i) { + case 0: + ss = Glib::ustring::compose("%1 (%2)", (i + 1), M("TP_WAVELET_FINEST")); + break; - case 8: - ss = Glib::ustring::compose( "%1 (%2)", (i + 1), M("TP_WAVELET_LARGEST")); - break; + case 8: + ss = Glib::ustring::compose("%1 (%2)", (i + 1), M("TP_WAVELET_LARGEST")); + break; - default: - ss = Glib::ustring::compose( "%1", (i + 1)); + default: + ss = Glib::ustring::compose("%1", (i + 1)); } - correction[i] = Gtk::manage ( new Adjuster (ss, -100, 350, 1, 0) ); + correction[i] = Gtk::manage(new Adjuster(ss, -100, 350, 1, 0)); correction[i]->setAdjusterListener(this); levBox->pack_start(*correction[i]); } levBox->pack_start(*sup); - sup->setAdjusterListener (this); + sup->setAdjusterListener(this); wavLabels->show(); - levBox->pack_start (*wavLabels); + levBox->pack_start(*wavLabels); Gtk::VBox* const contrastSHVBox = Gtk::manage(new Gtk::VBox); contrastSHVBox->set_spacing(2); - HSmethod->append (M("TP_WAVELET_HS1")); - HSmethod->append (M("TP_WAVELET_HS2")); - HSmethodconn = HSmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::HSmethodChanged) ); + HSmethod->append(M("TP_WAVELET_HS1")); + HSmethod->append(M("TP_WAVELET_HS2")); + HSmethodconn = HSmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::HSmethodChanged)); const std::vector milestones2 = { GradientMilestone(0.0, 0.0, 0.0, 0.0), GradientMilestone(1.0, 1.0, 1.0, 1.0) }; - hllev->setAdjusterListener (this); + hllev->setAdjusterListener(this); hllev->setBgGradient(milestones2); - threshold->setAdjusterListener (this); - threshold->set_tooltip_text (M("TP_WAVELET_THRESHOLD_TOOLTIP")); + threshold->setAdjusterListener(this); + threshold->set_tooltip_text(M("TP_WAVELET_THRESHOLD_TOOLTIP")); - bllev->setAdjusterListener (this); + bllev->setAdjusterListener(this); bllev->setBgGradient(milestones2); - threshold2->setAdjusterListener (this); - threshold2->set_tooltip_text (M("TP_WAVELET_THRESHOLD2_TOOLTIP")); + threshold2->setAdjusterListener(this); + threshold2->set_tooltip_text(M("TP_WAVELET_THRESHOLD2_TOOLTIP")); contrastSHVBox->pack_start(*HSmethod); contrastSHVBox->pack_start(*hllev); @@ -333,79 +352,79 @@ Wavelet::Wavelet() : levBox->pack_start(*contrastSHFrame); // Chromaticity - ToolParamBlock* const chBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const chBox = Gtk::manage(new ToolParamBlock()); Gtk::Label* const labmch = Gtk::manage(new Gtk::Label(M("TP_WAVELET_CHTYPE") + ":")); Gtk::HBox* const ctboxch = Gtk::manage(new Gtk::HBox()); - ctboxch->pack_start (*labmch, Gtk::PACK_SHRINK, 1); + ctboxch->pack_start(*labmch, Gtk::PACK_SHRINK, 1); - CHmethod->append (M("TP_WAVELET_CH1")); - CHmethod->append (M("TP_WAVELET_CH2")); - CHmethod->append (M("TP_WAVELET_CH3")); - CHmethodconn = CHmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::CHmethodChanged) ); + CHmethod->append(M("TP_WAVELET_CH1")); + CHmethod->append(M("TP_WAVELET_CH2")); + CHmethod->append(M("TP_WAVELET_CH3")); + CHmethodconn = CHmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::CHmethodChanged)); ctboxch->pack_start(*CHmethod); chBox->pack_start(*ctboxch); Gtk::HBox* const ctboxCH = Gtk::manage(new Gtk::HBox()); - ctboxCH->pack_start (*labmC, Gtk::PACK_SHRINK, 1); + ctboxCH->pack_start(*labmC, Gtk::PACK_SHRINK, 1); - CHSLmethod->append (M("TP_WAVELET_CHSL")); - CHSLmethod->append (M("TP_WAVELET_CHCU")); - CHSLmethodconn = CHSLmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::CHSLmethodChanged) ); + CHSLmethod->append(M("TP_WAVELET_CHSL")); + CHSLmethod->append(M("TP_WAVELET_CHCU")); + CHSLmethodconn = CHSLmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::CHSLmethodChanged)); ctboxCH->pack_start(*CHSLmethod); - Gtk::HSeparator* const separatorChromaMethod = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatorChromaMethod = Gtk::manage(new Gtk::HSeparator()); chBox->pack_start(*separatorChromaMethod, Gtk::PACK_SHRINK, 2); - chroma->set_tooltip_text (M("TP_WAVELET_CHRO_TOOLTIP")); + chroma->set_tooltip_text(M("TP_WAVELET_CHRO_TOOLTIP")); chBox->pack_start(*chroma); - chroma->setAdjusterListener (this); + chroma->setAdjusterListener(this); - satlev->setAdjusterListener (this); + satlev->setAdjusterListener(this); satlev->setBgGradient(milestones2); - pastlev->setAdjusterListener (this); + pastlev->setAdjusterListener(this); pastlev->setBgGradient(milestones2); chBox->pack_start(*pastlev); chBox->pack_start(*satlev); - chro->set_tooltip_text (M("TP_WAVELET_CHR_TOOLTIP")); + chro->set_tooltip_text(M("TP_WAVELET_CHR_TOOLTIP")); chBox->pack_start(*chro); - chro->setAdjusterListener (this); + chro->setAdjusterListener(this); - Gtk::HBox* const buttonchBox = Gtk::manage (new Gtk::HBox(true, 10)); - neutralchPressedConn = neutralchButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::neutralchPressed)); + Gtk::HBox* const buttonchBox = Gtk::manage(new Gtk::HBox(true, 10)); + neutralchPressedConn = neutralchButton->signal_pressed().connect(sigc::mem_fun(*this, &Wavelet::neutralchPressed)); chBox->pack_start(*separatorNeutral, Gtk::PACK_SHRINK, 2); buttonchBox->pack_start(*neutralchButton); buttonchBox->show_all_children(); chBox->pack_start(*buttonchBox, Gtk::PACK_SHRINK, 2); - for(int i = 0; i < 9; i++) { + for (int i = 0; i < 9; i++) { Glib::ustring ss; - switch( i ) { - case 0: - ss = Glib::ustring::compose( "%1 (%2)", (i + 1), M("TP_WAVELET_FINEST")); - break; + switch (i) { + case 0: + ss = Glib::ustring::compose("%1 (%2)", (i + 1), M("TP_WAVELET_FINEST")); + break; - case 8: - ss = Glib::ustring::compose( "%1 (%2)", (i + 1), M("TP_WAVELET_LARGEST")); - break; + case 8: + ss = Glib::ustring::compose("%1 (%2)", (i + 1), M("TP_WAVELET_LARGEST")); + break; - default: - ss = Glib::ustring::compose( "%1", (i + 1)); + default: + ss = Glib::ustring::compose("%1", (i + 1)); } - correctionch[i] = Gtk::manage ( new Adjuster (ss, -100, 100, 1, 0) ); + correctionch[i] = Gtk::manage(new Adjuster(ss, -100, 100, 1, 0)); correctionch[i]->setAdjusterListener(this); chBox->pack_start(*correctionch[i]); } // Toning - ToolParamBlock* const tonBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const tonBox = Gtk::manage(new ToolParamBlock()); - opaCurveEditorG->setCurveListener (this); + opaCurveEditorG->setCurveListener(this); const WaveletParams default_params; @@ -416,9 +435,9 @@ Wavelet::Wavelet() : opaCurveEditorG->curveListComplete(); opaCurveEditorG->show(); - tonBox->pack_start( *opaCurveEditorG, Gtk::PACK_SHRINK, 2); + tonBox->pack_start(*opaCurveEditorG, Gtk::PACK_SHRINK, 2); - opacityCurveEditorG->setCurveListener (this); + opacityCurveEditorG->setCurveListener(this); opacityShapeBY = static_cast(opacityCurveEditorG->addCurve(CT_Flat, "", nullptr, false, false)); opacityShapeBY->setIdentityValue(0.); @@ -427,77 +446,96 @@ Wavelet::Wavelet() : opacityCurveEditorG->curveListComplete(); opacityCurveEditorG->show(); - tonBox->pack_start( *opacityCurveEditorG, Gtk::PACK_SHRINK, 2); + tonBox->pack_start(*opacityCurveEditorG, Gtk::PACK_SHRINK, 2); // Denoise and Refine - ToolParamBlock* const noiseBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const noiseBox = Gtk::manage(new ToolParamBlock()); - linkedg->set_active (true); - linkedgConn = linkedg->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::linkedgToggled) ); + linkedg->set_active(true); + linkedgConn = linkedg->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::linkedgToggled)); noiseBox->pack_start(*linkedg); - level0noise->setAdjusterListener (this); + level0noise->setAdjusterListener(this); level0noise->setUpdatePolicy(RTUP_DYNAMIC); - level1noise->setAdjusterListener (this); + level1noise->setAdjusterListener(this); level1noise->setUpdatePolicy(RTUP_DYNAMIC); - level2noise->setAdjusterListener (this); + level2noise->setAdjusterListener(this); level2noise->setUpdatePolicy(RTUP_DYNAMIC); - level3noise->setAdjusterListener (this); + level3noise->setAdjusterListener(this); level3noise->setUpdatePolicy(RTUP_DYNAMIC); - noiseBox->pack_start( *level0noise, Gtk::PACK_SHRINK, 0); - noiseBox->pack_start( *level1noise, Gtk::PACK_SHRINK, 0); - noiseBox->pack_start( *level2noise, Gtk::PACK_SHRINK, 0); - noiseBox->pack_start( *level3noise, Gtk::PACK_SHRINK, 0); + noiseBox->pack_start(*level0noise, Gtk::PACK_SHRINK, 0); + noiseBox->pack_start(*level1noise, Gtk::PACK_SHRINK, 0); + noiseBox->pack_start(*level2noise, Gtk::PACK_SHRINK, 0); + noiseBox->pack_start(*level3noise, Gtk::PACK_SHRINK, 0); + +//Clarity + mergeL->setAdjusterListener(this); + mergeC->setAdjusterListener(this); + softrad->setAdjusterListener(this); + + ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock()); + ushamethod->append(M("TP_WAVELET_USH")); + ushamethod->append(M("TP_WAVELET_SHA")); + ushamethod->append(M("TP_WAVELET_CLA")); + ushamethodconn = ushamethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::ushamethodChanged)); + ushamethod->set_tooltip_text(M("TP_WAVELET_USH_TOOLTIP")); + usharpHBox->pack_start(*usharpLabel, Gtk::PACK_SHRINK, 0); + usharpHBox->pack_start(*ushamethod); + + clariBox->pack_start(*usharpHBox); + clariBox->pack_start(*mergeL); + clariBox->pack_start(*mergeC); + clariBox->pack_start(*softrad); // Edge Sharpness - ToolParamBlock* const edgBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const edgBox = Gtk::manage(new ToolParamBlock()); edgval->setAdjusterListener(this); edgBox->pack_start(*edgval); edgrad->setAdjusterListener(this); edgBox->pack_start(*edgrad); - edgrad->set_tooltip_markup (M("TP_WAVELET_EDRAD_TOOLTIP")); + edgrad->set_tooltip_markup(M("TP_WAVELET_EDRAD_TOOLTIP")); - edgthresh->setAdjusterListener (this); - edgthresh->set_tooltip_markup (M("TP_WAVELET_EDGTHRESH_TOOLTIP")); - edgBox->pack_start (*edgthresh); + edgthresh->setAdjusterListener(this); + edgthresh->set_tooltip_markup(M("TP_WAVELET_EDGTHRESH_TOOLTIP")); + edgBox->pack_start(*edgthresh); Gtk::Label* const labmedgr = Gtk::manage(new Gtk::Label(M("TP_WAVELET_MEDGREINF") + ":")); Gtk::HBox* const edbox = Gtk::manage(new Gtk::HBox()); - edbox->pack_start (*labmedgr, Gtk::PACK_SHRINK, 1); + edbox->pack_start(*labmedgr, Gtk::PACK_SHRINK, 1); - Medgreinf->append (M("TP_WAVELET_RE1")); - Medgreinf->append (M("TP_WAVELET_RE2")); - Medgreinf->append (M("TP_WAVELET_RE3")); - MedgreinfConn = Medgreinf->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::MedgreinfChanged) ); - Medgreinf->set_tooltip_markup (M("TP_WAVELET_EDGREINF_TOOLTIP")); + Medgreinf->append(M("TP_WAVELET_RE1")); + Medgreinf->append(M("TP_WAVELET_RE2")); + Medgreinf->append(M("TP_WAVELET_RE3")); + MedgreinfConn = Medgreinf->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::MedgreinfChanged)); + Medgreinf->set_tooltip_markup(M("TP_WAVELET_EDGREINF_TOOLTIP")); edbox->pack_start(*Medgreinf); edgBox->pack_start(*edbox); - Gtk::HSeparator* const separatorlc = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatorlc = Gtk::manage(new Gtk::HSeparator()); edgBox->pack_start(*separatorlc, Gtk::PACK_SHRINK, 2); Gtk::Label* const labmED = Gtk::manage(new Gtk::Label(M("TP_WAVELET_EDTYPE") + ":")); Gtk::HBox* const ctboxED = Gtk::manage(new Gtk::HBox()); - ctboxED->pack_start (*labmED, Gtk::PACK_SHRINK, 1); + ctboxED->pack_start(*labmED, Gtk::PACK_SHRINK, 1); - EDmethod->append (M("TP_WAVELET_EDSL")); - EDmethod->append (M("TP_WAVELET_EDCU")); - EDmethodconn = EDmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::EDmethodChanged) ); + EDmethod->append(M("TP_WAVELET_EDSL")); + EDmethod->append(M("TP_WAVELET_EDCU")); + EDmethodconn = EDmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::EDmethodChanged)); ctboxED->pack_start(*EDmethod); - edgBox->pack_start (*ctboxED); + edgBox->pack_start(*ctboxED); - edgcont->setAdjusterListener (this); + edgcont->setAdjusterListener(this); edgcont->setBgGradient(milestones2); - edgcont->set_tooltip_markup (M("TP_WAVELET_EDGCONT_TOOLTIP")); + edgcont->set_tooltip_markup(M("TP_WAVELET_EDGCONT_TOOLTIP")); // <-- Edge Sharpness Local Contrast curve - CCWcurveEditorG->setCurveListener (this); + CCWcurveEditorG->setCurveListener(this); ccshape = static_cast(CCWcurveEditorG->addCurve(CT_Flat, "", nullptr, false, false)); @@ -509,56 +547,56 @@ Wavelet::Wavelet() : CCWcurveEditorG->show(); // --> - edgBox->pack_start (*edgcont); + edgBox->pack_start(*edgcont); edgBox->pack_start(*CCWcurveEditorG, Gtk::PACK_SHRINK, 4); - medianlev->set_active (true); - medianlevConn = medianlev->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::medianlevToggled) ); - medianlev->set_tooltip_text (M("TP_WAVELET_MEDILEV_TOOLTIP")); + medianlev->set_active(true); + medianlevConn = medianlev->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::medianlevToggled)); + medianlev->set_tooltip_text(M("TP_WAVELET_MEDILEV_TOOLTIP")); - Gtk::HSeparator* const separatored1 = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatored1 = Gtk::manage(new Gtk::HSeparator()); edgBox->pack_start(*separatored1, Gtk::PACK_SHRINK, 2); Gtk::HBox* const eddebox = Gtk::manage(new Gtk::HBox()); - edgBox->pack_start (*eddebox); + edgBox->pack_start(*eddebox); edgBox->pack_start(*medianlev); - edgedetect->setAdjusterListener (this); - edgedetect->set_tooltip_text (M("TP_WAVELET_EDGEDETECT_TOOLTIP")); + edgedetect->setAdjusterListener(this); + edgedetect->set_tooltip_text(M("TP_WAVELET_EDGEDETECT_TOOLTIP")); edgBox->pack_start(*edgedetect); - edgedetectthr->setAdjusterListener (this); - edgedetectthr->set_tooltip_text (M("TP_WAVELET_EDGEDETECTTHR_TOOLTIP")); + edgedetectthr->setAdjusterListener(this); + edgedetectthr->set_tooltip_text(M("TP_WAVELET_EDGEDETECTTHR_TOOLTIP")); edgBox->pack_start(*edgedetectthr); - edgedetectthr2->setAdjusterListener (this); + edgedetectthr2->setAdjusterListener(this); edgBox->pack_start(*edgedetectthr2); edgBox->pack_start(*separatoredge, Gtk::PACK_SHRINK, 2); - lipst->set_active (true); - lipstConn = lipst->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::lipstToggled) ); + lipst->set_active(true); + lipstConn = lipst->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::lipstToggled)); // lipst->set_tooltip_text (M("TP_WAVELET_LIPST_TOOLTIP")); edgBox->pack_start(*lipst); - edgesensi->setAdjusterListener (this); + edgesensi->setAdjusterListener(this); edgBox->pack_start(*edgesensi); - edgeampli->setAdjusterListener (this); + edgeampli->setAdjusterListener(this); edgBox->pack_start(*edgeampli); - Gtk::VBox* const ctboxES = Gtk::manage (new Gtk::VBox()); + Gtk::VBox* const ctboxES = Gtk::manage(new Gtk::VBox()); ctboxES->set_spacing(2); Gtk::HBox* const ctboxNP = Gtk::manage(new Gtk::HBox()); - ctboxNP->pack_start (*labmNP, Gtk::PACK_SHRINK, 1); + ctboxNP->pack_start(*labmNP, Gtk::PACK_SHRINK, 1); - NPmethod->append (M("TP_WAVELET_NPNONE")); - NPmethod->append (M("TP_WAVELET_NPLOW")); - NPmethod->append (M("TP_WAVELET_NPHIGH")); - NPmethodconn = NPmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::NPmethodChanged) ); - NPmethod->set_tooltip_text (M("TP_WAVELET_NPTYPE_TOOLTIP")); + NPmethod->append(M("TP_WAVELET_NPNONE")); + NPmethod->append(M("TP_WAVELET_NPLOW")); + NPmethod->append(M("TP_WAVELET_NPHIGH")); + NPmethodconn = NPmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::NPmethodChanged)); + NPmethod->set_tooltip_text(M("TP_WAVELET_NPTYPE_TOOLTIP")); ctboxNP->pack_start(*NPmethod); ctboxES->pack_start(*ctboxNP); @@ -566,13 +604,13 @@ Wavelet::Wavelet() : edgBox->pack_start(*ctboxES); // Gamut - ToolParamBlock* const conBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const conBox = Gtk::manage(new ToolParamBlock()); - median->set_active (true); - medianConn = median->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::medianToggled) ); + median->set_active(true); + medianConn = median->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::medianToggled)); conBox->pack_start(*median); - hueskin->set_tooltip_markup (M("TP_WAVELET_HUESKIN_TOOLTIP")); + hueskin->set_tooltip_markup(M("TP_WAVELET_HUESKIN_TOOLTIP")); //from -PI to +PI (radians) convert to hsv and draw bottombar const std::vector milestones = { @@ -595,13 +633,13 @@ Wavelet::Wavelet() : hueskin->setBgGradient(milestones); conBox->pack_start(*hueskin); - hueskin->setAdjusterListener (this); + hueskin->setAdjusterListener(this); skinprotect->setAdjusterListener(this); conBox->pack_start(*skinprotect); - skinprotect->set_tooltip_markup (M("TP_WAVELET_SKIN_TOOLTIP")); + skinprotect->set_tooltip_markup(M("TP_WAVELET_SKIN_TOOLTIP")); - curveEditorGAM->setCurveListener (this); + curveEditorGAM->setCurveListener(this); Chshape = static_cast(curveEditorGAM->addCurve(CT_Flat, M("TP_WAVELET_CURVEEDITOR_CH"))); Chshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_CH_TOOLTIP")); @@ -609,74 +647,74 @@ Wavelet::Wavelet() : curveEditorGAM->curveListComplete(); Chshape->setBottomBarBgGradient(milestones); - conBox->pack_start (*curveEditorGAM, Gtk::PACK_SHRINK, 4); + conBox->pack_start(*curveEditorGAM, Gtk::PACK_SHRINK, 4); - avoid->set_active (true); - avoidConn = avoid->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::avoidToggled) ); + avoid->set_active(true); + avoidConn = avoid->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::avoidToggled)); conBox->pack_start(*avoid); // Residual Image - ToolParamBlock* const resBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const resBox = Gtk::manage(new ToolParamBlock()); - rescon->setAdjusterListener (this); + rescon->setAdjusterListener(this); resBox->pack_start(*rescon, Gtk::PACK_SHRINK); resBox->pack_start(*thr); - thr->setAdjusterListener (this); + thr->setAdjusterListener(this); - resconH->setAdjusterListener (this); + resconH->setAdjusterListener(this); resBox->pack_start(*resconH, Gtk::PACK_SHRINK); - thrH->setAdjusterListener (this); + thrH->setAdjusterListener(this); resBox->pack_start(*thrH, Gtk::PACK_SHRINK); - contrast->set_tooltip_text (M("TP_WAVELET_CONTRA_TOOLTIP")); - contrast->setAdjusterListener (this); + contrast->set_tooltip_text(M("TP_WAVELET_CONTRA_TOOLTIP")); + contrast->setAdjusterListener(this); resBox->pack_start(*contrast); //keep the possibility to reinstall - reschro->setAdjusterListener (this); + reschro->setAdjusterListener(this); resBox->pack_start(*reschro); Gtk::Label* const labmTM = Gtk::manage(new Gtk::Label(M("TP_WAVELET_TMTYPE") + ":")); Gtk::HBox* const ctboxTM = Gtk::manage(new Gtk::HBox()); - ctboxTM->pack_start (*labmTM, Gtk::PACK_SHRINK, 1); + ctboxTM->pack_start(*labmTM, Gtk::PACK_SHRINK, 1); - Gtk::HSeparator* const separatorR0 = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatorR0 = Gtk::manage(new Gtk::HSeparator()); resBox->pack_start(*separatorR0, Gtk::PACK_SHRINK, 2); - TMmethod->append (M("TP_WAVELET_COMPCONT")); - TMmethod->append (M("TP_WAVELET_COMPTM")); - TMmethodconn = TMmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::TMmethodChanged) ); + TMmethod->append(M("TP_WAVELET_COMPCONT")); + TMmethod->append(M("TP_WAVELET_COMPTM")); + TMmethodconn = TMmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::TMmethodChanged)); ctboxTM->pack_start(*TMmethod); - resBox->pack_start (*ctboxTM); + resBox->pack_start(*ctboxTM); - tmrs->set_tooltip_text (M("TP_WAVELET_TMSTRENGTH_TOOLTIP")); + tmrs->set_tooltip_text(M("TP_WAVELET_TMSTRENGTH_TOOLTIP")); resBox->pack_start(*tmrs); - tmrs->setAdjusterListener (this); + tmrs->setAdjusterListener(this); - gamma->set_tooltip_text (M("TP_WAVELET_COMPGAMMA_TOOLTIP")); + gamma->set_tooltip_text(M("TP_WAVELET_COMPGAMMA_TOOLTIP")); resBox->pack_start(*gamma); - gamma->setAdjusterListener (this); + gamma->setAdjusterListener(this); - Gtk::HSeparator* const separatorR1 = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatorR1 = Gtk::manage(new Gtk::HSeparator()); resBox->pack_start(*separatorR1, Gtk::PACK_SHRINK, 2); - hueskin2->set_tooltip_markup (M("TP_WAVELET_HUESKY_TOOLTIP")); + hueskin2->set_tooltip_markup(M("TP_WAVELET_HUESKY_TOOLTIP")); hueskin2->setBgGradient(milestones); resBox->pack_start(*hueskin2); - hueskin2->setAdjusterListener (this); + hueskin2->setAdjusterListener(this); - sky->set_tooltip_text (M("TP_WAVELET_SKY_TOOLTIP")); - sky->setAdjusterListener (this); + sky->set_tooltip_text(M("TP_WAVELET_SKY_TOOLTIP")); + sky->setAdjusterListener(this); resBox->pack_start(*sky); // whole hue range const std::vector milestones3 = makeWholeHueRange(); - curveEditorRES->setCurveListener (this); + curveEditorRES->setCurveListener(this); hhshape = static_cast(curveEditorRES->addCurve(CT_Flat, M("TP_WAVELET_CURVEEDITOR_HH"))); hhshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_HH_TOOLTIP")); @@ -684,54 +722,54 @@ Wavelet::Wavelet() : curveEditorRES->curveListComplete(); hhshape->setBottomBarBgGradient(milestones3); - resBox->pack_start (*curveEditorRES, Gtk::PACK_SHRINK, 4); + resBox->pack_start(*curveEditorRES, Gtk::PACK_SHRINK, 4); // Toning and Color Balance - Gtk::HSeparator* const separatorCB = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatorCB = Gtk::manage(new Gtk::HSeparator()); - Gtk::VBox* const chanMixerHLBox = Gtk::manage (new Gtk::VBox()); - Gtk::VBox* const chanMixerMidBox = Gtk::manage (new Gtk::VBox()); - Gtk::VBox* const chanMixerShadowsBox = Gtk::manage (new Gtk::VBox()); + Gtk::VBox* const chanMixerHLBox = Gtk::manage(new Gtk::VBox()); + Gtk::VBox* const chanMixerMidBox = Gtk::manage(new Gtk::VBox()); + Gtk::VBox* const chanMixerShadowsBox = Gtk::manage(new Gtk::VBox()); - cbenab->set_active (true); - cbenabConn = cbenab->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::cbenabToggled) ); - cbenab->set_tooltip_text (M("TP_WAVELET_CB_TOOLTIP")); + cbenab->set_active(true); + cbenabConn = cbenab->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::cbenabToggled)); + cbenab->set_tooltip_text(M("TP_WAVELET_CB_TOOLTIP")); - Gtk::Image* const iblueR = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* const iyelL = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* const imagL = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* const igreenR = Gtk::manage (new RTImage ("circle-green-small.png")); + Gtk::Image* const iblueR = Gtk::manage(new RTImage("circle-blue-small.png")); + Gtk::Image* const iyelL = Gtk::manage(new RTImage("circle-yellow-small.png")); + Gtk::Image* const imagL = Gtk::manage(new RTImage("circle-magenta-small.png")); + Gtk::Image* const igreenR = Gtk::manage(new RTImage("circle-green-small.png")); - Gtk::Image* const iblueRm = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* const iyelLm = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* const imagLm = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* const igreenRm = Gtk::manage (new RTImage ("circle-green-small.png")); + Gtk::Image* const iblueRm = Gtk::manage(new RTImage("circle-blue-small.png")); + Gtk::Image* const iyelLm = Gtk::manage(new RTImage("circle-yellow-small.png")); + Gtk::Image* const imagLm = Gtk::manage(new RTImage("circle-magenta-small.png")); + Gtk::Image* const igreenRm = Gtk::manage(new RTImage("circle-green-small.png")); - Gtk::Image* const iblueRh = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* const iyelLh = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* const imagLh = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* const igreenRh = Gtk::manage (new RTImage ("circle-green-small.png")); + Gtk::Image* const iblueRh = Gtk::manage(new RTImage("circle-blue-small.png")); + Gtk::Image* const iyelLh = Gtk::manage(new RTImage("circle-yellow-small.png")); + Gtk::Image* const imagLh = Gtk::manage(new RTImage("circle-magenta-small.png")); + Gtk::Image* const igreenRh = Gtk::manage(new RTImage("circle-green-small.png")); - greenhigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenRh, imagLh)); - bluehigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., iblueRh, iyelLh)); - greenmed = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenRm, imagLm)); - bluemed = Gtk::manage (new Adjuster ("", -100., 100., 1., 0. , iblueRm , iyelLm)); - greenlow = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenR, imagL)); - bluelow = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., iblueR , iyelL)); + greenhigh = Gtk::manage(new Adjuster("", -100., 100., 1., 0., igreenRh, imagLh)); + bluehigh = Gtk::manage(new Adjuster("", -100., 100., 1., 0., iblueRh, iyelLh)); + greenmed = Gtk::manage(new Adjuster("", -100., 100., 1., 0., igreenRm, imagLm)); + bluemed = Gtk::manage(new Adjuster("", -100., 100., 1., 0., iblueRm, iyelLm)); + greenlow = Gtk::manage(new Adjuster("", -100., 100., 1., 0., igreenR, imagL)); + bluelow = Gtk::manage(new Adjuster("", -100., 100., 1., 0., iblueR, iyelL)); - chanMixerHLBox->pack_start (*greenhigh); - chanMixerHLBox->pack_start (*bluehigh); - chanMixerMidBox->pack_start (*greenmed); - chanMixerMidBox->pack_start (*bluemed); - chanMixerShadowsBox->pack_start (*greenlow); - chanMixerShadowsBox->pack_start (*bluelow); + chanMixerHLBox->pack_start(*greenhigh); + chanMixerHLBox->pack_start(*bluehigh); + chanMixerMidBox->pack_start(*greenmed); + chanMixerMidBox->pack_start(*bluemed); + chanMixerShadowsBox->pack_start(*greenlow); + chanMixerShadowsBox->pack_start(*bluelow); - greenlow->setAdjusterListener (this); - bluelow->setAdjusterListener (this); - greenmed->setAdjusterListener (this); - bluemed->setAdjusterListener (this); - greenhigh->setAdjusterListener (this); - bluehigh->setAdjusterListener (this); + greenlow->setAdjusterListener(this); + bluelow->setAdjusterListener(this); + greenmed->setAdjusterListener(this); + bluemed->setAdjusterListener(this); + greenhigh->setAdjusterListener(this); + bluehigh->setAdjusterListener(this); resBox->pack_start(*separatorCB, Gtk::PACK_SHRINK); @@ -747,15 +785,15 @@ Wavelet::Wavelet() : //RTImage *resetImg = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); //neutral->set_image(*resetImg); Gtk::Button* const neutral = Gtk::manage(new Gtk::Button(M("TP_COLORTONING_NEUTRAL"))); - neutral->set_tooltip_text (M("TP_COLORTONING_NEUTRAL_TIP")); - neutralconn = neutral->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::neutral_pressed) ); + neutral->set_tooltip_text(M("TP_COLORTONING_NEUTRAL_TIP")); + neutralconn = neutral->signal_pressed().connect(sigc::mem_fun(*this, &Wavelet::neutral_pressed)); neutral->show(); - neutrHBox->pack_start (*neutral, Gtk::PACK_EXPAND_WIDGET); + neutrHBox->pack_start(*neutral, Gtk::PACK_EXPAND_WIDGET); - resBox->pack_start (*neutrHBox); + resBox->pack_start(*neutrHBox); // Final Touchup - Gtk::VBox* const ctboxBA = Gtk::manage (new Gtk::VBox()); + Gtk::VBox* const ctboxBA = Gtk::manage(new Gtk::VBox()); ctboxBA->set_spacing(2); @@ -763,19 +801,20 @@ Wavelet::Wavelet() : //ctboxBA->pack_start(*separatorfin, Gtk::PACK_SHRINK, 2); Gtk::Label* const labmBA = Gtk::manage(new Gtk::Label(M("TP_WAVELET_BATYPE") + ":")); Gtk::HBox* const ctboxFI = Gtk::manage(new Gtk::HBox()); - ctboxFI->pack_start (*labmBA, Gtk::PACK_SHRINK, 1); + ctboxFI->pack_start(*labmBA, Gtk::PACK_SHRINK, 1); - BAmethod->append (M("TP_WAVELET_BANONE")); - BAmethod->append (M("TP_WAVELET_BASLI")); - BAmethod->append (M("TP_WAVELET_BACUR")); - BAmethodconn = BAmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::BAmethodChanged) ); + BAmethod->append(M("TP_WAVELET_BANONE")); + BAmethod->append(M("TP_WAVELET_BASLI")); + BAmethod->append(M("TP_WAVELET_BACUR")); + BAmethodconn = BAmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::BAmethodChanged)); ctboxFI->pack_start(*BAmethod); ctboxBA->pack_start(*ctboxFI); - balance->setAdjusterListener (this); - balance->set_tooltip_text (M("TP_WAVELET_BALANCE_TOOLTIP")); + balance->setAdjusterListener(this); + balance->set_tooltip_text(M("TP_WAVELET_BALANCE_TOOLTIP")); + softradend->setAdjusterListener(this); - opacityCurveEditorW->setCurveListener (this); + opacityCurveEditorW->setCurveListener(this); opacityShape = static_cast(opacityCurveEditorW->addCurve(CT_Flat, "", nullptr, false, false)); opacityShape->setIdentityValue(0.); @@ -786,12 +825,12 @@ Wavelet::Wavelet() : opacityCurveEditorW->curveListComplete(); opacityCurveEditorW->show(); - iter->setAdjusterListener (this); - iter->set_tooltip_text (M("TP_WAVELET_ITER_TOOLTIP")); + iter->setAdjusterListener(this); + iter->set_tooltip_text(M("TP_WAVELET_ITER_TOOLTIP")); - Gtk::HSeparator* const separatorbalend = Gtk::manage (new Gtk::HSeparator()); + Gtk::HSeparator* const separatorbalend = Gtk::manage(new Gtk::HSeparator()); - opacityCurveEditorWL->setCurveListener (this); + opacityCurveEditorWL->setCurveListener(this); opacityShapeWL = static_cast(opacityCurveEditorWL->addCurve(CT_Flat, "", nullptr, false, false)); opacityShapeWL->setIdentityValue(0.); @@ -802,7 +841,7 @@ Wavelet::Wavelet() : opacityCurveEditorWL->curveListComplete(); opacityCurveEditorWL->show(); - curveEditorG->setCurveListener (this); + curveEditorG->setCurveListener(this); clshape = static_cast(curveEditorG->addCurve(CT_Diagonal, M("TP_WAVELET_CURVEEDITOR_CL"))); clshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_CL_TOOLTIP")); @@ -811,54 +850,61 @@ Wavelet::Wavelet() : curveEditorG->curveListComplete(); - tmr->set_active (true); - tmr->set_tooltip_text (M("TP_WAVELET_BALCHRO_TOOLTIP")); - tmrConn = tmr->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::tmrToggled) ); + tmr->set_active(true); + tmr->set_tooltip_text(M("TP_WAVELET_BALCHRO_TOOLTIP")); + tmrConn = tmr->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::tmrToggled)); - ToolParamBlock* const finalBox = Gtk::manage (new ToolParamBlock()); + ToolParamBlock* const finalBox = Gtk::manage(new ToolParamBlock()); - finalBox->pack_start (*ctboxBA); + finalBox->pack_start(*ctboxBA); finalBox->pack_start(*balance); - finalBox->pack_start( *opacityCurveEditorW, Gtk::PACK_SHRINK, 2); + finalBox->pack_start(*opacityCurveEditorW, Gtk::PACK_SHRINK, 2); finalBox->pack_start(*iter); finalBox->pack_start(*tmr); finalBox->pack_start(*separatorbalend, Gtk::PACK_SHRINK, 2); - finalBox->pack_start( *opacityCurveEditorWL, Gtk::PACK_SHRINK, 2); + finalBox->pack_start(*opacityCurveEditorWL, Gtk::PACK_SHRINK, 2); - finalBox->pack_start (*curveEditorG, Gtk::PACK_SHRINK, 4); + finalBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); + finalBox->pack_start(*softradend); //----------------------------- + + expsettings->add(*settingsBox, false); expsettings->setLevel(2); - pack_start (*expsettings); + pack_start(*expsettings); expcontrast->add(*levBox, false); expcontrast->setLevel(2); - pack_start (*expcontrast); + pack_start(*expcontrast); expchroma->add(*chBox, false); expchroma->setLevel(2); - pack_start (*expchroma); + pack_start(*expchroma); exptoning->add(*tonBox, false); exptoning->setLevel(2); - pack_start (*exptoning); + pack_start(*exptoning); expnoise->add(*noiseBox, false); expnoise->setLevel(2); - pack_start (*expnoise); + pack_start(*expnoise); expedge->add(*edgBox, false); expedge->setLevel(2); - pack_start (*expedge); + pack_start(*expedge); + + expclari->add(*clariBox, false); + expclari->setLevel(2); + pack_start(*expclari); expgamut->add(*conBox, false); expgamut->setLevel(2); - pack_start (*expgamut); + pack_start(*expgamut); expresid->add(*resBox, false); expresid->setLevel(2); @@ -869,7 +915,7 @@ Wavelet::Wavelet() : pack_start(*expfinal); } -Wavelet::~Wavelet () +Wavelet::~Wavelet() { idle_register.destroy(); @@ -884,27 +930,26 @@ Wavelet::~Wavelet () } -void Wavelet::wavChanged (double nlevel) +void Wavelet::wavChanged(double nlevel) { if (!batchMode) { idle_register.add( - [this, nlevel]() -> bool - { - wavLabels->set_text( - Glib::ustring::compose( - M("TP_WAVELET_LEVLABEL"), - Glib::ustring::format(std::fixed, std::setprecision(0), nlevel) - ) - ); - return false; - } + [this, nlevel]() -> bool { + wavLabels->set_text( + Glib::ustring::compose( + M("TP_WAVELET_LEVLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(0), nlevel) + ) + ); + return false; + } ); } } // Will only reset the channel mixer // WARNING! In mutiImage mode, and for sliders in ADD mode, this will reset the slider to 0, but not to the default value as in SET mode. -void Wavelet::neutral_pressed () +void Wavelet::neutral_pressed() { disableListener(); greenlow->resetValue(false); @@ -917,11 +962,11 @@ void Wavelet::neutral_pressed () enableListener(); if (listener && getEnabled()) { - listener->panelChanged (EvWavNeutral, M("GENERAL_RESET")); + listener->panelChanged(EvWavNeutral, M("GENERAL_RESET")); } } -void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) +void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) { /***************************************************************************************************** @@ -930,7 +975,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) * *****************************************************************************************************/ - disableListener (); + disableListener(); Lmethodconn.block(true); CLmethodconn.block(true); Backmethodconn.block(true); @@ -945,6 +990,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) TMmethodconn.block(true); HSmethodconn.block(true); MedgreinfConn.block(true); + ushamethodconn.block(true); cbenabConn.block(true); enableChromaConn.block(true); enableContrastConn.block(true); @@ -962,65 +1008,74 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) //HSmethod->set_active (1); // Note: default values are controlled in rtengine::ProcParams::SetDefaults if (pp->wavelet.HSmethod == "without") { - HSmethod->set_active (0); + HSmethod->set_active(0); } else if (pp->wavelet.HSmethod == "with") { - HSmethod->set_active (1); + HSmethod->set_active(1); } //CHmethod->set_active (1); if (pp->wavelet.CHmethod == "without") { - CHmethod->set_active (0); + CHmethod->set_active(0); } else if (pp->wavelet.CHmethod == "with") { - CHmethod->set_active (1); + CHmethod->set_active(1); } else if (pp->wavelet.CHmethod == "link") { - CHmethod->set_active (2); + CHmethod->set_active(2); } //Medgreinf->set_active (1); if (pp->wavelet.Medgreinf == "more") { - Medgreinf->set_active (0); + Medgreinf->set_active(0); } else if (pp->wavelet.Medgreinf == "none") { - Medgreinf->set_active (1); + Medgreinf->set_active(1); } else if (pp->wavelet.Medgreinf == "less") { - Medgreinf->set_active (2); + Medgreinf->set_active(2); + } + + //ushamethod + if (pp->wavelet.ushamethod == "none") { + ushamethod->set_active(0); + } else if (pp->wavelet.ushamethod == "sharp") { + ushamethod->set_active(1); + } else if (pp->wavelet.ushamethod == "clari") { + ushamethod->set_active(2); } //CHSLmethod->set_active (1); if (pp->wavelet.CHSLmethod == "SL") { - CHSLmethod->set_active (0); + CHSLmethod->set_active(0); } else if (pp->wavelet.CHSLmethod == "CU") { - CHSLmethod->set_active (1); + CHSLmethod->set_active(1); } //EDmethod->set_active (1); if (pp->wavelet.EDmethod == "SL") { - EDmethod->set_active (0); + EDmethod->set_active(0); } else if (pp->wavelet.EDmethod == "CU") { - EDmethod->set_active (1); + EDmethod->set_active(1); } if (pp->wavelet.NPmethod == "none") { - NPmethod->set_active (0); + NPmethod->set_active(0); } else if (pp->wavelet.NPmethod == "low") { - NPmethod->set_active (1); + NPmethod->set_active(1); } else if (pp->wavelet.NPmethod == "high") { - NPmethod->set_active (2); + NPmethod->set_active(2); } //BAmethod->set_active (0); if (pp->wavelet.BAmethod == "none") { - BAmethod->set_active (0); + BAmethod->set_active(0); } else if (pp->wavelet.BAmethod == "sli") { - BAmethod->set_active (1); + BAmethod->set_active(1); } else if (pp->wavelet.BAmethod == "cur") { - BAmethod->set_active (2); + BAmethod->set_active(2); } //TMmethod->set_active (1); if (pp->wavelet.TMmethod == "cont") { - TMmethod->set_active (0); + TMmethod->set_active(0); } else if (pp->wavelet.TMmethod == "tm") { - TMmethod->set_active (1); + TMmethod->set_active(1); } // else if (pp->wavelet.TMmethod=="both") @@ -1028,99 +1083,100 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) //Backmethod->set_active (3); if (pp->wavelet.Backmethod == "black") { - Backmethod->set_active (0); + Backmethod->set_active(0); } else if (pp->wavelet.Backmethod == "grey") { - Backmethod->set_active (1); + Backmethod->set_active(1); } else if (pp->wavelet.Backmethod == "resid") { - Backmethod->set_active (2); + Backmethod->set_active(2); } //CLmethod->set_active (3); if (pp->wavelet.CLmethod == "one") { - CLmethod->set_active (0); + CLmethod->set_active(0); } else if (pp->wavelet.CLmethod == "inf") { - CLmethod->set_active (1); + CLmethod->set_active(1); } else if (pp->wavelet.CLmethod == "sup") { - CLmethod->set_active (2); + CLmethod->set_active(2); } else if (pp->wavelet.CLmethod == "all") { - CLmethod->set_active (3); + CLmethod->set_active(3); } //Tilesmethod->set_active (2); if (pp->wavelet.Tilesmethod == "full") { - Tilesmethod->set_active (0); + Tilesmethod->set_active(0); } else if (pp->wavelet.Tilesmethod == "big") { - Tilesmethod->set_active (1); + Tilesmethod->set_active(1); } else if (pp->wavelet.Tilesmethod == "lit") { - Tilesmethod->set_active (2); + Tilesmethod->set_active(2); } //daubcoeffmethod->set_active (4); if (pp->wavelet.daubcoeffmethod == "2_") { - daubcoeffmethod->set_active (0); + daubcoeffmethod->set_active(0); } else if (pp->wavelet.daubcoeffmethod == "4_") { - daubcoeffmethod->set_active (1); + daubcoeffmethod->set_active(1); } else if (pp->wavelet.daubcoeffmethod == "6_") { - daubcoeffmethod->set_active (2); + daubcoeffmethod->set_active(2); } else if (pp->wavelet.daubcoeffmethod == "10_") { - daubcoeffmethod->set_active (3); + daubcoeffmethod->set_active(3); } else if (pp->wavelet.daubcoeffmethod == "14_") { - daubcoeffmethod->set_active (4); + daubcoeffmethod->set_active(4); } //Dirmethod->set_active (3); if (pp->wavelet.Dirmethod == "one") { - Dirmethod->set_active (0); + Dirmethod->set_active(0); } else if (pp->wavelet.Dirmethod == "two") { - Dirmethod->set_active (1); + Dirmethod->set_active(1); } else if (pp->wavelet.Dirmethod == "thr") { - Dirmethod->set_active (2); + Dirmethod->set_active(2); } else if (pp->wavelet.Dirmethod == "all") { - Dirmethod->set_active (3); + Dirmethod->set_active(3); } int selectedLevel = pp->wavelet.Lmethod - 1; - Lmethod->set_active (selectedLevel == -1 ? 4 : selectedLevel); + Lmethod->set_active(selectedLevel == -1 ? 4 : selectedLevel); - ccshape->setCurve (pp->wavelet.ccwcurve); - opacityShapeRG->setCurve (pp->wavelet.opacityCurveRG); - opacityShapeBY->setCurve (pp->wavelet.opacityCurveBY); - opacityShape->setCurve (pp->wavelet.opacityCurveW); - opacityShapeWL->setCurve (pp->wavelet.opacityCurveWL); - hhshape->setCurve (pp->wavelet.hhcurve); - Chshape->setCurve (pp->wavelet.Chcurve); - clshape->setCurve (pp->wavelet.wavclCurve); - expcontrast->setEnabled (pp->wavelet.expcontrast); - expchroma->setEnabled (pp->wavelet.expchroma); - expedge->setEnabled (pp->wavelet.expedge); - expresid->setEnabled (pp->wavelet.expresid); - expfinal->setEnabled (pp->wavelet.expfinal); - exptoning->setEnabled (pp->wavelet.exptoning); - expnoise->setEnabled (pp->wavelet.expnoise); + ccshape->setCurve(pp->wavelet.ccwcurve); + opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG); + opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY); + opacityShape->setCurve(pp->wavelet.opacityCurveW); + opacityShapeWL->setCurve(pp->wavelet.opacityCurveWL); + hhshape->setCurve(pp->wavelet.hhcurve); + Chshape->setCurve(pp->wavelet.Chcurve); + clshape->setCurve(pp->wavelet.wavclCurve); + expcontrast->setEnabled(pp->wavelet.expcontrast); + expchroma->setEnabled(pp->wavelet.expchroma); + expedge->setEnabled(pp->wavelet.expedge); + expresid->setEnabled(pp->wavelet.expresid); + expfinal->setEnabled(pp->wavelet.expfinal); + exptoning->setEnabled(pp->wavelet.exptoning); + expnoise->setEnabled(pp->wavelet.expnoise); + expclari->setEnabled(pp->wavelet.expclari); setEnabled(pp->wavelet.enabled); - avoidConn.block (true); - avoid->set_active (pp->wavelet.avoid); - avoidConn.block (false); - tmrConn.block (true); - tmr->set_active (pp->wavelet.tmr); - tmrConn.block (false); - medianConn.block (true); - median->set_active (pp->wavelet.median); - medianConn.block (false); - medianlevConn.block (true); - medianlev->set_active (pp->wavelet.medianlev); - medianlevConn.block (false); - linkedgConn.block (true); - linkedg->set_active (pp->wavelet.linkedg); - linkedgConn.block (false); - cbenabConn.block (true); - cbenab->set_active (pp->wavelet.cbenab); - cbenabConn.block (false); + avoidConn.block(true); + avoid->set_active(pp->wavelet.avoid); + avoidConn.block(false); + tmrConn.block(true); + tmr->set_active(pp->wavelet.tmr); + tmrConn.block(false); + medianConn.block(true); + median->set_active(pp->wavelet.median); + medianConn.block(false); + medianlevConn.block(true); + medianlev->set_active(pp->wavelet.medianlev); + medianlevConn.block(false); + linkedgConn.block(true); + linkedg->set_active(pp->wavelet.linkedg); + linkedgConn.block(false); + cbenabConn.block(true); + cbenab->set_active(pp->wavelet.cbenab); + cbenabConn.block(false); - lipstConn.block (true); - lipst->set_active (pp->wavelet.lipst); - lipstConn.block (false); + lipstConn.block(true); + lipst->set_active(pp->wavelet.lipst); + lipstConn.block(false); //edgreinfConn.block (true); //edgreinf->set_active (pp->wavelet.edgreinf); //edgreinfConn.block (false); @@ -1132,22 +1188,22 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) lastlipst = pp->wavelet.lipst; lastavoid = pp->wavelet.avoid; lasttmr = pp->wavelet.tmr; - rescon->setValue (pp->wavelet.rescon); - resconH->setValue (pp->wavelet.resconH); - reschro->setValue (pp->wavelet.reschro); - tmrs->setValue (pp->wavelet.tmrs); - gamma->setValue (pp->wavelet.gamma); - sup->setValue (pp->wavelet.sup); - sky->setValue (pp->wavelet.sky); - thres->setValue (pp->wavelet.thres); - chroma->setValue (pp->wavelet.chroma); - chro->setValue (pp->wavelet.chro); - contrast->setValue (pp->wavelet.contrast); - edgrad->setValue (pp->wavelet.edgrad); - edgval->setValue (pp->wavelet.edgval); - edgthresh->setValue (pp->wavelet.edgthresh); - thr->setValue (pp->wavelet.thr); - thrH->setValue (pp->wavelet.thrH); + rescon->setValue(pp->wavelet.rescon); + resconH->setValue(pp->wavelet.resconH); + reschro->setValue(pp->wavelet.reschro); + tmrs->setValue(pp->wavelet.tmrs); + gamma->setValue(pp->wavelet.gamma); + sup->setValue(pp->wavelet.sup); + sky->setValue(pp->wavelet.sky); + thres->setValue(pp->wavelet.thres); + chroma->setValue(pp->wavelet.chroma); + chro->setValue(pp->wavelet.chro); + contrast->setValue(pp->wavelet.contrast); + edgrad->setValue(pp->wavelet.edgrad); + edgval->setValue(pp->wavelet.edgval); + edgthresh->setValue(pp->wavelet.edgthresh); + thr->setValue(pp->wavelet.thr); + thrH->setValue(pp->wavelet.thrH); skinprotect->setValue(pp->wavelet.skinprotect); hueskin->setValue(pp->wavelet.hueskin); hueskin2->setValue(pp->wavelet.hueskin2); @@ -1164,12 +1220,16 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) satlev->setValue(pp->wavelet.satlev); edgcont->setValue(pp->wavelet.edgcont); - greenlow->setValue (pp->wavelet.greenlow); - bluelow->setValue (pp->wavelet.bluelow); - greenmed->setValue (pp->wavelet.greenmed); - bluemed->setValue (pp->wavelet.bluemed); - greenhigh->setValue (pp->wavelet.greenhigh); - bluehigh->setValue (pp->wavelet.bluehigh); + greenlow->setValue(pp->wavelet.greenlow); + bluelow->setValue(pp->wavelet.bluelow); + greenmed->setValue(pp->wavelet.greenmed); + bluemed->setValue(pp->wavelet.bluemed); + greenhigh->setValue(pp->wavelet.greenhigh); + bluehigh->setValue(pp->wavelet.bluehigh); + mergeL->setValue(pp->wavelet.mergeL); + mergeC->setValue(pp->wavelet.mergeC); + softrad->setValue(pp->wavelet.softrad); + softradend->setValue(pp->wavelet.softradend); level0noise->setValue(pp->wavelet.level0noise); level1noise->setValue(pp->wavelet.level1noise); @@ -1250,83 +1310,92 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) Medgreinf->set_active_text(M("GENERAL_UNCHANGED")); } - set_inconsistent (multiImage && !pedited->wavelet.enabled); - ccshape->setUnChanged (!pedited->wavelet.ccwcurve); - expcontrast->set_inconsistent (!pedited->wavelet.expcontrast); - expchroma->set_inconsistent (!pedited->wavelet.expchroma); - expedge->set_inconsistent (!pedited->wavelet.expedge); - expresid->set_inconsistent (!pedited->wavelet.expresid); - expfinal->set_inconsistent (!pedited->wavelet.expfinal); - exptoning->set_inconsistent (!pedited->wavelet.exptoning); - expnoise->set_inconsistent (!pedited->wavelet.expnoise); - opacityShapeRG->setCurve (pp->wavelet.opacityCurveRG); - opacityShapeBY->setCurve (pp->wavelet.opacityCurveBY); - opacityShape->setCurve (pp->wavelet.opacityCurveW); - opacityShapeWL->setCurve (pp->wavelet.opacityCurveWL); - hhshape->setUnChanged (!pedited->wavelet.hhcurve); - Chshape->setUnChanged (!pedited->wavelet.Chcurve); - clshape->setUnChanged (!pedited->wavelet.wavclCurve); - avoid->set_inconsistent (!pedited->wavelet.avoid); - tmr->set_inconsistent (!pedited->wavelet.tmr); - edgthresh->setEditedState (pedited->wavelet.edgthresh ? Edited : UnEdited); - rescon->setEditedState (pedited->wavelet.rescon ? Edited : UnEdited); - resconH->setEditedState (pedited->wavelet.resconH ? Edited : UnEdited); - reschro->setEditedState (pedited->wavelet.reschro ? Edited : UnEdited); - tmrs->setEditedState (pedited->wavelet.tmrs ? Edited : UnEdited); - gamma->setEditedState (pedited->wavelet.gamma ? Edited : UnEdited); - sup->setEditedState (pedited->wavelet.sup ? Edited : UnEdited); - sky->setEditedState (pedited->wavelet.sky ? Edited : UnEdited); - thres->setEditedState (pedited->wavelet.thres ? Edited : UnEdited); - balance->setEditedState (pedited->wavelet.balance ? Edited : UnEdited); - iter->setEditedState (pedited->wavelet.iter ? Edited : UnEdited); - threshold->setEditedState (pedited->wavelet.threshold ? Edited : UnEdited); - threshold2->setEditedState (pedited->wavelet.threshold2 ? Edited : UnEdited); - edgedetect->setEditedState (pedited->wavelet.edgedetect ? Edited : UnEdited); - edgedetectthr->setEditedState (pedited->wavelet.edgedetectthr ? Edited : UnEdited); - edgedetectthr2->setEditedState (pedited->wavelet.edgedetectthr2 ? Edited : UnEdited); - edgesensi->setEditedState (pedited->wavelet.edgesensi ? Edited : UnEdited); - edgeampli->setEditedState (pedited->wavelet.edgeampli ? Edited : UnEdited); - chroma->setEditedState (pedited->wavelet.chroma ? Edited : UnEdited); - chro->setEditedState (pedited->wavelet.chro ? Edited : UnEdited); - - greenlow->setEditedState (pedited->wavelet.greenlow ? Edited : UnEdited); - bluelow->setEditedState (pedited->wavelet.bluelow ? Edited : UnEdited); - greenmed->setEditedState (pedited->wavelet.greenmed ? Edited : UnEdited); - bluemed->setEditedState (pedited->wavelet.bluemed ? Edited : UnEdited); - greenhigh->setEditedState (pedited->wavelet.greenhigh ? Edited : UnEdited); - bluehigh->setEditedState (pedited->wavelet.bluehigh ? Edited : UnEdited); - - median->set_inconsistent (!pedited->wavelet.median); - medianlev->set_inconsistent (!pedited->wavelet.medianlev); - linkedg->set_inconsistent (!pedited->wavelet.linkedg); -// edgreinf->set_inconsistent (!pedited->wavelet.edgreinf); - cbenab->set_inconsistent (!pedited->wavelet.cbenab); - lipst->set_inconsistent (!pedited->wavelet.lipst); - contrast->setEditedState (pedited->wavelet.contrast ? Edited : UnEdited); - edgrad->setEditedState (pedited->wavelet.edgrad ? Edited : UnEdited); - edgval->setEditedState (pedited->wavelet.edgval ? Edited : UnEdited); - thr->setEditedState (pedited->wavelet.thr ? Edited : UnEdited); - thrH->setEditedState (pedited->wavelet.thrH ? Edited : UnEdited); - skinprotect->setEditedState (pedited->wavelet.skinprotect ? Edited : UnEdited); - hueskin->setEditedState (pedited->wavelet.hueskin ? Edited : UnEdited); - hueskin2->setEditedState (pedited->wavelet.hueskin2 ? Edited : UnEdited); - hllev->setEditedState (pedited->wavelet.hllev ? Edited : UnEdited); - bllev->setEditedState (pedited->wavelet.bllev ? Edited : UnEdited); - pastlev->setEditedState (pedited->wavelet.pastlev ? Edited : UnEdited); - satlev->setEditedState (pedited->wavelet.satlev ? Edited : UnEdited); - strength->setEditedState(pedited->wavelet.strength ? Edited : UnEdited); - edgcont->setEditedState (pedited->wavelet.edgcont ? Edited : UnEdited); - level0noise->setEditedState (pedited->wavelet.level0noise ? Edited : UnEdited); - level1noise->setEditedState (pedited->wavelet.level1noise ? Edited : UnEdited); - level2noise->setEditedState (pedited->wavelet.level2noise ? Edited : UnEdited); - level3noise->setEditedState (pedited->wavelet.level3noise ? Edited : UnEdited); - - for(int i = 0; i < 9; i++) { - correction[i]->setEditedState (pedited->wavelet.c[i] ? Edited : UnEdited); + if (!pedited->wavelet.ushamethod) { + ushamethod->set_active_text(M("GENERAL_UNCHANGED")); } - for(int i = 0; i < 9; i++) { - correctionch[i]->setEditedState (pedited->wavelet.ch[i] ? Edited : UnEdited); + set_inconsistent(multiImage && !pedited->wavelet.enabled); + ccshape->setUnChanged(!pedited->wavelet.ccwcurve); + expcontrast->set_inconsistent(!pedited->wavelet.expcontrast); + expchroma->set_inconsistent(!pedited->wavelet.expchroma); + expedge->set_inconsistent(!pedited->wavelet.expedge); + expresid->set_inconsistent(!pedited->wavelet.expresid); + expfinal->set_inconsistent(!pedited->wavelet.expfinal); + expclari->set_inconsistent(!pedited->wavelet.expclari); + exptoning->set_inconsistent(!pedited->wavelet.exptoning); + expnoise->set_inconsistent(!pedited->wavelet.expnoise); + opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG); + opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY); + opacityShape->setCurve(pp->wavelet.opacityCurveW); + opacityShapeWL->setCurve(pp->wavelet.opacityCurveWL); + hhshape->setUnChanged(!pedited->wavelet.hhcurve); + Chshape->setUnChanged(!pedited->wavelet.Chcurve); + clshape->setUnChanged(!pedited->wavelet.wavclCurve); + avoid->set_inconsistent(!pedited->wavelet.avoid); + tmr->set_inconsistent(!pedited->wavelet.tmr); + edgthresh->setEditedState(pedited->wavelet.edgthresh ? Edited : UnEdited); + rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited); + resconH->setEditedState(pedited->wavelet.resconH ? Edited : UnEdited); + reschro->setEditedState(pedited->wavelet.reschro ? Edited : UnEdited); + tmrs->setEditedState(pedited->wavelet.tmrs ? Edited : UnEdited); + gamma->setEditedState(pedited->wavelet.gamma ? Edited : UnEdited); + sup->setEditedState(pedited->wavelet.sup ? Edited : UnEdited); + sky->setEditedState(pedited->wavelet.sky ? Edited : UnEdited); + thres->setEditedState(pedited->wavelet.thres ? Edited : UnEdited); + balance->setEditedState(pedited->wavelet.balance ? Edited : UnEdited); + iter->setEditedState(pedited->wavelet.iter ? Edited : UnEdited); + threshold->setEditedState(pedited->wavelet.threshold ? Edited : UnEdited); + threshold2->setEditedState(pedited->wavelet.threshold2 ? Edited : UnEdited); + edgedetect->setEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited); + edgedetectthr->setEditedState(pedited->wavelet.edgedetectthr ? Edited : UnEdited); + edgedetectthr2->setEditedState(pedited->wavelet.edgedetectthr2 ? Edited : UnEdited); + edgesensi->setEditedState(pedited->wavelet.edgesensi ? Edited : UnEdited); + edgeampli->setEditedState(pedited->wavelet.edgeampli ? Edited : UnEdited); + chroma->setEditedState(pedited->wavelet.chroma ? Edited : UnEdited); + chro->setEditedState(pedited->wavelet.chro ? Edited : UnEdited); + + greenlow->setEditedState(pedited->wavelet.greenlow ? Edited : UnEdited); + bluelow->setEditedState(pedited->wavelet.bluelow ? Edited : UnEdited); + greenmed->setEditedState(pedited->wavelet.greenmed ? Edited : UnEdited); + bluemed->setEditedState(pedited->wavelet.bluemed ? Edited : UnEdited); + greenhigh->setEditedState(pedited->wavelet.greenhigh ? Edited : UnEdited); + bluehigh->setEditedState(pedited->wavelet.bluehigh ? Edited : UnEdited); + mergeL->setEditedState(pedited->wavelet.mergeL ? Edited : UnEdited); + mergeC->setEditedState(pedited->wavelet.mergeC ? Edited : UnEdited); + softrad->setEditedState(pedited->wavelet.softrad ? Edited : UnEdited); + softradend->setEditedState(pedited->wavelet.softradend ? Edited : UnEdited); + + median->set_inconsistent(!pedited->wavelet.median); + medianlev->set_inconsistent(!pedited->wavelet.medianlev); + linkedg->set_inconsistent(!pedited->wavelet.linkedg); +// edgreinf->set_inconsistent (!pedited->wavelet.edgreinf); + cbenab->set_inconsistent(!pedited->wavelet.cbenab); + lipst->set_inconsistent(!pedited->wavelet.lipst); + contrast->setEditedState(pedited->wavelet.contrast ? Edited : UnEdited); + edgrad->setEditedState(pedited->wavelet.edgrad ? Edited : UnEdited); + edgval->setEditedState(pedited->wavelet.edgval ? Edited : UnEdited); + thr->setEditedState(pedited->wavelet.thr ? Edited : UnEdited); + thrH->setEditedState(pedited->wavelet.thrH ? Edited : UnEdited); + skinprotect->setEditedState(pedited->wavelet.skinprotect ? Edited : UnEdited); + hueskin->setEditedState(pedited->wavelet.hueskin ? Edited : UnEdited); + hueskin2->setEditedState(pedited->wavelet.hueskin2 ? Edited : UnEdited); + hllev->setEditedState(pedited->wavelet.hllev ? Edited : UnEdited); + bllev->setEditedState(pedited->wavelet.bllev ? Edited : UnEdited); + pastlev->setEditedState(pedited->wavelet.pastlev ? Edited : UnEdited); + satlev->setEditedState(pedited->wavelet.satlev ? Edited : UnEdited); + strength->setEditedState(pedited->wavelet.strength ? Edited : UnEdited); + edgcont->setEditedState(pedited->wavelet.edgcont ? Edited : UnEdited); + level0noise->setEditedState(pedited->wavelet.level0noise ? Edited : UnEdited); + level1noise->setEditedState(pedited->wavelet.level1noise ? Edited : UnEdited); + level2noise->setEditedState(pedited->wavelet.level2noise ? Edited : UnEdited); + level3noise->setEditedState(pedited->wavelet.level3noise ? Edited : UnEdited); + + for (int i = 0; i < 9; i++) { + correction[i]->setEditedState(pedited->wavelet.c[i] ? Edited : UnEdited); + } + + for (int i = 0; i < 9; i++) { + correctionch[i]->setEditedState(pedited->wavelet.ch[i] ? Edited : UnEdited); } } @@ -1341,20 +1410,20 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) y = thres->getValue(); int z; - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correction[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correction[z]->show(); } if (pp->wavelet.CHSLmethod == "SL") { - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correctionch[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correctionch[z]->show(); } } @@ -1370,16 +1439,16 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) TMmethodUpdateUI(); //BackmethodUpdateUI(); CLmethodUpdateUI(); - lipstUpdateUI (); + lipstUpdateUI(); //TilesmethodUpdateUI(); //daubcoeffmethodUpdateUI(); //DirmethodUpdateUI(); //LmethodUpdateUI(); - enabledUpdateUI (); - medianlevUpdateUI (); - cbenabUpdateUI (); + enabledUpdateUI(); + medianlevUpdateUI(); + cbenabUpdateUI(); - if(z == 9) { + if (z == 9) { sup->show(); } else { sup->hide(); @@ -1406,6 +1475,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) HSmethodconn.block(false); Dirmethodconn.block(false); MedgreinfConn.block(false); + ushamethodconn.block(false); enableChromaConn.block(false); enableContrastConn.block(false); enableEdgeConn.block(false); @@ -1414,10 +1484,10 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) enableResidConn.block(false); enableToningConn.block(false); - enableListener (); + enableListener(); } -void Wavelet::setEditProvider (EditDataProvider *provider) +void Wavelet::setEditProvider(EditDataProvider *provider) { ccshape->setEditProvider(provider); opacityShapeRG->setEditProvider(provider); @@ -1429,19 +1499,19 @@ void Wavelet::setEditProvider (EditDataProvider *provider) clshape->setEditProvider(provider); } -void Wavelet::autoOpenCurve () +void Wavelet::autoOpenCurve() { ccshape->openIfNonlinear(); //opacityShapeRG->openIfNonlinear(); //opacityShapeBY->openIfNonlinear(); } -void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) +void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) { pp->wavelet.enabled = getEnabled(); - pp->wavelet.avoid = avoid->get_active (); - pp->wavelet.tmr = tmr->get_active (); + pp->wavelet.avoid = avoid->get_active(); + pp->wavelet.tmr = tmr->get_active(); pp->wavelet.rescon = rescon->getValue(); pp->wavelet.resconH = resconH->getValue(); pp->wavelet.reschro = reschro->getValue(); @@ -1452,12 +1522,12 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pp->wavelet.thres = thres->getValue(); pp->wavelet.chroma = chroma->getValue(); pp->wavelet.chro = chro->getValue(); - pp->wavelet.median = median->get_active (); - pp->wavelet.medianlev = medianlev->get_active (); - pp->wavelet.linkedg = linkedg->get_active (); + pp->wavelet.median = median->get_active(); + pp->wavelet.medianlev = medianlev->get_active(); + pp->wavelet.linkedg = linkedg->get_active(); // pp->wavelet.edgreinf = edgreinf->get_active (); - pp->wavelet.cbenab = cbenab->get_active (); - pp->wavelet.lipst = lipst->get_active (); + pp->wavelet.cbenab = cbenab->get_active(); + pp->wavelet.lipst = lipst->get_active(); pp->wavelet.contrast = contrast->getValue(); pp->wavelet.edgrad = edgrad->getValue(); pp->wavelet.edgval = edgval->getValue(); @@ -1481,24 +1551,28 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pp->wavelet.level1noise = level1noise->getValue (); pp->wavelet.level2noise = level2noise->getValue (); pp->wavelet.level3noise = level3noise->getValue (); - pp->wavelet.ccwcurve = ccshape->getCurve (); - pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve (); - pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve (); - pp->wavelet.opacityCurveW = opacityShape->getCurve (); - pp->wavelet.opacityCurveWL = opacityShapeWL->getCurve (); - pp->wavelet.hhcurve = hhshape->getCurve (); - pp->wavelet.Chcurve = Chshape->getCurve (); + pp->wavelet.ccwcurve = ccshape->getCurve(); + pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve(); + pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve(); + pp->wavelet.opacityCurveW = opacityShape->getCurve(); + pp->wavelet.opacityCurveWL = opacityShapeWL->getCurve(); + pp->wavelet.hhcurve = hhshape->getCurve(); + pp->wavelet.Chcurve = Chshape->getCurve(); pp->wavelet.pastlev = pastlev->getValue (); pp->wavelet.satlev = satlev->getValue (); pp->wavelet.strength = (int) strength->getValue(); pp->wavelet.balance = (int) balance->getValue(); - pp->wavelet.greenlow = greenlow->getValue (); - pp->wavelet.bluelow = bluelow->getValue (); - pp->wavelet.greenmed = greenmed->getValue (); - pp->wavelet.bluemed = bluemed->getValue (); - pp->wavelet.greenhigh = greenhigh->getValue (); - pp->wavelet.bluehigh = bluehigh->getValue (); + pp->wavelet.greenlow = greenlow->getValue(); + pp->wavelet.bluelow = bluelow->getValue(); + pp->wavelet.greenmed = greenmed->getValue(); + pp->wavelet.bluemed = bluemed->getValue(); + pp->wavelet.greenhigh = greenhigh->getValue(); + pp->wavelet.bluehigh = bluehigh->getValue(); + pp->wavelet.mergeL = mergeL->getValue(); + pp->wavelet.mergeC = mergeC->getValue(); + pp->wavelet.softrad = softrad->getValue(); + pp->wavelet.softradend = softradend->getValue(); pp->wavelet.expcontrast = expcontrast->getEnabled(); pp->wavelet.expchroma = expchroma->getEnabled(); pp->wavelet.expedge = expedge->getEnabled(); @@ -1506,9 +1580,10 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pp->wavelet.expfinal = expfinal->getEnabled(); pp->wavelet.exptoning = exptoning->getEnabled(); pp->wavelet.expnoise = expnoise->getEnabled(); + pp->wavelet.expclari = expclari->getEnabled(); pp->wavelet.iter = (int) iter->getValue(); - pp->wavelet.wavclCurve = clshape->getCurve (); + pp->wavelet.wavclCurve = clshape->getCurve(); for (int i = 0; i < 9; i++) { pp->wavelet.c[i] = (int) correction[i]->getValue(); @@ -1528,6 +1603,7 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.cbenab = !cbenab->get_inconsistent(); pedited->wavelet.lipst = !lipst->get_inconsistent(); pedited->wavelet.Medgreinf = Medgreinf->get_active_text() != M("GENERAL_UNCHANGED"); + pedited->wavelet.ushamethod = ushamethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.Lmethod = Lmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.CLmethod = CLmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.Backmethod = Backmethod->get_active_text() != M("GENERAL_UNCHANGED"); @@ -1564,35 +1640,39 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.edgval = edgval->getEditedState(); pedited->wavelet.thr = thr->getEditedState(); pedited->wavelet.thrH = thrH->getEditedState(); - pedited->wavelet.hueskin = hueskin->getEditedState (); - pedited->wavelet.hueskin2 = hueskin2->getEditedState (); + pedited->wavelet.hueskin = hueskin->getEditedState(); + pedited->wavelet.hueskin2 = hueskin2->getEditedState(); pedited->wavelet.skinprotect = skinprotect->getEditedState(); - pedited->wavelet.hllev = hllev->getEditedState (); - pedited->wavelet.ccwcurve = !ccshape->isUnChanged (); - pedited->wavelet.edgcont = edgcont->getEditedState (); - pedited->wavelet.level0noise = level0noise->getEditedState (); - pedited->wavelet.level1noise = level1noise->getEditedState (); - pedited->wavelet.level2noise = level2noise->getEditedState (); - pedited->wavelet.level3noise = level3noise->getEditedState (); - pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged (); - pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged (); - pedited->wavelet.opacityCurveW = !opacityShape->isUnChanged (); - pedited->wavelet.opacityCurveWL = !opacityShapeWL->isUnChanged (); - pedited->wavelet.hhcurve = !hhshape->isUnChanged (); - pedited->wavelet.Chcurve = !Chshape->isUnChanged (); - pedited->wavelet.bllev = bllev->getEditedState (); - pedited->wavelet.pastlev = pastlev->getEditedState (); - pedited->wavelet.satlev = satlev->getEditedState (); - pedited->wavelet.strength = strength->getEditedState (); - pedited->wavelet.greenlow = greenlow->getEditedState (); - pedited->wavelet.bluelow = bluelow->getEditedState (); - pedited->wavelet.greenmed = greenmed->getEditedState (); - pedited->wavelet.bluemed = bluemed->getEditedState (); - pedited->wavelet.greenhigh = greenhigh->getEditedState (); - pedited->wavelet.bluehigh = bluehigh->getEditedState (); - pedited->wavelet.balance = balance->getEditedState (); - pedited->wavelet.iter = iter->getEditedState (); - pedited->wavelet.wavclCurve = !clshape->isUnChanged (); + pedited->wavelet.hllev = hllev->getEditedState(); + pedited->wavelet.ccwcurve = !ccshape->isUnChanged(); + pedited->wavelet.edgcont = edgcont->getEditedState(); + pedited->wavelet.level0noise = level0noise->getEditedState(); + pedited->wavelet.level1noise = level1noise->getEditedState(); + pedited->wavelet.level2noise = level2noise->getEditedState(); + pedited->wavelet.level3noise = level3noise->getEditedState(); + pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged(); + pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged(); + pedited->wavelet.opacityCurveW = !opacityShape->isUnChanged(); + pedited->wavelet.opacityCurveWL = !opacityShapeWL->isUnChanged(); + pedited->wavelet.hhcurve = !hhshape->isUnChanged(); + pedited->wavelet.Chcurve = !Chshape->isUnChanged(); + pedited->wavelet.bllev = bllev->getEditedState(); + pedited->wavelet.pastlev = pastlev->getEditedState(); + pedited->wavelet.satlev = satlev->getEditedState(); + pedited->wavelet.strength = strength->getEditedState(); + pedited->wavelet.greenlow = greenlow->getEditedState(); + pedited->wavelet.bluelow = bluelow->getEditedState(); + pedited->wavelet.greenmed = greenmed->getEditedState(); + pedited->wavelet.bluemed = bluemed->getEditedState(); + pedited->wavelet.greenhigh = greenhigh->getEditedState(); + pedited->wavelet.bluehigh = bluehigh->getEditedState(); + pedited->wavelet.mergeL = mergeL->getEditedState(); + pedited->wavelet.mergeC = mergeC->getEditedState(); + pedited->wavelet.softrad = softrad->getEditedState(); + pedited->wavelet.softradend = softradend->getEditedState(); + pedited->wavelet.balance = balance->getEditedState(); + pedited->wavelet.iter = iter->getEditedState(); + pedited->wavelet.wavclCurve = !clshape->isUnChanged(); pedited->wavelet.expcontrast = !expcontrast->get_inconsistent(); pedited->wavelet.expchroma = !expchroma->get_inconsistent(); pedited->wavelet.expedge = !expedge->get_inconsistent(); @@ -1600,12 +1680,13 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.expfinal = !expfinal->get_inconsistent(); pedited->wavelet.exptoning = !exptoning->get_inconsistent(); pedited->wavelet.expnoise = !expnoise->get_inconsistent(); + pedited->wavelet.expclari = !expclari->get_inconsistent(); - for(int i = 0; i < 9; i++) { + for (int i = 0; i < 9; i++) { pedited->wavelet.c[i] = correction[i]->getEditedState(); } - for(int i = 0; i < 9; i++) { + for (int i = 0; i < 9; i++) { pedited->wavelet.ch[i] = correctionch[i]->getEditedState(); } @@ -1627,6 +1708,14 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pp->wavelet.Medgreinf = "less"; } + if (ushamethod->get_active_row_number() == 0) { + pp->wavelet.ushamethod = "none"; + } else if (ushamethod->get_active_row_number() == 1) { + pp->wavelet.ushamethod = "sharp"; + } else if (ushamethod->get_active_row_number() == 2) { + pp->wavelet.ushamethod = "clari"; + } + if (CHSLmethod->get_active_row_number() == 0) { pp->wavelet.CHSLmethod = "SL"; } else if (CHSLmethod->get_active_row_number() == 1) { @@ -1721,31 +1810,31 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) pp->wavelet.Lmethod = Lmethod->get_active_row_number() + 1; } -void Wavelet::curveChanged (CurveEditor* ce) +void Wavelet::curveChanged(CurveEditor* ce) { if (listener && getEnabled()) { if (ce == ccshape) { - listener->panelChanged (EvWavCCCurve, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavCCCurve, M("HISTORY_CUSTOMCURVE")); } else if (ce == opacityShapeRG) { - listener->panelChanged (EvWavColor, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavColor, M("HISTORY_CUSTOMCURVE")); } else if (ce == opacityShapeBY) { - listener->panelChanged (EvWavOpac, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavOpac, M("HISTORY_CUSTOMCURVE")); } else if (ce == opacityShape) { - listener->panelChanged (EvWavopacity, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavopacity, M("HISTORY_CUSTOMCURVE")); } else if (ce == opacityShapeWL) { - listener->panelChanged (EvWavopacityWL, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavopacityWL, M("HISTORY_CUSTOMCURVE")); } else if (ce == hhshape) { - listener->panelChanged (EvWavHHCurve, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavHHCurve, M("HISTORY_CUSTOMCURVE")); } else if (ce == Chshape) { - listener->panelChanged (EvWavCHCurve, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavCHCurve, M("HISTORY_CUSTOMCURVE")); } else if (ce == clshape) { - listener->panelChanged (EvWavCLCurve, M("HISTORY_CUSTOMCURVE")); + listener->panelChanged(EvWavCLCurve, M("HISTORY_CUSTOMCURVE")); } } } -void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) +void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited) { for (int i = 0; i < 9; i++) { @@ -1756,32 +1845,32 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi correctionch[i]->setDefault(defParams->wavelet.ch[i]); } - strength->setDefault(defParams->wavelet.strength ); - balance->setDefault(defParams->wavelet.balance ); - iter->setDefault(defParams->wavelet.iter ); - rescon->setDefault (defParams->wavelet.rescon); - resconH->setDefault (defParams->wavelet.resconH); - reschro->setDefault (defParams->wavelet.reschro); - tmrs->setDefault (defParams->wavelet.tmrs); - gamma->setDefault (defParams->wavelet.gamma); - sup->setDefault (defParams->wavelet.sup); - sky->setDefault (defParams->wavelet.sky); - thres->setDefault (defParams->wavelet.thres); - threshold->setDefault (defParams->wavelet.threshold); - threshold2->setDefault (defParams->wavelet.threshold2); - edgedetect->setDefault (defParams->wavelet.edgedetect); - edgedetectthr->setDefault (defParams->wavelet.edgedetectthr); - edgedetectthr2->setDefault (defParams->wavelet.edgedetectthr2); - edgesensi->setDefault (defParams->wavelet.edgesensi); - edgeampli->setDefault (defParams->wavelet.edgeampli); - chroma->setDefault (defParams->wavelet.chroma); - chro->setDefault (defParams->wavelet.chro); - contrast->setDefault (defParams->wavelet.contrast); - edgrad->setDefault (defParams->wavelet.edgrad); - edgval->setDefault (defParams->wavelet.edgval); - edgthresh->setDefault (defParams->wavelet.edgthresh); - thr->setDefault (defParams->wavelet.thr); - thrH->setDefault (defParams->wavelet.thrH); + strength->setDefault(defParams->wavelet.strength); + balance->setDefault(defParams->wavelet.balance); + iter->setDefault(defParams->wavelet.iter); + rescon->setDefault(defParams->wavelet.rescon); + resconH->setDefault(defParams->wavelet.resconH); + reschro->setDefault(defParams->wavelet.reschro); + tmrs->setDefault(defParams->wavelet.tmrs); + gamma->setDefault(defParams->wavelet.gamma); + sup->setDefault(defParams->wavelet.sup); + sky->setDefault(defParams->wavelet.sky); + thres->setDefault(defParams->wavelet.thres); + threshold->setDefault(defParams->wavelet.threshold); + threshold2->setDefault(defParams->wavelet.threshold2); + edgedetect->setDefault(defParams->wavelet.edgedetect); + edgedetectthr->setDefault(defParams->wavelet.edgedetectthr); + edgedetectthr2->setDefault(defParams->wavelet.edgedetectthr2); + edgesensi->setDefault(defParams->wavelet.edgesensi); + edgeampli->setDefault(defParams->wavelet.edgeampli); + chroma->setDefault(defParams->wavelet.chroma); + chro->setDefault(defParams->wavelet.chro); + contrast->setDefault(defParams->wavelet.contrast); + edgrad->setDefault(defParams->wavelet.edgrad); + edgval->setDefault(defParams->wavelet.edgval); + edgthresh->setDefault(defParams->wavelet.edgthresh); + thr->setDefault(defParams->wavelet.thr); + thrH->setDefault(defParams->wavelet.thrH); hueskin->setDefault (defParams->wavelet.hueskin); hueskin2->setDefault (defParams->wavelet.hueskin2); hllev->setDefault (defParams->wavelet.hllev); @@ -1794,27 +1883,35 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi level2noise->setDefault (defParams->wavelet.level2noise); level3noise->setDefault (defParams->wavelet.level3noise); - greenlow->setDefault (defParams->wavelet.greenlow); - bluelow->setDefault (defParams->wavelet.bluelow); - greenmed->setDefault (defParams->wavelet.greenmed); - bluemed->setDefault (defParams->wavelet.bluemed); - greenhigh->setDefault (defParams->wavelet.greenhigh); - bluehigh->setDefault (defParams->wavelet.bluehigh); + greenlow->setDefault(defParams->wavelet.greenlow); + bluelow->setDefault(defParams->wavelet.bluelow); + greenmed->setDefault(defParams->wavelet.greenmed); + bluemed->setDefault(defParams->wavelet.bluemed); + greenhigh->setDefault(defParams->wavelet.greenhigh); + bluehigh->setDefault(defParams->wavelet.bluehigh); + mergeL->setDefault(defParams->wavelet.mergeL); + mergeC->setDefault(defParams->wavelet.mergeC); + softrad->setDefault(defParams->wavelet.softrad); + softradend->setDefault(defParams->wavelet.softradend); if (pedited) { - greenlow->setDefaultEditedState (pedited->wavelet.greenlow ? Edited : UnEdited); - bluelow->setDefaultEditedState (pedited->wavelet.bluelow ? Edited : UnEdited); - greenmed->setDefaultEditedState (pedited->wavelet.greenmed ? Edited : UnEdited); - bluemed->setDefaultEditedState (pedited->wavelet.bluemed ? Edited : UnEdited); - greenhigh->setDefaultEditedState (pedited->wavelet.greenhigh ? Edited : UnEdited); - bluehigh->setDefaultEditedState (pedited->wavelet.bluehigh ? Edited : UnEdited); + greenlow->setDefaultEditedState(pedited->wavelet.greenlow ? Edited : UnEdited); + bluelow->setDefaultEditedState(pedited->wavelet.bluelow ? Edited : UnEdited); + greenmed->setDefaultEditedState(pedited->wavelet.greenmed ? Edited : UnEdited); + bluemed->setDefaultEditedState(pedited->wavelet.bluemed ? Edited : UnEdited); + greenhigh->setDefaultEditedState(pedited->wavelet.greenhigh ? Edited : UnEdited); + bluehigh->setDefaultEditedState(pedited->wavelet.bluehigh ? Edited : UnEdited); + mergeL->setDefaultEditedState(pedited->wavelet.mergeL ? Edited : UnEdited); + mergeC->setDefaultEditedState(pedited->wavelet.mergeC ? Edited : UnEdited); + softrad->setDefaultEditedState(pedited->wavelet.softrad ? Edited : UnEdited); + softradend->setDefaultEditedState(pedited->wavelet.softradend ? Edited : UnEdited); - rescon->setDefault (defParams->wavelet.rescon); - resconH->setDefault (defParams->wavelet.resconH); - reschro->setDefault (defParams->wavelet.reschro); - tmrs->setDefault (defParams->wavelet.tmrs); - gamma->setDefault (defParams->wavelet.gamma); - sup->setDefault (defParams->wavelet.sup); + rescon->setDefault(defParams->wavelet.rescon); + resconH->setDefault(defParams->wavelet.resconH); + reschro->setDefault(defParams->wavelet.reschro); + tmrs->setDefault(defParams->wavelet.tmrs); + gamma->setDefault(defParams->wavelet.gamma); + sup->setDefault(defParams->wavelet.sup); sky->setDefaultEditedState(pedited->wavelet.sky ? Edited : UnEdited); thres->setDefaultEditedState(pedited->wavelet.thres ? Edited : UnEdited); threshold->setDefaultEditedState(pedited->wavelet.threshold ? Edited : UnEdited); @@ -1829,7 +1926,7 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi contrast->setDefaultEditedState(pedited->wavelet.contrast ? Edited : UnEdited); edgrad->setDefaultEditedState(pedited->wavelet.edgrad ? Edited : UnEdited); edgval->setDefaultEditedState(pedited->wavelet.edgval ? Edited : UnEdited); - edgthresh->setDefault (defParams->wavelet.edgthresh); + edgthresh->setDefault(defParams->wavelet.edgthresh); thr->setDefaultEditedState(pedited->wavelet.thr ? Edited : UnEdited); thrH->setDefaultEditedState(pedited->wavelet.thrH ? Edited : UnEdited); skinprotect->setDefaultEditedState(pedited->wavelet.skinprotect ? Edited : UnEdited); @@ -1880,20 +1977,20 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi thr->setDefaultEditedState(Irrelevant); thrH->setDefaultEditedState(Irrelevant); skinprotect->setDefaultEditedState(Irrelevant); - hueskin->setDefaultEditedState (Irrelevant); - hueskin2->setDefaultEditedState (Irrelevant); - hllev->setDefaultEditedState (Irrelevant); - bllev->setDefaultEditedState (Irrelevant); - edgcont->setDefaultEditedState (Irrelevant); - level0noise->setDefaultEditedState (Irrelevant); - level1noise->setDefaultEditedState (Irrelevant); - level2noise->setDefaultEditedState (Irrelevant); - level3noise->setDefaultEditedState (Irrelevant); - pastlev->setDefaultEditedState (Irrelevant); - satlev->setDefaultEditedState (Irrelevant); - strength->setDefaultEditedState (Irrelevant); - balance->setDefaultEditedState (Irrelevant); - iter->setDefaultEditedState (Irrelevant); + hueskin->setDefaultEditedState(Irrelevant); + hueskin2->setDefaultEditedState(Irrelevant); + hllev->setDefaultEditedState(Irrelevant); + bllev->setDefaultEditedState(Irrelevant); + edgcont->setDefaultEditedState(Irrelevant); + level0noise->setDefaultEditedState(Irrelevant); + level1noise->setDefaultEditedState(Irrelevant); + level2noise->setDefaultEditedState(Irrelevant); + level3noise->setDefaultEditedState(Irrelevant); + pastlev->setDefaultEditedState(Irrelevant); + satlev->setDefaultEditedState(Irrelevant); + strength->setDefaultEditedState(Irrelevant); + balance->setDefaultEditedState(Irrelevant); + iter->setDefaultEditedState(Irrelevant); for (int i = 0; i < 9; i++) { correction[i]->setDefaultEditedState(Irrelevant); @@ -1907,19 +2004,19 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi void Wavelet::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) { - if (listener && (multiImage || getEnabled()) ) { - if(a == level0noise) { - listener->panelChanged (EvWavlev0nois, - Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); - } else if(a == level1noise) { - listener->panelChanged (EvWavlev1nois, - Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); - } else if(a == level2noise) { - listener->panelChanged (EvWavlev2nois, - Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); - } else if(a == level3noise) { - listener->panelChanged (EvWavlev3nois, - Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); + if (listener && (multiImage || getEnabled())) { + if (a == level0noise) { + listener->panelChanged(EvWavlev0nois, + Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); + } else if (a == level1noise) { + listener->panelChanged(EvWavlev1nois, + Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); + } else if (a == level2noise) { + listener->panelChanged(EvWavlev2nois, + Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); + } else if (a == level3noise) { + listener->panelChanged(EvWavlev3nois, + Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS") + ": %1" + "\n" + M("TP_WAVELET_STREN") + ": %2"), int(newTop), int(newBottom))); } } @@ -1939,21 +2036,21 @@ void Wavelet::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTo void Wavelet::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) { - if (listener && (multiImage || getEnabled()) ) { - if(a == hueskin) { - listener->panelChanged (EvWavHueskin, hueskin->getHistoryString()); - } else if(a == hueskin2) { - listener->panelChanged (EvWavHueskin2, hueskin2->getHistoryString()); - } else if(a == hllev) { - listener->panelChanged (EvWavlhl, hllev->getHistoryString()); - } else if(a == bllev) { - listener->panelChanged (EvWavlbl, bllev->getHistoryString()); - } else if(a == pastlev) { - listener->panelChanged (EvWavpast, pastlev->getHistoryString()); - } else if(a == satlev) { - listener->panelChanged (EvWavsat, satlev->getHistoryString()); - } else if(a == edgcont) { - listener->panelChanged (EvWavedgcont, edgcont->getHistoryString()); + if (listener && (multiImage || getEnabled())) { + if (a == hueskin) { + listener->panelChanged(EvWavHueskin, hueskin->getHistoryString()); + } else if (a == hueskin2) { + listener->panelChanged(EvWavHueskin2, hueskin2->getHistoryString()); + } else if (a == hllev) { + listener->panelChanged(EvWavlhl, hllev->getHistoryString()); + } else if (a == bllev) { + listener->panelChanged(EvWavlbl, bllev->getHistoryString()); + } else if (a == pastlev) { + listener->panelChanged(EvWavpast, pastlev->getHistoryString()); + } else if (a == satlev) { + listener->panelChanged(EvWavsat, satlev->getHistoryString()); + } else if (a == edgcont) { + listener->panelChanged(EvWavedgcont, edgcont->getHistoryString()); } } } @@ -1961,7 +2058,7 @@ void Wavelet::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL void Wavelet::HSmethodUpdateUI() { if (!batchMode) { - if(HSmethod->get_active_row_number() == 0) { //without + if (HSmethod->get_active_row_number() == 0) { //without hllev->hide(); bllev->hide(); threshold->hide(); @@ -1979,15 +2076,15 @@ void Wavelet::HSmethodChanged() { HSmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavHSmet, HSmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavHSmet, HSmethod->get_active_text()); } } void Wavelet::CHmethodUpdateUI() { if (!batchMode) { - if(CHmethod->get_active_row_number() == 0) { + if (CHmethod->get_active_row_number() == 0) { CHSLmethod->show(); pastlev->hide(); satlev->hide(); @@ -1999,14 +2096,14 @@ void Wavelet::CHmethodUpdateUI() int y = thres->getValue(); int z; - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correctionch[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correctionch[z]->show(); } - } else if(CHmethod->get_active_row_number() == 1) { + } else if (CHmethod->get_active_row_number() == 1) { CHSLmethod->show(); pastlev->show(); satlev->show(); @@ -2018,11 +2115,11 @@ void Wavelet::CHmethodUpdateUI() int y = thres->getValue(); int z; - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correctionch[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correctionch[z]->show(); } } else { @@ -2046,8 +2143,8 @@ void Wavelet::CHmethodChanged() { CHmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavCHmet, CHmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavCHmet, CHmethod->get_active_text()); } } @@ -2086,10 +2183,10 @@ void Wavelet::CHSLmethodChanged() void Wavelet::EDmethodUpdateUI() { if (!batchMode) { - if(EDmethod->get_active_row_number() == 0 ) { //SL + if (EDmethod->get_active_row_number() == 0) { //SL CCWcurveEditorG->hide(); edgcont->show(); - } else if(EDmethod->get_active_row_number() == 1) { //CU + } else if (EDmethod->get_active_row_number() == 1) { //CU CCWcurveEditorG->show(); edgcont->hide(); } @@ -2099,8 +2196,8 @@ void Wavelet::EDmethodChanged() { EDmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavEDmet, EDmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavEDmet, EDmethod->get_active_text()); } } @@ -2114,8 +2211,8 @@ void Wavelet::NPmethodChanged() { NPmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavNPmet, NPmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavNPmet, NPmethod->get_active_text()); } } @@ -2124,16 +2221,16 @@ void Wavelet::NPmethodChanged() void Wavelet::BAmethodUpdateUI() { if (!batchMode) { - if(BAmethod->get_active_row_number() == 0 ) { //none + if (BAmethod->get_active_row_number() == 0) { //none balance->hide(); opacityCurveEditorW->hide(); iter->hide(); - } else if(BAmethod->get_active_row_number() == 1) { //sli + } else if (BAmethod->get_active_row_number() == 1) { //sli opacityCurveEditorW->hide(); balance->show(); iter->show(); - } else if(BAmethod->get_active_row_number() == 2) { //CU + } else if (BAmethod->get_active_row_number() == 2) { //CU opacityCurveEditorW->show(); balance->hide(); iter->show(); @@ -2144,8 +2241,8 @@ void Wavelet::BAmethodChanged() { BAmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavBAmet, BAmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavBAmet, BAmethod->get_active_text()); } } @@ -2168,8 +2265,8 @@ void Wavelet::TMmethodChanged() { TMmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavTMmet, TMmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavTMmet, TMmethod->get_active_text()); } } @@ -2183,8 +2280,8 @@ void Wavelet::BackmethodUpdateUI() { void Wavelet::BackmethodChanged() { //BackmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavBackmet, Backmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavBackmet, Backmethod->get_active_text()); } } @@ -2192,19 +2289,19 @@ void Wavelet::CLmethodUpdateUI() { if (!batchMode) { if (CLmethod->get_active_row_number() == 0) { - CLmethod->set_active (0); + CLmethod->set_active(0); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); } else if (CLmethod->get_active_row_number() == 1) { - CLmethod->set_active (1); + CLmethod->set_active(1); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); } else if (CLmethod->get_active_row_number() == 2) { - CLmethod->set_active (2); + CLmethod->set_active(2); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); } else if (CLmethod->get_active_row_number() == 3) { - CLmethod->set_active (3); + CLmethod->set_active(3); Lmethod->set_sensitive(false); Dirmethod->set_sensitive(false); } @@ -2215,8 +2312,8 @@ void Wavelet::CLmethodChanged() { CLmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavCLmet, CLmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavCLmet, CLmethod->get_active_text()); } } @@ -2227,11 +2324,50 @@ void Wavelet::TilesmethodUpdateUI() { } */ + +void Wavelet::ushamethodChanged() +{ + if (ushamethod->get_active_row_number() == 2 && expclari->getEnabled() == true) { + Backmethod->set_active(2); + CLmethod->set_active(2); + Lmethod->set_active(6); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + Dirmethod->set_active(3); + } else if (ushamethod->get_active_row_number() == 1 && expclari->getEnabled() == true) { + Backmethod->set_active(0); + CLmethod->set_active(1); + Lmethod->set_active(2); + Dirmethod->set_active(3); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { + Backmethod->set_active(1); + CLmethod->set_active(3); + Lmethod->set_active(3); + Dirmethod->set_active(3); + Lmethod->set_sensitive(false); + Dirmethod->set_sensitive(false); + } else if (expclari->getEnabled() == false) { + Backmethod->set_active(1); + CLmethod->set_active(3); + Lmethod->set_active(3); + Dirmethod->set_active(3); + Lmethod->set_sensitive(false); + Dirmethod->set_sensitive(false); + } + + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavushamet, ushamethod->get_active_text()); + } +} + + void Wavelet::TilesmethodChanged() { //TilesmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavTilesmet, Tilesmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavTilesmet, Tilesmethod->get_active_text()); } } @@ -2243,8 +2379,8 @@ void Wavelet::daubcoeffmethodUpdateUI() { void Wavelet::daubcoeffmethodChanged() { //daubcoeffmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavdaubcoeffmet, daubcoeffmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavdaubcoeffmet, daubcoeffmethod->get_active_text()); } } @@ -2257,8 +2393,8 @@ void Wavelet::MedgreinfUpdateUI() { void Wavelet::MedgreinfChanged() { //MedgreinfUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavedgreinf, Medgreinf->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavedgreinf, Medgreinf->get_active_text()); } } @@ -2271,8 +2407,8 @@ void Wavelet::DirmethodUpdateUI() { void Wavelet::DirmethodChanged() { //DirmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavDirmeto, Dirmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavDirmeto, Dirmethod->get_active_text()); } } @@ -2285,74 +2421,75 @@ void Wavelet::LmethodUpdateUI() { void Wavelet::LmethodChanged() { //LmethodUpdateUI(); - if (listener && (multiImage || getEnabled()) ) { - listener->panelChanged (EvWavLmet, Lmethod->get_active_text ()); + if (listener && (multiImage || getEnabled())) { + listener->panelChanged(EvWavLmet, Lmethod->get_active_text()); } } -void Wavelet::setBatchMode (bool batchMode) +void Wavelet::setBatchMode(bool batchMode) { - Lmethod->append (M("GENERAL_UNCHANGED")); - CLmethod->append (M("GENERAL_UNCHANGED")); - Backmethod->append (M("GENERAL_UNCHANGED")); - Tilesmethod->append (M("GENERAL_UNCHANGED")); - daubcoeffmethod->append (M("GENERAL_UNCHANGED")); - CHmethod->append (M("GENERAL_UNCHANGED")); - Medgreinf->append (M("GENERAL_UNCHANGED")); - CHSLmethod->append (M("GENERAL_UNCHANGED")); - EDmethod->append (M("GENERAL_UNCHANGED")); - NPmethod->append (M("GENERAL_UNCHANGED")); - BAmethod->append (M("GENERAL_UNCHANGED")); - TMmethod->append (M("GENERAL_UNCHANGED")); - HSmethod->append (M("GENERAL_UNCHANGED")); - Dirmethod->append (M("GENERAL_UNCHANGED")); - CCWcurveEditorG->setBatchMode (batchMode); - opaCurveEditorG->setBatchMode (batchMode); - opacityCurveEditorG->setBatchMode (batchMode); - opacityCurveEditorW->setBatchMode (batchMode); - opacityCurveEditorWL->setBatchMode (batchMode); - curveEditorRES->setBatchMode (batchMode); - curveEditorGAM->setBatchMode (batchMode); - rescon->showEditedCB (); - resconH->showEditedCB (); - reschro->showEditedCB (); - tmrs->showEditedCB (); - gamma->showEditedCB (); - sup->showEditedCB (); - sky->showEditedCB (); - thres->showEditedCB (); - threshold->showEditedCB (); - threshold2->showEditedCB (); - edgedetect->showEditedCB (); - edgedetectthr->showEditedCB (); - edgedetectthr2->showEditedCB (); - edgesensi->showEditedCB (); - edgeampli->showEditedCB (); - chroma->showEditedCB (); - chro->showEditedCB (); - contrast->showEditedCB (); - edgrad->showEditedCB (); - edgval->showEditedCB (); - edgthresh->showEditedCB (); - thr->showEditedCB (); - thrH->showEditedCB (); + Lmethod->append(M("GENERAL_UNCHANGED")); + CLmethod->append(M("GENERAL_UNCHANGED")); + Backmethod->append(M("GENERAL_UNCHANGED")); + Tilesmethod->append(M("GENERAL_UNCHANGED")); + daubcoeffmethod->append(M("GENERAL_UNCHANGED")); + CHmethod->append(M("GENERAL_UNCHANGED")); + Medgreinf->append(M("GENERAL_UNCHANGED")); + ushamethod->append(M("GENERAL_UNCHANGED")); + CHSLmethod->append(M("GENERAL_UNCHANGED")); + EDmethod->append(M("GENERAL_UNCHANGED")); + NPmethod->append(M("GENERAL_UNCHANGED")); + BAmethod->append(M("GENERAL_UNCHANGED")); + TMmethod->append(M("GENERAL_UNCHANGED")); + HSmethod->append(M("GENERAL_UNCHANGED")); + Dirmethod->append(M("GENERAL_UNCHANGED")); + CCWcurveEditorG->setBatchMode(batchMode); + opaCurveEditorG->setBatchMode(batchMode); + opacityCurveEditorG->setBatchMode(batchMode); + opacityCurveEditorW->setBatchMode(batchMode); + opacityCurveEditorWL->setBatchMode(batchMode); + curveEditorRES->setBatchMode(batchMode); + curveEditorGAM->setBatchMode(batchMode); + rescon->showEditedCB(); + resconH->showEditedCB(); + reschro->showEditedCB(); + tmrs->showEditedCB(); + gamma->showEditedCB(); + sup->showEditedCB(); + sky->showEditedCB(); + thres->showEditedCB(); + threshold->showEditedCB(); + threshold2->showEditedCB(); + edgedetect->showEditedCB(); + edgedetectthr->showEditedCB(); + edgedetectthr2->showEditedCB(); + edgesensi->showEditedCB(); + edgeampli->showEditedCB(); + chroma->showEditedCB(); + chro->showEditedCB(); + contrast->showEditedCB(); + edgrad->showEditedCB(); + edgval->showEditedCB(); + edgthresh->showEditedCB(); + thr->showEditedCB(); + thrH->showEditedCB(); skinprotect->showEditedCB(); - hueskin->showEditedCB (); - hueskin2->showEditedCB (); - hllev->showEditedCB (); - bllev->showEditedCB (); - pastlev->showEditedCB (); - satlev->showEditedCB (); - edgcont->showEditedCB (); - strength->showEditedCB (); - balance->showEditedCB (); - iter->showEditedCB (); - level0noise->showEditedCB (); - level1noise->showEditedCB (); - level2noise->showEditedCB (); - level3noise->showEditedCB (); + hueskin->showEditedCB(); + hueskin2->showEditedCB(); + hllev->showEditedCB(); + bllev->showEditedCB(); + pastlev->showEditedCB(); + satlev->showEditedCB(); + edgcont->showEditedCB(); + strength->showEditedCB(); + balance->showEditedCB(); + iter->showEditedCB(); + level0noise->showEditedCB(); + level1noise->showEditedCB(); + level2noise->showEditedCB(); + level3noise->showEditedCB(); - ToolPanel::setBatchMode (batchMode); + ToolPanel::setBatchMode(batchMode); for (int i = 0; i < 9; i++) { correction[i]->showEditedCB(); @@ -2363,7 +2500,7 @@ void Wavelet::setBatchMode (bool batchMode) } } -void Wavelet::adjusterUpdateUI (Adjuster* a) +void Wavelet::adjusterUpdateUI(Adjuster* a) { /* if (!batchMode) { @@ -2386,128 +2523,136 @@ void Wavelet::adjusterUpdateUI (Adjuster* a) void Wavelet::adjusterChanged(Adjuster* a, double newval) { - if (listener && (multiImage || getEnabled()) ) { + if (listener && (multiImage || getEnabled())) { if (a == edgthresh) { - listener->panelChanged (EvWavtiles, edgthresh->getTextValue()); - } else if (a == rescon ) { - listener->panelChanged (EvWavrescon, rescon->getTextValue()); - } else if (a == resconH ) { - listener->panelChanged (EvWavresconH, resconH->getTextValue()); - } else if (a == reschro ) { - listener->panelChanged (EvWavreschro, reschro->getTextValue()); - } else if (a == tmrs ) { + listener->panelChanged(EvWavtiles, edgthresh->getTextValue()); + } else if (a == rescon) { + listener->panelChanged(EvWavrescon, rescon->getTextValue()); + } else if (a == resconH) { + listener->panelChanged(EvWavresconH, resconH->getTextValue()); + } else if (a == reschro) { + listener->panelChanged(EvWavreschro, reschro->getTextValue()); + } else if (a == tmrs) { adjusterUpdateUI(a); - listener->panelChanged (EvWavtmrs, tmrs->getTextValue()); - } else if (a == gamma ) { + listener->panelChanged(EvWavtmrs, tmrs->getTextValue()); + } else if (a == gamma) { adjusterUpdateUI(a); - listener->panelChanged (EvWavgamma, gamma->getTextValue()); - } else if (a == sky ) { - listener->panelChanged (EvWavsky, sky->getTextValue()); - } else if (a == sup ) { - listener->panelChanged (EvWavsup, sup->getTextValue()); - } else if (a == chroma ) { - listener->panelChanged (EvWavchroma, chroma->getTextValue()); - } else if (a == chro ) { - listener->panelChanged (EvWavchro, chro->getTextValue()); - } else if (a == contrast ) { - listener->panelChanged (EvWavunif, contrast->getTextValue()); - } else if (a == thr ) { - listener->panelChanged (EvWavthr, thr->getTextValue()); - } else if (a == thrH ) { - listener->panelChanged (EvWavthrH, thrH->getTextValue()); - } else if (a == threshold ) { - listener->panelChanged (EvWavThreshold, threshold->getTextValue()); - } else if (a == threshold2 ) { - listener->panelChanged (EvWavThreshold2, threshold2->getTextValue()); - } else if (a == edgedetect ) { - listener->panelChanged (EvWavedgedetect, edgedetect->getTextValue()); - } else if (a == edgedetectthr ) { - listener->panelChanged (EvWavedgedetectthr, edgedetectthr->getTextValue()); - } else if (a == edgedetectthr2 ) { - listener->panelChanged (EvWavedgedetectthr2, edgedetectthr2->getTextValue()); - } else if (a == edgesensi ) { - listener->panelChanged (EvWavedgesensi, edgesensi->getTextValue()); - } else if (a == edgeampli ) { - listener->panelChanged (EvWavedgeampli, edgeampli->getTextValue()); - } else if (a == edgrad ) { - listener->panelChanged (EvWavedgrad, edgrad->getTextValue()); - } else if (a == edgval ) { - listener->panelChanged (EvWavedgval, edgval->getTextValue()); - } else if (a == thres ) { + listener->panelChanged(EvWavgamma, gamma->getTextValue()); + } else if (a == sky) { + listener->panelChanged(EvWavsky, sky->getTextValue()); + } else if (a == sup) { + listener->panelChanged(EvWavsup, sup->getTextValue()); + } else if (a == chroma) { + listener->panelChanged(EvWavchroma, chroma->getTextValue()); + } else if (a == chro) { + listener->panelChanged(EvWavchro, chro->getTextValue()); + } else if (a == contrast) { + listener->panelChanged(EvWavunif, contrast->getTextValue()); + } else if (a == thr) { + listener->panelChanged(EvWavthr, thr->getTextValue()); + } else if (a == thrH) { + listener->panelChanged(EvWavthrH, thrH->getTextValue()); + } else if (a == threshold) { + listener->panelChanged(EvWavThreshold, threshold->getTextValue()); + } else if (a == threshold2) { + listener->panelChanged(EvWavThreshold2, threshold2->getTextValue()); + } else if (a == edgedetect) { + listener->panelChanged(EvWavedgedetect, edgedetect->getTextValue()); + } else if (a == edgedetectthr) { + listener->panelChanged(EvWavedgedetectthr, edgedetectthr->getTextValue()); + } else if (a == edgedetectthr2) { + listener->panelChanged(EvWavedgedetectthr2, edgedetectthr2->getTextValue()); + } else if (a == edgesensi) { + listener->panelChanged(EvWavedgesensi, edgesensi->getTextValue()); + } else if (a == edgeampli) { + listener->panelChanged(EvWavedgeampli, edgeampli->getTextValue()); + } else if (a == edgrad) { + listener->panelChanged(EvWavedgrad, edgrad->getTextValue()); + } else if (a == edgval) { + listener->panelChanged(EvWavedgval, edgval->getTextValue()); + } else if (a == thres) { int y = thres->getValue(); int z; - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correction[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correction[z]->show(); } - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correctionch[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correctionch[z]->show(); } - if(z == 9) { + if (z == 9) { sup->show(); } else { sup->hide(); } - listener->panelChanged (EvWavthres, thres->getTextValue()); + listener->panelChanged(EvWavthres, thres->getTextValue()); } else if (a == skinprotect) { - listener->panelChanged (EvWavSkin, skinprotect->getTextValue()); + listener->panelChanged(EvWavSkin, skinprotect->getTextValue()); } else if (a == strength) { - listener->panelChanged (EvWavStrength, strength->getTextValue()); + listener->panelChanged(EvWavStrength, strength->getTextValue()); } else if (a == balance) { - listener->panelChanged (EvWavbalance, balance->getTextValue()); + listener->panelChanged(EvWavbalance, balance->getTextValue()); } else if (a == iter) { - listener->panelChanged (EvWaviter, iter->getTextValue()); - } else if (a == greenhigh ) { - listener->panelChanged (EvWavgreenhigh, greenhigh->getTextValue()); - } else if (a == bluehigh ) { - listener->panelChanged (EvWavbluehigh, bluehigh->getTextValue()); - } else if (a == greenmed ) { - listener->panelChanged (EvWavgreenmed, greenmed->getTextValue()); - } else if (a == bluemed ) { - listener->panelChanged (EvWavbluemed, bluemed->getTextValue()); - } else if (a == greenlow ) { - listener->panelChanged (EvWavgreenlow, greenlow->getTextValue()); - } else if (a == bluelow ) { - listener->panelChanged (EvWavbluelow, bluelow->getTextValue()); + listener->panelChanged(EvWaviter, iter->getTextValue()); + } else if (a == greenhigh) { + listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue()); + } else if (a == bluehigh) { + listener->panelChanged(EvWavbluehigh, bluehigh->getTextValue()); + } else if (a == mergeL) { + listener->panelChanged(EvWavmergeL, mergeL->getTextValue()); + } else if (a == mergeC) { + listener->panelChanged(EvWavmergeC, mergeC->getTextValue()); + } else if (a == softrad) { + listener->panelChanged(EvWavsoftrad, softrad->getTextValue()); + } else if (a == softradend) { + listener->panelChanged(EvWavsoftradend, softradend->getTextValue()); + } else if (a == greenmed) { + listener->panelChanged(EvWavgreenmed, greenmed->getTextValue()); + } else if (a == bluemed) { + listener->panelChanged(EvWavbluemed, bluemed->getTextValue()); + } else if (a == greenlow) { + listener->panelChanged(EvWavgreenlow, greenlow->getTextValue()); + } else if (a == bluelow) { + listener->panelChanged(EvWavbluelow, bluelow->getTextValue()); } if ((a == correction[0] || a == correction[1] || a == correction[2] || a == correction[3] || a == correction[4] || a == correction[5] || a == correction[6] || a == correction[7] || a == correction[8])) { - listener->panelChanged (EvWavelet, - Glib::ustring::compose("%1, %2, %3, %4, %5, %6, %7, %8, %9", - Glib::ustring::format(std::fixed, std::setprecision(0), correction[0]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[1]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[2]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[3]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[4]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[5]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[6]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[7]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correction[8]->getValue())) - ); - } else if (a == correctionch[0] || a == correctionch[1] || a == correctionch[2] || a == correctionch[3] || a == correctionch[4] || a == correctionch[5] || a == correctionch[6] || a == correctionch[7] || a == correctionch[8] ) { - listener->panelChanged (EvWaveletch, - Glib::ustring::compose("%1, %2, %3, %4, %5, %6, %7, %8, %9", - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[0]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[1]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[2]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[3]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[4]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[5]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[6]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[7]->getValue()), - Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[8]->getValue())) - ); + listener->panelChanged(EvWavelet, + Glib::ustring::compose("%1, %2, %3, %4, %5, %6, %7, %8, %9", + Glib::ustring::format(std::fixed, std::setprecision(0), correction[0]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[1]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[2]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[3]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[4]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[5]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[6]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[7]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correction[8]->getValue())) + ); + } else if (a == correctionch[0] || a == correctionch[1] || a == correctionch[2] || a == correctionch[3] || a == correctionch[4] || a == correctionch[5] || a == correctionch[6] || a == correctionch[7] || a == correctionch[8]) { + listener->panelChanged(EvWaveletch, + Glib::ustring::compose("%1, %2, %3, %4, %5, %6, %7, %8, %9", + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[0]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[1]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[2]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[3]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[4]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[5]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[6]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[7]->getValue()), + Glib::ustring::format(std::fixed, std::setprecision(0), correctionch[8]->getValue())) + ); } } } @@ -2516,21 +2661,21 @@ void Wavelet::adjusterAutoToggled(Adjuster* a, bool newval) { } -void Wavelet::enabledUpdateUI () +void Wavelet::enabledUpdateUI() { if (!batchMode) { int y = thres->getValue(); int z; - for(z = y; z < 9; z++) { + for (z = y; z < 9; z++) { correction[z]->hide(); } - for(z = 0; z < y; z++) { + for (z = 0; z < y; z++) { correction[z]->show(); } - if(z == 9) { + if (z == 9) { sup->show(); } else { sup->hide(); @@ -2540,52 +2685,52 @@ void Wavelet::enabledUpdateUI () } } -void Wavelet::enabledChanged () +void Wavelet::enabledChanged() { enabledUpdateUI(); if (listener) { if (get_inconsistent()) { - listener->panelChanged (EvWavEnabled, M("GENERAL_UNCHANGED")); + listener->panelChanged(EvWavEnabled, M("GENERAL_UNCHANGED")); } else if (getEnabled()) { - listener->panelChanged (EvWavEnabled, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavEnabled, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavEnabled, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavEnabled, M("GENERAL_DISABLED")); } } } -void Wavelet::medianToggled () +void Wavelet::medianToggled() { if (multiImage) { if (median->get_inconsistent()) { - median->set_inconsistent (false); - medianConn.block (true); - median->set_active (false); - medianConn.block (false); + median->set_inconsistent(false); + medianConn.block(true); + median->set_active(false); + medianConn.block(false); } else if (lastmedian) { - median->set_inconsistent (true); + median->set_inconsistent(true); } - lastmedian = median->get_active (); + lastmedian = median->get_active(); } - if (listener && (multiImage || getEnabled ())) { + if (listener && (multiImage || getEnabled())) { if (median->get_inconsistent()) { - listener->panelChanged (EvWavmedian, M("GENERAL_UNCHANGED")); - } else if (median->get_active ()) { - listener->panelChanged (EvWavmedian, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavmedian, M("GENERAL_UNCHANGED")); + } else if (median->get_active()) { + listener->panelChanged(EvWavmedian, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavmedian, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavmedian, M("GENERAL_DISABLED")); } } } -void Wavelet::medianlevUpdateUI () +void Wavelet::medianlevUpdateUI() { if (!batchMode) { - if (medianlev->get_active ()) { + if (medianlev->get_active()) { edgedetect->show(); lipst->show(); separatoredge->show(); @@ -2597,7 +2742,7 @@ void Wavelet::medianlevUpdateUI () // edgeampli->show(); // NPmethod->show(); // labmNP->show(); - if (lipst->get_active ()) { + if (lipst->get_active()) { edgesensi->show(); edgeampli->show(); NPmethod->show(); @@ -2625,66 +2770,66 @@ void Wavelet::medianlevUpdateUI () } } -void Wavelet::medianlevToggled () +void Wavelet::medianlevToggled() { if (multiImage) { if (medianlev->get_inconsistent()) { - medianlev->set_inconsistent (false); - medianlevConn.block (true); - medianlev->set_active (false); - medianlevConn.block (false); + medianlev->set_inconsistent(false); + medianlevConn.block(true); + medianlev->set_active(false); + medianlevConn.block(false); } else if (lastmedianlev) { - medianlev->set_inconsistent (true); + medianlev->set_inconsistent(true); } - lastmedianlev = medianlev->get_active (); + lastmedianlev = medianlev->get_active(); } medianlevUpdateUI(); - if (listener && (multiImage || getEnabled ())) { + if (listener && (multiImage || getEnabled())) { if (medianlev->get_inconsistent()) { - listener->panelChanged (EvWavmedianlev, M("GENERAL_UNCHANGED")); - } else if (medianlev->get_active () ) { - listener->panelChanged (EvWavmedianlev, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavmedianlev, M("GENERAL_UNCHANGED")); + } else if (medianlev->get_active()) { + listener->panelChanged(EvWavmedianlev, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavmedianlev, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavmedianlev, M("GENERAL_DISABLED")); } } } -void Wavelet::linkedgToggled () +void Wavelet::linkedgToggled() { if (multiImage) { if (linkedg->get_inconsistent()) { - linkedg->set_inconsistent (false); - linkedgConn.block (true); - linkedg->set_active (false); - linkedgConn.block (false); + linkedg->set_inconsistent(false); + linkedgConn.block(true); + linkedg->set_active(false); + linkedgConn.block(false); } else if (lastlinkedg) { - linkedg->set_inconsistent (true); + linkedg->set_inconsistent(true); } - lastlinkedg = linkedg->get_active (); + lastlinkedg = linkedg->get_active(); } - if (listener && (multiImage || getEnabled ())) { + if (listener && (multiImage || getEnabled())) { if (linkedg->get_inconsistent()) { - listener->panelChanged (EvWavlinkedg, M("GENERAL_UNCHANGED")); - } else if (linkedg->get_active () ) { - listener->panelChanged (EvWavlinkedg, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavlinkedg, M("GENERAL_UNCHANGED")); + } else if (linkedg->get_active()) { + listener->panelChanged(EvWavlinkedg, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavlinkedg, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavlinkedg, M("GENERAL_DISABLED")); } } } -void Wavelet::cbenabUpdateUI () +void Wavelet::cbenabUpdateUI() { if (!batchMode) { - if(cbenab->get_active ()) { + if (cbenab->get_active()) { chanMixerHLFrame->show(); chanMixerMidFrame->show(); chanMixerShadowsFrame->show(); @@ -2698,40 +2843,40 @@ void Wavelet::cbenabUpdateUI () } } -void Wavelet::cbenabToggled () +void Wavelet::cbenabToggled() { if (multiImage) { if (cbenab->get_inconsistent()) { - cbenab->set_inconsistent (false); - cbenabConn.block (true); - cbenab->set_active (false); - cbenabConn.block (false); + cbenab->set_inconsistent(false); + cbenabConn.block(true); + cbenab->set_active(false); + cbenabConn.block(false); } else if (lastcbenab) { - cbenab->set_inconsistent (true); + cbenab->set_inconsistent(true); } - lastcbenab = cbenab->get_active (); + lastcbenab = cbenab->get_active(); } cbenabUpdateUI(); - if (listener && (multiImage || getEnabled ())) { - if (cbenab->get_inconsistent() ) { - listener->panelChanged (EvWavcbenab, M("GENERAL_UNCHANGED")); - } else if (cbenab->get_active () ) { - listener->panelChanged (EvWavcbenab, M("GENERAL_ENABLED")); + if (listener && (multiImage || getEnabled())) { + if (cbenab->get_inconsistent()) { + listener->panelChanged(EvWavcbenab, M("GENERAL_UNCHANGED")); + } else if (cbenab->get_active()) { + listener->panelChanged(EvWavcbenab, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavcbenab, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavcbenab, M("GENERAL_DISABLED")); } } } -void Wavelet::lipstUpdateUI () +void Wavelet::lipstUpdateUI() { if (!batchMode) { - if (lipst->get_active ()) { + if (lipst->get_active()) { NPmethod->show(); edgesensi->show(); edgeampli->show(); @@ -2747,31 +2892,31 @@ void Wavelet::lipstUpdateUI () } -void Wavelet::lipstToggled () +void Wavelet::lipstToggled() { if (multiImage) { if (lipst->get_inconsistent()) { - lipst->set_inconsistent (false); - lipstConn.block (true); - lipst->set_active (false); - lipstConn.block (false); + lipst->set_inconsistent(false); + lipstConn.block(true); + lipst->set_active(false); + lipstConn.block(false); } else if (lastlipst) { - lipst->set_inconsistent (true); + lipst->set_inconsistent(true); } - lastlipst = lipst->get_active (); + lastlipst = lipst->get_active(); } lipstUpdateUI(); - if (listener && (multiImage || getEnabled ())) { + if (listener && (multiImage || getEnabled())) { if (lipst->get_inconsistent()) { - listener->panelChanged (EvWavlipst, M("GENERAL_UNCHANGED")); - } else if (lipst->get_active ()) { - listener->panelChanged (EvWavlipst, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavlipst, M("GENERAL_UNCHANGED")); + } else if (lipst->get_active()) { + listener->panelChanged(EvWavlipst, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavlipst, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavlipst, M("GENERAL_DISABLED")); } } } @@ -2802,62 +2947,62 @@ void Wavelet::edgreinfToggled () { } } */ -void Wavelet::avoidToggled () +void Wavelet::avoidToggled() { if (multiImage) { if (avoid->get_inconsistent()) { - avoid->set_inconsistent (false); - avoidConn.block (true); - avoid->set_active (false); - avoidConn.block (false); + avoid->set_inconsistent(false); + avoidConn.block(true); + avoid->set_active(false); + avoidConn.block(false); } else if (lastavoid) { - avoid->set_inconsistent (true); + avoid->set_inconsistent(true); } - lastavoid = avoid->get_active (); + lastavoid = avoid->get_active(); } - if (listener && (multiImage || getEnabled ())) { + if (listener && (multiImage || getEnabled())) { if (avoid->get_inconsistent()) { - listener->panelChanged (EvWavavoid, M("GENERAL_UNCHANGED")); - } else if (avoid->get_active ()) { - listener->panelChanged (EvWavavoid, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavavoid, M("GENERAL_UNCHANGED")); + } else if (avoid->get_active()) { + listener->panelChanged(EvWavavoid, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavavoid, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavavoid, M("GENERAL_DISABLED")); } } } -void Wavelet::tmrToggled () +void Wavelet::tmrToggled() { if (multiImage) { if (tmr->get_inconsistent()) { - tmr->set_inconsistent (false); - tmrConn.block (true); - tmr->set_active (false); - tmrConn.block (false); + tmr->set_inconsistent(false); + tmrConn.block(true); + tmr->set_active(false); + tmrConn.block(false); } else if (lasttmr) { - tmr->set_inconsistent (true); + tmr->set_inconsistent(true); } - lasttmr = tmr->get_active (); + lasttmr = tmr->get_active(); } - if (listener && (multiImage || getEnabled ())) { + if (listener && (multiImage || getEnabled())) { if (tmr->get_inconsistent()) { - listener->panelChanged (EvWavtmr, M("GENERAL_UNCHANGED")); - } else if (tmr->get_active ()) { - listener->panelChanged (EvWavtmr, M("GENERAL_ENABLED")); + listener->panelChanged(EvWavtmr, M("GENERAL_UNCHANGED")); + } else if (tmr->get_active()) { + listener->panelChanged(EvWavtmr, M("GENERAL_ENABLED")); } else { - listener->panelChanged (EvWavtmr, M("GENERAL_DISABLED")); + listener->panelChanged(EvWavtmr, M("GENERAL_DISABLED")); } } } -void Wavelet::colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) +void Wavelet::colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) { float R = 0.f, G = 0.f, B = 0.f; @@ -2897,7 +3042,7 @@ void Wavelet::colorForValue (double valX, double valY, enum ColorCaller::ElemTyp caller->ccGreen = double(G); caller->ccBlue = double(B); } -void Wavelet::setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd , bool edgedetectthr2add) +void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add) { for (int i = 0; i < 9; i++) { @@ -2928,7 +3073,7 @@ void Wavelet::setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool t } -void Wavelet::neutralPressed () +void Wavelet::neutralPressed() { for (int i = 0; i < 9; i++) { correction[i]->setValue(0); @@ -2936,7 +3081,7 @@ void Wavelet::neutralPressed () } } -void Wavelet::neutralchPressed () +void Wavelet::neutralchPressed() { for (int i = 0; i < 9; i++) { @@ -2946,7 +3091,7 @@ void Wavelet::neutralchPressed () } -void Wavelet::contrastPlusPressed () +void Wavelet::contrastPlusPressed() { for (int i = 0; i < 9; i++) { @@ -2957,7 +3102,7 @@ void Wavelet::contrastPlusPressed () } -void Wavelet::contrastMinusPressed () +void Wavelet::contrastMinusPressed() { for (int i = 0; i < 9; i++) { @@ -2967,7 +3112,7 @@ void Wavelet::contrastMinusPressed () } } -void Wavelet::foldAllButMe (GdkEventButton* event, MyExpander *expander) +void Wavelet::foldAllButMe(GdkEventButton* event, MyExpander *expander) { if (event->button == 3) { expsettings->set_expanded(expsettings == expander); @@ -2979,6 +3124,7 @@ void Wavelet::foldAllButMe (GdkEventButton* event, MyExpander *expander) expgamut->set_expanded(expgamut == expander); expresid->set_expanded(expresid == expander); expfinal->set_expanded(expfinal == expander); + expclari->set_expanded(expclari == expander); } } @@ -3001,6 +3147,33 @@ void Wavelet::enableToggled(MyExpander *expander) event = EvWavenares; } else if (expander == expfinal) { event = EvWavenafin; + } else if (expander == expclari) { + if (expclari->getEnabled() == false) { + Backmethod->set_active(1); + CLmethod->set_active(3); + Lmethod->set_active(3); + Dirmethod->set_active(3); + Lmethod->set_sensitive(false); + Dirmethod->set_sensitive(false); + } else { + if (ushamethod->get_active_row_number() == 2) { + Backmethod->set_active(2); + CLmethod->set_active(2); + Lmethod->set_active(6); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + Dirmethod->set_active(3); + } else if (ushamethod->get_active_row_number() == 1) { + Backmethod->set_active(0); + CLmethod->set_active(1); + Lmethod->set_active(2); + Dirmethod->set_active(3); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + } + } + + event = EvWavenaclari; } else // unknown expander, returning ! { @@ -3008,31 +3181,32 @@ void Wavelet::enableToggled(MyExpander *expander) } if (expander->get_inconsistent()) { - listener->panelChanged (event, M("GENERAL_UNCHANGED")); + listener->panelChanged(event, M("GENERAL_UNCHANGED")); } else if (expander->getEnabled()) { - listener->panelChanged (event, M("GENERAL_ENABLED")); + listener->panelChanged(event, M("GENERAL_ENABLED")); } else { - listener->panelChanged (event, M("GENERAL_DISABLED")); + listener->panelChanged(event, M("GENERAL_DISABLED")); } } } void Wavelet::writeOptions(std::vector &tpOpen) { - tpOpen.push_back (expsettings->get_expanded ()); - tpOpen.push_back (expcontrast->get_expanded ()); - tpOpen.push_back (expchroma->get_expanded ()); - tpOpen.push_back (exptoning->get_expanded ()); - tpOpen.push_back (expnoise->get_expanded ()); - tpOpen.push_back (expedge->get_expanded ()); - tpOpen.push_back (expgamut->get_expanded ()); - tpOpen.push_back (expresid->get_expanded ()); - tpOpen.push_back (expfinal->get_expanded ()); + tpOpen.push_back(expsettings->get_expanded()); + tpOpen.push_back(expcontrast->get_expanded()); + tpOpen.push_back(expchroma->get_expanded()); + tpOpen.push_back(exptoning->get_expanded()); + tpOpen.push_back(expnoise->get_expanded()); + tpOpen.push_back(expedge->get_expanded()); + tpOpen.push_back(expgamut->get_expanded()); + tpOpen.push_back(expresid->get_expanded()); + tpOpen.push_back(expfinal->get_expanded()); + tpOpen.push_back(expclari->get_expanded()); } void Wavelet::updateToolState(std::vector &tpOpen) { - if(tpOpen.size() >= 9) { + if (tpOpen.size() >= 10) { expsettings->set_expanded(tpOpen.at(0)); expcontrast->set_expanded(tpOpen.at(1)); expchroma->set_expanded(tpOpen.at(2)); @@ -3042,6 +3216,7 @@ void Wavelet::updateToolState(std::vector &tpOpen) expgamut->set_expanded(tpOpen.at(6)); expresid->set_expanded(tpOpen.at(7)); expfinal->set_expanded(tpOpen.at(8)); + expclari->set_expanded(tpOpen.at(9)); } } diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 163395d52..59dde8039 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -63,6 +63,13 @@ public: void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) override; private: + rtengine::ProcEvent EvWavenaclari; + rtengine::ProcEvent EvWavushamet; + rtengine::ProcEvent EvWavmergeL; + rtengine::ProcEvent EvWavmergeC; + rtengine::ProcEvent EvWavsoftrad; + rtengine::ProcEvent EvWavsoftradend; + void foldAllButMe (GdkEventButton* event, MyExpander *expander); void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller) override; @@ -95,6 +102,7 @@ private: void tmrToggled (); void updatewavLabel (); void wavChanged (double nlevel) override; + void ushamethodChanged(); void HSmethodUpdateUI(); void CHmethodUpdateUI(); @@ -196,6 +204,11 @@ private: Adjuster* const edgedetectthr2; Adjuster* const edgesensi; Adjuster* const edgeampli; + Adjuster* const mergeL; + Adjuster* const mergeC; + Adjuster* const softrad; + Adjuster* const softradend; + MyComboBoxText* const Lmethod; sigc::connection Lmethodconn; MyComboBoxText* const CHmethod; @@ -224,6 +237,9 @@ private: sigc::connection Dirmethodconn; MyComboBoxText* const Medgreinf; sigc::connection MedgreinfConn; + MyComboBoxText* const ushamethod; + sigc::connection ushamethodconn; + Gtk::Frame* const chanMixerHLFrame; Gtk::Frame* const chanMixerMidFrame; Gtk::Frame* const chanMixerShadowsFrame; @@ -231,6 +247,7 @@ private: Gtk::Label* const wavLabels; Gtk::Label* const labmC; Gtk::Label* const labmNP; + Gtk::Label* const usharpLabel; MyExpander* const expchroma; MyExpander* const expcontrast; MyExpander* const expedge; @@ -240,10 +257,12 @@ private: MyExpander* const expresid; MyExpander* const expsettings; MyExpander* const exptoning; + MyExpander* const expclari; Gtk::HBox* const neutrHBox; + Gtk::HBox* const usharpHBox; - sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn; + sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn, enableclariConn; sigc::connection enableNoiseConn, enableResidConn, enableToningConn; sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn; sigc::connection neutralPressedConn; From 7ec1b27a91d7f8a19f35c9dc65e1365ee6358602 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 23 Mar 2019 12:45:44 +0100 Subject: [PATCH 002/264] Add show mask to Clarity --- rtdata/languages/default | 4 +- rtengine/dcrop.cc | 6 ++ rtengine/improccoordinator.cc | 5 ++ rtengine/procparams.cc | 4 ++ rtengine/procparams.h | 1 + rtengine/simpleprocess.cc | 7 ++- rtgui/paramsedited.cc | 6 ++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 103 ++++++++++++++++++++++++++++++---- rtgui/wavelet.h | 7 ++- 10 files changed, 130 insertions(+), 14 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 6e2124b21..5ae722656 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -786,6 +786,7 @@ HISTORY_MSG_WAVMERGEL;Merge L HISTORY_MSG_WAVMERGEC;Merge C HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final +HISTORY_MSG_WAVSHOWMASK;Show mask HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2268,8 +2269,9 @@ TP_WAVELET_TMTYPE;Compression method TP_WAVELET_TON;Toning TP_WAVELET_USHARP;Clarity method TP_WAVELET_USH;None -TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels +TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels. TP_WAVELET_SHA;Sharp mask +TP_WAVELET_SHOWMASK;Show mask TP_WAVELET_CLA;Clarity TP_WAVELET_USHARP;Sharp method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index f334a6d27..7d2d573ba 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -993,6 +993,12 @@ void Crop::update(int todo) Glib::ustring provis; LabImage *provradius = nullptr; + if(WaveParams.showmask) { + // WaveParams.showmask = false; + // WaveParams.expclari = true; + } + + if (WaveParams.softrad > 0.f) { provradius = new LabImage(labnCrop->W, labnCrop->H); provradius->CopyFrom(labnCrop); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index c6207964f..1c5b1d5df 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -857,6 +857,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) Glib::ustring provis; LabImage *provradius = nullptr; + if(WaveParams.showmask) { + // WaveParams.showmask = false; + // WaveParams.expclari = true; + } + if (WaveParams.softrad > 0.f) { provradius = new LabImage(pW, pH); provradius->CopyFrom(nprevl); diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 1bbab3f74..6aa680a62 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2156,6 +2156,7 @@ WaveletParams::WaveletParams() : softradend(0.), lipst(false), avoid(false), + showmask(false), tmr(false), strength(100), balance(0), @@ -2251,6 +2252,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && softradend == other.softradend && lipst == other.lipst && avoid == other.avoid + && showmask == other.showmask && tmr == other.tmr && strength == other.strength && balance == other.balance @@ -3421,6 +3423,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.edgval, "Wavelet", "Edgval", wavelet.edgval, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgthresh, "Wavelet", "ThrEdg", wavelet.edgthresh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.avoid, "Wavelet", "AvoidColorShift", wavelet.avoid, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.showmask, "Wavelet", "Showmask", wavelet.showmask, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmr, "Wavelet", "TMr", wavelet.tmr, keyFile); saveToKeyfile(!pedited || pedited->wavelet.rescon, "Wavelet", "ResidualcontShadow", wavelet.rescon, keyFile); saveToKeyfile(!pedited || pedited->wavelet.resconH, "Wavelet", "ResidualcontHighlight", wavelet.resconH, keyFile); @@ -4481,6 +4484,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "Softradend", pedited, wavelet.softradend, pedited->wavelet.softradend); assignFromKeyfile(keyFile, "Wavelet", "Lipst", pedited, wavelet.lipst, pedited->wavelet.lipst); assignFromKeyfile(keyFile, "Wavelet", "AvoidColorShift", pedited, wavelet.avoid, pedited->wavelet.avoid); + assignFromKeyfile(keyFile, "Wavelet", "Showmask", pedited, wavelet.showmask, pedited->wavelet.showmask); assignFromKeyfile(keyFile, "Wavelet", "TMr", pedited, wavelet.tmr, pedited->wavelet.tmr); if (ppVersion < 331) { // wavelet.Lmethod was a string before version 331 diff --git a/rtengine/procparams.h b/rtengine/procparams.h index f2328217a..1258ee05b 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1187,6 +1187,7 @@ struct WaveletParams { bool lipst; bool avoid; + bool showmask; bool tmr; int strength; int balance; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 52ab5a590..d4cdfc81e 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1129,7 +1129,12 @@ private: WavOpacityCurveW waOpacityCurveW; WavOpacityCurveWL waOpacityCurveWL; LabImage *provradius = nullptr; - +/* + if(WaveParams.showmask) { + WaveParams.showmask = false; + WaveParams.expclari = true; + } +*/ if (WaveParams.softrad > 0.f) { provradius = new LabImage(fw, fh); provradius->CopyFrom(labView); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index cec0a5c92..6e9a6372c 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -480,6 +480,7 @@ void ParamsEdited::set(bool v) wavelet.Medgreinf = v; wavelet.ushamethod = v; wavelet.avoid = v; + wavelet.showmask = v; wavelet.tmr = v; wavelet.Lmethod = v; wavelet.CLmethod = v; @@ -1053,6 +1054,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.softradend = wavelet.softradend && p.wavelet.softradend == other.wavelet.softradend; wavelet.ushamethod = wavelet.ushamethod && p.wavelet.ushamethod == other.wavelet.ushamethod; wavelet.avoid = wavelet.avoid && p.wavelet.avoid == other.wavelet.avoid; + wavelet.showmask = wavelet.showmask && p.wavelet.showmask == other.wavelet.showmask; wavelet.tmr = wavelet.tmr && p.wavelet.tmr == other.wavelet.tmr; wavelet.Lmethod = wavelet.Lmethod && p.wavelet.Lmethod == other.wavelet.Lmethod; wavelet.CLmethod = wavelet.CLmethod && p.wavelet.CLmethod == other.wavelet.CLmethod; @@ -2846,6 +2848,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.avoid = mods.wavelet.avoid; } + if (wavelet.showmask) { + toEdit.wavelet.showmask = mods.wavelet.showmask; + } + if (wavelet.tmr) { toEdit.wavelet.tmr = mods.wavelet.tmr; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 13d575d90..366703fc7 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -477,6 +477,7 @@ struct WaveletParamsEdited { bool Medgreinf; bool ushamethod; bool avoid; + bool showmask; bool tmr; bool c[9]; bool ch[9]; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index a6660610f..cda404d2a 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -75,6 +75,7 @@ Wavelet::Wavelet() : lipst(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_LIPST")))), avoid(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_AVOID")))), tmr(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_BALCHRO")))), + showmask(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_SHOWMASK")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), @@ -161,6 +162,7 @@ Wavelet::Wavelet() : EvWavmergeC = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMERGEC"); EvWavsoftrad = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRAD"); EvWavsoftradend = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRADEND"); + EvWavshowmask = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSHOWMASK"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -477,6 +479,8 @@ Wavelet::Wavelet() : mergeL->setAdjusterListener(this); mergeC->setAdjusterListener(this); softrad->setAdjusterListener(this); + showmask->set_active(false); + showmaskConn = showmask->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::showmaskToggled)); ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock()); ushamethod->append(M("TP_WAVELET_USH")); @@ -491,6 +495,7 @@ Wavelet::Wavelet() : clariBox->pack_start(*mergeL); clariBox->pack_start(*mergeC); clariBox->pack_start(*softrad); + clariBox->pack_start(*showmask); // Edge Sharpness ToolParamBlock* const edgBox = Gtk::manage(new ToolParamBlock()); @@ -1159,6 +1164,9 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) avoidConn.block(true); avoid->set_active(pp->wavelet.avoid); avoidConn.block(false); + showmaskConn.block(true); + showmask->set_active(pp->wavelet.showmask); + showmaskConn.block(false); tmrConn.block(true); tmr->set_active(pp->wavelet.tmr); tmrConn.block(false); @@ -1188,6 +1196,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) lastcbenab = pp->wavelet.cbenab; lastlipst = pp->wavelet.lipst; lastavoid = pp->wavelet.avoid; + lastshowmask = pp->wavelet.showmask; lasttmr = pp->wavelet.tmr; rescon->setValue(pp->wavelet.rescon); resconH->setValue(pp->wavelet.resconH); @@ -1333,6 +1342,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) Chshape->setUnChanged(!pedited->wavelet.Chcurve); clshape->setUnChanged(!pedited->wavelet.wavclCurve); avoid->set_inconsistent(!pedited->wavelet.avoid); + showmask->set_inconsistent(!pedited->wavelet.showmask); tmr->set_inconsistent(!pedited->wavelet.tmr); edgthresh->setEditedState(pedited->wavelet.edgthresh ? Edited : UnEdited); rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited); @@ -1512,6 +1522,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.enabled = getEnabled(); pp->wavelet.avoid = avoid->get_active(); + pp->wavelet.showmask = showmask->get_active(); pp->wavelet.tmr = tmr->get_active(); pp->wavelet.rescon = rescon->getValue(); pp->wavelet.resconH = resconH->getValue(); @@ -1597,6 +1608,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) if (pedited) { pedited->wavelet.enabled = !get_inconsistent(); pedited->wavelet.avoid = !avoid->get_inconsistent(); + pedited->wavelet.showmask = !showmask->get_inconsistent(); pedited->wavelet.tmr = !tmr->get_inconsistent(); pedited->wavelet.median = !median->get_inconsistent(); pedited->wavelet.medianlev = !medianlev->get_inconsistent(); @@ -2342,14 +2354,14 @@ void Wavelet::ushamethodChanged() Dirmethod->set_active(3); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); - } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { + } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { Backmethod->set_active(1); CLmethod->set_active(3); Lmethod->set_active(3); Dirmethod->set_active(3); Lmethod->set_sensitive(false); Dirmethod->set_sensitive(false); - } else if (expclari->getEnabled() == false) { + } else if (expclari->getEnabled() == false) { Backmethod->set_active(1); CLmethod->set_active(3); Lmethod->set_active(3); @@ -2975,6 +2987,72 @@ void Wavelet::avoidToggled() } } +void Wavelet::showmaskToggled() +{ + if (ushamethod->get_active_row_number() == 2 && showmask->get_active()) { + Backmethod->set_active(2); + CLmethod->set_active(2); + Lmethod->set_active(6); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + Dirmethod->set_active(3); + expclari->setEnabled(false); + + } else if (ushamethod->get_active_row_number() == 1 && showmask->get_active()) { + Backmethod->set_active(0); + CLmethod->set_active(1); + Lmethod->set_active(2); + Dirmethod->set_active(3); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + expclari->setEnabled(false); + + } + + if (ushamethod->get_active_row_number() == 2 && !showmask->get_active()) { + Backmethod->set_active(2); + CLmethod->set_active(2); + Lmethod->set_active(6); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + Dirmethod->set_active(3); + expclari->setEnabled(true); + + } else if (ushamethod->get_active_row_number() == 1 && !showmask->get_active()) { + Backmethod->set_active(0); + CLmethod->set_active(1); + Lmethod->set_active(2); + Dirmethod->set_active(3); + Lmethod->set_sensitive(true); + Dirmethod->set_sensitive(true); + expclari->setEnabled(true); + + } + + if (multiImage) { + if (showmask->get_inconsistent()) { + showmask->set_inconsistent(false); + showmaskConn.block(true); + showmask->set_active(false); + showmaskConn.block(false); + } else if (lastshowmask) { + showmask->set_inconsistent(true); + } + + lastshowmask = showmask->get_active(); + } + + if (listener && (multiImage || getEnabled())) { + if (showmask->get_inconsistent()) { + listener->panelChanged(EvWavshowmask, M("GENERAL_UNCHANGED")); + } else if (showmask->get_active()) { + listener->panelChanged(EvWavshowmask, M("GENERAL_ENABLED")); + } else { + listener->panelChanged(EvWavshowmask, M("GENERAL_DISABLED")); + } + } +} + void Wavelet::tmrToggled() { @@ -3150,13 +3228,19 @@ void Wavelet::enableToggled(MyExpander *expander) event = EvWavenafin; } else if (expander == expclari) { if (expclari->getEnabled() == false) { - Backmethod->set_active(1); - CLmethod->set_active(3); - Lmethod->set_active(3); - Dirmethod->set_active(3); - Lmethod->set_sensitive(false); - Dirmethod->set_sensitive(false); - } else { + if (! showmask->get_active()) { + Backmethod->set_active(1); + CLmethod->set_active(3); + Lmethod->set_active(3); + Dirmethod->set_active(3); + Lmethod->set_sensitive(false); + Dirmethod->set_sensitive(false); + } + } else { + if (showmask->get_active()) { + showmask->set_active(false); + } + if (ushamethod->get_active_row_number() == 2) { Backmethod->set_active(2); CLmethod->set_active(2); @@ -3173,7 +3257,6 @@ void Wavelet::enableToggled(MyExpander *expander) Dirmethod->set_sensitive(true); } } - event = EvWavenaclari; } else // unknown expander, returning ! diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 1e7a07fc6..7dee7e955 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -71,6 +71,7 @@ private: rtengine::ProcEvent EvWavmergeC; rtengine::ProcEvent EvWavsoftrad; rtengine::ProcEvent EvWavsoftradend; + rtengine::ProcEvent EvWavshowmask; void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -89,6 +90,7 @@ private: void TMmethodChanged (); void TilesmethodChanged (); void avoidToggled (); + void showmaskToggled (); void cbenabToggled (); void contrastMinusPressed (); void contrastPlusPressed (); @@ -156,6 +158,7 @@ private: Gtk::CheckButton* const lipst; Gtk::CheckButton* const avoid; Gtk::CheckButton* const tmr; + Gtk::CheckButton* const showmask; Gtk::Button* const neutralchButton; Adjuster* correction[9]; @@ -266,13 +269,13 @@ private: sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn, enableclariConn; sigc::connection enableNoiseConn, enableResidConn, enableToningConn; - sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn; + sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn, showmaskConn; sigc::connection neutralPressedConn; sigc::connection contrastPlusPressedConn; sigc::connection contrastMinusPressedConn; sigc::connection neutralchPressedConn; - bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab; + bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab, lastshowmask; int nextnlevel; IdleRegister idle_register; From 71cfb520a03900b760dee68f6458a286a5256544 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 23 Mar 2019 18:07:53 +0100 Subject: [PATCH 003/264] increase sensitivity of Soft radius clarity and shap mask --- rtengine/dcrop.cc | 4 ++-- rtengine/improccoordinator.cc | 4 ++-- rtengine/simpleprocess.cc | 4 ++-- rtgui/wavelet.cc | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 7d2d573ba..7ddf9ed8f 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1067,8 +1067,8 @@ void Crop::update(int todo) guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } - float blur = 10.f / skip * (0.1f + 0.8f * WaveParams.softrad); - rtengine::guidedFilter(guid, ble, ble, blur, 0.001, false); + float blur = 10.f / skip * (0.01f + 0.8f * WaveParams.softrad); + rtengine::guidedFilter(guid, ble, ble, blur, 0.0005, false); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 1c5b1d5df..1f18a3527 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -940,9 +940,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } - float blur = 10.f / scale * (0.1f + 0.8f * WaveParams.softrad); + float blur = 10.f / scale * (0.01f + 0.8f * WaveParams.softrad); // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); - rtengine::guidedFilter(guid, ble, ble, blur, 0.001, false); + rtengine::guidedFilter(guid, ble, ble, blur, 0.0005, false); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index d4cdfc81e..50badfdd6 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1211,9 +1211,9 @@ private: guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } - float blur = 10.f / 1 * (0.1f + 0.8f * WaveParams.softrad); + float blur = 10.f / 1 * (0.01f + 0.8f * WaveParams.softrad); // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); - rtengine::guidedFilter(guid, ble, ble, blur, 0.001, false); + rtengine::guidedFilter(guid, ble, ble, blur, 0.0005, false); diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index cda404d2a..4397e1662 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -117,8 +117,8 @@ Wavelet::Wavelet() : edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 40))), mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), - softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), - softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), + softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.01, 0.))), + softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.01, 0.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), From 3d62375623f39f51d85a614e07bad3d03bbfff28 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 24 Mar 2019 13:59:38 +0100 Subject: [PATCH 004/264] Improvment to Soft radius --- rtdata/languages/default | 4 ++-- rtengine/dcrop.cc | 11 ++++++++--- rtengine/improccoordinator.cc | 9 +++++++-- rtengine/ipwavelet.cc | 11 +++++++++-- rtengine/simpleprocess.cc | 9 +++++++-- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 5ae722656..f21a40d24 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -786,7 +786,7 @@ HISTORY_MSG_WAVMERGEL;Merge L HISTORY_MSG_WAVMERGEC;Merge C HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final -HISTORY_MSG_WAVSHOWMASK;Show mask +HISTORY_MSG_WAVSHOWMASK;Show wavelet mask HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2271,7 +2271,7 @@ TP_WAVELET_USHARP;Clarity method TP_WAVELET_USH;None TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels. TP_WAVELET_SHA;Sharp mask -TP_WAVELET_SHOWMASK;Show mask +TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_CLA;Clarity TP_WAVELET_USHARP;Sharp method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 7ddf9ed8f..21fca6153 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1066,9 +1066,14 @@ void Crop::update(int todo) ble[ir][jr] = (labnCrop->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } - - float blur = 10.f / skip * (0.01f + 0.8f * WaveParams.softrad); - rtengine::guidedFilter(guid, ble, ble, blur, 0.0005, false); + double epsilmax = 0.001; + double epsilmin = 0.0001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; + + float blur = 10.f / skip * (0.001f + 0.8f * WaveParams.softrad); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 1f18a3527..61736cdfb 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -939,10 +939,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ble[ir][jr] = (nprevl->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } + double epsilmax = 0.001; + double epsilmin = 0.0001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; - float blur = 10.f / scale * (0.01f + 0.8f * WaveParams.softrad); + float blur = 10.f / scale * (0.001f + 0.8f * WaveParams.softrad); // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); - rtengine::guidedFilter(guid, ble, ble, blur, 0.0005, false); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 8b5f33b74..b25e75b7a 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1286,9 +1286,16 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } - float blur = 10.f / skip * (0.1f + 0.1f * waparams.softradend); + // float blur = 10.f / skip * (0.1f + 0.1f * waparams.softradend); + double epsilmax = 0.001; + double epsilmin = 0.0001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * waparams.softradend + bepsil; - rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + float blur = 10.f / scale * (0.001f + 0.8f * waparams.softradend); + + rtengine::guidedFilter(guid, ble, ble, blur, epsil, multiTh); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 50badfdd6..fde5c8310 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1210,10 +1210,15 @@ private: ble[ir][jr] = (labView->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } + double epsilmax = 0.001; + double epsilmin = 0.0001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; - float blur = 10.f / 1 * (0.01f + 0.8f * WaveParams.softrad); + float blur = 10.f / 1 * (0.001f + 0.8f * WaveParams.softrad); // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); - rtengine::guidedFilter(guid, ble, ble, blur, 0.0005, false); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); From 5837f722a8e9a320061de6134dfabe704cf63c8c Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 3 Apr 2019 09:23:03 +0200 Subject: [PATCH 005/264] disabled showmask - improve GUI --- rtdata/languages/default | 2 +- rtengine/dcrop.cc | 4 ++-- rtengine/improccoordinator.cc | 4 ++-- rtengine/procparams.cc | 2 +- rtengine/simpleprocess.cc | 4 ++-- rtgui/wavelet.cc | 43 +++++++++++++++++++---------------- 6 files changed, 31 insertions(+), 28 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 8ab20b81c..126d1d693 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2277,7 +2277,7 @@ TP_WAVELET_TMTYPE;Compression method TP_WAVELET_TON;Toning TP_WAVELET_USHARP;Clarity method TP_WAVELET_USH;None -TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels. +TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels. TP_WAVELET_SHA;Sharp mask TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_CLA;Clarity diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index b7fb38c8a..c13831468 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1006,7 +1006,7 @@ void Crop::update(int todo) - if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { unshar = new LabImage(labnCrop->W, labnCrop->H); provis = params.wavelet.CLmethod; @@ -1020,7 +1020,7 @@ void Crop::update(int todo) parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); - if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { float mL = (float)(WaveParams.mergeL / 100.f); float mC = (float)(WaveParams.mergeC / 100.f); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 61736cdfb..2790f93a2 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -870,7 +870,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) - if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { unshar = new LabImage(pW, pH); provis = params->wavelet.CLmethod; params->wavelet.CLmethod = "all"; @@ -884,7 +884,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); - if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { float mL = (float)(WaveParams.mergeL / 100.f); float mC = (float)(WaveParams.mergeC / 100.f); float mL0; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 6aa680a62..c60b8e8a0 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2178,7 +2178,7 @@ WaveletParams::WaveletParams() : daubcoeffmethod("4_"), CHmethod("without"), Medgreinf("less"), - ushamethod("none"), + ushamethod("clari"), CHSLmethod("SL"), EDmethod("CU"), NPmethod("none"), diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index fde5c8310..dcf66ca5e 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1144,7 +1144,7 @@ private: CurveFactory::curveWavContL(wavcontlutili, params.wavelet.wavclCurve, wavclCurve,/* hist16C, dummy,*/ 1); - if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { unshar = new LabImage(fw, fh); provis = params.wavelet.CLmethod; params.wavelet.CLmethod = "all"; @@ -1155,7 +1155,7 @@ private: ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); - if (WaveParams.ushamethod != "none" && WaveParams.expclari && WaveParams.CLmethod != "all") { + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { float mL = (float)(WaveParams.mergeL / 100.f); float mC = (float)(WaveParams.mergeC / 100.f); float mL0; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 4397e1662..1fc4143d0 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -117,8 +117,8 @@ Wavelet::Wavelet() : edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 40))), mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), - softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.01, 0.))), - softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.01, 0.))), + softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), + softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), @@ -483,7 +483,7 @@ Wavelet::Wavelet() : showmaskConn = showmask->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::showmaskToggled)); ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock()); - ushamethod->append(M("TP_WAVELET_USH")); + // ushamethod->append(M("TP_WAVELET_USH")); ushamethod->append(M("TP_WAVELET_SHA")); ushamethod->append(M("TP_WAVELET_CLA")); ushamethodconn = ushamethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::ushamethodChanged)); @@ -495,7 +495,7 @@ Wavelet::Wavelet() : clariBox->pack_start(*mergeL); clariBox->pack_start(*mergeC); clariBox->pack_start(*softrad); - clariBox->pack_start(*showmask); +// clariBox->pack_start(*showmask); // Edge Sharpness ToolParamBlock* const edgBox = Gtk::manage(new ToolParamBlock()); @@ -1038,12 +1038,13 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) } //ushamethod - if (pp->wavelet.ushamethod == "none") { +// if (pp->wavelet.ushamethod == "none") { +// ushamethod->set_active(0); + // } else + if (pp->wavelet.ushamethod == "sharp") { ushamethod->set_active(0); - } else if (pp->wavelet.ushamethod == "sharp") { - ushamethod->set_active(1); } else if (pp->wavelet.ushamethod == "clari") { - ushamethod->set_active(2); + ushamethod->set_active(1); } //CHSLmethod->set_active (1); @@ -1721,11 +1722,12 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.Medgreinf = "less"; } + // if (ushamethod->get_active_row_number() == 0) { + // pp->wavelet.ushamethod = "none"; + // } else if (ushamethod->get_active_row_number() == 0) { - pp->wavelet.ushamethod = "none"; - } else if (ushamethod->get_active_row_number() == 1) { pp->wavelet.ushamethod = "sharp"; - } else if (ushamethod->get_active_row_number() == 2) { + } else if (ushamethod->get_active_row_number() == 1) { pp->wavelet.ushamethod = "clari"; } @@ -2340,27 +2342,28 @@ void Wavelet::TilesmethodUpdateUI() { void Wavelet::ushamethodChanged() { - if (ushamethod->get_active_row_number() == 2 && expclari->getEnabled() == true) { + if (ushamethod->get_active_row_number() == 1 && expclari->getEnabled() == true) { Backmethod->set_active(2); CLmethod->set_active(2); Lmethod->set_active(6); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); Dirmethod->set_active(3); - } else if (ushamethod->get_active_row_number() == 1 && expclari->getEnabled() == true) { + } else if (ushamethod->get_active_row_number() == 0 && expclari->getEnabled() == true) { Backmethod->set_active(0); CLmethod->set_active(1); Lmethod->set_active(2); Dirmethod->set_active(3); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); - } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { + /* } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { Backmethod->set_active(1); CLmethod->set_active(3); Lmethod->set_active(3); Dirmethod->set_active(3); Lmethod->set_sensitive(false); Dirmethod->set_sensitive(false); + */ } else if (expclari->getEnabled() == false) { Backmethod->set_active(1); CLmethod->set_active(3); @@ -2989,7 +2992,7 @@ void Wavelet::avoidToggled() void Wavelet::showmaskToggled() { - if (ushamethod->get_active_row_number() == 2 && showmask->get_active()) { + if (ushamethod->get_active_row_number() == 1 && showmask->get_active()) { Backmethod->set_active(2); CLmethod->set_active(2); Lmethod->set_active(6); @@ -2998,7 +3001,7 @@ void Wavelet::showmaskToggled() Dirmethod->set_active(3); expclari->setEnabled(false); - } else if (ushamethod->get_active_row_number() == 1 && showmask->get_active()) { + } else if (ushamethod->get_active_row_number() == 0 && showmask->get_active()) { Backmethod->set_active(0); CLmethod->set_active(1); Lmethod->set_active(2); @@ -3009,7 +3012,7 @@ void Wavelet::showmaskToggled() } - if (ushamethod->get_active_row_number() == 2 && !showmask->get_active()) { + if (ushamethod->get_active_row_number() == 1 && !showmask->get_active()) { Backmethod->set_active(2); CLmethod->set_active(2); Lmethod->set_active(6); @@ -3018,7 +3021,7 @@ void Wavelet::showmaskToggled() Dirmethod->set_active(3); expclari->setEnabled(true); - } else if (ushamethod->get_active_row_number() == 1 && !showmask->get_active()) { + } else if (ushamethod->get_active_row_number() == 0 && !showmask->get_active()) { Backmethod->set_active(0); CLmethod->set_active(1); Lmethod->set_active(2); @@ -3241,14 +3244,14 @@ void Wavelet::enableToggled(MyExpander *expander) showmask->set_active(false); } - if (ushamethod->get_active_row_number() == 2) { + if (ushamethod->get_active_row_number() == 1) { Backmethod->set_active(2); CLmethod->set_active(2); Lmethod->set_active(6); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); Dirmethod->set_active(3); - } else if (ushamethod->get_active_row_number() == 1) { + } else if (ushamethod->get_active_row_number() == 0) { Backmethod->set_active(0); CLmethod->set_active(1); Lmethod->set_active(2); From 516e05fa6138cb722a976e047ba66f6fe0ba839b Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 29 Apr 2019 07:45:26 +0200 Subject: [PATCH 006/264] Suppress grey image when chnanging Clarity --- rtengine/cplx_wavelet_filter_coeffs.h | 6 +++++- rtengine/dcrop.cc | 5 +++++ rtengine/improccoordinator.cc | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/rtengine/cplx_wavelet_filter_coeffs.h b/rtengine/cplx_wavelet_filter_coeffs.h index bd333d4b9..629bbe659 100644 --- a/rtengine/cplx_wavelet_filter_coeffs.h +++ b/rtengine/cplx_wavelet_filter_coeffs.h @@ -49,6 +49,10 @@ const float Daub4_anal16[2][16] ALIGNED16 = {//Daub 14 { -0.0002501134f, -0.0012739524f, -0.0003037575f, 0.008874895f, 0.01171997f , -0.026891225f, -0.057001725f, 0.05042335f, 0.158417505f, -0.10175691f, -0.33218624f, 0.515574245f, -0.28039564f, 0.055049715f, 0.f, 0.f} }; -// if necessary ?? we can add D20 !! +const float Daub4_anal22[2][22] ALIGNED16 = {//Daub 20 + {0.f, 0.f, 0.01885858f, 0.13306109f, 0.37278754f, 0.48681406f, 0.19881887f, -0.1766681f, -0.13855494f, 0.09006372f, 0.0658015f, -0.05048328f, -0.02082962f, 0.0234849f, 0.002550222f, -0.0075895, 0.0009866627f, 0.001408843f, -0.0004849739f, -0.0000823545f, 0.00006617734f, -0.0000093792f}, + {0.0000093792f, -0.00006617734f, 0.0000823545f, 0.0004849739f, -0.001408843f, -0.0009866627f, 0.0075895, -0.002550222f, -0.0234849f, 0.02082962f, 0.05048328f, -0.0658015f, -0.09006372f, 0.13855494f, 0.1766681f, -0.19881887f, -0.48681406f, -0.37278754f, -0.13306109f, -0.01885858f, 0.f, 0.f} +}; + } diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index c13831468..4550eac52 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1018,6 +1018,11 @@ void Crop::update(int todo) } + if (!WaveParams.expclari && WaveParams.CLmethod != "all") { + params.wavelet.CLmethod = "all"; + params.wavelet.Backmethod = "grey"; + } + parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 2790f93a2..c64fe9746 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -882,6 +882,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } + if (!WaveParams.expclari && WaveParams.CLmethod != "all") { + params->wavelet.CLmethod = "all"; + params->wavelet.Backmethod = "grey"; + } + ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { From f8b9e2618c93a011f658ce7313f06e84801db743 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 29 Apr 2019 08:10:51 +0200 Subject: [PATCH 007/264] Comment variable in cplx_wavelet_filter --- rtengine/cplx_wavelet_filter_coeffs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/cplx_wavelet_filter_coeffs.h b/rtengine/cplx_wavelet_filter_coeffs.h index 629bbe659..44a60d57a 100644 --- a/rtengine/cplx_wavelet_filter_coeffs.h +++ b/rtengine/cplx_wavelet_filter_coeffs.h @@ -48,11 +48,11 @@ const float Daub4_anal16[2][16] ALIGNED16 = {//Daub 14 {0.f, 0.f, 0.055049715f, 0.28039564f, 0.515574245f, 0.33218624f, -0.10175691f, -0.158417505f, 0.05042335f, 0.057001725f, -0.026891225f, -0.01171997f, 0.008874895f, 0.0003037575f, -0.0012739524f, 0.0002501134f}, { -0.0002501134f, -0.0012739524f, -0.0003037575f, 0.008874895f, 0.01171997f , -0.026891225f, -0.057001725f, 0.05042335f, 0.158417505f, -0.10175691f, -0.33218624f, 0.515574245f, -0.28039564f, 0.055049715f, 0.f, 0.f} }; - +/* const float Daub4_anal22[2][22] ALIGNED16 = {//Daub 20 {0.f, 0.f, 0.01885858f, 0.13306109f, 0.37278754f, 0.48681406f, 0.19881887f, -0.1766681f, -0.13855494f, 0.09006372f, 0.0658015f, -0.05048328f, -0.02082962f, 0.0234849f, 0.002550222f, -0.0075895, 0.0009866627f, 0.001408843f, -0.0004849739f, -0.0000823545f, 0.00006617734f, -0.0000093792f}, {0.0000093792f, -0.00006617734f, 0.0000823545f, 0.0004849739f, -0.001408843f, -0.0009866627f, 0.0075895, -0.002550222f, -0.0234849f, 0.02082962f, 0.05048328f, -0.0658015f, -0.09006372f, 0.13855494f, 0.1766681f, -0.19881887f, -0.48681406f, -0.37278754f, -0.13306109f, -0.01885858f, 0.f, 0.f} }; - +*/ } From f5eedc404d3aadd704fd1cea20e8d6b6b9fe7f88 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 10 May 2019 07:43:53 +0200 Subject: [PATCH 008/264] disable GUI background and process if clarity is selected --- rtengine/cplx_wavelet_filter_coeffs.h | 6 +++--- rtgui/wavelet.cc | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/rtengine/cplx_wavelet_filter_coeffs.h b/rtengine/cplx_wavelet_filter_coeffs.h index 44a60d57a..371f834a1 100644 --- a/rtengine/cplx_wavelet_filter_coeffs.h +++ b/rtengine/cplx_wavelet_filter_coeffs.h @@ -49,9 +49,9 @@ const float Daub4_anal16[2][16] ALIGNED16 = {//Daub 14 { -0.0002501134f, -0.0012739524f, -0.0003037575f, 0.008874895f, 0.01171997f , -0.026891225f, -0.057001725f, 0.05042335f, 0.158417505f, -0.10175691f, -0.33218624f, 0.515574245f, -0.28039564f, 0.055049715f, 0.f, 0.f} }; /* -const float Daub4_anal22[2][22] ALIGNED16 = {//Daub 20 - {0.f, 0.f, 0.01885858f, 0.13306109f, 0.37278754f, 0.48681406f, 0.19881887f, -0.1766681f, -0.13855494f, 0.09006372f, 0.0658015f, -0.05048328f, -0.02082962f, 0.0234849f, 0.002550222f, -0.0075895, 0.0009866627f, 0.001408843f, -0.0004849739f, -0.0000823545f, 0.00006617734f, -0.0000093792f}, - {0.0000093792f, -0.00006617734f, 0.0000823545f, 0.0004849739f, -0.001408843f, -0.0009866627f, 0.0075895, -0.002550222f, -0.0234849f, 0.02082962f, 0.05048328f, -0.0658015f, -0.09006372f, 0.13855494f, 0.1766681f, -0.19881887f, -0.48681406f, -0.37278754f, -0.13306109f, -0.01885858f, 0.f, 0.f} +const double Daub4_anal22[2][22] ALIGNED16 = {//Daub 20 + {0., 0., 0.01885858, 0.13306109, 0.37278754, 0.48681406, 0.19881887, -0.1766681, -0.13855494, 0.09006372, 0.0658015, -0.05048328, -0.02082962, 0.0234849, 0.0025502185, -0.0075895, 0.0009866625, 0.0014088433, -0.00048497392, -0.0000823545, 0.00006617718, -0.000009379205}, + {0.000009379205, -0.00006617718, 0.0000823545, 0.00048497392, -0.0014088433, -0.0009866627, 0.0075895, -0.0025502185, -0.0234849, 0.02082962, 0.05048328, -0.0658015, -0.09006372, 0.13855494, 0.1766681, -0.19881887, -0.48681406, -0.37278754, -0.13306109, -0.01885858, 0., 0.} }; */ } diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 1fc4143d0..7e4d41501 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -2349,6 +2349,8 @@ void Wavelet::ushamethodChanged() Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); Dirmethod->set_active(3); + CLmethod->set_sensitive(false); + Backmethod->set_sensitive(false); } else if (ushamethod->get_active_row_number() == 0 && expclari->getEnabled() == true) { Backmethod->set_active(0); CLmethod->set_active(1); @@ -2356,6 +2358,8 @@ void Wavelet::ushamethodChanged() Dirmethod->set_active(3); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); + CLmethod->set_sensitive(false); + Backmethod->set_sensitive(false); /* } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { Backmethod->set_active(1); CLmethod->set_active(3); @@ -2371,6 +2375,8 @@ void Wavelet::ushamethodChanged() Dirmethod->set_active(3); Lmethod->set_sensitive(false); Dirmethod->set_sensitive(false); + CLmethod->set_sensitive(true); + Backmethod->set_sensitive(true); } if (listener && (multiImage || getEnabled())) { @@ -3238,6 +3244,8 @@ void Wavelet::enableToggled(MyExpander *expander) Dirmethod->set_active(3); Lmethod->set_sensitive(false); Dirmethod->set_sensitive(false); + CLmethod->set_sensitive(true); + Backmethod->set_sensitive(true); } } else { if (showmask->get_active()) { @@ -3251,6 +3259,8 @@ void Wavelet::enableToggled(MyExpander *expander) Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); Dirmethod->set_active(3); + CLmethod->set_sensitive(false); + Backmethod->set_sensitive(false); } else if (ushamethod->get_active_row_number() == 0) { Backmethod->set_active(0); CLmethod->set_active(1); @@ -3258,6 +3268,8 @@ void Wavelet::enableToggled(MyExpander *expander) Dirmethod->set_active(3); Lmethod->set_sensitive(true); Dirmethod->set_sensitive(true); + CLmethod->set_sensitive(false); + Backmethod->set_sensitive(false); } } event = EvWavenaclari; From 744ca10eccef478ef26f44f4a5bb7091824a2740 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 13 May 2019 16:18:37 +0200 Subject: [PATCH 009/264] Improve clarity --- rtengine/dcrop.cc | 25 +++++++++++++++++++++++ rtengine/improccoordinator.cc | 37 ++++++++++++++++++++++++----------- rtengine/simpleprocess.cc | 25 +++++++++++++++++++++++ 3 files changed, 76 insertions(+), 11 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 4550eac52..8aafac91c 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -992,6 +992,12 @@ void Crop::update(int todo) LabImage *unshar = nullptr; Glib::ustring provis; LabImage *provradius = nullptr; + bool procont = WaveParams.expcontrast; + bool prochro = WaveParams.expchroma; + bool proedge = WaveParams.expedge; + bool profin = WaveParams.expfinal; + bool proton = WaveParams.exptoning; + bool pronois = WaveParams.expnoise; if(WaveParams.showmask) { // WaveParams.showmask = false; @@ -1023,8 +1029,27 @@ void Crop::update(int todo) params.wavelet.Backmethod = "grey"; } + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { + WaveParams.expcontrast = false; + WaveParams.expchroma = false; + WaveParams.expedge = false; + WaveParams.expfinal = false; + WaveParams.exptoning = false; + WaveParams.expnoise = false; + } + parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { + WaveParams.expcontrast = procont; + WaveParams.expchroma = prochro; + WaveParams.expedge = proedge; + WaveParams.expfinal = profin; + WaveParams.exptoning = proton; + WaveParams.expnoise = pronois; + } + + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { float mL = (float)(WaveParams.mergeL / 100.f); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index c64fe9746..a4e95aacf 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -856,6 +856,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) LabImage *unshar = nullptr; Glib::ustring provis; LabImage *provradius = nullptr; + bool procont = WaveParams.expcontrast; + bool prochro = WaveParams.expchroma; + bool proedge = WaveParams.expedge; + bool profin = WaveParams.expfinal; + bool proton = WaveParams.exptoning; + bool pronois = WaveParams.expnoise; if(WaveParams.showmask) { // WaveParams.showmask = false; @@ -887,8 +893,27 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) params->wavelet.Backmethod = "grey"; } + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { + WaveParams.expcontrast = false; + WaveParams.expchroma = false; + WaveParams.expedge = false; + WaveParams.expfinal = false; + WaveParams.exptoning = false; + WaveParams.expnoise = false; + } + ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); + + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { + WaveParams.expcontrast = procont; + WaveParams.expchroma = prochro; + WaveParams.expedge = proedge; + WaveParams.expfinal = profin; + WaveParams.exptoning = proton; + WaveParams.expnoise = pronois; + } + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { float mL = (float)(WaveParams.mergeL / 100.f); float mC = (float)(WaveParams.mergeC / 100.f); @@ -924,17 +949,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (WaveParams.softrad > 0.f) { array2D ble(pW, pH); array2D guid(pW, pH); - /* - #ifdef _OPENMP - const int numThreads = omp_get_max_threads(); - #endif - - bool multiTh = false; - - if (numThreads > 1) { - multiTh = true; - } - */ #ifdef _OPENMP #pragma omp parallel for #endif @@ -973,6 +987,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } + } ipf.softLight(nprevl); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index dcf66ca5e..dbc2f9168 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1129,6 +1129,13 @@ private: WavOpacityCurveW waOpacityCurveW; WavOpacityCurveWL waOpacityCurveWL; LabImage *provradius = nullptr; + bool procont = WaveParams.expcontrast; + bool prochro = WaveParams.expchroma; + bool proedge = WaveParams.expedge; + bool profin = WaveParams.expfinal; + bool proton = WaveParams.exptoning; + bool pronois = WaveParams.expnoise; + /* if(WaveParams.showmask) { WaveParams.showmask = false; @@ -1153,8 +1160,26 @@ private: params.wavelet.CLmethod = provis; } + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { + WaveParams.expcontrast = false; + WaveParams.expchroma = false; + WaveParams.expedge = false; + WaveParams.expfinal = false; + WaveParams.exptoning = false; + WaveParams.expnoise = false; + } + ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { + WaveParams.expcontrast = procont; + WaveParams.expchroma = prochro; + WaveParams.expedge = proedge; + WaveParams.expfinal = profin; + WaveParams.exptoning = proton; + WaveParams.expnoise = pronois; + } + if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { float mL = (float)(WaveParams.mergeL / 100.f); float mC = (float)(WaveParams.mergeC / 100.f); From 14dc398c4d69b0cb47bacfb88465a75fe36f8f82 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 14 May 2019 10:55:48 +0200 Subject: [PATCH 010/264] Improvment to softradius clarity --- rtengine/dcrop.cc | 71 +++++++++++++------------- rtengine/improccoordinator.cc | 45 +++++++++++++++-- rtengine/simpleprocess.cc | 93 ++++++++++++++++++----------------- 3 files changed, 123 insertions(+), 86 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 8aafac91c..2d584eb8c 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1046,7 +1046,41 @@ void Crop::update(int todo) WaveParams.expedge = proedge; WaveParams.expfinal = profin; WaveParams.exptoning = proton; - WaveParams.expnoise = pronois; + WaveParams.expnoise = pronois; + if (WaveParams.softrad > 0.f) { + array2D ble(labnCrop->W, labnCrop->H); + array2D guid(labnCrop->W, labnCrop->H); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < labnCrop->H ; ir++) + for (int jr = 0; jr < labnCrop->W; jr++) { + ble[ir][jr] = (labnCrop->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + double epsilmax = 0.0001; + double epsilmin = 0.00001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; + + float blur = 10.f / skip * (0.0001f + 0.8f * WaveParams.softrad); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < labnCrop->H; ir++) + for (int jr = 0; jr < labnCrop->W; jr++) { + labnCrop->L[ir][jr] = 32768.f * ble[ir][jr]; + } + } + } @@ -1082,41 +1116,6 @@ void Crop::update(int todo) delete unshar; unshar = NULL; - - if (WaveParams.softrad > 0.f) { - array2D ble(labnCrop->W, labnCrop->H); - array2D guid(labnCrop->W, labnCrop->H); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < labnCrop->H ; ir++) - for (int jr = 0; jr < labnCrop->W; jr++) { - ble[ir][jr] = (labnCrop->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; - } - double epsilmax = 0.001; - double epsilmin = 0.0001; - double aepsil = (epsilmax - epsilmin) / 90.f; - double bepsil = epsilmax - 100.f * aepsil; - double epsil = aepsil * WaveParams.softrad + bepsil; - - float blur = 10.f / skip * (0.001f + 0.8f * WaveParams.softrad); - rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); - - - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < labnCrop->H; ir++) - for (int jr = 0; jr < labnCrop->W; jr++) { - labnCrop->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; - } - } - if (WaveParams.softrad > 0.f) { delete provradius; provradius = NULL; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index a4e95aacf..12929ae25 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -911,7 +911,42 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) WaveParams.expedge = proedge; WaveParams.expfinal = profin; WaveParams.exptoning = proton; - WaveParams.expnoise = pronois; + WaveParams.expnoise = pronois; + + if (WaveParams.softrad > 0.f) { + array2D ble(pW, pH); + array2D guid(pW, pH); +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < pH; ir++) + for (int jr = 0; jr < pW; jr++) { + ble[ir][jr] = (nprevl->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + double epsilmax = 0.0001; + double epsilmin = 0.00001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; + + float blur = 10.f / scale * (0.0001f + 0.8f * WaveParams.softrad); + // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < pH; ir++) + for (int jr = 0; jr < pW; jr++) { + nprevl->L[ir][jr] = 32768.f * ble[ir][jr]; + } + } + } if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { @@ -920,6 +955,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float mL0; float mC0; + + if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { mL0 = mC0 = 0.f; mL = -mL; @@ -945,7 +982,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) delete unshar; unshar = NULL; - +/* if (WaveParams.softrad > 0.f) { array2D ble(pW, pH); array2D guid(pW, pH); @@ -979,7 +1016,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) nprevl->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; } } - +*/ if (WaveParams.softrad > 0.f) { delete provradius; provradius = NULL; @@ -987,7 +1024,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } - + } ipf.softLight(nprevl); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index dbc2f9168..7b7361c91 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1177,7 +1177,53 @@ private: WaveParams.expedge = proedge; WaveParams.expfinal = profin; WaveParams.exptoning = proton; - WaveParams.expnoise = pronois; + WaveParams.expnoise = pronois; + + if (WaveParams.softrad > 0.f) { + array2D ble(fw, fh); + array2D guid(fw, fh); + /* + #ifdef _OPENMP + const int numThreads = omp_get_max_threads(); + #endif + + bool multiTh = false; + + if (numThreads > 1) { + multiTh = true; + } + */ +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < fh; ir++) + for (int jr = 0; jr < fw; jr++) { + ble[ir][jr] = (labView->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + double epsilmax = 0.0001; + double epsilmin = 0.00001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; + + float blur = 10.f / 1 * (0.0001f + 0.8f * WaveParams.softrad); + // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < fh; ir++) + for (int jr = 0; jr < fw; jr++) { + labView->L[ir][jr] = 32768.f * ble[ir][jr]; + } + } + } if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { @@ -1212,51 +1258,6 @@ private: delete unshar; unshar = NULL; - if (WaveParams.softrad > 0.f) { - array2D ble(fw, fh); - array2D guid(fw, fh); - /* - #ifdef _OPENMP - const int numThreads = omp_get_max_threads(); - #endif - - bool multiTh = false; - - if (numThreads > 1) { - multiTh = true; - } - */ -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < fh; ir++) - for (int jr = 0; jr < fw; jr++) { - ble[ir][jr] = (labView->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; - } - double epsilmax = 0.001; - double epsilmin = 0.0001; - double aepsil = (epsilmax - epsilmin) / 90.f; - double bepsil = epsilmax - 100.f * aepsil; - double epsil = aepsil * WaveParams.softrad + bepsil; - - float blur = 10.f / 1 * (0.001f + 0.8f * WaveParams.softrad); - // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); - rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); - - - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < fh; ir++) - for (int jr = 0; jr < fw; jr++) { - labView->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; - } - } - if (WaveParams.softrad > 0.f) { delete provradius; provradius = NULL; From 1ee64dcdb6a103141d54239638571c53e4308a4d Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 15 May 2019 13:37:38 +0200 Subject: [PATCH 011/264] Improve general soft --- rtengine/ipwavelet.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index b25e75b7a..31b215f02 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1282,11 +1282,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int ir = 0; ir < lab->H; ir++) for (int jr = 0; jr < lab->W; jr++) { - ble[ir][jr] = (dst->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; + ble[ir][jr] = dst->L[ir][jr] / 32768.f; guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } - // float blur = 10.f / skip * (0.1f + 0.1f * waparams.softradend); double epsilmax = 0.001; double epsilmin = 0.0001; double aepsil = (epsilmax - epsilmin) / 90.f; @@ -1305,7 +1304,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int ir = 0; ir < lab->H; ir++) for (int jr = 0; jr < lab->W; jr++) { - dst->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; + dst->L[ir][jr] = 32768.f * ble[ir][jr]; } } From fc9867eb2db7f2cda9965409bcb605772ac2d251 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 21 May 2019 07:48:18 +0200 Subject: [PATCH 012/264] Improvment to residual image --- rtdata/languages/default | 6 +++- rtengine/improcfun.cc | 8 ++--- rtengine/ipwavelet.cc | 8 +++-- rtengine/procparams.cc | 8 +++++ rtengine/procparams.h | 2 ++ rtgui/addsetids.h | 2 ++ rtgui/batchtoolpanelcoord.cc | 6 ++-- rtgui/epd.cc | 12 +++---- rtgui/paramsedited.cc | 12 +++++++ rtgui/paramsedited.h | 2 ++ rtgui/preferences.cc | 2 ++ rtgui/wavelet.cc | 63 +++++++++++++++++++++++++++++++++--- rtgui/wavelet.h | 6 +++- 13 files changed, 115 insertions(+), 22 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 8cad97db8..2c478a23a 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -781,6 +781,8 @@ HISTORY_MSG_WAVMERGEC;Merge C HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVSHOWMASK;Show wavelet mask +HISTORY_MSG_WAVEDGS;Edge stopping +HISTORY_MSG_WAVSCALE;Scale HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2228,8 +2230,10 @@ TP_WAVELET_TILESIZE;Tiling method TP_WAVELET_TILESLIT;Little tiles TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. TP_WAVELET_TMSTRENGTH;Compression strength -TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. +TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. TP_WAVELET_TMTYPE;Compression method +TP_WAVELET_TMEDGS;Edge stopping +TP_WAVELET_TMSCALE;Scale TP_WAVELET_TON;Toning TP_WAVELET_USHARP;Clarity method TP_WAVELET_USH;None diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index f63313126..bb7c0ac6b 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -5126,11 +5126,11 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi if (!params->epd.enabled) { return; } - +/* if (params->wavelet.enabled && params->wavelet.tmrs != 0) { return; } - +*/ float stren = params->epd.strength; float edgest = params->epd.edgeStopping; float sca = params->epd.scale; @@ -5240,11 +5240,11 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip if (!params->epd.enabled) { return; } - +/* if (params->wavelet.enabled && params->wavelet.tmrs != 0) { return; } - +*/ float stren = params->epd.strength; float edgest = params->epd.edgeStopping; float sca = params->epd.scale; diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 3c51d8f18..af8adca90 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1590,8 +1590,8 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat float stren = cp.tmstrength; - float edgest = params->epd.edgeStopping; - float sca = params->epd.scale; + float edgest = params->wavelet.edgs; + float sca = params->wavelet.scale; float gamm = params->wavelet.gamma; float rew = params->epd.reweightingIterates; EdgePreservingDecomposition epd2(W_L, H_L); @@ -1769,6 +1769,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * { if (contrast != 0.f && cp.resena && max0 > 0.0) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step { + // #ifdef _OPENMP #pragma omp for #endif @@ -1794,7 +1795,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } } - + +// if (cp.tonemap && cp.contmet == 1 && cp.resena) { float maxp = max0 * 256.f; float minp = min0 * 256.f; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index c60b8e8a0..1fa4d62a4 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2190,6 +2190,8 @@ WaveletParams::WaveletParams() : resconH(0), reschro(0), tmrs(0), + edgs(1.4), + scale(1.), gamma(1), sup(0), sky(0.0), @@ -2293,6 +2295,8 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && resconH == other.resconH && reschro == other.reschro && tmrs == other.tmrs + && edgs == other.edgs + && scale == other.scale && gamma == other.gamma && sup == other.sup && sky == other.sky @@ -3431,6 +3435,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.thrH, "Wavelet", "ThresholdResidHighLight", wavelet.thrH, keyFile); saveToKeyfile(!pedited || pedited->wavelet.reschro, "Wavelet", "Residualchroma", wavelet.reschro, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmrs, "Wavelet", "ResidualTM", wavelet.tmrs, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.edgs, "Wavelet", "ResidualEDGS", wavelet.edgs, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.scale, "Wavelet", "ResidualSCALE", wavelet.scale, keyFile); saveToKeyfile(!pedited || pedited->wavelet.gamma, "Wavelet", "Residualgamma", wavelet.gamma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.sky, "Wavelet", "HueRangeResidual", wavelet.sky, keyFile); saveToKeyfile(!pedited || pedited->wavelet.hueskin2, "Wavelet", "HueRange", wavelet.hueskin2.toVector(), keyFile); @@ -4516,6 +4522,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", pedited, wavelet.resconH, pedited->wavelet.resconH); assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", pedited, wavelet.reschro, pedited->wavelet.reschro); assignFromKeyfile(keyFile, "Wavelet", "ResidualTM", pedited, wavelet.tmrs, pedited->wavelet.tmrs); + assignFromKeyfile(keyFile, "Wavelet", "ResidualEDGS", pedited, wavelet.edgs, pedited->wavelet.edgs); + assignFromKeyfile(keyFile, "Wavelet", "ResidualSCALE", pedited, wavelet.scale, pedited->wavelet.scale); assignFromKeyfile(keyFile, "Wavelet", "Residualgamma", pedited, wavelet.gamma, pedited->wavelet.gamma); assignFromKeyfile(keyFile, "Wavelet", "ContExtra", pedited, wavelet.sup, pedited->wavelet.sup); assignFromKeyfile(keyFile, "Wavelet", "HueRangeResidual", pedited, wavelet.sky, pedited->wavelet.sky); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 1258ee05b..a17a34aaa 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1222,6 +1222,8 @@ struct WaveletParams { int resconH; int reschro; double tmrs; + double edgs; + double scale; double gamma; int sup; double sky; diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 163bc27ef..7e9f6f6cd 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -103,6 +103,8 @@ enum { ADDSET_WA_EDGEDETECTTHR, ADDSET_WA_EDGEDETECTTHR2, ADDSET_WA_TMRS, + ADDSET_WA_EDGS, + ADDSET_WA_SCALE, ADDSET_WA_GAMMA, ADDSET_RETI_STR, ADDSET_RETI_NEIGH, diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 1a0eaeb28..63934f21c 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -165,7 +165,7 @@ void BatchToolPanelCoordinator::initSession () shadowshighlights->setAdjusterBehavior (false, false); dirpyrequalizer->setAdjusterBehavior (false, false, false); - wavelet->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); + wavelet->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); dirpyrdenoise->setAdjusterBehavior (false, false, false, false, false, false, false); bayerprocess->setAdjusterBehavior(false, false, false, false, false, false); xtransprocess->setAdjusterBehavior(false, false); @@ -213,7 +213,7 @@ void BatchToolPanelCoordinator::initSession () blackwhite->setAdjusterBehavior (options.baBehav[ADDSET_BLACKWHITE_HUES], options.baBehav[ADDSET_BLACKWHITE_GAMMA]); shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS]); dirpyrequalizer->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYREQ], options.baBehav[ADDSET_DIRPYREQ_THRESHOLD], options.baBehav[ADDSET_DIRPYREQ_SKINPROTECT]); - wavelet->setAdjusterBehavior (options.baBehav[ADDSET_WA], options.baBehav[ADDSET_WA_THRESHOLD], options.baBehav[ADDSET_WA_THRESHOLD2], options.baBehav[ADDSET_WA_THRES], options.baBehav[ADDSET_WA_CHRO], options.baBehav[ADDSET_WA_CHROMA], options.baBehav[ADDSET_WA_CONTRAST], options.baBehav[ADDSET_WA_SKINPROTECT], options.baBehav[ADDSET_WA_RESCHRO], options.baBehav[ADDSET_WA_TMRS], options.baBehav[ADDSET_WA_RESCON], options.baBehav[ADDSET_WA_RESCONH], options.baBehav[ADDSET_WA_THRR], options.baBehav[ADDSET_WA_THRRH], options.baBehav[ADDSET_WA_SKYPROTECT], options.baBehav[ADDSET_WA_EDGRAD], options.baBehav[ADDSET_WA_EDGVAL], options.baBehav[ADDSET_WA_STRENGTH], options.baBehav[ADDSET_WA_GAMMA], options.baBehav[ADDSET_WA_EDGEDETECT], options.baBehav[ADDSET_WA_EDGEDETECTTHR], options.baBehav[ADDSET_WA_EDGEDETECTTHR2]); + wavelet->setAdjusterBehavior (options.baBehav[ADDSET_WA], options.baBehav[ADDSET_WA_THRESHOLD], options.baBehav[ADDSET_WA_THRESHOLD2], options.baBehav[ADDSET_WA_THRES], options.baBehav[ADDSET_WA_CHRO], options.baBehav[ADDSET_WA_CHROMA], options.baBehav[ADDSET_WA_CONTRAST], options.baBehav[ADDSET_WA_SKINPROTECT], options.baBehav[ADDSET_WA_RESCHRO], options.baBehav[ADDSET_WA_TMRS], options.baBehav[ADDSET_WA_EDGS], options.baBehav[ADDSET_WA_SCALE], options.baBehav[ADDSET_WA_RESCON], options.baBehav[ADDSET_WA_RESCONH], options.baBehav[ADDSET_WA_THRR], options.baBehav[ADDSET_WA_THRRH], options.baBehav[ADDSET_WA_SKYPROTECT], options.baBehav[ADDSET_WA_EDGRAD], options.baBehav[ADDSET_WA_EDGVAL], options.baBehav[ADDSET_WA_STRENGTH], options.baBehav[ADDSET_WA_GAMMA], options.baBehav[ADDSET_WA_EDGEDETECT], options.baBehav[ADDSET_WA_EDGEDETECTTHR], options.baBehav[ADDSET_WA_EDGEDETECTTHR2]); dirpyrdenoise->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYRDN_LUMA], options.baBehav[ADDSET_DIRPYRDN_LUMDET], options.baBehav[ADDSET_DIRPYRDN_CHROMA], options.baBehav[ADDSET_DIRPYRDN_CHROMARED], options.baBehav[ADDSET_DIRPYRDN_CHROMABLUE], options.baBehav[ADDSET_DIRPYRDN_GAMMA], options.baBehav[ADDSET_DIRPYRDN_PASSES]); bayerprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION], options.baBehav[ADDSET_BAYER_ITER], options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST], options.baBehav[ADDSET_BAYER_PS_SIGMA], options.baBehav[ADDSET_BAYER_PS_SMOOTH], options.baBehav[ADDSET_BAYER_PS_EPERISO]); xtransprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION], options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST]); @@ -329,6 +329,8 @@ void BatchToolPanelCoordinator::initSession () if (options.baBehav[ADDSET_WA_RESCONH]) { pparams.wavelet.resconH = 0; } if (options.baBehav[ADDSET_WA_RESCHRO]) { pparams.wavelet.reschro = 0; } if (options.baBehav[ADDSET_WA_TMRS]) { pparams.wavelet.tmrs = 0; } + if (options.baBehav[ADDSET_WA_EDGS]) { pparams.wavelet.edgs = 0; } + if (options.baBehav[ADDSET_WA_SCALE]) { pparams.wavelet.scale = 0; } if (options.baBehav[ADDSET_WA_THRR]) { pparams.wavelet.thr = 0; } if (options.baBehav[ADDSET_WA_THRRH]) { pparams.wavelet.thrH = 0; } if (options.baBehav[ADDSET_WA_SKYPROTECT]) { pparams.wavelet.sky = 0; } diff --git a/rtgui/epd.cc b/rtgui/epd.cc index 4b7cca10a..0b62569eb 100644 --- a/rtgui/epd.cc +++ b/rtgui/epd.cc @@ -31,8 +31,8 @@ EdgePreservingDecompositionUI::EdgePreservingDecompositionUI () : FoldableToolPa strength = Gtk::manage(new Adjuster (M("TP_EPD_STRENGTH"), -1.0, 2.0, 0.01, 0.5)); gamma = Gtk::manage(new Adjuster (M("TP_EPD_GAMMA"), 0.8, 1.5, 0.01, 1.)); - edgeStopping = Gtk::manage(new Adjuster (M("TP_EPD_EDGESTOPPING"), 0.1, 4.0, 0.01, 0.5)); - scale = Gtk::manage(new Adjuster (M("TP_EPD_SCALE"), 0.1, 10.0, 0.01, 0.1)); + edgeStopping = Gtk::manage(new Adjuster (M("TP_EPD_EDGESTOPPING"), 0.1, 4.0, 0.01, 1.4)); + scale = Gtk::manage(new Adjuster (M("TP_EPD_SCALE"), 0.1, 10.0, 0.01, 1.0)); reweightingIterates = Gtk::manage(new Adjuster (M("TP_EPD_REWEIGHTINGITERATES"), 0, 9, 1, 0)); strength->setAdjusterListener(this); @@ -69,7 +69,7 @@ void EdgePreservingDecompositionUI::read(const ProcParams *pp, const ParamsEdite setEnabled(pp->epd.enabled); strength->set_sensitive (true); - +/* if(pp->wavelet.enabled) { if(pp->wavelet.tmrs == 0) { strength->set_sensitive (true); @@ -79,7 +79,7 @@ void EdgePreservingDecompositionUI::read(const ProcParams *pp, const ParamsEdite gamma->set_sensitive (false); } } - +*/ strength->setValue(pp->epd.strength); gamma->setValue(pp->epd.gamma); edgeStopping->setValue(pp->epd.edgeStopping); @@ -98,7 +98,7 @@ void EdgePreservingDecompositionUI::write(ProcParams *pp, ParamsEdited *pedited) pp->epd.reweightingIterates = reweightingIterates->getValue(); pp->epd.enabled = getEnabled(); strength->set_sensitive (true); - +/* if(pp->wavelet.enabled) { if(pp->wavelet.tmrs == 0) { strength->set_sensitive (true); @@ -108,7 +108,7 @@ void EdgePreservingDecompositionUI::write(ProcParams *pp, ParamsEdited *pedited) gamma->set_sensitive (false); } } - +*/ if(pedited) { pedited->epd.strength = strength->getEditedState(); pedited->epd.gamma = gamma->getEditedState(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 6e9a6372c..f0abd04f7 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -499,6 +499,8 @@ void ParamsEdited::set(bool v) wavelet.resconH = v; wavelet.reschro = v; wavelet.tmrs = v; + wavelet.edgs = v; + wavelet.scale = v; wavelet.gamma = v; wavelet.sup = v; wavelet.sky = v; @@ -1073,6 +1075,8 @@ void ParamsEdited::initFrom(const std::vector& wavelet.resconH = wavelet.resconH && p.wavelet.resconH == other.wavelet.resconH; wavelet.reschro = wavelet.reschro && p.wavelet.reschro == other.wavelet.reschro; wavelet.tmrs = wavelet.tmrs && p.wavelet.tmrs == other.wavelet.tmrs; + wavelet.edgs = wavelet.edgs && p.wavelet.edgs == other.wavelet.edgs; + wavelet.scale = wavelet.scale && p.wavelet.scale == other.wavelet.scale; wavelet.gamma = wavelet.gamma && p.wavelet.gamma == other.wavelet.gamma; wavelet.sup = wavelet.sup && p.wavelet.sup == other.wavelet.sup; wavelet.sky = wavelet.sky && p.wavelet.sky == other.wavelet.sky; @@ -3073,6 +3077,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.tmrs = dontforceSet && options.baBehav[ADDSET_WA_TMRS] ? toEdit.wavelet.tmrs + mods.wavelet.tmrs : mods.wavelet.tmrs; } + if (wavelet.edgs) { + toEdit.wavelet.edgs = dontforceSet && options.baBehav[ADDSET_WA_EDGS] ? toEdit.wavelet.edgs + mods.wavelet.edgs : mods.wavelet.edgs; + } + + if (wavelet.scale) { + toEdit.wavelet.scale = dontforceSet && options.baBehav[ADDSET_WA_SCALE] ? toEdit.wavelet.scale + mods.wavelet.scale : mods.wavelet.scale; + } + if (wavelet.gamma) { toEdit.wavelet.gamma = dontforceSet && options.baBehav[ADDSET_WA_GAMMA] ? toEdit.wavelet.gamma + mods.wavelet.gamma : mods.wavelet.gamma; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 366703fc7..5e123e638 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -498,6 +498,8 @@ struct WaveletParamsEdited { bool resconH; bool reschro; bool tmrs; + bool edgs; + bool scale; bool gamma; bool sup; bool sky; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index b7d10c8de..63a9315a6 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -389,6 +389,8 @@ Gtk::Widget* Preferences::getBatchProcPanel () appendBehavList (mi, M ("TP_WAVELET_THRH"), ADDSET_WA_THRRH, true); appendBehavList (mi, M ("TP_WAVELET_RESCHRO"), ADDSET_WA_RESCHRO, true); appendBehavList (mi, M ("TP_WAVELET_TMSTRENGTH"), ADDSET_WA_TMRS, true); + appendBehavList (mi, M ("TP_WAVELET_TMEDGS"), ADDSET_WA_EDGS, true); + appendBehavList (mi, M ("TP_WAVELET_TMSCALE"), ADDSET_WA_SCALE, true); appendBehavList (mi, M ("TP_WAVELET_SKY"), ADDSET_WA_SKYPROTECT, true); appendBehavList (mi, M ("TP_WAVELET_CONTRA"), ADDSET_WA_CONTRAST, true); appendBehavList (mi, M ("TP_WAVELET_STRENGTH"), ADDSET_WA_STRENGTH, true); diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 2c83319d7..165db8e94 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -81,6 +81,8 @@ Wavelet::Wavelet() : resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), + edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), + scale(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSCALE"), 0.1, 10.0, 0.01, 1.0))), gamma(Gtk::manage(new Adjuster(M("TP_WAVELET_COMPGAMMA"), 0.4, 2.0, 0.01, 1.0))), sup(Gtk::manage(new Adjuster(M("TP_WAVELET_SUPE"), -100, 350, 1, 0))), sky(Gtk::manage(new Adjuster(M("TP_WAVELET_SKY"), -100., 100.0, 1., 0.))), @@ -163,6 +165,8 @@ Wavelet::Wavelet() : EvWavsoftrad = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRAD"); EvWavsoftradend = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRADEND"); EvWavshowmask = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSHOWMASK"); + EvWavedgs = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVEDGS"); + EvWavscale = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSCALE"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -704,6 +708,16 @@ Wavelet::Wavelet() : resBox->pack_start(*gamma); gamma->setAdjusterListener(this); + //edgs->set_tooltip_text(M("TP_WAVELET_TMEDGS_TOOLTIP")); + + resBox->pack_start(*edgs); + edgs->setAdjusterListener(this); + + //scale->set_tooltip_text(M("TP_WAVELET_TMSCALE_TOOLTIP")); + + resBox->pack_start(*scale); + scale->setAdjusterListener(this); + Gtk::HSeparator* const separatorR1 = Gtk::manage(new Gtk::HSeparator()); resBox->pack_start(*separatorR1, Gtk::PACK_SHRINK, 2); @@ -1203,6 +1217,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) resconH->setValue(pp->wavelet.resconH); reschro->setValue(pp->wavelet.reschro); tmrs->setValue(pp->wavelet.tmrs); + edgs->setValue(pp->wavelet.edgs); + scale->setValue(pp->wavelet.scale); gamma->setValue(pp->wavelet.gamma); sup->setValue(pp->wavelet.sup); sky->setValue(pp->wavelet.sky); @@ -1350,6 +1366,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) resconH->setEditedState(pedited->wavelet.resconH ? Edited : UnEdited); reschro->setEditedState(pedited->wavelet.reschro ? Edited : UnEdited); tmrs->setEditedState(pedited->wavelet.tmrs ? Edited : UnEdited); + edgs->setEditedState(pedited->wavelet.edgs ? Edited : UnEdited); + scale->setEditedState(pedited->wavelet.scale ? Edited : UnEdited); gamma->setEditedState(pedited->wavelet.gamma ? Edited : UnEdited); sup->setEditedState(pedited->wavelet.sup ? Edited : UnEdited); sky->setEditedState(pedited->wavelet.sky ? Edited : UnEdited); @@ -1529,6 +1547,8 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.resconH = resconH->getValue(); pp->wavelet.reschro = reschro->getValue(); pp->wavelet.tmrs = tmrs->getValue(); + pp->wavelet.edgs = edgs->getValue(); + pp->wavelet.scale = scale->getValue(); pp->wavelet.gamma = gamma->getValue(); pp->wavelet.sup = sup->getValue(); pp->wavelet.sky = sky->getValue(); @@ -1636,6 +1656,8 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.resconH = resconH->getEditedState(); pedited->wavelet.reschro = reschro->getEditedState(); pedited->wavelet.tmrs = tmrs->getEditedState(); + pedited->wavelet.edgs = edgs->getEditedState(); + pedited->wavelet.scale = scale->getEditedState(); pedited->wavelet.gamma = gamma->getEditedState(); pedited->wavelet.sup = sup->getEditedState(); pedited->wavelet.sky = sky->getEditedState(); @@ -1867,6 +1889,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); tmrs->setDefault(defParams->wavelet.tmrs); + edgs->setDefault(defParams->wavelet.edgs); + scale->setDefault(defParams->wavelet.scale); gamma->setDefault(defParams->wavelet.gamma); sup->setDefault(defParams->wavelet.sup); sky->setDefault(defParams->wavelet.sky); @@ -1925,6 +1949,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); tmrs->setDefault(defParams->wavelet.tmrs); + edgs->setDefault(defParams->wavelet.edgs); + scale->setDefault(defParams->wavelet.scale); gamma->setDefault(defParams->wavelet.gamma); sup->setDefault(defParams->wavelet.sup); sky->setDefaultEditedState(pedited->wavelet.sky ? Edited : UnEdited); @@ -1972,6 +1998,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit resconH->setDefaultEditedState(Irrelevant); reschro->setDefaultEditedState(Irrelevant); tmrs->setDefaultEditedState(Irrelevant); + edgs->setDefaultEditedState(Irrelevant); + scale->setDefaultEditedState(Irrelevant); gamma->setDefaultEditedState(Irrelevant); sup->setDefaultEditedState(Irrelevant); sky->setDefaultEditedState(Irrelevant); @@ -2274,6 +2302,14 @@ void Wavelet::TMmethodUpdateUI() } } */ + if(TMmethod->get_active_row_number() == 1) { + edgs->show(); + scale->show(); + } else if (TMmethod->get_active_row_number() == 0) { + edgs->hide(); + scale->hide(); + } + } void Wavelet::TMmethodChanged() @@ -2476,6 +2512,8 @@ void Wavelet::setBatchMode(bool batchMode) resconH->showEditedCB(); reschro->showEditedCB(); tmrs->showEditedCB(); + edgs->showEditedCB(); + scale->showEditedCB(); gamma->showEditedCB(); sup->showEditedCB(); sky->showEditedCB(); @@ -2524,7 +2562,7 @@ void Wavelet::setBatchMode(bool batchMode) void Wavelet::adjusterUpdateUI(Adjuster* a) { - /* + /* if (!batchMode) { if (a == tmrs ) { float tm; @@ -2537,10 +2575,10 @@ void Wavelet::adjusterUpdateUI(Adjuster* a) tm=tmrs->getValue(); if(tm==0.f) tmr->hide(); else tmr->show(); - ); + } } - */ + */ } void Wavelet::adjusterChanged(Adjuster* a, double newval) @@ -2554,12 +2592,25 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavresconH, resconH->getTextValue()); } else if (a == reschro) { listener->panelChanged(EvWavreschro, reschro->getTextValue()); - } else if (a == tmrs) { + } else if (a == tmrs) { adjusterUpdateUI(a); listener->panelChanged(EvWavtmrs, tmrs->getTextValue()); + if(tmrs->getValue() != 0 && TMmethod->get_active_row_number() == 1) { + edgs->show(); + scale->show(); + } else if (TMmethod->get_active_row_number() == 0) { + edgs->hide(); + scale->hide(); + } } else if (a == gamma) { adjusterUpdateUI(a); listener->panelChanged(EvWavgamma, gamma->getTextValue()); + } else if (a == edgs) { + adjusterUpdateUI(a); + listener->panelChanged(EvWavedgs, edgs->getTextValue()); + } else if (a == scale) { + adjusterUpdateUI(a); + listener->panelChanged(EvWavscale, scale->getTextValue()); } else if (a == sky) { listener->panelChanged(EvWavsky, sky->getTextValue()); } else if (a == sup) { @@ -3130,7 +3181,7 @@ void Wavelet::colorForValue(double valX, double valY, enum ColorCaller::ElemType caller->ccGreen = double(G); caller->ccBlue = double(B); } -void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add) +void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool edgsadd, bool scaleadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add) { for (int i = 0; i < 9; i++) { @@ -3148,6 +3199,8 @@ void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool th resconH->setAddMode(resconHadd); reschro->setAddMode(reschroadd); tmrs->setAddMode(tmrsadd); + edgs->setAddMode(edgsadd); + scale->setAddMode(scaleadd); thr->setAddMode(thradd); thrH->setAddMode(thrHadd); sky->setAddMode(skyadd); diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 7dee7e955..5878a1ae4 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -50,7 +50,7 @@ public: void autoOpenCurve () override; void curveChanged (CurveEditor* ce) override; void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; - void setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add); + void setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool edgsadd, bool scaleadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add); void setBatchMode (bool batchMode) override; void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; void setEditProvider (EditDataProvider *provider) override; @@ -72,6 +72,8 @@ private: rtengine::ProcEvent EvWavsoftrad; rtengine::ProcEvent EvWavsoftradend; rtengine::ProcEvent EvWavshowmask; + rtengine::ProcEvent EvWavedgs; + rtengine::ProcEvent EvWavscale; void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -167,6 +169,8 @@ private: Adjuster* const resconH; Adjuster* const reschro; Adjuster* const tmrs; + Adjuster* const edgs; + Adjuster* const scale; Adjuster* const gamma; Adjuster* const sup; Adjuster* const sky; From 04d6b28d2ed7cee893c0cdca9834e3b9d8fe3615 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 26 May 2019 17:28:58 +0200 Subject: [PATCH 013/264] Improve contrast residual --- rtengine/ipwavelet.cc | 52 ++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index af8adca90..51dbe149e 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1663,11 +1663,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * int H_L = WaveletCoeffs_L.level_H(0); float * WavCoeffs_L0 = WaveletCoeffs_L.coeff0; - float maxh = 2.5f; //amplification contrast above mean - float maxl = 2.5f; //reduction contrast under mean float contrast = cp.contrast; - float multL = (float)contrast * (maxl - 1.f) / 100.f + 1.f; - float multH = (float) contrast * (maxh - 1.f) / 100.f + 1.f; double avedbl = 0.0; // use double precision for large summations float max0 = 0.f; float min0 = FLT_MAX; @@ -1735,14 +1731,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * max0 /= 327.68f; min0 /= 327.68f; float ave = avedbl / (double)(W_L * H_L); - float av = ave / 327.68f; - float ah = (multH - 1.f) / (av - max0); // - float bh = 1.f - max0 * ah; - float al = (multL - 1.f) / (av - min0); - float bl = 1.f - min0 * al; - float factorx = 1.f; -// float *koeLi[9]; -// float maxkoeLi[9]; + float avg = ave / 32768.f; float *koeLi[12]; float maxkoeLi[12]; @@ -1763,35 +1752,32 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * koeLi[j][i] = 0.f; } + avg = LIM01(avg); + double contreal = 0.6 * contrast; + DiagonalCurve resid_contrast({ + DCT_NURBS, + 0, 0, + avg - avg * (0.6 - contreal / 250.0), avg - avg * (0.6 + contreal / 250.0), + avg + (1. - avg) * (0.6 - contreal / 250.0), avg + (1. - avg) * (0.6 + contreal / 250.0), + 1, 1 + }); + + #ifdef _OPENMP #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif { if (contrast != 0.f && cp.resena && max0 > 0.0) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step { - // + #ifdef _OPENMP - #pragma omp for + #pragma omp for #endif - - for (int i = 0; i < W_L * H_L; i++) { //contrast - if (WavCoeffs_L0[i] < 32768.f) { - float prov; - - if (WavCoeffs_L0[i] > ave) { - float kh = ah * (WavCoeffs_L0[i] / 327.68f) + bh; - prov = WavCoeffs_L0[i]; - WavCoeffs_L0[i] = ave + kh * (WavCoeffs_L0[i] - ave); - } else { - float kl = al * (WavCoeffs_L0[i] / 327.68f) + bl; - prov = WavCoeffs_L0[i]; - WavCoeffs_L0[i] = ave - kl * (ave - WavCoeffs_L0[i]); - } - - float diflc = WavCoeffs_L0[i] - prov; - diflc *= factorx; - WavCoeffs_L0[i] = prov + diflc; - } + for (int i = 0; i < W_L * H_L; i++) { + float buf = LIM01( WavCoeffs_L0[i] / 32768.f); + buf = resid_contrast.getVal(buf); + buf *= 32768.f; + WavCoeffs_L0[i] = buf; } } } From 83f487753c6da9868730126c4e9f3a09c7341f1c Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 27 May 2019 09:23:56 +0200 Subject: [PATCH 014/264] Improve shadows-Highlight Residual --- rtdata/languages/default | 2 + rtengine/improcfun.cc | 3 +- rtengine/improcfun.h | 3 +- rtengine/ipshadowshighlights.cc | 18 ++++----- rtengine/ipwavelet.cc | 68 ++++++++++++++------------------- rtengine/procparams.cc | 8 +++- rtengine/procparams.h | 1 + rtgui/addsetids.h | 1 + rtgui/batchtoolpanelcoord.cc | 5 ++- rtgui/paramsedited.h | 1 + rtgui/preferences.cc | 1 + rtgui/wavelet.cc | 26 ++++++++++--- rtgui/wavelet.h | 4 +- 13 files changed, 80 insertions(+), 61 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index f9c89888a..3bb511d2b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -784,6 +784,7 @@ HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVSHOWMASK;Show wavelet mask HISTORY_MSG_WAVEDGS;Edge stopping HISTORY_MSG_WAVSCALE;Scale +HISTORY_MSG_WAVRADIUS;Radius Shadows-Highlight HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2202,6 +2203,7 @@ TP_WAVELET_OPACITYWL;Final local contrast TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right. TP_WAVELET_PASTEL;Pastel chroma TP_WAVELET_PROC;Process +TP_WAVELET_RADIUS;Radius Shadows - Highlight TP_WAVELET_RE1;Reinforced TP_WAVELET_RE2;Unchanged TP_WAVELET_RE3;Reduced diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index bb7c0ac6b..d1529184e 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -3649,7 +3649,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer delete vCurve; } - shadowsHighlights(lab); + // shadowsHighlights(lab); + shadowsHighlights(lab, params->sh.enabled, params->sh.lab,params->sh.highlights ,params->sh.shadows, params->sh.radius, scale, params->sh.htonalwidth, params->sh.stonalwidth); if (params->localContrast.enabled) { // Alberto's local contrast diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index cd1650f6e..68aff736b 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -351,7 +351,8 @@ public: void ToneMapFattal02(Imagefloat *rgb); void localContrast(LabImage *lab); void colorToningLabGrid(LabImage *lab, int xstart, int xend, int ystart, int yend, bool MultiThread); - void shadowsHighlights(LabImage *lab); + //void shadowsHighlights(LabImage *lab); + void shadowsHighlights(LabImage *lab, bool ena, int labmode, int hightli, int shado, int rad, int scal, int hltonal, int shtonal); void softLight(LabImage *lab); void labColorCorrectionRegions(LabImage *lab); diff --git a/rtengine/ipshadowshighlights.cc b/rtengine/ipshadowshighlights.cc index 6ce66d9b3..96b8e84ef 100644 --- a/rtengine/ipshadowshighlights.cc +++ b/rtengine/ipshadowshighlights.cc @@ -27,20 +27,20 @@ #include "sleef.c" namespace rtengine { - -void ImProcFunctions::shadowsHighlights(LabImage *lab) +//modifications to pass parameters needs by locallab, to avoid 2 functions - no change in process - J.Desmis march 2019 +void ImProcFunctions::shadowsHighlights(LabImage *lab, bool ena, int labmode, int hightli, int shado, int rad, int scal, int hltonal, int shtonal) { - if (!params->sh.enabled || (!params->sh.highlights && !params->sh.shadows)){ + if (!ena || (!hightli && !shado)){ return; } const int width = lab->W; const int height = lab->H; - const bool lab_mode = params->sh.lab; + const bool lab_mode = labmode; array2D mask(width, height); array2D L(width, height); - const float radius = float(params->sh.radius) * 10 / scale; + const float radius = float(rad) * 10 / scal; LUTf f(lab_mode ? 32768 : 65536); TMatrix ws = ICCStore::getInstance()->workingSpaceMatrix(params->icm.workingProfile); @@ -187,12 +187,12 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) } }; - if (params->sh.highlights > 0) { - apply(params->sh.highlights * 0.7, params->sh.htonalwidth, true); + if (hightli > 0) { + apply(hightli * 0.7, hltonal, true); } - if (params->sh.shadows > 0) { - apply(params->sh.shadows * 0.6, params->sh.stonalwidth, false); + if (shado > 0) { + apply(shado * 0.6, shtonal, false); } } diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 51dbe149e..bf9a6f37e 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -71,6 +71,7 @@ struct cont_params { float thH; float conres; float conresH; + float radius; float chrores; float hueres; float sky; @@ -435,6 +436,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.conres = waparams.rescon; cp.conresH = waparams.resconH; + cp.radius = waparams.radius; cp.chrores = waparams.reschro; //cp.hueres=waparams.reshue; cp.hueres = 2.f; @@ -1782,7 +1784,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } -// + if (cp.tonemap && cp.contmet == 1 && cp.resena) { float maxp = max0 * 256.f; float minp = min0 * 256.f; @@ -1791,54 +1793,40 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #endif ContrastResid(WavCoeffs_L0, cp, W_L, H_L, maxp, minp); } - -#ifdef _OPENMP - #pragma omp barrier -#endif + } if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step + LabImage *temp = nullptr; + temp = new LabImage(W_L, H_L); #ifdef _OPENMP - #pragma omp for nowait + #pragma omp for #endif - - for (int i = 0; i < W_L * H_L; i++) { - float LL = WavCoeffs_L0[i]; - float LL100 = LL / 327.68f; - float tran = 5.f;//transition - //shadow - float alp = 3.f; //increase contrast sahdow in lowlights between 1 and ?? - - if (cp.th > (100.f - tran)) { - tran = 100.f - cp.th; + for (int i = 0; i < H_L; i++) { + for (int j = 0; j < W_L; j++) { + temp->L[i][j] = WavCoeffs_L0[i * W_L + j]; + } + } + { + ImProcFunctions::shadowsHighlights(temp, true, 1, cp.conresH, cp.conres, cp.radius, skip, cp.thH, cp.th); + } +#ifdef _OPENMP + #pragma omp for +#endif + for (int i = 0; i < H_L; i++) { + for (int j = 0; j < W_L; j++) { + WavCoeffs_L0[i * W_L + j] = temp->L[i][j]; + } } - if (LL100 < cp.th) { - float aalp = (1.f - alp) / cp.th; //no changes for LL100 = cp.th - float kk = aalp * LL100 + alp; - WavCoeffs_L0[i] *= (1.f + kk * cp.conres / 200.f); - } else if (LL100 < cp.th + tran) { - float ath = -cp.conres / tran; - float bth = cp.conres - ath * cp.th; - WavCoeffs_L0[i] *= (1.f + (LL100 * ath + bth) / 200.f); - } + delete temp; - //highlight - tran = 5.f; - - if (cp.thH < (tran)) { - tran = cp.thH; - } - - if (LL100 > cp.thH) { - WavCoeffs_L0[i] *= (1.f + cp.conresH / 200.f); - } else if (LL100 > (cp.thH - tran)) { - float athH = cp.conresH / tran; - float bthH = cp.conresH - athH * cp.thH; - WavCoeffs_L0[i] *= (1.f + (LL100 * athH + bthH) / 200.f); - } - } } + +#ifdef _OPENMP + #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) +#endif + { //enabled Lipschitz..replace simple by complex edge detection // I found this concept on the web (doctoral thesis on medical Imaging) // I was inspired by the principle of Canny and Lipschitz (continuity and derivability) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 1fa4d62a4..4a23e02dd 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2209,8 +2209,9 @@ WaveletParams::WaveletParams() : edgrad(15), edgval(0), edgthresh(10), - thr(35), - thrH(65), + thr(30), + thrH(70), + radius(40), skinprotect(0.0), hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), @@ -2316,6 +2317,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && edgthresh == other.edgthresh && thr == other.thr && thrH == other.thrH + && radius == other.radius && skinprotect == other.skinprotect && hueskin == other.hueskin && hueskin2 == other.hueskin2 @@ -3433,6 +3435,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.resconH, "Wavelet", "ResidualcontHighlight", wavelet.resconH, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thr, "Wavelet", "ThresholdResidShadow", wavelet.thr, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thrH, "Wavelet", "ThresholdResidHighLight", wavelet.thrH, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.radius, "Wavelet", "Residualradius", wavelet.radius, keyFile); saveToKeyfile(!pedited || pedited->wavelet.reschro, "Wavelet", "Residualchroma", wavelet.reschro, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmrs, "Wavelet", "ResidualTM", wavelet.tmrs, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgs, "Wavelet", "ResidualEDGS", wavelet.edgs, keyFile); @@ -4543,6 +4546,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "ThrEdg", pedited, wavelet.edgthresh, pedited->wavelet.edgthresh); assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidShadow", pedited, wavelet.thr, pedited->wavelet.thr); assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidHighLight", pedited, wavelet.thrH, pedited->wavelet.thrH); + assignFromKeyfile(keyFile, "Wavelet", "Residualradius", pedited, wavelet.radius, pedited->wavelet.radius); assignFromKeyfile(keyFile, "Wavelet", "ContrastCurve", pedited, wavelet.ccwcurve, pedited->wavelet.ccwcurve); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveRG", pedited, wavelet.opacityCurveRG, pedited->wavelet.opacityCurveRG); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveBY", pedited, wavelet.opacityCurveBY, pedited->wavelet.opacityCurveBY); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index a17a34aaa..d5d055ca1 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1243,6 +1243,7 @@ struct WaveletParams { int edgthresh; int thr; int thrH; + int radius; double skinprotect; Threshold hueskin; Threshold hueskin2; diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 7e9f6f6cd..a03228c33 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -86,6 +86,7 @@ enum { ADDSET_WA_SKINPROTECT, ADDSET_WA_THRR, ADDSET_WA_THRRH, + ADDSET_WA_RADIUS, ADDSET_WA_THRES, ADDSET_WA_THRESHOLD, ADDSET_WA_THRESHOLD2, diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 63934f21c..1c7e61b04 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -165,7 +165,7 @@ void BatchToolPanelCoordinator::initSession () shadowshighlights->setAdjusterBehavior (false, false); dirpyrequalizer->setAdjusterBehavior (false, false, false); - wavelet->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); + wavelet->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); dirpyrdenoise->setAdjusterBehavior (false, false, false, false, false, false, false); bayerprocess->setAdjusterBehavior(false, false, false, false, false, false); xtransprocess->setAdjusterBehavior(false, false); @@ -213,7 +213,7 @@ void BatchToolPanelCoordinator::initSession () blackwhite->setAdjusterBehavior (options.baBehav[ADDSET_BLACKWHITE_HUES], options.baBehav[ADDSET_BLACKWHITE_GAMMA]); shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS]); dirpyrequalizer->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYREQ], options.baBehav[ADDSET_DIRPYREQ_THRESHOLD], options.baBehav[ADDSET_DIRPYREQ_SKINPROTECT]); - wavelet->setAdjusterBehavior (options.baBehav[ADDSET_WA], options.baBehav[ADDSET_WA_THRESHOLD], options.baBehav[ADDSET_WA_THRESHOLD2], options.baBehav[ADDSET_WA_THRES], options.baBehav[ADDSET_WA_CHRO], options.baBehav[ADDSET_WA_CHROMA], options.baBehav[ADDSET_WA_CONTRAST], options.baBehav[ADDSET_WA_SKINPROTECT], options.baBehav[ADDSET_WA_RESCHRO], options.baBehav[ADDSET_WA_TMRS], options.baBehav[ADDSET_WA_EDGS], options.baBehav[ADDSET_WA_SCALE], options.baBehav[ADDSET_WA_RESCON], options.baBehav[ADDSET_WA_RESCONH], options.baBehav[ADDSET_WA_THRR], options.baBehav[ADDSET_WA_THRRH], options.baBehav[ADDSET_WA_SKYPROTECT], options.baBehav[ADDSET_WA_EDGRAD], options.baBehav[ADDSET_WA_EDGVAL], options.baBehav[ADDSET_WA_STRENGTH], options.baBehav[ADDSET_WA_GAMMA], options.baBehav[ADDSET_WA_EDGEDETECT], options.baBehav[ADDSET_WA_EDGEDETECTTHR], options.baBehav[ADDSET_WA_EDGEDETECTTHR2]); + wavelet->setAdjusterBehavior (options.baBehav[ADDSET_WA], options.baBehav[ADDSET_WA_THRESHOLD], options.baBehav[ADDSET_WA_THRESHOLD2], options.baBehav[ADDSET_WA_THRES], options.baBehav[ADDSET_WA_CHRO], options.baBehav[ADDSET_WA_CHROMA], options.baBehav[ADDSET_WA_CONTRAST], options.baBehav[ADDSET_WA_SKINPROTECT], options.baBehav[ADDSET_WA_RESCHRO], options.baBehav[ADDSET_WA_TMRS], options.baBehav[ADDSET_WA_EDGS], options.baBehav[ADDSET_WA_SCALE], options.baBehav[ADDSET_WA_RESCON], options.baBehav[ADDSET_WA_RESCONH], options.baBehav[ADDSET_WA_THRR], options.baBehav[ADDSET_WA_THRRH], options.baBehav[ADDSET_WA_RADIUS], options.baBehav[ADDSET_WA_SKYPROTECT], options.baBehav[ADDSET_WA_EDGRAD], options.baBehav[ADDSET_WA_EDGVAL], options.baBehav[ADDSET_WA_STRENGTH], options.baBehav[ADDSET_WA_GAMMA], options.baBehav[ADDSET_WA_EDGEDETECT], options.baBehav[ADDSET_WA_EDGEDETECTTHR], options.baBehav[ADDSET_WA_EDGEDETECTTHR2]); dirpyrdenoise->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYRDN_LUMA], options.baBehav[ADDSET_DIRPYRDN_LUMDET], options.baBehav[ADDSET_DIRPYRDN_CHROMA], options.baBehav[ADDSET_DIRPYRDN_CHROMARED], options.baBehav[ADDSET_DIRPYRDN_CHROMABLUE], options.baBehav[ADDSET_DIRPYRDN_GAMMA], options.baBehav[ADDSET_DIRPYRDN_PASSES]); bayerprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION], options.baBehav[ADDSET_BAYER_ITER], options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST], options.baBehav[ADDSET_BAYER_PS_SIGMA], options.baBehav[ADDSET_BAYER_PS_SMOOTH], options.baBehav[ADDSET_BAYER_PS_EPERISO]); xtransprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION], options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST]); @@ -333,6 +333,7 @@ void BatchToolPanelCoordinator::initSession () if (options.baBehav[ADDSET_WA_SCALE]) { pparams.wavelet.scale = 0; } if (options.baBehav[ADDSET_WA_THRR]) { pparams.wavelet.thr = 0; } if (options.baBehav[ADDSET_WA_THRRH]) { pparams.wavelet.thrH = 0; } + if (options.baBehav[ADDSET_WA_RADIUS]) { pparams.wavelet.radius = 0; } if (options.baBehav[ADDSET_WA_SKYPROTECT]) { pparams.wavelet.sky = 0; } if (options.baBehav[ADDSET_WA_EDGRAD]) { pparams.wavelet.edgrad = 0; } if (options.baBehav[ADDSET_WA_EDGVAL]) { pparams.wavelet.edgval = 0; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 5e123e638..160f68feb 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -519,6 +519,7 @@ struct WaveletParamsEdited { bool edgthresh; bool thr; bool thrH; + bool radius; bool skinprotect; bool hueskin; bool hueskin2; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 63a9315a6..2269c6749 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -387,6 +387,7 @@ Gtk::Widget* Preferences::getBatchProcPanel () appendBehavList (mi, M ("TP_WAVELET_THR"), ADDSET_WA_THRR, true); appendBehavList (mi, M ("TP_WAVELET_RESCONH"), ADDSET_WA_RESCONH, true); appendBehavList (mi, M ("TP_WAVELET_THRH"), ADDSET_WA_THRRH, true); + appendBehavList (mi, M ("TP_WAVELET_RADIUS"), ADDSET_WA_RADIUS, true); appendBehavList (mi, M ("TP_WAVELET_RESCHRO"), ADDSET_WA_RESCHRO, true); appendBehavList (mi, M ("TP_WAVELET_TMSTRENGTH"), ADDSET_WA_TMRS, true); appendBehavList (mi, M ("TP_WAVELET_TMEDGS"), ADDSET_WA_EDGS, true); diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 165db8e94..5275fa948 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -77,8 +77,8 @@ Wavelet::Wavelet() : tmr(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_BALCHRO")))), showmask(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_SHOWMASK")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), - rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), - resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), + rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), 0, 100, 1, 0))), + resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), 0, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), @@ -90,8 +90,9 @@ Wavelet::Wavelet() : chroma(Gtk::manage(new Adjuster(M("TP_WAVELET_CHRO"), 1, 9, 1, 5))), chro(Gtk::manage(new Adjuster(M("TP_WAVELET_CHR"), 0., 100., 1., 0.))), contrast(Gtk::manage(new Adjuster(M("TP_WAVELET_CONTRA"), -100, 100, 1, 0))), - thr(Gtk::manage(new Adjuster(M("TP_WAVELET_THR"), 0, 100, 1, 35))), - thrH(Gtk::manage(new Adjuster(M("TP_WAVELET_THRH"), 0, 100, 1, 65))), + thr(Gtk::manage(new Adjuster(M("TP_WAVELET_THR"), 0, 100, 1, 30))), + thrH(Gtk::manage(new Adjuster(M("TP_WAVELET_THRH"), 0, 100, 1, 70))), + radius(Gtk::manage(new Adjuster(M("TP_WAVELET_RADIUS"), 0, 100, 1, 40))), skinprotect(Gtk::manage(new Adjuster(M("TP_WAVELET_SKIN"), -100, 100, 1, 0.))), edgrad(Gtk::manage(new Adjuster(M("TP_WAVELET_EDRAD"), 0, 100, 1, 15))), edgval(Gtk::manage(new Adjuster(M("TP_WAVELET_EDVAL"), 0, 100, 1, 0))), @@ -167,6 +168,7 @@ Wavelet::Wavelet() : EvWavshowmask = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSHOWMASK"); EvWavedgs = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVEDGS"); EvWavscale = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSCALE"); + EvWavradius = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVRADIUS"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -678,6 +680,9 @@ Wavelet::Wavelet() : thrH->setAdjusterListener(this); resBox->pack_start(*thrH, Gtk::PACK_SHRINK); + radius->setAdjusterListener(this); + resBox->pack_start(*radius, Gtk::PACK_SHRINK); + contrast->set_tooltip_text(M("TP_WAVELET_CONTRA_TOOLTIP")); contrast->setAdjusterListener(this); resBox->pack_start(*contrast); //keep the possibility to reinstall @@ -1231,6 +1236,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) edgthresh->setValue(pp->wavelet.edgthresh); thr->setValue(pp->wavelet.thr); thrH->setValue(pp->wavelet.thrH); + radius->setValue(pp->wavelet.radius); skinprotect->setValue(pp->wavelet.skinprotect); hueskin->setValue(pp->wavelet.hueskin); hueskin2->setValue(pp->wavelet.hueskin2); @@ -1406,6 +1412,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) edgval->setEditedState(pedited->wavelet.edgval ? Edited : UnEdited); thr->setEditedState(pedited->wavelet.thr ? Edited : UnEdited); thrH->setEditedState(pedited->wavelet.thrH ? Edited : UnEdited); + radius->setEditedState(pedited->wavelet.radius ? Edited : UnEdited); skinprotect->setEditedState(pedited->wavelet.skinprotect ? Edited : UnEdited); hueskin->setEditedState(pedited->wavelet.hueskin ? Edited : UnEdited); hueskin2->setEditedState(pedited->wavelet.hueskin2 ? Edited : UnEdited); @@ -1567,6 +1574,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.edgthresh = edgthresh->getValue(); pp->wavelet.thr = thr->getValue(); pp->wavelet.thrH = thrH->getValue(); + pp->wavelet.radius = radius->getValue(); pp->wavelet.hueskin = hueskin->getValue (); pp->wavelet.hueskin2 = hueskin2->getValue (); pp->wavelet.skinprotect = skinprotect->getValue(); @@ -1676,6 +1684,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.edgval = edgval->getEditedState(); pedited->wavelet.thr = thr->getEditedState(); pedited->wavelet.thrH = thrH->getEditedState(); + pedited->wavelet.radius = radius->getEditedState(); pedited->wavelet.hueskin = hueskin->getEditedState(); pedited->wavelet.hueskin2 = hueskin2->getEditedState(); pedited->wavelet.skinprotect = skinprotect->getEditedState(); @@ -1910,6 +1919,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit edgthresh->setDefault(defParams->wavelet.edgthresh); thr->setDefault(defParams->wavelet.thr); thrH->setDefault(defParams->wavelet.thrH); + radius->setDefault(defParams->wavelet.radius); hueskin->setDefault (defParams->wavelet.hueskin); hueskin2->setDefault (defParams->wavelet.hueskin2); hllev->setDefault (defParams->wavelet.hllev); @@ -1970,6 +1980,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit edgthresh->setDefault(defParams->wavelet.edgthresh); thr->setDefaultEditedState(pedited->wavelet.thr ? Edited : UnEdited); thrH->setDefaultEditedState(pedited->wavelet.thrH ? Edited : UnEdited); + radius->setDefaultEditedState(pedited->wavelet.radius ? Edited : UnEdited); skinprotect->setDefaultEditedState(pedited->wavelet.skinprotect ? Edited : UnEdited); hueskin->setDefaultEditedState(pedited->wavelet.hueskin ? Edited : UnEdited); hueskin2->setDefaultEditedState(pedited->wavelet.hueskin2 ? Edited : UnEdited); @@ -2019,6 +2030,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit edgthresh->setDefaultEditedState(Irrelevant); thr->setDefaultEditedState(Irrelevant); thrH->setDefaultEditedState(Irrelevant); + radius->setDefaultEditedState(Irrelevant); skinprotect->setDefaultEditedState(Irrelevant); hueskin->setDefaultEditedState(Irrelevant); hueskin2->setDefaultEditedState(Irrelevant); @@ -2533,6 +2545,7 @@ void Wavelet::setBatchMode(bool batchMode) edgthresh->showEditedCB(); thr->showEditedCB(); thrH->showEditedCB(); + radius->showEditedCB(); skinprotect->showEditedCB(); hueskin->showEditedCB(); hueskin2->showEditedCB(); @@ -2625,6 +2638,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavthr, thr->getTextValue()); } else if (a == thrH) { listener->panelChanged(EvWavthrH, thrH->getTextValue()); + } else if (a == radius) { + listener->panelChanged(EvWavradius, radius->getTextValue()); } else if (a == threshold) { listener->panelChanged(EvWavThreshold, threshold->getTextValue()); } else if (a == threshold2) { @@ -3181,7 +3196,7 @@ void Wavelet::colorForValue(double valX, double valY, enum ColorCaller::ElemType caller->ccGreen = double(G); caller->ccBlue = double(B); } -void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool edgsadd, bool scaleadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add) +void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool edgsadd, bool scaleadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool radiusadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add) { for (int i = 0; i < 9; i++) { @@ -3203,6 +3218,7 @@ void Wavelet::setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool th scale->setAddMode(scaleadd); thr->setAddMode(thradd); thrH->setAddMode(thrHadd); + radius->setAddMode(radiusadd); sky->setAddMode(skyadd); edgrad->setAddMode(edgradadd); edgval->setAddMode(edgvaladd); diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 5878a1ae4..4ef36d076 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -50,7 +50,7 @@ public: void autoOpenCurve () override; void curveChanged (CurveEditor* ce) override; void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; - void setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool edgsadd, bool scaleadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add); + void setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool edgsadd, bool scaleadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool radiusadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add); void setBatchMode (bool batchMode) override; void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; void setEditProvider (EditDataProvider *provider) override; @@ -74,6 +74,7 @@ private: rtengine::ProcEvent EvWavshowmask; rtengine::ProcEvent EvWavedgs; rtengine::ProcEvent EvWavscale; + rtengine::ProcEvent EvWavradius; void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -180,6 +181,7 @@ private: Adjuster* const contrast; Adjuster* const thr; Adjuster* const thrH; + Adjuster* const radius; Adjuster* const skinprotect; Adjuster* const edgrad; Adjuster* const edgval; From 25e66f1fc23ebf9051d98fa1f6e209b64ee5d9c5 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 27 May 2019 11:20:14 +0200 Subject: [PATCH 015/264] Small improvments residual --- rtengine/ipwavelet.cc | 2 +- rtgui/paramsedited.cc | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index bf9a6f37e..de5d193a1 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1595,7 +1595,7 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat float edgest = params->wavelet.edgs; float sca = params->wavelet.scale; float gamm = params->wavelet.gamma; - float rew = params->epd.reweightingIterates; + int rew = 0; //params->epd.reweightingIterates; EdgePreservingDecomposition epd2(W_L, H_L); cp.TMmeth = 2; //default after testing diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index f0abd04f7..3616aade1 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -520,6 +520,7 @@ void ParamsEdited::set(bool v) wavelet.edgthresh = v; wavelet.thr = v; wavelet.thrH = v; + wavelet.radius = v; wavelet.skinprotect = v; wavelet.hueskin = v; wavelet.hueskin2 = v; @@ -1096,6 +1097,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.edgthresh = wavelet.edgthresh && p.wavelet.edgthresh == other.wavelet.edgthresh; wavelet.thr = wavelet.thr && p.wavelet.thr == other.wavelet.thr; wavelet.thrH = wavelet.thrH && p.wavelet.thrH == other.wavelet.thrH; + wavelet.radius = wavelet.radius && p.wavelet.radius == other.wavelet.radius; wavelet.hueskin = wavelet.hueskin && p.wavelet.hueskin == other.wavelet.hueskin; wavelet.hueskin2 = wavelet.hueskin2 && p.wavelet.hueskin2 == other.wavelet.hueskin2; wavelet.hllev = wavelet.hllev && p.wavelet.hllev == other.wavelet.hllev; @@ -2928,6 +2930,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.thrH = dontforceSet && options.baBehav[ADDSET_WA_THRRH] ? toEdit.wavelet.thrH + mods.wavelet.thrH : mods.wavelet.thrH; } + if (wavelet.radius) { + toEdit.wavelet.radius = dontforceSet && options.baBehav[ADDSET_WA_RADIUS] ? toEdit.wavelet.radius + mods.wavelet.radius : mods.wavelet.radius; + } + if (wavelet.sup) { toEdit.wavelet.sup = mods.wavelet.sup; } From f2666dc464dae9da843baa8bd50de4a53173303f Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 14 Jun 2019 07:28:37 +0200 Subject: [PATCH 016/264] Re-enabled showmask clarity and sharp-mask --- rtengine/dcrop.cc | 14 ++++++-- rtengine/improccoordinator.cc | 14 +++++--- rtgui/wavelet.cc | 63 +++++------------------------------ 3 files changed, 30 insertions(+), 61 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 7a72cc1cc..e08a53a10 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1102,6 +1102,14 @@ void Crop::update(int todo) mL0 = mL = mC0 = mC = 0.f; } + float indic = 1.f; + if(WaveParams.showmask){ + mL0 = mC0 = -1.f; + indic = -1.f; + mL = fabs(mL); + mC = fabs(mC); + } + #ifdef _OPENMP #pragma omp parallel for @@ -1109,9 +1117,9 @@ void Crop::update(int todo) for (int x = 0; x < labnCrop->H; x++) for (int y = 0; y < labnCrop->W; y++) { - labnCrop->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * labnCrop->L[x][y]; - labnCrop->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * labnCrop->a[x][y]; - labnCrop->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * labnCrop->b[x][y]; + labnCrop->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * indic * labnCrop->L[x][y]; + labnCrop->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * indic * labnCrop->a[x][y]; + labnCrop->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * indic * labnCrop->b[x][y]; } delete unshar; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index b9d1664cd..5b946fb8c 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -967,17 +967,23 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } else { mL0 = mL = mC0 = mC = 0.f; } + float indic = 1.f; - + if(WaveParams.showmask){ + mL0 = mC0 = -1.f; + indic = -1.f; + mL = fabs(mL); + mC = fabs(mC); + } #ifdef _OPENMP #pragma omp parallel for #endif for (int x = 0; x < pH; x++) for (int y = 0; y < pW; y++) { - nprevl->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * nprevl->L[x][y]; - nprevl->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * nprevl->a[x][y]; - nprevl->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * nprevl->b[x][y]; + nprevl->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * indic * nprevl->L[x][y]; + nprevl->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * indic * nprevl->a[x][y]; + nprevl->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * indic * nprevl->b[x][y]; } delete unshar; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 5275fa948..7f9164779 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -501,7 +501,7 @@ Wavelet::Wavelet() : clariBox->pack_start(*mergeL); clariBox->pack_start(*mergeC); clariBox->pack_start(*softrad); -// clariBox->pack_start(*showmask); + clariBox->pack_start(*showmask); // Edge Sharpness ToolParamBlock* const edgBox = Gtk::manage(new ToolParamBlock()); @@ -3064,46 +3064,6 @@ void Wavelet::avoidToggled() void Wavelet::showmaskToggled() { - if (ushamethod->get_active_row_number() == 1 && showmask->get_active()) { - Backmethod->set_active(2); - CLmethod->set_active(2); - Lmethod->set_active(6); - Lmethod->set_sensitive(true); - Dirmethod->set_sensitive(true); - Dirmethod->set_active(3); - expclari->setEnabled(false); - - } else if (ushamethod->get_active_row_number() == 0 && showmask->get_active()) { - Backmethod->set_active(0); - CLmethod->set_active(1); - Lmethod->set_active(2); - Dirmethod->set_active(3); - Lmethod->set_sensitive(true); - Dirmethod->set_sensitive(true); - expclari->setEnabled(false); - - } - - if (ushamethod->get_active_row_number() == 1 && !showmask->get_active()) { - Backmethod->set_active(2); - CLmethod->set_active(2); - Lmethod->set_active(6); - Lmethod->set_sensitive(true); - Dirmethod->set_sensitive(true); - Dirmethod->set_active(3); - expclari->setEnabled(true); - - } else if (ushamethod->get_active_row_number() == 0 && !showmask->get_active()) { - Backmethod->set_active(0); - CLmethod->set_active(1); - Lmethod->set_active(2); - Dirmethod->set_active(3); - Lmethod->set_sensitive(true); - Dirmethod->set_sensitive(true); - expclari->setEnabled(true); - - } - if (multiImage) { if (showmask->get_inconsistent()) { showmask->set_inconsistent(false); @@ -3306,20 +3266,15 @@ void Wavelet::enableToggled(MyExpander *expander) event = EvWavenafin; } else if (expander == expclari) { if (expclari->getEnabled() == false) { - if (! showmask->get_active()) { - Backmethod->set_active(1); - CLmethod->set_active(3); - Lmethod->set_active(3); - Dirmethod->set_active(3); - Lmethod->set_sensitive(false); - Dirmethod->set_sensitive(false); - CLmethod->set_sensitive(true); - Backmethod->set_sensitive(true); - } + Backmethod->set_active(1); + CLmethod->set_active(3); + Lmethod->set_active(3); + Dirmethod->set_active(3); + Lmethod->set_sensitive(false); + Dirmethod->set_sensitive(false); + CLmethod->set_sensitive(true); + Backmethod->set_sensitive(true); } else { - if (showmask->get_active()) { - showmask->set_active(false); - } if (ushamethod->get_active_row_number() == 1) { Backmethod->set_active(2); From 5dbc61579d9b83e26160107ab201fec84ba016f5 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Jun 2019 13:56:52 +0200 Subject: [PATCH 017/264] Save provisory work for autowb ITCWB --- rtengine/color.cc | 11 + rtengine/color.h | 1 + rtengine/colortemp.cc | 2228 ++++++++++++++++++- rtengine/colortemp.h | 172 ++ rtengine/iimage.h | 5 + rtengine/imagesource.h | 2 + rtengine/improccoordinator.cc | 18 + rtengine/procparams.cc | 10 +- rtengine/rawimagesource.cc | 3777 +++++++++++++++++++++++++++++++++ rtengine/rawimagesource.h | 7 + rtengine/settings.h | 8 + rtengine/stdimagesource.cc | 26 + rtengine/stdimagesource.h | 3 + rtgui/options.cc | 44 + rtgui/whitebalance.cc | 9 + 15 files changed, 6317 insertions(+), 4 deletions(-) diff --git a/rtengine/color.cc b/rtengine/color.cc index 3f2a75788..0ee5a479c 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -939,6 +939,17 @@ void Color::rgbxyz (float r, float g, float b, float &x, float &y, float &z, con z = ((xyz_rgb[2][0] * r + xyz_rgb[2][1] * g + xyz_rgb[2][2] * b)) ; } +void Color::rgbxyY(float r, float g, float b, float &x, float &y, float &Y, float &xx, float &yy, float &zz, const double xyz_rgb[3][3]) +{ + xx = ((xyz_rgb[0][0] * r + xyz_rgb[0][1] * g + xyz_rgb[0][2] * b)) ; + yy = ((xyz_rgb[1][0] * r + xyz_rgb[1][1] * g + xyz_rgb[1][2] * b)) ; + zz = ((xyz_rgb[2][0] * r + xyz_rgb[2][1] * g + xyz_rgb[2][2] * b)) ; + float som = xx + yy + zz; + x = xx / som; + y = yy / som; + Y = yy / 65535.f; +} + void Color::rgbxyz (float r, float g, float b, float &x, float &y, float &z, const float xyz_rgb[3][3]) { x = ((xyz_rgb[0][0] * r + xyz_rgb[0][1] * g + xyz_rgb[0][2] * b)) ; diff --git a/rtengine/color.h b/rtengine/color.h index a94302e30..0963c0ff4 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -585,6 +585,7 @@ public: * @param xyz_rgb[3][3] transformation matrix to use for the conversion */ static void rgbxyz (float r, float g, float b, float &x, float &y, float &z, const double xyz_rgb[3][3]); + static void rgbxyY(float r, float g, float b, float &x, float &y, float &Y, float &xx, float &yy, float &zz, const double xyz_rgb[3][3]); static void rgbxyz (float r, float g, float b, float &x, float &y, float &z, const float xyz_rgb[3][3]); #ifdef __SSE2__ static void rgbxyz (vfloat r, vfloat g, vfloat b, vfloat &x, vfloat &y, vfloat &z, const vfloat xyz_rgb[3][3]); diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index a7a769d93..527755a03 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -23,6 +23,12 @@ #include #include "sleef.c" #include "settings.h" +#include "iccstore.h" + +#undef CLIPD +#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0) +#define CLIPQQ(a) ((a)>0?((a)<250?(a):250):0) +#define MAXR(a,b) ((a) > (b) ? (a) : (b)) namespace rtengine { @@ -393,6 +399,618 @@ const double ColorTemp::ColorchechGreE2_spect[97] = { 0.4297, 0.4837, 0.5142, 0.5446, 0.5541, 0.5636, 0.5608, 0.5579, 0.5480, 0.5381, 0.5258, 0.5135, 0.4959, 0.4783, 0.4570, 0.4356, 0.4124, 0.3891, 0.3710, 0.3529, 0.3425, 0.3320, 0.3266, 0.3211, 0.3180, 0.3149, 0.3129, 0.3108, 0.3123, 0.3137, 0.3193, 0.3248, 0.3335, 0.3422, 0.3518, 0.3613, 0.3693, 0.3772, 0.3810, 0.3847, 0.3838, 0.3829, 0.3838, 0.3847, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::ColorGreenM25_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0758, 0.0614, 0.0662, 0.0591, 0.0648, 0.0633, 0.0671, 0.0613, 0.0621, 0.0610, 0.0680, 0.0690, 0.0784, 0.0830, 0.0920, 0.1070, 0.1231, 0.1423, 0.1607, 0.1731, 0.1816, 0.1911, 0.1951, 0.1986, 0.1915, 0.1889, + 0.1758, 0.1673, 0.1606, 0.1505, 0.1384, 0.1317, 0.1230, 0.1149, 0.1081, 0.0992, 0.0882, 0.0785, 0.0709, 0.0629, 0.0550, 0.0502, 0.0486, 0.0474, 0.0445, 0.0434, 0.0429, 0.0423, 0.0411, 0.0405, 0.0397, 0.0387, 0.0399, 0.0398, 0.0398, 0.0407, 0.0408, 0.0426, 0.0445, 0.0443, 0.0468, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//0 658 45 0 0 131 98 84 123 104 131 112 121 121 139 128 148 199 296 389 476 689 945 1132 1326 1490 1674 1741 1775 1868 1914 1928 1961 1972 1992 2045 2064 2053 2048 2072 2086 2081 2069 2056 2073 2096 2114 2067 2089 2100 2061 2019 1983 1971 1961 2016 1956 1946 1922 1983 1991 +const double ColorTemp::ColorYellowkeltano_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0658, 0.0045, 0.0, 0.0, 0.0131, 0.0098, 0.0084, 0.0123, 0.0104, 0.0131, 0.0112, 0.0121, 0.0121, 0.0139, + 0.0128, 0.0148, 0.0199, 0.0296, 0.0389, 0.0476, 0.0689, 0.0945, 0.1132, 0.1326, 0.1490, 0.1674, 0.1741, 0.1775, 0.1868, + 0.1914, 0.1928, 0.1961, 0.1972, 0.1992, 0.2045, 0.2064, 0.2053, 0.2048, 0.2072, 0.2086, 0.2081, 0.2069, 0.2056, 0.2073, + 0.2096, 0.2114, 0.2067, 0.2089, 0.2100, 0.2061, 0.2019, 0.1983, 0.1971, 0.1961, 0.2016, 0.1956, 0.1946, 0.1922, 0.1983, 0.1991, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorGreenalsi_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1732, 0.0292, 0.0315, 0.0533, 0.0469, 0.0359, 0.0404, 0.0356, 0.0345, 0.0374, 0.0348, 0.0336, 0.0332, 0.0333, 0.0342, + 0.0330, 0.0350, 0.0343, 0.0354, 0.0371, 0.0399, 0.0426, 0.0497, 0.0541, 0.0616, 0.0701, 0.0750, 0.0764, 0.0783, 0.0794, + 0.0784, 0.0732, 0.0708, 0.0652, 0.0612, 0.0595, 0.0570, 0.0531, 0.0507, 0.0501, 0.0488, 0.0458, 0.0437, 0.0420, 0.0436, + 0.0424, 0.0417, 0.0389, 0.0380, 0.0378, 0.0371, 0.0350, 0.0333, 0.0350, 0.0394, 0.0379, 0.0446, 0.0491, 0.0575, 0.0734, 0.0953, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//1890 1097 855 899 987 881 807 804 787 691 643 549 465 404 385 302 244 195 165 159 123 129 108 111 114 126 126 134 162 170 213 248 279 351 412 566 752 909 1069 1270 1526 +//1707 1858 1999 2112 2293 2422 2471 2611 2718 2710 2778 2807 2825 2856 2909 2901 2974 3042 3044 3075 +const double ColorTemp::ColorRedpetunia_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1890, 0.1097, 0.0855, 0.0899, 0.0987, 0.0881, 0.0807, 0.0804, 0.0787, 0.0691, 0.0643, 0.0549, 0.0465, 0.0404, 0.0385, + 0.0302, 0.0244, 0.0195, 0.0165, 0.0159, 0.0123, 0.0129, 0.0108, 0.0111, 0.0114, 0.0126, 0.0126, 0.0134, 0.0162, 0.0170, + 0.0213, 0.0248, 0.0279, 0.0351, 0.0412, 0.0566, 0.0752, 0.0909, 0.1069, 0.1270, 0.1526, 0.1707, 0.1858, 0.1999, 0.2112, + 0.2293, 0.2422, 0.2471, 0.2611, 0.2718, 0.2710, 0.2778, 0.2807, 0.2825, 0.2856, 0.2909, 0.2901, 0.2974, 0.3042, 0.3044, 0.3075, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//0.1588 0.1980 0.2789 0.4585 0.6059 0.6609 0.6674 0.6599 0.6551 0.6472 0.6423 0.6485 0.6515 0.6379 0.6193 0.6121 0.6026 0.5678 0.5310 0.5245 0.5305 0.5324 0.5262 0.5219 0.5247 0.5312 0.5436 0.5634 0.5832 0.5943 0.5953 0.5902 0.5805 0.5754 0.5901 0.6262 + +const double ColorTemp::JDC468_B14_75Redspect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1588, 0.1780, 0.1980, 0.2310, 0.2789, 0.3213, 0.4585, 0.5324, 0.6059, 0.6334, 0.6609, 0.6630, 0.6674, 0.6640, 0.6599, 0.6600, 0.6551, 0.6532, 0.6472, 0.6450, + 0.6423, 0.6467, 0.6485, 0.6500, 0.6515, 0.6456, 0.6379, 0.6285, 0.6193, 0.6150, 0.6121, 0.6056, 0.6026, 0.5812, 0.5678, 0.5490, 0.5310, 0.5307, 0.5245, 0.5300, + 0.5305, 0.5310, 0.5324, 0.5298, 0.5262, 0.5230, 0.5219, 0.5231, 0.5247, 0.5280, 0.5312, 0.5364, 0.5436, 0.5550, 0.5634, 0.5731, 0.5832, 0.5901, 0.5943, 0.5950, + 0.5953, 0.5926, 0.5902, 0.5850, 0.5805, 0.5770, 0.5754, 0.6012, 0.6262, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::ColorRedkurttu_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0979, 0.1536, 0.0745, 0.1145, 0.0937, 0.0996, 0.0972, 0.0924, 0.0875, 0.0878, 0.0826, 0.0766, 0.0658, 0.0599, 0.0545, + 0.0509, 0.0443, 0.0381, 0.0356, 0.0327, 0.0318, 0.0304, 0.0295, 0.0288, 0.0285, 0.0271, 0.0281, 0.0282, 0.0278, 0.0280, + 0.0296, 0.0309, 0.0324, 0.0342, 0.0343, 0.0376, 0.0419, 0.0464, 0.0520, 0.0634, 0.0747, 0.0905, 0.1093, 0.1167, 0.1264, + 0.1439, 0.1650, 0.1928, 0.2183, 0.2380, 0.2537, 0.2754, 0.2893, 0.3009, 0.3115, 0.3213, 0.3173, 0.3222, 0.3237, 0.3192, 0.3210, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#light red flower (lupiini) +//1792 1553 1684 1882 1909 1847 2053 2084 2045 2052 2039 2084 2041 2044 2007 1984 1906 1876 1886 1855 1859 1875 1816 1800 1811 1780 1802 1816 1838 1915 1973 2018 2083 2114 2133 2226 2304 2385 2458 2494 2571 2689 2738 2774 2734 2759 2781 2831 2844 2857 2878 2876 2884 2920 2932 2860 2894 2934 2925 2928 2921 +const double ColorTemp::ColorRedlupiini_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1792, 0.1553, 0.1684, 0.1882, 0.1909, 0.1847, 0.2053, 0.2084, 0.2045, 0.2052, 0.2039, 0.2084, 0.2041, 0.2044, 0.2007, 0.1984, 0.1906, 0.1876, + 0.1886, 0.1855, 0.1859, 0.1875, 0.1816, 0.1800, 0.1811, 0.1780, 0.1802, 0.1816, 0.1838, 0.1915, 0.1973, 0.2018, 0.2083, 0.2114, 0.2133, 0.2226, + 0.2304, 0.2385, 0.2458, 0.2494, 0.2571, 0.2689, 0.2738, 0.2774, 0.2734, 0.2759, 0.2781, 0.2831, 0.2844, 0.2857, 0.2878, 0.2876, 0.2884, 0.2920, + 0.2932, 0.2860, 0.2894, 0.2934, 0.2925, 0.2928, 0.2921, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//#red flower (hevosminttu) +//1280 706 612 462 391 339 253 285 261 264 239 208 201 186 185 161 156 149 146 148 161 144 143 151 147 146 139 148 173 185 185 197 222 238 283 322 384 439 519 633 792 922 1061 1186 1235 1342 1538 1691 1839 1974 2024 2098 2128 2187 2204 2217 2267 2299 2339 2331 2322 +const double ColorTemp::ColorRedhevosminttu_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1280, 0.0706, 0.0612, 0.0462, 0.0391, 0.0339, 0.0253, 0.0285, 0.0261, 0.0264, 0.0239, 0.0208, 0.0201, 0.0186, 0.0185, 0.0161, 0.0156, 0.0149, + 0.0146, 0.0148, 0.0161, 0.0144, 0.0143, 0.0151, 0.0147, 0.0146, 0.0139, 0.0148, 0.0173, 0.0185, 0.0185, 0.0197, 0.0222, 0.0238, 0.0283, 0.0322, + 0.0384, 0.0439, 0.0519, 0.0633, 0.0792, 0.0922, 0.1061, 0.1186, 0.1235, 0.1342, 0.1538, 0.1691, 0.1839, 0.1974, 0.2024, 0.2098, 0.2128, 0.2187, 0.2204, + 0.2217, 0.2267, 0.2299, 0.2339, 0.2331, 0.2322, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//#red flower (neilikka) +//0 0 394 0 245 95 174 149 194 171 181 175 172 167 147 137 107 108 100 87 93 87 83 77 80 67 72 64 83 84 88 90 91 94 114 133 178 241 309 419 612 823 992 1153 1222 1366 1503 1658 1767 1841 1884 1992 2035 2007 2009 2045 2065 2229 2290 2395 2449 +const double ColorTemp::ColorRedneilikka_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0394, 0.0, 0.0245, 0.0095, 0.0174, 0.0149, 0.0194, 0.0171, 0.0181, 0.0175, 0.0172, 0.0167, 0.0147, 0.0137, 0.0107, 0.0108, 0.0100, + 0.0087, 0.0093, 0.0087, 0.0083, 0.0077, 0.0080, 0.0067, 0.0072, 0.0064, 0.0083, 0.0084, 0.0088, 0.0090, 0.0091, 0.0094, 0.0114, 0.0133, + 0.0178, 0.0241, 0.0309, 0.0419, 0.0612, 0.0823, 0.0992, 0.1153, 0.1222, 0.1366, 0.1503, 0.1658, 0.1767, 0.1841, 0.1884, 0.1992, 0.2035, 0.2007, 0.2009, + 0.2045, 0.2065, 0.2229, 0.2290, 0.2395, 0.2449, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#red petal (pelargonia) +//2529 2048 2087 2698 2452 2372 2531 2475 2296 2294 2159 2111 1986 1898 1854 1729 1586 1501 1392 1332 1343 1255 1217 1182 1183 1203 1230 1277 1381 1474 1615 1762 1876 2028 2214 2464 2657 2919 3051 3172 3293 3421 3395 3494 3438 3495 3506 3490 3454 3487 3431 3452 3484 3438 3422 3368 3325 3441 3356 3432 3320 +const double ColorTemp::ColorRedpelagornia_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2529, 0.2048, 0.2087, 0.2698, 0.2452, 0.2372, 0.2531, 0.2475, 0.2296, 0.2294, 0.2159, 0.2111, 0.1986, 0.1898, 0.1854, 0.1729, 0.1586, 0.1501, 0.1392, 0.1332, 0.1343, + 0.1255, 0.1217, 0.1182, 0.1183, 0.1203, 0.1230, 0.1277, 0.1381, 0.1474, 0.1615, 0.1762, 0.1876, 0.2028, 0.2214, 0.2464, 0.2657, 0.2919, 0.3051, 0.3172, 0.3293, 0.3421, + 0.3395, 0.3494, 0.3438, 0.3495, 0.3506, 0.3490, 0.3454, 0.3487, 0.3431, 0.3452, 0.3484, 0.3438, 0.3422, 0.3368, 0.3325, 0.3441, 0.3356, 0.3432, 0.3320, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#red flower (talvio) +//3131 2199 2559 2540 2844 2530 2694 2765 2594 2673 2617 2629 2491 2384 2308 2256 2081 1973 1857 1752 1719 1652 1527 1477 1459 1386 1341 1283 1318 1334 1354 1424 1495 1543 1634 1773 1950 2129 2272 2431 2642 2827 2941 3045 3082 3158 3216 3307 3364 3388 3387 3517 3573 3501 3499 3523 3495 3606 3493 3518 3522 +const double ColorTemp::ColorRedtalvio_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3131, 0.2199, 0.2559, 0.2540, 0.2844, 0.2530, 0.2694, 0.2765, 0.2594, 0.2673, 0.2617, 0.2629, 0.2491, 0.2384, 0.2308, 0.2256, 0.2081, 0.1973, 0.1857, 0.1752, 0.1719, + 0.1652, 0.1527, 0.1477, 0.1459, 0.1386, 0.1341, 0.1283, 0.1318, 0.1334, 0.1354, 0.1424, 0.1495, 0.1543, 0.1634, 0.1773, 0.1950, 0.2129, 0.2272, 0.2431, 0.2642, 0.2827, + 0.2941, 0.3045, 0.3082, 0.3158, 0.3216, 0.3307, 0.3364, 0.3388, 0.3387, 0.3517, 0.3573, 0.3501, 0.3499, 0.3523, 0.3495, 0.3606, 0.3493, 0.3518, 0.3522, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; + +//#brown dry leaf (poimulehti) +//964 520 223 244 261 247 196 199 200 207 202 198 209 204 207 222 205 218 213 212 224 218 230 235 251 250 245 250 263 273 271 275 281 264 274 288 287 307 303 307 323 304 335 335 346 345 347 348 370 364 380 393 384 407 419 421 419 433 431 461 465 +//RIs 67 +const double ColorTemp::ColorBrownpoimulehti_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0964, 0.0520, 0.0223, 0.0244, 0.0261, 0.0247, 0.0196, 0.0199, 0.0200, 0.0207, 0.0202, 0.0198, 0.0209, 0.0204, 0.0207, 0.0222, 0.0205, 0.0218, 0.0213, + 0.0212, 0.0224, 0.0218, 0.0230, 0.0235, 0.0251, 0.0250, 0.0245, 0.0250, 0.0263, 0.0273, 0.0271, 0.0275, 0.0281, 0.0264, 0.0274, 0.0288, 0.0287, 0.0307, + 0.0303, 0.0307, 0.0323, 0.0304, 0.0335, 0.0335, 0.0346, 0.0345, 0.0347, 0.0348, 0.0370, 0.0364, 0.0380, 0.0393, 0.0384, 0.0407, + 0.0419, 0.0421, 0.0419, 0.0433, 0.0431, 0.0461, 0.0465, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#orange leaf (koristepensas, tuntematon) +//241 195 223 489 574 565 634 605 574 613 645 636 644 628 621 603 614 654 676 719 776 795 862 879 918 918 955 980 1013 1055 1132 1225 1258 1362 1427 1579 1796 1936 2079 2258 2440 2597 2728 2790 2777 2857 2923 2991 3031 3040 3037 3094 3066 3023 3093 3044 3082 3085 3147 3226 3192 +const double ColorTemp::ColorOrangetuntematon_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0241, 0.0195, 0.0223, 0.0489, 0.0574, 0.0565, 0.0634, 0.0605, 0.0574, 0.0613, 0.0645, 0.0636, 0.0644, 0.0628, 0.0621, 0.0603, 0.0614, 0.0654, 0.0676, + 0.0719, 0.0776, 0.0795, 0.0862, 0.0879, 0.0918, 0.0918, 0.0955, 0.0980, 0.1013, 0.1055, 0.1132, 0.1225, 0.1258, 0.1362, 0.1427, 0.1579, 0.1796, 0.1936, 0.2079, + 0.2258, 0.2440, 0.2597, 0.2728, 0.2790, 0.2777, 0.2857, 0.2923, 0.2991, 0.3031, 0.3040, 0.3037, 0.3094, 0.3066, 0.3023, 0.3093, 0.3044, 0.3082, 0.3085, 0.3147, 0.3226, 0.3192, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//,#orange leaf (lehmus) +//1062 866 443 544 496 485 492 458 450 425 458 477 497 461 451 481 454 500 515 538 529 593 638 670 686 711 718 729 741 760 796 833 895 958 1016 1128 1246 1344 1450 1505 1596 1636 1621 1631 1627 1628 1658 1583 1486 1415 1322 1265 1159 1062 975 974 1063 1326 1736 2141 2568 +const double ColorTemp::ColorOrangetlehmus_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1062, 0.0866, 0.0443, 0.0544, 0.0496, 0.0485, 0.0492, 0.0458, 0.0450, 0.0425, 0.0458, 0.0477, 0.0497, 0.0461, 0.0451, 0.0481, 0.0454, 0.0500, 0.0515, + 0.0538, 0.0529, 0.0593, 0.0638, 0.0670, 0.0686, 0.0711, 0.0718, 0.0729, 0.0741, 0.0760, 0.0796, 0.0833, 0.0895, 0.0958, 0.1016, 0.1128, 0.1246, 0.1344, 0.1450, + 0.1505, 0.1596, 0.1636, 0.1621, 0.1631, 0.1627, 0.1628, 0.1658, 0.1583, 0.1486, 0.1415, 0.1322, 0.1265, 0.1159, 0.1062, 0.0975, 0.0974, 0.1063, 0.1326, 0.1736, 0.2141, 0.2568, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#orange leaf (vaahtera) +//1517 551 664 659 521 585 460 385 424 389 375 374 359 380 371 373 379 387 378 394 405 416 463 496 536 542 577 579 619 642 678 710 777 829 894 1035 1174 1334 1484 1611 1798 1941 2012 2065 2135 2229 2286 2317 2332 2357 2323 2330 2292 2236 2137 2093 2180 2240 2368 2487 2528 +const double ColorTemp::ColorOrangvaahtera_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1517, 0.0551, 0.0664, 0.0659, 0.0521, 0.0585, 0.0460, 0.0385, 0.0424, 0.0389, 0.0375, 0.0374, 0.0359, 0.0380, 0.0371, 0.0373, 0.0379, 0.0387, 0.0378, + 0.0394, 0.0405, 0.0416, 0.0463, 0.0496, 0.0536, 0.0542, 0.0577, 0.0579, 0.0619, 0.0642, 0.0678, 0.0710, 0.0777, 0.0829, 0.0894, 0.1035, 0.1174, 0.1334, 0.1484, + 0.1611, 0.1798, 0.1941, 0.2012, 0.2065, 0.2135, 0.2229, 0.2286, 0.2317, 0.2332, 0.2357, 0.2323, 0.2330, 0.2292, 0.2236, 0.2137, 0.2093, 0.2180, 0.2240, 0.2368, 0.2487, 0.2528, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#brown dry leaf (lehmus) +//758 236 148 430 347 435 438 495 439 454 472 471 461 459 458 479 492 482 499 513 520 545 567 594 623 647 698 717 744 792 803 834 864 876 916 932 963 1013 1025 1060 1099 1118 1153 1175 1207 1242 1268 1266 1284 1305 1305 1304 1353 1360 1330 1332 1413 1502 1610 1682 1737 +const double ColorTemp::ColorBrownlehmus_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0758, 0.0236, 0.0148, 0.0430, 0.0347, 0.0435, 0.0438, 0.0495, 0.0439, 0.0454, 0.0472, 0.0471, 0.0461, 0.0459, 0.0458, 0.0479, 0.0492, 0.0482, 0.0499, 0.0513, + 0.0520, 0.0545, 0.0567, 0.0594, 0.0623, 0.0647, 0.0698, 0.0717, 0.0744, 0.0792, 0.0803, 0.0834, 0.0864, 0.0876, 0.0916, 0.0932, 0.0963, 0.1013, 0.1025, 0.1060, + 0.1099, 0.1118, 0.1153, 0.1175, 0.1207, 0.1242, 0.1268, 0.1266, 0.1284, 0.1305, 0.1305, 0.1304, 0.1353, 0.1360, 0.1330, 0.1332, 0.1413, 0.1502, 0.1610, 0.1682, 0.1737, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#brown moss (nuotiosammal) +//482 260 178 92 104 88 92 40 43 52 58 64 70 63 67 67 62 76 82 82 91 96 104 116 135 141 142 155 168 179 198 199 193 201 212 218 226 240 242 238 255 265 277 266 265 283 289 275 289 277 291 288 277 252 262 260 264 299 375 411 446 +const double ColorTemp::ColorBrownuotiosammal_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0482, 0.0260, 0.0178, 0.0092, 0.0104, 0.0088, 0.0092, 0.0040, 0.0043, 0.0052, 0.0058, 0.0064, 0.0070, 0.0063, 0.0067, 0.0067, 0.0062, 0.0076, 0.0082, 0.0082, 0.0091, 0.0096, + 0.0104, 0.0116, 0.0135, 0.0141, 0.0142, 0.0155, 0.0168, 0.0179, 0.0198, 0.0199, 0.0193, 0.0201, 0.0212, 0.0218, 0.0226, 0.0240, 0.0242, 0.0238, 0.0255, 0.0265, + 0.0277, 0.0266, 0.0265, 0.0283, 0.0289, 0.0275, 0.0289, 0.0277, 0.0291, 0.0288, 0.0277, 0.0252, 0.0262, 0.0260, 0.0264, 0.0299, 0.0375, 0.0411, 0.0446, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#black soil +//0 0 89 122 52 53 104 127 130 134 137 137 134 136 138 139 134 140 142 148 154 153 152 150 151 156 153 166 154 171 163 163 166 166 169 169 166 174 174 170 170 168 176 177 176 174 179 180 180 183 177 193 178 187 194 193 182 196 184 195 195 +const double ColorTemp::ColorBlacksoil_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0089, 0.0122, 0.0052, 0.0053, 0.0104, 0.0127, 0.0130, 0.0134, 0.0137, 0.0137, 0.0134, 0.0136, 0.0138, 0.0139, 0.0134, 0.0140, 0.0142, 0.0148, 0.0154, 0.0153, + 0.0152, 0.0150, 0.0151, 0.0156, 0.0153, 0.0166, 0.0154, 0.0171, 0.0163, 0.0163, 0.0166, 0.0166, 0.0169, 0.0169, 0.0166, 0.0174, 0.0174, 0.0170, 0.0170, 0.0168, 0.0176, 0.0177, + 0.0176, 0.0174, 0.0179, 0.0180, 0.0180, 0.0183, 0.0177, 0.0193, 0.0178, 0.0187, 0.0194, 0.0193, 0.0182, 0.0196, 0.0184, 0.0195, 0.0195, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#black, dry leaf (pihlaja) +//0 79 111 172 174 201 214 211 207 207 191 200 196 206 196 194 203 207 204 208 210 212 211 208 209 219 222 224 231 241 232 244 249 250 267 264 262 269 282 277 289 284 279 302 289 308 313 315 310 325 313 319 356 340 331 347 356 352 364 373 352 +const double ColorTemp::ColorBlackpihlaja[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0079, 0.0111, 0.0172, 0.0174, 0.0201, 0.0214, 0.0211, 0.0207, 0.0207, 0.0191, 0.0200, 0.0196, 0.0206, 0.0196, 0.0194, 0.0203, 0.0207, 0.0204, 0.0208, 0.0210, 0.0212, + 0.0211, 0.0208, 0.0209, 0.0219, 0.0222, 0.0224, 0.0231, 0.0241, 0.0232, 0.0244, 0.0249, 0.0250, 0.0267, 0.0264, 0.0262, 0.0269, 0.0282, 0.0277, 0.0289, 0.0284, 0.0279, 0.0302, + 0.0289, 0.0308, 0.0313, 0.0315, 0.0310, 0.0325, 0.0313, 0.0319, 0.0356, 0.0340, 0.0331, 0.0347, 0.0356, 0.0352, 0.0364, 0.0373, 0.0352, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//#gray lichen (nahkajaekaelae) +//1204 585 1113 733 600 653 715 685 726 682 713 691 719 691 683 693 711 715 701 700 720 697 706 696 723 714 726 738 729 735 737 739 742 746 746 761 743 735 722 717 728 749 721 712 705 737 733 758 780 785 775 771 755 744 743 742 755 779 849 940 1042 +//RIS 74 +const double ColorTemp::ColorGraynahjajaekaelae_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1204, 0.0585, 0.1113, 0.0733, 0.0600, 0.0653, 0.0715, 0.0685, 0.0726, 0.0682, 0.0713, 0.0691, 0.0719, 0.0691, 0.0683, 0.0693, 0.0711, 0.0715, 0.0701, 0.0700, + 0.0720, 0.0697, 0.0706, 0.0696, 0.0723, 0.0714, 0.0726, 0.0738, 0.0729, 0.0735, 0.0737, 0.0739, 0.0742, 0.0746, 0.0746, 0.0761, 0.0743, 0.0735, 0.0722, 0.0717, + 0.0728, 0.0749, 0.0721, 0.0712, 0.0705, 0.0737, 0.0733, 0.0758, 0.0780, 0.0785, 0.0775, 0.0771, 0.0755, 0.0744, 0.0743, 0.0742, 0.0755, 0.0779, 0.0849, 0.0940, 0.1042, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#green moss (nuotiosammal) +//120 65 134 31 209 124 104 96 97 95 76 79 83 93 83 95 95 104 117 127 140 161 214 252 290 310 328 343 347 373 365 351 347 343 311 301 285 283 263 256 255 251 257 235 227 224 233 208 194 186 165 160 151 149 157 161 185 243 309 425 543 +const double ColorTemp::ColorGreennuotisammal_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0120, 0.0065, 0.0134, 0.0031, 0.0209, 0.0124, 0.0104, 0.0096, 0.0097, 0.0095, 0.0076, 0.0079, 0.0083, 0.0093, 0.0083, 0.0095, 0.0095, 0.0104, 0.0117, 0.0127, 0.0140, 0.0161, + 0.0214, 0.0252, 0.0290, 0.0310, 0.0328, 0.0343, 0.0347, 0.0373, 0.0365, 0.0351, 0.0347, 0.0343, 0.0311, 0.0301, 0.0285, 0.0283, 0.0263, 0.0256, 0.0255, 0.0251, + 0.0257, 0.0235, 0.0227, 0.0224, 0.0233, 0.0208, 0.0194, 0.0186, 0.0165, 0.0160, 0.0151, 0.0149, 0.0157, 0.0161, 0.0185, 0.0243, 0.0309, 0.0425, 0.0543, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#green leaf (leskenlehti) +//525 273 0 378 318 164 224 276 316 266 303 290 305 286 290 303 323 323 352 383 405 482 614 743 920 1015 1139 1192 1175 1216 1195 1145 1116 1009 947 867 802 754 741 709 675 625 574 579 561 565 557 511 471 419 399 372 365 395 375 382 458 555 716 1002 1407 +const double ColorTemp::ColorGreenleskenlehti_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0525, 0.0273, 0.0, 0.0378, 0.0318, 0.0164, 0.0224, 0.0276, 0.0316, 0.0266, 0.0303, 0.0290, 0.0305, 0.0286, 0.0290, 0.0303, 0.0323, 0.0323, 0.0352, 0.0383, 0.0405, 0.0482, + 0.0614, 0.0743, 0.0920, 0.1015, 0.1139, 0.1192, 0.1175, 0.1216, 0.1195, 0.1145, 0.1116, 0.1009, 0.0947, 0.0867, 0.0802, 0.0754, 0.0741, 0.0709, 0.0675, 0.0625, + 0.0574, 0.0579, 0.0561, 0.0565, 0.0557, 0.0511, 0.0471, 0.0419, 0.0399, 0.0372, 0.0365, 0.0395, 0.0375, 0.0382, 0.0458, 0.0555, 0.0716, 0.1002, 0.1407, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#green leaf (linnunkaali) +//602 0 267 306 339 335 300 247 292 289 295 298 292 318 312 289 299 307 310 320 350 375 446 499 574 634 698 725 736 754 736 702 668 633 590 551 514 499 467 460 445 424 415 409 399 412 393 380 370 362 366 343 342 350 333 350 364 418 494 670 914 +//RIS 77 +const double ColorTemp::ColorGreenlinnunkaali_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0602, 0.0, 0.0267, 0.0306, 0.0339, 0.0335, 0.0300, 0.0247, 0.0292, 0.0289, 0.0295, 0.0298, 0.0292, 0.0318, 0.0312, 0.0289, 0.0299, 0.0307, 0.0310, 0.0320, + 0.0350, 0.0375, 0.0446, 0.0499, 0.0574, 0.0634, 0.0698, 0.0725, 0.0736, 0.0754, 0.0736, 0.0702, 0.0668, 0.0633, 0.0590, 0.0551, 0.0514, 0.0499, 0.0467, 0.0460, + 0.0445, 0.0424, 0.0415, 0.0409, 0.0399, 0.0412, 0.0393, 0.0380, 0.0370, 0.0362, 0.0366, 0.0343, 0.0342, 0.0350, 0.0333, 0.0350, 0.0364, 0.0418, 0.0494, 0.0670, 0.0914, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//#green leaf (pelto-ohake) +//0 366 360 233 173 179 157 175 206 205 180 179 173 178 187 189 184 171 195 204 193 219 253 297 365 431 467 489 493 516 500 466 426 406 380 343 316 295 276 282 265 253 239 228 226 229 238 237 216 221 219 217 212 219 229 258 284 309 375 487 732 +const double ColorTemp::ColorGreenpelto_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0366, 0.0360, 0.0233, 0.0173, 0.0179, 0.0157, 0.0175, 0.0206, 0.0205, 0.0180, 0.0179, 0.0173, 0.0178, 0.0187, 0.0189, 0.0184, 0.0171, 0.0195, 0.0204, 0.0193, 0.0219, + 0.0253, 0.0297, 0.0365, 0.0431, 0.0467, 0.0489, 0.0493, 0.0516, 0.0500, 0.0466, 0.0426, 0.0406, 0.0380, 0.0343, 0.0316, 0.0295, 0.0276, 0.0282, 0.0265, 0.0253, 0.0239, + 0.0228, 0.0226, 0.0229, 0.0238, 0.0237, 0.0216, 0.0221, 0.0219, 0.0217, 0.0212, 0.0219, 0.0229, 0.0258, 0.0284, 0.0309, 0.0375, 0.0487, 0.0732, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#green rod (voikukka), +//2205 1755 1710 1365 1159 1207 1024 1118 1127 1141 1134 1125 1149 1140 1120 1128 1139 1156 1212 1273 1262 1359 1461 1519 1568 1599 1660 1668 1680 1718 1697 1690 1672 1675 1663 1644 1642 1652 1626 1623 1653 1621 1614 1590 1625 1609 1615 1576 1509 1483 1418 1391 1324 1294 1267 1220 1315 1417 1650 1861 2006 +const double ColorTemp::ColorGreenrodvoikukka[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2205, 0.1755, 0.1710, 0.1365, 0.1159, 0.1207, 0.1024, 0.1118, 0.1127, 0.1141, 0.1134, 0.1125, 0.1149, 0.1140, 0.1120, 0.1128, 0.1139, 0.1156, 0.1212, 0.1273, 0.1262, 0.1359, + 0.1461, 0.1519, 0.1568, 0.1599, 0.1660, 0.1668, 0.1680, 0.1718, 0.1697, 0.1690, 0.1672, 0.1675, 0.1663, 0.1644, 0.1642, 0.1652, 0.1626, 0.1623, 0.1653, 0.1621, 0.1614, 0.1590, + 0.1625, 0.1609, 0.1615, 0.1576, 0.1509, 0.1483, 0.1418, 0.1391, 0.1324, 0.1294, 0.1267, 0.1220, 0.1315, 0.1417, 0.1650, 0.1861, 0.2006, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#green leaf (lehmus) +//2362 1024 945 666 617 604 591 580 648 631 656 607 616 653 643 626 643 656 710 753 801 929 1105 1277 1437 1601 1742 1774 1798 1848 1832 1820 1787 1730 1663 1593 1541 1461 1446 1419 1335 1298 1247 1192 1197 1199 1156 1072 1007 942 899 832 824 793 755 801 860 1031 1305 1809 2260 +const double ColorTemp::ColorGreenlehmus[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2362, 0.1024, 0.0945, 0.0666, 0.0617, 0.0604, 0.0591, 0.0580, 0.0648, 0.0631, 0.0656, 0.0607, 0.0616, 0.0653, 0.0643, 0.0626, 0.0643, 0.0656, 0.0710, 0.0753, + 0.0801, 0.0929, 0.1105, 0.1277, 0.1437, 0.1601, 0.1742, 0.1774, 0.1798, 0.1848, 0.1832, 0.1820, 0.1787, 0.1730, 0.1663, 0.1593, 0.1541, 0.1461, 0.1446, 0.1419, 0.1335, 0.1298, + 0.1247, 0.1192, 0.1197, 0.1199, 0.1156, 0.1072, 0.1007, 0.0942, 0.0899, 0.0832, 0.0824, 0.0793, 0.0755, 0.0801, 0.0860, 0.1031, 0.1305, 0.1809, 0.2260, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#green leaf (koristeherukka) +//945 292 315 433 321 294 295 321 278 261 282 272 270 278 285 274 277 268 269 283 275 309 325 389 450 493 551 557 587 585 567 554 515 487 460 424 409 387 353 349 353 333 309 309 312 315 321 298 304 304 281 273 293 311 314 333 355 392 439 595 811 +const double ColorTemp::ColorGreenkoriste[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0945, 0.0292, 0.0315, 0.0433, 0.0321, 0.0294, 0.0295, 0.0321, 0.0278, 0.0261, 0.0282, 0.0272, 0.0270, 0.0278, 0.0285, 0.0274, 0.0277, 0.0268, 0.0269, 0.0283, + 0.0275, 0.0309, 0.0325, 0.0389, 0.0450, 0.0493, 0.0551, 0.0557, 0.0587, 0.0585, 0.0567, 0.0554, 0.0515, 0.0487, 0.0460, 0.0424, 0.0409, 0.0387, 0.0353, 0.0349, + 0.0353, 0.0333, 0.0309, 0.0309, 0.0312, 0.0315, 0.0321, 0.0298, 0.0304, 0.0304, 0.0281, 0.0273, 0.0293, 0.0311, 0.0314, 0.0333, 0.0355, 0.0392, 0.0439, 0.0595, 0.0811, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#green leaf (poimulehti) +//1102 146 630 266 247 261 285 238 273 281 272 260 262 254 274 263 273 278 296 309 322 388 493 607 712 840 953 986 1006 1034 999 981 918 855 794 711 649 627 604 563 531 515 467 450 448 466 445 421 402 385 369 345 346 319 330 359 378 439 578 835 1177 +const double ColorTemp::ColorGreenpoimulehti[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1102, 0.0146, 0.0630, 0.0266, 0.0247, 0.0261, 0.0285, 0.0238, 0.0273, 0.0281, 0.0272, 0.0260, 0.0262, 0.0254, 0.0274, 0.0263, 0.0273, 0.0278, 0.0296, 0.0309, 0.0322, + 0.0388, 0.0493, 0.0607, 0.0712, 0.0840, 0.0953, 0.0986, 0.1006, 0.1034, 0.0999, 0.0981, 0.0918, 0.0855, 0.0794, 0.0711, 0.0649, 0.0627, 0.0604, 0.0563, 0.0531, 0.0515, + 0.0467, 0.0450, 0.0448, 0.0466, 0.0445, 0.0421, 0.0402, 0.0385, 0.0369, 0.0345, 0.0346, 0.0319, 0.0330, 0.0359, 0.0378, 0.0439, 0.0578, 0.0835, 0.1177, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#green leaf (hopeapaju) +//787 512 1260 1032 765 881 994 908 983 985 941 985 971 967 964 937 928 959 973 992 1004 1017 1053 1102 1180 1227 1281 1309 1317 1328 1318 1271 1238 1222 1179 1152 1131 1092 1086 1078 1083 1020 1015 1000 1027 1037 1028 970 962 977 952 963 955 935 980 979 963 1028 1059 1228 1401 +const double ColorTemp::ColorGreenhopeapaju[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0787, 0.0512, 0.1260, 0.1032, 0.0765, 0.0881, 0.0994, 0.0908, 0.0983, 0.0985, 0.0941, 0.0985, 0.0971, 0.0967, 0.0964, 0.0937, 0.0928, 0.0959, 0.0973, 0.0992, 0.1004, + 0.1017, 0.1053, 0.1102, 0.1180, 0.1227, 0.1281, 0.1309, 0.1317, 0.1328, 0.1318, 0.1271, 0.1238, 0.1222, 0.1179, 0.1152, 0.1131, 0.1092, 0.1086, 0.1078, 0.1083, 0.1020, + 0.1015, 0.1000, 0.1027, 0.1037, 0.1028, 0.0970, 0.0962, 0.0977, 0.0952, 0.0963, 0.0955, 0.0935, 0.0980, 0.0979, 0.0963, 0.1028, 0.1059, 0.1228, 0.1401, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#red flower (uuden guinean liisa) +//2288 1861 2364 2229 2783 2842 2842 2923 2902 2990 2828 2871 2772 2723 2639 2558 2424 2315 2169 2094 2064 1964 1865 1739 1680 1624 1548 1457 1424 1408 1434 1451 1492 1528 1597 1755 1951 2147 2367 2648 2986 3236 3393 3596 3665 3786 3879 3915 3926 3994 3987 4017 4026 4112 4067 4125 4139 4121 4050 4040 4095 +const double ColorTemp::ColorReduuden[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2288, 0.1861, 0.2364, 0.2229, 0.2783, 0.2842, 0.2842, 0.2923, 0.2902, 0.2990, 0.2828, 0.2871, 0.2772, 0.2723, 0.2639, 0.2558, 0.2424, 0.2315, 0.2169, 0.2094, 0.2064, + 0.1964, 0.1865, 0.1739, 0.1680, 0.1624, 0.1548, 0.1457, 0.1424, 0.1408, 0.1434, 0.1451, 0.1492, 0.1528, 0.1597, 0.1755, 0.1951, 0.2147, 0.2367, 0.2648, 0.2986, 0.3236, + 0.3393, 0.3596, 0.3665, 0.3786, 0.3879, 0.3915, 0.3926, 0.3994, 0.3987, 0.4017, 0.4026, 0.4112, 0.4067, 0.4125, 0.4139, 0.4121, 0.4050, 0.4040, 0.4095, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#red flower (pajuangervo) +//445 1024 605 833 937 959 1052 1028 1049 1029 1017 975 948 882 865 812 757 718 658 638 628 597 554 523 509 509 485 475 469 492 479 477 490 525 555 597 641 704 756 846 948 1055 1164 1221 1266 1339 1393 1491 1553 1604 1608 1650 1643 1652 1655 1658 1651 1739 1813 1818 1938 +const double ColorTemp::ColorRedpajuan[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0445, 0.1024, 0.0605, 0.0833, 0.0937, 0.0959, 0.1052, 0.1028, 0.1049, 0.1029, 0.1017, 0.0975, 0.0948, 0.0882, 0.0865, 0.0812, 0.0757, 0.0718, 0.0658, 0.0638, 0.0628, 0.0597, + 0.0554, 0.0523, 0.0509, 0.0509, 0.0485, 0.0475, 0.0469, 0.0492, 0.0479, 0.0477, 0.0490, 0.0525, 0.0555, 0.0597, 0.0641, 0.0704, 0.0756, 0.0846, 0.0948, 0.1055, 0.1164, 0.1221, + 0.1266, 0.1339, 0.1393, 0.1491, 0.1553, 0.1604, 0.1608, 0.1650, 0.1643, 0.1652, 0.1655, 0.1658, 0.1651, 0.1739, 0.1813, 0.1818, 0.1938, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#red flower (jaloangervo) +//120 152 512 635 662 538 749 713 743 792 777 785 733 726 728 749 709 674 661 657 645 635 598 570 553 544 545 538 546 514 540 567 585 577 602 651 690 765 836 907 980 1089 1147 1188 1212 1253 1318 1371 1412 1473 1459 1478 1548 1582 1564 1590 1595 1714 1728 1814 1837 +const double ColorTemp::ColorRedjaloan[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0120, 0.0152, 0.0512, 0.0635, 0.0662, 0.0538, 0.0749, 0.0713, 0.0743, 0.0792, 0.0777, 0.0785, 0.0733, 0.0726, 0.0728, 0.0749, 0.0709, 0.0674, 0.0661, 0.0657, 0.0645, 0.0635, + 0.0598, 0.0570, 0.0553, 0.0544, 0.0545, 0.0538, 0.0546, 0.0514, 0.0540, 0.0567, 0.0585, 0.0577, 0.0602, 0.0651, 0.0690, 0.0765, 0.0836, 0.0907, 0.0980, 0.1089, 0.1147, 0.1188, + 0.1212, 0.1253, 0.1318, 0.1371, 0.1412, 0.1473, 0.1459, 0.1478, 0.1548, 0.1582, 0.1564, 0.1590, 0.1595, 0.1714, 0.1728, 0.1814, 0.1837, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#blue flower (ukonhattu) +//801 682 1070 1319 1311 1420 1453 1394 1318 1292 1268 1179 1132 1054 1015 948 846 780 731 709 705 667 621 598 555 522 505 493 498 500 494 471 479 463 450 461 487 515 546 574 555 562 539 558 546 552 567 626 715 807 862 978 1086 1199 1313 1323 1350 1366 1358 1320 1365 +const double ColorTemp::ColorBlueukon[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0801, 0.0682, 0.1070, 0.1319, 0.1311, 0.1420, 0.1453, 0.1394, 0.1318, 0.1292, 0.1268, 0.1179, 0.1132, 0.1054, 0.1015, 0.0948, 0.0846, 0.0780, 0.0731, 0.0709, 0.0705, 0.0667, + 0.0621, 0.0598, 0.0555, 0.0522, 0.0505, 0.0493, 0.0498, 0.0500, 0.0494, 0.0471, 0.0479, 0.0463, 0.0450, 0.0461, 0.0487, 0.0515, 0.0546, 0.0574, 0.0555, 0.0562, 0.0539, 0.0558, + 0.0546, 0.0552, 0.0567, 0.0626, 0.0715, 0.0807, 0.0862, 0.0978, 0.1086, 0.1199, 0.1313, 0.1323, 0.1350, 0.1366, 0.1358, 0.1320, 0.1365, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#blue flower (orvokki) +//292 528 645 1000 932 1439 1752 1947 2077 2158 2169 2153 2164 2132 2091 1993 1916 1876 1803 1702 1659 1554 1503 1425 1330 1229 1186 1134 1065 1031 1014 993 989 980 939 936 945 995 1055 1104 1180 1247 1284 1343 1349 1403 1458 1538 1634 1790 1880 2006 2218 2396 2556 2612 2735 2811 2765 2840 2877 +const double ColorTemp::ColorBlueorvokki[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0292, 0.0528, 0.0645, 0.1000, 0.0932, 0.1439, 0.1752, 0.1947, 0.2077, 0.2158, 0.2169, 0.2153, 0.2164, 0.2132, 0.2091, 0.1993, 0.1916, 0.1876, 0.1803, 0.1702, 0.1659, 0.1554, + 0.1503, 0.1425, 0.1330, 0.1229, 0.1186, 0.1134, 0.1065, 0.1031, 0.1014, 0.0993, 0.0989, 0.0980, 0.0939, 0.0936, 0.0945, 0.0995, 0.1055, 0.1104, 0.1180, 0.1247, 0.1284, 0.1343, + 0.1349, 0.1403, 0.1458, 0.1538, 0.1634, 0.1790, 0.1880, 0.2006, 0.2218, 0.2396, 0.2556, 0.2612, 0.2735, 0.2811, 0.2765, 0.2840, 0.2877, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#blue flower (malvikki) +//1062 528 749 571 512 538 455 445 431 384 353 299 249 212 190 162 123 105 90 81 83 75 78 72 59 56 61 54 71 69 70 62 63 65 70 74 78 73 76 87 90 104 119 119 131 145 156 184 225 255 314 414 538 669 849 1068 1247 1467 1701 1885 2032 +const double ColorTemp::ColorBluemalvikki[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1062, 0.0528, 0.0749, 0.0571, 0.0512, 0.0538, 0.0455, 0.0445, 0.0431, 0.0384, 0.0353, 0.0299, 0.0249, 0.0212, 0.0190, 0.0162, 0.0123, 0.0105, 0.0090, 0.0081, 0.0083, 0.0075, + 0.0078, 0.0072, 0.0059, 0.0056, 0.0061, 0.0054, 0.0071, 0.0069, 0.0070, 0.0062, 0.0063, 0.0065, 0.0070, 0.0074, 0.0078, 0.0073, 0.0076, 0.0087, 0.0090, 0.0104, 0.0119, 0.0119, + 0.0131, 0.0145, 0.0156, 0.0184, 0.0225, 0.0255, 0.0314, 0.0414, 0.0538, 0.0669, 0.0849, 0.1068, 0.1247, 0.1467, 0.1701, 0.1885, 0.2032, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#black dry leaf (maitohorsma) +//256 0 172 356 213 270 203 203 195 208 202 201 210 210 203 204 209 203 209 201 205 201 194 210 206 197 203 198 207 201 204 202 198 200 198 197 186 203 202 198 200 208 206 231 235 223 244 254 278 289 297 309 338 335 338 368 412 524 686 926 1185 +const double ColorTemp::ColorBlackmaito[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0256, 0.0, 0.0172, 0.0356, 0.0213, 0.0270, 0.0203, 0.0203, 0.0195, 0.0208, 0.0202, 0.0201, 0.0210, 0.0210, 0.0203, 0.0204, 0.0209, 0.0203, 0.0209, 0.0201, 0.0205, 0.0201, + 0.0194, 0.0210, 0.0206, 0.0197, 0.0203, 0.0198, 0.0207, 0.0201, 0.0204, 0.0202, 0.0198, 0.0200, 0.0198, 0.0197, 0.0186, 0.0203, 0.0202, 0.0198, 0.0200, 0.0208, 0.0206, 0.0231, + 0.0235, 0.0223, 0.0244, 0.0254, 0.0278, 0.0289, 0.0297, 0.0309, 0.0338, 0.0335, 0.0338, 0.0368, 0.0412, 0.0524, 0.0686, 0.0926, 0.1185, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#orange berry (pihlaja) +//945 731 585 433 247 408 266 314 293 305 289 288 280 297 262 298 277 274 291 293 285 303 300 310 324 336 364 377 426 465 499 561 602 667 741 890 1028 1164 1275 1465 1602 1640 1695 1744 1812 1837 1859 1805 1791 1822 1796 1751 1715 1655 1575 1600 1560 1618 1666 1740 1838 +const double ColorTemp::ColorOrangpihlaja[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0945, 0.0731, 0.0585, 0.0433, 0.0247, 0.0408, 0.0266, 0.0314, 0.0293, 0.0305, 0.0289, 0.0288, 0.0280, 0.0297, 0.0262, 0.0298, 0.0277, 0.0274, 0.0291, 0.0293, 0.0285, 0.0303, + 0.0300, 0.0310, 0.0324, 0.0336, 0.0364, 0.0377, 0.0426, 0.0465, 0.0499, 0.0561, 0.0602, 0.0667, 0.0741, 0.0890, 0.1028, 0.1164, 0.1275, 0.1465, 0.1602, 0.1640, 0.1695, 0.1744, + 0.1812, 0.1837, 0.1859, 0.1805, 0.1791, 0.1822, 0.1796, 0.1751, 0.1715, 0.1655, 0.1575, 0.1600, 0.1560, 0.1618, 0.1666, 0.1740, 0.1838, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#green flower (lehmus=linden) +//2677 1682 1170 1032 1085 816 728 755 833 832 813 845 857 884 855 882 914 997 1084 1179 1231 1437 1661 1873 2048 2209 2378 2408 2442 2509 2503 2452 2457 2418 2383 2348 2277 2213 2221 2169 2146 2048 1977 1960 2000 1993 1961 1899 1784 1748 1625 1517 1389 1260 1165 1143 1244 1522 1870 2324 2586 +//RIS 81 +const double ColorTemp::ColorGreenlinden[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2677, 0.1682, 0.1170, 0.1032, 0.1085, 0.0816, 0.0728, 0.0755, 0.0833, 0.0832, 0.0813, 0.0845, 0.0857, 0.0884, 0.0855, 0.0882, 0.0914, 0.0997, 0.1084, 0.1179, 0.1231, 0.1437, + 0.1661, 0.1873, 0.2048, 0.2209, 0.2378, 0.2408, 0.2442, 0.2509, 0.2503, 0.2452, 0.2457, 0.2418, 0.2383, 0.2348, 0.2277, 0.2213, 0.2221, 0.2169, 0.2146, 0.2048, 0.1977, 0.1960, + 0.2000, 0.1993, 0.1961, 0.1899, 0.1784, 0.1748, 0.1625, 0.1517, 0.1389, 0.1260, 0.1165, 0.1143, 0.1244, 0.1522, 0.1870, 0.2324, 0.2586, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#yellow petal (lehmus) +//1890 1097 900 832 814 799 758 853 803 808 833 862 916 943 960 969 1039 1162 1283 1370 1427 1529 1689 1781 1894 1950 2105 2118 2140 2185 2191 2199 2234 2266 2263 2297 2328 2312 2298 2332 2344 2312 2288 2347 2384 2390 2358 2280 2306 2315 2310 2253 2274 2271 2242 2292 2254 2208 2319 2314 2264 +const double ColorTemp::ColorYellowlehmus[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1890, 0.1097, 0.0900, 0.0832, 0.0814, 0.0799, 0.0758, 0.0853, 0.0803, 0.0808, 0.0833, 0.0862, 0.0916, 0.0943, 0.0960, 0.0969, 0.1039, 0.1162, 0.1283, 0.1370, 0.1427, + 0.1529, 0.1689, 0.1781, 0.1894, 0.1950, 0.2105, 0.2118, 0.2140, 0.2185, 0.2191, 0.2199, 0.2234, 0.2266, 0.2263, 0.2297, 0.2328, 0.2312, 0.2298, 0.2332, 0.2344, 0.2312, 0.2288, + 0.2347, 0.2384, 0.2390, 0.2358, 0.2280, 0.2306, 0.2315, 0.2310, 0.2253, 0.2274, 0.2271, 0.2242, 0.2292, 0.2254, 0.2208, 0.2319, 0.2314, 0.2264, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#yellow flower (suikeroalpi) +//2048 1666 1140 1210 699 680 615 566 567 561 609 585 614 572 599 575 636 730 982 1194 1360 1766 2222 2558 2849 3048 3201 3395 3395 3484 3576 3623 3606 3672 3651 3634 3647 3669 3715 3660 3720 3692 3704 3784 3683 3731 3681 3697 3635 3694 3617 3610 3632 3663 3616 3595 3599 3584 3588 3613 3527 +const double ColorTemp::ColorYellowsuikeroalpi[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2048, 0.1666, 0.1140, 0.1210, 0.0699, 0.0680, 0.0615, 0.0566, 0.0567, 0.0561, 0.0609, 0.0585, 0.0614, 0.0572, 0.0599, 0.0575, 0.0636, 0.0730, 0.0982, 0.1194, 0.1360, 0.1766, + 0.2222, 0.2558, 0.2849, 0.3048, 0.3201, 0.3395, 0.3395, 0.3484, 0.3576, 0.3623, 0.3606, 0.3672, 0.3651, 0.3634, 0.3647, 0.3669, 0.3715, 0.3660, 0.3720, 0.3692, 0.3704, 0.3784, + 0.3683, 0.3731, 0.3681, 0.3697, 0.3635, 0.3694, 0.3617, 0.3610, 0.3632, 0.3663, 0.3616, 0.3595, 0.3599, 0.3584, 0.3588, 0.3613, 0.3527, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#yellow flower (pensashanhikki) +//356 1365 1024 902 535 387 355 247 365 307 321 330 319 332 317 336 408 487 709 963 1235 1631 2111 2436 2718 2950 3151 3262 3313 3420 3448 3475 3491 3534 3520 3565 3622 3631 3626 3657 3640 3607 3641 3627 3601 3591 3588 3667 3618 3601 3630 3613 3592 3609 3569 3590 3568 3563 3588 3480 3471 +const double ColorTemp::ColorYellowpensashanhikki1[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0356, 0.1365, 0.1024, 0.0902, 0.0535, 0.0387, 0.0355, 0.0247, 0.0365, 0.0307, 0.0321, 0.0330, 0.0319, 0.0332, 0.0317, 0.0336, 0.0408, 0.0487, 0.0709, 0.0963, 0.1235, + 0.1631, 0.2111, 0.2436, 0.2718, 0.2950, 0.3151, 0.3262, 0.3313, 0.3420, 0.3448, 0.3475, 0.3491, 0.3534, 0.3520, 0.3565, 0.3622, 0.3631, 0.3626, 0.3657, 0.3640, 0.3607, + 0.3641, 0.3627, 0.3601, 0.3591, 0.3588, 0.3667, 0.3618, 0.3601, 0.3630, 0.3613, 0.3592, 0.3609, 0.3569, 0.3590, 0.3568, 0.3563, 0.3588, 0.3480, 0.3471, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#yellow sepal (pensashanhikki) +//1068 427 326 416 428 590 503 470 539 526 546 540 539 526 497 546 555 603 753 903 1010 1268 1563 1868 2068 2226 2429 2495 2560 2625 2636 2610 2655 2667 2635 2630 2612 2560 2597 2588 2543 2478 2499 2472 2438 2431 2379 2406 2361 2319 2264 2174 2128 2010 1942 1912 1930 2148 2334 2585 2764 +const double ColorTemp::ColorYellowpensashanhikki2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1068, 0.0427, 0.0326, 0.0416, 0.0428, 0.0590, 0.0503, 0.0470, 0.0539, 0.0526, 0.0546, 0.0540, 0.0539, 0.0526, 0.0497, 0.0546, 0.0555, 0.0603, 0.0753, 0.0903, 0.1010, 0.1268, + 0.1563, 0.1868, 0.2068, 0.2226, 0.2429, 0.2495, 0.2560, 0.2625, 0.2636, 0.2610, 0.2655, 0.2667, 0.2635, 0.2630, 0.2612, 0.2560, 0.2597, 0.2588, 0.2543, 0.2478, 0.2499, 0.2472, + 0.2438, 0.2431, 0.2379, 0.2406, 0.2361, 0.2319, 0.2264, 0.2174, 0.2128, 0.2010, 0.1942, 0.1912, 0.1930, 0.2148, 0.2334, 0.2585, 0.2764, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#blue flower (hiidenvirna) +//315 512 675 832 765 865 807 867 911 904 852 826 780 753 711 661 595 528 513 476 431 391 361 331 305 276 240 229 237 223 212 208 215 205 203 195 209 212 222 266 296 322 356 352 388 391 411 425 473 532 550 630 669 748 823 879 904 917 930 950 942 +const double ColorTemp::ColorBluehiidenvirna[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0315, 0.0512, 0.0675, 0.0832, 0.0765, 0.0865, 0.0807, 0.0867, 0.0911, 0.0904, 0.0852, 0.0826, 0.0780, 0.0753, 0.0711, 0.0661, 0.0595, 0.0528, 0.0513, 0.0476, 0.0431, 0.0391, + 0.0361, 0.0331, 0.0305, 0.0276, 0.0240, 0.0229, 0.0237, 0.0223, 0.0212, 0.0208, 0.0215, 0.0205, 0.0203, 0.0195, 0.0209, 0.0212, 0.0222, 0.0266, 0.0296, 0.0322, 0.0356, 0.0352, + 0.0388, 0.0391, 0.0411, 0.0425, 0.0473, 0.0532, 0.0550, 0.0630, 0.0669, 0.0748, 0.0823, 0.0879, 0.0904, 0.0917, 0.0930, 0.0950, 0.0942, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#blue flower (kurkkuyrtti) +//2687 1553 2181 2246 2209 2263 2442 2347 2261 2353 2292 2230 2095 2008 1896 1782 1569 1443 1333 1223 1177 1074 992 902 813 755 701 626 577 548 525 498 469 445 456 448 428 441 448 447 455 467 496 534 527 586 668 798 966 1126 1289 1469 1679 1870 2013 2040 2060 2077 2104 2155 2119 +//RIS 87 +const double ColorTemp::ColorBluekurkkuyrtti[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2687, 0.1553, 0.2181, 0.2246, 0.2209, 0.2263, 0.2442, 0.2347, 0.2261, 0.2353, 0.2292, 0.2230, 0.2095, 0.2008, 0.1896, 0.1782, 0.1569, 0.1443, 0.1333, 0.1223, 0.1177, 0.1074, + 0.0992, 0.0902, 0.0813, 0.0755, 0.0701, 0.0626, 0.0577, 0.0548, 0.0525, 0.0498, 0.0469, 0.0445, 0.0456, 0.0448, 0.0428, 0.0441, 0.0448, 0.0447, 0.0455, 0.0467, 0.0496, 0.0534, + 0.0527, 0.0586, 0.0668, 0.0798, 0.0966, 0.1126, 0.1289, 0.1469, 0.1679, 0.1870, 0.2013, 0.2040, 0.2060, 0.2077, 0.2104, 0.2155, 0.2119, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#pink (siankaersaemoe) +//585 859 758 1094 780 1012 987 1067 1059 1034 1098 1110 1097 1040 1058 1048 1028 1014 1068 1024 1023 1025 1032 1029 1011 1007 986 973 946 906 949 923 943 949 956 998 1051 1107 1166 1242 1284 1355 1394 1438 1451 1543 1589 1588 1612 1616 1562 1534 1562 1541 1494 1492 1518 1650 1749 1907 1991 +const double ColorTemp::ColorPinksiankaersaemoe[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0585, 0.0859, 0.0758, 0.1094, 0.0780, 0.1012, 0.0987, 0.1067, 0.1059, 0.1034, 0.1098, 0.1110, 0.1097, 0.1040, 0.1058, 0.1048, 0.1028, 0.1014, 0.1068, 0.1024, 0.1023, 0.1025, + 0.1032, 0.1029, 0.1011, 0.1007, 0.0986, 0.0973, 0.0946, 0.0906, 0.0949, 0.0923, 0.0943, 0.0949, 0.0956, 0.0998, 0.1051, 0.1107, 0.1166, 0.1242, 0.1284, 0.1355, 0.1394, 0.1438, + 0.1451, 0.1543, 0.1589, 0.1588, 0.1612, 0.1616, 0.1562, 0.1534, 0.1562, 0.1541, 0.1494, 0.1492, 0.1518, 0.1650, 0.1749, 0.1907, 0.1991, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#violet flower (harakankello) +//2520 1462 1890 1898 1751 1713 1555 1516 1471 1403 1282 1209 1144 1135 1069 976 895 823 782 762 713 685 661 635 603 559 551 550 541 567 562 574 580 589 586 620 670 690 718 801 786 769 773 739 800 806 837 845 971 1043 1102 1241 1359 1502 1611 1726 1793 1859 1909 1969 2014 +//RIS 89 +const double ColorTemp::ColorVioletharakankello[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2520, 0.1462, 0.1890, 0.1898, 0.1751, 0.1713, 0.1555, 0.1516, 0.1471, 0.1403, 0.1282, 0.1209, 0.1144, 0.1135, 0.1069, 0.0976, 0.0895, 0.0823, 0.0782, 0.0762, 0.0713, + 0.0685, 0.0661, 0.0635, 0.0603, 0.0559, 0.0551, 0.0550, 0.0541, 0.0567, 0.0562, 0.0574, 0.0580, 0.0589, 0.0586, 0.0620, 0.0670, 0.0690, 0.0718, 0.0801, 0.0786, 0.0769, + 0.0773, 0.0739, 0.0800, 0.0806, 0.0837, 0.0845, 0.0971, 0.1043, 0.1102, 0.1241, 0.1359, 0.1502, 0.1611, 0.1726, 0.1793, 0.1859, 0.1909, 0.1969, 0.2014, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#violet flower (alsikeapila) +//1260 585 765 1065 937 881 847 943 1075 1053 1020 994 1008 1026 1015 980 962 949 925 908 880 864 843 814 802 749 698 691 677 660 653 660 631 633 644 692 743 809 889 1005 1160 1325 1396 1450 1526 1583 1655 1674 1689 1707 1675 1674 1624 1576 1564 1591 1613 1717 1851 1962 2033 +const double ColorTemp::ColorVioletalsikeapila[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1260, 0.0585, 0.0765, 0.1065, 0.0937, 0.0881, 0.0847, 0.0943, 0.1075, 0.1053, 0.1020, 0.0994, 0.1008, 0.1026, 0.1015, 0.0980, 0.0962, 0.0949, 0.0925, 0.0908, 0.0880, 0.0864, + 0.0843, 0.0814, 0.0802, 0.0749, 0.0698, 0.0691, 0.0677, 0.0660, 0.0653, 0.0660, 0.0631, 0.0633, 0.0644, 0.0692, 0.0743, 0.0809, 0.0889, 0.1005, 0.1160, 0.1325, 0.1396, 0.1450, + 0.1526, 0.1583, 0.1655, 0.1674, 0.1689, 0.1707, 0.1675, 0.1674, 0.1624, 0.1576, 0.1564, 0.1591, 0.1613, 0.1717, 0.1851, 0.1962, 0.2033, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#violet flower (akilleija) +//843 1340 1393 1254 1290 1452 1508 1519 1454 1384 1301 1256 1178 1113 1056 985 884 827 743 720 691 664 605 578 540 507 499 475 485 494 492 479 487 493 471 495 559 595 645 689 720 732 716 723 734 750 804 849 948 1041 1169 1362 1525 1693 1761 1935 2071 2235 2376 2493 2604 +const double ColorTemp::ColorVioletakilleija[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0843, 0.1340, 0.1393, 0.1254, 0.1290, 0.1452, 0.1508, 0.1519, 0.1454, 0.1384, 0.1301, 0.1256, 0.1178, 0.1113, 0.1056, 0.0985, 0.0884, 0.0827, 0.0743, 0.0720, 0.0691, 0.0664, + 0.0605, 0.0578, 0.0540, 0.0507, 0.0499, 0.0475, 0.0485, 0.0494, 0.0492, 0.0479, 0.0487, 0.0493, 0.0471, 0.0495, 0.0559, 0.0595, 0.0645, 0.0689, 0.0720, 0.0732, 0.0716, 0.0723, + 0.0734, 0.0750, 0.0804, 0.0849, 0.0948, 0.1041, 0.1169, 0.1362, 0.1525, 0.1693, 0.1761, 0.1935, 0.2071, 0.2235, 0.2376, 0.2493, 0.2604, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#orange flower (kehaekukka) +//0 0 0 0 0 0 102 58 128 125 137 122 122 134 123 136 159 138 163 151 167 178 192 177 206 226 315 451 707 1045 1446 1707 1944 2131 2276 2524 2719 2841 2968 3052 3199 3264 3282 3429 3451 3454 3477 3556 3478 3565 3595 3569 3582 3582 3559 3610 3626 3668 3733 3692 3722 +const double ColorTemp::ColorOrangekehaekukka[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0102, 0.0058, 0.0128, 0.0125, 0.0137, 0.0122, 0.0122, 0.0134, 0.0123, 0.0136, 0.0159, 0.0138, 0.0163, 0.0151, 0.0167, 0.0178, 0.0192, + 0.0177, 0.0206, 0.0226, 0.0315, 0.0451, 0.0707, 0.1045, 0.1446, 0.1707, 0.1944, 0.2131, 0.2276, 0.2524, 0.2719, 0.2841, 0.2968, 0.3052, 0.3199, 0.3264, 0.3282, 0.3429, + 0.3451, 0.3454, 0.3477, 0.3556, 0.3478, 0.3565, 0.3595, 0.3569, 0.3582, 0.3582, 0.3559, 0.3610, 0.3626, 0.3668, 0.3733, 0.3692, 0.3722, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#red berry (pihlaja) +//0 0 0 0 25 84 128 87 165 130 167 147 155 146 148 165 158 159 164 160 158 158 157 157 173 173 179 195 210 234 264 302 349 386 461 572 735 886 1038 1216 1376 1521 1607 1691 1728 1769 1842 1843 1865 1910 1881 1920 1909 1909 1891 1879 1915 1879 1878 1843 1832 +const double ColorTemp::ColorRedpihlaja[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0025, 0.0084, 0.0128, 0.0087, 0.0165, 0.0130, 0.0167, 0.0147, 0.0155, 0.0146, 0.0148, 0.0165, 0.0158, 0.0159, 0.0164, 0.0160, 0.0158, 0.0158, + 0.0157, 0.0157, 0.0173, 0.0173, 0.0179, 0.0195, 0.0210, 0.0234, 0.0264, 0.0302, 0.0349, 0.0386, 0.0461, 0.0572, 0.0735, 0.0886, 0.1038, 0.1216, 0.1376, 0.1521, 0.1607, 0.1691, + 0.1728, 0.1769, 0.1842, 0.1843, 0.1865, 0.1910, 0.1881, 0.1920, 0.1909, 0.1909, 0.1891, 0.1879, 0.1915, 0.1879, 0.1878, 0.1843, 0.1832, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//#violet flower (petunia) +//292 66 227 313 325 332 310 319 300 268 229 193 164 137 127 104 67 50 49 37 34 34 44 32 33 31 38 41 33 34 45 44 37 42 44 49 49 67 80 89 110 130 137 145 153 171 194 223 275 321 391 464 580 720 907 1055 1230 1436 1548 1777 1933 +//RIS 94 +const double ColorTemp::ColorVioletpetunia[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0292, 0.0066, 0.0227, 0.0313, 0.0325, 0.0332, 0.0310, 0.0319, 0.0300, 0.0268, 0.0229, 0.0193, 0.0164, 0.0137, 0.0127, 0.0104, 0.0067, 0.0050, 0.0049, 0.0037, 0.0034, 0.0034, + 0.0044, 0.0032, 0.0033, 0.0031, 0.0038, 0.0041, 0.0033, 0.0034, 0.0045, 0.0044, 0.0037, 0.0042, 0.0044, 0.0049, 0.0049, 0.0067, 0.0080, 0.0089, 0.0110, 0.0130, 0.0137, 0.0145, + 0.0153, 0.0171, 0.0194, 0.0223, 0.0275, 0.0321, 0.0391, 0.0464, 0.0580, 0.0720, 0.0907, 0.1055, 0.1230, 0.1436, 0.1548, 0.1777, 0.1933, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#violet flower (orvokki) +//195 0 152 31 22 32 77 69 45 20 27 26 13 12 14 11 15 23 16 18 16 12 16 10 16 15 13 15 15 16 14 20 14 17 15 17 15 17 17 17 23 24 29 38 36 38 37 43 58 65 70 86 113 155 222 285 405 506 645 817 1035 +const double ColorTemp::ColorVioletorvokki[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0195, 0.0, 0.0152, 0.0031, 0.0022, 0.0032, 0.0077, 0.0069, 0.0045, 0.0020, 0.0027, 0.0026, 0.0013, 0.0012, 0.0014, 0.0011, 0.0015, 0.0023, 0.0016, 0.0018, 0.0016, 0.0012, 0.0016, + 0.0010, 0.0016, 0.0015, 0.0013, 0.0015, 0.0015, 0.0016, 0.0014, 0.0020, 0.0014, 0.0017, 0.0015, 0.0017, 0.0015, 0.0017, 0.0017, 0.0017, 0.0023, 0.0024, 0.0029, 0.0038, 0.0036, + 0.0038, 0.0037, 0.0043, 0.0058, 0.0065, 0.0070, 0.0086, 0.0113, 0.0155, 0.0222, 0.0285, 0.0405, 0.0506, 0.0645, 0.0817, 0.1035, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#blue flower (sinisievikki) +//801 1109 1861 2325 2329 2380 2562 2565 2558 2611 2517 2567 2475 2397 2337 2294 2195 2001 1881 1892 1854 1746 1668 1580 1491 1362 1229 1178 1110 1094 1072 1019 994 960 928 879 836 859 863 951 1046 1102 1154 1193 1174 1166 1153 1199 1275 1316 1376 1550 1739 1918 2104 2228 2364 2377 2423 2394 2334 +const double ColorTemp::ColorBluesinisievikki[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0801, 0.1109, 0.1861, 0.2325, 0.2329, 0.2380, 0.2562, 0.2565, 0.2558, 0.2611, 0.2517, 0.2567, 0.2475, 0.2397, 0.2337, 0.2294, 0.2195, 0.2001, 0.1881, 0.1892, 0.1854, 0.1746, + 0.1668, 0.1580, 0.1491, 0.1362, 0.1229, 0.1178, 0.1110, 0.1094, 0.1072, 0.1019, 0.0994, 0.0960, 0.0928, 0.0879, 0.0836, 0.0859, 0.0863, 0.0951, 0.1046, 0.1102, 0.1154, 0.1193, + 0.1174, 0.1166, 0.1153, 0.1199, 0.1275, 0.1316, 0.1376, 0.1550, 0.1739, 0.1918, 0.2104, 0.2228, 0.2364, 0.2377, 0.2423, 0.2394, 0.2334, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#blue flower (iisoppi) +//623 85 605 833 776 756 755 781 774 775 697 724 697 654 617 575 536 494 460 469 442 436 400 393 380 358 369 352 342 368 357 360 342 342 341 335 355 353 365 376 382 392 412 412 407 414 420 449 487 504 517 571 651 734 806 885 968 1088 1210 1296 1411 +const double ColorTemp::ColorBlueiisoppi[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0623, 0.0085, 0.0605, 0.0833, 0.0776, 0.0756, 0.0755, 0.0781, 0.0774, 0.0775, 0.0697, 0.0724, 0.0697, 0.0654, 0.0617, 0.0575, 0.0536, 0.0494, 0.0460, 0.0469, 0.0442, 0.0436, + 0.0400, 0.0393, 0.0380, 0.0358, 0.0369, 0.0352, 0.0342, 0.0368, 0.0357, 0.0360, 0.0342, 0.0342, 0.0341, 0.0335, 0.0355, 0.0353, 0.0365, 0.0376, 0.0382, 0.0392, 0.0412, 0.0412, + 0.0407, 0.0414, 0.0420, 0.0449, 0.0487, 0.0504, 0.0517, 0.0571, 0.0651, 0.0734, 0.0806, 0.0885, 0.0968, 0.1088, 0.1210, 0.1296, 0.1411, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//#white petal (ojakaersaemoe) +//1732 951 1800 1365 1801 1697 1762 2103 2243 2218 2200 2206 2255 2254 2269 2261 2272 2251 2254 2260 2256 2266 2247 2269 2310 2273 2345 2312 2301 2323 2302 2314 2362 2355 2348 2362 2396 2374 2362 2381 2396 2440 2383 2347 2422 2419 2472 2423 2406 2425 2377 2381 2380 2398 2390 2404 2370 2375 2364 2411 2417 +const double ColorTemp::ColorWhiteojaka[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1732, 0.0951, 0.1800, 0.1365, 0.1801, 0.1697, 0.1762, 0.2103, 0.2243, 0.2218, 0.2200, 0.2206, 0.2255, 0.2254, 0.2269, 0.2261, 0.2272, 0.2251, 0.2254, 0.2260, 0.2256, 0.2266, + 0.2247, 0.2269, 0.2310, 0.2273, 0.2345, 0.2312, 0.2301, 0.2323, 0.2302, 0.2314, 0.2362, 0.2355, 0.2348, 0.2362, 0.2396, 0.2374, 0.2362, 0.2381, 0.2396, 0.2440, 0.2383, 0.2347, + 0.2422, 0.2419, 0.2472, 0.2423, 0.2406, 0.2425, 0.2377, 0.2381, 0.2380, 0.2398, 0.2390, 0.2404, 0.2370, 0.2375, 0.2364, 0.2411, 0.2417, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//#white flower (petunia) +//4095 4022 4410 4095 4095 4095 4193 4207 4388 4328 4223 4168 4221 4304 4245 4210 4212 4192 4181 4233 4207 4224 4197 4262 4243 4241 4274 4257 4204 4285 4265 4241 4267 4275 4245 4276 4260 4217 4217 4244 4240 4186 4160 4156 4227 4286 4237 4137 4202 4187 4100 4112 4103 4090 4125 4115 4098 4036 4047 4105 4050 +const double ColorTemp::ColorWhitepetunia[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4095, 0.4022, 0.4410, 0.4095, 0.4095, 0.4095, 0.4193, 0.4207, 0.4388, 0.4328, 0.4223, 0.4168, 0.4221, 0.4304, 0.4245, 0.4210, 0.4212, 0.4192, 0.4181, 0.4233, 0.4207, 0.4224, + 0.4197, 0.4262, 0.4243, 0.4241, 0.4274, 0.4257, 0.4204, 0.4285, 0.4265, 0.4241, 0.4267, 0.4275, 0.4245, 0.4276, 0.4260, 0.4217, 0.4217, 0.4244, 0.4240, 0.4186, 0.4160, 0.4156, + 0.4227, 0.4286, 0.4237, 0.4137, 0.4202, 0.4187, 0.4100, 0.4112, 0.4103, 0.4090, 0.4125, 0.4115, 0.4098, 0.4036, 0.4047, 0.4105, 0.4050, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//#blue flower (lobelia dortmanna) +//0 660 1277 1544 1612 1961 1909 1950 1901 1907 1809 1785 1685 1622 1522 1377 1178 1054 931 898 850 732 610 508 434 370 343 329 303 265 232 199 183 169 172 177 200 233 214 214 199 186 199 228 249 321 435 684 1006 1345 1703 2082 2432 2661 2843 2936 3079 3015 3003 3045 3038 +//RIS 98 +const double ColorTemp::ColorBluelobelia[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0660, 0.1277, 0.1544, 0.1612, 0.1961, 0.1909, 0.1950, 0.1901, 0.1907, 0.1809, 0.1785, 0.1685, 0.1622, 0.1522, 0.1377, 0.1178, 0.1054, 0.0931, 0.0898, 0.0850, 0.0732, + 0.0610, 0.0508, 0.0434, 0.0370, 0.0343, 0.0329, 0.0303, 0.0265, 0.0232, 0.0199, 0.0183, 0.0169, 0.0172, 0.0177, 0.0200, 0.0233, 0.0214, 0.0214, 0.0199, 0.0186, 0.0199, + 0.0228, 0.0249, 0.0321, 0.0435, 0.0684, 0.1006, 0.1345, 0.1703, 0.2082, 0.2432, 0.2661, 0.2843, 0.2936, 0.3079, 0.3015, 0.3003, 0.3045, 0.3038, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//#white petal (pelargonia) +//3493 2882 2284 2730 2869 2609 2781 2869 2861 2869 2795 2810 2740 2716 2650 2631 2539 2554 2450 2453 2447 2451 2343 2408 2404 2367 2343 2401 2474 2549 2668 2759 2843 2883 2989 3106 3209 3344 3383 3404 3453 3521 3495 3571 3521 3548 3582 3557 3581 3539 3563 3589 3597 3579 3502 3546 3507 3554 3490 3561 3518 +const double ColorTemp::ColorWhitepelargonia[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3493, 0.2882, 0.2284, 0.2730, 0.2869, 0.2609, 0.2781, 0.2869, 0.2861, 0.2869, 0.2795, 0.2810, 0.2740, 0.2716, 0.2650, 0.2631, 0.2539, 0.2554, 0.2450, 0.2453, 0.2447, + 0.2451, 0.2343, 0.2408, 0.2404, 0.2367, 0.2343, 0.2401, 0.2474, 0.2549, 0.2668, 0.2759, 0.2843, 0.2883, 0.2989, 0.3106, 0.3209, 0.3344, 0.3383, 0.3404, 0.3453, 0.3521, + 0.3495, 0.3571, 0.3521, 0.3548, 0.3582, 0.3557, 0.3581, 0.3539, 0.3563, 0.3589, 0.3597, 0.3579, 0.3502, 0.3546, 0.3507, 0.3554, 0.3490, 0.3561, 0.3518, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +/* +#white petal (paeivaenkakkara) +2168 1365 1969 2095 2231 2530 2944 3092 3107 3148 3188 3207 3195 3216 3225 3261 3211 3228 3260 3237 3258 3276 3265 3316 3327 3291 3315 3324 3355 3255 3264 3308 3324 3328 3282 3253 3220 3257 3289 3265 3245 3297 3284 3292 3228 3312 3290 3277 3278 3284 3182 3244 3273 3291 3212 3256 3154 3243 3306 3234 3155 +*/ +const double ColorTemp::ColorWhitepaeivaen[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2168, 0.1365, 0.1969, 0.2095, 0.2231, 0.2530, 0.2944, 0.3092, 0.3107, 0.3148, 0.3188, 0.3207, 0.3195, 0.3216, 0.3225, 0.3261, 0.3211, 0.3228, 0.3260, 0.3237, 0.3258, + 0.3276, 0.3265, 0.3316, 0.3327, 0.3291, 0.3315, 0.3324, 0.3355, 0.3255, 0.3264, 0.3308, 0.3324, 0.3328, 0.3282, 0.3253, 0.3220, 0.3257, 0.3289, 0.3265, 0.3245, 0.3297, + 0.3284, 0.3292, 0.3228, 0.3312, 0.3290, 0.3277, 0.3278, 0.3284, 0.3182, 0.3244, 0.3273, 0.3291, 0.3212, 0.3256, 0.3154, 0.3243, 0.3306, 0.3234, 0.3155, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + //spectral data Colorchecker24 : Green B3 const double ColorTemp::ColorchechGreB3_spect[97] = { @@ -444,6 +1062,21 @@ const double ColorTemp::ColorchechGraC4_67_spect[97] = { 0.369, 0.3689, 0.368, 0.3673, 0.3678, 0.3684, 0.37, 0.3711, 0.3712, 0.3714, 0.3714, 0.3714, 0.371, 0.3707, 0.37, 0.3694, 0.3697, 0.3703, 0.3697, 0.3692, 0.3688, 0.3685, 0.3675, 0.3669, 0.3657, 0.3647, 0.3635, 0.3625, 0.361, 0.3596, 0.3585, 0.3579, 0.357, 0.3560, 0.3555, 0.3548, 0.3535, 0.3526, 0.3513, 0.3500, 0.349, 0.3475, 0.3467, 0.3460, 0.3452, 0.3444, 0.3431, 0.3421, 0.3411, 0.3403, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::Fictif_61greyspect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::JDC468_K15_87greyspect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1984, 0.2223, 0.2448, 0.2934, 0.3415, 0.4425, 0.5707, 0.6609, 0.7619, 0.7956, 0.8275, 0.8280, 0.8292, 0.8223, 0.8156, 0.8112, 0.8076, 0.8040, 0.7982, 0.7970, 0.7954, 0.8013, 0.8083, 0.8141, 0.8184, 0.8167, + 0.8137, 0.8080, 0.8026, 0.8013, 0.7988, 0.7963, 0.7942, 0.7855, 0.7765, 0.7680, 0.7603, 0.7640, 0.7681, 0.7750, 0.7827, 0.7876, 0.7923, 0.7935, 0.7945, 0.7955, 0.7964, 0.7975, 0.7982, 0.8000, 0.8017, 0.8051, + 0.8090, 0.8145, 0.8191, 0.8234, 0.8269, 0.8300, 0.8327, 0.8342, 0.8359, 0.8375, 0.8390, 0.8405, 0.8421, 0.8436, 0.8452, 0.8480, 0.8504, 0.8564, 0.8611, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; +//K15 275 275 0.1984 0.2448 0.3415 0.5707 0.7619 0.8275 0.8292 0.8156 0.8076 0.7982 0.7954 0.8083 0.8184 0.8137 0.8026 0.7988 0.7942 0.7765 0.7603 0.7681 0.7827 0.7923 0.7945 0.7964 0.7982 0.8017 0.8090 0.8191 0.8269 0.8327 0.8359 0.8390 0.8421 0.8452 0.8504 0.8611 //spectral data Colorchecker24 : Skin B1 //use also for palette WB @@ -476,7 +1109,7 @@ const double ColorTemp::ColorchechDCBluN881_m7_m14_spect[97] = { //spectral data ColorcheckerSG : Skin F7 //use also for palette WB const double ColorTemp::ColorchechSGSkiF763_14_26_spect[97] = { - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0508, 0.64, 0.0776, 0.903, 0.1099, 0.1128, 0.1256, 0.128, 0.1307, 0.133, 0.1357, 0.139, 0.1425, 0.148, 0.1523, 0.159, 0.1669, 0.177, 0.1871, 0.20, 0.2118, 0.2235, 0.2355, 0.2445, 0.2537, 0.259, 0.2655, 0.268, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0508, 0.064, 0.0776, 0.903, 0.1099, 0.1128, 0.1256, 0.128, 0.1307, 0.133, 0.1357, 0.139, 0.1425, 0.148, 0.1523, 0.159, 0.1669, 0.177, 0.1871, 0.20, 0.2118, 0.2235, 0.2355, 0.2445, 0.2537, 0.259, 0.2655, 0.268, 0.2700, 0.2708, 0.2716, 0.2743, 0.2770, 0.2803, 0.2827, 0.283, 0.2832, 0.283, 0.2828, 0.295, 0.3079, 0.344, 0.3803, 0.4105, 0.4409, 0.455, 0.4694, 0.477, 0.4851, 0.4896, 0.4962, 0.501, 0.5066, 0.511, 0.5160, 0.521, 0.5256, 0.529, 0.5318, 0.535, 0.5383, 0.541, 0.5451, 0.549, 0.5524, 0.556, 0.5597, 0.562, 0.5650, 0.568, 0.5709, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; @@ -529,15 +1162,156 @@ const double ColorTemp::JDC468_GraK14_44_spect[97] = { 0.1408, 0.14330, 0.1475, 0.15170, 0.1583, 0.16500, 0.172, 0.17940, 0.1836, 0.18780, 0.188, 0.18820, 0.186, 0.18430, 0.1801, 0.17620, 0.1741, 0.17210, 0.179, 0.18420, 0.1991, 0.21430, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::JDC468_BluM5_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1510, 0.1802, 0.2069, 0.2550, 0.3047, 0.4055, 0.5069, 0.590, 0.6747, 0.701, 0.7351, 0.7345, 0.7338, 0.7195, 0.7063, 0.693, 0.6732, 0.6490, 0.6261, 0.5993, 0.5723, 0.5560, + 0.5401, 0.526, 0.5106, 0.4805, 0.4504, 0.42, 0.3907, 0.385, 0.3799, 0.3750, 0.3695, 0.3340, 0.3005, 0.2692, 0.2382, 0.2387, 0.2389, 0.2501, 0.2610, 0.2635, 0.2662, 0.2601, 0.2541, + 0.2450, 0.2426, 0.2430, 0.2434, 0.2490, 0.2523, 0.2612, 0.2692, 0.2694, 0.2996, 0.3145, 0.3329, 0.3413, 0.3498, 0.3467, 0.3442, 0.3355, 0.3266, 0.3131, 0.2996, 0.2911, 0.2831, 0.2950, 0.3070, 0.3430, 0.3799, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//m5 317 //0.1510 0.2069 0.3047 0.5069 0.6747 0.7351 0.7338 0.7063 0.6732 0.6261 0.5723 0.5401 +// 0.5106 0.4504 0.3907 0.3799 0.3695 0.3005 0.2382 0.2389 0.2610 0.2662 0.2541 +// 0.2426 0.2434 0.2523 0.2692 0.2996 0.3329 0.3498 0.3442 0.3266 0.2996 0.2831 0.3070 0.3799 + +const double ColorTemp::JDC468_RedG21va_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1207, 0.141, 0.1585, 0.1810, 0.2073, 0.2529, 0.2959, 0.3210, 0.3476, 0.3350, 0.3232, 0.2845, 0.2564, 0.2140, 0.1823, 0.1523, 0.1266, 0.1001, 0.0792, 0.061, 0.0439, 0.0349, 0.0295, 0.0260, 0.0222, + 0.0180, 0.0135, 0.0111, 0.0087, 0.0090, 0.0094, 0.0101, 0.0109, 0.0093, 0.0086, 0.0090, 0.0091, 0.0061, 0.0321, 0.0086, 0.1368, 0.2312, 0.3256, 0.4112, 0.4958, 0.5444, 0.5884, 0.6002, 0.6264, 0.6323, 0.6473, + 0.6546, 0.6659, 0.6775, 0.6881, 0.6982, 0.7081, 0.7150, 0.7201, 0.7217, 0.7232, 0.7222, 0.7215, 0.7187, 0.7157, 0.7144, 0.7131, 0.7196, 0.7269, 0.7303, 0.7599, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//g21 177 0.1207 0.1585 0.2073 0.2959 0.3476 0.3232 0.2564 0.1823 0.1266 0.0792 0.0439 0.0295 0.0222 0.0135 0.0087 0.0094 0.0109 0.0086 0.0091 0.0321 +// 0.1368 0.3256 0.4958 0.5884 0.6264 0.6473 0.6659 0.6881 0.7081 0.7201 0.7232 0.7215 0.7157 0.7131 0.7269 0.7599 +const double ColorTemp::JDC468_RedI9_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0258, 0.023, 0.0220, 0.0205, 0.0189, 0.0183, 0.0174, 0.0168, 0.0162, 0.0152, 0.0148, 0.0145, 0.0139, 0.0136, 0.0133, 0.0130, 0.0127, 0.0130, 0.0133, 0.0151, 0.0168, 0.0218, 0.0268, 0.0317, 0.0367, 0.0330, + 0.0313, 0.0270, 0.0227, 0.0240, 0.0255, 0.0280, 0.0302, 0.0280, 0.0225, 0.0215, 0.0209, 0.0424, 0.0639, 0.1401, 0.2131, 0.3250, 0.4369, 0.5210, 0.6265, 0.6795, 0.7336, 0.7551, 0.7784, 0.7890, 0.7994, 0.8070, + 0.8146, 0.8210, 0.8277, 0.8321, 0.8362, 0.8398, 0.8439, 0.8470, 0.8504, 0.8530, 0.8572, 0.8612, 0.8653, 0.8689, 0.8715, 0.8730, 0.8747, 0.8766, 0.8788, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//I9 RED 217 0.0258 0.0220 0.0189 0.0174 0.0162 0.0148 0.0139 0.0133 0.0127 0.0133 0.0168 0.0268 0.0367 0.0313 0.0227 0.0255 0.0302 0.0225 0.0209 0.0639 0.2131 0.4369 0.6265 0.7336 0.7784 0.7994 0.8146 0.8277 0.8362 0.8439 0.8504 0.8572 0.8653 0.8715 0.8747 0.8788 + +const double ColorTemp::JDC468_YelN10_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0531, 0.0520, 0.0504, 0.0510, 0.0518, 0.0608, 0.0628, 0.0669, 0.0699, 0.0705, 0.0716, 0.0720, 0.0735, 0.0755, 0.0775, 0.0800, 0.0825, 0.0896, 0.0969, 0.1260, 0.1563, 0.2312, 0.3096, 0.4132, 0.5177, 0.5905, 0.6637, + 0.7251, 0.7350, 0.7458, 0.7480, 0.7507, 0.7460, 0.7414, 0.7356, 0.7301, 0.7320, 0.7347, 0.7390, 0.7438, 0.7472, 0.7500, 0.7508, 0.7515, 0.7528, 0.7538, 0.7550, 0.7563, 0.7581, 0.7607, 0.7642, 0.7686, 0.7710, + 0.7791, 0.7840, 0.7872, 0.7902, 0.7935, 0.7955, 0.7979, 0.7995, 0.8021, 0.8035, 0.8058, 0.8072, 0.8090, 0.8110, 0.8143, 0.8198, 0.8259, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//n10 348 0.0531 0.0504 0.0518 0.0628 0.0699 0.0716 0.0735 0.0775 0.0825 0.0969 0.1563 0.3096 0.5177 0.6637 0.7251 0.7458 0.7507 0.7414 0.7301 0.7347 0.7438 0.7500 0.7515 0.7538 0.7563 0.7607 0.7686 0.7791 0.7872 0.7935 0.7979 0.8021 0.8058 0.8090 0.8143 0.8259 +const double ColorTemp::JDC468_GreN7_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0112, 0.0102, 0.0094, 0.0096, 0.0099, 0.0100, 0.0100, 0.0100, 0.0100, 0.0099, 0.0099, 0.0099, 0.0099, 0.0099, 0.0099, 0.0100, 0.0100, 0.0103, 0.0107, 0.0129, 0.0151, 0.0312, 0.0462, 0.1015, 0.1571, 0.2270, 0.2977, + 0.3558, 0.3441, 0.3321, 0.3020, 0.2710, 0.2312, 0.1954, 0.1602, 0.1251, 0.1003, 0.0794, 0.0672, 0.0563, 0.0513, 0.0452, 0.0418, 0.0378, 0.0356, 0.0337, 0.0336, 0.0335, 0.0345, 0.0358, 0.0383, 0.0405, 0.0445, 0.0497, + 0.0612, 0.0647, 0.0670, 0.0660, 0.0644, 0.0620, 0.0574, 0.0525, 0.0483, 0.0460, 0.0436, 0.0484, 0.0532, 0.0690, 0.0870, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//n7 345 0.0112 0.0094 0.0099 0.0100 0.0100 0.0099 0.0099 0.0099 0.0100 0.0107 0.0151 0.0462 0.1571 0.2977 0.3558 0.3321 0.2710 0.1954 0.1251 0.0794 0.0563 0.0452 0.0378 0.0337 0.0335 0.0358 0.0405 0.0497 0.0612 0.0670 0.0644 0.0574 0.0483 0.0436 0.0532 0.0870 + +const double ColorTemp::JDC468_GreA10_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0958, 0.1010, 0.1090, 0.1172, 0.1352, 0.1954, 0.1957, 0.2178, 0.2402, 0.2477, 0.2553, 0.2594, 0.2622, 0.2667, 0.2707, 0.2760, 0.2805, 0.2913, 0.3023, 0.3376, 0.3715, 0.4345, 0.5030, 0.5702, 0.6376, 0.6724, 0.7072, + 0.7216, 0.7160, 0.7110, 0.6990, 0.6865, 0.6667, 0.6446, 0.6174, 0.5921, 0.5727, 0.5511, 0.5386, 0.5238, 0.5134, 0.5070, 0.4980, 0.4918, 0.4867, 0.4830, 0.4834, 0.4838, 0.4889, 0.4906, 0.4976, 0.5046, 0.5162, 0.5279, + 0.5519, 0.5589, 0.5649, 0.5645, 0.5639, 0.5576, 0.5552, 0.5480, 0.5407, 0.5377, 0.5326, 0.5387, 0.5498, 0.5732, 0.5966, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::JDC468_GreQ7_spect[97] = { //468 Q7 + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0149, 0.0139, 0.0133, 0.0128, 0.0123, 0.01185, 0.0114, 0.011, 0.0106, 0.01045, 0.0103, 0.0104, 0.0105, 0.01065, 0.0108, 0.0109, 0.0110, 0.0117, 0.0124, 0.0205, 0.0283, 0.071, 0.1122, 0.2051, + 0.3017, 0.385, 0.4690, 0.4880, 0.5069, 0.4811, 0.4561, 0.411, 0.3687, 0.3185, 0.2673, 0.2190, 0.1703, 0.1371, 0.1042, 0.086, 0.0695, 0.598, 0.0527, 0.0475, 0.04210, 0.039, 0.03600, 0.0357, 0.0355, 0.037, + 0.0381, 0.0405, 0.0438, 0.0499, 0.0555, 0.0635, 0.0708, 0.074, 0.0789, 0.077, 0.0751, 0.071, 0.0658, 0.059, 0.0530, 0.049, 0.0458, 0.052, 0.0570, 0.077, 0.0982, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//a10 Green 10 0.0958 0.1090 0.1352 0.1957 0.2402 0.2553 0.2622 0.2707 0.2805 0.3023 0.3715 0.5030 0.6376 0.7072 0.7216 0.7110 0.6865 0.6446 0.5921 0.5511 0.5238 0.5070 0.4918 0.4830 0.4838 0.4906 0.5046 0.5279 0.5519 0.5649 0.5639 0.5552 0.5407 0.5326 0.5498 0.5966 +const double ColorTemp::JDC468_GreK7_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0114, 0.0111, 0.0109, 0.0107, 0.0105, 0.0106, 0.0108, 0.0107, 0.0106, 0.0105, 0.0104, 0.0103, 0.0103, 0.0106, 0.0109, 0.0112, 0.0118, 0.0135, 0.0153, 0.0244, 0.0334, 0.0666, 0.0984, 0.1534, 0.2082, 0.2412, 0.2835, + 0.2959, 0.2843, 0.2735, 0.2516, 0.2305, 0.2012, 0.1728, 0.1435, 0.1156, 0.0964, 0.0772, 0.0671, 0.0570, 0.0518, 0.0468, 0.0436, 0.0397, 0.0380, 0.0354, 0.0354, 0.0355, 0.0367, 0.0380, 0.0402, 0.0426, 0.0481, 0.0523, + 0.0643, 0.0678, 0.0704, 0.0693, 0.0676, 0.0639, 0.0609, 0.0567, 0.0514, 0.0487, 0.0468, 0.0518, 0.0567, 0.0730, 0.0902, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//k7 Green 267 0.0114 0.0109 0.0105 0.0108 0.0106 0.0104 0.0103 0.0109 0.0118 0.0153 0.0334 0.0984 0.2082 0.2835 0.2959 0.2735 0.2305 0.1728 0.1156 0.0772 0.0570 0.0468 0.0397 0.0354 0.0355 0.0380 0.0426 0.0523 0.0643 0.0704 0.0676 0.0609 0.0514 0.0468 0.0567 0.0902 + +const double ColorTemp::JDC468_PurE24_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0677, 0.901, 0.1043, 0.1298, 0.1534, 0.1913, 0.2297, 0.2553, 0.2756, 0.2789, 0.2620, 0.2380, 0.2135, 0.1837, 0.1536, 0.1312, 0.1068, 0.0867, 0.0663, 0.0517, 0.0368, 0.0309, 0.0247, 0.0214, 0.0186, 0.0151, 0.0116, + 0.0077, 0.0079, 0.0079, 0.0083, 0.0086, 0.0077, 0.0071, 0.0071, 0.0072, 0.0107, 0.0147, 0.0298, 0.0440, 0.0661, 0.0880, 0.1010, 0.1152, 0.1193, 0.1236, 0.1260, 0.1287, 0.1326, 0.1366, 0.1428, 0.1489, 0.1596, 0.1697, + 0.1936, 0.1996, 0.2057, 0.2036, 0.2015, 0.1954, 0.1890, 0.1798, 0.1706, 0.1651, 0.1603, 0.1692, 0.1788, 0.2075, 0.2363, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//E24 Pur 128 0.0677 0.1043 0.1534 0.2297 0.2756 0.2620 0.2135 0.1536 0.1068 0.0663 0.0368 0.0247 0.0186 0.0116 0.0077 0.0079 0.0086 0.0071 0.0072 0.0147 0.0440 0.0880 0.1152 0.1236 0.1287 0.1366 0.1489 0.1697 0.1936 0.2057 0.2015 0.1890 0.1706 0.1603 0.1788 0.2363 + //spectral data 468 color : Blue H10 - Gamut > WidegamutRGB const double ColorTemp::JDC468_BluH10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.01590, 0.028, 0.03970, 0.0697, 0.09970, 0.1526, 0.20550, 0.253, 0.30110, 0.3412, 0.38180, 0.423, 0.46610, 0.4683, 0.51030, 0.4999, 0.49950, 0.4785, 0.45810, 0.429, 0.39950, 0.374, 0.35010, 0.3135, 0.29630, + 0.01590, 0.028, 0.03970, 0.0697, 0.09970, 0.1526, 0.20550, 0.253, 0.30110, 0.3412, 0.38180, 0.423, 0.46610, 0.4683, 0.51030, 0.5005, 0.49950, 0.4785, 0.45810, 0.429, 0.39950, 0.374, 0.35010, 0.3135, 0.29630, 0.2587, 0.22070, 0.182, 0.14450, 0.1125, 0.09060, 0.072, 0.04810, 0.033, 0.01740, 0.0113, 0.00520, 0.004, 0.00290, 0.0028, 0.00270, 0.0027, 0.00270, 0.0027, 0.00280, 0.0027, 0.00270, 0.0028, 0.00280, - 0.0029, 0.00300, 0.0029, 0.00290, 0.0029, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.0031, 0.00320, 0.0035, 0.00380, 0.047, 0.00560, + 0.0029, 0.00300, 0.0029, 0.00290, 0.0029, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.0031, 0.00320, 0.0035, 0.00380, 0.0047, 0.00560, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +//0.0159, 0.028, 0.0397, 0.0697, 0.0997, 0.1526, 0.2055, 0.253, 0.3011, 0.3412, 0.3818, 0.423, 0.4661, 0.5103 0.4995 0.4581 0.3995 0.3501 0.2963 +//0.2207 0.1445 0.0906 0.0481 0.0174 0.0052 0.0029 0.0027 0.0027 0.0028 0.0027 0.0028 0.0030 0.0029 0.0029 0.0029 0.0029 0.0029 0.0029 +//0.0029 0.0032 0.0038 0.0056 + +const double ColorTemp::JDC468_BluD6_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1127, 0.143, 0.1773, 0.223, 0.2813, 0.3987, 0.4782, 0.5665, 0.6470, 0.6870, 0.7270, 0.7403, 0.7593, 0.7592, 0.7591, 0.7480, 0.7402, 0.7234, 0.7054, 0.6876, 0.6617, 0.6512, 0.6302, 0.6124, 0.5962, 0.5660, + 0.5352, 0.5009, 0.4655, 0.4356, 0.4191, 0.3923, 0.3619, 0.3145, 0.2653, 0.2245, 0.1744, 0.1499, 0.1255, 0.1124, 0.1014, 0.0972, 0.0855, 0.0786, 0.0715, 0.0659, 0.0626, 0.0625, 0.0624, 0.0645, 0.0670, 0.0714, + 0.0769, 0.0865, 0.0964, 0.1086, 0.1200, 0.123, 0.1327, 0.1309, 0.1281, 0.1214, 0.1146, 0.1023, 0.0950, 0.0901, 0.0839, 0.0918, 0.1009, 0.1260, 0.1597, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + + +}; +//d6 blue 84 0.1127 0.1773 0.2813 0.4782 0.6470 0.7270 0.7593 0.7591 0.7402 0.7054 0.6617 0.6302 0.5962 0.5352 0.4655 0.4191 0.3619 0.2653 0.1744 0.1255 0.1014 0.0855 0.0715 0.0626 0.0624 0.0670 0.0769 0.0964 0.1200 0.1327 0.1281 0.1146 0.0950 0.0839 0.1009 0.1597 +const double ColorTemp::JDC468_BluF4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0180, 0.0270, 0.0324, 0.0453, 0.0611, 0.0845, 0.1066, 0.1234, 0.1446, 0.1567, 0.1718, 0.1867, 0.1954, 0.2024, 0.2083, 0.2090, 0.2096, 0.2060, 0.2036, 0.1990, 0.1947, 0.1920, 0.1901, 0.1856, 0.1794, 0.1667, 0.1516, 0.1321, + 0.1167, 0.1032, 0.0876, 0.0730, 0.0584, 0.0445, 0.0296, 0.0212, 0.0125, 0.0099, 0.0069, 0.0060, 0.0053, 0.0050, 0.0049, 0.0047, 0.0046, 0.0045, 0.0044, 0.0043, 0.0043, 0.0043, 0.0043, 0.0046, 0.0049, 0.0050, 0.0052, 0.0057, + 0.0063, 0.0066, 0.0069, 0.0067, 0.0066, 0.0063, 0.0059, 0.0056, 0.0053, 0.0054, 0.0055, 0.0062, 0.0069, 0.0099, 0.0122, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; + +// f4 blue 134 0.0180 0.0324 0.0611 0.1066 0.1446 0.1718 0.1954 0.2083 0.2096 0.2036 0.1947 0.1901 0.1794 0.1516 0.1167 0.0876 0.0584 0.0296 0.0125 0.0069 0.0053 0.0049 0.0046 0.0044 0.0043 0.0043 0.0049 0.0052 0.0063 0.0069 0.0066 0.0059 0.0053 0.0055 0.0069 0.0122 +const double ColorTemp::JDC468_GreI8_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0230, 0.0232, 0.0234, 0.0254, 0.0263, 0.0298, 0.0329, 0.0367, 0.0377, 0.0388, 0.0399, 0.0410, 0.0421, 0.0440, 0.0460, 0.0481, 0.0496, 0.0523, 0.0559, 0.0645, 0.0727, 0.0878, 0.1020, 0.1156, 0.1288, 0.1334, 0.1394, 0.1398, + 0.1402, 0.1407, 0.1413, 0.1409, 0.1396, 0.1334, 0.1276, 0.1200, 0.1129, 0.1095, 0.1064, 0.1053, 0.1043, 0.1031, 0.1021, 0.1001, 0.0980, 0.0970, 0.0952, 0.0963, 0.0967, 0.0990, 0.1009, 0.1042, 0.1078, 0.1130, 0.1188, 0.1251, + 0.1307, 0.1335, 0.1374, 0.1376, 0.1378, 0.1362, 0.1345, 0.1312, 0.1278, 0.1257, 0.1240, 0.1290, 0.1345, 0.1476, 0.1615, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; + +// i8 green215 215 0.0230 0.0234 0.0263 0.0329 0.0377 0.0399 0.0421 0.0460 0.0496 0.0559 0.0727 0.1020 0.1288 0.1394 0.1402 0.1413 0.1396 0.1276 0.1129 0.1064 0.1043 0.1021 0.0980 0.0952 0.0967 0.1009 0.1078 0.1188 0.1307 0.1374 0.1378 0.1345 0.1278 0.1240 0.1345 0.1615 + +const double ColorTemp::JDC468_OraO18_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0826, 0.0830, 0.0832, 0.0861, 0.0892, 0.0993, 0.1108, 0.1180, 0.1248, 0.1253, 0.1263, 0.1261, 0.1259, 0.1267, 0.1289, 0.1304, 0.1319, 0.1370, 0.1419, 0.1631, 0.1851, 0.2311, 0.2743, 0.3131, 0.3536, 0.3551, 0.3585, 0.3488, 0.3322, + 0.3470, 0.3575, 0.3680, 0.3498, 0.3316, 0.3224, 0.3129, 0.3578, 0.4013, 0.4734, 0.5454, 0.5978, 0.6502, 0.6745, 0.6982, 0.7080, 0.7182, 0.7273, 0.7269, 0.7308, 0.7342, 0.7393, 0.7436, 0.7498, 0.7550, 0.7597, 0.7640, 0.7680, 0.7713, + 0.7766, 0.7786, 0.7816, 0.7841, 0.7863, 0.7889, 0.7902, 0.7931, 0.7957, 0.7997, 0.8068, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; +// o18 ora 382 382 0.0826 0.0832 0.0892 0.1108 0.1248 0.1263 0.1259 0.1289 0.1319 0.1419 0.1851 0.2743 0.3536 0.3585 0.3322 0.3470 0.3680 0.3316 0.3129 0.4013 0.5454 0.6502 0.6982 0.7182 0.7269 0.7342 0.7436 0.7550 0.7640 0.7713 0.7766 0.7816 0.7863 0.7902 0.7957 0.8068 +const double ColorTemp::JDC468_OraD17_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0462, 0.0442, 0.0422, 0.0401, 0.0383, 0.0390, 0.0396, 0.0396, 0.0395, 0.0388, 0.0380, 0.0378, 0.0376, 0.0381, 0.0384, 0.0391, 0.0399, 0.0421, 0.0451, 0.0561, 0.0676, 0.0934, 0.1189, 0.1432, 0.1671, 0.1650, 0.1632, 0.1512, 0.1402, 0.1456, + 0.1521, 0.1613, 0.1696, 0.1552, 0.1409, 0.1342, 0.1283, 0.1689, 0.2084, 0.2845, 0.3575, 0.4183, 0.4797, 0.5090, 0.5389, 0.5498, 0.5617, 0.5667, 0.5728, 0.5788, 0.5822, 0.5889, 0.5938, 0.6011, 0.6081, 0.6145, 0.6212, 0.6267, 0.6304, 0.6331, + 0.6352, 0.6361, 0.6373, 0.6372, 0.6370, 0.6376, 0.6384, 0.6413, 0.6483, 0.6523, 0.6668, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; + +// d17 ora 95 95 0.0462 0.0422 0.0383 0.0396 0.0395 0.0380 0.0376 0.0384 0.0399 0.0451 0.0676 0.1189 0.1671 0.1632 0.1402 0.1521 0.1696 0.1409 0.1283 0.2084 0.3575 0.4797 0.5389 0.5617 0.5728 0.5822 0.5938 0.6081 0.6212 0.6304 0.6352 0.6373 0.6370 0.6384 0.6483 0.6668 //spectral data ColorLab : Skin 35 15 17 const double ColorTemp::ColabSkin35_15_17_spect[97] = { @@ -825,6 +1599,817 @@ const double ColorTemp::ColabSky42_0_m24_spect[97] = { 0.0979, 0.112, 0.1269, 0.134, 0.1430, 0.147, 0.1497, 0.151, 0.1529, 0.1545, 0.1561, 0.158, 0.1603, 0.1616, 0.1627, 0.1625, 0.1623, 0.1614, 0.1605, 0.159, 0.1575, 0.1567, 0.1557, 0.1563, 0.1569, 0.159, 0.1627, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +//spectral data ColorLab : blue 77 -44 -50 + +const double ColorTemp::Colorblue_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0316, 0.0480, 0.0658, 0.0925, 0.1199, 0.1812, 0.2424, 0.2770, 0.3145, 0.3430, 0.3702, 0.4022, 0.4346, 0.4560, 0.4778, 0.4843, 0.4902, 0.4940, 0.4960, 0.4920, 0.4889, 0.4820, + 0.4764, 0.4685, 0.4606, 0.4486, 0.4379, 0.4160, 0.3955, 0.3640, 0.3330, 0.2990, 0.2660, 0.2291, 0.1991, 0.1705, 0.1403, 0.1220, 0.1067, 0.0967, 0.0907, 0.0846, 0.0785, 0.0698, + 0.0601, 0.0525, 0.0455, 0.0423, 0.0386, 0.0370, 0.0358, 0.0354, 0.0351, 0.0368, 0.0382, 0.0413, 0.0449, 0.0474, 0.0492, 0.0484, 0.0477, 0.0460, 0.0437, 0.0402, 0.0371, 0.0349, + 0.0329, 0.0341, 0.0356, 0.0410, 0.0462, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + +}; +//0.1571 0.2150 0.3040 0.3684 0.3952 0.3965 0.3782 0.3418 0.2995 0.2543 0.2043 0.1686 0.1420 0.1070 0.0785 0.0725 0.0755 0.0695 0.0680 0.0914 0.1379 0.1833 0.2038 0.2065 0.2079 0.2110 0.2176 0.2319 0.2518 0.2632 0.2616 0.2522 0.2380 0.2290 0.2432 0.2901 + +const double ColorTemp::ColorViolA1_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1571, 0.185, 0.2150, 0.255, 0.3040, 0.332, 0.3684, 0.381, 0.3952, 0.3956, 0.3965, 0.387, 0.3782, 0.362, 0.3418, 0.322, 0.2995, 0.275, 0.2543, 0.229, 0.2043, 0.185, 0.1686, + 0.155, 0.1420, 0.131, 0.1070, 0.093, 0.0785, 0.075, 0.0725, 0.074, 0.0755, 0.072, 0.0695, 0.069, 0.0680, 0.083, 0.0914, 0.115, 0.1379, 0.162, 0.1833, 0.193, 0.2038, 0.205, + 0.2065, 0.207, 0.2079, 0.209, 0.2110, 0.214, 0.2176, 0.226, 0.2319, 0.242, 0.2518, 0.258, 0.2632, 0.263, 0.2616, 0.256, 0.2522, 0.246, 0.2380, 0.233, 0.2290, 0.235, 0.2432, 0.265, 0.2901, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//0.2270 0.2413 0.3287 0.4079 0.4469 0.4594 0.4535 0.4268 0.3886 0.3427 0.2866 0.2433 0.2087 0.1604 0.1181 0.1069 0.1098 0.0985 0.0916 0.1130 0.1496 0.1746 0.1783 0.1742 0.1738 0.1763 0.1831 0.1975 0.2169 0.2274 0.2247 0.2140 0.1990 0.1897 0.2039 0.2508 + +const double ColorTemp::ColorViolA4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2270, 0231, 0.2413, 0.286, 0.3287, 0.367, 0.4079, 0.427, 0.4469, 0.452, 0.4594, 0.456, 0.4535, 0.432, 0.4268, 0.403, 0.3886, 0.368, 0.3427, 0.314, 0.2866, 0.265, 0.2433, 0.222, + 0.2087, 0.183, 0.1604, 0.130, 0.1181, 0.112, 0.1069, 0.108, 0.1098, 0.103, 0.0985, 0.094, 0.0916, 0.104, 0.1130, 0.131, 0.1496, 0.152, 0.1746, 0.176, 0.1783, 0.176, 0.1742, 0.174, + 0.1738, 0.175, 0.1763, 0.181, 0.1831, 0.192, 0.1975, 0.206, 0.2169, 0.222, 0.2274, 0.226, 0.2247, 0.219, 0.2140, 0.206, 0.1990, 0.195, 0.1897, 0.196, 0.2039, 0.221, 0.2508, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//0.1426 0.2660 0.3556 0.4259 0.4459 0.4317 0.3942 0.3425 0.2917 0.2413 0.1885 0.1524 0.1267 0.0948 0.0700 0.0661 0.0708 0.0671 0.0699 0.1092 0.2099 0.3582 0.4857 0.5583 0.5950 0.6146 0.6307 0.6495 0.6720 0.6825 0.6809 0.6718 0.6593 0.6517 0.6649 0.7066 +const double ColorTemp::ColorViolA6_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1426, 0.203, 0.2660, 0.315, 0.3556, 0.392, 0.4259, 0.435, 0.4459, 0.437, 0.4317, 0.417, 0.3942, 0.365, 0.3425, 0.317, 0.2917, 0.266, 0.2413, 0.218, 0.1885, 0.172, 0.1524, 0.141, + 0.1267, 0.112, 0.0948, 0.083, 0.0700, 0.068, 0.0661, 0.068, 0.0708, 0.069, 0.0671, 0.068, 0.0699, 0.900, 0.1092, 0.159, 0.2099, 0.284, 0.3582, 0.441, 0.4857, 0.525, 0.5583, 0.567, + 0.5950, 0.605, 0.6146, 0.623, 0.6307, 0.638, 0.6495, 0.661, 0.6720, 0.679, 0.6825, 0.681, 0.6809, 0.675, 0.6718, 0.667, 0.6593, 0.655, 0.6517, 0.658, 0.6649, 0.681, 0.7066, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//0.4939 0.3859 0.4198 0.4780 0.5328 0.5672 0.5880 0.5994 0.6029 0.5981 0.5808 0.5618 0.5369 0.4819 0.4190 0.3921 0.3815 0.3400 0.2991 0.2977 0.3090 0.3088 0.2930 0.2753 0.2660 0.2636 0.2678 0.2811 0.2995 0.3125 0.3153 0.3111 0.3006 0.2952 0.3116 0.3584 +const double ColorTemp::ColorBlueSkyK3_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4939, 0.435, 0.3859, 0.403, 0.4198, 0.446, 0.4780, 0.505, 0.5328, 0.552, 0.5672, 0.578, 0.5880, 0.595, 0.5994, 0.602, 0.6029, 0.600, 0.5981, 0.588, 0.5808, 0.571, 0.5618, 0.551, + 0.5369, 0.503, 0.4819, 0.452, 0.4190, 0.404, 0.3921, 0.386, 0.3815, 0.364, 0.3400, 0.321, 0.2991, 0.298, 0.2977, 0.304, 0.3090, 0.309, 0.3088, 0.302, 0.2930, 0.284, 0.2753, 0.271, + 0.2660, 0.265, 0.2636, 0.266, 0.2678, 0.275, 0.2811, 0.290, 0.2995, 0.306, 0.3125, 0.314, 0.3153, 0.313, 0.3111, 0.307, 0.3006, 0.298, .2952, 0.306, 0.3116, 0.325, 0.3584, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//0.4058 0.4734 0.5372 0.6051 0.6698 0.6992 0.7118 0.7135 0.7071 0.6938 0.6702 0.6511 0.6282 0.5732 0.5103 0.4913 0.4926 0.4604 0.4341 0.4648 0.5111 0.5335 0.5283 0.5154 0.5098 0.5093 0.5151 0.5309 0.5520 0.5642 0.5657 0.5598 0.5489 0.5430 0.5601 0.6067 + +const double ColorTemp::ColorBlueSkyK9_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4058, 0.441, 0.4734, 0.502, 0.5372, 0.585, 0.6051, 0.643, 0.6698, 0.685, 0.6992, 0.705, 0.7118, 0.712, 0.7135, 0.711, 0.7071, 0.702, 0.6938, 0.681, 0.6702, 0.663, 0.6511, 0.642, + 0.6282, 0.604, 0.5732, 0.542, 0.5103, 0.499, 0.4913, 0.492, 0.4926, 0.475, 0.4604, 0.452, 0.4341, 0.453, 0.4648, 0.496, 0.5111, 0.525, 0.5335, 0.531, 0.5283, 0.522, 0.5154, 0.512, + 0.5098, 0.509, 0.5093, 0.513, 0.5151, 0.523, 0.5309, 0.544, 0.5520, 0.562, 0.5642, 0.565, 0.5657, 0.562, 0.5598, 0.554, 0.5489, 0.546, 0.5430, 0.553, 0.5601, 0.576, 0.6067, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//42 C4 0.3280 0.2611 0.3781 0.4646 0.5292 0.5732 0.6112 0.6307 0.6310 0.6181 0.5847 0.5488 0.5066 0.4358 0.3585 0.3151 0.2855 0.2309 0.1786 0.1546 0.1443 0.1359 0.1245 0.1151 0.1120 0.1127 0.1169 0.1275 0.1421 0.1504 0.1488 0.1416 0.1303 0.1241 0.1355 0.1739 +const double ColorTemp::ColorBlueSkyC4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3280, 0.2950, 0.2611, 0.304, 0.3781, 0.423, 0.4646, 0.498, 0.5292, 0.555, 0.5732, 0.591, 0.6112, 0.6221, 0.6307, 0.631, 0.6310, 0.625, 0.6181, 0.607, 0.5847, 0.563, 0.5488, 0.524, + 0.5066, 0.465, 0.4358, 0.398, 0.3585, 0.336, 0.3151, 0.302, 0.2855, 0.254, 0.2309, 0.203, 0.1786, 0.166, 0.1546, 0.149, 0.1443, 0.143, 0.1359, 0.131, 0.1245, 0.123, 0.115, 0.114, + 0.1120, 0.112, 0.1127, 0.114, 0.1169, 0.122, 0.1275, 0.133, 0.1421, 0.147, 0.1504, 0.149, 0.1488, 0.145, 0.1416, 0.136, 0.1303, 0.127, 0.1241, 0.132, 0.1355, 0.155, 0.1739, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//52 C14 0.5697 0.4660 0.5000 0.5560 0.6072 0.6402 0.6632 0.6850 0.7069 0.7292 0.7488 0.7678 0.7786 0.7721 0.7544 0.7394 0.7232 0.6889 0.6446 0.6171 0.5966 0.5743 0.5425 0.5093 0.4884 0.4784 0.4774 0.4822 0.4944 0.5076 0.5186 0.5268 0.5303 0.5332 0.5454 0.5760 +const double ColorTemp::ColorBlueSkyC14_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5697, 0.511, 0.4660, 0.481, 0.5000, 0.528, 0.5560, 0.583, 0.6072, 0.622, 0.6402, 0.653, 0.6632, 0.674, 0.6850, 0.699, 0.7069, 0.717, 0.7292, 0.735, 0.7488, 0.757, 0.7678, 0.773, + 0.7786, 0.776, 0.7721, 0.765, 0.7544, 0.746, 0.7394, 0.731, 0.7232, 0.704, 0.6889, 0.674, 0.6446, 0.631, 0.6171, 0.606, 0.5966, 0.585, 0.5743, 0.5570, 0.5425, 0.529, 0.5093, 0.498, + 0.4884, 0.482, 0.4784, 0.478, 0.4774, 0.481, 0.4822, 0.487, 0.4944, 0.503, 0.5076, 0.512, 0.5186, 0.522, 0.5268, 0.529, 0.5303, 0.532, 0.5332, 0.539, 0.5454, 0.565, 0.5760, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//80 E4 0.1483 0.1756 0.2536 0.3084 0.3665 0.4189 0.4746 0.5127 0.5239 0.5193 0.4917 0.4569 0.4123 0.3422 0.2672 0.2179 0.1820 0.1356 0.0972 0.0784 0.0698 0.0646 0.0592 0.0556 0.0546 0.0551 0.0571 0.0611 0.0670 0.0701 0.0692 0.0661 0.0620 0.0606 0.0663 0.0834 +const double ColorTemp::ColorBlueSkyE4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1483, 0.161, 0.1756, 0.213, 0.2536, 0.283, 0.3084, 0.331, 0.3665, 0.387, 0.4189, 0.445, 0.4746, 0.496, 0.5127, 0.519, 0.5239, 0.522, 0.5193, 0.508, 0.4917, 0.476, 0.4569, 0.431, + 0.4123, 0.375, 0.3422, 0.309, 0.2672, 0.242, 0.2179, 0.208, 0.1820, 0.162, 0.1356, 0.113, 0.0972, 0.091, 0.0784, 0.073, 0.0698, 0.066, 0.0646, 0.062, 0.0592, 0.057, 0.0556, 0.055, + 0.0546, 0.055, 0.0551, 0.056, 0.0571, 0.059, 0.0611, 0.064, 0.0670, 0.069, 0.0701, 0.070, 0.0692, 0.067, 0.0661, 0.065, 0.0620, 0.061, 0.0606, 0.063, 0.0663, 0.072, 0.0834, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//229 M1 0.3100 0.2922 0.3514 0.4042 0.4443 0.4769 0.5002 0.5133 0.5187 0.5179 0.5057 0.4928 0.4729 0.4235 0.3643 0.3371 0.3234 0.2827 0.2418 0.2338 0.2370 0.2329 0.2184 0.2028 0.1958 0.1937 0.1973 0.2084 0.2244 0.2351 0.2372 0.2331 0.2239 0.2178 0.2319 0.2731 +const double ColorTemp::ColorBlueSkyM1_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3100, 0.303, 0.2922, 0.322, 0.3514, 0.376, 0.4042, 0.424, 0.4443, 0.457, 0.4769, 0.497, 0.5002, 0.507, 0.5133, 0.516, 0.5187, 0.518, 0.5179, 0.511, 0.5057, 0.497, 0.4928, 0.483, + 0.4729, 0.454, 0.4235, 0.398, 0.3643, 0.346, 0.3371, 0.329, 0.3234, 0.301, 0.2827, 0.263, 0.2418, 0.235, 0.2338, 0.235, 0.2370, 0.236, 0.2329, 0.226, 0.2184, 0.213, 0.2028, 0.198, + 0.1958, 0.194, 0.1937, 0.196, 0.1973, 0.203, 0.2084, 0.212, 0.2244, 0.233, 0.2351, 0.236, 0.2372, 0.234, 0.2331, 0.229, 0.2239, 0.222, 0.2178, 0.224, 0.2319, 0.251, 0.2731, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//514 2B1 0.5277 0.4431 0.4972 0.5820 0.6387 0.6750 0.7001 0.7140 0.7202 0.7193 0.7053 0.6891 0.6657 0.6181 0.5614 0.5312 0.5101 0.4589 0.4045 0.3857 0.3826 0.3751 0.3574 0.3393 0.3314 0.3304 0.3368 0.3523 0.3742 0.3874 0.3883 0.3818 0.3693 0.3616 0.3800 0.4324 +const double ColorTemp::ColorBlueSky2B1_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5277, 0.485, 0.4431, 0.476, 0.4972, 0.539, 0.5820, 0.607, 0.6387, 0.653, 0.6750, 0.691, 0.7001, 0.707, 0.7140, 0.718, 0.7202, 0.720, 0.7193, 0.713, 0.7053, 0.695, 0.6891, 0.674, + 0.6657, 0.632, 0.6181, 0.587, 0.5614, 0.543, 0.5312, 0.521, 0.5101, 0.483, 0.4589, 0.431, 0.4045, 0.398, 0.3857, 0.385, 0.3826, 0.376, 0.3751, 0.364, 0.3574, 0.346, 0.3393, 0.335, + 0.3314, 0.331, 0.3304, 0.333, 0.3368, 0.346, 0.3523, 0.363, 0.3742, 0.382, 0.3874, 0.385, 0.3883, 0.384, 0.3818, 0.375, 0.3693, 0.364, 0.3616, 0.374, 0.3800, 0.396, 0.4324, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//368 T7 0.1943 0.3199 0.4536 0.5443 0.6043 0.6499 0.6839 0.7125 0.7329 0.7482 0.7527 0.7514 0.7383 0.7028 0.6526 0.6034 0.5500 0.4708 0.3848 0.3268 0.2929 0.2712 0.2493 0.2316 0.2243 0.2234 0.2288 0.2436 0.2640 0.2762 0.2767 0.2693 0.2566 0.2489 0.2665 0.3165 +const double ColorTemp::ColorBlueSkyT7_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1943, 0.256, 0.3199, 0.376, 0.4536, 0.494, 0.5443, 0.572, 0.6043, 0.631, 0.6499, 0.664, 0.6839, 0.698, 0.7125, 0.726, 0.7329, 0.741, 0.7482, 0.751, 0.7527, 0.752, 0.7514, 0.745, + 0.7383, 0.721, 0.7028, 0.675, 0.6526, 0.631, 0.6034, 0.589, 0.5500, 0.512, 0.4708, 0.432, 0.3848, 0.342, 0.3268, 0.311, 0.2929, 0.282, 0.2712, 0.261, 0.2493, 0.236, 0.2316, 0.227, + 0.2243, 0.223, 0.2234, 0.229, 0.2288, 0.235, 0.2436, 0.255, 0.2640, 0.268, 0.2762, 0.277, 0.2767, 0.272, 0.2693, 0.263, 0.2566, 0.254, 0.2489, 0.255, 0.2665, 0.275, 0.3165, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//399 U19 0.5829 0.4865 0.4927 0.5690 0.6221 0.6532 0.6728 0.6832 0.6889 0.6884 0.6771 0.6648 0.6465 0.6038 0.5524 0.5297 0.5194 0.4797 0.4387 0.4356 0.4455 0.4444 0.4282 0.4094 0.4009 0.3992 0.4046 0.4185 0.4385 0.4515 0.4545 0.4505 0.4411 0.4368 0.4539 0.5013 +const double ColorTemp::ColorBlueSkyU19_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5829, 0.534, 0.4865, 0.489, 0.4927, 0.532, 0.5690, 0.593, 0.6221, 0.641, 0.6532, 0.662, 0.6728, 0.674, 0.6832, 0.687, 0.6889, 0.688, 0.6884, 0.683, 0.6771, 0.671, 0.6648, 0.665, + 0.6465, 0.622, 0.6038, 0.583, 0.5524, 0.542, 0.5297, 0.523, 0.5194, 0.492, 0.4797, 0.451, 0.4387, 0.436, 0.4356, 0.442, 0.4455, 0.445, 0.4444, 0.432, 0.4282, 0.413, 0.4094, 0.404, + 0.4009, 0.400, 0.3992, 0.402, 0.4046, 0.411, 0.4185, 0.426, 0.4385, 0.446, 0.4515, 0.452, 0.4545, 0.452, 0.4505, 0.446, 0.4411, 0.438, 0.4368, 0.443, 0.4539, 0.467, 0.5013, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//382 U2 0.3594 0.3425 0.3214 0.3654 0.4097 0.4360 0.4590 0.4793 0.5002 0.5234 0.5476 0.5745 0.5940 0.5901 0.5703 0.5545 0.5384 0.5029 0.4592 0.4334 0.4149 0.3947 0.3657 0.3363 0.3177 0.3087 0.3077 0.3123 0.3231 0.3351 0.3454 0.3520 0.3545 0.3562 0.3674 0.3976 +const double ColorTemp::ColorBlueSkyU2_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3594, 0.345, 0.3425, 0.333, 0.3214, 0.346, 0.3654, 0.387, 0.4097, 0.424, 0.4360, 0.446, 0.4590, 0.467, 0.4793, 0.494, 0.5002, 0.517, 0.5234, 0.538, 0.5476, 0.564, 0.5745, 0.583, + 0.5940, 0.593, 0.5901, 0.580, 0.5703, 0.563, 0.5545, 0.546, 0.5384, 0.521, 0.5029, 0.478, 0.4592, 0.444, 0.4334, 0.421, 0.4149, 0.408, 0.3947, 0.378, 0.3657, 0.352, 0.3363, 0.324, + 0.3177, 0.313, 0.3087, 0.308, 0.3077, 0.310, 0.3123, 0.317, 0.3231, 0.329, 0.3351, 0.339, 0.3454, 0.348, 0.3520, 0.353, 0.3545, 0.355, 0.3562, 0.359, 0.3674, 0.375, 0.3976, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//378 T17 0.4213 0.3332 0.4205 0.5078 0.5650 0.6025 0.6223 0.6279 0.6195 0.5981 0.5578 0.5197 0.4785 0.4074 0.3325 0.3030 0.2918 0.2511 0.2125 0.2105 0.2198 0.2199 0.2083 0.1945 0.1895 0.1898 0.1954 0.2094 0.2288 0.2406 0.2399 0.2317 0.2189 0.2108 0.2261 0.2755 +const double ColorTemp::ColorBlueSkyT17_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4213, 0.376, 0.3332, 0.387, 0.4205, 0.467, 0.5078, 0.532, 0.5650, 0.587, 0.6025, 0.611, 0.6223, 0.624, 0.6279, 0.623, 0.6195, 0.607, 0.5981, 0.576, 0.5578, 0.534, 0.5197, 0.499, + 0.4785, 0.435, 0.4074, 0.376, 0.3325, 0.317, 0.3030, 0.295, 0.2918, 0.272, 0.2511, 0.235, 0.2125, 0.212, 0.2105, 0.214, 0.2198, 0.219, 0.2199, 0.215, 0.2083, 0.202, 0.1945, 0.191, + 0.1895, 0.189, 0.1898, 0.193, 0.1954, 0.202, 0.2094, 0.215, 0.2288, 0.236, 0.2406, 0.240, 0.2399, 0.236, 0.2317, 0.225, 0.2189, 0.214, 0.2108, 0.218, 0.2261, 0.245, 0.2755, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//236 M8 -0.0593 0.0128 0.0031 0.0149 0.0197 0.0221 0.0223 0.0230 0.0232 0.0237 0.0243 0.0247 0.0249 0.0249 0.0248 0.0247 0.0244 0.0240 0.0240 0.0242 0.0244 0.0247 0.0252 0.0254 0.0262 0.0269 0.0271 0.0273 0.0278 0.0280 0.0276 0.0275 0.0282 0.0288 0.0295 0.0303 +const double ColorTemp::ColorBlackM8_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0593, 0.040, 0.0128, 0.023, 0.0031, 0.024, 0.0149, 0.017, 0.0197, 0.021, 0.0221, 0.022, 0.0223, 0.023, 0.0230, 0.023, 0.0232, 0.023, 0.0237, 0.024, 0.0243, 0.024, 0.0247, 0.024, + 0.0249, 0.025, 0.0249, 0.025, 0.0248, 0.025, 0.0247, 0.024, 0.0244, 0.024, 0.0240, 0.024, 0.0240, 0.024, 0.0242, 0.024, 0.0244, 0.024, 0.0247, 0.025, 0.0252, 0.025, 0.0254, 0.026, + 0.0262, 0.027, 0.0269, 0.027, 0.0271, 0.027, 0.0273, 0.027, 0.0278, 0.028, 0.0280, 0.028, 0.0276, 0.028, 0.0275, 0.028, 0.0282, 0.028, 0.0288, 0.029, 0.0295, 0.030, 0.0303, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//240 M12 -0.0377 0.0146 0.0167 0.0222 0.0257 0.0261 0.0270 0.0271 0.0274 0.0281 0.0287 0.0299 0.0306 0.0304 0.0297 0.0285 0.0277 0.0267 0.0257 0.0257 0.0258 0.0259 0.0263 0.0276 0.0279 0.0288 0.0297 0.0302 0.0304 0.0303 0.0302 0.0303 0.0310 0.0321 0.0337 0.0356 +const double ColorTemp::ColorBlackM12_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0377, 0.022, 0.0146, 0.015, 0.0167, 0.020, 0.0222, 0.023, 0.0257, 0.026, 0.0261, 0.027, 0.0270, 0.027, 0.0271, 0.027, 0.0274, 0.028, 0.0281, 0.028, 0.0287, 0.029, 0.0299, 0.030, + 0.0306, 0.030, 0.0304, 0.030, 0.0297, 0.029, 0.0285, 0.028, 0.0277, 0.027, 0.0267, 0.026, 0.0257, 0.026, 0.0257, 0.026, 0.0258, 0.026, 0.0259, 0.026, 0.0263, 0.027, 0.0276, 0.028, + 0.0279, 0.028, 0.0288, 0.029, 0.0297, 0.030, 0.0302, 0.030, 0.0304, 0.030, 0.0303, 0.030, 0.0302, 0.030, 0.0303, 0.031, 0.0310, 0.031, 0.0321, 0.033, 0.0337, 0.035, 0.0356, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//241 M13 0.2961 0.0487 0.0261 0.0330 0.0296 0.0305 0.0305 0.0314 0.0320 0.0322 0.0335 0.0348 0.0352 0.0347 0.0336 0.0325 0.0314 0.0299 0.0284 0.0284 0.0286 0.0288 0.0290 0.0299 0.0306 0.0314 0.0320 0.0328 0.0332 0.0331 0.0330 0.0328 0.0337 0.0350 0.0366 0.0385 +const double ColorTemp::ColorBlackM13_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2961, 0.100, 0.0487, 0.035, 0.0261, 0.030, 0.0330, 0.031, 0.0296, 0.030, 0.0305, 0.030, 0.0305, 0.031, 0.0314, 0.032, 0.0320, 0.032, 0.0322, 0.033, 0.0335, 0.034, 0.0348, 0.035, + 0.0352, 0.035, 0.0347, 0.034, 0.0336, 0.033, 0.0325, 0.032, 0.0314, 0.030, 0.0299, 0.029, 0.0284, 0.028, 0.0284, 0.029, 0.0286, 0.029, 0.0288, 0.029, 0.0290, 0.030, 0.0299, 0.030, + 0.0306, 0.031, 0.0314, 0.032, 0.0320, 0.032, 0.0328, 0.033, 0.0332, 0.033, 0.0331, 0.033, 0.0330, 0.033, 0.0328, 0.033, 0.0337, 0.034, 0.0350, 0.036, 0.0366, 0.037, 0.0385, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//525 2B12 0.3848 0.4127 0.4780 0.5375 0.5917 0.6194 0.6353 0.6485 0.6625 0.6784 0.7010 0.7367 0.7706 0.7847 0.7843 0.7826 0.7799 0.7689 0.7521 0.7463 0.7401 0.7314 0.7168 0.7008 0.6904 0.6860 0.6861 0.6896 0.6986 0.7064 0.7138 0.7185 0.7233 0.7281 0.7338 0.7498 +const double ColorTemp::ColorWhite2B12_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3848, 0.405, 0.4127, 0.435, 0.4780, 0.501, 0.5375, 0.572, 0.5917, 0.606, 0.6194, 0.627, 0.6353, 0.642, 0.6485, 0.653, 0.6625, 0.669, 0.6784, 0.692, 0.7010, 0.072, 0.7367, 0.0760, + 0.7706, 0.775, 0.7847, 0.784, 0.7843, 0.784, 0.7826, 0.781, 0.7799, 0.775, 0.7689, 0.762, 0.7521, 0.748, 0.7463, 0.743, 0.7401, 0.731, 0.7314, 0.723, 0.7168, 0.705, 0.7008, 0.701, + 0.6904, 0.689, 0.6860, 0.686, 0.6861, 0.687, 0.6896, 0.691, 0.6986, 0.701, 0.7064, 0.711, 0.7138, 0.715, 0.7185, 0.721, 0.7233, 0.725, 0.7281, 0.731, 0.7338, 0.741, 0.7498, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//527 2B14 0.6608 0.5900 0.6114 0.6747 0.7329 0.7599 0.7706 0.7776 0.7831 0.7890 0.7952 0.8074 0.8185 0.8214 0.8201 0.8218 0.8244 0.8229 0.8192 0.8281 0.8344 0.8388 0.8415 0.8445 0.8495 0.8521 0.8556 0.8604 0.8666 0.8687 0.8687 0.8672 0.8682 0.8703 0.8720 0.8803 +const double ColorTemp::ColorWhite2B14_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.6608, 0.631, 0.5900, 0.605, 0.6114, 0.634, 0.6747, 0.698, 0.7329, 0.745, 0.7599, 0.765, 0.7706, 0.775, 0.7776, 0.781, 0.7831, 0.786, 0.7890, 0.792, 0.7952, 0.797, 0.8074, 0.810, + 0.8185, 0.821, 0.8214, 0.821, 0.8201, 0.821, 0.8218, 0.822, 0.8244, 0.823, 0.8229, 0.822, 0.8192, 0.824, 0.8281, 0.831, 0.8344, 0.836, 0.8388, 0.840, 0.8415, 0.843, 0.8445, 0.847, + 0.8495, 0.851, 0.8521, 0.853, 0.8556, 0.858, 0.8604, 0.863, 0.8666, 0.867, 0.8687, 0.869, 0.8687, 0.867, 0.8672, 0.868, 0.8682, 0.870, 0.8703, 0.871, 0.8720, 0.874, 0.8803, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//97 97 0.0031 0.0047 0.0056 0.0064 0.0070 0.0070 0.0071 0.0066 0.0065 0.0065 0.0064 0.0063 0.0063 0.0058 0.0052 0.0052 0.0053 0.0047 0.0044 0.0052 0.0066 0.0077 0.0081 0.0082 0.0084 0.0089 0.0096 0.0106 0.0121 0.0127 0.0128 0.0124 0.0115 0.0117 0.0133 0.0169 +const double ColorTemp::JDC468_Blackred97_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0031, 0.0035, 0.0047, 0.0050, 0.0056, 0.0060, 0.0064, 0.0065, 0.0070, 0.007, 0.0070, 0.007, 0.0071, 0.007, 0.0066, 0.007, 0.0065, 0.006, 0.0065, 0.006, 0.0064, 0.006, 0.0063, + 0.006, 0.0063, 0.006, 0.0058, 0.005, 0.0052, 0.005, 0.0052, 0.005, 0.0053, 0.005, 0.0047, 0.005, 0.0044, 0.005, 0.0052, 0.006, 0.0066, 0.007, 0.0077, 0.008, 0.0081, 0.008, 0.008, + 0.008, 0.0084, 0.009, 0.0089, 0.009, 0.0096, 0.01, 0.0106, 0.011, 0.0121, 0.012, 0.0127, 0.012, 0.0128, 0.012, 0.0124, 0.012, 0.0115, 0.012, 0.0117, 0.013, 0.0133, 0.015, 0.0169, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//443 443 0.0067 0.0068 0.0067 0.0074 0.0083 0.0088 0.0092 0.0093 0.0098 0.0099 0.0101 0.0106 0.0109 0.0104 0.0094 0.0086 0.0075 0.0058 0.0044 0.0039 0.0037 0.0038 0.0036 0.0035 0.0036 0.0033 0.0033 0.0036 0.0038 0.0042 0.0041 0.0036 0.0033 0.0035 0.0042 0.0062 +const double ColorTemp::JDC468_Blackredbl443_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0067, 0.0067, 0.0068, 0.0068, 0.0067, 0.0070, 0.0074, 0.008, 0.0083, 0.0085, 0.0088, 0.009, 0.0092, 0.0092, 0.0093, 0.0096, 0.0098, 0.0098, 0.0099, 0.01, 0.0101, 0.0104, 0.0106, + 0.0106, 0.0109, 0.0105, 0.0104, 0.01, 0.0094, 0.09, 0.0086, 0.08, 0.0075, 0.06, 0.0058, 0.05, 0.0044, 0.04, 0.0039, 0.0038, 0.0037, 0.0037, 0.0038, 0.0037, 0.0036, 0.0036, + 0.0035, 0.0036, 0.0036, 0.0034, 0.0033, 0.0033, 0.0033, 0.0035, 0.0036, 0.0037, 0.0038, 0.004, 0.0042, 0.004, 0.0041, 0.004, 0.0036, 0.0034, 0.0033, 0.0034, 0.0035, 0.004, 0.0042, 0.005, 0.0062, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//27 27 0.0060 0.0064 0.0070 0.0076 0.0086 0.0086 0.0088 0.0089 0.0089 0.0083 0.0079 0.0078 0.0077 0.0067 0.0059 0.0057 0.0056 0.0046 0.0041 0.0045 0.0050 0.0056 0.0054 0.0053 0.0054 0.0055 0.0057 0.0065 0.0073 0.0079 0.0080 0.0075 0.0067 0.0068 0.0081 0.0114 +const double ColorTemp::JDC468_Blackbl27_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0060, 0.0062, 0.0064, 0.0066, 0.0070, 0.0073, 0.0076, 0.008, 0.0086, 0.0086, 0.0086, 0.0087, 0.0088, 0.0088, 0.0089, 0.0089, 0.0089, 0.0085, 0.0083, 0.008, 0.0079, 0.0078, 0.0078, + 0.0078, 0.0077, 0.007, 0.0067, 0.006, 0.0059, 0.0057, 0.0057, 0.0057, 0.0056, 0.005, 0.0046, 0.0045, 0.0041, 0.0043, 0.0045, 0.0047, 0.0050, 0.0053, 0.0056, 0.0055, 0.0054, 0.0055, + 0.0053, 0.0053, 0.0054, 0.0054, 0.0055, 0.0056, 0.0057, 0.006, 0.0065, 0.007, 0.0073, 0.0075, 0.0079, 0.008, 0.0080, 0.008, 0.0075, 0.007, 0.0067, 0.0067, 0.0068, 0.007, 0.0081, 0.01, 0.0114, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//28 28 0.0092 0.0118 0.0155 0.0218 0.0267 0.0296 0.0312 0.0306 0.0282 0.0244 0.0205 0.0186 0.0167 0.0126 0.0091 0.0080 0.0071 0.0050 0.0042 0.0042 0.0044 0.0045 0.0045 0.0042 0.0041 0.0039 0.0040 0.0043 0.0048 0.0050 0.0047 0.0042 0.0041 0.0042 0.0049 0.0074 +const double ColorTemp::JDC468_Blackbl28_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0092, 0.01, 0.0118, 0.012, 0.0155, 0.016, 0.0218, 0.025, 0.0267, 0.028, 0.0296, 0.03, 0.0312, 0.031, 0.0306, 0.03, 0.0282, 0.026, 0.0244, 0.022, 0.0205, 0.02, 0.0186, 0.017, 0.0167, + 0.015, 0.0126, 0.01, 0.0091, 0.0085, 0.0080, 0.0075, 0.0071, 0.006, 0.0050, 0.05, 0.0042, 0.0042, 0.0042, 0.0043, 0.0044, 0.0044, 0.0045, 0.0045, 0.0045, 0.0043, 0.0042, 0.0042, + 0.0041, 0.004, 0.0039, 0.004, 0.0040, 0.004, 0.0043, 0.0044, 0.0048, 0.005, 0.0050, 0.0048, 0.0047, 0.0045, 0.0042, 0.0041, 0.0041, 0.0041, 0.0042, 0.0045, 0.0049, 0.006, 0.0074, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//214 214 0.0072 0.0062 0.0061 0.0064 0.0069 0.0071 0.0075 0.0081 0.0082 0.0088 0.0103 0.0126 0.0145 0.0146 0.0140 0.0133 0.0118 0.0094 0.0070 0.0059 0.0051 0.0046 0.0045 0.0043 0.0045 0.0045 0.0048 0.0056 0.0065 0.0072 0.0067 0.0065 0.0057 0.0058 0.0068 0.0103 +const double ColorTemp::JDC468_Blackgr214_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0072, 0.007, 0.0062, 0.0062, 0.0061, 0.0063, 0.0064, 0.0067, 0.0069, 0.007, 0.0071, 0.0072, 0.0075, 0.008, 0.0081, 0.008, 0.0082, 0.0085, 0.0088, 0.009, 0.0103, 0.011, 0.0126, + 0.012, 0.0145, 0.0145, 0.0146, 0.014, 0.0140, 0.014, 0.0133, 0.012, 0.0118, 0.01, 0.0094, 0.008, 0.0070, 0.006, 0.0059, 0.0055, 0.0051, 0.005, 0.0046, 0.0045, 0.0045, 0.0044, + 0.0043, 0.0044, 0.0045, 0.0045, 0.0045, 0.0046, 0.0048, 0.005, 0.0056, 0.006, 0.0065, 0.007, 0.0072, 0.007, 0.0067, 0.0066, 0.0065, 0.006, 0.0057, 0.0056, 0.0058, 0.006, 0.0068, 0.008, 0.0103, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//436 436 0.0095 0.0123 0.0173 0.0242 0.0293 0.0317 0.0310 0.0283 0.0246 0.0197 0.0152 0.0129 0.0112 0.0083 0.0063 0.0059 0.0056 0.0045 0.0043 0.0050 0.0059 0.0064 0.0062 0.0060 0.0060 0.0062 0.0066 0.0075 0.0086 0.0093 0.0089 0.0082 0.0073 0.0072 0.0088 0.0139 +const double ColorTemp::JDC468_Blackbl436_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0095, 0.01, 0.0123, 0.013, 0.0173, 0.02, 0.0242, 0.026, 0.0293, 0.03, 0.0317, 0.031, 0.0310, 0.03, 0.0283, 0.025, 0.0246, 0.02, 0.0197, 0.018, 0.0152, 0.014, 0.0129, 0.012, + 0.0112, 0.01, 0.0083, 0.007, 0.0063, 0.006, 0.0059, 0.0058, 0.0056, 0.005, 0.0045, 0.0045, 0.0043, 0.005, 0.0050, 0.0055, 0.0059, 0.006, 0.0064, 0.0063, 0.0062, 0.006, 0.0060, + 0.006, 0.0060, 0.006, 0.0062, 0.0064, 0.0066, 0.007, 0.0075, 0.008, 0.0086, 0.009, 0.0093, 0.009, 0.0089, 0.0086, 0.0082, 0.008, 0.0073, 0.0072, 0.0072, 0.008, 0.0088, 0.01, 0.0139, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//455 455 0.1560 0.1943 0.2724 0.4469 0.5896 0.6393 0.6390 0.6239 0.6096 0.5895 0.5698 0.5662 0.5603 0.5304 0.4977 0.4975 0.4998 0.4601 0.4261 0.4520 0.4986 0.5237 0.5270 0.5260 0.5297 0.5375 0.5504 0.5711 0.5910 0.6023 0.6029 0.5977 0.5880 0.5830 0.5978 0.6345 +const double ColorTemp::JDC468_Whitebl455_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1560, 0.18, 0.1943, 0.25, 0.2724, 0.40, 0.4469, 0.50, 0.5896, 0.60, 0.6393, 0.639, 0.6390, 0.625, 0.6239, 0.61, 0.6096, 0.60, 0.5895, 0.57, 0.5698, 0.567, 0.5662, 0.56, + 0.5603, 0.55, 0.5304, 0.51, 0.4977, 0.498, 0.4975, 0.498, 0.4998, 0.47, 0.4601, 0.44, 0.4261, 0.43, 0.4520, 0.47, 0.4986, 0.51, 0.5237, 0.525, 0.5270, 0.526, 0.5260, 0.528, + 0.5297, 0.53, 0.5375, 0.54, 0.5504, 0.56, 0.5711, 0.58, 0.5910, 0.595, 0.6023, 0.602, 0.6029, 0.600, 0.5977, 0.59, 0.5880, 0.585, 0.5830, 0.59, 0.5978, 0.61, 0.6345, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//101 101 0.0076 0.0094 0.0116 0.0139 0.0158 0.0158 0.0152 0.0142 0.0130 0.0111 0.0094 0.0090 0.0085 0.0069 0.0058 0.0057 0.0058 0.0048 0.0044 0.0060 0.0094 0.0126 0.0141 0.0141 0.0148 0.0157 0.0172 0.0197 0.0227 0.0245 0.0242 0.0233 0.0215 0.0205 0.0240 0.0321 +const double ColorTemp::JDC468_Blackvio101_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0076, 0.008, 0.0094, 0.01, 0.0116, 0.012, 0.0139, 0.015, 0.0158, 0.0158, 0.0158, 0.0156, 0.0152, 0.015, 0.0142, 0.014, 0.0130, 0.012, 0.0111, 0.01, 0.0094, 0.009, 0.0090, 0.009, + 0.0085, 0.008, 0.0069, 0.006, 0.0058, 0.0057, 0.0057, 0.0058, 0.0058, 0.005, 0.0048, 0.0045, 0.0044, 0.005, 0.0060, 0.008, 0.0094, 0.011, 0.0126, 0.013, 0.0141, 0.014, 0.0141, 0.0145, 0.0148, 0.015, 0.0157, 0.016, 0.0172, 0.018, 0.0197, 0.021, 0.0227, 0.023, 0.0245, 0.0241, + 0.0242, 0.0235, 0.0233, 0.022, 0.0215, 0.021, 0.0205, 0.022, 0.0240, 0.026, 0.0321, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//92 92 0.1652 0.2036 0.2848 0.4708 0.6230 0.6758 0.6761 0.6619 0.6502 0.6343 0.6195 0.6194 0.6169 0.5939 0.5677 0.5678 0.5695 0.5373 0.5105 0.5356 0.5778 0.6020 0.6073 0.6090 0.6124 0.6187 0.6295 0.6456 0.6603 0.6693 0.6716 0.6704 0.6660 0.6640 0.6749 0.7003 +const double ColorTemp::JDC468_Whitebl92_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1652, 0.19, 0.2036, 0.24, 0.2848, 0.35, 0.4708, 0.55, 0.6230, 0.65, 0.6758, 0.6759, 0.6761, 0.665, 0.6619, 0.655, 0.6502, 0.64, 0.6343, 0.62, 0.6195, 0.6194, 0.6194, 0.618, + 0.6169, 0.605, 0.5939, 0.58, 0.5677, 0.5677, 0.5678, 0.568, 0.5695, 0.555, 0.5373, 0.52, 0.5105, 0.52, 0.5356, 0.55, 0.5778, 0.60, 0.6020, 0.605, 0.6073, 0.608, 0.6090, 0.61, + 0.6124, 0.615, 0.6187, 0.62, 0.6295, 0.64, 0.6456, 0.65, 0.6603, 0.665, 0.6693, 0.67, 0.6716, 0.671, 0.6704, 0.669, 0.6660, 0.665, 0.6640, 0.67, 0.6749, 0.69, 0.7003, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//94 94 0.0506 0.0569 0.0678 0.0906 0.1088 0.1160 0.1184 0.1195 0.1203 0.1215 0.1293 0.1474 0.1609 0.1538 0.1415 0.1466 0.1535 0.1364 0.1248 0.1494 0.1871 0.2098 0.2163 0.2179 0.2217 0.2282 0.2372 0.2500 0.2631 0.2713 0.2739 0.2725 0.2678 0.2660 0.2770 0.3025 +const double ColorTemp::JDC468_Greyredbl94_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0506, 0.053, 0.0569, 0.06, 0.0678, 0.08, 0.0906, 0.1, 0.1088, 0.11, 0.1160, 0.117, 0.1184, 0.119, 0.1195, 0.12, 0.1203, 0.1205, 0.1215, 0.125, 0.1293, 0.133, 0.1474, 0.15, + 0.1609, 0.155, 0.1538, 0.145, 0.1415, 0.143, 0.1466, 0.15, 0.1535, 0.14, 0.1364, 0.13, 0.1248, 0.14, 0.1494, 0.17, 0.1871, 0.200, 0.2098, 0.21, 0.2163, 0.217, 0.2179, 0.22, + 0.2217, 0.222, 0.2282, 0.23, 0.2372, 0.24, 0.2500, 0.256, 0.2631, 0.27, 0.2713, 0.272, 0.2739, 0.273, 0.2725, 0.27, 0.2678, 0.267, 0.2660, 0.272, 0.2770, 0.28, 0.3025, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + + +//32 32 0.0933 0.1333 0.1967 0.3132 0.4096 0.4556 0.4763 0.4845 0.4870 0.4852 0.4868 0.4959 0.4971 0.4755 0.4407 0.4085 0.3643 0.2922 0.2161 0.1658 0.1370 0.1190 0.1040 0.0947 0.0949 0.1001 0.1106 0.1306 0.1536 0.1652 0.1609 0.1480 0.1291 0.1188 0.1370 0.1933 +const double ColorTemp::JDC468_Blue32_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0933, 0.11, 0.1333, 0.17, 0.1967, 0.265, 0.3132, 0.35, 0.4096, 0.43, 0.4556, 0.465, 0.4763, 0.48, 0.4845, 0.486, .4870, 0.486, 0.4852, 0.486, 0.4868, 0.49, 0.4959, 0.496, + 0.4971, 0.48, 0.4755, 0.46, 0.4407, 0.42, 0.4085, 0.38, 0.3643, 0.32, 0.2922, 0.25, 0.2161, 0.19, 0.1658, 0.15, 0.1370, 0.12, 0.1190, 0.11, 0.1040, 0.10, 0.0947, 0.0948, + 0.0949, 0.097, 0.1001, 0.105, 0.1106, 0.12, 0.1306, 0.14, 0.1536, 0.16, 0.1652, 0.162, 0.1609, 0.154, 0.1480, 0.135, 0.1291, 0.12, 0.1188, 0.125, 0.1370, 0.16, 0.1933, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//236 236 0.0165 0.0259 0.0432 0.0684 0.0858 0.0895 0.0828 0.0683 0.0527 0.0365 0.0235 0.0177 0.0143 0.0096 0.0067 0.0063 0.0060 0.0052 0.0053 0.0061 0.0074 0.0083 0.0085 0.0080 0.0078 0.0076 0.0081 0.0095 0.0112 0.0121 0.0114 0.0100 0.0086 0.0083 0.0102 0.0180 +const double ColorTemp::JDC468_Blue236_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0165, 0.021, 0.0259, 0.035, 0.0432, 0.05, 0.0684, 0.075, 0.0858, 0.087, 0.0895, 0.085, 0.0828, 0.075, 0.0683, 0.058, 0.0527, 0.045, 0.0365, 0.031, 0.0235, 0.021, 0.0177, 0.016, + 0.0143, 0.012, 0.0096, 0.0085, 0.0067, 0.0065, 0.0063, 0.0062, 0.0060, 0.006, 0.0052, 0.0052, 0.0053, 0.006, 0.0061, 0.007, 0.0074, 0.008, 0.0083, 0.0084, 0.0085, 0.0083, + 0.0080, 0.008, 0.0078, 0.0077, 0.0076, 0.008, 0.0081, 0.009, 0.0095, 0.01, 0.0112, 0.012, 0.0121, 0.012, 0.0114, 0.011, 0.0100, 0.009, 0.0086, 0.0085, 0.0083, 0.009, 0.0102, 0.0015, 0.0180, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//300 300 0.0079 0.0085 0.0087 0.0092 0.0094 0.0093 0.0093 0.0095 0.0097 0.0110 0.0158 0.0544 0.1907 0.3753 0.4883 0.5181 0.5044 0.4631 0.4070 0.3594 0.3262 0.3054 0.2873 0.2772 0.2790 0.2875 0.3029 0.3292 0.3571 0.3719 0.3693 0.3573 0.3371 0.3253 0.3471 0.4087 +const double ColorTemp::JDC468_Gre300_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0079, 0.008, 0.0085, 0.0086, 0.0087, 0.009, 0.0092, 0.0093, 0.0094, 0.0094, 0.0093, 0.0093, 0.0093, 0.0094, 0.0095, 0.0096, 0.0097, 0.01, 0.0110, 0.012, 0.0158, 0.045, + 0.0544, 0.134, 0.1907, 0.25, 0.3753, 0.435, 0.4883, 0.505, 0.5181, 0.512, 0.5044, 0.485, 0.4631, 0.433, 0.4070, 0.387, 0.3594, 0.334, 0.3262, 0.31, 0.3054, 0.295, 0.2873, 0.292, + 0.2772, 0.278, 0.2790, 0.281, 0.2875, 0.291, 0.3029, 0.3121, 0.3292, 0.333, 0.3571, 0.365, 0.3719, 0.365, 0.3693, 0.362, 0.3573, 0.342, 0.3371, 0.325, 0.3253, 0.336, 0.3471, 0.367, 0.4087, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//340 340 0.0175 0.0320 0.0587 0.0989 0.1267 0.1322 0.1210 0.0978 0.0732 0.0487 0.0297 0.0212 0.0167 0.0106 0.0069 0.0064 0.0062 0.0051 0.0052 0.0061 0.0073 0.0081 0.0080 0.0076 0.0075 0.0072 0.0077 0.0088 0.0105 0.0112 0.0104 0.0092 0.0079 0.0075 0.0092 0.0167 +const double ColorTemp::JDC468_Blue340_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0175, 0.02, 0.0320, 0.04, 0.0587, 0.08, 0.0989, 0.11, 0.1267, 0.13, 0.1322, 0.125, 0.1210, 0.111, 0.0978, 0.08, 0.0732, 0.06, 0.0487, 0.04, 0.0297, 0.025, 0.0212, 0.02, + 0.0167, 0.012, 0.0106, 0.008, 0.0069, 0.0065, 0.0064, 0.0063, 0.0062, 0.0055, 0.0051, 0.0051, 0.0052, 0.006, 0.0061, 0.007, 0.0073, 0.008, 0.0081, 0.008, 0.0080, 0.0078, + 0.0076, 0.0076, 0.0075, 0.0074, 0.0072, 0.0075, 0.0077, 0.008, 0.0088, 0.0092, 0.0105, 0.011, 0.0112, 0.0108, 0.0104, 0.01, 0.0092, 0.008, 0.0079, 0.0075, 0.0075, 0.008, + 0.0092, 0.01, 0.0167, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//110 110 0.0954 0.1234 0.1702 0.2631 0.3363 0.3664 0.3799 0.3905 0.4002 0.4160 0.4582 0.5262 0.5798 0.5915 0.5742 0.5465 0.5035 0.4364 0.3581 0.2977 0.2589 0.2349 0.2152 0.2030 0.2032 0.2106 0.2249 0.2511 0.2799 0.2951 0.2915 0.2776 0.2552 0.2419 0.2638 0.3287 +const double ColorTemp::JDC468_Gree110_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0954, 0.11, 0.1234, 0.15, 0.1702, 0.22, 0.2631, 0.312, 0.3363, 0.352, 0.3664, 0.372, 0.3799, 0.385, 0.3905, 0.395, 0.4002, 0.41, 0.4160, 0.43, 0.4582, 0.511, 0.5262, 0.544, + 0.5798, 0.585, 0.5915, 0.585, 0.5742, 0.563, 0.5465, 0.523, 0.5035, 0.465, 0.4364, 0.389, 0.3581, 0.3334, 0.2977, 0.275, 0.2589, 0.245, 0.2349, 0.223, 0.2152, 0.211, 0.2030, 0.204, + 0.2032, 0.206, 0.2106, 0.221, 0.2249, 0.243, 0.2511, 0.271, 0.2799, 0.286, 0.2951, 0.294, 0.2915, 0.2876, 0.2776, 0.2657, 0.2552, 0.2456, 0.2419, 0.253, 0.2638, 0.275, 0.3287, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//457 457 0.0127 0.0126 0.0112 0.0110 0.0109 0.0106 0.0105 0.0104 0.0110 0.0136 0.0318 0.1246 0.3262 0.5051 0.5566 0.5181 0.4406 0.3429 0.2411 0.1647 0.1202 0.0968 0.0804 0.0709 0.0703 0.0747 0.0840 0.1023 0.1243 0.1355 0.1311 0.1179 0.0993 0.0884 0.1043 0.1590 +const double ColorTemp::JDC468_Gree457_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.0126, 0.0126, 0.012, 0.0112, 0.011, 0.0110, 0.011, 0.0109, 0.0107, 0.0106, 0.0105, 0.0105, 0.0105, 0.0104, 0.0107, 0.0110, 0.0124, 0.0136, 0.0234, 0.0318, 0.09, + 0.1246, 0.22, 0.3262, 0.43, 0.5051, 0.52, 0.5566, 0.54, 0.5181, 0.476, 0.4406, 0.398, 0.3429, 0.296, 0.2411, 0.203, 0.1647, 0.142, 0.1202, 0.1, 0.0968, 0.09, 0.0804, 0.08, + 0.0709, 0.0708, 0.0703, 0.0723, 0.0747, 0.08, 0.0840, 0.09, 0.1023, 0.11, 0.1243, 0.13, 0.1355, 0.132, 0.1311, 0.12, 0.1179, 0.10, 0.0993, 0.09, 0.0884, 0.09, 0.1043, 0.12, 0.1590, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//241 241 0.0134 0.0106 0.0110 0.0108 0.0111 0.0114 0.0114 0.0115 0.0114 0.0122 0.0192 0.0731 0.2455 0.4689 0.6183 0.6852 0.7107 0.7112 0.7059 0.7177 0.7335 0.7445 0.7487 0.7523 0.7555 0.7606 0.7683 0.7779 0.7855 0.7915 0.7964 0.8011 0.8056 0.8097 0.8144 0.8239 +const double ColorTemp::JDC468_Yel241_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0134, 0.012, 0.0106, 0.011, 0.0110, 0.011, 0.0108, 0.011, 0.0111, 0.0112, 0.0114, 0.0114, 0.0114, 0.0114, 0.0115, 0.0114, 0.0114, 0.012, 0.0122, 0.017, 0.0192, 0.05, 0.0731, 0.12, + 0.2455, 0.355, 0.4689, 0.556, 0.6183, 0.645, 0.6852, 0.698, 0.7107, 0.711, 0.7112, 0.708, 0.7059, 0.712, 0.7177, 0.724, 0.7335, 0.742, 0.7445, 0.746, 0.7487, 0.751, 0.7523, 0.753, + 0.7555, 0.758, 0.760, 0.7626, 0.7683, 0.771, 0.7779, 0.782, 0.7855, 0.791, 0.7915, 0.794, 0.7964, 0.799, 0.8011, 0.804, 0.8056, 0.807, 0.8097, 0.811, 0.8144, 0.820, 0.8239, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//321 321 0.0247 0.0203 0.0182 0.0183 0.0182 0.0179 0.0182 0.0188 0.0199 0.0249 0.0529 0.1519 0.3116 0.4138 0.4410 0.4679 0.4906 0.4655 0.4517 0.5203 0.6238 0.6952 0.7270 0.7406 0.7469 0.7527 0.7607 0.7708 0.7786 0.7849 0.7897 0.7940 0.7984 0.8025 0.8069 0.8160 +const double ColorTemp::JDC468_Ora321_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0247, 0.022, 0.0203, 0.019, 0.0182, 0.0182, 0.0183, 0.0182, 0.0182, 0.018, 0.0179, 0.018, 0.0182, 0.0185, 0.0188, 0.019, 0.0199, 0.022, 0.0249, 0.035, 0.0529, 0.112, + 0.1519, 0.231, 0.3116, 0.365, 0.4138, 0.421, 0.4410, 0.451, 0.4679, 0.485, 0.4906, 0.473, 0.4655, 0.455, 0.4517, 0.487, 0.5203, 0.578, 0.6238, 0.667, 0.6952, 0.711, 0.7270, 0.735, + 0.7406, 0.743, 0.7469, .751, 0.7527, 0.756, 0.7607, 0.765, 0.7708, 0.774, 0.7786, 0.782, 0.7849, 0.786, 0.7897, 0.79, 0.7940, 0.794, 0.7984, 0.799, 0.8025, 0.805, 0.8069, 0.811, 0.8160, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//353 353 0.0260 0.0294 0.0331 0.0420 0.0490 0.0517 0.0541 0.0572 0.0608 0.0664 0.0813 0.1070 0.1291 0.1344 0.1317 0.1356 0.1390 0.1289 0.1195 0.1278 0.1420 0.1493 0.1500 0.1500 0.1527 0.1576 0.1651 0.1759 0.1870 0.1942 0.1963 0.1952 0.1910 0.1898 0.1995 0.2209 +const double ColorTemp::JDC468_Yellow353_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0260, 0.027, 0.0294, 0.031, 0.0331, 0.037, 0.0420, 0.045, 0.0490, 0.051, 0.0517, 0.053, 0.0541, 0.056, 0.0572, 0.059, 0.0608, 0.063, 0.0664, 0.072, 0.0813, 0.096, 0.1070, 0.112, + 0.1291, 0.132, 0.1344, 0.133, 0.1317, 0.134, 0.1356, 0.137, 0.1390, 0.134, 0.1289, 0.123, 0.1195, 0.122, 0.1278, 0.134, 0.1420, 0.145, 0.1493, 0.15, 0.1500, 0.15, 0.1500, 0.153, + 0.1527, 0.154, 0.1576, 0.162, 0.1651, 0.172, 0.1759, 0.182, 0.1870, 0.191, 0.1942, 0.195, 0.1963, 0.196, 0.1952, 0.193, 0.1910, 0.19, 0.1898, 0.195, 0.1995, 0.21, 0.2209, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//465 465 0.0388 0.0654 0.1020 0.1557 0.1880 0.1783 0.1434 0.1013 0.0684 0.0410 0.0219 0.0149 0.0117 0.0080 0.0062 0.0062 0.0062 0.0056 0.0063 0.0098 0.0230 0.0440 0.0577 0.0617 0.0645 0.0690 0.0766 0.0903 0.1064 0.1144 0.1113 0.1022 0.0898 0.0833 0.0962 0.1377 +const double ColorTemp::JDC468_Mag465_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0388, 0.05, 0.0654, 0.09, 0.1020, 0.12, 0.1557, 0.17, 0.1880, 0.182, 0.1783, 0.162, 0.1434, 0.12, 0.1013, 0.09, 0.0684, 0.05, 0.0410, 0.03, 0.0219, 0.02, 0.0149, 0.012, + 0.0117, 0.009, 0.0080, 0.007, 0.0062, 0.0062, 0.0062, 0.0062, 0.0062, 0.006, 0.0056, 0.006, 0.0063, 0.008, 0.0098, 0.018, 0.0230, 0.03, 0.0440, 0.05, 0.0577, 0.06, 0.0617, 0.062, + 0.0645, 0.065, 0.0690, 0.07, 0.0766, 0.08, 0.0903, 0.1, 0.1064, 0.111, 0.1144, 0.112, 0.1113, 0.104, 0.1022, 0.09, 0.0898, 0.088, 0.0833, 0.09, 0.0962, 0.111, 0.1377, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//333 333 0.1030 0.1508 0.2133 0.3191 0.3910 0.3895 0.3424 0.2770 0.2184 0.1593 0.1074 0.0825 0.0669 0.0430 0.0265 0.0278 0.0315 0.0212 0.0163 0.0355 0.0861 0.1365 0.1565 0.1589 0.1629 0.1713 0.1852 0.2099 0.2378 0.2517 0.2469 0.2322 0.2102 0.1973 0.2191 0.2855 +const double ColorTemp::JDC468_Mag333_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1030, 0.12, 0.1508, 0.18, 0.2133, 0.26, 0.3191, 0.364, 0.3910, 0.39, 0.3895, 0.375, 0.3424, 0.312, 0.2770, 0.251, 0.2184, 0.183, 0.1593, 0.122, 0.1074, 0.1, 0.0825, 0.07, + 0.0669, 0.05, 0.0430, 0.03, 0.0265, 0.027, 0.0278, 0.03, 0.0315, 0.025, 0.0212, 0.02, 0.0163, 0.03, 0.0355, 0.05, 0.0861, 0.112, 0.1365, 0.143, 0.1565, 0.157, 0.1589, 0.16, + 0.1629, 0.165, 0.1713, 0.175, 0.1852, 0.19, 0.2099, 0.221, 0.2378, 0.245, 0.2517, 0.25, 0.2469, 0.238, 0.2322, 0.224, 0.2102, 0.206, 0.1973, 0.209, 0.2191, 0.231, 0.2855, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +//203 203 0.0833 0.1329 0.2005 0.3099 0.3855 0.3916 0.3530 0.2926 0.2346 0.1741 0.1201 0.0934 0.0759 0.0495 0.0306 0.0308 0.0330 0.0214 0.0150 0.0256 0.0510 0.0723 0.0769 0.0748 0.0761 0.0813 0.0911 0.1087 0.1295 0.1399 0.1353 0.1232 0.1064 0.0971 0.1137 0.1677 +const double ColorTemp::JDC468_Mag203_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0833, 0.11, 0.1329, 0.16, 0.2005, 0.25, 0.3099, 0.342, 0.3855, 0.39, 0.3916, 0.374, 0.3530, 0.321, 0.2926, 0.267, 0.2346, 0.21, 0.1741, 0.153, 0.1201, 0.1, 0.0934, 0.08, + 0.0759, 0.06, 0.0495, 0.04, 0.0306, 0.0307, 0.0308, 0.032, 0.0330, 0.025, 0.0214, 0.018, 0.0150, 0.02, 0.0256, 0.04, 0.0510, 0.06, 0.0723, 0.074, 0.0769, 0.075, 0.0748, 0.076, + 0.0761, 0.08, 0.0813, 0.09, 0.0911, 0.1, 0.1087, 0.115, 0.1295, 0.134, 0.1399, 0.136, 0.1353, 0.131, 0.1232, 0.114, 0.1064, 0.1, 0.0971, 0.105, 0.1137, 0.123, 0.1677, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//blue cyan +const double ColorTemp::J570_BlueB6_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1611, 0.18, 0.1947, 0.23, 0.2639, 0.31, 0.3488, 0.37, 0.4022, 0.43, 0.4517, 0.49, 0.501, 0.52, 0.5317, 0.534, 0.5367, 0.53, 0.5246, 0.51, 0.4905, 0.47, 0.4510, 0.43, 0.4059, + 0.37, 0.3351, 0.31, 0.2612, 0.24, 0.2177, 0.205, 0.1883, 0.16, 0.1444, 0.123, 0.1065, 0.1, 0.0889, 0.085, 0.0811, 0.08, 0.0757, 0.071, 0.0695, 0.067, 0.0648, 0.064, 0.0634, + 0.063, 0.0637, 0.065, 0.0662, 0.068, 0.0714, 0.075, 0.0787, 0.08, 0.0828, 0.082, 0.0822, 0.08, 0.0781, 0.075, 0.0726, 0.071, 0.0698, 0.075, 0.0770, 0.08, 0.0973, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueB15_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2207, 0.2, 0.1897, 0.21, 0.2274, 0.25, 0.2805, 0.30, 0.3216, 0.34, 0.3596, 0.38, 0.4003, 0.42, 0.4438, 0.47, 0.4909, 0.52, 0.5469, 0.57, 0.6009, 0.62, 0.6414, 0.65, 0.6557, + 0.64, 0.6275, 0.59, 0.5675, 0.53, 0.5022, 0.48, 0.4348, 0.39, 0.3473, 0.31, 0.2613, 0.24, 0.2039, 0.18, 0.1696, 0.15, 0.1465, 0.13, 0.1243, 0.11, 0.1055, 0.10, 0.0952, 0.094, + 0.0911, 0.091, 0.0906, 0.092, 0.0940, 0.1, 0.1006, 0.104, 0.1075, 0.11, 0.1125, 0.113, 0.1146, 0.113, 0.1129, 0.112, 0.1120, 0.115, 0.1198, 0.13, 0.1431, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueC2_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2534, 0.25, 0.2454, 0.28, 0.3101, 0.33, 0.3567, 0.37, 0.3981, 0.41, 0.4258, 0.43, 0.4472, 0.45, 0.4574, 0.455, 0.4571, 0.45, 0.4468, 0.43, 0.4205, 0.41, 0.3947, 0.38, + 0.3647, 0.33, 0.3074, 0.27, 0.2471, 0.23, 0.2221, 0.22, 0.2128, 0.20, 0.1810, 0.17, 0.1510, 0.15, 0.1486, 0.15, 0.1546, 0.154, 0.1532, 0.15, 0.1426, 0.135, 0.1310, 0.125, + 0.1257, 0.125, 0.1246, 0.126, 0.1276, 0.13, 0.1360, 0.14, 0.1483, 0.15, 0.1566, 0.157, 0.1575, 0.155, 0.1535, 0.15, 0.1453, 0.143, 0.1403, 0.146, 0.1510, 0.16, 0.1855, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueC14_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5697, 0.51, 0.4660, 0.49, 0.5000, 0.53, 0.5560, 0.58, 0.6072, 0.62, 0.6402, 0.65, 0.6632, 0.67, 0.6850, 0.69, 0.7069, 0.71, 0.7292, 0.74, 0.7488, 0.75, 0.7678, 0.77, 0.7786, + 0.775, 0.7721, 0.76, 0.7544, 0.75, 0.7394, 0.73, 0.7232, 0.70, 0.6889, 0.66, 0.6446, 0.63, 0.6171, 0.61, 0.5966, 0.58, 0.5743, 0.56, 0.5425, 0.53, 0.5093, 0.50, 0.4884, 0.48, + 0.4784, 0.475, 0.4774, 0.48, 0.4822, 0.49, 0.4944, 0.50, 0.5076, 0.51, 0.5186, 0.52, 0.5268, 0.53, 0.5303, 0.532, 0.5332, 0.54, 0.5454, 0.56, 0.5760, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueC16_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1909, 0.10, 0.0635, 0.06, 0.0554, 0.056, 0.0571, 0.057, 0.0580, 0.06, 0.0608, 0.063, 0.0662, 0.07, 0.0712, 0.072, 0.0742, 0.08, 0.0811, 0.09, 0.0985, 0.11, 0.1363, 0.15, + 0.1743, 0.173, 0.1720, 0.15, 0.1372, 0.12, 0.1005, 0.09, 0.0731, 0.06, 0.0509, 0.04, 0.0374, 0.036, 0.0322, 0.032, 0.0308, 0.031, 0.0309, 0.031, 0.0319, 0.033, + 0.0333, 0.034, 0.0349, 0.035, 0.0364, 0.037, 0.0377, 0.038, 0.0386, 0.0386, 0.0386, 0.0384, 0.0383, 0.038, 0.0377, 0.0377, 0.0378, 0.038, 0.0386, 0.04, 0.0417, 0.043, + 0.0461, 0.049, 0.0514, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueF1_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0060, 0.04, 0.0975, 0.11, 0.1297, 0.13, 0.1426, 0.15, 0.1538, 0.16, 0.1624, 0.165, 0.1684, 0.17, 0.1727, 0.175, 0.1761, 0.178, 0.1798, 0.18, 0.1863, 0.19, 0.1993, 0.20, + 0.2091, 0.205, 0.2041, 0.20, 0.1902, 0.19, 0.1836, 0.182, 0.1809, 0.17, 0.1675, 0.16, 0.1527, 0.151, 0.1511, 0.153, 0.1541, 0.154, 0.1545, 0.153, 0.1516, 0.15, + 0.1484, 0.149, 0.1489, 0.15, 0.1516, 0.153, 0.1563, 0.16, 0.1654, 0.17, 0.1766, 0.18, 0.1827, 0.182, 0.1817, 0.18, 0.1766, 0.17, 0.1693, 0.166, 0.1643, 0.17, 0.1726, 0.18, 0.1978, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueF2_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1613, 0.20, 0.2384, 0.30, 0.3288, 0.35, 0.4026, 0.43, 0.4630, 0.48, 0.4992, 0.51, 0.5294, 0.53, 0.5377, 0.53, 0.5261, 0.51, 0.4995, 0.48, 0.4513, 0.43, 0.4064, 0.38, + 0.3620, 0.31, 0.2935, 0.25, 0.2263, 0.21, 0.1977, 0.19, 0.1851, 0.17, 0.1519, 0.14, 0.1213, 0.12, 0.1149, 0.113, 0.1162, 0.114, 0.1133, 0.11, 0.1053, 0.10, 0.0976, 0.095, + 0.0947, 0.095, 0.0953, 0.097, 0.0985, 0.1, 0.1070, 0.11, 0.1188, 0.12, 0.1256, 0.124, 0.1246, 0.12, 0.1187, 0.11, 0.1099, 0.105, 0.1048, 0.11, 0.1145, 0.12, 0.145, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueF10_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3003, 0.20, 0.1512, 0.20, 0.2149, 0.25, 0.2709, 0.30, 0.3127, 0.32, 0.3534, 0.37, 0.4001, 0.42, 0.4456, 0.46, 0.4882, 0.51, 0.5343, 0.55, 0.5728, 0.58, 0.5968, 0.595, + 0.5932, 0.56, 0.5490, 0.51, 0.4756, 0.43, 0.3989, 0.37, 0.3256, 0.28, 0.2424, 0.21, 0.1691, 0.15, 0.1239, 0.10, 0.0998, 0.09, 0.0866, 0.08, 0.0752, 0.07, 0.0664, 0.065, + 0.0623, 0.062, 0.0616, 0.062, 0.0626, 0.064, 0.0662, 0.07, 0.0720, 0.075, 0.0767, 0.077, 0.0784, 0.078, 0.0770, 0.075, 0.0734, 0.073, 0.0716, 0.075, 0.0779, 0.08, 0.0968, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueF13_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3075, 0.22, 0.1514, 0.13, 0.1216, 0.125, 0.1264, 0.13, 0.1312, 0.14, 0.1448, 0.15, 0.1665, 0.17, 0.1850, 0.19, 0.1922, 0.195, 0.1970, 0.20, 0.2036, 0.21, + 0.2136, 0.213, 0.2122, 0.19, 0.1832, 0.16, 0.1412, 0.12, 0.1066, 0.09, 0.0810, 0.07, 0.0579, 0.05, 0.0422, 0.04, 0.0358, 0.035, 0.0336, 0.033, 0.0335, 0.0335, + 0.0339, 0.034, 0.0348, 0.035, 0.0358, 0.036, 0.0371, 0.038, 0.0384, 0.039, 0.0394, 0.04, 0.0405, 0.0404, 0.0405, 0.04, 0.0399, 0.039, 0.0387, 0.039, + 0.0396, 0.04, 0.0422, 0.045, 0.0467, 0.05, 0.0527, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueG9_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0937, 0.09, 0.0891, 0.07, 0.0621, 0.07, 0.0735, 0.08, 0.0842, 0.09, 0.0918, 0.1, 0.1009, 0.105, 0.1091, 0.11, 0.1158, 0.12, 0.1254, 0.13, 0.1452, 0.16, + 0.1805, 0.20, 0.2126, 0.213, 0.2128, 0.20, 0.1863, 0.17, 0.1550, 0.14, 0.1270, 0.1, 0.0973, 0.08, 0.0725, 0.06, 0.0585, 0.055, 0.0521, 0.05, 0.0486, 0.047, + 0.0458, 0.045, 0.0441, 0.044, 0.0439, 0.044, 0.0443, 0.045, 0.0455, 0.046, 0.0478, 0.049, 0.0500, 0.051, 0.0512, 0.051, 0.0511, 0.05, 0.0498, 0.049, + 0.0487, 0.049, 0.0495, 0.05, 0.0531, 0.055, 0.0620, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueG19_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1198, 0.12, 0.1376, 0.15, 0.1735, 0.18, 0.1903, 0.20, 0.2116, 0.22, 0.2322, 0.24, 0.2555, 0.27, 0.2802, 0.29, 0.3077, 0.32, 0.3420, 0.36, 0.3822, 0.41, + 0.4261, 0.43, 0.4565, 0.45, 0.4481, 0.43, 0.4109, 0.39, 0.3736, 0.35, 0.3368, 0.30, 0.2811, 0.25, 0.2228, 0.19, 0.1839, 0.17, 0.1592, 0.15, 0.1394, 0.12, + 0.1183, 0.1, 0.0998, 0.09, 0.0897, 0.085, 0.0851, 0.085, 0.0844, 0.085, 0.0863, 0.09, 0.0912, 0.095, 0.0977, 0.1, 0.1027, 0.105, 0.1064, 0.106, 0.1064, 0.106, + 0.1067, 0.11, 0.1135, 0.12, 0.1319, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueI5_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1096, 012, 0.1546, 0.16, 0.1855, 0.2, 0.2350, 0.25, 0.2720, 0.29, 0.3065, 0.32, 0.3404, 0.36, 0.3782, 0.4, 0.4229, 0.45, 0.4801, 0.51, 0.5416, 0.57, + 0.5962, 0.61, 0.6281, 0.62, 0.6144, 0.58, 0.5680, 0.55, 0.5211, 0.5, 0.4726, 0.43, 0.3991, 0.37, 0.3209, 0.29, 0.2674, 0.25, 0.2311, 0.22, 0.2000, 0.18, + 0.1656, 0.15, 0.1349, 0.12, 0.1161, 0.11, 0.1078, 0.105, 0.1046, 0.105, 0.1049, 0.107, 0.1097, 0.11, 0.1179, 0.12, 0.1264, 0.13, 0.1337, 0.135, 0.1378, 0.14, 0.1402, 0.145, 0.1474, 0.15, 0.1662, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueH15_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1047, 0.105, 0.1078, 0.12, 0.1550, 0.20, 0.2110, 0.23, 0.2487, 0.27, 0.2893, 0.31, 0.3386, 0.35, 0.3723, 0.375, 0.3773, 0.37, 0.3665, 0.35, 0.3373, 0.32, + 0.3037, 0.28, 0.2663, 0.24, 0.2106, 0.17, 0.1540, 0.13, 0.1200, 0.11, 0.0980, 0.08, 0.0721, 0.06, 0.0527, 0.05, 0.0448, 0.043, 0.0418, 0.041, 0.0403, 0.04, + 0.0390, 0.039, 0.0386, 0.039, 0.0392, 0.04, 0.0401, 0.041, 0.0413, 0.042, 0.0435, 0.044, 0.0456, 0.046, 0.0465, 0.046, 0.0457, 0.045, 0.0447, 0.044, 0.0435, 0.044, + 0.0442, 0.046, 0.0485, 0.05, 0.0576, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueI3_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1759, 0.21, 0.2647, 0.31, 0.3209, 0.36, 0.4249, 0.45, 0.4957, 0.52, 0.5536, 0.57, 0.6073, 0.62, 0.6431, 0.65, 0.6538, 0.653, 0.6506, 0.64, 0.6282, 0.61, + 0.5973, 0.57, 0.5559, 0.52, 0.4856, 0.43, 0.4033, 0.37, 0.3417, 0.32, 0.2901, 0.26, 0.2211, 0.19, 0.1585, 0.14, 0.1236, 0.11, 0.1062, 0.1, 0.0959, 0.09, + 0.0865, 0.085, 0.0801, 0.08, 0.0780, 0.079, 0.0788, 0.08, 0.0819, 0.09, 0.0903, 0.1, 0.1009, 0.105, 0.1073, 0.106, 0.1055, 0.1, 0.0998, 0.095, 0.0914, 0.09, 0.0863, 0.09, 0.0961, 0.11, 0.1250, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueI19_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3031, 0.28, 0.2588, 0.25, 0.2472, 0.26, 0.2738, 0.29, 0.3035, 0.31, 0.3271, 0.33, 0.3496, 0.36, 0.3724, 0.38, 0.3968, 0.41, 0.4252, 0.44, 0.4562, 0.47, + 0.4899, 0.5, 0.5147, 0.512, 0.5100, 0.49, 0.4841, 0.47, 0.4608, 0.45, 0.4373, 0.42, 0.3934, 0.37, 0.3420, 0.32, 0.3086, 0.30, 0.2850, 0.27, 0.2622, 0.25, + 0.2334, 0.22, 0.2054, 0.19, 0.1887, 0.185, 0.1806, 0.18, 0.1791, 0.18, 0.1825, 0.185, 0.1909, 0.2, 0.2018, 0.21, 0.2108, 0.213, 0.2164, 0.217, 0.2180, 0.219, + 0.2198, 0.22, 0.2295, 0.24, 0.2562, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueJ4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0290, 0.02, 0.0598, 0.1, 0.1278, 0.15, 0.1764, 0.19, 0.2052, 0.21, 0.2331, 0.25, 0.2642, 0.28, 0.2906, 0.3, 0.3093, 0.31, 0.3263, 0.33, 0.3413, 0.35, + 0.3550, 0.354, 0.3532, 0.33, 0.3206, 0.3, 0.2685, 0.24, 0.2212, 0.2, 0.1802, 0.16, 0.1346, 0.1, 0.0965, 0.08, 0.0751, 0.07, 0.0646, 0.06, 0.0586, 0.055, + 0.0535, 0.052, 0.0504, 0.05, 0.0491, 0.0495, 0.0493, 0.05, 0.0504, 0.051, 0.0529, 0.053, 0.0565, 0.057, 0.0591, 0.059, 0.0593, 0.058, 0.0576, 0.056, 0.0556, 0.055, + 0.0553, 0.06, 0.0602, 0.065, 0.0727, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueJ6_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3039, 0.3, 0.2571, 0.27, 0.2960, 0.31, 0.3446, 0.37, 0.3937, 0.41, 0.4405, 0.47, 0.4884, 0.51, 0.5337, 0.56, 0.5771, 0.59, 0.6221, 0.64, 0.6589, 0.67, + 0.6808, 0.68, 0.6770, 0.65, 0.6375, 0.59, 0.5693, 0.53, 0.4933, 0.45, 0.4160, 0.39, 0.3223, 0.26, 0.2338, 0.21, 0.1761, 0.16, 0.1447, 0.13, 0.1258, 0.12, + 0.1090, 0.1, 0.0961, 0.09, 0.0899, 0.089, 0.0877, 0.088, 0.0892, 0.09, 0.0949, 0.1, 0.1045, 0.11, 0.1115, 0.112, 0.1131, 0.112, 0.1115, 0.11, 0.1065, 0.105, + 0.1033, 0.11, 0.1122, 0.12, 0.1400, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_BlueJ11_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1274, 0.1, 0.091, 0.08, 0.0656, 0.064, 0.0604, 0.06, 0.0570, 0.06, 0.0604, 0.061, 0.0644, 0.065, 0.0668, 0.07, 0.0700, 0.072, 0.0754, 0.08, 0.0874, 0.1, + 0.1111, 0.12, 0.1327, 0.132, 0.1313, 0.12, 0.1127, 0.1, 0.0931, 0.08, 0.0758, 0.06, 0.0580, 0.05, 0.0449, 0.04, 0.0385, 0.036, 0.0360, 0.035, 0.0351, 0.035, + 0.0351, 0.035, 0.0355, 0.036, 0.0371, 0.0375, 0.0379, 0.038, 0.0388, 0.04, 0.0406, 0.041, 0.0414, 0.0415, 0.0416, 0.041, 0.0409, 0.04, + 0.0398, 0.04, 0.0397, 0.04, 0.0424, 0.043, 0.0458, 0.05, 0.0522, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_BlueJ13_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2802, 0.28, 0.2820, 0.3, 0.3461, 0.4, 0.4357, 0.45, 0.5027, 0.53, 0.5528, 0.58, 0.6001, 0.62, 0.6402, 0.66, 0.6730, 0.69, 0.7019, 0.71, 0.7216, 0.725, + 0.7288, 0.72, 0.7172, 0.7, 0.6779, 0.65, 0.6160, 0.58, 0.5478, 0.52, 0.4751, 0.43, 0.3816, 0.35, 0.2882, 0.25, 0.2260, 0.2, 0.1905, 0.18, 0.1699, 0.16, + 0.1514, 0.14, 0.1361, 0.13, 0.1295, 0.129, 0.1281, 0.13, 0.1309, 0.135, 0.1408, 0.145, 0.1546, 0.16, 0.1644, 0.165, 0.1656, 0.162, + 0.1606, 0.155, 0.1516, 0.15, 0.1461, 0.15, 0.1585, 0.16, 0.1975, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_BlueK5_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1727, 0.18, 0.1814, 0.19, 0.1931, 0.21, 0.2379, 0.25, 0.2728, 0.29, 0.3054, 0.31, 0.3396, 0.36, 0.3780, 0.4, 0.4243, 0.45, 0.4829, 0.51, 0.5464, 0.57, + 0.6024, 0.62, 0.6348, 0.63, 0.6209, 0.59, 0.5741, 0.55, 0.5258, 0.49, 0.4755, 0.43, 0.4003, 0.37, 0.3204, 0.3, 0.2656, 0.25, 0.2282, 0.21, 0.1966, 0.17, + 0.1624, 0.15, 0.1322, 0.12, 0.1137, 0.11, 0.1052, 0.105, 0.1025, 0.102, 0.1028, 0.105, 0.1075, 0.11, 0.1155, 0.12, 0.1237, 0.13, 0.1310, 0.133, + 0.1352, 0.136, 0.1370, 0.14, 0.1444, 0.15, 0.1632, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_BlueN1_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1936, 0.194, 0.1942, 0.22, 0.2692, 0.29, 0.3102, 0.33, 0.3535, 0.37, 0.3885, 0.4, 0.4230, 0.44, 0.4594, 0.48, 0.5011, 0.52, 0.5510, 0.58, 0.6022, 0.62, 0.6479, 0.66, + 0.6748, 0.67, 0.6640, 0.65, 0.6268, 0.61, 0.5919, 0.58, 0.5549, 0.53, 0.4921, 0.46, 0.4209, 0.39, 0.3723, 0.35, 0.3364, 0.32, 0.3005, 0.28, 0.2569, 0.23, 0.2154, 0.19, + 0.1897, 0.18, 0.1768, 0.175, 0.1723, 0.173, 0.1722, 0.175, 0.1785, 0.18, 0.1892, 0.19, 0.2017, 0.21, 0.2134, 0.22, 0.2202, 0.222, 0.2247, 0.23, 0.2333, 0.24, 0.2566, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_BlueN4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3138, 0.25, 0.2038, 0.19, 0.1787, 0.18, 0.1840, 0.2, 0.2109, 0.23, 0.2400, 0.26, 0.2715, 0.29, 0.3075, 0.33, 0.3534, 0.39, 0.4149, 0.45, 0.4863, 0.52, + 0.5520, 0.57, 0.5904, 0.58, 0.5750, 0.55, 0.5198, 0.48, 0.4602, 0.43, 0.3997, 0.36, 0.3199, 0.27, 0.2411, 0.2, 0.1883, 0.17, 0.1553, 0.14, 0.1307, 0.12, + 0.1062, 0.1, 0.0859, 0.08, 0.0746, 0.07, 0.0697, 0.069, 0.0678, 0.068, 0.0683, 0.07, 0.0715, 0.075, 0.0765, 0.08, 0.0818, 0.085, 0.0862, 0.087, 0.0885, 0.089, + 0.0899, 0.09, 0.0951, 0.1, 0.1090, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_BlueO19_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1231, 0.13, 0.1348, 0.12, 0.1152, 0.12, 0.1368, 0.15, 0.1627, 0.17, 0.1860, 0.2, 0.2130, 0.23, 0.2462, 0.26, 0.2859, 0.31, 0.3425, 0.38, 0.4152, 0.45, 0.4902, 0.51, + 0.5386, 0.53, 0.5259, 0.49, 0.4652, 0.43, 0.3950, 0.35, 0.3266, 0.28, 0.2469, 0.21, 0.1750, 0.15, 0.1293, 0.12, 0.1033, 0.09, 0.0859, 0.08, 0.0703, 0.06, 0.0578, 0.055, + 0.0521, 0.05, 0.0494, 0.049, 0.0492, 0.049, 0.0498, 0.05, 0.0522, 0.053, 0.0558, 0.058, 0.0590, 0.06, 0.0615, 0.062, 0.0625, 0.063, 0.0634, 0.065, 0.0670, 0.07, 0.0776, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_BlueU8_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0776, 0.1, 0.1703, 0.23, 0.2942, 0.35, 0.4022, 0.45, 0.4795, 0.51, 0.5389, 0.56, 0.5968, 0.6, 0.6362, 0.64, 0.6512, 0.652, 0.6523, 0.64, 0.6340, 0.62, 0.6052, 0.58, + 0.5645, 0.53, 0.4952, 0.45, 0.4124, 0.38, 0.3457, 0.32, 0.2883, 0.25, 0.2164, 0.19, 0.1529, 0.14, 0.1168, 0.1, 0.0983, 0.09, 0.0883, 0.08, 0.0798, 0.075, 0.0735, 0.073, + 0.0720, 0.072, 0.0726, 0.074, 0.0757, 0.08, 0.0830, 0.09, 0.0930, 0.095, 0.0989, 0.097, 0.0971, 0.095, 0.0911, 0.085, 0.0832, 0.08, 0.0795, 0.082, 0.0877, 0.09, 0.1140, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//N8 +const double ColorTemp::J570_NeuN8_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0632, -0.04, -0.0244, 0.01, 0.0125, 0.02, 0.0294, 0.03, 0.0326, 0.033, 0.0352, 0.036, 0.0361, 0.037, 0.0374, 0.0374, 0.0373, 0.038, 0.0378, 0.039, 0.0397, 0.04, + 0.0421, 0.043, 0.0431, 0.042, 0.0417, 0.04, 0.0391, 0.038, 0.0378, 0.037, 0.0368, 0.035, 0.0347, 0.034, 0.0335, 0.034, 0.0341, 0.035, 0.0350, 0.035, 0.0355, 0.036, + 0.0357, 0.0357, 0.0358, 0.036, 0.0369, 0.037, 0.0372, 0.0376, 0.0378, 0.038, 0.0388, 0.039, 0.0397, 0.04, 0.0400, 0.0395, 0.0394, 0.039, 0.0386, 0.0385, 0.0384, 0.039, + 0.0395, 0.04, 0.0415, 0.043, 0.0448, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuN9_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0573, 0.054, 0.0516, 0.053, 0.0548, 0.05, 0.0401, 0.041, 0.0424, 0.043, 0.0449, 0.046, 0.0467, 0.047, 0.0473, 0.0473, 0.0474, 0.048, 0.0483, 0.05, 0.0508, 0.053, + 0.0558, 0.057, 0.0584, 0.058, 0.0550, 0.05, 0.0495, 0.048, 0.0468, 0.0465, 0.0460, 0.044, 0.0430, 0.042, 0.0411, 0.042, 0.0425, 0.044, 0.0457, 0.046, 0.0473, 0.0474, + 0.0475, 0.0475, 0.0474, 0.0475, 0.0476, 0.048, 0.0487, 0.049, 0.0499, 0.05, 0.0515, 0.052, 0.0533, 0.054, 0.0544, 0.054, 0.0539, 0.053, 0.0526, 0.052, 0.0512, 0.0515, + 0.0515, 0.053, 0.0538, 0.056, 0.0597, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuO8_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0014, 0.02, 0.0806, 0.07, 0.0673, 0.07, 0.0854, 0.09, 0.0901, 0.095, 0.0960, 0.098, 0.0992, 0.1, 0.1017, 0.102, 0.1030, 0.104, 0.1052, 0.107, 0.1098, 0.11, + 0.1176, 0.12, 0.1230, 0.12, 0.1176, 0.11, 0.1071, 0.105, 0.1032, 0.103, 0.1032, 0.1, 0.0963, 0.09, 0.0899, 0.09, 0.0939, 0.095, 0.1007, 0.102, 0.1037, 0.104, + 0.1029, 0.102, 0.1014, 0.102, 0.1020, 0.103, 0.1039, 0.105, 0.1072, 0.11, 0.1134, 0.12, 0.1207, 0.122, 0.1245, 0.123, 0.1236, 0.121, 0.1205, 0.12, 0.1158, 0.115, + 0.1132, 0.115, 0.1185, 0.12, 0.1345, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuO11_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2926, 0.2, 0.1863, 0.16, 0.1428, 0.14, 0.1322, 0.134, 0.1396, 0.14, 0.1450, 0.146, 0.1498, 0.15, 0.1527, 0.155, 0.1554, 0.157, 0.1583, 0.16, 0.1631, 0.17, + 0.1754, 0.18, 0.1841, 0.18, 0.1761, 0.17, 0.1600, 0.155, 0.1549, 0.155, 0.1555, 0.15, 0.1449, 0.14, 0.1352, 0.14, 0.1414, 0.15, 0.1519, 0.153, 0.1568, 0.156, + 0.1556, 0.154, 0.1534, 0.154, 0.1547, 0.156, 0.1573, 0.16, 0.1622, 0.17, 0.1713, 0.18, 0.1823, 0.185, 0.1886, 0.188, 0.1873, 0.183, 0.1829, 0.18, 0.1753, 0.174, + 0.1716, 0.175, 0.1800, 0.2, 0.2039, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuD5_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0840, 0.1, 0.1627, 0.18, 0.1934, 0.2, 0.2234, 0.23, 0.2430, 0.25, 0.2547, 0.26, 0.2618, 0.264, 0.2651, 0.265, 0.2655, 0.2655, 0.2659, 0.266, 0.2674, 0.27, + 0.2776, 0.28, 0.2841, 0.27, 0.2654, 0.25, 0.2351, 0.23, 0.2246, 0.225, 0.2247, 0.22, 0.2074, 0.20, 0.1913, 0.20, 0.2029, 0.21, 0.2231, 0.23, 0.2337, 0.233, + 0.2327, 0.23, 0.2291, 0.23, 0.2305, 0.232, 0.2344, 0.24, 0.2417, 0.25, 0.2553, 0.26, 0.2724, 0.28, 0.2816, 0.28, 0.2797, 0.276, 0.2720, 0.27, + 0.2603, 0.26, 0.2536, 0.26, 0.2660, 0.28, 0.3027, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_NeuE11_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1699, 0.18, 0.1971, 0.21, 0.2276, 0.23, 0.2483, 0.25, 0.2690, 0.28, 0.2820, 0.29, 0.2916, 0.295, 0.2992, 0.3, 0.3064, 0.31, 0.3151, 0.32, 0.3301, 0.34, 0.3593, 0.37, + 0.3873, 0.39, 0.3913, 0.38, 0.3793, 0.375, 0.3723, 0.37, 0.3678, 0.35, 0.3482, 0.33, 0.3249, 0.32, 0.3188, 0.319, 0.3188, 0.318, 0.3179, 0.315, 0.3128, 0.31, + 0.3086, 0.31, 0.3105, 0.312, 0.3148, 0.313, 0.3222, 0.33, 0.3364, 0.34, 0.3535, 0.36, 0.3629, 0.362, 0.3621, 0.36, 0.3549, 0.35, 0.3444, 0.34, 0.3394, 0.35, 0.3511, 0.36, 0.3862, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_NeuK16_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5837, 0.45, 0.4117, 0.43, 0.4427, 0.47, 0.5098, 0.52, 0.5451, 0.55, 0.5698, 0.57, 0.5828, 0.59, 0.5939, 0.6, 0.6045, 0.607, 0.6140, 0.62, 0.6219, 0.63, 0.6330, 0.64, + 0.6419, 0.643, 0.6440, 0.642, 0.6417, 0.64, 0.6379, 0.631, 0.6309, 0.62, 0.6154, 0.6, 0.5911, 0.58, 0.5736, 0.57, 0.5612, 0.56, 0.5539, 0.55, 0.5462, 0.543, + 0.5406, 0.542, 0.5418, 0.543, 0.5452, 0.55, 0.5529, 0.56, 0.5654, 0.57, 0.5806, 0.584, 0.5888, 0.589, 0.5898, 0.586, 0.5858, 0.58, 0.5796, 0.577, 0.5770, 0.58, 0.5883, 0.59, 0.6190, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuM3_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2659, 0.255, 0.2526, 0.26, 0.2616, 0.27, 0.2854, 0.29, 0.3088, 0.31, 0.3231, 0.33, 0.3336, 0.34, 0.3421, 0.345, 0.347, 0.35, 0.3542, 0.36, 0.3647, 0.37, + 0.3854, 0.4, 0.4041, 0.402, 0.4012, 0.39, 0.3856, 0.38, 0.3769, 0.375, 0.3725, 0.36, 0.3525, 0.34, 0.3286, 0.325, 0.3247, 0.326, 0.3279, 0.328, 0.3285, 0.325, + 0.3240, 0.322, 0.3202, 0.321, 0.3220, 0.323, 0.3267, 0.33, 0.3342, 0.34, 0.3487, 0.35, 0.3667, 0.37, 0.3761, 0.375, 0.3746, 0.37, 0.3670, 0.36, 0.3559, 0.35, 0.3498, 0.35, 0.3630, 0.37, 0.3998, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuN18_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1284, 0.11, 0.1090, 0.13, 0.1573, 0.17, 0.1837, 0.19, 0.1971, 0.2, 0.2059, 0.21, 0.2143, 0.22, 0.2213, 0.225, 0.2271, 0.23, 0.2341, 0.24, 0.2487, 0.26, 0.2764, 0.29, + 0.3025, 0.303, 0.3052, 0.3, 0.2919, 0.29, 0.2843, 0.283, 0.2800, 0.27, 0.2612, 0.24, 0.2394, 0.235, 0.2339, 0.234, 0.2340, 0.233, 0.2326, 0.23, 0.2277, 0.225, + 0.2235, 0.224, 0.2246, 0.226, 0.2282, 0.23, 0.2349, 0.24, 0.2477, 0.25, 0.2632, 0.27, 0.2714, 0.271, 0.2702, 0.27, 0.2637, 0.26, 0.2538, 0.25, 0.2479, 0.25, 0.2589, 0.26, 0.2918, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuQ1_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0610, 0.06, 0.0592, 0.04, 0.0339, 0.04, 0.0338, 0.034, 0.0350, 0.036, 0.0363, 0.037, 0.0380, 0.038, 0.0383, 0.0383, 0.0385, 0.04, 0.0408, 0.042, 0.0451, 0.05, + 0.0524, 0.055, 0.0589, 0.058, 0.0585, 0.055, 0.0529, 0.05, 0.0456, 0.04, 0.0390, 0.035, 0.0330, 0.03, 0.0286, 0.028, 0.0275, 0.0276, 0.0275, 0.0278, 0.0279, 0.028, + 0.0289, 0.03, 0.0304, 0.031, 0.0320, 0.032, 0.0328, 0.033, 0.0341, 0.0345, 0.0346, 0.0346, 0.0347, 0.034, 0.0341, 0.034, 0.0336, 0.034, 0.0340, 0.035, + 0.0351, 0.036, 0.0373, 0.038, 0.0411, 0.042, 0.0446, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuS7_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1447, 0.06, 0.0448, 0.042, 0.0411, 0.03, 0.0282, 0.028, 0.0270, 0.029, 0.0298, 0.03, 0.0319, 0.032, 0.0331, 0.0333, 0.0335, 0.036, 0.0361, 0.038, 0.0403, 0.045, + 0.0493, 0.05, 0.0599, 0.06, 0.0636, 0.062, 0.0606, 0.06, 0.0547, 0.05, 0.0488, 0.045, 0.0421, 0.04, 0.0366, 0.035, 0.0335, 0.033, 0.0323, 0.032, 0.0320, 0.032, + 0.0321, 0.0322, 0.0324, 0.033, 0.0333, 0.034, 0.0345, 0.035, 0.0356, 0.036, 0.0364, 0.037, 0.0372, 0.037, 0.0367, 0.0365, 0.0363, 0.0364, + 0.0361, 0.0362, 0.0363, 0.037, 0.0376, 0.04, 0.0412, 0.042, 0.0450, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuV10_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1439, 0.07, 0.0583, 0.04, 0.0372, 0.037, 0.0362, 0.035, 0.0344, 0.034, 0.0340, 0.035, 0.0351, 0.036, 0.0361, 0.0361, 0.0361, 0.037, 0.0377, 0.039, 0.0404, 0.042, + 0.0450, 0.047, 0.0483, 0.048, 0.0475, 0.045, 0.0436, 0.04, 0.0387, 0.036, 0.0343, 0.03, 0.0299, 0.028, 0.0271, 0.027, 0.0262, 0.0262, 0.0262, 0.0267, 0.0269, 0.027, + 0.0283, 0.029, 0.0299, 0.03, 0.0308, 0.031, 0.0319, 0.032, 0.0331, 0.0333, 0.0337, 0.0337, 0.0337, 0.0333, 0.0332, 0.0332, 0.0331, 0.0331, 0.0331, 0.034, + 0.0341, 0.035, 0.0371, 0.038, 0.0399, 0.041, 0.0432, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuW18_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4685, 0.45, 0.4262, 0.5, 0.5061, 0.55, 0.5898, 0.6, 0.6487, 0.66, 0.6781, 0.68, 0.6947, 0.7, 0.7070, 0.71, 0.7185, 0.72, 0.7294, 0.73, 0.7383, 0.74, 0.7499, 0.75, + 0.7582, 0.758, 0.7582, 0.755, 0.7531, 0.75, 0.7484, 0.745, 0.7422, 0.73, 0.7263, 0.72, 0.7033, 0.7, 0.6913, 0.69, 0.6820, 0.68, 0.6738, 0.67, 0.6628, 0.66, + 0.6512, 0.65, 0.6462, 0.645, 0.6448, 0.645, 0.6485, 0.65, 0.6569, 0.66, 0.6698, 0.67, 0.6781, 0.68, 0.6822, 0.682, 0.6820, 0.682, 0.6815, 0.682, 0.6820, 0.69, 0.6907, 0.7, 0.7152, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuZ14_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2765, 0.2, 0.1352, 0.13, 0.1222, 0.121, 0.1206, 0.13, 0.1300, 0.134, 0.1357, 0.14, 0.1407, 0.142, 0.1455, 0.147, 0.1485, 0.15, 0.1539, 0.16, 0.1648, 0.17, + 0.1844, 0.2, 0.2015, 0.202, 0.2024, 0.2, 0.1922, 0.19, 0.1868, 0.185, 0.1841, 0.18, 0.1715, 0.16, 0.1566, 0.155, 0.1536, 0.154, 0.1545, 0.154, 0.1536, 0.151, + 0.1500, 0.148, 0.1471, 0.1472, 0.1478, 0.15, 0.1505, 0.153, 0.1552, 0.16, 0.1641, 0.17, 0.1751, 0.18, 0.1813, 0.181, 0.1801, 0.18, + 0.1757, 0.17, 0.1683, 0.165, 0.1642, 0.17, 0.1728, 0.18, 0.1970, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::J570_NeuC18_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0555, 0.055, 0.0545, 0.055, 0.0585, 0.058, 0.0577, 0.056, 0.0554, 0.056, 0.0564, 0.058, 0.0590, 0.06, 0.0611, 0.062, 0.0638, 0.065, 0.0685, 0.07, 0.0797, 0.09, + 0.1009, 0.11, 0.1222, 0.124, 0.1298, 0.127, 0.1257, 0.123, 0.1208, 0.12, 0.1164, 0.11, 0.1067, 0.1, 0.0954, 0.09, 0.0895, 0.088, 0.0862, 0.085, 0.0834, 0.082, + 0.0806, 0.08, 0.0782, 0.078, 0.0780, 0.078, 0.0789, 0.08, 0.0813, 0.084, 0.0858, 0.09, 0.0911, 0.092, 0.0944, 0.093, 0.0938, 0.092, 0.0914, 0.09, 0.0878, 0.086, + 0.0858, 0.09, 0.0903, 0.1, 0.1037, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuD17_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1980, 0.1, 0.0793, 0.06, 0.0578, 0.05, 0.0476, 0.046, 0.0454, 0.046, 0.0471, 0.048, 0.0499, 0.05, 0.0518, 0.052, 0.0533, 0.055, 0.0574, 0.06, 0.0676, 0.07, + 0.0897, 0.1, 0.1129, 0.113, 0.1140, 0.1, 0.0958, 0.08, 0.0743, 0.06, 0.0566, 0.05, 0.0422, 0.04, 0.0332, 0.03, 0.0297, 0.0295, 0.0292, 0.0293, 0.0294, 0.03, + 0.0306, 0.031, 0.0319, 0.032, 0.0339, 0.034, 0.0353, 0.036, 0.0363, 0.037, 0.0370, 0.037, 0.0372, 0.037, 0.0368, 0.0365, 0.0363, 0.036, + 0.0360, 0.037, 0.0376, 0.039, 0.0406, 0.042, 0.0448, 0.046, 0.0499, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuJ11_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1274, 0.1, 0.0916, 0.08, 0.0656, 0.061, 0.0604, 0.06, 0.0570, 0.06, 0.0604, 0.062, 0.0644, 0.065, 0.0668, 0.069, 0.0700, 0.072, 0.0754, 0.08, 0.0874, 0.1, + 0.1111, 0.12, 0.1327, 0.132, 0.1313, 0.12, 0.1127, 0.1, 0.0931, 0.08, 0.0758, 0.06, 0.0580, 0.05, 0.0449, 0.04, 0.0385, 0.037, 0.0360, 0.036, 0.0351, 0.035, + 0.0351, 0.0354, 0.0355, 0.036, 0.0371, 0.0375, 0.0379, 0.038, 0.0388, 0.04, 0.0406, 0.041, 0.0414, 0.0415, 0.0416, 0.041, 0.0409, 0.04, 0.0398, 0.0397, 0.0397, 0.04, + 0.0424, 0.043, 0.0458, 0.048, 0.0522, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::J570_NeuL4_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0348, 0.05, 0.0700, 0.09, 0.1043, 0.11, 0.1320, 0.14, 0.1505, 0.16, 0.1622, 0.17, 0.1721, 0.18, 0.1805, 0.185, 0.1877, 0.19, 0.1955, 0.2, 0.2068, 0.21, + 0.2226, 0.23, 0.2350, 0.235, 0.2352, 0.23, 0.2251, 0.22, 0.2128, 0.2, 0.1990, 0.18, 0.1761, 0.16, 0.1494, 0.13, 0.1296, 0.12, 0.1171, 0.11, 0.1089, 0.105, + 0.1010, 0.1, 0.0949, 0.093, 0.0926, 0.093, 0.0937, 0.095, 0.0961, 0.1, 0.1020, 0.11, 0.1104, 0.112, 0.1150, 0.115, 0.1155, 0.113, 0.1123, 0.11, + 0.1070, 0.105, 0.1040, 0.11, 0.1110, 0.12, 0.1323, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_n72_n2_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0116, 0.01, 0.0171, 0.05, 0.0625, 0.08, 0.1486, 0.16, 0.1963, 0.2, 0.2409, 0.26, 0.2974, 0.31, 0.3468, 0.36, 0.3790, 0.39, 0.4075, 0.41, 0.4216, 0.43, + 0.4399, 0.47, 0.4878, 0.50, 0.5589, 0.57, 0.5882, 0.57, 0.5566, 0.52, 0.5030, 0.46, 0.4451, 0.42, 0.3928, 0.37, 0.3625, 0.35, 0.3396, 0.29, 0.2670, 0.15, + 0.1028, 0.05, -0.0397, -0.08, -0.1151, -0.12, -0.1464, -0.15, -0.1582, -0.16, -0.1609, -0.16, -0.1581, -0.155, -0.1556, -0.156, + -0.1582, -0.16, -0.1621, -0.165, -0.1683, -0.17, -0.1719, -0.17, -0.1696, -0.165, -0.1623, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_10_n70_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0964, 0.1, 0.1534, 0.2, 0.2437, 0.33, 0.4663, 0.5, 0.6005, 0.65, 0.6958, 0.75, 0.8010, 0.83, 0.8598, 0.858, 0.8579, 0.85, 0.8432, 0.83, 0.8102, 0.79, + 0.7607, 0.7, 0.6760, 0.6, 0.5530, 0.5, 0.4212, 0.3, 0.2974, 0.2, 0.1839, 0.1, 0.0743, 0.03, -0.0208, -0.05, -0.0747, -0.08, -0.0913, -0.05, -0.0458, 0.03, + 0.0806, 0.1, 0.1936, 0.2, 0.2556, 0.27, 0.2816, 0.29, 0.2925, 0.3, 0.3033, 0.31, 0.3175, 0.32, 0.3257, 0.325, 0.3246, 0.32, + 0.3187, 0.31, 0.3082, 0.305, 0.3014, 0.304, 0.3059, 0.31, 0.3253, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_n33_n70_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0615, 0.1, 0.1219, 0.2, 0.2179, 0.3, 0.4397, 0.5, 0.5722, 0.6, 0.6714, 0.7, 0.7834, 0.8, 0.8535, 0.86, 0.8647, 0.864, 0.8642, 0.864, 0.8429, 0.82, + 0.8035, 0.75, 0.7316, 0.7, 0.6238, 0.55, 0.4996, 0.45, 0.3717, 0.3, 0.2487, 0.2, 0.1299, 0.06, 0.0272, 0.01, -0.0315, -0.04, -0.0557, -0.051, + -0.0519, -0.03, -0.0234, 0.001, 0.0041, 0.01, 0.0201, 0.021, 0.0269, 0.028, 0.0298, 0.03, 0.0371, 0.04, 0.0497, 0.05, 0.0578, 0.056, + 0.0557, 0.05, 0.0490, 0.04, 0.0374, 0.03, 0.0299, 0.03, 0.0348, 0.04, 0.0537, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_n8_n74_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0603, 0.08, 0.1069, 0.15, 0.1810, 0.25, 0.3573, 0.4, 0.4634, 0.5, 0.5406, 0.6, 0.6266, 0.65, 0.6772, 0.679, 0.6800, 0.68, 0.6732, 0.66, 0.6511, 0.63, + 0.6136, 0.6, 0.5444, 0.5, 0.4415, 0.4, 0.3317, 0.3, 0.2286, 0.2, 0.1336, 0.1, 0.0425, 0.01, -0.0360, -0.05, -0.0807, -0.09, -0.0967, -0.08, + -0.0761, -0.05, -0.0119, 0.02, 0.0462, 0.05, 0.0784, 0.08, 0.0919, 0.095, 0.0974, 0.1, 0.1046, 0.11, 0.1152, 0.12, 0.1217, 0.121, + 0.1205, 0.12, 0.1155, 0.11, 0.1067, 0.104, 0.1010, 0.103, 0.1047, 0.11, 0.1199, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_19_n69_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1281, 0.16, 0.1941, 0.24, 0.2982, 0.4, 0.5607, 0.65, 0.7192, 0.8, 0.8299, 0.9, 0.9517, 1.0, 1.0174, 1.014, 1.0115, 1.0, 0.9899, 0.96, 0.9475, 0.91, + 0.8877, 0.82, 0.7902, 0.7, 0.6508, 0.57, 0.5008, 0.45, 0.3595, 0.3, 0.2302, 0.15, 0.1049, 0.02, -0.0045, -0.03, -0.0662, -0.07, -0.0832, -0.05, -0.0161, 0.05, + 0.1648, 0.2, 0.3257, 0.37, 0.4137, 0.43, 0.4506, 0.46, 0.4661, 0.47, 0.4801, 0.49, 0.4974, 0.5, 0.5072, 0.505, 0.5062, 0.5, 0.4995, 0.49, 0.4876, 0.48, + 0.4799, 0.48, 0.4849, 0.49, 0.5081, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_n80_10_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0247, -0.01, -0.0057, 0.01, 0.0242, 0.05, 0.0736, 0.08, 0.0996, 0.1, 0.1281, 0.14, 0.1660, 0.19, 0.2037, 0.21, 0.2337, 0.25, 0.2618, 0.27, 0.2793, 0.29, + 0.3024, 0.32, 0.3564, 0.4, 0.4360, 0.44, 0.4788, 0.47, 0.4655, 0.45, 0.4308, 0.42, 0.3920, 0.37, 0.3564, 0.34, 0.3357, 0.32, 0.3167, 0.28, 0.2434, 0.1, + 0.0745, 0.01, -0.0725, -0.09, -0.1506, -0.18, -0.1831, -0.19, -0.1955, -0.195, -0.1995, -0.199, -0.1989, -0.198, + -0.1976, -0.198, -0.1999, -0.2, -0.2027, -0.208, -0.2070, -0.208, -0.2094, -0.208, -0.2080, -0.207, -0.2038, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_n80_26_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0325, -0.03, -0.0203, -0.01, -0.0012, 0.01, 0.0228, 0.03, 0.0332, 0.04, 0.0506, 0.06, 0.0762, 0.09, 0.1069, 0.12, 0.1370, 0.15, 0.1666, 0.17, 0.1877, 0.2, + 0.2174, 0.25, 0.2849, 0.33, 0.3849, 0.4, 0.4477, 0.45, 0.4509, 0.44, 0.4305, 0.42, 0.4049, 0.39, 0.3806, 0.37, 0.3664, 0.35, 0.3495, 0.29, 0.2724, 0.1, + 0.0921, 0.01, -0.0651, -0.09, -0.1489, -0.15, -0.1837, -0.19, -0.1970, -0.2, -0.2020, -0.202, -0.2029, -0.203, -0.2026, -0.204, + -0.2047, -0.205, -0.2069, -0.208, -0.2099, -0.21, -0.2115, -0.21, -0.2106, -0.209, -0.2086, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; /* * Name: XYZtoCorColorTemp.c @@ -1022,6 +2607,197 @@ void ColorTemp::cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, dou } +void ColorTemp::cieCAT02float(float Xw, float Yw, float Zw, float &CAM02BB00, float &CAM02BB01, float &CAM02BB02, float &CAM02BB10, float &CAM02BB11, float &CAM02BB12, float &CAM02BB20, float &CAM02BB21, float &CAM02BB22, float adap) +{ + +// CIECAT02 - J.Desmis January 2012 review September 2012 + const float whiteD50p[3] = {0.9646019585, 1.0, 0.8244507152}; //calculate with these tools + + float cam_dest[3] = {0., 0., 0.}; + float cam_orig[3] = {0., 0., 0.}; + const float CAT02[3][3] = {{0.7328, 0.4296, -0.1624},//CAT02 2002 + { -0.7036, 1.6975, 0.0061}, + {0.0030, 0.0136, 0.9834} + }; + const float INVCAT02[3][3] = {{1.09612382083551, -0.278869000218287, 0.182745179382773}, //Inverse CAT02 + {0.454369041975359, 0.4735331543070412, 0.0720978037172291}, + { -0.009627608738442936, -0.00569803121611342, 1.01532563995454} + }; + + float inv_white_orig[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + float intermed[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + + float intermed_2[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + float CAM02[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + float D = adap; + + //white destination Wd : RT use always D50 + cam_dest[0] = CAT02[0][0] * whiteD50p[0] + CAT02[0][1] * whiteD50p[1] + CAT02[0][2] * whiteD50p[2]; //Cone response RoD + cam_dest[1] = CAT02[1][0] * whiteD50p[0] + CAT02[1][1] * whiteD50p[1] + CAT02[1][2] * whiteD50p[2]; //GaD + cam_dest[2] = CAT02[2][0] * whiteD50p[0] + CAT02[2][1] * whiteD50p[1] + CAT02[2][2] * whiteD50p[2]; //BeD + + //origin white Ws : A, D65, custom, etc. + cam_orig[0] = CAT02[0][0] * Xw + CAT02[0][1] * Yw + CAT02[0][2] * Zw; //Cone response RoS + cam_orig[1] = CAT02[1][0] * Xw + CAT02[1][1] * Yw + CAT02[1][2] * Zw; + cam_orig[2] = CAT02[2][0] * Xw + CAT02[2][1] * Yw + CAT02[2][2] * Zw; + + //inverse white + inv_white_orig[0][0] = 1. / cam_orig[0]; // 1/RoS + inv_white_orig[1][1] = 1. / cam_orig[1]; // 1/GaS + inv_white_orig[2][2] = 1. / cam_orig[2]; // 1/BeS + + //intermediates computation + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3 ; j++) { + intermed[i][j] = inv_white_orig[i][i] * CAT02[i][j]; + } + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3 ; j++) { + intermed_2[i][j] = cam_dest[i] * intermed[i][j]; + } + + //and CAM02 + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + for (int k = 0; k < 3; k++) { + CAM02[i][j] += INVCAT02[i][k] * intermed_2[k][j]; + } + + //adaptation jdc : slightly different from CIECAM02 : Rc=(Yw(D/Rw)+(1-D))*R , but it's work ! true at 0 and 1 + CAM02[1][1] = (CAM02[1][1] - 1.0) * D + 1.0; + CAM02[0][0] = (CAM02[0][0] - 1.0) * D + 1.0; + CAM02[2][2] = (CAM02[2][2] - 1.0) * D + 1.0; +// CAM02[1][1] *= D; +// CAM02[0][0] *= D; +// CAM02[2][2] *= D; + CAM02[0][1] *= D; + CAM02[0][2] *= D; + CAM02[1][0] *= D; + CAM02[1][2] *= D; + CAM02[2][0] *= D; + CAM02[2][1] *= D; + //CAT02 matrix with D adaptation + CAM02BB00 = CAM02[0][0]; + CAM02BB01 = CAM02[0][1]; + CAM02BB02 = CAM02[0][2]; + CAM02BB10 = CAM02[1][0]; + CAM02BB11 = CAM02[1][1]; + CAM02BB12 = CAM02[1][2]; + CAM02BB20 = CAM02[2][0]; + CAM02BB21 = CAM02[2][1]; + CAM02BB22 = CAM02[2][2]; + +} + +void ColorTemp::icieCAT02float(float Xw, float Yw, float Zw, float &iCAM02BB00, float &iCAM02BB01, float &iCAM02BB02, float &iCAM02BB10, float &iCAM02BB11, float &iCAM02BB12, float &iCAM02BB20, float &iCAM02BB21, float &iCAM02BB22, float adap) +{ + +// CIECAT02 - J.Desmis January 2012 review September 2017 + const float whiteD50p[3] = {0.9646019585, 1.0, 0.8244507152}; //calculate with these tools + + float cam_dest[3] = {0., 0., 0.}; + float cam_orig[3] = {0., 0., 0.}; + const float CAT02[3][3] = {{0.7328, 0.4296, -0.1624},//CAT02 2002 + { -0.7036, 1.6975, 0.0061}, + {0.0030, 0.0136, 0.9834} + }; + const float INVCAT02[3][3] = {{1.09612382083551, -0.278869000218287, 0.182745179382773}, //Inverse CAT02 + {0.454369041975359, 0.4735331543070412, 0.0720978037172291}, + { -0.009627608738442936, -0.00569803121611342, 1.01532563995454} + }; + + float inv_white_orig[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + float intermed[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + + float intermed_2[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + float INVCAM02[3][3] = {{0., 0., 0.}, + {0., 0., 0.}, + {0., 0., 0.} + }; + float D = adap / 2.; + + //white destination Wd : RT use always D50 + cam_dest[0] = INVCAT02[0][0] * whiteD50p[0] + INVCAT02[0][1] * whiteD50p[1] + INVCAT02[0][2] * whiteD50p[2]; //Cone reponse RoD + cam_dest[1] = INVCAT02[1][0] * whiteD50p[0] + INVCAT02[1][1] * whiteD50p[1] + INVCAT02[1][2] * whiteD50p[2]; //GaD + cam_dest[2] = INVCAT02[2][0] * whiteD50p[0] + INVCAT02[2][1] * whiteD50p[1] + INVCAT02[2][2] * whiteD50p[2]; //BeD + + //origin white Ws : A, D65, custom, etc. + cam_orig[0] = INVCAT02[0][0] * Xw + INVCAT02[0][1] * Yw + INVCAT02[0][2] * Zw; //Cone reponse RoS + cam_orig[1] = INVCAT02[1][0] * Xw + INVCAT02[1][1] * Yw + INVCAT02[1][2] * Zw; + cam_orig[2] = INVCAT02[2][0] * Xw + INVCAT02[2][1] * Yw + INVCAT02[2][2] * Zw; +// cam_orig[0] = CAT02[0][0] * Xw + CAT02[0][1] * Yw + CAT02[0][2] * Zw; //Cone reponse RoS +// cam_orig[1] = CAT02[1][0] * Xw + CAT02[1][1] * Yw + CAT02[1][2] * Zw; + // cam_orig[2] = CAT02[2][0] * Xw + CAT02[2][1] * Yw + CAT02[2][2] * Zw; + + //inverse white + inv_white_orig[0][0] = 1. / cam_orig[0]; // 1/RoS + inv_white_orig[1][1] = 1. / cam_orig[1]; // 1/GaS + inv_white_orig[2][2] = 1. / cam_orig[2]; // 1/BeS + + //intermediates computation + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3 ; j++) { + // intermed[i][j] = inv_white_orig[i][i] * INVCAT02[i][j]; + intermed[i][j] = inv_white_orig[i][i] * CAT02[i][j]; + } + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3 ; j++) { + intermed_2[i][j] = cam_dest[i] * intermed[i][j]; + } + + //and CAM02 + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + for (int k = 0; k < 3; k++) { + INVCAM02[i][j] += INVCAT02[i][k] * intermed_2[k][j]; + } + + //adaptation jdc : slightly different from CIECAM02 : Rc=(Yw(D/Rw)+(1-D))*R , but it's work ! true at 0 and 1 + INVCAM02[0][0] = (INVCAM02[0][0] - 1.0) * D + 1.0; + INVCAM02[2][2] = (INVCAM02[2][2] - 1.0) * D + 1.0; + INVCAM02[0][1] *= D; + INVCAM02[0][2] *= D; + INVCAM02[1][0] *= D; + INVCAM02[1][2] *= D; + INVCAM02[2][0] *= D; + INVCAM02[2][1] *= D; + //CAT02 matrix with D adaptation + iCAM02BB00 = INVCAM02[0][0]; + iCAM02BB01 = INVCAM02[0][1]; + iCAM02BB02 = INVCAM02[0][2]; + iCAM02BB10 = INVCAM02[1][0]; + iCAM02BB11 = INVCAM02[1][1]; + iCAM02BB12 = INVCAM02[1][2]; + iCAM02BB20 = INVCAM02[2][0]; + iCAM02BB21 = INVCAM02[2][1]; + iCAM02BB22 = INVCAM02[2][2]; + +} + + void ColorTemp::temp2mulxyz (double temp, const std::string &method, double &Xxyz, double &Zxyz) { double x, y, z; @@ -1645,6 +3421,452 @@ double ColorTemp::daylight_spect(double wavelength, double m1, double m2) return (s0[wlm] + m1 * s1[wlm] + m2 * s2[wlm]); } +//tempxy : return x and y of xyY for 200 or more refreence color, and for T temperature from 2000K to 12000K +// we can change step for temperature and increase number for T > 7500K if necessary +//these values Temp, x, y are references for all calculations and very precise. +//copyright J.Desmis august 2017 and june 2018 +void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar) +{ + const double* spec_colorforxcyc[] = {//color references + JDC468_BluH10_spect, JDC468_BluD6_spect, ColorchechCyaF3_spect, JDC468_BluM5_spect, // 0 3 + ColorGreenM25_spect, JDC468_GreK7_spect, ColabSky42_0_m24_spect, ColabSky60_0_m31_spect, ColorchechBluC150_m5_m22_spect,//8 + JDC468_GreQ7_spect, ColorchechDCBluN881_m7_m14_spect, ColorchechGreB3_spect, ColorchechPurD2_spect, //12 + ColorchechSGBlaN3_6_spect, ColorchechGraC4_67_spect, JDC468_K15_87greyspect,//15 + JDC468_GraK14_44_spect, ColorGreenalsi_spect, Fictif_61greyspect, ColorchechGreD1_spect,//19 + ColorchechWhiA496_spect, JDC468_GreA10_spect, JDC468_GreI8_spect,//22 + ColabSkin91_4_14_spect, JDC468_PurE24_spect, //24 + ColorchechSGSkiK285_11_17_spect, ColorchechGreE2_spect, ColorchechMagE3_spect, //27 + ColorchechSkiB166_18_18_spect, ColabSkin70_7_32_spect, ColorchechSGSkiF763_14_26_spect,//30 + ColorchechSkiA138_13_14_spect, ColabSkin57_22_18_spect, JDC468_YelN10_spect,//33 + ColabSkin35_15_17_spect, ColabSkin40_17_17_spect, ColorRedkurttu_spect, ColorYellowkeltano_spect, ColorchechYelD3_spect, JDC468_OraO18_spect,//39 + JDC468_GreN7_spect, JDC468_RedG21va_spect, JDC468_OraD17_spect,//42 + ColorchechredC3_spect, JDC468_RedI9_spect, ColorRedpetunia_spect, ColorchechOraA2_spect,//46 + ColabSkin87_8_8_spect, ColabSkin89_8_21_spect, ColabSkin75_8_4_spect, ColabSkin75_10_33_spect,//50 + ColabSkin65_33_11_spect, ColabSkin65_7_24_spect, ColabSkin57_19_6_spect, ColabSkin57_4_19_spect, ColabSkin57_10_28_spect, ColabSkin40_17_6_spect,//56 + ColabSkin26_18_18_spect, ColabSkin90_m1_20_spect, ColorRedlupiini_spect, ColorRedhevosminttu_spect, //60 + ColorRedneilikka_spect, ColorRedpelagornia_spect, ColorRedtalvio_spect, ColorBrownpoimulehti_spect, ColorOrangetuntematon_spect,//65 + ColorOrangetlehmus_spect, ColorOrangvaahtera_spect, ColorBrownlehmus_spect, ColorBrownuotiosammal_spect,//69 + ColorBlacksoil_spect, ColorGraynahjajaekaelae_spect, //71 + ColorGreennuotisammal_spect, ColorGreenleskenlehti_spect, ColorGreenlinnunkaali_spect, //74 + ColorGreenpelto_spect, ColorGreenrodvoikukka, ColorGreenlehmus, ColorGreenlinden, ColorYellowlehmus, ColorYellowsuikeroalpi, //80 + ColorYellowpensashanhikki1, ColorYellowpensashanhikki2, ColorBluehiidenvirna, ColorBluekurkkuyrtti, //84 + ColorPinksiankaersaemoe, ColorVioletharakankello, ColorVioletalsikeapila, ColorVioletakilleija, ColorOrangekehaekukka,//89 + ColorRedpihlaja, ColorVioletpetunia, ColorVioletorvokki, ColorBluesinisievikki, ColorBlueiisoppi, ColorBluelobelia, //95 + ColorWhiteojaka, ColorWhitepetunia, ColorWhitepelargonia, ColorWhitepaeivaen, JDC468_B14_75Redspect,//100 + ColorGreenkoriste, ColorGreenpoimulehti, ColorGreenhopeapaju, //103 + ColorReduuden, ColorRedpajuan, ColorRedjaloan, ColorBlueukon, ColorBlueorvokki, ColorBluemalvikki, //109 + ColorBlackmaito, ColorOrangpihlaja, ColorBlackpihlaja, //112 + ColorViolA1_spect, ColorViolA4_spect, ColorViolA6_spect, ColorBlueSkyK3_spect, ColorBlueSkyK9_spect, //117 + ColorBlueSkyC4_spect, ColorBlueSkyC14_spect, ColorBlueSkyE4_spect, //120 + ColorBlueSkyM1_spect, ColorBlueSky2B1_spect, ColorBlueSkyT7_spect, //123 + ColorBlueSkyU19_spect, ColorBlueSkyU2_spect, ColorBlueSkyT17_spect, //126 + ColorBlackM8_spect, ColorBlackM12_spect, ColorBlackM13_spect, ColorWhite2B12_spect, ColorWhite2B14_spect, //131 + JDC468_Blackred97_spect, JDC468_Blackredbl443_spect, JDC468_Blackbl27_spect, JDC468_Blackbl28_spect, //135 + JDC468_Blackgr214_spect, JDC468_Blackbl436_spect, JDC468_Whitebl455_spect, JDC468_Blackvio101_spect, JDC468_Whitebl92_spect, JDC468_Greyredbl94_spect, //141 + JDC468_Blue32_spect, JDC468_Blue236_spect, JDC468_Gre300_spect, //144 + JDC468_Blue340_spect, JDC468_Gree110_spect, JDC468_Gree457_spect, JDC468_Yel241_spect, JDC468_Ora321_spect, JDC468_Yellow353_spect, JDC468_Mag465_spect, //151 + JDC468_Mag333_spect, JDC468_Mag203_spect, J570_BlueB6_spect, J570_BlueB15_spect, J570_BlueC2_spect, J570_BlueC14_spect, J570_BlueC16_spect,//158 + J570_BlueF1_spect, J570_BlueF2_spect, J570_BlueF10_spect, J570_BlueF13_spect, J570_BlueG9_spect, J570_BlueG19_spect, J570_BlueI5_spect,//165 + J570_BlueI3_spect, J570_BlueI19_spect, J570_BlueJ4_spect, J570_BlueJ6_spect, J570_BlueJ11_spect, J570_BlueK5_spect, //171 + J570_BlueN1_spect, J570_BlueN4_spect, J570_BlueO19_spect, J570_BlueU8_spect, J570_NeuN8_spect,//176 + J570_NeuN9_spect, J570_NeuO8_spect, J570_NeuO11_spect, J570_NeuD5_spect,//180 + J570_NeuE11_spect, J570_NeuK16_spect, J570_NeuM3_spect, J570_NeuN18_spect, + J570_NeuQ1_spect, J570_NeuS7_spect, + J570_NeuV10_spect, J570_NeuW18_spect, J570_NeuZ14_spect, //189 + J570_NeuC18_spect, J570_NeuD17_spect, J570_NeuJ11_spect, J570_NeuL4_spect, Colorlab_n72_n2_spect, + Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect + }; + + + typedef struct WbTxyz { + double Tem; + double XX; + double ZZ; + } WbTxyz; + //probbaly can be "passed" with rawimagesource.cc but I don't know how to do. + WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after + {2001., 1.273842, 0.145295}, + {2101., 1.244008, 0.167533}, + {2201., 1.217338, 0.190697}, + {2301., 1.193444, 0.214632}, + {2401., 1.171996, 0.239195}, + {2501., 1.152883, 0.264539}, + {2605., 1.134667, 0.290722}, + {2655., 1.126659, 0.303556}, + {2705., 1.119049, 0.316446}, + {2755., 1.111814, 0.329381}, + {2803., 1.105381, 0.342193}, + {2856., 1.098258, 0.355599}, + {2910., 1.091550, 0.369645}, + {2960., 1.085649, 0.382655}, + {3003., 1.080982, 0.394258}, + {3050., 1.075727, 0.406057}, + {3103., 1.070277, 0.419815}, + {3153., 1.065384, 0.432769}, + {3203., 1.060906, 0.446161}, + {3250., 1.056535, 0.457806}, + {3303., 1.052034, 0.471422}, + {3353., 1.047990, 0.484218}, + {3400., 1.044547, 0.496719}, + {3450., 1.040667, 0.508891}, + {3500., 1.037145, 0.521523}, + {3550., 1.033783, 0.534090}, + {3600., 1.030574, 0.546590}, + {3650., 1.027510, 0.559020}, + {3699., 1.024834, 0.571722}, + {3801., 1.019072, 0.596102}, + {3851., 1.016527, 0.608221}, + {3902., 1.014244, 0.621136}, + {3952., 1.011729, 0.632447}, + {4002., 0.996153, 0.609518}, + {4052., 0.993720, 0.620805}, + {4102., 0.993908, 0.631520}, + {4152., 0.989179, 0.643262}, + {4202., 0.989283, 0.653999}, + {4252., 0.985039, 0.665536}, + {4302., 0.985067, 0.676288}, + {4352., 0.981271, 0.687599}, + {4402., 0.981228, 0.698349}, + {4452., 0.977843, 0.709425}, + {4502., 0.977736, 0.720159}, + {4552., 0.974728, 0.730993}, + {4602., 0.974562, 0.741698}, + {4652., 0.971899, 0.752284}, + {4702., 0.971681, 0.762949}, + {4752., 0.969335, 0.773285}, + {4802., 0.969069, 0.783899}, + {4827., 0.967570, 0.788836}, + {4852., 0.967011, 0.793982}, + {4877., 0.966465, 0.799108}, + {4902., 0.965933, 0.804214}, + {4927., 0.965414, 0.809229}, + {4952., 0.964908, 0.814366}, + {4977., 0.964415, 0.819412}, + {5002., 0.963934, 0.824438}, + {5027., 0.963465, 0.829444}, + {5052., 0.963008, 0.834429}, + {5077., 0.962563, 0.839395}, + {5102., 0.962129, 0.844339}, + {5127., 0.961706, 0.849263}, + {5152., 0.961294, 0.854166}, + {5177., 0.960893, 0.859049}, + {5202., 0.960501, 0.863911}, + {5252., 0.959749, 0.873572}, + {5302., 0.959313, 0.883815}, + {5352., 0.958361, 0.892644}, + {5402., 0.957903, 0.902793}, + {5452., 0.957116, 0.911379}, + {5502., 0.956639, 0.921431}, + {5552., 0.956002, 0.929779}, + {5602., 0.955509, 0.939728}, + {5652., 0.955008, 0.947842}, + {5702., 0.954502, 0.957685}, + {5752., 0.954124, 0.965569}, + {5802., 0.953608, 0.975303}, + {5852., 0.953342, 0.982963}, + {5902., 0.952818, 0.992584}, + {5952., 0.952652, 1.000025}, + {6002., 0.952122, 1.009532}, + {6052., 0.952047, 1.016759}, + {6102., 0.951514, 1.026149}, + {6152., 0.951520, 1.033168}, + {6202., 0.950985, 1.042439}, + {6252., 0.951064, 1.049256}, + {6302., 0.950530, 1.058406}, + {6352., 0.950674, 1.065027}, + {6402., 0.950143, 1.074055}, + {6452., 0.950345, 1.080484}, + {6502., 0.950201, 1.088097}, + {6552., 0.950070, 1.095633}, + {6602., 0.949952, 1.103094}, + {6652., 0.949846, 1.110479}, + {6702., 0.949752, 1.119138}, + {6752., 0.949668, 1.125027}, + {6802., 0.949596, 1.132190}, + {6902., 0.949033, 1.147691}, + {7002., 0.949402, 1.160129}, + {7152., 0.949348, 1.180429}, + {7301., 0.948896, 1.201432}, + {7451., 0.949434, 1.219076}, + {7601., 0.949099, 1.239061}, + {7751., 0.949729, 1.255559}, + {7901., 0.949498, 1.274460}, + {8151., 0.950361, 1.300912}, + {8301., 0.950253, 1.318464}, + {8451., 0.950966, 1.332651}, + {8601., 0.950941, 1.349261}, + {8801., 0.951772, 1.367421}, + {9001., 0.951969, 1.387639}, + {9201., 0.952784, 1.404422}, + {9401., 0.953081, 1.423213}, + {9901., 0.954537, 1.464134}, + {10501., 0.956321, 1.508623}, + {11001., 0.957747, 1.541281}, + {12001., 0.960440, 1.601019} + }; + + int N_c = sizeof(spec_colorforxcyc) / sizeof(spec_colorforxcyc[0]); //number of color + int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point + typedef struct XYZref { + double Xref; + double Yref; + double Zref; + } XYZref; + XYZref Refxyz[N_c + 1]; + typedef struct XYZrefcat02 { + double Xrefcat; + double Yrefcat; + double Zrefcat; + } XYZrefcat02; + XYZrefcat02 Refxyzcat02[N_c + 1]; + + for (int i = 0; i < N_c; i++) { + Refxyz[i].Xref = 0.f; + Refxyz[i].Yref = 0.f; + Refxyz[i].Zref = 0.f; + Refxyzcat02[i].Xrefcat = 0.f; + Refxyzcat02[i].Yrefcat = 0.f; + Refxyzcat02[i].Zrefcat = 0.f; + } + + + struct chrom { + float chroab; + float chroa; + float chrob; + int nn; + float L; + bool operator()(const chrom& lchro, const chrom& rchro) + { + return lchro.chroab < rchro.chroab; + } + + } ; + + // chrom wbchro[N_c + 1]; + + double tempw = 5000.; + + if (separated) { + tempw = Txyz[repref].Tem; + // tempw = 5004.; + + if (tempw <= INITIALBLACKBODY) { + // float aa = 0.f; + // float bb = 0.f; + + for (int i = 0; i < N_c; i++) { + spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, TX[i], TY[i], TZ[i]); + /* float XX = TX[i] * 65535.f; + float YY = TY[i] * 65535.f; + float ZZ = TZ[i] * 65535.f; + float L, a, b; + Color::XYZ2Lab(XX, YY, ZZ, L, a, b);//only to see Lab values in console + printf("N=%i L=%f a=%f b=%f\n", i, L / 327.68f, a / 327.68f, b / 327.68f); + aa += (a / 327.68f); + bb += (b / 327.68f); + */ + } + + /* + aa /= N_c; + bb /= N_c; + printf("aa=%f bb=%f\n", aa, bb); + */ + // } + + } else { + double m11, m22, x_DD, y_DD, interm2; + + if (tempw <= 7000) { + x_DD = -4.6070e9 / (tempw * tempw * tempw) + 2.9678e6 / (tempw * tempw) + 0.09911e3 / tempw + 0.244063; + } else { + x_DD = -2.0064e9 / (tempw * tempw * tempw) + 1.9018e6 / (tempw * tempw) + 0.24748e3 / tempw + 0.237040; + } + + y_DD = -3.0 * x_DD * x_DD + 2.87 * x_DD - 0.275; + //calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D + //S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda) + interm2 = (0.0241 + 0.2562 * x_DD - 0.734 * y_DD); + m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; + m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; + // float aa = 0.f; + // float bb = 0.f; + + for (int i = 0; i < N_c; i++) { + spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, TX[i], TY[i], TZ[i]); + +/* float XX = TX[i] * 65535.f; + float YY = TY[i] * 65535.f; + float ZZ = TZ[i] * 65535.f; + float L, a, b; + Color::XYZ2Lab(XX, YY, ZZ, L, a, b);//only to see Lab values in console + // printf("N=%i L=%f a=%f b=%f\n", i, L / 327.68f, a / 327.6 8f, b / 327.68f); + aa += (a / 327.68f); + bb += (b / 327.68f); + wbchro[i].chroab = (sqrt(SQR(a) + SQR(b))) / 327.68f; + wbchro[i].chroa = a / 327.68f; + wbchro[i].chrob = b / 327.68f; + wbchro[i].nn = i; +*/ + + + } +/* + std::sort(wbchro, wbchro + N_c + 1, wbchro[0]); + float ab5 = 0.f; + int n5 = 0; + float ab15 = 0.f; + int n15 = 0; + float ab30 = 0.f; + int n30 = 0; + float ab50 = 0.f; + int n50 = 0; + float ab70 = 0.f; + int n70 = 0; + float ab120 = 0.f; + int n120 = 0; + + for (int i = 0; i < N_c; i++) { + if (wbchro[i].chroab < 5.f) { + ab5 += (wbchro[i].chroa + wbchro[i].chrob); + n5++; + } else if (wbchro[i].chroab < 15.f) { + ab15 += (wbchro[i].chroa + wbchro[i].chrob); + n15++; + } else if (wbchro[i].chroab < 30.f) { + ab30 += (wbchro[i].chroa + wbchro[i].chrob); + n30++; + } else if (wbchro[i].chroab < 50.f) { + ab50 += (wbchro[i].chroa + wbchro[i].chrob); + n50++; + } else if (wbchro[i].chroab < 70.f) { + ab70 += (wbchro[i].chroa + wbchro[i].chrob); + n70++; + } else if (wbchro[i].chroab < 120.f) { + ab120 += (wbchro[i].chroa + wbchro[i].chrob); + n120++; + } + + printf("N=%i nn=%i chr=%f cha=%f chb=%f\n", i, wbchro[i].nn, wbchro[i].chroab, wbchro[i].chroa, wbchro[i].chrob); + } + + printf("ab5=%f n5=%i\n", ab5 / n5, n5); + printf("ab15=%f n15=%i\n", ab15 / n15, n15); + printf("ab30=%f n30=%i\n", ab30 / n30, n30); + printf("ab50=%f n50=%i\n", ab50 / n50, n50); + printf("ab70=%f n70=%i\n", ab70 / n70, n70); + printf("ab120=%f n120=%i\n", ab120 / n120, n120); + aa /= N_c; + bb /= N_c; + printf("aa=%f bb=%f\n", aa, bb); + //very low 15 --, 16 -+, 17 + -, 18 +-, 20 ++, 22 -+, 73 ++, 98 ++, 99 -+, 101 -+, 129 ++, 130 -+, 131 --, + //low 8 +-, 9 --, 10 --, 12 --, 19 -+, 21 -+, 24 -+, 25 ++, 27 ++, 30 ++, 33++, 34 ++, 36 ++, 37++,38 +-, + */ + } + } + + if (!separated) { + // std::string wbcat02Method = wbpar.wbcat02Method; + std::string wbcat02Method = "none"; + + for (int tt = 0; tt < N_t; tt++) { + tempw = Txyz[tt].Tem; + + if (tempw <= INITIALBLACKBODY) { + + for (int i = 0; i < N_c; i++) { + spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref); + } + + } else { + double m11, m22, x_DD, y_DD, interm2; + + if (tempw <= 7000) { + x_DD = -4.6070e9 / (tempw * tempw * tempw) + 2.9678e6 / (tempw * tempw) + 0.09911e3 / tempw + 0.244063; + } else { + x_DD = -2.0064e9 / (tempw * tempw * tempw) + 1.9018e6 / (tempw * tempw) + 0.24748e3 / tempw + 0.237040; + } + + y_DD = -3.0 * x_DD * x_DD + 2.87 * x_DD - 0.275; + //calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D + //S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda) + interm2 = (0.0241 + 0.2562 * x_DD - 0.734 * y_DD); + m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; + m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; + + for (int i = 0; i < N_c; i++) { + spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref); + } + } + +//CAT02 + + float CAM02BB00 = 1.0, CAM02BB01 = 1.0, CAM02BB02 = 1.0, CAM02BB10 = 1.0, CAM02BB11 = 1.0, CAM02BB12 = 1.0, CAM02BB20 = 1.0, CAM02BB21 = 1.0, CAM02BB22 = 1.0; //for CIECAT02 + float Xwb = Txyz[tt].XX; + float Ywb = 1.; + float Zwb = Txyz[tt].ZZ; + + if (wbcat02Method == "icam") {//not used + icieCAT02float(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, 1.0); + } + + if (wbcat02Method == "cam") { + + cieCAT02float(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, 1.0); + } + + if (wbcat02Method == "none") { + + for (int i = 0; i < N_c; i++) { + Refxyzcat02[i].Xrefcat = CAM02BB00 * Refxyz[i].Xref + CAM02BB01 * Refxyz[i].Yref + CAM02BB02 * Refxyz[i].Zref ; + Refxyzcat02[i].Yrefcat = CAM02BB10 * Refxyz[i].Xref + CAM02BB11 * Refxyz[i].Yref + CAM02BB12 * Refxyz[i].Zref ; + Refxyzcat02[i].Zrefcat = CAM02BB20 * Refxyz[i].Xref + CAM02BB21 * Refxyz[i].Yref + CAM02BB22 * Refxyz[i].Zref; + } + } + +//end CAT02 + + for (int i = 0; i < N_c; i++) { + /* float X = 65535.f * Refxyzcat02[i].Xrefcat; + float Y = 65535.f * Refxyzcat02[i].Yrefcat; + float Z = 65535.f * Refxyzcat02[i].Zrefcat; + float L, a, b; + Color::XYZ2Lab(X, Y, Z, L, a, b); + + double som = (Refxyzcat02[i].Xrefcat + Refxyzcat02[i].Yrefcat + Refxyzcat02[i].Zrefcat); + L /= 327.68f; + a /= 327.68f; + b /= 327.68f; + Ta[i][tt] = a; + Tb[i][tt] = b; + TL[i][tt] = L; + TX[i][tt] = X; + TY[i][tt] = Y; + TZ[i][tt] = Z; + */ + //som = 1.; +// Tx[i][tt] = (float) Refxyz[i].Xref; +// Ty[i][tt] = (float) Refxyz[i].Yref; +// Tz[i][tt] = (float) Refxyz[i].Zref; + +// if (wbpar.wbcat02Method == "none") { + if (wbcat02Method == "none") { + + Tx[i][tt] = (float) Refxyz[i].Xref; + Ty[i][tt] = (float) Refxyz[i].Yref; + Tz[i][tt] = (float) Refxyz[i].Zref; + } else { + Tx[i][tt] = (float) Refxyzcat02[i].Xrefcat; + Ty[i][tt] = (float) Refxyzcat02[i].Yrefcat; + Tz[i][tt] = (float) Refxyzcat02[i].Zrefcat; + } + + } + } + } +} + } diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index d529d844e..1c50f282a 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -22,6 +22,7 @@ #include #include #include +#include "procparams.h" namespace rtengine { @@ -54,6 +55,7 @@ public: explicit ColorTemp (double e) : temp(-1.), green(-1.), equal (e), method("Custom") {} ColorTemp (double t, double g, double e, const std::string &m); ColorTemp (double mulr, double mulg, double mulb, double e); + static void tempxy(bool separated, int &repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar); void update (const double rmul, const double gmul, const double bmul, const double equal, const double tempBias=0.0) { @@ -96,6 +98,8 @@ public: static void temp2mulxyz (double tem, const std::string &method, double &Xxyz, double &Zxyz); static void cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, double &CAM02BB01, double &CAM02BB02, double &CAM02BB10, double &CAM02BB11, double &CAM02BB12, double &CAM02BB20, double &CAM02BB21, double &CAM02BB22, double adap ); + static void cieCAT02float(float Xw, float Yw, float Zw, float &CAM02BB00, float &CAM02BB01, float &CAM02BB02, float &CAM02BB10, float &CAM02BB11, float &CAM02BB12, float &CAM02BB20, float &CAM02BB21, float &CAM02BB22, float adap); + static void icieCAT02float(float Xw, float Yw, float Zw, float &iCAM02BB00, float &iCAM02BB01, float &iCAM02BB02, float &iCAM02BB10, float &iCAM02BB11, float &iCAM02BB12, float &iCAM02BB20, float &iCAM02BB21, float &iCAM02BB22, float adap); bool operator== (const ColorTemp& other) const { @@ -163,6 +167,125 @@ public: static const double ColorchechGreD1_spect[97]; static const double ColorchechSGBlaN3_6_spect[97];//ColorChecker SG N3 static const double JDC468_GraK14_44_spect[97];//468 K14 + static const double JDC468_BluM5_spect[97]; //468 M5 + static const double JDC468_BluD6_spect[97]; //468 D6 + static const double JDC468_BluF4_spect[97]; //468 F4 + static const double JDC468_RedG21va_spect[97]; //468 G21 modifié + static const double JDC468_RedI9_spect[97]; //468 I9 + static const double JDC468_GreI8_spect[97]; //468 I8 + static const double JDC468_GreQ7_spect[97]; //468 Q7 + static const double ColorGreenM25_spect[97]; + static const double ColorYellowkeltano_spect[97]; + static const double ColorGreenalsi_spect[97]; + static const double ColorRedpetunia_spect[97]; + static const double ColorRedkurttu_spect[97]; + static const double ColorRedlupiini_spect[97]; + static const double ColorRedhevosminttu_spect[97]; + static const double ColorRedneilikka_spect[97]; + static const double ColorRedpelagornia_spect[97]; + static const double ColorRedtalvio_spect[97]; + static const double ColorBrownpoimulehti_spect[97]; + static const double ColorOrangetuntematon_spect[97]; + static const double ColorOrangetlehmus_spect[97]; + static const double ColorOrangvaahtera_spect[97]; + static const double ColorBrownlehmus_spect[97]; + static const double ColorBrownuotiosammal_spect[97]; + static const double ColorBlacksoil_spect[97]; + static const double ColorGraynahjajaekaelae_spect[97]; + static const double ColorGreennuotisammal_spect[97]; + static const double ColorGreenleskenlehti_spect[97]; + static const double ColorGreenlinnunkaali_spect[97]; + static const double ColorGreenpelto_spect[97]; + static const double ColorGreenrodvoikukka[97]; + static const double ColorGreenlehmus[97]; + static const double ColorGreenlinden[97]; + static const double ColorYellowlehmus[97]; + static const double ColorYellowsuikeroalpi[97]; + static const double ColorYellowpensashanhikki1[97]; + static const double ColorYellowpensashanhikki2[97]; + static const double ColorBluehiidenvirna[97]; + static const double ColorBluekurkkuyrtti[97]; + static const double ColorPinksiankaersaemoe[97]; + static const double ColorVioletharakankello[97]; + static const double ColorVioletalsikeapila[97]; + static const double ColorVioletakilleija[97]; + static const double ColorOrangekehaekukka[97]; + static const double ColorRedpihlaja[97]; + static const double ColorVioletpetunia[97]; + static const double ColorVioletorvokki[97]; + static const double ColorBluesinisievikki[97]; + static const double ColorBlueiisoppi[97]; + static const double ColorBluelobelia[97]; + static const double ColorWhiteojaka[97]; + static const double ColorWhitepetunia[97]; + static const double ColorWhitepelargonia[97]; + static const double ColorWhitepaeivaen[97]; + static const double JDC468_B14_75Redspect[97]; + static const double Colorblue_spect[97]; + static const double ColorGreenkoriste[97]; + static const double ColorGreenpoimulehti[97]; + static const double ColorGreenhopeapaju[97]; + static const double ColorReduuden[97]; + static const double ColorRedpajuan[97]; + static const double ColorRedjaloan[97]; + static const double ColorBlueukon[97]; + static const double ColorBlueorvokki[97]; + static const double ColorBluemalvikki[97]; + static const double ColorBlackmaito[97]; + static const double ColorOrangpihlaja[97]; + static const double ColorBlackpihlaja[97]; + static const double ColorViolA1_spect[97]; + static const double ColorViolA4_spect[97]; + static const double ColorViolA6_spect[97]; + static const double ColorBlueSkyK3_spect[97]; + static const double ColorBlueSkyK9_spect[97]; + static const double ColorBlueSkyC4_spect[97]; + static const double ColorBlueSkyC14_spect[97]; + static const double ColorBlueSkyE4_spect[97]; + static const double ColorBlueSkyM1_spect[97]; + static const double ColorBlueSky2B1_spect[97]; + static const double ColorBlueSkyT7_spect[97]; + static const double ColorBlueSkyU19_spect[97]; + static const double ColorBlueSkyU2_spect[97]; + static const double ColorBlueSkyT17_spect[97]; + static const double ColorBlackM8_spect[97]; + static const double ColorBlackM12_spect[97]; + static const double ColorBlackM13_spect[97]; + static const double ColorWhite2B12_spect[97]; + static const double ColorWhite2B14_spect[97]; + static const double JDC468_Blackred97_spect[97]; + static const double JDC468_Blackredbl443_spect[97]; + static const double JDC468_Blackbl27_spect[97]; + static const double JDC468_Blackbl28_spect[97]; + static const double JDC468_Blackgr214_spect[97]; + static const double JDC468_Blackbl436_spect[97]; + static const double JDC468_Whitebl455_spect[97]; + static const double JDC468_Blackvio101_spect[97]; + static const double JDC468_Whitebl92_spect[97]; + static const double JDC468_Greyredbl94_spect[97]; + static const double JDC468_Blue32_spect[97]; + static const double JDC468_Blue236_spect[97]; + static const double JDC468_Gre300_spect[97]; + static const double JDC468_Blue340_spect[97]; + static const double JDC468_Gree110_spect[97]; + static const double JDC468_Gree457_spect[97]; + static const double JDC468_Yel241_spect[97]; + static const double JDC468_Ora321_spect[97]; + static const double JDC468_Yellow353_spect[97]; + static const double JDC468_Mag465_spect[97]; + static const double JDC468_Mag333_spect[97]; + static const double JDC468_Mag203_spect[97]; + + + static const double JDC468_OraO18_spect[97]; //468 O18 + static const double JDC468_OraD17_spect[97]; //468 D17 + static const double Fictif_61greyspect[97];//468 K15 + static const double JDC468_K15_87greyspect[97]; + static const double JDC468_YelN10_spect[97]; //468 N10 + static const double JDC468_GreN7_spect[97]; //468 N7 + static const double JDC468_GreA10_spect[97]; //468 A10 + static const double JDC468_GreK7_spect[97]; //468 K7 + static const double JDC468_PurE24_spect[97]; //468 E24 static const double JDC468_BluH10_spect[97];//468 H10 static const double ColabSkin35_15_17_spect[97];//Skin L 35 static const double ColabSkin57_22_18_spect[97];//Skin L 57 @@ -196,6 +319,55 @@ public: static const double ColabSkin70_7_32_spect[97];//Skin L 77 static const double ColabSky60_0_m31_spect[97];//Sky L=60 static const double ColabSky42_0_m24_spect[97];//Sky L=42 + static const double J570_BlueB6_spect[97];//blue Cyan + static const double J570_BlueB15_spect[97];//blue Cyan + static const double J570_BlueC2_spect[97];//blue Cyan + static const double J570_BlueC14_spect[97];//blue Cyan + static const double J570_BlueC16_spect[97];//blue Cyan + static const double J570_BlueF1_spect[97];//blue Cyan + static const double J570_BlueF2_spect[97];//blue Cyan + static const double J570_BlueF10_spect[97];//blue Cyan + static const double J570_BlueF13_spect[97];//blue Cyan + static const double J570_BlueG9_spect[97];//blue Cyan + static const double J570_BlueG19_spect[97];//blue Cyan + static const double J570_BlueI5_spect[97];//blue Cyan + static const double J570_BlueH15_spect[97];//blue Cyan + static const double J570_BlueI3_spect[97];//blue Cyan + static const double J570_BlueI19_spect[97];//blue Cyan + static const double J570_BlueJ4_spect[97];//blue Cyan + static const double J570_BlueJ6_spect[97];//blue Cyan + static const double J570_BlueJ11_spect[97];//blue Cyan + static const double J570_BlueJ13_spect[97];//blue Cyan + static const double J570_BlueK5_spect[97];//blue Cyan + static const double J570_BlueN1_spect[97];//blue Cyan + static const double J570_BlueN4_spect[97];//blue Cyan + static const double J570_BlueO19_spect[97];//blue Cyan + static const double J570_BlueU8_spect[97];//blue Cyan + static const double J570_NeuN8_spect[97];//neutral + static const double J570_NeuN9_spect[97];//neutral + static const double J570_NeuO8_spect[97];//neutral + static const double J570_NeuO11_spect[97];//neutral + static const double J570_NeuD5_spect[97];//neutral + static const double J570_NeuE11_spect[97];//neutral + static const double J570_NeuK16_spect[97];//neutral + static const double J570_NeuM3_spect[97];//neutral + static const double J570_NeuN18_spect[97];//neutral + static const double J570_NeuQ1_spect[97];//neutral + static const double J570_NeuS7_spect[97];//neutral + static const double J570_NeuV10_spect[97];//neutral + static const double J570_NeuW18_spect[97];//neutral + static const double J570_NeuZ14_spect[97];//neutral + static const double J570_NeuC18_spect[97];//neutral + static const double J570_NeuD17_spect[97];//neutral + static const double J570_NeuJ11_spect[97];//neutral + static const double J570_NeuL4_spect[97];//neutral + static const double Colorlab_n72_n2_spect[97]; + static const double Colorlab_10_n70_spect[97]; + static const double Colorlab_n33_n70_spect[97]; + static const double Colorlab_n8_n74_spect[97]; + static const double Colorlab_19_n69_spect[97]; + static const double Colorlab_n80_10_spect[97]; + static const double Colorlab_n80_26_spect[97]; static void spectrum_to_xyz_daylight (double _m1, double _m2, double &x, double &y, double &z); static void spectrum_to_xyz_blackbody (double _temp, double &x, double &y, double &z); diff --git a/rtengine/iimage.h b/rtengine/iimage.h index ff016df1a..bda390895 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -26,6 +26,7 @@ #include "imagedimensions.h" #include "LUT.h" #include "coord2d.h" +#include "procparams.h" #include "color.h" #include "../rtgui/threadutils.h" @@ -102,6 +103,10 @@ public: { rm = gm = bm = 1.0; } + virtual void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) + { + rm = gm = bm = 1.0; + } }; diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index a18cca9d7..089cb3bae 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -105,6 +105,8 @@ public: virtual void getAutoWBMultipliers (double &rm, double &gm, double &bm) = 0; virtual ColorTemp getWB () const = 0; virtual ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) = 0; + virtual void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw) = 0; + virtual void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) = 0; virtual double getDefGain () const { diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 01f9892bf..e718087ec 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -330,6 +330,21 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag todo |= M_INIT; + bool autowb0 = false; + // bool autoitc = false; + autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); + // autoitc = (params.wb.method == "autitcgreen"); + // bool gamma = false; + // bool cat = false; +// if (params.wb.wbcat02Method == "cam" && autoitc) { +// cat = true; +// } + + if (autowb0) { + imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); + } + + if (highDetailNeeded) { highDetailRawComputed = true; } else { @@ -360,6 +375,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } + bool autowb = false; + autowb = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); + if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 1c05fbbad..cfa35ee01 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1230,7 +1230,15 @@ const std::vector& WBParams::getWbEntries() { static const std::vector wb_entries = { {"Camera", WBEntry::Type::CAMERA, M("TP_WBALANCE_CAMERA"), 0, 1.f, 1.f, 0.f}, - {"Auto", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f, 0.f}, + // {"Auto", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f, 0.f}, + {"autitcgreen", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOITCGREEN"), 0, 1.f, 1.f, 0.f}, + {"autold", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOOLD"), 0, 1.f, 1.f, 0.f}, + {"aut", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTODEM"), 0, 1.f, 1.f, 0.f}, + {"autedg", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGE"), 0, 1.f, 1.f, 0.f}, + {"autorobust", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOROB"), 0, 1.f, 1.f, 0.f}, + {"autosdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOSDW"), 0, 1.f, 1.f, 0.f}, + {"autedgsdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGESW"), 0, 1.f, 1.f, 0.f}, + {"autedgrob", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGEROB"), 0, 1.f, 1.f, 0.f}, {"Daylight", WBEntry::Type::DAYLIGHT, M("TP_WBALANCE_DAYLIGHT"), 5300, 1.f, 1.f, 0.f}, {"Cloudy", WBEntry::Type::CLOUDY, M("TP_WBALANCE_CLOUDY"), 6200, 1.f, 1.f, 0.f}, {"Shade", WBEntry::Type::SHADE, M("TP_WBALANCE_SHADE"), 7600, 1.f, 1.f, 0.f}, diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 3b2738405..7d4f613f9 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -37,6 +37,9 @@ #include "pdaflinesfilter.h" #include "camconst.h" #include "procparams.h" +#define BENCHMARK +#include "StopWatch.h" + #ifdef _OPENMP #include #endif @@ -450,8 +453,11 @@ RawImageSource::RawImageSource () , ri(nullptr) , rawData(0, 0) , green(0, 0) + , greenloc(0, 0) , red(0, 0) + , redloc(0, 0) , blue(0, 0) + , blueloc(0, 0) , rawDirty(true) , histMatchingParams(new procparams::ColorManagementParams) { @@ -2285,6 +2291,19 @@ void RawImageSource::flushRGB() if (blue) { blue(0, 0); } + + if (greenloc) { + greenloc(0, 0); + } + + if (redloc) { + redloc(0, 0); + } + + if (blueloc) { + blueloc(0, 0); + } + } void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp) @@ -4350,6 +4369,3764 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) } } + +static void histoxyY(int bfhitc, int bfwitc, array2D & xc, array2D & yc, array2D & Yc, float *xxx, float * yyy, float * YYY, int * histxy, float * area, int * inter) + +{ + int nh = 0; +// int nc = 0; + // int nc2 = 0; + + for (int y = 0; y < bfhitc ; y++) { + for (int x = 0; x < bfwitc ; x++) { + + if (xc[y][x] < 0.12f && xc[y][x] > 0.03f) { // near Prophoto + + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 0; + histxy[nh]++; + area[nh] = 50.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + + YYY[nh] += Yc[y][x]; + + // nc = 0; + //blue hard + } else if (yc[y][x] < 0.3f) { + nh = 1; + histxy[nh]++; + area[nh] = 60.f; + inter[nh] = 1; + YYY[nh] += Yc[y][x]; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + + // nc = 1; + + //blue + } else if (yc[y][x] < 0.4f) { + nh = 2; + histxy[nh]++; + area[nh] = 80.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + // nc = 1; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + //blue green + nh = 3; + histxy[nh]++; + area[nh] = 100.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 1; + + } else if (yc[y][x] < 0.6f) { + nh = 4; + histxy[nh]++; + area[nh] = 120.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 1; + + } else if (yc[y][x] < 0.82f) { + //green + nh = 5; + histxy[nh]++; + area[nh] = 240.f; + inter[nh] = 1; + // nc = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } + } else if (xc[y][x] < 0.24f) { + if (yc[y][x] < 0.2f && yc[y][x] > 0.05f) { + nh = 6; + histxy[nh]++; + area[nh] = 230.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 2; + + } else if (yc[y][x] < 0.3f) { + nh = 7; + histxy[nh]++; + area[nh] = 240.f; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 2; + + } else if (yc[y][x] < 0.4f) { + nh = 8; + histxy[nh]++; + area[nh] = 240.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 2; + + } else if (yc[y][x] < 0.5f) { + nh = 9; + histxy[nh]++; + area[nh] = 240.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 2; + // nc2 = 3; + + } else if (yc[y][x] < 0.6f) { + nh = 10; + histxy[nh]++; + area[nh] = 240.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + // nc = 3; + + } else if (yc[y][x] < 0.75f) { + nh = 11; + histxy[nh]++; + area[nh] = 400.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + // nc = 3; + + } + + } else if (xc[y][x] < 0.28f) {//blue sky and other + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 12; + histxy[nh]++; + area[nh] = 80.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.25f) { + nh = 13; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 14; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.33f) { + nh = 15; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 16; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 17; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 18; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.5f) { + nh = 19; + histxy[nh]++; + area[nh] = 25.f; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.6f) { + nh = 20; + histxy[nh]++; + area[nh] = 50.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.75f) { + nh = 21; + histxy[nh]++; + area[nh] = 60.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + } else if (xc[y][x] < 0.31f) {//near neutral others + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 22; + histxy[nh]++; + area[nh] = 50.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 23; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 24; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.32f) { + nh = 25; + histxy[nh]++; + area[nh] = 9.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.36f) { + nh = 26; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 27; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.5f) { + nh = 28; + histxy[nh]++; + area[nh] = 30.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.7f) { + nh = 29; + histxy[nh]++; + area[nh] = 45.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + } else if (xc[y][x] < 0.325f) {//neutral 34 + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 30; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 31; + histxy[nh]++; + area[nh] = 6.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 32; + histxy[nh]++; + area[nh] = 7.5f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 33; + histxy[nh]++; + area[nh] = 4.5f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.34f) { + nh = 34; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 35; + histxy[nh]++; + area[nh] = 4.5f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 36; + histxy[nh]++; + area[nh] = 4.5f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 37; + histxy[nh]++; + area[nh] = 7.5f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 38; + histxy[nh]++; + area[nh] = 7.5f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 39; + histxy[nh]++; + area[nh] = 7.5f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.7f) { + nh = 40; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.335f) {//neutral + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 41; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 42; + histxy[nh]++; + area[nh] = 4.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 43; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 44; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.33f) { + nh = 45; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.34f) { + nh = 46; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.35f) { + nh = 47; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.36f) { + nh = 48; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 47; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.38f) { + nh = 48; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 49; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 50; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 51; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 52; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.7f) { + nh = 53; + histxy[nh]++; + area[nh] = 10.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.345f) {//neutral 37 + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 54; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 55; + histxy[nh]++; + area[nh] = 4.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 56; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 57; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.33f) {//34 + nh = 58; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.34f) { + nh = 59; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.35f) {//34 + nh = 60; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.36f) {//34 + nh = 61; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 62; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.38f) { + nh = 63; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.39f) { + nh = 64; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 65; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.42f) { + nh = 66; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 67; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.48f) { + nh = 68; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 69; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 70; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.65f) { + nh = 71; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.355f) {//neutral 37 + if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { + nh = 72; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 73; + histxy[nh]++; + area[nh] = 4.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 74; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 75; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.33f) {//34 + nh = 76; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.34f) { + nh = 77; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.35f) {//34 + nh = 78; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.36f) {//34 + nh = 79; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 80; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.38f) { + nh = 81; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.39f) { + nh = 82; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 83; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.42f) { + nh = 84; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 85; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.48f) { + nh = 68; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 86; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 87; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.65f) { + nh = 88; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.365f) { //0.4 + if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { + nh = 89; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.24f) { + nh = 90; + histxy[nh]++; + area[nh] = 4.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 91; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 92; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.33f) { + nh = 93; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.34f) { + nh = 94; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.36f) { + nh = 95; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 5; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 96; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.38f) { + nh = 97; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.39f) { + nh = 98; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 99; + histxy[nh]++; + area[nh] = 1.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + } else if (yc[y][x] < 0.42f) { + nh = 100; + histxy[nh]++; + area[nh] = 2.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 101; + histxy[nh]++; + area[nh] = 3.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 102; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 103; + histxy[nh]++; + area[nh] = 5.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.63f) { + nh = 104; + histxy[nh]++; + area[nh] = 10.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.405f) {//45 + if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { + nh = 105; + histxy[nh]++; + area[nh] = 40.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 106; + histxy[nh]++; + area[nh] = 16.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 107; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 108; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.34f) { + nh = 109; + histxy[nh]++; + area[nh] = 8.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 110; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 111; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 112; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 113; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 114; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.6f) { + nh = 115; + histxy[nh]++; + area[nh] = 16.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.445f) {//45 + if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { + nh = 116; + histxy[nh]++; + area[nh] = 40.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 117; + histxy[nh]++; + area[nh] = 16.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 118; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 119; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.34f) { + nh = 120; + histxy[nh]++; + area[nh] = 8.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 121; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 122; + histxy[nh]++; + area[nh] = 12.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 123; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 124; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 125; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.58f) { + nh = 126; + histxy[nh]++; + area[nh] = 16.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.495f) { + if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { + nh = 127; + histxy[nh]++; + area[nh] = 40.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 128; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 129; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 130; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.34f) { + nh = 131; + histxy[nh]++; + area[nh] = 10.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 132; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 133; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 3; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 134; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 135; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.55f) { + nh = 136; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + } else if (xc[y][x] < 0.545f) { + if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { + nh = 137; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.24f) { + nh = 138; + histxy[nh]++; + area[nh] = 20.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.29f) { + nh = 139; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.32f) { + nh = 140; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.34f) { + nh = 141; + histxy[nh]++; + area[nh] = 10.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.37f) { + nh = 142; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 143; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.45f) { + nh = 144; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.5f) { + nh = 145; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + + } + + } else if (xc[y][x] < 0.595f) { + if (yc[y][x] < 0.22f && yc[y][x] > 0.15f) { + nh = 146; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.25f) { + nh = 147; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.3f) { + nh = 148; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.35f) { + nh = 149; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.4f) { + nh = 160; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.45f) { + nh = 161; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.65f) { + if (yc[y][x] < 0.25f && yc[y][x] > 0.12f) { + nh = 162; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.3f) { + nh = 163; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } else if (yc[y][x] < 0.35f) { + nh = 164; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 2; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } else if (yc[y][x] < 0.45f) { + nh = 165; + histxy[nh]++; + area[nh] = 15.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + } + + } else if (xc[y][x] < 0.75f && yc[y][x] > 0.1f) { + nh = 166; + histxy[nh]++; + area[nh] = 25.f; + inter[nh] = 1; + xxx[nh] += xc[y][x]; + yyy[nh] += yc[y][x]; + YYY[nh] += Yc[y][x]; + + + } + + } + } +} + + + + +void static studentXY(array2D & YYcurr, array2D & reffYY, int sizcurr, int Nc, int tt, float & student) +{ + //calculate Student coeff YY + float somcurrY = 0.f; + float somreffY = 0.f; + float somcurr2Y = 0.f; + float somreff2Y = 0.f; + float somsqueccurrY = 0.f; + float somsquecreffY = 0.f; + int sizestucurrY = sizcurr; + int sizestureffY = Nc; + + for (int i = 0; i < sizestucurrY; i++) { + somcurrY += 100.f * YYcurr[i][tt]; + //sum observations first group + } + + for (int i = 0; i < sizestureffY; i++) { + somreffY += 100.f * reffYY[i][tt]; + //sum observations second group + + } + + + for (int i = 0; i < sizestucurrY; i++) { + somcurr2Y += SQR(100.f * YYcurr[i][tt]); + //sum sqr observations first group + + } + + for (int i = 0; i < sizestureffY; i++) { + somreff2Y += SQR(100.f * reffYY[i][tt]); + //sum sqr observations second group + + } + + somsqueccurrY = somcurr2Y - (SQR(somcurrY)) / sizestucurrY; + //sum sqr differences first + somsquecreffY = somreff2Y - (SQR(somreffY)) / sizestureffY; + //sum sqr differences second + + float diviY = sqrt(((somsqueccurrY + somsquecreffY) * (1.f / (float)sizestucurrY + 1.f / (float)sizestureffY)) / (sizestucurrY + sizestureffY - 2)); + //divisor student + float numerY = ((float)somcurrY / (float)sizestucurrY) - ((float)somreffY / (float)sizestureffY); + //numerator student +// printf("num=%f divY=%f \n", numerY, diviY); + + student = numerY / diviY ; + //student coeeficient +} + +/* +static void SdwWB(const array2D &redloc, const array2D &greenloc, const array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm) +{ + //Standard deviation weighted Gary World - from Lan rt al. + constexpr float clipHigh = 64000.f; + constexpr float clipLow = 1500.f; + + float MeanG[12] = { }; + float SigmaG[12] = { }; + + float MeanR[12] = { }; + float SigmaR[12] = { }; + + float MeanB[12] = { }; + float SigmaB[12] = { }; + + //divide in 12 areas + int partw, parth; + int yh, xw; + + if (bfw > bfh) { + partw = bfw / 4; + parth = bfh / 3; + xw = 4; + yh = 3; + } else { + partw = bfw / 3; + parth = bfh / 4; + xw = 3; + yh = 4; + } + + float SigmaGG = 0.f, SigmaRR = 0.f, SigmaBB = 0.f; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic) collapse(2) +#endif + + for (int w = 0; w < xw ; ++w) { + for (int h = 0; h < yh ; ++h) { + float meanr = 0.f; + float meang = 0.f; + float meanb = 0.f; + int nr = 0; + int ng = 0; + int nb = 0; + + for (int y = h * parth; y < (h + 1) * parth; ++y) { + for (int x = w * partw; x < (w + 1) * partw; ++x) { + if (greenloc[y][x] > clipLow && greenloc[y][x] < clipHigh) { + meang += greenloc[y][x]; + ng++; + } + + if (redloc[y][x] > clipLow && redloc[y][x] < clipHigh) { + meanr += redloc[y][x]; + nr++; + } + + if (blueloc[y][x] > clipLow && blueloc[y][x] < clipHigh) { + meanb += blueloc[y][x]; + nb++; + } + } + } + + int i = w + h * xw; + + if (ng > 0) { + meang /= ng; + } + + if (nr > 0) { + meanr /= nr; + } + + if (nb > 0) { + meanb /= nb; + } + + MeanG[i] = meang; + MeanR[i] = meanr; + MeanB[i] = meanb; + + float sigmar = 0.f; + float sigmag = 0.f; + float sigmab = 0.f; + + for (int y = h * parth; y < (h + 1) * parth; ++y) { + for (int x = w * partw; x < (w + 1) * partw; ++x) { + if (greenloc[y][x] > clipLow && greenloc[y][x] < clipHigh) { + sigmag += SQR(meang - greenloc[y][x]) ; + } + + if (redloc[y][x] > clipLow && redloc[y][x] < clipHigh) { + sigmar += SQR(meanr - redloc[y][x]); + } + + if (blueloc[y][x] > clipLow && blueloc[y][x] < clipHigh) { + sigmab += SQR(meanb - blueloc[y][x]); + } + } + } + + SigmaG[i] = sigmag; + SigmaR[i] = sigmar; + SigmaB[i] = sigmab; + + if (ng > 0) { + SigmaG[i] = sqrt(SigmaG[i] / ng); + } + + if (nr > 0) { + SigmaR[i] = sqrt(SigmaR[i] / nr); + } + + if (nb > 0) { + SigmaB[i] = sqrt(SigmaB[i] / nb); + } + +#ifdef _OPENMP + #pragma omp critical +#endif + { + SigmaGG += SigmaG[i]; + SigmaRR += SigmaR[i]; + SigmaBB += SigmaB[i]; + } + } + } + + float StdavgG = 0.f, StdavgR = 0.f, StdavgB = 0.f; + constexpr float epsilo = 0.01f; + + for (int k = 0; k < 12 ; k++) { + StdavgG += (SigmaG[k] * MeanG[k]) / (SigmaGG + epsilo); + StdavgR += (SigmaR[k] * MeanR[k]) / (SigmaRR + epsilo); + StdavgB += (SigmaB[k] * MeanB[k]) / (SigmaBB + epsilo); + + } + + avg_gm = (StdavgG + StdavgB + StdavgR) / (3 * StdavgG); + avg_rm = (StdavgG + StdavgB + StdavgR) / (3 * StdavgR); + avg_bm = (StdavgG + StdavgB + StdavgR) / (3 * StdavgB); + + avg_gm *= 10000.f; + avg_rm *= 10000.f; + avg_bm *= 10000.f; + +} +*/ + +/* +static void RobustWB(array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm) +{ + BENCHFUN + // inspired by "Robust automatic WB algorithm using grey colour points in Images" + // Jy Huo, Yl Chang, J.Wang Xx Wei + // robust = true; +// printf("Robust WB\n"); + const int bfwr = bfw / 4 + 1 ;//5 middle value to keep good result and reduce time + const int bfhr = bfh / 4 + 1; + + array2D rl(bfwr, bfhr); + array2D gl(bfwr, bfhr); + array2D bl(bfwr, bfhr); + + // copy data to smaller arrays to reduce memory pressure in do-while loop +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int y = 0; y < bfh ; y += 4) { + int yy = y / 4; + + for (int x = 0; x < bfw ; x += 4) { + int xx = x / 4; + rl[yy][xx] = redloc[y][x]; + gl[yy][xx] = greenloc[y][x]; + bl[yy][xx] = blueloc[y][x]; + } + } + + float *Uba = new float [204]; + float *Vba = new float [204]; + + constexpr float Th = 0.1321f; //Threshold 0.1321f 0.097f 0.2753f if necessary + //wr, wb, wg multipliers for each channel RGB + float wr = 1.f; + float wg = 1.f; + float wb = 1.f; + constexpr float mu = 0.002f;//std variation + constexpr float mu2 = 0.0012f;//first reduce variation + constexpr float mu3 = 0.0007f;//second variation + int itera = 0; + int minim = 1; + int realitera = 1; + + int Kx = 0; + + do {//iterative WB + float Ubarohm = 0.f, Vbarohm = 0.f; + itera++; + int Nf = 0; +#ifdef _OPENMP + #pragma omp parallel for reduction(+:Ubarohm, Vbarohm, Nf) schedule(dynamic,16) +#endif + + for (int y = 0; y < bfhr ; ++y) { + for (int x = 0; x < bfwr ; ++x) { + + //calculate YUV from RGB and wr, wg, wb + float Y0 = 0.299f * wr * rl[y][x] + 0.587f * wg * gl[y][x] + 0.114f * wb * bl[y][x]; + float U0 = -0.14713f * wr * rl[y][x] - 0.28886f * wg * gl[y][x] + 0.436f * wb * bl[y][x]; + float V0 = 0.615f * wr * rl[y][x] - 0.51498f * wg * gl[y][x] - 0.10001f * wb * bl[y][x]; + + //FYUX function to detect grey points + if (fabs(U0) + fabs(V0) < Th * Y0) {//grey values + Nf++; + Ubarohm += U0; + Vbarohm += V0; + } + + + } + } + + Ubarohm /= Nf; + Uba[itera] = Ubarohm;//stock value Ubarohm + Vba[itera] = Vbarohm;//stock value Vbarohm + + if (itera > 5 && minim < 2) { + if ((fabs(Uba[itera] - Uba[itera - 2]) < 0.001f) && (fabs(Vba[itera] - Vba[itera - 2]) < 0.001f)) { + //printf("DUba=%f Dvba=%f\n", Uba[itera] - Uba[itera - 2], Vba[itera] - Vba[itera - 2]); + realitera = itera; + minim = 2; //accelerate convergence - not in original algorithm + } + } + + if (itera > 10 && minim == 2 && itera > realitera + 3) { + if ((fabs(Uba[itera] - Uba[itera - 2]) < 0.001f) && (fabs(Vba[itera] - Vba[itera - 2]) < 0.001f)) { + minim = 3; //accelerate second time if necessary convergence, - not in original algorithm + } + + } + + Vbarohm /= Nf; // QUESTION INGO: why is this not done before the value is saved to Vba[itera]? Bug or intentional? + // printf ("Nf=%i max=%i U=%f V=%f\n", Nf, bfh*bfw, Ubarohm, Vbarohm); + Kx = 0; + constexpr float aa = 0.8f;//superior limit if epsil > aa increase variation + constexpr float bb = 0.15f;//inferior limit if epsil < bb exit + int ind = 1; + + float phi = 0.f; + + if ((fabs(Ubarohm) > fabs(Vbarohm)) || (Ubarohm != 0.f && fabs(Ubarohm) == fabs(Vbarohm))) { + phi = Ubarohm; + ind = 1; + } else if (fabs(Ubarohm) < fabs(Vbarohm)) { + phi = Vbarohm; + ind = 2; + } else if (Ubarohm == 0.f && Vbarohm == 0.f) { + phi = 0.f; + ind = 3; + } + + int sign = SGN(-phi); + + if (fabs(phi) >= aa) { + Kx = 2 * sign; + } + + if (fabs(phi) < aa && fabs(phi) >= bb) { + Kx = sign; + } + + if (fabs(phi) < bb) { + Kx = 0; + } + + // + float mur = mu; + + if (minim == 2) { + mur = mu2; + } else if (minim == 3) { + mur = mu3; + } + + if (ind == 1) { + wb += mur * Kx; + } else if (ind == 2) { + wr += mur * Kx; + } + + //printf ("epsil=%f iter=%i wb=%f wr=%f U=%f V=%f mu=%f\n", fabs (epsil), itera, wb, wr, Ubarohm, Vbarohm, mur); + } while (Kx != 0 && itera <= 200); //stop iterations in normal case Kx =0, or if WB iteration do not converge + + delete Uba; + delete Vba; +// printf("epsil=%f iter=%i wb=%f wr=%f mu=%f\n", fabs(epsil), itera, wb, wr, mur); + + avg_rm = 10000.* wr; + avg_gm = 10000.* wg; + avg_bm = 10000.* wb; + // printf("Robust ar%f ag=%f ab=%f\n", avg_rm, avg_gm, avg_bm); + +} +*/ +/* +static void SobelWB(array2D &redsobel, array2D &greensobel, array2D &bluesobel, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh) +{ + BENCHFUN + int GX[3][3]; + int GY[3][3]; + + //Sobel Horizontal + GX[0][0] = 1; + GX[0][1] = 0; + GX[0][2] = -1; + GX[1][0] = 2; + GX[1][1] = 0; + GX[1][2] = -2; + GX[2][0] = 1; + GX[2][1] = 0; + GX[2][2] = -1; + + //Sobel Vertical + GY[0][0] = 1; + GY[0][1] = 2; + GY[0][2] = 1; + GY[1][0] = 0; + GY[1][1] = 0; + GY[1][2] = 0; + GY[2][0] = -1; + GY[2][1] = -2; + GY[2][2] = -1; + // inspired from Chen Guanghua Zhang Xiaolong + // edge detection to improve auto WB + + { +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int y = 0; y < bfh ; y++) { + for (int x = 0; x < bfw ; x++) { + if (y == 0 || y == bfh - 1 || x == 0 || x == bfw - 1) { + redsobel[y][x] = 0.f; + greensobel[y][x] = 0.f; + bluesobel[y][x] = 0.f; + } else { + float sumXr = 0.f; + float sumYr = 0.f; + float sumXg = 0.f; + float sumYg = 0.f; + float sumXb = 0.f; + float sumYb = 0.f; + + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + sumXr += GX[j + 1][i + 1] * redloc[y + i][x + j]; + sumXg += GX[j + 1][i + 1] * greenloc[y + i][x + j]; + sumXb += GX[j + 1][i + 1] * blueloc[y + i][x + j]; + sumYr += GY[j + 1][i + 1] * redloc[y + i][x + j]; + sumYg += GY[j + 1][i + 1] * greenloc[y + i][x + j]; + sumYb += GY[j + 1][i + 1] * blueloc[y + i][x + j]; + } + } + + //Edge strength + //we can add if need teta = atan2 (sumYr, sumXr) + redsobel[y][x] = CLIP(sqrt(SQR(sumXr) + SQR(sumYr))); + greensobel[y][x] = CLIP(sqrt(SQR(sumXg) + SQR(sumYg))); + bluesobel[y][x] = CLIP(sqrt(SQR(sumXb) + SQR(sumYb))); + } + } + } + } +} +*/ + +void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const ColorManagementParams &cmp, const RAWParams &raw, const WBParams & wbpar) +{ + /* + copyright Jacques Desmis 6 - 2018 jdesmis@gmail.com + + This algorithm try to find temperature correlation between 20 to 200 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. + + I have test many many algo to find the first one that work :) + Probably (sure) there are improvment to do... + + I have create a table temperature with temp and white point with 100 values between 2000K and 12000K we can obviously change these values, more...with different steps + I have create or recuparate and transformed 200 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is largey enough. + I think this value of 200 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized + Of course we can increase this number :) + + 1) for the cuurent raw file we create a table for each temp of RGB multipliers + 2) then, I choose the "camera temp" to initialize calculation (why not) + 3) for this temp, I calculated XYZ values for the 200 spectrals datas + 4) then I create for the image an "histogram", but for xyY (Cie 1931 color space) + 5) for each pixel (in fact to accelerate only 1/10 for and 1/10 for y), I determine for each couple xy, the number of occurences + 6) I sort this result in ascending order + 7) in option we can sort in another maner to take into account chroma : chromax = x - white point x, chromay = y - white point y + 8) then I compare this result, with spectral datas found above in 3) with deltaE (limited to chroma) + 9) at this point we have xyY values that match Camera temp, and spectral datas associated + 10) then I recalculate RGB values from xyY histogram + 11) after, I vary temp, between 2000K to 12000K + 12) RGB values are recalcualted from 10) with RGB multipliers, and then xyY are calcualted for each temp + 13) spectral datas choose are recalculated with temp betwen 2000K to 12000K with matrix spectral calculation, that leeds to xyY values + 14) I calculated for each couple xy, Student correlation (without Snedecor test) + 15) the good result, is the best correlation + 16) we have found the best temperature where color image and color refences are correlate + 17) after we pass this value to improccoordinator + + 18) in a second part if camera green is out, I used an "extra" algorithm + 19) we make vary green between 2 limits (settings in option) + 20) betwen these green limits, we make slightly vary temp (settings in options) and recalculated RGB multipliers + 21) with this multipliers for the RGB color find in histogram we recalculate xyY + 22) we re-adjust references color for these xyY from 20) + 23) we add if chroma image is very low, k colors to degrad correlation + 24) then find all Student correlation for each couple green / temp + 25) sort these Student values, and choose the minimum + 26) then for the 3 better couple "temp / green" choose the one wher grren is neraest from 1. + + Some variables or function are not used, keep in case of + I have test with cat02 but result are not stable enough ! why ??, therefore cat02 neutralized + This operation is done (actually) 100 times and compare Student coefficient, and keep the absolute minimum, We can probably optimize.... + But actually the goal is to find the good algorithm ! + + I think, this algo is very good in most cases :) ...to verify of course. + You can used it in images :flowers, landscape, portrait, skin, where illuminants are "normal" (daylight, blackbody) + You must avoid when illuminant is non standard (fluorescent, LED...) and also, when the subject is lost in the image (some target to generate profiles). + + You can change 4 parameters in option.cc + Itcwb_thres : 34 by default ==> number of color used in final algorithm - between 10 and max 55 + Itcwb_sort : false by default, can improve algo if true, ==> sort value in something near chroma order, instead of histogram number + Itcwb_greenrange : 0 amplitude of green variation - between 0 to 2 + Itcwb_greendeltatemp : 1 - delta temp in green iterate loop for "extra" - between 0 to 4 + Itcwb_forceextra : false - if true force algorithm "extra" ("extra" is used when cmaera wbsettings are wrong) to all images + Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color comapre to size of histogram real color + itcwb_delta : 1 by defaut can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good + */ + // BENCHFUN + BENCHFUN + + + TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB"); + double wp[3][3] = { + {wprof[0][0], wprof[0][1], wprof[0][2]}, + {wprof[1][0], wprof[1][1], wprof[1][2]}, + {wprof[2][0], wprof[2][1], wprof[2][2]} + }; + + TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix("sRGB"); + //inverse matrix user select + double wip[3][3] = { + {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, + {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, + {wiprof[2][0], wiprof[2][1], wiprof[2][2]} + }; + + array2D xc; + array2D yc; + array2D Yc; + + + + array2D histcurr; + array2D histcurrref; + + array2D xxyycurr; + array2D xxyycurr_reduc; + array2D xx_curref; + array2D yy_curref; + array2D YY_curref; + array2D xx_curref_reduc; + array2D yy_curref_reduc; + array2D R_curref_reduc; + array2D G_curref_reduc; + array2D B_curref_reduc; + + array2D reff_spect_xxyy; + array2D reff_spect_xxyy_prov; + array2D YYcurr; + array2D YY_curref_reduc; + array2D YYcurr_reduc; + // array2D reffYY; + // array2D reffYY_prov; + + array2D reff_spect_yy_camera; + array2D reff_spect_xx_camera; + + + int bfwitc = bfw / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 + int bfhitc = bfh / 10 + 1; + + xc(bfwitc, bfhitc); + yc(bfwitc, bfhitc); + Yc(bfwitc, bfhitc); + + typedef struct WbGreen { + double green; + float snedecor;//1. actually but put in case of confiance interval + } WbGreen; + + WbGreen gree[118] = {//symetric coefficient between 0.717 and 1.40 + {0.400, 1.f}, + {0.500, 1.f}, + {0.550, 1.f}, + {0.600, 1.f}, + {0.625, 1.f}, + {0.650, 1.f}, + {0.675, 1.f}, + {0.700, 1.f}, + {0.714, 1.f}, + {0.727, 1.f}, + {0.741, 1.f}, + {0.755, 1.f}, + {0.769, 1.f}, + {0.784, 1.f}, + {0.800, 1.f}, + {0.806, 1.f}, + {0.813, 1.f}, + {0.820, 1.f}, + {0.826, 1.f}, + {0.833, 1.f}, + {0.840, 1.f}, + {0.847, 1.f}, + {0.855, 1.f}, + {0.862, 1.f}, + {0.870, 1.f}, + {0.877, 1.f}, + {0.885, 1.f}, + {0.893, 1.f}, + {0.901, 1.f}, + {0.909, 1.f}, + {0.917, 1.f}, + {0.926, 1.f}, + {0.935, 1.f}, + {0.943, 1.f}, + {0.952, 1.f}, + {0.962, 1.f}, + {0.971, 1.f}, + {0.980, 1.f}, + {0.990, 1.f}, + {1.000, 1.f},//39 + {1.010, 1.f}, + {1.020, 1.f}, + {1.030, 1.f}, + {1.040, 1.f}, + {1.050, 1.f}, + {1.060, 1.f}, + {1.070, 1.f}, + {1.080, 1.f}, + {1.090, 1.f}, + {1.100, 1.f}, + {1.110, 1.f}, + {1.120, 1.f}, + {1.130, 1.f}, + {1.140, 1.f}, + {1.150, 1.f}, + {1.160, 1.f}, + {1.170, 1.f}, + {1.180, 1.f}, + {1.190, 1.f}, + {1.200, 1.f}, + {1.210, 1.f}, + {1.220, 1.f}, + {1.230, 1.f}, + {1.240, 1.f}, + {1.250, 1.f}, + {1.275, 1.f}, + {1.300, 1.f}, + {1.325, 1.f}, + {1.350, 1.f}, + {1.375, 1.f}, + {1.400, 1.f}, + {1.425, 1.f}, + {1.450, 1.f}, + {1.475, 1.f}, + {1.500, 1.f}, + {1.525, 1.f}, + {1.550, 1.f}, + {1.575, 1.f}, + {1.600, 1.f}, + {1.633, 1.f}, + {1.666, 1.f}, + {1.700, 1.f}, + {1.733, 1.f}, + {1.766, 1.f}, + {1.800, 1.f}, + {1.833, 1.f}, + {1.866, 1.f}, + {1.900, 1.f}, + {1.933, 1.f}, + {1.966, 1.f}, + {2.000, 1.f}, + {2.033, 1.f}, + {2.066, 1.f}, + {2.100, 1.f}, + {2.133, 1.f}, + {2.166, 1.f}, + {2.200, 1.f}, + {2.250, 1.f}, + {2.300, 1.f}, + {2.350, 1.f}, + {2.400, 1.f}, + {2.450, 1.f}, + {2.500, 1.f}, + {2.550, 1.f}, + {2.600, 1.f}, + {2.650, 1.f}, + {2.700, 1.f}, + {2.750, 1.f}, + {2.800, 1.f}, + {2.850, 1.f}, + {2.900, 1.f}, + {2.950, 1.f}, + {3.000, 1.f}, + {3.200, 1.f}, + {3.400, 1.f}, + {3.600, 1.f}, + {3.800, 1.f}, + {4.000, 1.f} + }; + int N_g = sizeof(gree) / sizeof(gree[0]); //number of green + + typedef struct RangeGreen { + int begin; + int end; + int ng; + } RangeGreen; + + RangeGreen Rangestandard; + Rangestandard.begin = 8; + Rangestandard.end = 70; + Rangestandard.ng = 62; + + RangeGreen Rangeextand; + Rangeextand.begin = 4; + Rangeextand.end = 77; + Rangeextand.ng = 73; + + RangeGreen Rangemax; + Rangemax.begin = 0; + Rangemax.end = N_g; + Rangemax.ng = N_g; + + RangeGreen Rangegreenused; + + if (settings->itcwb_greenrange == 0) { + Rangegreenused = Rangestandard; + } + + else if (settings->itcwb_greenrange == 1) { + Rangegreenused = Rangeextand; + } else { + Rangegreenused = Rangemax; + } + + // printf("rangemin=%i rangmax=%i\n", Rangegreenused.begin, Rangegreenused.end); + + + + typedef struct WbTxyz { + double Tem; + double XX; + double ZZ; + } WbTxyz; + //we can change step to increase precision if need - also in Colortemp.cc with same changes + //I don't know how to pass this structure to Colortemp ! + WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after + {2001., 1.273842, 0.145295}, + {2101., 1.244008, 0.167533}, + {2201., 1.217338, 0.190697}, + {2301., 1.193444, 0.214632}, + {2401., 1.171996, 0.239195}, + {2501., 1.152883, 0.264539}, + {2605., 1.134667, 0.290722}, + {2655., 1.126659, 0.303556}, + {2705., 1.119049, 0.316446}, + {2755., 1.111814, 0.329381}, + {2803., 1.105381, 0.342193}, + {2856., 1.098258, 0.355599}, + {2910., 1.091550, 0.369645}, + {2960., 1.085649, 0.382655}, + {3003., 1.080982, 0.394258}, + {3050., 1.075727, 0.406057}, + {3103., 1.070277, 0.419815}, + {3153., 1.065384, 0.432769}, + {3203., 1.060906, 0.446161}, + {3250., 1.056535, 0.457806}, + {3303., 1.052034, 0.471422}, + {3353., 1.047990, 0.484218}, + {3400., 1.044547, 0.496719}, + {3450., 1.040667, 0.508891}, + {3500., 1.037145, 0.521523}, + {3550., 1.033783, 0.534090}, + {3600., 1.030574, 0.546590}, + {3650., 1.027510, 0.559020}, + {3699., 1.024834, 0.571722}, + {3801., 1.019072, 0.596102}, + {3851., 1.016527, 0.608221}, + {3902., 1.014244, 0.621136}, + {3952., 1.011729, 0.632447}, + {4002., 0.996153, 0.609518}, + {4052., 0.993720, 0.620805}, + {4102., 0.993908, 0.631520}, + {4152., 0.989179, 0.643262}, + {4202., 0.989283, 0.653999}, + {4252., 0.985039, 0.665536}, + {4302., 0.985067, 0.676288}, + {4352., 0.981271, 0.687599}, + {4402., 0.981228, 0.698349}, + {4452., 0.977843, 0.709425}, + {4502., 0.977736, 0.720159}, + {4552., 0.974728, 0.730993}, + {4602., 0.974562, 0.741698}, + {4652., 0.971899, 0.752284}, + {4702., 0.971681, 0.762949}, + {4752., 0.969335, 0.773285}, + {4802., 0.969069, 0.783899}, + {4827., 0.967570, 0.788836}, + {4852., 0.967011, 0.793982}, + {4877., 0.966465, 0.799108}, + {4902., 0.965933, 0.804214}, + {4927., 0.965414, 0.809229}, + {4952., 0.964908, 0.814366}, + {4977., 0.964415, 0.819412}, + {5002., 0.963934, 0.824438}, + {5027., 0.963465, 0.829444}, + {5052., 0.963008, 0.834429}, + {5077., 0.962563, 0.839395}, + {5102., 0.962129, 0.844339}, + {5127., 0.961706, 0.849263}, + {5152., 0.961294, 0.854166}, + {5177., 0.960893, 0.859049}, + {5202., 0.960501, 0.863911}, + {5252., 0.959749, 0.873572}, + {5302., 0.959313, 0.883815}, + {5352., 0.958361, 0.892644}, + {5402., 0.957903, 0.902793}, + {5452., 0.957116, 0.911379}, + {5502., 0.956639, 0.921431}, + {5552., 0.956002, 0.929779}, + {5602., 0.955509, 0.939728}, + {5652., 0.955008, 0.947842}, + {5702., 0.954502, 0.957685}, + {5752., 0.954124, 0.965569}, + {5802., 0.953608, 0.975303}, + {5852., 0.953342, 0.982963}, + {5902., 0.952818, 0.992584}, + {5952., 0.952652, 1.000025}, + {6002., 0.952122, 1.009532}, + {6052., 0.952047, 1.016759}, + {6102., 0.951514, 1.026149}, + {6152., 0.951520, 1.033168}, + {6202., 0.950985, 1.042439}, + {6252., 0.951064, 1.049256}, + {6302., 0.950530, 1.058406}, + {6352., 0.950674, 1.065027}, + {6402., 0.950143, 1.074055}, + {6452., 0.950345, 1.080484}, + {6502., 0.950201, 1.088097}, + {6552., 0.950070, 1.095633}, + {6602., 0.949952, 1.103094}, + {6652., 0.949846, 1.110479}, + {6702., 0.949752, 1.119138}, + {6752., 0.949668, 1.125027}, + {6802., 0.949596, 1.132190}, + {6902., 0.949033, 1.147691}, + {7002., 0.949402, 1.160129}, + {7152., 0.949348, 1.180429}, + {7301., 0.948896, 1.201432}, + {7451., 0.949434, 1.219076}, + {7601., 0.949099, 1.239061}, + {7751., 0.949729, 1.255559}, + {7901., 0.949498, 1.274460}, + {8151., 0.950361, 1.300912}, + {8301., 0.950253, 1.318464}, + {8451., 0.950966, 1.332651}, + {8601., 0.950941, 1.349261}, + {8801., 0.951772, 1.367421}, + {9001., 0.951969, 1.387639}, + {9201., 0.952784, 1.404422}, + {9401., 0.953081, 1.423213}, + {9901., 0.954537, 1.464134}, + {10501., 0.956321, 1.508623}, + {11001., 0.957747, 1.541281}, + {12001., 0.960440, 1.601019} + }; + int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point + + int nbt = N_t; + float **Tx = nullptr; + float **Ty = nullptr; + float **Tz = nullptr; + float **Ta = nullptr; + float **Tb = nullptr; + float **TL = nullptr; + double *TX = nullptr; + double *TY = nullptr; + double *TZ = nullptr; + int *good_spectral = nullptr; + // float studgood = 1000.f; + + int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values + Tx = new float*[Nc]; + + for (int i = 0; i < Nc; i++) { + Tx[i] = new float[nbt]; + } + + Ty = new float*[Nc]; + + for (int i = 0; i < Nc; i++) { + Ty[i] = new float[nbt]; + } + + Tz = new float*[Nc]; + + for (int i = 0; i < Nc; i++) { + Tz[i] = new float[nbt]; + } + + Ta = new float*[Nc]; + + for (int i = 0; i < Nc; i++) { + Ta[i] = new float[nbt]; + } + + Tb = new float*[Nc]; + + for (int i = 0; i < Nc; i++) { + Tb[i] = new float[nbt]; + } + + TL = new float*[Nc]; + + for (int i = 0; i < Nc; i++) { + TL[i] = new float[nbt]; + } + + TX = new double [Nc]; + + + TY = new double [Nc]; + + + TZ = new double [Nc]; + + good_spectral = new int [Nc]; + + for (int i = 0; i < Nc; i++) { + good_spectral[i] = 0; + } + + float *rmm = nullptr; + rmm = new float [N_t]; + + float *gmm = nullptr; + gmm = new float [N_t]; + + float *bmm = nullptr; + bmm = new float [N_t]; + + int siza = 167;//size of histogram + int maxval = 25; + + //tempref and greenref are camera wb values. + // I used them by default to select good spectral values !! + if (tempref > 12000.f) { + tempref = 12000.f; + } + + int repref = 0; + + for (int tt = 0; tt < N_t; tt++) { + if (Txyz[tt].Tem > tempref) { + repref = tt;//show the select temp + break; + } + } + + + //calculate R G B multiplier in function illuminant and temperature + for (int tt = 0; tt < N_t; tt++) { + double r, g, b; + float rm, gm, bm; + ColorTemp WBiter = ColorTemp(Txyz[tt].Tem, greenitc, 1.f, "Custom"); + WBiter.getMultipliers(r, g, b); + rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; + gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; + bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + + const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; + float new_scale_mul[4]; + bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); + + rm = new_scale_mul[0] / scale_mul[0] * gain; + gm = new_scale_mul[1] / scale_mul[1] * gain; + bm = new_scale_mul[2] / scale_mul[2] * gain; + rmm[tt] = rm / gm; + gmm[tt] = gm / gm; + bmm[tt] = bm / gm; + } + + struct hiss { + int histnum; + int index; + int interest; + bool operator()(const hiss& lhis, const hiss& rhis) + { + return lhis.histnum < rhis.histnum; + } + + } ; + + //intermediate structure + struct chrom { + float chroxy_number; + float chroxy; + float chrox; + float chroy; + float Y; + int index; + int interest; + bool operator()(const chrom& lchro, const chrom& rchro) + { + return lchro.chroxy_number < rchro.chroxy_number; + } + + } ; + + int histxy[siza] = {};//number of values for each pair xy + + float area[siza] = {};//multiplier for compensation differences area ==> big areas are rare near limit prophotos or more + + int inter[siza] = {}; //interest for photographie 1 = small (limit gamut) 2 = normal 3 = major (skin, sky, neutral) + + float xxx[siza] = {};//for color references calculated ==> max in images "like histogram" + + float yyy[siza] = {}; + + float YYY[siza] = {};//not used directly, but necessary to keep good range + + for (int p = 0; p < siza; p++) { + histxy[p] = 0; + area[p] = 20.f; + inter[p] = 1; + } + + float estimchrom = 0.f; + + bool separated = true; + int w = -1; + //printf("greenrefraw=%f\n", greenref); + reff_spect_xxyy(N_t, 2 * Nc + 2); + reff_spect_xxyy_prov(N_t, 2 * Nc + 2); + reff_spect_yy_camera(N_t, 2 * Nc + 2); + reff_spect_xx_camera(N_t, 2 * Nc + 2); + + // reffYY(N_t, 2 * Nc);//in case of + //reffYY_prov(N_t, 2 * Nc); + + //here we select the good spectral color inside the 113 values + //call tempxy to calculate for 114 color references Temp and XYZ with cat02 + + if (separated) { + ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants + + //find the good spectral values + //calculate xy reference spectral for tempref + for (int j = 0; j < Nc ; j++) { + reff_spect_xx_camera[j][repref] = TX[j] / (TX[j] + TY[j] + TZ[j]); // x from xyY + reff_spect_yy_camera[j][repref] = TY[j] / (TX[j] + TY[j] + TZ[j]); // y from xyY + } + + int deltarepref = settings->itcwb_delta; + + for (int nn = 0; nn <= 2; nn++) { + //three loop to refine color if temp camera is probably not very good + int drep = 0; + + if (nn == 0) { + drep = -deltarepref; + } + + if (nn == 2) { + drep = +deltarepref; + } + + int rep = repref + drep; + + if (rep > N_t) { + rep = N_t; + } + + if (rep < 0) { + rep = 0; + } + + //initialize calculation of xy current for tempref + for (int y = 0; y < bfh ; y += 10) { + for (int x = 0; x < bfw ; x += 10) { + int yy = y / 10; + int xx = x / 10 ; + float x_c = 0.f, y_c = 0.f, Y_c = 0.f; + float x_x = 0.f, y_y = 0.f, z_z = 0.f; + float RR = rmm[rep] * redloc[y][x]; + float GG = gmm[rep] * greenloc[y][x]; + float BB = bmm[rep] * blueloc[y][x]; + Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); + xc[yy][xx] = x_c; + yc[yy][xx] = y_c; + Yc[yy][xx] = Y_c; + } + + } + + //histogram xy depend of temp...but in most cases D45 ..D65.. + //calculate for this image the mean values for each family of color, near histogram x y (number) + //xy vary from x 0..0.77 y 0..0.82 + //neutral values are near x=0.34 0.33 0.315 0.37 y =0.35 0.36 0.34 + //skin are about x 0.45 0.49 y 0.4 0.47 + //blue sky x=0.25 y=0.28 and x=0.29 y=0.32 + // step about 0.02 x 0.32 0.34 y= 0.34 0.36 skin -- sky x 0.24 0.30 y 0.28 0.32 + //big step about 0.2 + + histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy, area, inter); + } + + //calculate x y Y + int sizcurrref = siza;//choice of number of correlate colors in image + histcurrref(N_t, sizcurrref); + xx_curref(N_t, sizcurrref); + yy_curref(N_t, sizcurrref); + YY_curref(N_t, sizcurrref); + xx_curref_reduc(N_t, sizcurrref); + yy_curref_reduc(N_t, sizcurrref); + YY_curref_reduc(N_t, sizcurrref); + R_curref_reduc(N_t, sizcurrref); + G_curref_reduc(N_t, sizcurrref); + B_curref_reduc(N_t, sizcurrref); + + + hiss Wbhis [siza]; + int n1 = 0; + int n4 = 0; + int n15 = 0; + int n30 = 0; + int ntr = 0; + + for (int nh = 0; nh < siza; nh++) { + Wbhis[nh].histnum = histxy[nh]; + Wbhis[nh].index = nh; + Wbhis[nh].interest = inter[nh]; + } + + //sort in ascending order + std::sort(Wbhis, Wbhis + siza, Wbhis[0]); + + for (int nh = 0; nh < siza; nh++) { +// printf("nh=%i", Wbhis[nh].index); + } + + //part to improve + for (int nh = 0; nh < siza; nh++) { + if (Wbhis[nh].histnum < 1) { + n1++; //keep only existing color but avoid to small + } + + if (Wbhis[nh].histnum < 4) { + n4++; //keep only existing color but avoid to small + } + + if (Wbhis[nh].histnum < 15) { + n15++; //keep only existing color but avoid to small + } + + if (Wbhis[nh].histnum < 30) { + n30++; //keep only existing color but avoid to small + } + + + } + + + ntr = n30; + + if (ntr > (siza - 25)) { + ntr = n15; //if to less elements 25 elements mini + } + + if (ntr > (siza - 23)) { + ntr = n4; //if to less elements 25 elements mini + } + + if (ntr > (siza - 20)) { + ntr = n1; //if to less elements 20 elements mini - normally never be used ! + } + + int sizcurr2ref = sizcurrref - ntr; + int sizcu30 = sizcurrref - n30; + int sizcu4 = sizcurrref - n4; + +// printf("sizcurr2ref=%i sizcur_30=%i siecur_4=%i \n", sizcurr2ref, sizcu30, sizcu4); + sizcu4 = sizcu30;//arbitrary mini size if 30 result, ==> in full image 3000 pixels + + if (sizcu4 > 55) { + sizcu4 = 55; + } + + chrom wbchro[sizcu4]; + double swpr = (Txyz[repref].XX + Txyz[repref].ZZ + 1.); + double xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes + double ywpr = 1. / swpr; + + + for (int i = 0; i < sizcu4; i++) { //take the max values + int j = i; + histcurrref[j][repref] = (float) Wbhis[siza - (j + 1)].histnum; + xx_curref[j][repref] = xxx[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; + yy_curref[j][repref] = yyy[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; + YY_curref[j][repref] = YYY[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; +// printf("xx=%f yy=%f\n", xx_curref[j][repref], yy_curref[j][repref]); + } + + estimchrom = 0.f; + + for (int nh = 0; nh < sizcu4; nh++) { + float chxy = sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); + wbchro[nh].chroxy_number = chxy * sqrt(histcurrref[nh][repref]); + wbchro[nh].chroxy = sqrt(chxy); + wbchro[nh].chrox = xx_curref[nh][repref]; + wbchro[nh].chroy = yy_curref[nh][repref]; + wbchro[nh].Y = YY_curref[nh][repref]; + wbchro[nh].index = nh; + estimchrom += chxy; + } + + estimchrom /= sizcu4; + //printf("estimchrom=%f \n", estimchrom); + + if (settings->itcwb_sort) { //sort in ascending with chroma values + + std::sort(wbchro, wbchro + sizcu4, wbchro[0]); + } + + /* + for (int nh = 0; nh < sizcu4; nh++) { + printf("nh=%i chroma_xy=%f chrox=%f chroy=%f\n", nh, wbchro[nh].chroxy, wbchro[nh].chrox, wbchro[nh].chroy); + } + */ + maxval = settings->itcwb_thres;//max values of color to find correllation + + if (maxval < 10) { + maxval = 10; + } + + if (maxval > 55) { + maxval = 55; + } + + if (sizcurr2ref > maxval) { + sizcurr2ref = maxval; //keep about the biggest values, + } + + + for (int i = 0; i < sizcurr2ref; i++) { + //is condition chroxy necessary ? + if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral + w++; + xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; + yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; + YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; + // printf("xx_cu=%f yy_cu=%f Y=%f chro=%f\n", xx_curref_reduc[w][repref], yy_curref_reduc[w][repref], YY_curref_reduc[w][repref],sqrt(wbchro[sizcu4 - (i + 1)].chroxy)); + } + } + + //calculate deltaE xx to find best values of spectrals datas + int maxnb = settings->itcwb_sizereference; + + if (maxnb > 5) { + maxnb = 5; + } + + if (maxnb < 1) { + maxnb = 1; + } + + + if (settings->itcwb_thres > 39) { + maxnb = 200 / settings->itcwb_thres; + } + + for (int nb = 1; nb <= maxnb; nb ++) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 + for (int i = 0; i < w; i++) { + float mindeltaE = 100000.f; + int kN = 0; + + for (int j = 0; j < Nc ; j++) { + if (good_spectral[j] == 0) { + float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); + + if (deltaE < mindeltaE) { + mindeltaE = deltaE; + kN = j; + } + } + } + + good_spectral[kN] = 1;//good spectral are spectral color that match color histogram xy + //printf("k=%i ", kN); + } + } + +//reconvert to RGB for "reduction" + for (int i = 0; i < w; i++) { + float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + float Y = 65535.f * YY_curref_reduc[i][repref]; + float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + float r, g, b; + Color::xyz2rgb(X, Y, Z, r, g, b, wip); + r /= rmm[repref]; + g /= gmm[repref]; + b /= bmm[repref]; + R_curref_reduc[i][repref] = r; + G_curref_reduc[i][repref] = g; + B_curref_reduc[i][repref] = b; + + } + + } + +//end first part + + + + //Now begin real calculations + separated = false; + ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants + + int kk = -1; + + //calculate x y Y + int sizcurr = siza;//choice of number of correlate colors in image + histcurr(N_t, sizcurr); + xxyycurr(N_t, 2 * sizcurr); + xxyycurr_reduc(N_t, 2 * sizcurr); + float minstud = 100000.f; + int goodref = 1; + + YYcurr(N_t, sizcurr); + YYcurr_reduc(N_t, sizcurr); + +//calculate x y z for each pixel with multiplier rmm gmm bmm + kk = -1; + + for (int tt = 0; tt < N_t; tt++) {//N_t + // double swp = (Txyz[tt].XX + Txyz[tt].ZZ + 1.); + // double xwp = Txyz[tt].XX / swp; + // double ywp = 1. / swp; + + + for (int i = 0; i < w; i++) { + float x_c = 0.f, y_c = 0.f, Y_c = 0.f; + float x_x = 0.f, y_y = 0.f, z_z = 0.f; + + float RR = rmm[tt] * R_curref_reduc[i][repref]; + float GG = gmm[tt] * G_curref_reduc[i][repref]; + float BB = bmm[tt] * B_curref_reduc[i][repref]; + Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); + // xxyycurr_reduc[2 * i][tt] = fabs(x_c - xwp); + // xxyycurr_reduc[2 * i + 1][tt] = fabs(y_c - ywp); + xxyycurr_reduc[2 * i][tt] = x_c; + xxyycurr_reduc[2 * i + 1][tt] = y_c; + // printf("w=%i tt=%i xx=%f yy=%f\n",i, tt, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i +1][tt]); + + } + + for (int j = 0; j < Nc ; j++) { + reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY + reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY + //reffYY_prov[j][tt] = Ty[j][tt];//Y + // printf("w=%i tt=%i xx=%f yy=%f\n",j, tt,reffxxyy_prov[2 * kk][tt] ,reffxxyy_prov[2 * kk + 1][tt]); + + } + + kk = -1; + + for (int i = 0; i < Nc ; i++) { + if (good_spectral[i] == 1) { + kk++; + //we calculate now absolute chroma for each spectral color + // reffxxyy[2 * kk][tt] = fabs(reffxxyy_prov[2 * i][tt] - xwp); + // reffxxyy[2 * kk + 1][tt] = fabs(reffxxyy_prov[2 * i + 1][tt] - ywp); + reff_spect_xxyy[2 * kk][tt] = reff_spect_xxyy_prov[2 * i][tt]; + reff_spect_xxyy[2 * kk + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; + //printf("w=%i tt=%i xx=%f yy=%f\n",i, tt,reffxxyy[2 * kk][tt] ,reffxxyy[2 * kk + 1][tt]); + // reffYY[kk][tt] = reffYY_prov[i][tt]; + } + } + + + /* + //cat02 not need and does not work well + float nnx, nny, nnz; + + if(wbpar.wbcat02Method == "cam") {//code no update... + for(int k=0;k < sizcurr3; k++) { + float nnx = xxyycurr[2 * k][tt]*YYcurr[k][tt] / xxyycurr[2 * k + 1][tt]; + float nny = YYcurr[k][tt]; + float nnz = (1.f -xxyycurr[2 * k][tt] - xxyycurr[2 * k + 1][tt] )*YYcurr[k][tt]/xxyycurr[2 * k + 1][tt]; + float CAM02BB00 = 1.0f, CAM02BB01=1.0f, CAM02BB02=1.0f, CAM02BB10=1.0f, CAM02BB11=1.0f, CAM02BB12=1.0f, CAM02BB20=1.0f, CAM02BB21=1.0f, CAM02BB22=1.0f; //for CIECAT02 + float Xwb = Txyz[20].XX; + float Ywb = 1.; + float Zwb = Txyz[20].ZZ; + float xn, yn, zn; + ColorTemp::icieCAT02float(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, 1.0f); + + xn = CAM02BB00 * nnx + CAM02BB01 * nny + CAM02BB02 * nnz ; + yn = CAM02BB10 * nnx + CAM02BB11 * nny + CAM02BB12 * nnz ; + zn = CAM02BB20 * nnx + CAM02BB21 * nny + CAM02BB22 * nnz; + float som = xn + yn + zn; + xxyycurr[2 * k][tt] = xn / som; + xxyycurr[2 * k + 1][tt] = yn / som; + YYcurr[k][tt] = yn; + } + } + */ + + float student = 0.f; + + + studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kk, tt, student); //for xy + //printf("tt=%i st=%f\n", tt, student); + float abstud = fabs(student); + + if (abstud < minstud) { // find the minimum Student + minstud = abstud; + goodref = tt; + } + + } + + if (extra) { + struct Tempgreen { + float student; + int tempref; + int greenref; + bool operator()(const Tempgreen& ltg, const Tempgreen& rtg) + { + return ltg.student < rtg.student; + } + }; + Tempgreen Tgstud[N_g]; + + for (int i = 0; i < N_g; i++) {//init variables with + Tgstud[i].student = 1000.f;//max value to initialize + Tgstud[i].tempref = 57; + Tgstud[i].greenref = 39; + + } + + int dgoodref = settings->itcwb_greendeltatemp; + + if (dgoodref > 4) { + dgoodref = 4; + } + + int scantempbeg = goodref - (dgoodref + 1); + + if (scantempbeg < 1) { + scantempbeg = 1; + } + + int scantempend = goodref + dgoodref; + + if (scantempend > N_t - 1) { + scantempend = N_t - 1; + } + + int kkg = -1; + + for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; gr++) { + float minstudgr = 100000.f; + int goodrefgr = 1; + + for (int tt = scantempbeg; tt < scantempend; tt++) { + double r, g, b; + float rm, gm, bm; + ColorTemp WBiter = ColorTemp(Txyz[tt].Tem, gree[gr].green, 1.f, "Custom"); + WBiter.getMultipliers(r, g, b); + rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; + gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; + bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + + const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; + float new_scale_mul[4]; + bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); + + rm = new_scale_mul[0] / scale_mul[0] * gain; + gm = new_scale_mul[1] / scale_mul[1] * gain; + bm = new_scale_mul[2] / scale_mul[2] * gain; + rmm[tt] = rm / gm; + gmm[tt] = gm / gm; + bmm[tt] = bm / gm; + } + + + for (int tt = scantempbeg; tt < scantempend; tt++) {//N_t + // double swp = (Txyz[tt].XX + Txyz[tt].ZZ + 1.); + // double xwp = Txyz[tt].XX / swp; + // double ywp = 1. / swp; + + + for (int i = 0; i < w; i++) { + float x_c = 0.f, y_c = 0.f, Y_c = 0.f; + float x_x = 0.f, y_y = 0.f, z_z = 0.f; + + float RR = rmm[tt] * R_curref_reduc[i][repref]; + float GG = gmm[tt] * G_curref_reduc[i][repref]; + float BB = bmm[tt] * B_curref_reduc[i][repref]; + Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); + xxyycurr_reduc[2 * i][tt] = x_c; + xxyycurr_reduc[2 * i + 1][tt] = y_c; + // printf("w=%i tt=%i xx=%f yy=%f\n",i, tt, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i +1][tt]); + + } + + for (int j = 0; j < Nc ; j++) { + reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY + reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY + // reffYY_prov[j][tt] = Ty[j][tt];//Y + // printf("w=%i tt=%i xx=%f yy=%f\n",j, tt,reffxxyy_prov[2 * kk][tt] ,reffxxyy_prov[2 * kk + 1][tt]); + + } + + kkg = -1; + + //degrade correllation with color high chroma, but not too much...seems not good, but keep in case of?? + if (estimchrom < 0.025f) {//very smal value of chroma for image + + good_spectral[0] = 1;//blue + //good_spectral[1] = 1;//blue + // good_spectral[97] = 1;//blue + // good_spectral[93] = 1;//purple + // good_spectral[7] = 1;//green + good_spectral[11] = 1;//green + //good_spectral[42] = 1;//green + // good_spectral[75] = 1;//green + // good_spectral[46] = 1;//red + good_spectral[62] = 1;//red + // good_spectral[63] = 1;//red + // good_spectral[91] = 1;//ora + + } + + for (int i = 0; i < Nc ; i++) { + if (good_spectral[i] == 1) { + kkg++; + reff_spect_xxyy[2 * kkg][tt] = reff_spect_xxyy_prov[2 * i][tt]; + reff_spect_xxyy[2 * kkg + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; + // reffYY[kkg][tt] = reffYY_prov[i][tt]; + } + } + + float studentgr = 0.f; + + studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kkg, tt, studentgr); //for xy + float abstudgr = fabs(studentgr); + + if (abstudgr < minstudgr) { // find the minimum Student + minstudgr = abstudgr; + goodrefgr = tt; + } + + Tgstud[gr].tempref = goodrefgr; + Tgstud[gr].greenref = gr; + Tgstud[gr].student = minstudgr; + + } + + } + + std::sort(Tgstud, Tgstud + N_g, Tgstud[0]); + + for (int j = 0; j < 20; j++) { + // printf("reftemp=%i refgreen=%i stud=%f \n", Tgstud[j].tempref, Tgstud[j].greenref, Tgstud[j].student); + } + + //now search the value of green the nearest of 1 with a good student value + // I take the 3 first values + //I admit a symetrie in green coefiicient for rgb multiplier...probably not excatly true + //perhaps we can used a Snedecor test ? but why...at least we have confidence interval > 90% + int greengood; + int greengoodprov; + int goodrefprov; + float studprov; + int goodref0 = Tgstud[0].tempref; + int greengood0 = Tgstud[0].greenref - 39;//39 green = 1 + float stud0 = Tgstud[0].student; + int goodref1 = Tgstud[1].tempref; + float stud1 = Tgstud[1].student; + int greengood1 = Tgstud[1].greenref - 39; + int goodref2 = Tgstud[2].tempref; + int greengood2 = Tgstud[2].greenref - 39; + float stud2 = Tgstud[2].student; + + if (fabs(greengood2) < fabs(greengood1)) { + greengoodprov = greengood2; + goodrefprov = goodref2; + studprov = stud2; + } else { + greengoodprov = greengood1; + goodrefprov = goodref1; + studprov = stud1; + + } + + if (fabs(greengoodprov) < fabs(greengood0)) { + goodref = goodrefprov; + greengood = greengoodprov + 39; + studgood = studprov; + + } else { + goodref = goodref0; + greengood = greengood0 + 39; + studgood = stud0; + } + + tempitc = Txyz[goodref].Tem; + greenitc = gree[greengood].green; + + } + + histcurr(0, 0); + histcurrref(0, 0); + xxyycurr(0, 0); + xxyycurr_reduc(0, 0); + xx_curref(0, 0); + yy_curref(0, 0); + YY_curref(0, 0); + + reff_spect_xxyy(0, 0); + YYcurr(0, 0); + YYcurr_reduc(0, 0); + reff_spect_yy_camera(0, 0); + reff_spect_xx_camera(0, 0); + xx_curref_reduc(0, 0); + yy_curref_reduc(0, 0); + YY_curref_reduc(0, 0); + + R_curref_reduc(0, 0); + G_curref_reduc(0, 0); + B_curref_reduc(0, 0); + + reff_spect_xxyy_prov(0, 0); + +// reffYY(0, 0); +// reffYY_prov(0, 0); + + avg_rm = 10000.f * rmm[goodref]; + avg_gm = 10000.* gmm[goodref]; + avg_bm = 10000.f * bmm[goodref]; + + if (!extra) { + tempitc = Txyz[goodref].Tem; + } + + + printf("ITCWB tempitc=%f gritc=%f stud=%f \n", tempitc, greenitc, studgood); + + + xc(0, 0); + yc(0, 0); + Yc(0, 0); + + + + for (int i = 0; i < Nc; i++) { + delete [] Tx[i]; + delete [] Ty[i]; + delete [] Tz[i]; + delete [] Ta[i]; + delete [] Tb[i]; + delete [] TL[i]; + + } + + delete [] Tx; + delete [] Ty; + delete [] Tz; + delete [] Ta; + delete [] Tb; + delete [] TL; + delete [] TX; + delete [] TY; + delete [] TZ; + delete [] good_spectral; + + + delete [] rmm; + delete [] gmm; + delete [] bmm; + + + + +} + +void RawImageSource::WBauto(double & tempref, double & greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double & avg_rm, double & avg_gm, double & avg_bm, double & tempitc, double & greenitc, float & studgood, bool & twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams & cmp, const RAWParams & raw) +{ + BENCHFUN + //auto white balance +// printf ("AUtoWB OK\n"); +/* + array2D redsobel; + array2D greensobel; + array2D bluesobel; + + redsobel(bfw, bfh); + greensobel(bfw, bfh); + bluesobel(bfw, bfh); +*/ + double avg_r = 0.; + double avg_g = 0.; + double avg_b = 0.; + int rn = 0, gn = 0, bn = 0; +// constexpr double clipHigh = 65500.0; +// constexpr double clipLow = 0; //1500.0; + bool edg = false; + bool greyn = false; + bool robust = false; + bool itc = false; + + if (wbpar.method == "autorobust") { + // printf("autorob\n"); + // RobustWB(redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm); + + } + + if (wbpar.method == "autedg") { + // printf("autoedge\n"); + // edg = true; + } + + if (wbpar.method == "aut") { +// greyn = true; + } + + + + if (wbpar.method == "autitcgreen") { + bool extra = false; + + if (greenref > 0.77 && greenref < 1.3) { + greenitc = greenref; + extra = false; + + if (settings->itcwb_forceextra) { + extra = true; + } + } else { + greenitc = 1.; + extra = true; + } + + // greenref = wbpar.green; +// printf("gree=%f\n", greenref); + tempitc = 5000.; +// greenitc = greenref; + itc = true; + + if (itc) { + ItcWB(extra, tempref, greenref, tempitc, greenitc, studgood, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar); + } + } + + if (wbpar.method == "autedgsdw") { + // SobelWB(redsobel, greensobel, bluesobel, redloc, greenloc, blueloc, bfw, bfh); + // SdwWB(redsobel, greensobel, bluesobel, bfw, bfh, avg_rm, avg_gm, avg_bm); + + } + + if (wbpar.method == "autedgrob") { + // SobelWB(redsobel, greensobel, bluesobel, redloc, greenloc, blueloc, bfw, bfh); + // RobustWB(redsobel, greensobel, bluesobel, bfw, bfh, avg_rm, avg_gm, avg_bm); + + } + + if (wbpar.method == "autosdw") { + // SdwWB(redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm); + + + // printf("bfw=%i bfh=%i begx=%i begy=%i xEn=%i yEn=%i cx=%i\n", bfw, bfh, begx, begy, xEn, yEn, cx); + } + +/* + if (edg) { + SobelWB(redsobel, greensobel, bluesobel, redloc, greenloc, blueloc, bfw, bfh); + +#ifdef _OPENMP + #pragma omp parallel for reduction(+:avg_r, avg_g, avg_b, rn, gn, bn) +#endif + + for (int y = 0; y < bfh ; y++) { + for (int x = 0; x < bfw ; x++) { + if (redsobel[y][x] < clipHigh && redsobel[y][x] > clipLow) { + avg_r += redsobel[y][x]; + rn++; + } + + if (greensobel[y][x] < clipHigh && greensobel[y][x] > clipLow) { + avg_g += greensobel[y][x]; + gn++; + } + + if (bluesobel[y][x] < clipHigh && bluesobel[y][x] > clipLow) { + avg_b += bluesobel[y][x]; + bn++; + } + } + } + } +*/ +/* + if (greyn) { +#ifdef _OPENMP + #pragma omp parallel for reduction(+:avg_r, avg_g, avg_b, rn, gn, bn) +#endif + + for (int y = 0; y < bfh ; y++) { + for (int x = 0; x < bfw ; x++) { + if (redloc[y][x] < clipHigh && redloc[y][x] > clipLow) { + avg_r += redloc[y][x]; + rn++; + } + + if (greenloc[y][x] < clipHigh && greenloc[y][x] > clipLow) { + avg_g += greenloc[y][x]; + gn++; + } + + if (blueloc[y][x] < clipHigh && blueloc[y][x] > clipLow) { + avg_b += blueloc[y][x]; + bn++; + } + } + } + } +*/ +// float varir = localr.equal; +// float varib = 1.f - (varir - 1.f); + + + +//CAT02 inverse + +// + if (greyn || edg) { + avg_rm = avg_r / rn; + avg_gm = avg_g / gn; + avg_bm = avg_b / bn; + } + + /* + //inverse cat02 + if (localr.wbcamMethod == "cat" || localr.wbcamMethod == "gamcat") { + //printf("Inverse CAT02\n"); + float x, y, z; + // cat02_to_xyzfloatraw ( x, y, z, avg_rm, avg_gm, avg_bm); + Color::xyz2rgbraw (x, y, z, avg_rm, avg_gm, avg_bm, wip); + } + */ + if (edg) { + // printf("Local sobel avgr = % f avgg = % f avgb = % f \n", avg_rm, avg_gm, avg_bm); + } + + if (greyn || robust) { + // printf("Local rgb avgr = % f avgg = % f avgb = % f \n", avg_rm, avg_gm, avg_bm); + } + +/* + redsobel(0, 0); + greensobel(0, 0); + bluesobel(0, 0); +*/ +} + + +void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) +{ + //used by auto WB local to calculate red, green, blue in local region + // int bfh = bf_h + 3, bfw = bf_w + 3; + int bfh = H, bfw = W; + + if (local) { + bfh = bf_h + 3; + bfw = bf_w + 3; + } + + // printf ("bfh=%i bfw=%i H=%i W=%i \n", bf_h, bf_w, H, W); + ColorManagementParams cmp; + + //TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(cmp.working); + // TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix (cmp.working); + /* + float toxyz[3][3] = { + { + static_cast ( wprof[0][0] / Color::D50x), + static_cast ( wprof[0][1] / Color::D50x), + static_cast ( wprof[0][2] / Color::D50x) + }, { + static_cast ( wprof[1][0]), + static_cast ( wprof[1][1]), + static_cast ( wprof[1][2]) + }, { + static_cast ( wprof[2][0] / Color::D50z), + static_cast ( wprof[2][1] / Color::D50z), + static_cast ( wprof[2][2] / Color::D50z) + } + }; + */ + /* + double wp[3][3] = { + {wprof[0][0], wprof[0][1], wprof[0][2]}, + {wprof[1][0], wprof[1][1], wprof[1][2]}, + {wprof[2][0], wprof[2][1], wprof[2][2]} + }; + */ +// printf("wp00=%f wp02=%f\n", wp[0][0], wp[0][2]); + if (! greenloc) { + greenloc(bfw, bfh); + } + + if (! redloc) { + redloc(bfw, bfh); + } + + if (! blueloc) { + blueloc(bfw, bfh); + } + + float avgL = 0.f; + float redmm = 0.f, greenmm = 0.f, bluemm = 0.f; + + //center data on normal values + int nn = 0; + + for (int i = 0; i < H; i ++) + for (int j = 0; j < W; j++) { + int lox = cx + j; + int loy = cy + i; + + if (!local) { + redmm = redloc[i][j] = red[i][j]; + greenmm = greenloc[i][j] = green[i][j]; + bluemm = blueloc[i][j] = blue[i][j]; + float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); + avgL += LL; + nn++; + } else { + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + redmm = redloc[loy - begy][lox - begx] = red[i][j]; + greenmm = greenloc[loy - begy][lox - begx] = green[i][j]; + bluemm = blueloc[loy - begy][lox - begx] = blue[i][j]; + float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); + avgL += LL; + nn++; + } + } + } + + avgL /= nn; + + float sig = 0.f; + float vari = 0.f; + int mm = 0; + + for (int i = 0; i < bfh; i++) + for (int j = 0; j < bfw; j++) { + float LL = (0.299f * redloc[i][j] + 0.587f * greenloc[i][j] + 0.114f * blueloc[i][j]); + vari += SQR(LL - avgL); + mm++; + } + + sig = sqrt(vari / mm); + float multip = 60000.f / (avgL + 2.f * sig); + + // printf("multip=%f \n", multip); + for (int i = 0; i < bfh; i++) + for (int j = 0; j < bfw; j++) { + redloc[i][j] *= multip; + greenloc[i][j] *= multip; + blueloc[i][j] *= multip; + } + + if (gamma) { + // printf("gamma loc\n"); + + for (int i = 0; i < bfh; i++) + for (int j = 0; j < bfw; j++) { + redloc[i][j] = Color::gammatab_srgb[redloc[i][j]]; + greenloc[i][j] = Color::gammatab_srgb[greenloc[i][j]]; + blueloc[i][j] = Color::gammatab_srgb[blueloc[i][j]]; + } + } + + if (cat02) {//CAT02 + /* + //not good threatment, I must wait merge branch cat02wb + for (int i = 0; i < bfh; i++) + for (int j = 0; j < bfw; j++) { + float X = 0.f, Y = 0.f, Z = 0.f; + Color::rgbxyz(redloc[i][j], greenloc[i][j], blueloc[i][j], X, Y, Z, wp); + double temp; + double Xr = X / 65535.; + double Yr = Y / 65535.; + double Zr = Z / 65535.; + + Ciecam02::xyz_to_cat02float ( redloc[i][j], greenloc[i][j], blueloc[i][j], Xr, Yr, Zr, 1); + redloc[i][j] *= 65535.f; + greenloc[i][j] *= 65535.f; + blueloc[i][j] *= 65535.f; + //to do ciecam adaptation + } + */ + } + +} + +//void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) +void RawImageSource::getAutoWBMultipliersloc(double & tempref, double & greenref, double & tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw) +{ + BENCHFUN + constexpr double clipHigh = 64000.0; + + if (ri->get_colors() == 1) { + rm = gm = bm = 1; + return; + } +/* + if (redAWBMul != -1.) { + rm = redAWBMul; + gm = greenAWBMul; + bm = blueAWBMul; + return; + } + + if (!isWBProviderReady()) { + rm = -1.0; + gm = -1.0; + bm = -1.0; + return; + } +*/ + double avg_r = 0; + double avg_g = 0; + double avg_b = 0; + int rn = 0, gn = 0, bn = 0; + double avg_rm, avg_gm, avg_bm; + // int bfh = bf_h + 3, bfw = bf_w + 3; + int bfh = H, bfw = W; + if (wbpar.method == "autold") { + + if (fuji) { + for (int i = 32; i < H - 32; i++) { + int fw = ri->get_FujiWidth(); + int start = ABS(fw - i) + 32; + int end = min(H + W - fw - i, fw + i) - 32; + + for (int j = start; j < end; j++) { + if (ri->getSensorType() != ST_BAYER) { + double dr = CLIP(initialGain * (rawData[i][3 * j] )); + double dg = CLIP(initialGain * (rawData[i][3 * j + 1])); + double db = CLIP(initialGain * (rawData[i][3 * j + 2])); + + if (dr > clipHigh || dg > clipHigh || db > clipHigh) { + continue; + } + + avg_r += dr; + avg_g += dg; + avg_b += db; + rn = gn = ++bn; + } else { + int c = FC( i, j); + double d = CLIP(initialGain * (rawData[i][j])); + + if (d > clipHigh) { + continue; + } + + // Let's test green first, because they are more numerous + if (c == 1) { + avg_g += d; + gn++; + } else if (c == 0) { + avg_r += d; + rn++; + } else { /*if (c==2)*/ + avg_b += d; + bn++; + } + } + } + } + } else { + if (ri->getSensorType() != ST_BAYER) { + if(ri->getSensorType() == ST_FUJI_XTRANS) { + const double compval = clipHigh / initialGain; +#ifdef _OPENMP + #pragma omp parallel +#endif + { + double avg_c[3] = {0.0}; + int cn[3] = {0}; +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) nowait +#endif + + for (int i = 32; i < H - 32; i++) { + for (int j = 32; j < W - 32; j++) { + // each loop read 1 rgb triplet value + double d = rawData[i][j]; + + if (d > compval) { + continue; + } + + int c = ri->XTRANSFC(i, j); + avg_c[c] += d; + cn[c]++; + } + } + +#ifdef _OPENMP + #pragma omp critical +#endif + { + avg_r += avg_c[0]; + avg_g += avg_c[1]; + avg_b += avg_c[2]; + rn += cn[0]; + gn += cn[1]; + bn += cn[2]; + } + } + avg_r *= initialGain; + avg_g *= initialGain; + avg_b *= initialGain; + } else { + for (int i = 32; i < H - 32; i++) + for (int j = 32; j < W - 32; j++) { + // each loop read 1 rgb triplet value + + double dr = CLIP(initialGain * (rawData[i][3 * j] )); + double dg = CLIP(initialGain * (rawData[i][3 * j + 1])); + double db = CLIP(initialGain * (rawData[i][3 * j + 2])); + + if (dr > clipHigh || dg > clipHigh || db > clipHigh) { + continue; + } + + avg_r += dr; + rn++; + avg_g += dg; + avg_b += db; + } + + gn = rn; + bn = rn; + } + } else { + //determine GRBG coset; (ey,ex) is the offset of the R subarray + int ey, ex; + + if (ri->ISGREEN(0, 0)) { //first pixel is G + if (ri->ISRED(0, 1)) { + ey = 0; + ex = 1; + } else { + ey = 1; + ex = 0; + } + } else {//first pixel is R or B + if (ri->ISRED(0, 0)) { + ey = 0; + ex = 0; + } else { + ey = 1; + ex = 1; + } + } + + const double compval = clipHigh / initialGain; +#ifdef _OPENMP + #pragma omp parallel for reduction(+:avg_r,avg_g,avg_b,rn,gn,bn) schedule(dynamic,8) +#endif + + for (int i = 32; i < H - 32; i += 2) + for (int j = 32; j < W - 32; j += 2) { + //average each Bayer quartet component individually if non-clipped + double d[2][2]; + d[0][0] = rawData[i][j]; + d[0][1] = rawData[i][j + 1]; + d[1][0] = rawData[i + 1][j]; + d[1][1] = rawData[i + 1][j + 1]; + + if (d[ey][ex] <= compval) { + avg_r += d[ey][ex]; + rn++; + } + + if (d[1 - ey][ex] <= compval) { + avg_g += d[1 - ey][ex]; + gn++; + } + + if (d[ey][1 - ex] <= compval) { + avg_g += d[ey][1 - ex]; + gn++; + } + + if (d[1 - ey][1 - ex] <= compval) { + avg_b += d[1 - ey][1 - ex]; + bn++; + } + } + + avg_r *= initialGain; + avg_g *= initialGain; + avg_b *= initialGain; + + } + } + } + + if (wbpar.method == "aut" || wbpar.method == "autosdw" || wbpar.method == "autedgsdw" || wbpar.method == "autitcgreen" || wbpar.method == "autedgrob" || wbpar.method == "autedg" || wbpar.method == "autorobust") { + bool twotimes = false; + WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); + + } + + redloc(0, 0); + greenloc(0, 0); + blueloc(0, 0); + + if( settings->verbose ) { + printf ("AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); + } + + // return ColorTemp (pow(avg_r/rn, 1.0/6.0)*img_r, pow(avg_g/gn, 1.0/6.0)*img_g, pow(avg_b/bn, 1.0/6.0)*img_b); + double reds = 0., greens = 0., blues = 0.; + + if (wbpar.method == "aut" || wbpar.method == "autosdw" || wbpar.method == "autedgsdw" || wbpar.method == "autedgrob" || wbpar.method == "autedg" || wbpar.method == "autorobust") { + //twotimes = true; + reds = avg_rm * refwb_red; + greens = avg_gm * refwb_green; + blues = avg_bm * refwb_blue; + } + + if (wbpar.method == "autold") { + reds = avg_r / std::max(1, rn) * refwb_red; + greens = avg_g / std::max(1, gn) * refwb_green; + blues = avg_b / std::max(1, bn) * refwb_blue; + } + + if (wbpar.method == "autitcgreen") { + //not used + redAWBMul = rm = avg_rm * refwb_red; + greenAWBMul = gm = avg_gm * refwb_green; + blueAWBMul = bm = avg_bm * refwb_blue; + } else { + redAWBMul = rm = imatrices.rgb_cam[0][0] * reds + imatrices.rgb_cam[0][1] * greens + imatrices.rgb_cam[0][2] * blues; + greenAWBMul = gm = imatrices.rgb_cam[1][0] * reds + imatrices.rgb_cam[1][1] * greens + imatrices.rgb_cam[1][2] * blues; + blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; + } + +} + + + + + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) { diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 4c7b0ba21..477519c1f 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -85,10 +85,13 @@ protected: // the interpolated green plane: array2D green; + array2D greenloc; // the interpolated red plane: array2D red; + array2D redloc; // the interpolated blue plane: array2D blue; + array2D blueloc; bool rawDirty; float psRedBrightness[4]; float psGreenBrightness[4]; @@ -101,6 +104,7 @@ protected: void hlRecovery (const std::string &method, float* red, float* green, float* blue, int width, float* hlmax); void transformRect (const PreviewProps &pp, int tran, int &sx1, int &sy1, int &width, int &height, int &fw); void transformPosition (int x, int y, int tran, int& tx, int& ty); + void ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const ColorManagementParams &cmp, const RAWParams &raw, const WBParams & wbpar); unsigned FC(int row, int col) const { @@ -136,6 +140,9 @@ public: void copyOriginalPixels(const RAWParams &raw, RawImage *ri, RawImage *riDark, RawImage *riFlatFile, array2D &rawData ); void cfaboxblur (RawImage *riFlatFile, float* cfablur, int boxH, int boxW); void scaleColors (int winx, int winy, int winw, int winh, const RAWParams &raw, array2D &rawData); // raw for cblack + void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw); + void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw); + void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w); void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; eSensorType getSensorType () const override diff --git a/rtengine/settings.h b/rtengine/settings.h index 1fc3b222c..1986ee69f 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -80,6 +80,14 @@ public: // bool bw_complementary; double level0_cbdl; double level123_cbdl; + int itcwb_thres; + bool itcwb_sort; + int itcwb_greenrange; + int itcwb_greendeltatemp; + bool itcwb_forceextra; + int itcwb_sizereference; + int itcwb_delta; + Glib::ustring lensfunDbDirectory; ///< The directory containing the lensfun database. If empty, the system defaults will be used (as described in http://lensfun.sourceforge.net/manual/dbsearch.html) enum class ThumbnailInspectorMode { diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index 6ca3091a3..ce101bd7a 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -29,6 +29,8 @@ namespace rtengine { +using namespace procparams; +ProcParams* params; extern const Settings* settings; @@ -309,6 +311,30 @@ void StdImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) } } +void StdImageSource::WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw) +{ +} + +void StdImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) +{} + +void StdImageSource::getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) +{ + if (redAWBMul != -1.) { + rm = redAWBMul; + gm = greenAWBMul; + bm = blueAWBMul; + return; + } + + img->getAutoWBMultipliersloc(tempref, greenref, tempitc, greenitc,studgood, begx, begy, yEn, xEn, cx, cy, bf_h, bf_w, rm, gm, bm, params->wb, params->icm, params->raw); + + redAWBMul = rm; + greenAWBMul = gm; + blueAWBMul = bm; +} + + void StdImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) { if (redAWBMul != -1.) { diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 8f16880dc..ba75efbb9 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -44,12 +44,15 @@ public: int load (const Glib::ustring &fname) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw) override; + void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w); ColorTemp getWB () const override { return wb; } void getAutoWBMultipliers (double &rm, double &gm, double &bm) override; ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) override; + void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw); + void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw); eSensorType getSensorType() const override {return ST_NONE;} bool isMono() const override {return false;} diff --git a/rtgui/options.cc b/rtgui/options.cc index 2437f5313..89a490a68 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -583,6 +583,13 @@ void Options::setDefaults() rtSettings.amchroma = 40;//between 20 and 140 low values increase effect..and also artifacts, high values reduces rtSettings.level0_cbdl = 0; rtSettings.level123_cbdl = 30; + rtSettings.itcwb_thres = 34;//between 10 to 55 + rtSettings.itcwb_sort = false; + rtSettings.itcwb_greenrange = 0;//between 0 to 2 + rtSettings.itcwb_greendeltatemp = 2;//between 0 and 4 + rtSettings.itcwb_forceextra = true; + rtSettings.itcwb_sizereference = 3;//between 1 and 5 + rtSettings.itcwb_delta = 1;//between 0 and 5 rtSettings.protectred = 60; rtSettings.protectredh = 0.3; @@ -1485,6 +1492,35 @@ void Options::readFromFile(Glib::ustring fname) rtSettings.level123_cbdl = keyFile.get_double("Color Management", "CBDLlevel123"); } + if (keyFile.has_key("Color Management", "Itcwb_thres")) { + rtSettings.itcwb_thres = keyFile.get_integer("Color Management", "Itcwb_thres"); + } + + if (keyFile.has_key("Color Management", "Itcwb_sort")) { + rtSettings.itcwb_sort = keyFile.get_boolean("Color Management", "Itcwb_sort"); + } + + if (keyFile.has_key("Color Management", "Itcwb_forceextra")) { + rtSettings.itcwb_forceextra = keyFile.get_boolean("Color Management", "Itcwb_forceextra"); + } + + if (keyFile.has_key("Color Management", "Itcwb_greenrange")) { + rtSettings.itcwb_greenrange = keyFile.get_integer("Color Management", "Itcwb_greenrange"); + } + + if (keyFile.has_key("Color Management", "Itcwb_greendeltatemp")) { + rtSettings.itcwb_greendeltatemp = keyFile.get_integer("Color Management", "Itcwb_greendeltatemp"); + } + + if (keyFile.has_key("Color Management", "Itcwb_sizereference")) { + rtSettings.itcwb_sizereference = keyFile.get_integer("Color Management", "Itcwb_sizereference"); + } + + if (keyFile.has_key("Color Management", "Itcwb_delta")) { + rtSettings.itcwb_delta = keyFile.get_integer("Color Management", "Itcwb_delta"); + } + + //if (keyFile.has_key ("Color Management", "Colortoningab")) rtSettings.colortoningab = keyFile.get_double("Color Management", "Colortoningab"); //if (keyFile.has_key ("Color Management", "Decaction")) rtSettings.decaction = keyFile.get_double("Color Management", "Decaction"); @@ -2148,6 +2184,14 @@ void Options::saveToFile(Glib::ustring fname) //keyFile.set_boolean ("Color Management", "Ciebadpixgauss", rtSettings.ciebadpixgauss); keyFile.set_double("Color Management", "CBDLlevel0", rtSettings.level0_cbdl); keyFile.set_double("Color Management", "CBDLlevel123", rtSettings.level123_cbdl); + keyFile.set_integer("Color Management", "Itcwb_thres", rtSettings.itcwb_thres); + keyFile.set_boolean("Color Management", "Itcwb_sort", rtSettings.itcwb_sort); + keyFile.set_integer("Color Management", "Itcwb_greenrange", rtSettings.itcwb_greenrange); + keyFile.set_integer("Color Management", "Itcwb_greendeltatemp", rtSettings.itcwb_greendeltatemp); + keyFile.set_boolean("Color Management", "Itcwb_forceextra", rtSettings.itcwb_forceextra); + keyFile.set_integer("Color Management", "Itcwb_sizereference", rtSettings.itcwb_sizereference); + keyFile.set_integer("Color Management", "Itcwb_delta", rtSettings.itcwb_delta); + //keyFile.set_double ("Color Management", "Colortoningab", rtSettings.colortoningab); //keyFile.set_double ("Color Management", "Decaction", rtSettings.decaction); keyFile.set_string("Color Management", "ClutsDirectory", clutsDir); diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 3c3382bc3..226edab0b 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -175,6 +175,14 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB row[methodColumns.colId] = i + 100; } + if (currType == WBEntry::Type::AUTO) { + // Creating the auto category + row = *(refTreeModel->append()); + row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colLabel] = M("TP_WBALANCE_AUTO_HEADER"); + row[methodColumns.colId] = i + 100; + } + if (currType == WBEntry::Type::WATER) { // Creating the under water subcategory header row = *(refTreeModel->append()); @@ -213,6 +221,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB || currType == WBEntry::Type::WATER || currType == WBEntry::Type::FLASH || currType == WBEntry::Type::LED + || currType == WBEntry::Type::AUTO ) { childrow = *(refTreeModel->append(row.children())); childrow[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; From 07d74501f2b52f627b351750c317d00a0fe45ba4 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Jun 2019 17:40:16 +0200 Subject: [PATCH 018/264] Second part ITCWB --- rtdata/languages/default | 5 ++ rtengine/imagesource.h | 1 + rtengine/improccoordinator.cc | 87 ++++++++++++++++++++++++++++------- rtengine/improccoordinator.h | 4 ++ rtengine/procparams.cc | 12 ++--- rtengine/rawimagesource.cc | 8 +++- rtengine/rtengine.h | 2 +- rtgui/whitebalance.cc | 25 +++++++++- rtgui/whitebalance.h | 5 +- 9 files changed, 120 insertions(+), 29 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 5ea726218..8a650d4ba 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2222,6 +2222,8 @@ TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast c TP_WAVELET_TMTYPE;Compression method TP_WAVELET_TON;Toning TP_WBALANCE_AUTO;Auto +TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic. +TP_WBALANCE_STUDLABEL;Student Itcwb: %1 TP_WBALANCE_CAMERA;Camera TP_WBALANCE_CLOUDY;Cloudy TP_WBALANCE_CUSTOM;Custom @@ -2231,6 +2233,9 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of "whi TP_WBALANCE_FLASH55;Leica TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta +TP_WBALANCE_AUTO_HEADER;Autos +TP_WBALANCE_AUTOOLD;Auto grey old +TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_FLASH_HEADER;Flash TP_WBALANCE_FLUO1;F1 - Daylight TP_WBALANCE_FLUO2;F2 - Cool White diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index 089cb3bae..11fdb1a66 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -103,6 +103,7 @@ public: virtual void convertColorSpace (Imagefloat* image, const ColorManagementParams &cmp, const ColorTemp &wb) = 0; // DIRTY HACK: this method is derived in rawimagesource and strimagesource, but (...,RAWParams raw) will be used ONLY for raw images virtual void getAutoWBMultipliers (double &rm, double &gm, double &bm) = 0; + virtual void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) = 0; virtual ColorTemp getWB () const = 0; virtual ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) = 0; virtual void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw) = 0; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index e718087ec..2ee24f750 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -332,17 +332,17 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bool autowb0 = false; // bool autoitc = false; - autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - // autoitc = (params.wb.method == "autitcgreen"); - // bool gamma = false; - // bool cat = false; -// if (params.wb.wbcat02Method == "cam" && autoitc) { -// cat = true; -// } + // autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); + autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); + if(autowb0) printf("autoOKOKOK\n"); + if(!autowb0) printf("NOOOOOOONNNNNN\n"); - if (autowb0) { + + // if (autowb0) { + // printf("OK rgbloc avant\n"); imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); - } + // printf("OK rgbloc apres\n"); + // } if (highDetailNeeded) { @@ -377,7 +377,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bool autowb = false; autowb = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - + if(autowb) printf("AUTOAUTO\n"); + if(!autowb) printf("PAS--NON\n"); + if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window @@ -389,16 +391,27 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } currWB = ColorTemp(params->wb.temperature, params->wb.green, params->wb.equal, params->wb.method); + float studgood = 1000.f; if (!params->wb.enabled) { currWB = ColorTemp(); } else if (params->wb.method == "Camera") { currWB = imgsrc->getWB(); - } else if (params->wb.method == "Auto") { + // } else if (params->wb.method == "Auto") { + } else if (autowb) { if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias) { double rm, gm, bm; - imgsrc->getAutoWBMultipliers(rm, gm, bm); + double tempitc = 5000.f; + double greenitc = 1.; + // imgsrc->getAutoWBMultipliers(rm, gm, bm); + currWBitc = imgsrc->getWB(); + double tempref = currWBitc.getTemp() * (1. + params->wb.tempBias); + double greenref = currWBitc.getGreen(); + printf("tempref=%f greref=%f\n", tempref, greenref); + imgsrc->getAutoWBMultipliersloc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); + +/* if (rm != -1.) { autoWB.update(rm, gm, bm, params->wb.equal, params->wb.tempBias); lastAwbEqual = params->wb.equal; @@ -408,9 +421,39 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) lastAwbTempBias = 0.0; autoWB.useDefaults(params->wb.equal); } - +*/ //double rr,gg,bb; //autoWB.getMultipliers(rr,gg,bb); + if (params->wb.method == "autitcgreen") { + params->wb.temperature = tempitc; + params->wb.green = greenitc; + currWB = ColorTemp(params->wb.temperature, params->wb.green, 1., params->wb.method); + currWB.getMultipliers(rm, gm, bm); + } + + if (rm != -1.) { + double bias = params->wb.tempBias; + + if (params->wb.method == "autitcgreen") { + bias = 0.; + } + + autoWB.update(rm, gm, bm, params->wb.equal, bias); + //double temper = autoWB.getTemp(); + //double gre = autoWB.getGreen(); + //printf("temper=%f gre=%f \n", temper, gre); + + lastAwbEqual = params->wb.equal; + lastAwbTempBias = params->wb.tempBias; + lastAwbauto = params->wb.method; + } else { + lastAwbEqual = -1.; + lastAwbTempBias = 0.0; + lastAwbauto = ""; + autoWB.useDefaults(params->wb.equal); + } + + } currWB = autoWB; @@ -421,8 +464,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) params->wb.green = currWB.getGreen(); } - if (params->wb.method == "Auto" && awbListener && params->wb.enabled) { - awbListener->WBChanged(params->wb.temperature, params->wb.green); + // if (params->wb.method == "Auto" && awbListener && params->wb.enabled) { + if (autowb && awbListener) { + awbListener->WBChanged(params->wb.temperature, params->wb.green, studgood); } /* @@ -1198,18 +1242,27 @@ bool ImProcCoordinator::getAutoWB(double& temp, double& green, double equal, dou { if (imgsrc) { - if (lastAwbEqual != equal || lastAwbTempBias != tempBias) { + if (lastAwbEqual != equal || lastAwbTempBias != tempBias || lastAwbauto != params->wb.method) { // Issue 2500 MyMutex::MyLock lock(minit); // Also used in crop window double rm, gm, bm; - imgsrc->getAutoWBMultipliers(rm, gm, bm); + params->wb.method = "autold";//same result as before muliple Auto WB + + // imgsrc->getAutoWBMultipliers(rm, gm, bm); + double tempitc = 5000.; + double greenitc = 1.; + float studgood = 1000.f; + double tempref, greenref; + imgsrc->getAutoWBMultipliersloc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); if (rm != -1) { autoWB.update(rm, gm, bm, equal, tempBias); lastAwbEqual = equal; lastAwbTempBias = tempBias; + lastAwbauto = params->wb.method; } else { lastAwbEqual = -1.; autoWB.useDefaults(equal); + lastAwbauto = ""; lastAwbTempBias = 0.0; } } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index c293f0c16..dd91187db 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -68,9 +68,13 @@ protected: ColorTemp currWB; ColorTemp autoWB; + ColorTemp currWBloc; + ColorTemp autoWBloc; + ColorTemp currWBitc; double lastAwbEqual; double lastAwbTempBias; + Glib::ustring lastAwbauto; Glib::ustring monitorProfile; RenderingIntent monitorIntent; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index cfa35ee01..21124f7bf 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1233,12 +1233,12 @@ const std::vector& WBParams::getWbEntries() // {"Auto", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f, 0.f}, {"autitcgreen", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOITCGREEN"), 0, 1.f, 1.f, 0.f}, {"autold", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOOLD"), 0, 1.f, 1.f, 0.f}, - {"aut", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTODEM"), 0, 1.f, 1.f, 0.f}, - {"autedg", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGE"), 0, 1.f, 1.f, 0.f}, - {"autorobust", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOROB"), 0, 1.f, 1.f, 0.f}, - {"autosdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOSDW"), 0, 1.f, 1.f, 0.f}, - {"autedgsdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGESW"), 0, 1.f, 1.f, 0.f}, - {"autedgrob", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGEROB"), 0, 1.f, 1.f, 0.f}, + // {"aut", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTODEM"), 0, 1.f, 1.f, 0.f}, + // {"autedg", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGE"), 0, 1.f, 1.f, 0.f}, + // {"autorobust", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOROB"), 0, 1.f, 1.f, 0.f}, + // {"autosdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOSDW"), 0, 1.f, 1.f, 0.f}, + // {"autedgsdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGESW"), 0, 1.f, 1.f, 0.f}, + // {"autedgrob", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGEROB"), 0, 1.f, 1.f, 0.f}, {"Daylight", WBEntry::Type::DAYLIGHT, M("TP_WBALANCE_DAYLIGHT"), 5300, 1.f, 1.f, 0.f}, {"Cloudy", WBEntry::Type::CLOUDY, M("TP_WBALANCE_CLOUDY"), 6200, 1.f, 1.f, 0.f}, {"Shade", WBEntry::Type::SHADE, M("TP_WBALANCE_SHADE"), 7600, 1.f, 1.f, 0.f}, diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 7d4f613f9..e6f50336b 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -6726,7 +6726,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {12001., 0.960440, 1.601019} }; int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - int nbt = N_t; float **Tx = nullptr; float **Ty = nullptr; @@ -7591,7 +7590,7 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D } - +printf("ok avant itc\n"); if (wbpar.method == "autitcgreen") { bool extra = false; @@ -7612,9 +7611,11 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D tempitc = 5000.; // greenitc = greenref; itc = true; +printf("ok avant itc 2\n"); if (itc) { ItcWB(extra, tempref, greenref, tempitc, greenitc, studgood, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar); +printf("ok apres itc \n"); } } @@ -7733,6 +7734,7 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) { //used by auto WB local to calculate red, green, blue in local region + printf("OK RGBLOC\n"); // int bfh = bf_h + 3, bfw = bf_w + 3; int bfh = H, bfw = W; @@ -8081,7 +8083,9 @@ void RawImageSource::getAutoWBMultipliersloc(double & tempref, double & greenref if (wbpar.method == "aut" || wbpar.method == "autosdw" || wbpar.method == "autedgsdw" || wbpar.method == "autitcgreen" || wbpar.method == "autedgrob" || wbpar.method == "autedg" || wbpar.method == "autorobust") { bool twotimes = false; + printf("OK avant auto\n"); WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); + printf("OK apres auto\n"); } diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 6264d43ae..e08a2a613 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -376,7 +376,7 @@ class AutoWBListener { public: virtual ~AutoWBListener() = default; - virtual void WBChanged(double temp, double green) = 0; + virtual void WBChanged(double temp, double green, float studgood) = 0; }; class FrameCountListener diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 226edab0b..b04b1f136 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -324,6 +324,9 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB Gtk::Image* itempbiasL = Gtk::manage (new RTImage ("circle-blue-small.png")); Gtk::Image* itempbiasR = Gtk::manage (new RTImage ("circle-yellow-small.png")); + StudLabel = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); + StudLabel->set_tooltip_text(M("TP_WBALANCE_STUDLABEL_TOOLTIP")); + temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, CENTERTEMP, itempL, itempR, &wbSlider2Temp, &wbTemp2Slider)); green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0, igreenL, igreenR)); equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0, iblueredL, iblueredR)); @@ -344,6 +347,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB boxgreen->pack_start(*igreenL); boxgreen->pack_start(*green); boxgreen->pack_start(*igreenR);*/ + pack_start(*StudLabel); pack_start (*temp); //pack_start (*boxgreen); @@ -477,6 +481,12 @@ void WhiteBalance::optChanged () const WBEntry& currMethod = WBParams::getWbEntries()[methodId]; tempBias->set_sensitive(currMethod.type == WBEntry::Type::AUTO); + bool autit = (currMethod.ppLabel == "autitcgreen"); + if (autit) { + StudLabel->show(); + } else { + StudLabel->hide(); + } switch (currMethod.type) { case WBEntry::Type::CAMERA: @@ -697,6 +707,13 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) } tempBias->set_sensitive(wbValues.type == WBEntry::Type::AUTO); + bool autit = (wbValues.ppLabel == "autitcgreen"); + if (autit) { + StudLabel->show(); + } else { + StudLabel->hide(); + } + } setEnabled(pp->wb.enabled); @@ -915,15 +932,19 @@ inline Gtk::TreeRow WhiteBalance::getActiveMethod () return *(method->get_active()); } -void WhiteBalance::WBChanged(double temperature, double greenVal) +void WhiteBalance::WBChanged(double temperature, double greenVal, float studgood) { idle_register.add( - [this, temperature, greenVal]() -> bool + [this, temperature, greenVal, studgood]() -> bool { disableListener(); setEnabled(true); temp->setValue(temperature); green->setValue(greenVal); + StudLabel->set_text( + Glib::ustring::compose(M("TP_WBALANCE_STUDLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(4), studgood)) + ); temp->setDefault(temperature); green->setDefault(greenVal); enableListener(); diff --git a/rtgui/whitebalance.h b/rtgui/whitebalance.h index 2db46b7af..71dce989d 100644 --- a/rtgui/whitebalance.h +++ b/rtgui/whitebalance.h @@ -41,6 +41,9 @@ class WhiteBalance : public ToolParamBlock, public AdjusterListener, public Fold WBLT_PP }; +private: + Gtk::Label* StudLabel; + protected: class MethodColumns : public Gtk::TreeModel::ColumnRecord { @@ -118,7 +121,7 @@ public: wblistener = l; } void setWB (int temp, double green); - void WBChanged (double temp, double green) override; + void WBChanged (double temp, double green, float studgood) override; void setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd); void trimValues (rtengine::procparams::ProcParams* pp) override; From ee63f51e5c38969f43078cf93b162382fd2d13d9 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Jun 2019 20:31:59 +0200 Subject: [PATCH 019/264] Some improvment and bug fixed --- rtengine/improccoordinator.cc | 34 ++++++++++++++++++---------------- rtengine/rawimagesource.cc | 2 +- rtgui/whitebalance.cc | 2 +- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 2ee24f750..fff5af8b8 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -49,6 +49,7 @@ ImProcCoordinator::ImProcCoordinator() : imgsrc (nullptr), lastAwbEqual (0.), lastAwbTempBias (0.0), + lastAwbauto(""), monitorIntent (RI_RELATIVE), softProof(false), gamutCheck(false), @@ -221,6 +222,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) int readyphase = 0; bool highDetailNeeded = options.prevdemo == PD_Sidecar ? true : (todo & M_HIGHQUAL); + printf("metwb=%s \n", params->wb.method.c_str()); // Check if any detail crops need high detail. If not, take a fast path short cut if (!highDetailNeeded) { @@ -242,6 +244,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) RAWParams rp = params->raw; ColorManagementParams cmp = params->icm; LCurveParams lcur = params->labCurve; + printf("metwb2=%s \n", params->wb.method.c_str()); if (!highDetailNeeded) { // if below 100% magnification, take a fast path @@ -330,21 +333,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag todo |= M_INIT; - bool autowb0 = false; - // bool autoitc = false; - // autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); - if(autowb0) printf("autoOKOKOK\n"); - if(!autowb0) printf("NOOOOOOONNNNNN\n"); - - - // if (autowb0) { - // printf("OK rgbloc avant\n"); - imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); - // printf("OK rgbloc apres\n"); - // } - - if (highDetailNeeded) { highDetailRawComputed = true; } else { @@ -359,6 +347,19 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } + bool autowb0 = false; + // autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); + autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); + printf("autowb0=%s \n", params->wb.method.c_str()); + + + + // if (autowb0) { + // printf("OK rgbloc avant\n"); + imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); + // printf("OK rgbloc apres\n"); + // } + if ((todo & (M_RETINEX | M_INIT)) && params->retinex.enabled) { bool dehacontlutili = false; bool mapcontlutili = false; @@ -379,6 +380,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) autowb = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); if(autowb) printf("AUTOAUTO\n"); if(!autowb) printf("PAS--NON\n"); + printf("auto=%s \n", params->wb.method.c_str()); if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window @@ -399,7 +401,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) currWB = imgsrc->getWB(); // } else if (params->wb.method == "Auto") { } else if (autowb) { - if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias) { + if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { double rm, gm, bm; double tempitc = 5000.f; double greenitc = 1.; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index e6f50336b..72131e793 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -7907,7 +7907,7 @@ void RawImageSource::getAutoWBMultipliersloc(double & tempref, double & greenref // int bfh = bf_h + 3, bfw = bf_w + 3; int bfh = H, bfw = W; if (wbpar.method == "autold") { - + printf("OK auto OLD\n"); if (fuji) { for (int i = 32; i < H - 32; i++) { int fw = ri->get_FujiWidth(); diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index b04b1f136..86cbe2e7a 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -142,7 +142,7 @@ static double wbTemp2Slider(double temp) return sval; } -WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WBALANCE_LABEL"), false, true), wbp(nullptr), wblistener(nullptr) +WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WBALANCE_LABEL"), true, true), wbp(nullptr), wblistener(nullptr) { Gtk::Grid* methodgrid = Gtk::manage(new Gtk::Grid()); From 7ac9629a7e91a6bc6b45c4f725f0bf82cbd1469e Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 26 Jun 2019 06:47:19 +0200 Subject: [PATCH 020/264] Some improvments --- rtengine/iimage.h | 2 +- rtengine/imagesource.h | 2 +- rtengine/improccoordinator.cc | 38 ++++++++--------------------------- rtengine/rawimagesource.cc | 13 +++++------- rtengine/rawimagesource.h | 2 +- rtengine/stdimagesource.cc | 4 ++-- rtengine/stdimagesource.h | 2 +- 7 files changed, 19 insertions(+), 44 deletions(-) diff --git a/rtengine/iimage.h b/rtengine/iimage.h index bda390895..03c8a9023 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -103,7 +103,7 @@ public: { rm = gm = bm = 1.0; } - virtual void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) + virtual void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) { rm = gm = bm = 1.0; } diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index 11fdb1a66..d7f0d1b25 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -103,7 +103,7 @@ public: virtual void convertColorSpace (Imagefloat* image, const ColorManagementParams &cmp, const ColorTemp &wb) = 0; // DIRTY HACK: this method is derived in rawimagesource and strimagesource, but (...,RAWParams raw) will be used ONLY for raw images virtual void getAutoWBMultipliers (double &rm, double &gm, double &bm) = 0; - virtual void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) = 0; + virtual void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) = 0; virtual ColorTemp getWB () const = 0; virtual ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) = 0; virtual void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw) = 0; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index fff5af8b8..471638c16 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -222,7 +222,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) int readyphase = 0; bool highDetailNeeded = options.prevdemo == PD_Sidecar ? true : (todo & M_HIGHQUAL); - printf("metwb=%s \n", params->wb.method.c_str()); + // printf("metwb=%s \n", params->wb.method.c_str()); // Check if any detail crops need high detail. If not, take a fast path short cut if (!highDetailNeeded) { @@ -244,7 +244,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) RAWParams rp = params->raw; ColorManagementParams cmp = params->icm; LCurveParams lcur = params->labCurve; - printf("metwb2=%s \n", params->wb.method.c_str()); + printf("metwb2=%s \n", params->wb.method.c_str()); if (!highDetailNeeded) { // if below 100% magnification, take a fast path @@ -349,15 +349,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bool autowb0 = false; // autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); + autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen");//in some cases autowb0 does not work ....params->wb.method still at "camera" instead of auto !!! printf("autowb0=%s \n", params->wb.method.c_str()); // if (autowb0) { - // printf("OK rgbloc avant\n"); imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); - // printf("OK rgbloc apres\n"); // } if ((todo & (M_RETINEX | M_INIT)) && params->retinex.enabled) { @@ -378,9 +376,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bool autowb = false; autowb = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - if(autowb) printf("AUTOAUTO\n"); - if(!autowb) printf("PAS--NON\n"); - printf("auto=%s \n", params->wb.method.c_str()); + printf("automethod=%s \n", params->wb.method.c_str()); if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window @@ -399,33 +395,19 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) currWB = ColorTemp(); } else if (params->wb.method == "Camera") { currWB = imgsrc->getWB(); - // } else if (params->wb.method == "Auto") { + lastAwbauto = ""; //reinitialize auto } else if (autowb) { if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { double rm, gm, bm; double tempitc = 5000.f; double greenitc = 1.; - // imgsrc->getAutoWBMultipliers(rm, gm, bm); currWBitc = imgsrc->getWB(); double tempref = currWBitc.getTemp() * (1. + params->wb.tempBias); double greenref = currWBitc.getGreen(); - printf("tempref=%f greref=%f\n", tempref, greenref); + printf("tempref=%f greref=%f\n", tempref, greenref); - imgsrc->getAutoWBMultipliersloc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); + imgsrc->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); -/* - if (rm != -1.) { - autoWB.update(rm, gm, bm, params->wb.equal, params->wb.tempBias); - lastAwbEqual = params->wb.equal; - lastAwbTempBias = params->wb.tempBias; - } else { - lastAwbEqual = -1.; - lastAwbTempBias = 0.0; - autoWB.useDefaults(params->wb.equal); - } -*/ - //double rr,gg,bb; - //autoWB.getMultipliers(rr,gg,bb); if (params->wb.method == "autitcgreen") { params->wb.temperature = tempitc; params->wb.green = greenitc; @@ -441,10 +423,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } autoWB.update(rm, gm, bm, params->wb.equal, bias); - //double temper = autoWB.getTemp(); - //double gre = autoWB.getGreen(); - //printf("temper=%f gre=%f \n", temper, gre); - lastAwbEqual = params->wb.equal; lastAwbTempBias = params->wb.tempBias; lastAwbauto = params->wb.method; @@ -1254,7 +1232,7 @@ bool ImProcCoordinator::getAutoWB(double& temp, double& green, double equal, dou double greenitc = 1.; float studgood = 1000.f; double tempref, greenref; - imgsrc->getAutoWBMultipliersloc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); + imgsrc->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); if (rm != -1) { autoWB.update(rm, gm, bm, equal, tempBias); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 72131e793..153578756 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -7590,7 +7590,6 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D } -printf("ok avant itc\n"); if (wbpar.method == "autitcgreen") { bool extra = false; @@ -7611,11 +7610,9 @@ printf("ok avant itc\n"); tempitc = 5000.; // greenitc = greenref; itc = true; -printf("ok avant itc 2\n"); if (itc) { ItcWB(extra, tempref, greenref, tempitc, greenitc, studgood, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar); -printf("ok apres itc \n"); } } @@ -7734,7 +7731,7 @@ printf("ok apres itc \n"); void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) { //used by auto WB local to calculate red, green, blue in local region - printf("OK RGBLOC\n"); + // printf("OK RGBLOC\n"); // int bfh = bf_h + 3, bfw = bf_w + 3; int bfh = H, bfw = W; @@ -7875,7 +7872,7 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in } //void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) -void RawImageSource::getAutoWBMultipliersloc(double & tempref, double & greenref, double & tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw) +void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref, double & tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw) { BENCHFUN constexpr double clipHigh = 64000.0; @@ -7907,7 +7904,7 @@ void RawImageSource::getAutoWBMultipliersloc(double & tempref, double & greenref // int bfh = bf_h + 3, bfw = bf_w + 3; int bfh = H, bfw = W; if (wbpar.method == "autold") { - printf("OK auto OLD\n"); + // printf("OK auto OLD\n"); if (fuji) { for (int i = 32; i < H - 32; i++) { int fw = ri->get_FujiWidth(); @@ -8083,9 +8080,9 @@ void RawImageSource::getAutoWBMultipliersloc(double & tempref, double & greenref if (wbpar.method == "aut" || wbpar.method == "autosdw" || wbpar.method == "autedgsdw" || wbpar.method == "autitcgreen" || wbpar.method == "autedgrob" || wbpar.method == "autedg" || wbpar.method == "autorobust") { bool twotimes = false; - printf("OK avant auto\n"); + // printf("OK avant auto\n"); WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); - printf("OK apres auto\n"); + // printf("OK apres auto\n"); } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 477519c1f..d1619fb7c 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -141,7 +141,7 @@ public: void cfaboxblur (RawImage *riFlatFile, float* cfablur, int boxH, int boxW); void scaleColors (int winx, int winy, int winw, int winh, const RAWParams &raw, array2D &rawData); // raw for cblack void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw); - void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw); + void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw); void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w); void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index ce101bd7a..ce61441c5 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -318,7 +318,7 @@ void StdImageSource::WBauto(double &tempref, double &greenref, array2D &r void StdImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) {} -void StdImageSource::getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) +void StdImageSource::getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) { if (redAWBMul != -1.) { rm = redAWBMul; @@ -327,7 +327,7 @@ void StdImageSource::getAutoWBMultipliersloc(double &tempref, double &greenref, return; } - img->getAutoWBMultipliersloc(tempref, greenref, tempitc, greenitc,studgood, begx, begy, yEn, xEn, cx, cy, bf_h, bf_w, rm, gm, bm, params->wb, params->icm, params->raw); + img->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc,studgood, begx, begy, yEn, xEn, cx, cy, bf_h, bf_w, rm, gm, bm, params->wb, params->icm, params->raw); redAWBMul = rm; greenAWBMul = gm; diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index ba75efbb9..d62b52dc7 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -52,7 +52,7 @@ public: void getAutoWBMultipliers (double &rm, double &gm, double &bm) override; ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) override; void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw); - void getAutoWBMultipliersloc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw); + void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw); eSensorType getSensorType() const override {return ST_NONE;} bool isMono() const override {return false;} From 9338bef4c69e3825147aed007e0691efc22da4a4 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 24 Jul 2019 07:23:51 +0200 Subject: [PATCH 021/264] Change limit Lmethod for clarity and sharp-mask --- rtgui/wavelet.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 7f9164779..b66d61e93 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -248,7 +248,6 @@ Wavelet::Wavelet() : levdirMainHBox->pack_start(*levdirMainLabel, Gtk::PACK_SHRINK, 4); levdirMainHBox->pack_start(*CLmethod); //same - Lmethod->set_sensitive(false); Lmethod->set_sensitive(false); Lmethod->append(M("TP_WAVELET_1")); Lmethod->append(M("TP_WAVELET_2")); @@ -2491,6 +2490,14 @@ void Wavelet::LmethodUpdateUI() { void Wavelet::LmethodChanged() { //LmethodUpdateUI(); + if(ushamethod->get_active_row_number() == 0 && expclari->getEnabled() == true) { + if(Lmethod->get_active_row_number() > 3) Lmethod->set_active(3); + } + + if(ushamethod->get_active_row_number() == 1 && expclari->getEnabled() == true) { + if(Lmethod->get_active_row_number() < 4) Lmethod->set_active(4); + } + if (listener && (multiImage || getEnabled())) { listener->panelChanged(EvWavLmet, Lmethod->get_active_text()); } From 7d9edc4681ea806d36ebe93b87d90599aa08c4ea Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 24 Jul 2019 08:54:17 +0200 Subject: [PATCH 022/264] Change clarity tooltip --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 3014ce83d..146a5c2c1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2249,7 +2249,7 @@ TP_WAVELET_TMSCALE;Scale TP_WAVELET_TON;Toning TP_WAVELET_USHARP;Clarity method TP_WAVELET_USH;None -TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level and wavelet levels. +TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. TP_WAVELET_SHA;Sharp mask TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_CLA;Clarity From ee27f6778b782d5c2126a012d03b1bf27256d892 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 17 Aug 2019 17:51:42 +0200 Subject: [PATCH 023/264] Change label auto grey --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index c68054a87..0e1da6e25 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2243,7 +2243,7 @@ TP_WBALANCE_FLASH55;Leica TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta TP_WBALANCE_AUTO_HEADER;Autos -TP_WBALANCE_AUTOOLD;Auto grey old +TP_WBALANCE_AUTOOLD;Auto RGB grey TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_FLASH_HEADER;Flash TP_WBALANCE_FLUO1;F1 - Daylight From 6636c484a6e29111b9cdba1d3ec05fb34a841e2f Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 17 Aug 2019 18:03:11 +0200 Subject: [PATCH 024/264] Suppress warning --- rtengine/improccoordinator.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 88878c5b4..a7f2a4cb3 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -359,10 +359,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } - bool autowb0 = false; + // bool autowb0 = false; // autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen");//in some cases autowb0 does not work ....params->wb.method still at "camera" instead of auto !!! - printf("autowb0=%s \n", params->wb.method.c_str()); + // autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen");//in some cases autowb0 does not work ....params->wb.method still at "camera" instead of auto !!! + // printf("autowb0=%s \n", params->wb.method.c_str()); From 9cd4ca51d317e2bd246d3dc34cb87ae41c461568 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 27 Aug 2019 08:56:15 +0200 Subject: [PATCH 025/264] Change Guidedfilter Guid reference from L to Y --- rtengine/improccoordinator.cc | 9 ++++++++- rtengine/ipwavelet.cc | 10 +++++++++- rtgui/wavelet.cc | 4 ++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index bbc37cd2a..6a93d1d82 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -934,8 +934,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) for (int ir = 0; ir < pH; ir++) for (int jr = 0; jr < pW; jr++) { + float X, Y, Z; + float L = provradius->L[ir][jr]; + float a = provradius->a[ir][jr]; + float b = provradius->b[ir][jr]; + Color::Lab2XYZ(L, a, b, X, Y, Z); + + guid[ir][jr] = Y / 32768.f; + ble[ir][jr] = (nprevl->L[ir][jr]) / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } double epsilmax = 0.0001; double epsilmin = 0.00001; diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 4b46c9742..8a2e3eeda 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1285,7 +1285,15 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int ir = 0; ir < lab->H; ir++) for (int jr = 0; jr < lab->W; jr++) { ble[ir][jr] = dst->L[ir][jr] / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + float X, Y, Z; + float L = provradius->L[ir][jr]; + float a = provradius->a[ir][jr]; + float b = provradius->b[ir][jr]; + Color::Lab2XYZ(L, a, b, X, Y, Z); + + guid[ir][jr] = Y / 32768.f; + +// guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } double epsilmax = 0.001; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 4aa18f5bd..375e0a8cf 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -120,8 +120,8 @@ Wavelet::Wavelet() : edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 40))), mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), - softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), - softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.1, 0.))), + softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), + softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), From 8fc55ea70c3cdce41d91509fb8cd543b31c67574 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 29 Aug 2019 13:29:14 +0200 Subject: [PATCH 026/264] Change GUI for residual chroma --- rtdata/languages/default | 3 ++- rtgui/wavelet.cc | 14 +++++++++++--- rtgui/wavelet.h | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 146a5c2c1..977f40149 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2109,6 +2109,7 @@ TP_WAVELET_CH3;Link contrast levels TP_WAVELET_CHCU;Curve TP_WAVELET_CHR;Chroma-contrast link strength TP_WAVELET_CHRO;Saturated/pastel threshold +TP_WAVELET_CHROMAFRAME;Chroma TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" TP_WAVELET_CHSL;Sliders @@ -2216,7 +2217,7 @@ TP_WAVELET_RADIUS;Radius Shadows - Highlight TP_WAVELET_RE1;Reinforced TP_WAVELET_RE2;Unchanged TP_WAVELET_RE3;Reduced -TP_WAVELET_RESCHRO;Chroma +TP_WAVELET_RESCHRO;Intensity TP_WAVELET_RESCON;Shadows TP_WAVELET_RESCONH;Highlights TP_WAVELET_RESID;Residual Image diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 375e0a8cf..775205bdb 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -140,6 +140,7 @@ Wavelet::Wavelet() : chanMixerHLFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_HIGHLIGHT")))), chanMixerMidFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_MIDTONES")))), chanMixerShadowsFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_SHADOWS")))), + chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))), wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))), labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))), labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))), @@ -687,8 +688,14 @@ Wavelet::Wavelet() : resBox->pack_start(*contrast); //keep the possibility to reinstall reschro->setAdjusterListener(this); - resBox->pack_start(*reschro); +// resBox->pack_start(*reschro); + chromaFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const chromaBox = Gtk::manage(new ToolParamBlock()); + chromaBox->pack_start(*reschro); + chromaBox->pack_start(*hueskin2); + chromaBox->pack_start(*sky); + chromaFrame->add(*chromaBox); Gtk::Label* const labmTM = Gtk::manage(new Gtk::Label(M("TP_WAVELET_TMTYPE") + ":")); Gtk::HBox* const ctboxTM = Gtk::manage(new Gtk::HBox()); @@ -727,18 +734,19 @@ Wavelet::Wavelet() : hueskin2->set_tooltip_markup(M("TP_WAVELET_HUESKY_TOOLTIP")); hueskin2->setBgGradient(milestones); - resBox->pack_start(*hueskin2); +// resBox->pack_start(*hueskin2); hueskin2->setAdjusterListener(this); sky->set_tooltip_text(M("TP_WAVELET_SKY_TOOLTIP")); sky->setAdjusterListener(this); - resBox->pack_start(*sky); +// resBox->pack_start(*sky); // whole hue range const std::vector milestones3 = makeWholeHueRange(); curveEditorRES->setCurveListener(this); + resBox->pack_start(*chromaFrame); hhshape = static_cast(curveEditorRES->addCurve(CT_Flat, M("TP_WAVELET_CURVEEDITOR_HH"))); hhshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_HH_TOOLTIP")); diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 918e9fa7c..0cf63a225 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -253,6 +253,7 @@ private: Gtk::Frame* const chanMixerHLFrame; Gtk::Frame* const chanMixerMidFrame; Gtk::Frame* const chanMixerShadowsFrame; + Gtk::Frame* const chromaFrame; Gtk::Label* const wavLabels; Gtk::Label* const labmC; From 0cfe14f433b4763c7082d094339f21001510965c Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 29 Aug 2019 18:59:45 +0200 Subject: [PATCH 027/264] Move gamut in GUI after contrast and chroma --- rtgui/wavelet.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 775205bdb..dde60b93e 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -918,6 +918,10 @@ Wavelet::Wavelet() : expchroma->setLevel(2); pack_start(*expchroma); + expgamut->add(*conBox, false); + expgamut->setLevel(2); + pack_start(*expgamut); + exptoning->add(*tonBox, false); exptoning->setLevel(2); pack_start(*exptoning); @@ -934,9 +938,6 @@ Wavelet::Wavelet() : expclari->setLevel(2); pack_start(*expclari); - expgamut->add(*conBox, false); - expgamut->setLevel(2); - pack_start(*expgamut); expresid->add(*resBox, false); expresid->setLevel(2); From 1c6fa0d3d0bc4b3d9d0051d6ea1194e2cc646be0 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 30 Aug 2019 07:06:36 +0200 Subject: [PATCH 028/264] Clean code and adjustements to guidefilter --- rtengine/improccoordinator.cc | 21 ++++++++++++++++++--- rtengine/ipwavelet.cc | 23 +++++++++++++++++++---- rtgui/wavelet.cc | 5 +---- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 6a93d1d82..b3f5b186e 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -928,6 +928,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (WaveParams.softrad > 0.f) { array2D ble(pW, pH); array2D guid(pW, pH); + Imagefloat *tmpImage = nullptr; + tmpImage = new Imagefloat(pW, pH); #ifdef _OPENMP #pragma omp parallel for #endif @@ -941,8 +943,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) Color::Lab2XYZ(L, a, b, X, Y, Z); guid[ir][jr] = Y / 32768.f; - - ble[ir][jr] = (nprevl->L[ir][jr]) / 32768.f; + float La = nprevl->L[ir][jr]; + float aa = nprevl->a[ir][jr]; + float ba = nprevl->b[ir][jr]; + Color::Lab2XYZ(La, aa, ba, X, Y, Z); + tmpImage->r(ir, jr) = X; + tmpImage->g(ir, jr) = Y; + tmpImage->b(ir, jr) = Z; + ble[ir][jr] = Y / 32768.f; } double epsilmax = 0.0001; double epsilmin = 0.00001; @@ -962,8 +970,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) for (int ir = 0; ir < pH; ir++) for (int jr = 0; jr < pW; jr++) { - nprevl->L[ir][jr] = 32768.f * ble[ir][jr]; + float X = tmpImage->r(ir, jr); + float Y = 32768.f * ble[ir][jr]; + float Z = tmpImage->b(ir, jr); + float L, a, b; + Color::XYZ2Lab(X, Y, Z, L, a, b); + nprevl->L[ir][jr] = L; } + delete tmpImage; + } } diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 8a2e3eeda..7db25dbd1 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -17,7 +17,7 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// * 2014 Jacques Desmis +// * 2014 - 2019 Jacques Desmis // * 2014 Ingo Weyrich // @@ -1269,6 +1269,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (waparams.softradend > 0.f && cp.finena) { array2D ble(lab->W, lab->H); array2D guid(lab->W, lab->H); + Imagefloat *tmpImage = nullptr; + tmpImage = new Imagefloat(lab->W, lab->H); bool multiTh = false; @@ -1284,7 +1286,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int ir = 0; ir < lab->H; ir++) for (int jr = 0; jr < lab->W; jr++) { - ble[ir][jr] = dst->L[ir][jr] / 32768.f; float X, Y, Z; float L = provradius->L[ir][jr]; float a = provradius->a[ir][jr]; @@ -1292,8 +1293,15 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const Color::Lab2XYZ(L, a, b, X, Y, Z); guid[ir][jr] = Y / 32768.f; + float La = dst->L[ir][jr]; + float aa = dst->a[ir][jr]; + float ba = dst->b[ir][jr]; + Color::Lab2XYZ(La, aa, ba, X, Y, Z); + tmpImage->r(ir, jr) = X; + tmpImage->g(ir, jr) = Y; + tmpImage->b(ir, jr) = Z; + ble[ir][jr] = Y / 32768.f; -// guid[ir][jr] = provradius->L[ir][jr] / 32768.f; } double epsilmax = 0.001; @@ -1314,8 +1322,15 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const for (int ir = 0; ir < lab->H; ir++) for (int jr = 0; jr < lab->W; jr++) { - dst->L[ir][jr] = 32768.f * ble[ir][jr]; + float X = tmpImage->r(ir, jr); + float Y = 32768.f * ble[ir][jr]; + float Z = tmpImage->b(ir, jr); + float L, a, b; + Color::XYZ2Lab(X, Y, Z, L, a, b); + + dst->L[ir][jr] = L; } + delete tmpImage; } if (waparams.softradend > 0.f && cp.finena) { diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index dde60b93e..e3460e685 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . * - * 2014 Jacques Desmis + * 2014 - 2019Jacques Desmis */ #include "wavelet.h" @@ -688,7 +688,6 @@ Wavelet::Wavelet() : resBox->pack_start(*contrast); //keep the possibility to reinstall reschro->setAdjusterListener(this); -// resBox->pack_start(*reschro); chromaFrame->set_label_align(0.025, 0.5); ToolParamBlock* const chromaBox = Gtk::manage(new ToolParamBlock()); @@ -734,13 +733,11 @@ Wavelet::Wavelet() : hueskin2->set_tooltip_markup(M("TP_WAVELET_HUESKY_TOOLTIP")); hueskin2->setBgGradient(milestones); -// resBox->pack_start(*hueskin2); hueskin2->setAdjusterListener(this); sky->set_tooltip_text(M("TP_WAVELET_SKY_TOOLTIP")); sky->setAdjusterListener(this); -// resBox->pack_start(*sky); // whole hue range const std::vector milestones3 = makeWholeHueRange(); From 6a0e1cf1b6658e6ca992bc65f80dce94f0b20f3b Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 30 Aug 2019 07:42:47 +0200 Subject: [PATCH 029/264] change guidedfilter wavalet in simpleprocess --- rtengine/simpleprocess.cc | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 8270ec45b..1348879c3 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1187,25 +1187,29 @@ private: if (WaveParams.softrad > 0.f) { array2D ble(fw, fh); array2D guid(fw, fh); - /* - #ifdef _OPENMP - const int numThreads = omp_get_max_threads(); - #endif - - bool multiTh = false; - - if (numThreads > 1) { - multiTh = true; - } - */ + Imagefloat *tmpImage = nullptr; + tmpImage = new Imagefloat(fw, fh); #ifdef _OPENMP #pragma omp parallel for #endif for (int ir = 0; ir < fh; ir++) for (int jr = 0; jr < fw; jr++) { - ble[ir][jr] = (labView->L[ir][jr]) / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + float X, Y, Z; + float L = provradius->L[ir][jr]; + float a = provradius->a[ir][jr]; + float b = provradius->b[ir][jr]; + Color::Lab2XYZ(L, a, b, X, Y, Z); + + guid[ir][jr] = Y / 32768.f; + float La = labView->L[ir][jr]; + float aa = labView->a[ir][jr]; + float ba = labView->b[ir][jr]; + Color::Lab2XYZ(La, aa, ba, X, Y, Z); + tmpImage->r(ir, jr) = X; + tmpImage->g(ir, jr) = Y; + tmpImage->b(ir, jr) = Z; + ble[ir][jr] = Y / 32768.f; } double epsilmax = 0.0001; double epsilmin = 0.00001; @@ -1225,8 +1229,14 @@ private: for (int ir = 0; ir < fh; ir++) for (int jr = 0; jr < fw; jr++) { - labView->L[ir][jr] = 32768.f * ble[ir][jr]; + float X = tmpImage->r(ir, jr); + float Y = 32768.f * ble[ir][jr]; + float Z = tmpImage->b(ir, jr); + float L, a, b; + Color::XYZ2Lab(X, Y, Z, L, a, b); + labView->L[ir][jr] = L; } + delete tmpImage; } } From 2068871b6ed2e700d7900c4fd2210f6f639bca11 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 30 Aug 2019 08:04:32 +0200 Subject: [PATCH 030/264] Format ipwavelet.cc and wavelet.cc --- rtengine/ipwavelet.cc | 74 ++++++++++++++++-------------- rtgui/wavelet.cc | 102 ++++++++++++++++++++++-------------------- 2 files changed, 95 insertions(+), 81 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 7db25dbd1..784d3d405 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -3,7 +3,7 @@ // // // -// code dated: December , 2014 +// code dated: 9 , 2019 // // Ipwaveletcc is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -1275,9 +1275,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const bool multiTh = false; #ifdef _OPENMP + if (numthreads > 1) { multiTh = true; } + #endif #ifdef _OPENMP @@ -1301,7 +1303,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const tmpImage->g(ir, jr) = Y; tmpImage->b(ir, jr) = Z; ble[ir][jr] = Y / 32768.f; - + } double epsilmax = 0.001; @@ -1327,9 +1329,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float Z = tmpImage->b(ir, jr); float L, a, b; Color::XYZ2Lab(X, Y, Z, L, a, b); - + dst->L[ir][jr] = L; } + delete tmpImage; } @@ -1781,11 +1784,11 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * double contreal = 0.6 * contrast; DiagonalCurve resid_contrast({ DCT_NURBS, - 0, 0, - avg - avg * (0.6 - contreal / 250.0), avg - avg * (0.6 + contreal / 250.0), - avg + (1. - avg) * (0.6 - contreal / 250.0), avg + (1. - avg) * (0.6 + contreal / 250.0), - 1, 1 - }); + 0, 0, + avg - avg * (0.6 - contreal / 250.0), avg - avg * (0.6 + contreal / 250.0), + avg + (1. - avg) * (0.6 - contreal / 250.0), avg + (1. - avg) * (0.6 + contreal / 250.0), + 1, 1 + }); #ifdef _OPENMP @@ -1796,17 +1799,18 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * { #ifdef _OPENMP - #pragma omp for + #pragma omp for #endif + for (int i = 0; i < W_L * H_L; i++) { - float buf = LIM01( WavCoeffs_L0[i] / 32768.f); + float buf = LIM01(WavCoeffs_L0[i] / 32768.f); buf = resid_contrast.getVal(buf); buf *= 32768.f; WavCoeffs_L0[i] = buf; } } } - + if (cp.tonemap && cp.contmet == 1 && cp.resena) { float maxp = max0 * 256.f; @@ -1818,33 +1822,37 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } - if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step - LabImage *temp = nullptr; - temp = new LabImage(W_L, H_L); + if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step + LabImage *temp = nullptr; + temp = new LabImage(W_L, H_L); #ifdef _OPENMP - #pragma omp for + #pragma omp for #endif - for (int i = 0; i < H_L; i++) { - for (int j = 0; j < W_L; j++) { - temp->L[i][j] = WavCoeffs_L0[i * W_L + j]; - } - } - { - ImProcFunctions::shadowsHighlights(temp, true, 1, cp.conresH, cp.conres, cp.radius, skip, cp.thH, cp.th); - } -#ifdef _OPENMP - #pragma omp for -#endif - for (int i = 0; i < H_L; i++) { - for (int j = 0; j < W_L; j++) { - WavCoeffs_L0[i * W_L + j] = temp->L[i][j]; - } - } - - delete temp; + for (int i = 0; i < H_L; i++) { + for (int j = 0; j < W_L; j++) { + temp->L[i][j] = WavCoeffs_L0[i * W_L + j]; + } } + { + ImProcFunctions::shadowsHighlights(temp, true, 1, cp.conresH, cp.conres, cp.radius, skip, cp.thH, cp.th); + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = 0; i < H_L; i++) { + for (int j = 0; j < W_L; j++) { + WavCoeffs_L0[i * W_L + j] = temp->L[i][j]; + } + } + + delete temp; + + } + #ifdef _OPENMP #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index e3460e685..11126666d 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -489,7 +489,7 @@ Wavelet::Wavelet() : showmaskConn = showmask->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::showmaskToggled)); ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock()); - // ushamethod->append(M("TP_WAVELET_USH")); + // ushamethod->append(M("TP_WAVELET_USH")); ushamethod->append(M("TP_WAVELET_SHA")); ushamethod->append(M("TP_WAVELET_CLA")); ushamethodconn = ushamethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::ushamethodChanged)); @@ -1064,7 +1064,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) //ushamethod // if (pp->wavelet.ushamethod == "none") { // ushamethod->set_active(0); - // } else +// } else if (pp->wavelet.ushamethod == "sharp") { ushamethod->set_active(0); } else if (pp->wavelet.ushamethod == "clari") { @@ -1758,9 +1758,9 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.Medgreinf = "less"; } - // if (ushamethod->get_active_row_number() == 0) { - // pp->wavelet.ushamethod = "none"; - // } else +// if (ushamethod->get_active_row_number() == 0) { +// pp->wavelet.ushamethod = "none"; +// } else if (ushamethod->get_active_row_number() == 0) { pp->wavelet.ushamethod = "sharp"; } else if (ushamethod->get_active_row_number() == 1) { @@ -2319,14 +2319,14 @@ void Wavelet::TMmethodUpdateUI() } } */ - if(TMmethod->get_active_row_number() == 1) { - edgs->show(); - scale->show(); - } else if (TMmethod->get_active_row_number() == 0) { - edgs->hide(); - scale->hide(); - } - + if (TMmethod->get_active_row_number() == 1) { + edgs->show(); + scale->show(); + } else if (TMmethod->get_active_row_number() == 0) { + edgs->hide(); + scale->hide(); + } + } void Wavelet::TMmethodChanged() @@ -2413,14 +2413,14 @@ void Wavelet::ushamethodChanged() Dirmethod->set_sensitive(true); CLmethod->set_sensitive(false); Backmethod->set_sensitive(false); - /* } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { - Backmethod->set_active(1); - CLmethod->set_active(3); - Lmethod->set_active(3); - Dirmethod->set_active(3); - Lmethod->set_sensitive(false); - Dirmethod->set_sensitive(false); - */ + /* } else if (ushamethod->get_active_row_number() == 0 || expclari->getEnabled() == false) { + Backmethod->set_active(1); + CLmethod->set_active(3); + Lmethod->set_active(3); + Dirmethod->set_active(3); + Lmethod->set_sensitive(false); + Dirmethod->set_sensitive(false); + */ } else if (expclari->getEnabled() == false) { Backmethod->set_active(1); CLmethod->set_active(3); @@ -2496,12 +2496,16 @@ void Wavelet::LmethodUpdateUI() { void Wavelet::LmethodChanged() { //LmethodUpdateUI(); - if(ushamethod->get_active_row_number() == 0 && expclari->getEnabled() == true) { - if(Lmethod->get_active_row_number() > 3) Lmethod->set_active(3); + if (ushamethod->get_active_row_number() == 0 && expclari->getEnabled() == true) { + if (Lmethod->get_active_row_number() > 3) { + Lmethod->set_active(3); + } } - if(ushamethod->get_active_row_number() == 1 && expclari->getEnabled() == true) { - if(Lmethod->get_active_row_number() < 4) Lmethod->set_active(4); + if (ushamethod->get_active_row_number() == 1 && expclari->getEnabled() == true) { + if (Lmethod->get_active_row_number() < 4) { + Lmethod->set_active(4); + } } if (listener && (multiImage || getEnabled())) { @@ -2588,23 +2592,23 @@ void Wavelet::setBatchMode(bool batchMode) void Wavelet::adjusterUpdateUI(Adjuster* a) { - /* - if (!batchMode) { - if (a == tmrs ) { - float tm; - tm=tmrs->getValue(); - if(tm==0.f) tmr->hide(); - else tmr->show(); - } - else if (a == gamma ) { - float tm; - tm=tmrs->getValue(); - if(tm==0.f) tmr->hide(); - else tmr->show(); - - } - } - */ + /* + if (!batchMode) { + if (a == tmrs ) { + float tm; + tm=tmrs->getValue(); + if(tm==0.f) tmr->hide(); + else tmr->show(); + } + else if (a == gamma ) { + float tm; + tm=tmrs->getValue(); + if(tm==0.f) tmr->hide(); + else tmr->show(); + + } + } + */ } void Wavelet::adjusterChanged(Adjuster* a, double newval) @@ -2618,15 +2622,16 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavresconH, resconH->getTextValue()); } else if (a == reschro) { listener->panelChanged(EvWavreschro, reschro->getTextValue()); - } else if (a == tmrs) { + } else if (a == tmrs) { adjusterUpdateUI(a); listener->panelChanged(EvWavtmrs, tmrs->getTextValue()); - if(tmrs->getValue() != 0 && TMmethod->get_active_row_number() == 1) { - edgs->show(); - scale->show(); + + if (tmrs->getValue() != 0 && TMmethod->get_active_row_number() == 1) { + edgs->show(); + scale->show(); } else if (TMmethod->get_active_row_number() == 0) { - edgs->hide(); - scale->hide(); + edgs->hide(); + scale->hide(); } } else if (a == gamma) { adjusterUpdateUI(a); @@ -3305,6 +3310,7 @@ void Wavelet::enableToggled(MyExpander *expander) Backmethod->set_sensitive(false); } } + event = EvWavenaclari; } else // unknown expander, returning ! From 0f8b9c4574517fcf856e929f99eea08fc0343136 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 31 Aug 2019 08:00:41 +0200 Subject: [PATCH 031/264] Improve showmask and Guidedfilter dcrop --- rtengine/dcrop.cc | 40 ++++++++++++++++++++++++++++++----- rtengine/improccoordinator.cc | 13 ++++++++++-- rtengine/simpleprocess.cc | 2 +- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index fc6e838d4..2ab9caa59 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1043,6 +1043,8 @@ void Crop::update(int todo) if (WaveParams.softrad > 0.f) { array2D ble(labnCrop->W, labnCrop->H); array2D guid(labnCrop->W, labnCrop->H); + Imagefloat *tmpImage = nullptr; + tmpImage = new Imagefloat(labnCrop->W, labnCrop->W); #ifdef _OPENMP #pragma omp parallel for @@ -1050,8 +1052,21 @@ void Crop::update(int todo) for (int ir = 0; ir < labnCrop->H ; ir++) for (int jr = 0; jr < labnCrop->W; jr++) { - ble[ir][jr] = (labnCrop->L[ir][jr]) / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + float X, Y, Z; + float L = provradius->L[ir][jr]; + float a = provradius->a[ir][jr]; + float b = provradius->b[ir][jr]; + Color::Lab2XYZ(L, a, b, X, Y, Z); + + guid[ir][jr] = Y / 32768.f; + float La = labnCrop->L[ir][jr]; + float aa = labnCrop->a[ir][jr]; + float ba = labnCrop->b[ir][jr]; + Color::Lab2XYZ(La, aa, ba, X, Y, Z); + tmpImage->r(ir, jr) = X; + tmpImage->g(ir, jr) = Y; + tmpImage->b(ir, jr) = Z; + ble[ir][jr] = Y / 32768.f; } double epsilmax = 0.0001; double epsilmin = 0.00001; @@ -1070,8 +1085,14 @@ void Crop::update(int todo) for (int ir = 0; ir < labnCrop->H; ir++) for (int jr = 0; jr < labnCrop->W; jr++) { - labnCrop->L[ir][jr] = 32768.f * ble[ir][jr]; + float X = tmpImage->r(ir, jr); + float Y = 32768.f * ble[ir][jr]; + float Z = tmpImage->b(ir, jr); + float L, a, b; + Color::XYZ2Lab(X, Y, Z, L, a, b); + labnCrop->L[ir][jr] = L; } + delete tmpImage; } } @@ -1083,16 +1104,24 @@ void Crop::update(int todo) float mC = (float)(WaveParams.mergeC / 100.f); float mL0; float mC0; + float background = 0.f; + int show = 0; if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { mL0 = mC0 = 0.f; - mL = -mL; + mL = -1.5f * mL; mC = -mC; + background = 12000.f; + show = 0; } else if (WaveParams.CLmethod == "sup" && WaveParams.Backmethod == "resid") { mL0 = mL; mC0 = mC; + background = 0.f; + show = 0; } else { mL0 = mL = mC0 = mC = 0.f; + background = 0.f; + show = 0; } float indic = 1.f; @@ -1101,6 +1130,7 @@ void Crop::update(int todo) indic = -1.f; mL = fabs(mL); mC = fabs(mC); + show = 1; } @@ -1110,7 +1140,7 @@ void Crop::update(int todo) for (int x = 0; x < labnCrop->H; x++) for (int y = 0; y < labnCrop->W; y++) { - labnCrop->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * indic * labnCrop->L[x][y]; + labnCrop->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) + show * background - mL * indic * labnCrop->L[x][y]; labnCrop->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * indic * labnCrop->a[x][y]; labnCrop->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * indic * labnCrop->b[x][y]; } diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 812e6a23b..d04a29518 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -988,18 +988,26 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float mC = (float)(WaveParams.mergeC / 100.f); float mL0; float mC0; + float background = 0.f; + int show = 0; if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { mL0 = mC0 = 0.f; - mL = -mL; + mL = - 1.5f * mL; mC = -mC; + background = 12000.f; + show = 0; } else if (WaveParams.CLmethod == "sup" && WaveParams.Backmethod == "resid") { mL0 = mL; mC0 = mC; + background = 0.f; + show = 0; } else { mL0 = mL = mC0 = mC = 0.f; + background = 0.f; + show = 0; } float indic = 1.f; @@ -1008,6 +1016,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) indic = -1.f; mL = fabs(mL); mC = fabs(mC); + show = 1; } #ifdef _OPENMP #pragma omp parallel for @@ -1015,7 +1024,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) for (int x = 0; x < pH; x++) for (int y = 0; y < pW; y++) { - nprevl->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * indic * nprevl->L[x][y]; + nprevl->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) + show * background - mL * indic * nprevl->L[x][y]; nprevl->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * indic * nprevl->a[x][y]; nprevl->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * indic * nprevl->b[x][y]; } diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index eb51577a7..9311d2736 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1249,7 +1249,7 @@ private: if ((WaveParams.CLmethod == "one" || WaveParams.CLmethod == "inf") && WaveParams.Backmethod == "black") { mL0 = mC0 = 0.f; - mL = -mL; + mL = -1.5f * mL; mC = -mC; } else if (WaveParams.CLmethod == "sup" && WaveParams.Backmethod == "resid") { mL0 = mL; From 0b13aee4bc0bdafb7f7d3f2acf0658cfc98d4f6a Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 1 Sep 2019 08:51:34 +0200 Subject: [PATCH 032/264] Clip result clarity --- rtengine/dcrop.cc | 3 +-- rtengine/improccoordinator.cc | 2 +- rtengine/simpleprocess.cc | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 2ab9caa59..f7ce7bbb5 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1133,14 +1133,13 @@ void Crop::update(int todo) show = 1; } - #ifdef _OPENMP #pragma omp parallel for #endif for (int x = 0; x < labnCrop->H; x++) for (int y = 0; y < labnCrop->W; y++) { - labnCrop->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) + show * background - mL * indic * labnCrop->L[x][y]; + labnCrop->L[x][y] = LIM((1.f + mL0) * (unshar->L[x][y]) + show * background - mL * indic * labnCrop->L[x][y], 0.f, 32768.f); labnCrop->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * indic * labnCrop->a[x][y]; labnCrop->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * indic * labnCrop->b[x][y]; } diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index d04a29518..d746ff9c6 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1024,7 +1024,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) for (int x = 0; x < pH; x++) for (int y = 0; y < pW; y++) { - nprevl->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) + show * background - mL * indic * nprevl->L[x][y]; + nprevl->L[x][y] = LIM((1.f + mL0) * (unshar->L[x][y]) + show * background - mL * indic * nprevl->L[x][y], 0.f, 32768.f); nprevl->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * indic * nprevl->a[x][y]; nprevl->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * indic * nprevl->b[x][y]; } diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 9311d2736..b7d807808 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1265,7 +1265,7 @@ private: for (int x = 0; x < fh; x++) for (int y = 0; y < fw; y++) { - labView->L[x][y] = (1.f + mL0) * (unshar->L[x][y]) - mL * labView->L[x][y]; + labView->L[x][y] = LIM((1.f + mL0) * (unshar->L[x][y]) - mL * labView->L[x][y], 0.f, 32768.f); labView->a[x][y] = (1.f + mC0) * (unshar->a[x][y]) - mC * labView->a[x][y]; labView->b[x][y] = (1.f + mC0) * (unshar->b[x][y]) - mC * labView->b[x][y]; } From 025f444d7eef0de4d2d8a7884ff3ac7ed04c9f0b Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 15 Dec 2019 08:21:41 +0100 Subject: [PATCH 033/264] Improve contrast levels with sigma --- rtdata/languages/default | 2 ++ rtengine/ipwavelet.cc | 32 ++++++++++++++++++++++++-------- rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtgui/paramsedited.cc | 6 ++++++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 15 +++++++++++++++ rtgui/wavelet.h | 2 ++ 8 files changed, 55 insertions(+), 8 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 9cc354323..5fa474dd6 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -790,6 +790,7 @@ HISTORY_MSG_WAVCLARI;Clarity HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_MSG_WAVMERGEL;Merge L HISTORY_MSG_WAVMERGEC;Merge C +HISTORY_MSG_WAVSIGMA;Sigma HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVSHOWMASK;Show wavelet mask @@ -2236,6 +2237,7 @@ TP_WAVELET_RESCONH;Highlights TP_WAVELET_RESID;Residual Image TP_WAVELET_SAT;Saturated chroma TP_WAVELET_SETTINGS;Wavelet Settings +TP_WAVELET_SIGMA;Sigma TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. TP_WAVELET_SKY;Sky targetting/protection diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index f45b21f28..f2c8c8182 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -63,6 +63,7 @@ namespace rtengine struct cont_params { float mul[10]; + float sigm; int chrom; int chro; int contrast; @@ -224,6 +225,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.BAmethod == "cur") { cp.BAmet = 2; } + cp.sigm = params->wavelet.sigma; cp.tmstrength = params->wavelet.tmrs; //cp.tonemap = params->wavelet.tmr; @@ -2997,15 +2999,29 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz //for each pixel and each level float beta; float mea[9]; - mea[0] = mean[level] / 6.f; - mea[1] = mean[level] / 2.f; + float rap = mean[level] - 2.f * cp.sigm * sigma[level]; + + if (rap > 0.f) { + mea[0] = rap; + } else { + mea[0] = mean[level] / 6.f; + } + + rap = mean[level] - cp.sigm * sigma[level]; + + if (rap > 0.f) { + mea[1] = rap; + } else { + mea[1] = mean[level] / 2.f; + } + mea[2] = mean[level]; // 50% data - mea[3] = mean[level] + sigma[level] / 2.f; - mea[4] = mean[level] + sigma[level]; //66% - mea[5] = mean[level] + 1.2f * sigma[level]; - mea[6] = mean[level] + 1.5f * sigma[level]; // - mea[7] = mean[level] + 2.f * sigma[level]; //95% - mea[8] = mean[level] + 2.5f * sigma[level]; //99% + mea[3] = mean[level] + cp.sigm * sigma[level] / 2.f; + mea[4] = mean[level] + cp.sigm * sigma[level]; //66% + mea[5] = mean[level] + cp.sigm * 1.2f * sigma[level]; + mea[6] = mean[level] + cp.sigm * 1.5f * sigma[level]; // + mea[7] = mean[level] + cp.sigm * 2.f * sigma[level]; //95% + mea[8] = mean[level] + cp.sigm * 2.5f * sigma[level]; //99% bool useChromAndHue = (skinprot != 0.f || cp.HSmet); float modchro; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index f92b40191..1822a81c7 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2263,6 +2263,7 @@ WaveletParams::WaveletParams() : TMmethod("cont"), Dirmethod("all"), HSmethod("with"), + sigma(1.0), rescon(0), resconH(0), reschro(0), @@ -2369,6 +2370,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && TMmethod == other.TMmethod && Dirmethod == other.Dirmethod && HSmethod == other.HSmethod + && sigma == other.sigma && rescon == other.rescon && resconH == other.resconH && reschro == other.reschro @@ -3548,6 +3550,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.avoid, "Wavelet", "AvoidColorShift", wavelet.avoid, keyFile); saveToKeyfile(!pedited || pedited->wavelet.showmask, "Wavelet", "Showmask", wavelet.showmask, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmr, "Wavelet", "TMr", wavelet.tmr, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.sigma, "Wavelet", "Sigma", wavelet.sigma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.rescon, "Wavelet", "ResidualcontShadow", wavelet.rescon, keyFile); saveToKeyfile(!pedited || pedited->wavelet.resconH, "Wavelet", "ResidualcontHighlight", wavelet.resconH, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thr, "Wavelet", "ThresholdResidShadow", wavelet.thr, keyFile); @@ -4655,6 +4658,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "TMMethod", pedited, wavelet.TMmethod, pedited->wavelet.TMmethod); assignFromKeyfile(keyFile, "Wavelet", "HSMethod", pedited, wavelet.HSmethod, pedited->wavelet.HSmethod); assignFromKeyfile(keyFile, "Wavelet", "DirMethod", pedited, wavelet.Dirmethod, pedited->wavelet.Dirmethod); + assignFromKeyfile(keyFile, "Wavelet", "Sigma", pedited, wavelet.sigma, pedited->wavelet.sigma); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontShadow", pedited, wavelet.rescon, pedited->wavelet.rescon); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", pedited, wavelet.resconH, pedited->wavelet.resconH); assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", pedited, wavelet.reschro, pedited->wavelet.reschro); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 839872e77..7ad99b594 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1237,6 +1237,7 @@ struct WaveletParams { Glib::ustring TMmethod; Glib::ustring Dirmethod; Glib::ustring HSmethod; + double sigma; int rescon; int resconH; int reschro; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index d4e2bd759..c915685bc 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -504,6 +504,7 @@ void ParamsEdited::set(bool v) wavelet.TMmethod = v; wavelet.HSmethod = v; wavelet.Dirmethod = v; + wavelet.sigma = v; wavelet.rescon = v; wavelet.resconH = v; wavelet.reschro = v; @@ -1095,6 +1096,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.TMmethod = wavelet.TMmethod && p.wavelet.TMmethod == other.wavelet.TMmethod; wavelet.HSmethod = wavelet.HSmethod && p.wavelet.HSmethod == other.wavelet.HSmethod; wavelet.Dirmethod = wavelet.Dirmethod && p.wavelet.Dirmethod == other.wavelet.Dirmethod; + wavelet.sigma = wavelet.sigma && p.wavelet.sigma == other.wavelet.sigma; wavelet.rescon = wavelet.rescon && p.wavelet.rescon == other.wavelet.rescon; wavelet.resconH = wavelet.resconH && p.wavelet.resconH == other.wavelet.resconH; wavelet.reschro = wavelet.reschro && p.wavelet.reschro == other.wavelet.reschro; @@ -3132,6 +3134,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.edgeampli = mods.wavelet.edgeampli; } + if (wavelet.sigma) { + toEdit.wavelet.sigma = mods.wavelet.sigma; + } + if (wavelet.resconH) { toEdit.wavelet.resconH = dontforceSet && options.baBehav[ADDSET_WA_RESCONH] ? toEdit.wavelet.resconH + mods.wavelet.resconH : mods.wavelet.resconH; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index d166e7ccc..4f7fabd1a 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -520,6 +520,7 @@ struct WaveletParamsEdited { bool Tilesmethod; bool daubcoeffmethod; bool Dirmethod; + bool sigma; bool rescon; bool resconH; bool reschro; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index c95736a80..252ed0abe 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -80,6 +80,7 @@ Wavelet::Wavelet() : tmr(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_BALCHRO")))), showmask(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_SHOWMASK")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), + sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.2, 2.5, 0.01, 1.))), rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), 0, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), 0, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), @@ -173,6 +174,7 @@ Wavelet::Wavelet() : EvWavedgs = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVEDGS"); EvWavscale = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSCALE"); EvWavradius = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVRADIUS"); + EvWavsigma = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGMA"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -325,6 +327,9 @@ Wavelet::Wavelet() : levBox->pack_start(*correction[i]); } + sigma->setAdjusterListener(this); + levBox->pack_start(*sigma, Gtk::PACK_SHRINK); + levBox->pack_start(*sup); sup->setAdjusterListener(this); wavLabels->show(); @@ -1226,6 +1231,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) lastavoid = pp->wavelet.avoid; lastshowmask = pp->wavelet.showmask; lasttmr = pp->wavelet.tmr; + sigma->setValue(pp->wavelet.sigma); rescon->setValue(pp->wavelet.rescon); resconH->setValue(pp->wavelet.resconH); reschro->setValue(pp->wavelet.reschro); @@ -1377,6 +1383,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) tmr->set_inconsistent(!pedited->wavelet.tmr); edgthresh->setEditedState(pedited->wavelet.edgthresh ? Edited : UnEdited); rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited); + sigma->setEditedState(pedited->wavelet.sigma ? Edited : UnEdited); resconH->setEditedState(pedited->wavelet.resconH ? Edited : UnEdited); reschro->setEditedState(pedited->wavelet.reschro ? Edited : UnEdited); tmrs->setEditedState(pedited->wavelet.tmrs ? Edited : UnEdited); @@ -1558,6 +1565,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.avoid = avoid->get_active(); pp->wavelet.showmask = showmask->get_active(); pp->wavelet.tmr = tmr->get_active(); + pp->wavelet.sigma = sigma->getValue(); pp->wavelet.rescon = rescon->getValue(); pp->wavelet.resconH = resconH->getValue(); pp->wavelet.reschro = reschro->getValue(); @@ -1668,6 +1676,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.HSmethod = HSmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.Dirmethod = Dirmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.edgthresh = edgthresh->getEditedState(); + pedited->wavelet.sigma = sigma->getEditedState(); pedited->wavelet.rescon = rescon->getEditedState(); pedited->wavelet.resconH = resconH->getEditedState(); pedited->wavelet.reschro = reschro->getEditedState(); @@ -1902,6 +1911,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit strength->setDefault(defParams->wavelet.strength); balance->setDefault(defParams->wavelet.balance); iter->setDefault(defParams->wavelet.iter); + sigma->setDefault(defParams->wavelet.sigma); rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); @@ -1963,6 +1973,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit softrad->setDefaultEditedState(pedited->wavelet.softrad ? Edited : UnEdited); softradend->setDefaultEditedState(pedited->wavelet.softradend ? Edited : UnEdited); + sigma->setDefault(defParams->wavelet.sigma); rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); @@ -2013,6 +2024,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit correctionch[i]->setDefaultEditedState(pedited->wavelet.ch[i] ? Edited : UnEdited); } } else { + sigma->setDefaultEditedState(Irrelevant); rescon->setDefaultEditedState(Irrelevant); resconH->setDefaultEditedState(Irrelevant); reschro->setDefaultEditedState(Irrelevant); @@ -2540,6 +2552,7 @@ void Wavelet::setBatchMode(bool batchMode) opacityCurveEditorWL->setBatchMode(batchMode); curveEditorRES->setBatchMode(batchMode); curveEditorGAM->setBatchMode(batchMode); + sigma->showEditedCB(); rescon->showEditedCB(); resconH->showEditedCB(); reschro->showEditedCB(); @@ -2621,6 +2634,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavtiles, edgthresh->getTextValue()); } else if (a == rescon) { listener->panelChanged(EvWavrescon, rescon->getTextValue()); + } else if (a == sigma) { + listener->panelChanged(EvWavsigma, sigma->getTextValue()); } else if (a == resconH) { listener->panelChanged(EvWavresconH, resconH->getTextValue()); } else if (a == reschro) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index b18ac668b..9d9502670 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -76,6 +76,7 @@ private: rtengine::ProcEvent EvWavedgs; rtengine::ProcEvent EvWavscale; rtengine::ProcEvent EvWavradius; + rtengine::ProcEvent EvWavsigma; void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -167,6 +168,7 @@ private: Gtk::Button* const neutralchButton; Adjuster* correction[9]; Adjuster* correctionch[9]; + Adjuster* const sigma; Adjuster* const rescon; Adjuster* const resconH; Adjuster* const reschro; From d5c60475e577c725cbd31b777334fc3d35e3a91e Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 17 Jan 2020 14:16:54 +0100 Subject: [PATCH 034/264] review mlsharpen --- rtengine/CMakeLists.txt | 1 + rtengine/ipsharpen.cc | 237 +------------------------------------ rtengine/ipsharpenedges.cc | 223 ++++++++++++++++++++++++++++++++++ 3 files changed, 225 insertions(+), 236 deletions(-) create mode 100644 rtengine/ipsharpenedges.cc diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 6bce68d1a..baca55c0a 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -94,6 +94,7 @@ set(RTENGINESOURCEFILES ipretinex.cc ipshadowshighlights.cc ipsharpen.cc + ipsharpenedges.cc ipsoftlight.cc iptransform.cc ipvibrance.cc diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 7198b76c5..78892a024 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -30,7 +30,7 @@ #include "settings.h" #include "sleef.h" -//#define BENCHMARK +#define BENCHMARK #include "StopWatch.h" using namespace std; @@ -385,241 +385,6 @@ BENCHFUN } -// To the extent possible under law, Manuel Llorens -// has waived all copyright and related or neighboring rights to this work. -// This work is published from: Spain. - -// Thanks to Manuel for this excellent job (Jacques Desmis JDC or frej83) -void ImProcFunctions::MLsharpen (LabImage* lab) -{ - // JD: this algorithm maximize clarity of images; it does not play on accutance. It can remove (partially) the effects of the AA filter) - // I think we can use this algorithm alone in most cases, or first to clarify image and if you want a very little USM (unsharp mask sharpening) after... - if (!params->sharpenEdge.enabled) { - return; - } - - MyTime t1e, t2e; - t1e.set(); - - int offset, c, i, j, p, width2; - int width = lab->W, height = lab->H; - float *L, lumH, lumV, lumD1, lumD2, v, contrast, s; - float difL, difR, difT, difB, difLT, difRB, difLB, difRT, wH, wV, wD1, wD2, chmax[3]; - float f1, f2, f3, f4; - float templab; - int iii, kkk; - width2 = 2 * width; - const float epsil = 0.01f; //prevent divide by zero - const float eps2 = 0.001f; //prevent divide by zero - float amount; - amount = params->sharpenEdge.amount / 100.0f; - - if (amount < 0.00001f) { - return; - } - - if (settings->verbose) { - printf ("SharpenEdge amount %f\n", amount); - } - - L = new float[width * height]; - - chmax[0] = 8.0f; - chmax[1] = 3.0f; - chmax[2] = 3.0f; - - int channels; - - if (params->sharpenEdge.threechannels) { - channels = 0; - } else { - channels = 2; - } - - if (settings->verbose) { - printf ("SharpenEdge channels %d\n", channels); - } - - int passes = params->sharpenEdge.passes; - - if (settings->verbose) { - printf ("SharpenEdge passes %d\n", passes); - } - - for (p = 0; p < passes; p++) - for (c = 0; c <= channels; c++) { // c=0 Luminance only - -#ifdef _OPENMP - #pragma omp parallel for private(offset) shared(L) -#endif - - for (offset = 0; offset < width * height; offset++) { - int ii = offset / width; - int kk = offset - ii * width; - - if (c == 0) { - L[offset] = lab->L[ii][kk] / 327.68f; // adjust to RT and to 0..100 - } else if (c == 1) { - L[offset] = lab->a[ii][kk] / 327.68f; - } else { /*if (c==2) */ - L[offset] = lab->b[ii][kk] / 327.68f; - } - } - -#ifdef _OPENMP - #pragma omp parallel for private(j,i,iii,kkk, templab,offset,wH,wV,wD1,wD2,s,lumH,lumV,lumD1,lumD2,v,contrast,f1,f2,f3,f4,difT,difB,difL,difR,difLT,difLB,difRT,difRB) shared(lab,L,amount) -#endif - - for(j = 2; j < height - 2; j++) - for(i = 2, offset = j * width + i; i < width - 2; i++, offset++) { - // weight functions - wH = eps2 + fabs(L[offset + 1] - L[offset - 1]); - wV = eps2 + fabs(L[offset + width] - L[offset - width]); - - s = 1.0f + fabs(wH - wV) / 2.0f; - wD1 = eps2 + fabs(L[offset + width + 1] - L[offset - width - 1]) / s; - wD2 = eps2 + fabs(L[offset + width - 1] - L[offset - width + 1]) / s; - s = wD1; - wD1 /= wD2; - wD2 /= s; - - // initial values - int ii = offset / width; - int kk = offset - ii * width; - - if (c == 0) { - lumH = lumV = lumD1 = lumD2 = v = lab->L[ii][kk] / 327.68f; - } else if (c == 1) { - lumH = lumV = lumD1 = lumD2 = v = lab->a[ii][kk] / 327.68f; - } else { /* if (c==2) */ - lumH = lumV = lumD1 = lumD2 = v = lab->b[ii][kk] / 327.68f; - } - - - // contrast detection - contrast = sqrt(fabs(L[offset + 1] - L[offset - 1]) * fabs(L[offset + 1] - L[offset - 1]) + fabs(L[offset + width] - L[offset - width]) * fabs(L[offset + width] - L[offset - width])) / chmax[c]; - - if (contrast > 1.0f) { - contrast = 1.0f; - } - - // new possible values - if (((L[offset] < L[offset - 1]) && (L[offset] > L[offset + 1])) || ((L[offset] > L[offset - 1]) && (L[offset] < L[offset + 1]))) { - f1 = fabs(L[offset - 2] - L[offset - 1]); - f2 = fabs(L[offset - 1] - L[offset]); - f3 = fabs(L[offset - 1] - L[offset - width]) * fabs(L[offset - 1] - L[offset + width]); - f4 = sqrt(fabs(L[offset - 1] - L[offset - width2]) * fabs(L[offset - 1] - L[offset + width2])); - difL = f1 * f2 * f2 * f3 * f3 * f4; - f1 = fabs(L[offset + 2] - L[offset + 1]); - f2 = fabs(L[offset + 1] - L[offset]); - f3 = fabs(L[offset + 1] - L[offset - width]) * fabs(L[offset + 1] - L[offset + width]); - f4 = sqrt(fabs(L[offset + 1] - L[offset - width2]) * fabs(L[offset + 1] - L[offset + width2])); - difR = f1 * f2 * f2 * f3 * f3 * f4; - - if ((difR > epsil) && (difL > epsil)) { - lumH = (L[offset - 1] * difR + L[offset + 1] * difL) / (difL + difR); - lumH = v * (1.f - contrast) + lumH * contrast; - } - } - - if (((L[offset] < L[offset - width]) && (L[offset] > L[offset + width])) || ((L[offset] > L[offset - width]) && (L[offset] < L[offset + width]))) { - f1 = fabs(L[offset - width2] - L[offset - width]); - f2 = fabs(L[offset - width] - L[offset]); - f3 = fabs(L[offset - width] - L[offset - 1]) * fabs(L[offset - width] - L[offset + 1]); - f4 = sqrt(fabs(L[offset - width] - L[offset - 2]) * fabs(L[offset - width] - L[offset + 2])); - difT = f1 * f2 * f2 * f3 * f3 * f4; - f1 = fabs(L[offset + width2] - L[offset + width]); - f2 = fabs(L[offset + width] - L[offset]); - f3 = fabs(L[offset + width] - L[offset - 1]) * fabs(L[offset + width] - L[offset + 1]); - f4 = sqrt(fabs(L[offset + width] - L[offset - 2]) * fabs(L[offset + width] - L[offset + 2])); - difB = f1 * f2 * f2 * f3 * f3 * f4; - - if ((difB > epsil) && (difT > epsil)) { - lumV = (L[offset - width] * difB + L[offset + width] * difT) / (difT + difB); - lumV = v * (1.f - contrast) + lumV * contrast; - } - } - - if (((L[offset] < L[offset - 1 - width]) && (L[offset] > L[offset + 1 + width])) || ((L[offset] > L[offset - 1 - width]) && (L[offset] < L[offset + 1 + width]))) { - f1 = fabs(L[offset - 2 - width2] - L[offset - 1 - width]); - f2 = fabs(L[offset - 1 - width] - L[offset]); - f3 = fabs(L[offset - 1 - width] - L[offset - width + 1]) * fabs(L[offset - 1 - width] - L[offset + width - 1]); - f4 = sqrt(fabs(L[offset - 1 - width] - L[offset - width2 + 2]) * fabs(L[offset - 1 - width] - L[offset + width2 - 2])); - difLT = f1 * f2 * f2 * f3 * f3 * f4; - f1 = fabs(L[offset + 2 + width2] - L[offset + 1 + width]); - f2 = fabs(L[offset + 1 + width] - L[offset]); - f3 = fabs(L[offset + 1 + width] - L[offset - width + 1]) * fabs(L[offset + 1 + width] - L[offset + width - 1]); - f4 = sqrt(fabs(L[offset + 1 + width] - L[offset - width2 + 2]) * fabs(L[offset + 1 + width] - L[offset + width2 - 2])); - difRB = f1 * f2 * f2 * f3 * f3 * f4; - - if ((difLT > epsil) && (difRB > epsil)) { - lumD1 = (L[offset - 1 - width] * difRB + L[offset + 1 + width] * difLT) / (difLT + difRB); - lumD1 = v * (1.f - contrast) + lumD1 * contrast; - } - } - - if (((L[offset] < L[offset + 1 - width]) && (L[offset] > L[offset - 1 + width])) || ((L[offset] > L[offset + 1 - width]) && (L[offset] < L[offset - 1 + width]))) { - f1 = fabs(L[offset - 2 + width2] - L[offset - 1 + width]); - f2 = fabs(L[offset - 1 + width] - L[offset]); - f3 = fabs(L[offset - 1 + width] - L[offset - width - 1]) * fabs(L[offset - 1 + width] - L[offset + width + 1]); - f4 = sqrt(fabs(L[offset - 1 + width] - L[offset - width2 - 2]) * fabs(L[offset - 1 + width] - L[offset + width2 + 2])); - difLB = f1 * f2 * f2 * f3 * f3 * f4; - f1 = fabs(L[offset + 2 - width2] - L[offset + 1 - width]); - f2 = fabs(L[offset + 1 - width] - L[offset]) * fabs(L[offset + 1 - width] - L[offset]); - f3 = fabs(L[offset + 1 - width] - L[offset + width + 1]) * fabs(L[offset + 1 - width] - L[offset - width - 1]); - f4 = sqrt(fabs(L[offset + 1 - width] - L[offset + width2 + 2]) * fabs(L[offset + 1 - width] - L[offset - width2 - 2])); - difRT = f1 * f2 * f2 * f3 * f3 * f4; - - if ((difLB > epsil) && (difRT > epsil)) { - lumD2 = (L[offset + 1 - width] * difLB + L[offset - 1 + width] * difRT) / (difLB + difRT); - lumD2 = v * (1.f - contrast) + lumD2 * contrast; - } - } - - s = amount; - - // avoid sharpening diagonals too much - if (((fabs(wH / wV) < 0.45f) && (fabs(wH / wV) > 0.05f)) || ((fabs(wV / wH) < 0.45f) && (fabs(wV / wH) > 0.05f))) { - s = amount / 3.0f; - } - - // final mix - if ((wH != 0.0f) && (wV != 0.0f) && (wD1 != 0.0f) && (wD2 != 0.0f)) { - iii = offset / width; - kkk = offset - iii * width; - float provL = lab->L[iii][kkk] / 327.68f; - - if(c == 0) { - if(provL < 92.f) { - templab = v * (1.f - s) + (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2) * s; - } else { - templab = provL; - } - } else { - templab = v * (1.f - s) + (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2) * s; - } - - if (c == 0) { - lab->L[iii][kkk] = fabs(327.68f * templab); // fabs because lab->L always >0 - } else if (c == 1) { - lab->a[iii][kkk] = 327.68f * templab ; - } else if (c == 2) { - lab->b[iii][kkk] = 327.68f * templab ; - } - } - - } - } - - delete [] L; - - t2e.set(); - - if (settings->verbose) { - printf("SharpenEdge gradient %d usec\n", t2e.etime(t1e)); - } -} - // To the extent possible under law, Manuel Llorens // has waived all copyright and related or neighboring rights to this work. // This code is licensed under CC0 v1.0, see license information at diff --git a/rtengine/ipsharpenedges.cc b/rtengine/ipsharpenedges.cc new file mode 100644 index 000000000..4d310abb2 --- /dev/null +++ b/rtengine/ipsharpenedges.cc @@ -0,0 +1,223 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2020 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . +*/ + +#include +#include "improcfun.h" +#include "labimage.h" +#include "procparams.h" +#include "rt_math.h" + +#define BENCHMARK +#include "StopWatch.h" + +using namespace std; +namespace { +#ifdef __SSE2__ +bool inintervall(float a, float b, float c) +{ + return a < std::max(b, c) && a > std::min(b, c); +} + +float selectweight(float a, float b, float low, float high) +{ + const float minVal = std::min(a,b); + const float maxVal = std::max(a,b); + const float res = (minVal < 0.45f * maxVal) ? low : high; + return (minVal > 0.05f * maxVal) ? res : high; +} + +#else +bool inintervall(float a, float b, float c) +{ + return (a < b && a > c) || (a < c && a > b); +} + +float selectweight(float a, float b, float low, float high) +{ + if ((a < 0.45f * b && a > 0.05f * b) || (b < 0.45f * a && b > 0.05f * a)) { + return low; + } else { + return high; + } +} + +#endif +} +namespace rtengine +{ + +// To the extent possible under law, Manuel Llorens +// has waived all copyright and related or neighboring rights to this work. +// This work is published from: Spain. + +// Thanks to Manuel for this excellent job (Jacques Desmis JDC or frej83) +void ImProcFunctions::MLsharpen (LabImage* lab) +{ + // JD: this algorithm maximize clarity of images; it does not play on accutance. It can remove (partially) the effects of the AA filter) + // I think we can use this algorithm alone in most cases, or first to clarify image and if you want a very little USM (unsharp mask sharpening) after... + if (!params->sharpenEdge.enabled || params->sharpenEdge.amount == 0) { + return; + } + +BENCHFUN + + const int width = lab->W, height = lab->H; + constexpr float chmax[3] = {1.f / 8.f, 1.f / 3.f, 1.f / 3.f}; + const int width2 = 2 * width; + constexpr float eps2 = 0.001f; //prevent divide by zero + const float amount = params->sharpenEdge.amount / 100.0f; + const float amountby3 = params->sharpenEdge.amount / 300.0f; + + std::unique_ptr L(new float[width * height]); + + const int channels = params->sharpenEdge.threechannels ? 1 : 3; + const int passes = params->sharpenEdge.passes; + + for (int c = 0; c < channels; ++c) { // c=0 Luminance only + float** channel = c == 0 ? lab->L : c == 1 ? lab->a : lab->b; + for (int p = 0; p < passes; ++p) { +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < height; ++i) { + for (int j = 0; j < width; ++j) { + L[i * width + j] = channel[i][j] / 327.68f; + } + } + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int j = 2; j < height - 2; j++) { + for (int i = 2, offset = j * width + i; i < width - 2; i++, offset++) { + // weight functions + const float wH = eps2 + fabs(L[offset + 1] - L[offset - 1]); + const float wV = eps2 + fabs(L[offset + width] - L[offset - width]); + + float s = 2.f / (2.f + fabs(wH - wV)); + float wD1 = eps2 + fabs(L[offset + width + 1] - L[offset - width - 1]) * s; + float wD2 = eps2 + fabs(L[offset + width - 1] - L[offset - width + 1]) * s; + s = wD1; + wD1 /= wD2; + wD2 /= s; + + const float v = L[offset]; + float lumH, lumV, lumD1, lumD2; + lumH = lumV = lumD1 = lumD2 = v; + + // contrast detection + const float contrast = std::min(std::sqrt(SQR(L[offset + 1] - L[offset - 1]) + SQR(L[offset + width] - L[offset - width])) * chmax[c], 1.f); + + // new possible values + if (inintervall(L[offset], L[offset - 1], L[offset + 1])) { + float f1 = fabs(L[offset - 2] - L[offset - 1]); + float f2 = L[offset - 1] - L[offset]; + float f3 = (L[offset - 1] - L[offset - width]) * (L[offset - 1] - L[offset + width]); + float f4 = std::sqrt(fabs(L[offset - 1] - L[offset - width2]) * fabs(L[offset - 1] - L[offset + width2])); + const float difL = f1 * SQR(f2) * SQR(f3) * f4; + if (difL > 0.f) { + f1 = fabs(L[offset + 2] - L[offset + 1]); + f2 = L[offset + 1] - L[offset]; + f3 = (L[offset + 1] - L[offset - width]) * (L[offset + 1] - L[offset + width]); + f4 = std::sqrt(fabs(L[offset + 1] - L[offset - width2]) * fabs(L[offset + 1] - L[offset + width2])); + const float difR = f1 * SQR(f2) * SQR(f3) * f4; + if (difR > 0.f) { + lumH = (L[offset - 1] * difR + L[offset + 1] * difL) / (difL + difR); + lumH = intp(contrast, lumH, v); + } + } + } + + if (inintervall(L[offset], L[offset - width], L[offset + width])) { + float f1 = fabs(L[offset - width2] - L[offset - width]); + float f2 = L[offset - width] - L[offset]; + float f3 = (L[offset - width] - L[offset - 1]) * (L[offset - width] - L[offset + 1]); + float f4 = std::sqrt(fabs(L[offset - width] - L[offset - 2]) * fabs(L[offset - width] - L[offset + 2])); + const float difT = f1 * SQR(f2) * SQR(f3) * f4; + if (difT > 0.f) { + f1 = fabs(L[offset + width2] - L[offset + width]); + f2 = L[offset + width] - L[offset]; + f3 = (L[offset + width] - L[offset - 1]) * (L[offset + width] - L[offset + 1]); + f4 = std::sqrt(fabs(L[offset + width] - L[offset - 2]) * fabs(L[offset + width] - L[offset + 2])); + const float difB = f1 * SQR(f2) * SQR(f3) * f4; + if (difB > 0.f) { + lumV = (L[offset - width] * difB + L[offset + width] * difT) / (difT + difB); + lumV = intp(contrast, lumV, v); + } + } + } + + if (inintervall(L[offset], L[offset - 1 - width], L[offset + 1 + width])) { + float f1 = fabs(L[offset - 2 - width2] - L[offset - 1 - width]); + float f2 = L[offset - 1 - width] - L[offset]; + float f3 = (L[offset - 1 - width] - L[offset - width + 1]) * (L[offset - 1 - width] - L[offset + width - 1]); + float f4 = std::sqrt(fabs(L[offset - 1 - width] - L[offset - width2 + 2]) * fabs(L[offset - 1 - width] - L[offset + width2 - 2])); + const float difLT = f1 * SQR(f2) * SQR(f3) * f4; + if (difLT > 0.f) { + f1 = fabs(L[offset + 2 + width2] - L[offset + 1 + width]); + f2 = L[offset + 1 + width] - L[offset]; + f3 = (L[offset + 1 + width] - L[offset - width + 1]) * (L[offset + 1 + width] - L[offset + width - 1]); + f4 = std::sqrt(fabs(L[offset + 1 + width] - L[offset - width2 + 2]) * fabs(L[offset + 1 + width] - L[offset + width2 - 2])); + const float difRB = f1 * SQR(f2) * SQR(f3) * f4; + if (difRB > 0.f) { + lumD1 = (L[offset - 1 - width] * difRB + L[offset + 1 + width] * difLT) / (difLT + difRB); + lumD1 = intp(contrast, lumD1, v); + } + } + } + + if (inintervall(L[offset], L[offset + 1 - width], L[offset] > L[offset - 1 + width])) { + float f1 = fabs(L[offset - 2 + width2] - L[offset - 1 + width]); + float f2 = L[offset - 1 + width] - L[offset]; + float f3 = (L[offset - 1 + width] - L[offset - width - 1]) * (L[offset - 1 + width] - L[offset + width + 1]); + float f4 = std::sqrt(fabs(L[offset - 1 + width] - L[offset - width2 - 2]) * fabs(L[offset - 1 + width] - L[offset + width2 + 2])); + const float difLB = f1 * SQR(f2) * SQR(f3) * f4; + if (difLB > 0.f) { + f1 = fabs(L[offset + 2 - width2] - L[offset + 1 - width]); + f2 = L[offset + 1 - width] - L[offset]; + f3 = (L[offset + 1 - width] - L[offset + width + 1]) * (L[offset + 1 - width] - L[offset - width - 1]); + f4 = std::sqrt(fabs(L[offset + 1 - width] - L[offset + width2 + 2]) * fabs(L[offset + 1 - width] - L[offset - width2 - 2])); + const float difRT = f1 * SQR(f2) * SQR(f3) * f4; + if (difRT > 0.f) { + lumD2 = (L[offset + 1 - width] * difLB + L[offset - 1 + width] * difRT) / (difLB + difRT); + lumD2 = intp(contrast, lumD2, v); + } + } + } + + // final mix + // avoid sharpening diagonals too much + const float weight = selectweight(wH, wV, amountby3, amount); + + if (c == 0) { + if (v < 92.f) { + channel[j][i] = fabs(327.68f * intp(weight, (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2), v)); // fabs because lab->L always > 0 + } + } else { + channel[j][i] = 327.68f * intp(weight, (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2), v); + } + } + } + } + } +} + +} \ No newline at end of file From c304d3270214cccc1c445b8a1aaeef1e58c7377d Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 17 Jan 2020 14:23:06 +0100 Subject: [PATCH 035/264] mlsharpen review: minor changes --- rtengine/ipsharpen.cc | 2 +- rtengine/ipsharpenedges.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 78892a024..959030dc6 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -30,7 +30,7 @@ #include "settings.h" #include "sleef.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" using namespace std; diff --git a/rtengine/ipsharpenedges.cc b/rtengine/ipsharpenedges.cc index 4d310abb2..c42472598 100644 --- a/rtengine/ipsharpenedges.cc +++ b/rtengine/ipsharpenedges.cc @@ -220,4 +220,4 @@ BENCHFUN } } -} \ No newline at end of file +} From 507af11adf521a05cac111625282b906a1bc1e0f Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 17 Jan 2020 16:25:20 +0100 Subject: [PATCH 036/264] mlsharpen: bugfix and speedup --- rtengine/ipsharpenedges.cc | 56 +++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/rtengine/ipsharpenedges.cc b/rtengine/ipsharpenedges.cc index c42472598..73295e4fa 100644 --- a/rtengine/ipsharpenedges.cc +++ b/rtengine/ipsharpenedges.cc @@ -127,18 +127,18 @@ BENCHFUN const float contrast = std::min(std::sqrt(SQR(L[offset + 1] - L[offset - 1]) + SQR(L[offset + width] - L[offset - width])) * chmax[c], 1.f); // new possible values - if (inintervall(L[offset], L[offset - 1], L[offset + 1])) { + if (inintervall(v, L[offset - 1], L[offset + 1])) { float f1 = fabs(L[offset - 2] - L[offset - 1]); - float f2 = L[offset - 1] - L[offset]; + float f2 = L[offset - 1] - v; float f3 = (L[offset - 1] - L[offset - width]) * (L[offset - 1] - L[offset + width]); - float f4 = std::sqrt(fabs(L[offset - 1] - L[offset - width2]) * fabs(L[offset - 1] - L[offset + width2])); - const float difL = f1 * SQR(f2) * SQR(f3) * f4; + float f4 = std::sqrt(fabs((L[offset - 1] - L[offset - width2]) * (L[offset - 1] - L[offset + width2]))); + const float difL = f1 * SQR(f2 * f3) * f4; if (difL > 0.f) { f1 = fabs(L[offset + 2] - L[offset + 1]); - f2 = L[offset + 1] - L[offset]; + f2 = L[offset + 1] - v; f3 = (L[offset + 1] - L[offset - width]) * (L[offset + 1] - L[offset + width]); - f4 = std::sqrt(fabs(L[offset + 1] - L[offset - width2]) * fabs(L[offset + 1] - L[offset + width2])); - const float difR = f1 * SQR(f2) * SQR(f3) * f4; + f4 = std::sqrt(fabs((L[offset + 1] - L[offset - width2]) * (L[offset + 1] - L[offset + width2]))); + const float difR = f1 * SQR(f2 * f3) * f4; if (difR > 0.f) { lumH = (L[offset - 1] * difR + L[offset + 1] * difL) / (difL + difR); lumH = intp(contrast, lumH, v); @@ -146,18 +146,18 @@ BENCHFUN } } - if (inintervall(L[offset], L[offset - width], L[offset + width])) { + if (inintervall(v, L[offset - width], L[offset + width])) { float f1 = fabs(L[offset - width2] - L[offset - width]); - float f2 = L[offset - width] - L[offset]; + float f2 = L[offset - width] - v; float f3 = (L[offset - width] - L[offset - 1]) * (L[offset - width] - L[offset + 1]); - float f4 = std::sqrt(fabs(L[offset - width] - L[offset - 2]) * fabs(L[offset - width] - L[offset + 2])); - const float difT = f1 * SQR(f2) * SQR(f3) * f4; + float f4 = std::sqrt(fabs((L[offset - width] - L[offset - 2]) * (L[offset - width] - L[offset + 2]))); + const float difT = f1 * SQR(f2 * f3) * f4; if (difT > 0.f) { f1 = fabs(L[offset + width2] - L[offset + width]); - f2 = L[offset + width] - L[offset]; + f2 = L[offset + width] - v; f3 = (L[offset + width] - L[offset - 1]) * (L[offset + width] - L[offset + 1]); - f4 = std::sqrt(fabs(L[offset + width] - L[offset - 2]) * fabs(L[offset + width] - L[offset + 2])); - const float difB = f1 * SQR(f2) * SQR(f3) * f4; + f4 = std::sqrt(fabs((L[offset + width] - L[offset - 2]) * (L[offset + width] - L[offset + 2]))); + const float difB = f1 * SQR(f2 * f3) * f4; if (difB > 0.f) { lumV = (L[offset - width] * difB + L[offset + width] * difT) / (difT + difB); lumV = intp(contrast, lumV, v); @@ -165,18 +165,18 @@ BENCHFUN } } - if (inintervall(L[offset], L[offset - 1 - width], L[offset + 1 + width])) { + if (inintervall(v, L[offset - 1 - width], L[offset + 1 + width])) { float f1 = fabs(L[offset - 2 - width2] - L[offset - 1 - width]); - float f2 = L[offset - 1 - width] - L[offset]; + float f2 = L[offset - 1 - width] - v; float f3 = (L[offset - 1 - width] - L[offset - width + 1]) * (L[offset - 1 - width] - L[offset + width - 1]); - float f4 = std::sqrt(fabs(L[offset - 1 - width] - L[offset - width2 + 2]) * fabs(L[offset - 1 - width] - L[offset + width2 - 2])); - const float difLT = f1 * SQR(f2) * SQR(f3) * f4; + float f4 = std::sqrt(fabs((L[offset - 1 - width] - L[offset - width2 + 2]) * (L[offset - 1 - width] - L[offset + width2 - 2]))); + const float difLT = f1 * SQR(f2 * f3) * f4; if (difLT > 0.f) { f1 = fabs(L[offset + 2 + width2] - L[offset + 1 + width]); - f2 = L[offset + 1 + width] - L[offset]; + f2 = L[offset + 1 + width] - v; f3 = (L[offset + 1 + width] - L[offset - width + 1]) * (L[offset + 1 + width] - L[offset + width - 1]); - f4 = std::sqrt(fabs(L[offset + 1 + width] - L[offset - width2 + 2]) * fabs(L[offset + 1 + width] - L[offset + width2 - 2])); - const float difRB = f1 * SQR(f2) * SQR(f3) * f4; + f4 = std::sqrt(fabs((L[offset + 1 + width] - L[offset - width2 + 2]) * (L[offset + 1 + width] - L[offset + width2 - 2]))); + const float difRB = f1 * SQR(f2 * f3) * f4; if (difRB > 0.f) { lumD1 = (L[offset - 1 - width] * difRB + L[offset + 1 + width] * difLT) / (difLT + difRB); lumD1 = intp(contrast, lumD1, v); @@ -184,18 +184,18 @@ BENCHFUN } } - if (inintervall(L[offset], L[offset + 1 - width], L[offset] > L[offset - 1 + width])) { + if (inintervall(v, L[offset + 1 - width], L[offset - 1 + width])) { float f1 = fabs(L[offset - 2 + width2] - L[offset - 1 + width]); - float f2 = L[offset - 1 + width] - L[offset]; + float f2 = L[offset - 1 + width] - v; float f3 = (L[offset - 1 + width] - L[offset - width - 1]) * (L[offset - 1 + width] - L[offset + width + 1]); - float f4 = std::sqrt(fabs(L[offset - 1 + width] - L[offset - width2 - 2]) * fabs(L[offset - 1 + width] - L[offset + width2 + 2])); - const float difLB = f1 * SQR(f2) * SQR(f3) * f4; + float f4 = std::sqrt(fabs((L[offset - 1 + width] - L[offset - width2 - 2]) * (L[offset - 1 + width] - L[offset + width2 + 2]))); + const float difLB = f1 * SQR(f2 * f3) * f4; if (difLB > 0.f) { f1 = fabs(L[offset + 2 - width2] - L[offset + 1 - width]); - f2 = L[offset + 1 - width] - L[offset]; + f2 = L[offset + 1 - width] - v; f3 = (L[offset + 1 - width] - L[offset + width + 1]) * (L[offset + 1 - width] - L[offset - width - 1]); - f4 = std::sqrt(fabs(L[offset + 1 - width] - L[offset + width2 + 2]) * fabs(L[offset + 1 - width] - L[offset - width2 - 2])); - const float difRT = f1 * SQR(f2) * SQR(f3) * f4; + f4 = std::sqrt(fabs((L[offset + 1 - width] - L[offset + width2 + 2]) * (L[offset + 1 - width] - L[offset - width2 - 2]))); + const float difRT = f1 * SQR(f2 * f3) * f4; if (difRT > 0.f) { lumD2 = (L[offset + 1 - width] * difLB + L[offset - 1 + width] * difRT) / (difLB + difRT); lumD2 = intp(contrast, lumD2, v); From 544a2e5068e38fa4f57c56159c53ddd0e1d6b38c Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 20 Jan 2020 16:02:30 +0100 Subject: [PATCH 037/264] Fix double promotion in target rtexif --- rtexif/canonattribs.cc | 2 +- rtexif/kodakattribs.cc | 6 +++--- rtexif/nikonattribs.cc | 2 +- rtexif/pentaxattribs.cc | 8 ++++---- rtexif/rtexif.cc | 2 +- rtexif/sonyminoltaattribs.cc | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/rtexif/canonattribs.cc b/rtexif/canonattribs.cc index 0e6f7eb2f..5d907e242 100644 --- a/rtexif/canonattribs.cc +++ b/rtexif/canonattribs.cc @@ -1174,7 +1174,7 @@ public: int a = Interpreter::toInt (t, ofs, astype); if (a > 1) { - int i = int (double (powf (2.f, float (a) / 32.f - 4.f)) * 50.f + 0.5f); + int i = static_cast(powf (2.f, static_cast(a) / 32.f - 4.f)) * 50.0 + 0.5; return i; } else { return 0; diff --git a/rtexif/kodakattribs.cc b/rtexif/kodakattribs.cc index a9c168a70..9c7d7d1ee 100644 --- a/rtexif/kodakattribs.cc +++ b/rtexif/kodakattribs.cc @@ -58,7 +58,7 @@ void parseKodakIfdTextualInfo (Tag *textualInfo, Tag* exif_) // Proback645 may have "Lens" but not "Focal Length" float flen = atof (val.c_str()); - if (flen != 0.0) { + if (flen != 0.f) { t = new Tag (exif, lookupAttrib (exifAttribs, "FocalLength")); t->initRational (flen * 32, 32); exif->replaceTag (t); @@ -66,7 +66,7 @@ void parseKodakIfdTextualInfo (Tag *textualInfo, Tag* exif_) } else if (key == "Focal Length") { float flen = atof (val.c_str()); - if (flen != 0.0) { + if (flen != 0.f) { t = new Tag (exif, lookupAttrib (exifAttribs, "FocalLength")); t->initRational (flen * 32, 32); exif->replaceTag (t); @@ -74,7 +74,7 @@ void parseKodakIfdTextualInfo (Tag *textualInfo, Tag* exif_) } else if (key == "Aperture") { float aperture = atof (&val.c_str()[1]); - if (aperture != 0.0) { + if (aperture != 0.f) { t = new Tag (exif, lookupAttrib (exifAttribs, "FNumber")); t->initRational ((int) (aperture * 10), 10); exif->replaceTag (t); diff --git a/rtexif/nikonattribs.cc b/rtexif/nikonattribs.cc index 77720dde0..b050b3b87 100644 --- a/rtexif/nikonattribs.cc +++ b/rtexif/nikonattribs.cc @@ -70,7 +70,7 @@ public: int a = t->getValue()[ofs]; if (a > 1) { - int i = int (double (powf (2.f, float (a) / 12.f - 5.f)) * 100.f + 0.5f); + int i = static_cast(powf(2.f, float (a) / 12.f - 5.f)) * 100.0 + 0.5; return i; } else { return 0; diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc index 898150696..89e5172e8 100644 --- a/rtexif/pentaxattribs.cc +++ b/rtexif/pentaxattribs.cc @@ -1391,9 +1391,9 @@ public: std::string toString (const Tag* t) const override { int a = t->toInt (0, BYTE); - float b = float (10 * int (a >> 2)) * pow (4.f, float (int (a & 0x03) - 2)); + double b = static_cast(10 * (a >> 2)) * std::pow(4.f, static_cast((a & 0x03) - 2)); - if (b > 1.f) { + if (b > 1.0) { char buffer[32]; sprintf (buffer, "%.2f", b ); return buffer; @@ -1404,9 +1404,9 @@ public: double toDouble (const Tag* t, int ofs) override { int a = t->toInt (ofs, BYTE); - float b = float (10 * int (a >> 2)) * pow (4.f, float (int (a & 0x03) - 2)); + double b = static_cast(10 * (a >> 2)) * std::pow(4.f, static_cast((a & 0x03) - 2)); - if (b > 1.f) { + if (b > 1.0) { return b; } else { return 0.; diff --git a/rtexif/rtexif.cc b/rtexif/rtexif.cc index 89ff6cd33..06604ade5 100644 --- a/rtexif/rtexif.cc +++ b/rtexif/rtexif.cc @@ -2344,7 +2344,7 @@ void ExifManager::parseCIFF (int length, TagDirectory* root) ev = ((short)get2 (f, INTEL)) / 32.0f; fseek (f, 34, SEEK_CUR); - if (shutter > 1e6) { + if (shutter > 1e6f) { shutter = get2 (f, INTEL) / 10.0f; } diff --git a/rtexif/sonyminoltaattribs.cc b/rtexif/sonyminoltaattribs.cc index 4410a4051..11130a577 100644 --- a/rtexif/sonyminoltaattribs.cc +++ b/rtexif/sonyminoltaattribs.cc @@ -2252,7 +2252,7 @@ public: // Decode the value if (a && a != 254) { // 254 = 'Auto' for CameraSettings3, but we might say the same for CameraSettings & CameraSettings2 (?) - return int (expf ((double (a) / 8.f - 6.f) * logf (2.f)) * 100.f + 0.5f); + return std::exp((a / 8.f - 6.f) * std::log(2.f)) * 100.f + 0.5f; } else { return 0; } From 9dbf0ff6293d3c86254ec3cb04a7cf5ec9acdcc7 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 20 Jan 2020 18:50:24 +0100 Subject: [PATCH 038/264] Fix LGTM issues --- rtexif/pentaxattribs.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc index 89e5172e8..ea47e6058 100644 --- a/rtexif/pentaxattribs.cc +++ b/rtexif/pentaxattribs.cc @@ -1391,7 +1391,7 @@ public: std::string toString (const Tag* t) const override { int a = t->toInt (0, BYTE); - double b = static_cast(10 * (a >> 2)) * std::pow(4.f, static_cast((a & 0x03) - 2)); + double b = static_cast(10 * (a >> 2)) * std::pow(4.0, static_cast((a & 0x03) - 2)); if (b > 1.0) { char buffer[32]; @@ -1404,7 +1404,7 @@ public: double toDouble (const Tag* t, int ofs) override { int a = t->toInt (ofs, BYTE); - double b = static_cast(10 * (a >> 2)) * std::pow(4.f, static_cast((a & 0x03) - 2)); + double b = static_cast(10 * (a >> 2)) * std::pow(4.0, static_cast((a & 0x03) - 2)); if (b > 1.0) { return b; From b2443b0e7e8db1d202da2d008a13dbe18ce3fd3d Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 21 Jan 2020 00:16:27 +0100 Subject: [PATCH 039/264] more double promote fixes, still not complete --- rtengine/CA_correct_RT.cc | 16 +++++------ rtengine/EdgePreservingDecomposition.cc | 22 +++++++------- rtengine/PF_correct_RT.cc | 38 +++++++++++++------------ rtengine/ahd_demosaic_RT.cc | 12 ++++---- rtengine/badpixels.cc | 2 +- rtengine/camconst.cc | 4 +-- rtengine/capturesharpening.cc | 8 +++--- rtengine/ciecam02.cc | 10 +++---- rtengine/color.h | 16 +++++------ rtengine/colortemp.cc | 12 ++++---- rtengine/curves.h | 10 +++---- rtengine/dcp.cc | 34 +++++++++++++++------- rtengine/demosaic_algos.cc | 2 +- rtengine/dfmanager.cc | 2 +- rtengine/diagonalcurves.cc | 12 ++++---- rtengine/dirpyr_equalizer.cc | 10 +++---- rtengine/dual_demosaic_RT.cc | 4 +-- rtengine/ffmanager.cc | 2 +- rtengine/green_equil_RT.cc | 10 +++---- rtengine/histmatching.cc | 6 ++-- rtengine/image16.cc | 8 +++--- rtengine/image8.cc | 8 +++--- rtengine/imagefloat.cc | 10 +++---- rtengine/ipdehaze.cc | 6 ++-- rtengine/iplabregions.cc | 8 +++--- rtengine/ipretinex.cc | 12 ++++---- rtengine/ipshadowshighlights.cc | 2 +- rtengine/ipvibrance.cc | 4 +-- rtengine/lmmse_demosaic.cc | 8 +++--- rtengine/procparams.cc | 2 +- rtengine/tmo_fattal02.cc | 12 ++++---- rtengine/xtrans_demosaic.cc | 2 +- rtgui/blackwhite.cc | 10 +++---- rtgui/colorappearance.cc | 2 +- rtgui/colortoning.cc | 20 ++++++------- rtgui/coordinateadjuster.cc | 8 +++--- rtgui/crop.cc | 16 +++++------ rtgui/editwidgets.cc | 20 ++++++------- 38 files changed, 203 insertions(+), 187 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index f4d082199..fa9788af0 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -790,12 +790,12 @@ float* RawImageSource::CA_correct_RT( for (int m = 0; m < polyord; m++) { double powHblock = powHblockInit; for (int n = 0; n < polyord; n++) { - polymat[c][dir][numpar * (polyord * i + j) + (polyord * m + n)] += powVblock * powHblock * blockwt[vblock * hblsz + hblock]; + polymat[c][dir][numpar * (polyord * i + j) + (polyord * m + n)] += powVblock * powHblock * static_cast(blockwt[vblock * hblsz + hblock]); powHblock *= hblock; } powVblock *= vblock; } - shiftmat[c][dir][(polyord * i + j)] += powVblockInit * powHblockInit * bstemp[dir] * blockwt[vblock * hblsz + hblock]; + shiftmat[c][dir][(polyord * i + j)] += powVblockInit * powHblockInit * static_cast(bstemp[dir]) * static_cast(blockwt[vblock * hblsz + hblock]); powHblockInit *= hblock; } powVblockInit *= vblock; @@ -848,7 +848,7 @@ float* RawImageSource::CA_correct_RT( for (int top = -border; top < height; top += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) { memset(bufferThr, 0, buffersizePassTwo); - float lblockshifts[2][2]; + double lblockshifts[2][2]; const int vblock = ((top + border) / (ts - border2)) + 1; const int hblock = ((left + border) / (ts - border2)) + 1; const int bottom = min(top + ts, height + border); @@ -1036,8 +1036,8 @@ float* RawImageSource::CA_correct_RT( } if (!autoCA) { - float hfrac = -((float)(hblock - 0.5) / (hblsz - 2) - 0.5); - float vfrac = -((float)(vblock - 0.5) / (vblsz - 2) - 0.5) * height / width; + double hfrac = -((hblock - 0.5) / (hblsz - 2) - 0.5); + double vfrac = -((vblock - 0.5) / (vblsz - 2) - 0.5) * height / width; lblockshifts[0][0] = 2 * vfrac * cared; lblockshifts[0][1] = 2 * hfrac * cared; lblockshifts[1][0] = 2 * vfrac * cablue; @@ -1058,7 +1058,7 @@ float* RawImageSource::CA_correct_RT( } powVblock *= vblock; } - constexpr float bslim = 3.99; //max allowed CA shift + constexpr double bslim = 3.99f; //max allowed CA shift lblockshifts[0][0] = LIM(lblockshifts[0][0], -bslim, bslim); lblockshifts[0][1] = LIM(lblockshifts[0][1], -bslim, bslim); lblockshifts[1][0] = LIM(lblockshifts[1][0], -bslim, bslim); @@ -1070,14 +1070,14 @@ float* RawImageSource::CA_correct_RT( //some parameters for the bilinear interpolation shiftvfloor[c] = floor((float)lblockshifts[c>>1][0]); shiftvceil[c] = ceil((float)lblockshifts[c>>1][0]); - if (lblockshifts[c>>1][0] < 0.f) { + if (lblockshifts[c>>1][0] < 0.0) { std::swap(shiftvfloor[c], shiftvceil[c]); } shiftvfrac[c] = fabs(lblockshifts[c>>1][0] - shiftvfloor[c]); shifthfloor[c] = floor((float)lblockshifts[c>>1][1]); shifthceil[c] = ceil((float)lblockshifts[c>>1][1]); - if (lblockshifts[c>>1][1] < 0.f) { + if (lblockshifts[c>>1][1] < 0.0) { std::swap(shifthfloor[c], shifthceil[c]); } shifthfrac[c] = fabs(lblockshifts[c>>1][1] - shifthfloor[c]); diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index 700181e1d..04459e88a 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -55,7 +55,7 @@ float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), fl #endif for(int ii = 0; ii < n; ii++) { - rs += r[ii] * s[ii]; + rs += static_cast(r[ii]) * static_cast(s[ii]); } //Search direction d. @@ -84,15 +84,15 @@ float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), fl #endif for(int ii = 0; ii < n; ii++) { - ab += d[ii] * ax[ii]; + ab += static_cast(d[ii]) * static_cast(ax[ii]); } - if(ab == 0.0f) { + if(ab == 0.0) { break; //So unlikely. It means perfectly converged or singular, stop either way. } ab = rs / ab; - + float abf = ab; //Update x and r with this step size. double rms = 0.0; // use double precision for large summations #ifdef _OPENMP @@ -100,15 +100,15 @@ float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), fl #endif for(int ii = 0; ii < n; ii++) { - x[ii] += ab * d[ii]; - r[ii] -= ab * ax[ii]; //"Fast recursive formula", use explicit r = b - Ax occasionally? - rms += r[ii] * r[ii]; + x[ii] += abf * d[ii]; + r[ii] -= abf * ax[ii]; //"Fast recursive formula", use explicit r = b - Ax occasionally? + rms += rtengine::SQR(r[ii]); } rms = sqrtf(rms / n); //Quit? This probably isn't the best stopping condition, but ok. - if(rms < RMSResidual) { + if(rms < static_cast(RMSResidual)) { break; } @@ -129,20 +129,20 @@ float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), fl #endif for(int ii = 0; ii < n; ii++) { - rs += r[ii] * s[ii]; + rs += static_cast(r[ii]) * static_cast(s[ii]); } } ab = rs / ab; - + abf = ab; //Update search direction p. #ifdef _OPENMP #pragma omp parallel for #endif for(int ii = 0; ii < n; ii++) { - d[ii] = s[ii] + ab * d[ii]; + d[ii] = s[ii] + abf * d[ii]; } diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc index 9a95b8e2f..15b7b21ee 100644 --- a/rtengine/PF_correct_RT.cc +++ b/rtengine/PF_correct_RT.cc @@ -103,7 +103,7 @@ void ImProcFunctions::PF_correct_RT(LabImage * lab, double radius, int thresh) // no precalculated values without SSE => calculate const float HH = xatan2f(lab->b[i][j], lab->a[i][j]); #endif - float chparam = chCurve->getVal((Color::huelab_to_huehsv2(HH))) - 0.5f; // get C=f(H) + float chparam = chCurve->getVal((Color::huelab_to_huehsv2(HH))) - 0.5; // get C=f(H) if (chparam < 0.f) { chparam *= 2.f; // increased action if chparam < 0 @@ -113,25 +113,25 @@ void ImProcFunctions::PF_correct_RT(LabImage * lab, double radius, int thresh) } const float chroma = chromaChfactor * (SQR(lab->a[i][j] - tmpa[i][j]) + SQR(lab->b[i][j] - tmpb[i][j])); // modulate chroma function hue - chromave += chroma; + chromave += static_cast(chroma); fringe[i * width + j] = chroma; } } } chromave /= height * width; - if (chromave > 0.0) { // now as chromave is calculated, we postprocess fringe to reduce the number of divisions in future + const float chromavef = chromave; #ifdef _OPENMP #pragma omp parallel for simd #endif for (int j = 0; j < width * height; j++) { - fringe[j] = 1.f / (fringe[j] + chromave); + fringe[j] = 1.f / (fringe[j] + chromavef); } - const float threshfactor = 1.f / (SQR(thresh / 33.f) * chromave * 5.0f + chromave); + const float threshfactor = 1.f / (SQR(thresh / 33.f) * chromavef * 5.0f + chromavef); const int halfwin = std::ceil(2 * radius) + 1; // Issue 1674: @@ -297,7 +297,7 @@ void ImProcFunctions::PF_correct_RTcam(CieImage * ncie, double radius, int thres // no precalculated values without SSE => calculate const float HH = xatan2f(srbb[i][j], sraa[i][j]); #endif - float chparam = chCurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f; //get C=f(H) + float chparam = chCurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5; //get C=f(H) if (chparam < 0.f) { chparam *= 2.f; // increase action if chparam < 0 @@ -307,7 +307,7 @@ void ImProcFunctions::PF_correct_RTcam(CieImage * ncie, double radius, int thres } const float chroma = chromaChfactor * (SQR(sraa[i][j] - tmaa[i][j]) + SQR(srbb[i][j] - tmbb[i][j])); //modulate chroma function hue - chromave += chroma; + chromave += static_cast(chroma); fringe[i * width + j] = chroma; } } @@ -317,15 +317,16 @@ void ImProcFunctions::PF_correct_RTcam(CieImage * ncie, double radius, int thres if (chromave > 0.0) { // now as chromave is calculated, we postprocess fringe to reduce the number of divisions in future + const float chromavef = chromave; #ifdef _OPENMP #pragma omp parallel for simd #endif for (int j = 0; j < width * height; j++) { - fringe[j] = 1.f / (fringe[j] + chromave); + fringe[j] = 1.f / (fringe[j] + chromavef); } - const float threshfactor = 1.f / (SQR(thresh / 33.f) * chromave * 5.0f + chromave); + const float threshfactor = 1.f / (SQR(thresh / 33.f) * chromavef * 5.0f + chromavef); const int halfwin = std::ceil(2 * radius) + 1; // Issue 1674: @@ -695,7 +696,7 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { const float chroma = SQR(sraa[i][j] - tmaa[i][j]) + SQR(srbb[i][j] - tmbb[i][j]); - chrommed += chroma; + chrommed += static_cast(chroma); badpix[i * width + j] = chroma; } } @@ -703,15 +704,16 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i chrommed /= height * width; if (chrommed > 0.0) { + const float chrommedf = chrommed; // now as chrommed is calculated, we postprocess badpix to reduce the number of divisions in future - const float threshfactor = 1.f / ((thresh * chrommed) / 33.f + chrommed); + const float threshfactor = 1.f / ((thresh * chrommedf) / 33.f + chrommedf); const int halfwin = std::ceil(2 * radius) + 1; #ifdef _OPENMP #pragma omp parallel #endif { #ifdef __SSE2__ - const vfloat chrommedv = F2V(chrommed); + const vfloat chrommedv = F2V(chrommedf); const vfloat onev = F2V(1.f); #endif #ifdef _OPENMP @@ -726,7 +728,7 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i } #endif for (; j < width; j++) { - badpix[i * width + j] = 1.f / (badpix[i * width + j] + chrommed); + badpix[i * width + j] = 1.f / (badpix[i * width + j] + chrommedf); } } @@ -1040,7 +1042,7 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { const float chroma = SQR(lab->a[i][j] - tmaa[i][j]) + SQR(lab->b[i][j] - tmbb[i][j]); - chrommed += chroma; + chrommed += static_cast(chroma); badpix[i * width + j] = chroma; } } @@ -1049,13 +1051,13 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl if (chrommed > 0.0) { // now as chrommed is calculated, we postprocess badpix to reduce the number of divisions in future - + const float chrommedf = chrommed; #ifdef _OPENMP #pragma omp parallel #endif { #ifdef __SSE2__ - const vfloat chrommedv = F2V(chrommed); + const vfloat chrommedv = F2V(chrommedf); const vfloat onev = F2V(1.f); #endif #ifdef _OPENMP @@ -1070,12 +1072,12 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl } #endif for (; j < width; j++) { - badpix[i * width + j] = 1.f / (badpix[i * width + j] + chrommed); + badpix[i * width + j] = 1.f / (badpix[i * width + j] + chrommedf); } } } - const float threshfactor = 1.f / ((thresh * chrommed) / 33.f + chrommed); + const float threshfactor = 1.f / ((thresh * chrommedf) / 33.f + chrommedf); chrom *= 327.68f; chrom *= chrom; diff --git a/rtengine/ahd_demosaic_RT.cc b/rtengine/ahd_demosaic_RT.cc index 064dfd6e1..536726925 100644 --- a/rtengine/ahd_demosaic_RT.cc +++ b/rtengine/ahd_demosaic_RT.cc @@ -52,13 +52,13 @@ void RawImageSource::ahd_demosaic() int width = W, height = H; - constexpr double xyz_rgb[3][3] = { /* XYZ from RGB */ - { 0.412453, 0.357580, 0.180423 }, - { 0.212671, 0.715160, 0.072169 }, - { 0.019334, 0.119193, 0.950227 } + constexpr float xyz_rgb[3][3] = { /* XYZ from RGB */ + { 0.412453f, 0.357580f, 0.180423f }, + { 0.212671f, 0.715160f, 0.072169f }, + { 0.019334f, 0.119193f, 0.950227f } }; - constexpr float d65_white[3] = { 0.950456, 1, 1.088754 }; + constexpr float d65_white[3] = { 0.950456f, 1.f, 1.088754f }; double progress = 0.0; @@ -76,7 +76,7 @@ void RawImageSource::ahd_demosaic() for (unsigned int j = 0; j < 3; j++) { xyz_cam[i][j] = 0; for (int k = 0; k < 3; k++) { - xyz_cam[i][j] += xyz_rgb[i][k] * imatrices.rgb_cam[k][j] / d65_white[i]; + xyz_cam[i][j] += xyz_rgb[i][k] * static_cast(imatrices.rgb_cam[k][j]) / d65_white[i]; } } } diff --git a/rtengine/badpixels.cc b/rtengine/badpixels.cc index 0ae63a618..97294bdf7 100644 --- a/rtengine/badpixels.cc +++ b/rtengine/badpixels.cc @@ -477,7 +477,7 @@ int RawImageSource::interpolateBadPixelsXtrans(const PixelsMap &bitmapBads) int RawImageSource::findHotDeadPixels(PixelsMap &bpMap, const float thresh, const bool findHotPixels, const bool findDeadPixels) const { BENCHFUN - const float varthresh = (20.0 * (thresh / 100.0) + 1.0) / 24.f; + const float varthresh = (20.f * (thresh / 100.f) + 1.f) / 24.f; // counter for dead or hot pixels int counter = 0; diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index d136d6a21..b809cc30e 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -553,7 +553,7 @@ CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float float av = (avh - 1) + (float)k / 3; float aperture = sqrtf(powf(2, av)); - if (fnumber > aperture * 0.97 && fnumber < aperture / 0.97) { + if (fnumber > aperture * 0.97f && fnumber < aperture / 0.97f) { fnumber = fn_tab[avh][k]; it = mApertureScaling.find(fnumber); avh = 7; @@ -579,7 +579,7 @@ CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float scaling = it->second; } - if (scaling > 1.0) { + if (scaling > 1.f) { for (int i = 0; i < 4; i++) { lvl.levels[i] *= scaling; diff --git a/rtengine/capturesharpening.cc b/rtengine/capturesharpening.cc index 072935dc2..c6b9405b5 100644 --- a/rtengine/capturesharpening.cc +++ b/rtengine/capturesharpening.cc @@ -538,8 +538,8 @@ BENCHFUN constexpr int tileSize = 32; const int border = iterations <= 30 ? 5 : 7; const int fullTileSize = tileSize + 2 * border; - const float cornerRadius = std::min(1.15f, sigma + sigmaCornerOffset); - const float cornerDistance = sqrt(rtengine::SQR(W * 0.5f) + rtengine::SQR(H * 0.5f)); + const double cornerRadius = std::min(1.15f, sigma + sigmaCornerOffset); + const double cornerDistance = sqrt(rtengine::SQR(W * 0.5f) + rtengine::SQR(H * 0.5f)); const float distanceFactor = (cornerRadius - sigma) / cornerDistance; double progress = startVal; @@ -642,7 +642,7 @@ BENCHFUN const float distance = sqrt(rtengine::SQR(i + tileSize / 2 - H / 2) + rtengine::SQR(j + tileSize / 2 - W / 2)); const float sigmaTile = static_cast(sigma) + distanceFactor * distance; if (sigmaTile >= 0.4f) { - if (sigmaTile > 0.84) { // have to use 7x7 kernel + if (sigmaTile > 0.84f) { // have to use 7x7 kernel float lkernel7[7][7]; compute7x7kernel(static_cast(sigma) + distanceFactor * distance, lkernel7); for (int k = 0; k < iterations; ++k) { @@ -731,7 +731,7 @@ BENCHFUN { 0.019334, 0.119193, 0.950227 } }; - float contrast = conrastThreshold / 100.f; + float contrast = conrastThreshold / 100.0; const float clipVal = (ri->get_white(1) - ri->get_cblack(1)) * scale_mul[1]; diff --git a/rtengine/ciecam02.cc b/rtengine/ciecam02.cc index c7e49b2ed..208ed4366 100644 --- a/rtengine/ciecam02.cc +++ b/rtengine/ciecam02.cc @@ -28,7 +28,7 @@ #endif #undef CLIPD -#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0) +#define CLIPD(a) ((a)>0.f?((a)<1.f?(a):1.f):0.f) #define MAXR(a,b) ((a) > (b) ? (a) : (b)) namespace rtengine @@ -408,7 +408,7 @@ void Ciecam02::initcam1float (float yb, float pilotd, float f, float la, float x { n = yb / yw; - if (pilotd == 2.0) { + if (pilotd == 2.f) { d = d_factorfloat ( f, la ); } else { d = pilotd; @@ -434,7 +434,7 @@ void Ciecam02::initcam2float (float yb, float pilotd, float f, float la, float x { n = yb / yw; - if (pilotd == 2.0) { + if (pilotd == 2.f) { d = d_factorfloat ( f, la ); } else { d = pilotd; @@ -492,7 +492,7 @@ void Ciecam02::xyz2jchqms_ciecam02float ( float &J, float &C, float &h, float &Q myh = xatan2f ( cb, ca ); if ( myh < 0.0f ) { - myh += (2.f * rtengine::RT_PI); + myh += (2.f * rtengine::RT_PI_F); } a = ((2.0f * rpa) + gpa + (0.05f * bpa) - 0.305f) * nbb; @@ -620,7 +620,7 @@ void Ciecam02::xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, f myh = xatan2f ( cb, ca ); if ( myh < 0.0f ) { - myh += (2.f * rtengine::RT_PI); + myh += (2.f * rtengine::RT_PI_F); } a = ((2.0f * rpa) + gpa + (0.05f * bpa) - 0.305f) * nbb; diff --git a/rtengine/color.h b/rtengine/color.h index 211615de1..845770bbe 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -132,7 +132,7 @@ public: constexpr static double sRGBGammaCurve = 2.4; constexpr static double eps = 216.0 / 24389.0; //0.008856 - constexpr static double eps_max = MAXVALF * eps; //580.40756; + constexpr static double eps_max = MAXVALD * eps; //580.40756; constexpr static double kappa = 24389.0 / 27.0; //903.29630; constexpr static double kappaInv = 27.0 / 24389.0; constexpr static double epsilonExpInv3 = 6.0 / 29.0; @@ -144,8 +144,8 @@ public: constexpr static float D50x = 0.9642f; //0.96422; constexpr static float D50z = 0.8249f; //0.82521; - constexpr static double u0 = 4.0 * D50x / (D50x + 15 + 3 * D50z); - constexpr static double v0 = 9.0 / (D50x + 15 + 3 * D50z); + constexpr static double u0 = 4.0 * static_cast(D50x) / (static_cast(D50x) + 15 + 3 * static_cast(D50z)); + constexpr static double v0 = 9.0 / (static_cast(D50x) + 15 + 3 * static_cast(D50z)); constexpr static double epskap = 8.0; constexpr static float c1By116 = 1.0 / 116.0; @@ -206,7 +206,7 @@ public: static float rgbLuminance(float r, float g, float b, const double workingspace[3][3]) { - return r * workingspace[1][0] + g * workingspace[1][1] + b * workingspace[1][2]; + return static_cast(r) * workingspace[1][0] + static_cast(g) * workingspace[1][1] + static_cast(b) * workingspace[1][2]; } #ifdef __SSE2__ @@ -972,10 +972,10 @@ public: template static inline T interpolatePolarHue_PI (T h1, T h2, U balance) { - float d = h2 - h1; - float f; + T d = h2 - h1; + T f; f = T(balance); - double h; + T h; if (h1 > h2) { std::swap(h1, h2); @@ -986,7 +986,7 @@ public: if (d < T(0) || d < T(0.5) || d > T(1.)) { //there was an inversion here !! d > T(rtengine::RT_PI) h1 += T(1.); h = h1 + f * (h2 - h1); - h = std::fmod(h, 1.); + h = std::fmod(h, T(1.)); } else { h = h1 + f * d; } diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 02d3e0e6d..525ed339e 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -1071,10 +1071,10 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, double Xwb, Zwb; temp2mulxyz(temp, method, Xwb, Zwb); - float adj = 1.f; + double adj = 1.0; if(equal < 0.9999 || equal > 1.0001 ) { - adj = (100.f + ( 1000.f - (1000.f * (float)equal) ) / 20.f) / 100.f; + adj = (100.0 + ( 1000.0 - (1000.0 * equal) ) / 20.0) / 100.0; } @@ -1389,7 +1389,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, } for(int i = 0; i < 8; i++) { - CRIs[i] = 100 - 3.0 * DeltaEs[i]; //3.0 coef to adapt ==> same results than CRI "official" + CRIs[i] = 100 - 3.f * DeltaEs[i]; //3.0 coef to adapt ==> same results than CRI "official" } for(int i = 0; i < 8; i++) { @@ -1409,7 +1409,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, } for(int i = 0; i < N_c; i++) { - CRI[i] = 100 - 3.0 * DeltaE[i]; //3.0 coef to adapt ==> same results than CRI "official" + CRI[i] = 100 - 3.f * DeltaE[i]; //3.0 coef to adapt ==> same results than CRI "official" } for(int i = 0; i < N_c; i++) { @@ -1425,8 +1425,8 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, quadCRI /= N_c; if(settings->CRI_color != 0) { - printf("CRI_standard=%i CRI:1->8=%i %i %i %i %i %i %i %i Sigma=%2.1f\n", (int) CRI_RTs, (int) CRIs[0], (int) CRIs[1], (int) CRIs[2], (int) CRIs[3], (int) CRIs[4], (int) CRIs[5], (int) CRIs[6], (int) CRIs[7], sqrt(quadCRIs)); - printf("CRI_RT_exten=%i CRI:9->20=%i %i %i %i %i %i %i %i %i %i %i %i Sigma=%2.1f\n", (int) CRI_RT, (int) CRI[8], (int) CRI[9], (int) CRI[10], (int) CRI[11], (int) CRI[12], (int) CRI[13], (int) CRI[14], (int) CRI[15], (int) CRI[16], (int) CRI[17], (int) CRI[18], (int) CRI[19], sqrt(quadCRI)); + printf("CRI_standard=%i CRI:1->8=%i %i %i %i %i %i %i %i Sigma=%2.1f\n", (int) CRI_RTs, (int) CRIs[0], (int) CRIs[1], (int) CRIs[2], (int) CRIs[3], (int) CRIs[4], (int) CRIs[5], (int) CRIs[6], (int) CRIs[7], sqrt(static_cast(quadCRIs))); + printf("CRI_RT_exten=%i CRI:9->20=%i %i %i %i %i %i %i %i %i %i %i %i Sigma=%2.1f\n", (int) CRI_RT, (int) CRI[8], (int) CRI[9], (int) CRI[10], (int) CRI[11], (int) CRI[12], (int) CRI[13], (int) CRI[14], (int) CRI[15], (int) CRI[16], (int) CRI[17], (int) CRI[18], (int) CRI[19], static_cast(sqrt(quadCRI))); } } } diff --git a/rtengine/curves.h b/rtengine/curves.h index bc8193b76..93c7566d7 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -292,11 +292,11 @@ public: } static inline float gamma2 (float x) { - return x <= 0.00304 ? x * 12.92310 : 1.055 * expf(logf(x) / sRGBGammaCurve) - 0.055; + return x <= 0.00304f ? x * 12.92310f : 1.055f * expf(logf(x) / static_cast(sRGBGammaCurve)) - 0.055f; } static inline float igamma2 (float x) { - return x <= 0.03928 ? x / 12.92310 : expf(logf((x + 0.055) / 1.055) * sRGBGammaCurve); + return x <= 0.03928f ? x / 12.92310f : expf(logf((x + 0.055f) / 1.055f) * static_cast(sRGBGammaCurve)); } // gamma function with adjustable parameters static inline double gamma (double x, double gamma, double start, double slope, double mul, double add) @@ -327,8 +327,8 @@ public: #endif static inline float hlcurve (const float exp_scale, const float comp, const float hlrange, float level) { - if (comp > 0.0) { - float val = level + (hlrange - 65536.0); + if (comp > 0.f) { + float val = level + (hlrange - 65536.f); if(val == 0.0f) { // to avoid division by zero val = 0.000001f; @@ -337,7 +337,7 @@ public: float Y = val * exp_scale / hlrange; Y *= comp; - if(Y <= -1.0) { // to avoid log(<=0) + if(Y <= -1.f) { // to avoid log(<=0) Y = -.999999f; } diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc index 11fe306b8..89256bba4 100644 --- a/rtengine/dcp.cc +++ b/rtengine/dcp.cc @@ -1064,9 +1064,11 @@ void DCPProfile::apply( for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { + double temp = 0.0; for (int k = 0; k < 3; ++k) { - mat[i][j] += work_matrix[i][k] * xyz_cam[k][j]; + temp += work_matrix[i][k] * xyz_cam[k][j]; } + mat[i][j] = temp; } } @@ -1092,9 +1094,11 @@ void DCPProfile::apply( for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { + double temp = 0.0; for (int k = 0; k < 3; ++k) { - pro_photo[i][j] += prophoto_xyz[i][k] * xyz_cam[k][j]; + temp += prophoto_xyz[i][k] * xyz_cam[k][j]; } + pro_photo[i][j] = temp; } } @@ -1102,9 +1106,11 @@ void DCPProfile::apply( for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { + double temp = 0.0; for (int k = 0; k < 3; ++k) { - work[i][j] += work_matrix[i][k] * xyz_prophoto[k][j]; + temp += work_matrix[i][k] * xyz_prophoto[k][j]; } + work[i][j] = temp; } } @@ -1173,27 +1179,35 @@ void DCPProfile::setStep2ApplyState(const Glib::ustring& working_space, bool use mWork = ICCStore::getInstance()->workingSpaceMatrix (working_space); memset(as_out.data->pro_photo, 0, sizeof(as_out.data->pro_photo)); - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + double temp = 0.0; for (int k = 0; k < 3; k++) { - as_out.data->pro_photo[i][j] += prophoto_xyz[i][k] * mWork[k][j]; + temp += prophoto_xyz[i][k] * mWork[k][j]; } + as_out.data->pro_photo[i][j] = temp; + } + } mWork = ICCStore::getInstance()->workingSpaceInverseMatrix (working_space); memset(as_out.data->work, 0, sizeof(as_out.data->work)); - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + double temp = 0.0; for (int k = 0; k < 3; k++) { - as_out.data->work[i][j] += mWork[i][k] * xyz_prophoto[k][j]; + temp += mWork[i][k] * xyz_prophoto[k][j]; } + as_out.data->work[i][j] = temp; + } + } } } void DCPProfile::step2ApplyTile(float* rc, float* gc, float* bc, int width, int height, int tile_width, const DCPProfileApplyState& as_in) const { -#define FCLIP(a) ((a)>0.0?((a)<65535.5?(a):65535.5):0.0) +#define FCLIP(a) ((a)>0.f?((a)<65535.5f?(a):65535.5f):0.f) #define CLIP01(a) ((a)>0?((a)<1?(a):1):0) float exp_scale = as_in.data->bl_scale; diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 538858a9a..a31415968 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -1069,7 +1069,7 @@ void RawImageSource::dcb_hid(float (*image)[3], int x0, int y0) for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col; col < colMax; col += 2, indx += 2) { assert(indx - u - 1 >= 0 && indx + u + 1 < u * u); - image[indx][1] = 0.25*(image[indx-1][1]+image[indx+1][1]+image[indx-u][1]+image[indx+u][1]); + image[indx][1] = 0.25f * (image[indx-1][1]+image[indx+1][1]+image[indx-u][1]+image[indx+u][1]); } } diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc index 1fb1d2e1b..6961a4b54 100644 --- a/rtengine/dfmanager.cc +++ b/rtengine/dfmanager.cc @@ -476,7 +476,7 @@ dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int iso } } - return bestD != INFINITY ? &(bestMatch->second) : nullptr ; + return bestD != RT_INFINITY ? &(bestMatch->second) : nullptr ; } } diff --git a/rtengine/diagonalcurves.cc b/rtengine/diagonalcurves.cc index bb20b7cc1..f8b22ed46 100644 --- a/rtengine/diagonalcurves.cc +++ b/rtengine/diagonalcurves.cc @@ -65,23 +65,23 @@ DiagonalCurve::DiagonalCurve (const std::vector& p, int poly_pn) } } - if (x[0] != 0.0f || x[N - 1] != 1.0f) + if (x[0] != 0.0 || x[N - 1] != 1.0) // Special (and very rare) case where all points are on the identity line but // not reaching the limits { identity = false; } - if(x[0] == 0.f && x[1] == 0.f) + if(x[0] == 0.0 && x[1] == 0.0) // Avoid crash when first two points are at x = 0 (git Issue 2888) { - x[1] = 0.01f; + x[1] = 0.01; } - if(x[0] == 1.f && x[1] == 1.f) + if(x[0] == 1.0 && x[1] == 1.0) // Avoid crash when first two points are at x = 1 (100 in gui) (git Issue 2923) { - x[0] = 0.99f; + x[0] = 0.99; } if (!identity) { @@ -97,7 +97,7 @@ DiagonalCurve::DiagonalCurve (const std::vector& p, int poly_pn) } } } else if (kind == DCT_Parametric) { - if ((p.size() == 8 || p.size() == 9) && (p.at(4) != 0.0f || p.at(5) != 0.0f || p.at(6) != 0.0f || p.at(7) != 0.0f)) { + if ((p.size() == 8 || p.size() == 9) && (p.at(4) != 0.0 || p.at(5) != 0.0 || p.at(6) != 0.0 || p.at(7) != 0.0)) { identity = false; x = new double[9]; diff --git a/rtengine/dirpyr_equalizer.cc b/rtengine/dirpyr_equalizer.cc index 1f62badcb..0624f4443 100644 --- a/rtengine/dirpyr_equalizer.cc +++ b/rtengine/dirpyr_equalizer.cc @@ -228,11 +228,11 @@ void fillLut(LUTf &irangefn, int level, double dirpyrThreshold, float mult, floa } const float offs = skinprot == 0.f ? 0.f : -1.f; - constexpr float noise = 2000.f; - const float noisehi = 1.33f * noise * dirpyrThreshold / expf(level * log(3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf(level * log(3.0)); + constexpr double noise = 2000.0; + const float noisehi = 1.33 * noise * dirpyrThreshold / exp(level * log(3.0)), noiselo = 0.66 * noise * dirpyrThreshold / exp(level * log(3.0)); for (int i = 0; i < 0x20000; i++) { - if (abs(i - 0x10000) > noisehi || multbis < 1.0) { + if (abs(i - 0x10000) > noisehi || multbis < 1.f) { irangefn[i] = multbis + offs; } else { if (abs(i - 0x10000) < noiselo) { @@ -262,7 +262,7 @@ void idirpyr_eq_channel(const float * const * data_coarse, const float * const * buffer[i][j] += irangefn[hipass + 0x10000] * hipass; } } - } else if (skinprot > 0.f) { + } else if (skinprot > 0.0) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -314,7 +314,7 @@ void idirpyr_eq_channelcam(const float * const * data_coarse, const float * cons buffer[i][j] += irangefn[hipass + 0x10000] * hipass; } } - } else if (skinprot > 0.f) { + } else if (skinprot > 0.0) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif diff --git a/rtengine/dual_demosaic_RT.cc b/rtengine/dual_demosaic_RT.cc index 93508808c..253468a76 100644 --- a/rtengine/dual_demosaic_RT.cc +++ b/rtengine/dual_demosaic_RT.cc @@ -45,7 +45,7 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const procparams::RAWParams { BENCHFUN - if (contrast == 0.f && !autoContrast) { + if (contrast == 0.0 && !autoContrast) { // contrast == 0.0 means only first demosaicer will be used if(isBayer) { if (raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) ) { @@ -103,7 +103,7 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const procparams::RAWParams } // calculate contrast based blend factors to use vng4 in regions with low contrast JaggedArray blend(winw, winh); - float contrastf = contrast / 100.f; + float contrastf = contrast / 100.0; buildBlendMask(L, blend, winw, winh, contrastf, autoContrast); contrast = contrastf * 100.f; diff --git a/rtengine/ffmanager.cc b/rtengine/ffmanager.cc index ce60277e1..c55bc5108 100644 --- a/rtengine/ffmanager.cc +++ b/rtengine/ffmanager.cc @@ -428,7 +428,7 @@ ffInfo* FFManager::find( const std::string &mak, const std::string &mod, const s } } - return bestD != INFINITY ? &(bestMatch->second) : nullptr ; + return bestD != RT_INFINITY ? &(bestMatch->second) : nullptr ; } } diff --git a/rtengine/green_equil_RT.cc b/rtengine/green_equil_RT.cc index fc4f18548..a66bca160 100644 --- a/rtengine/green_equil_RT.cc +++ b/rtengine/green_equil_RT.cc @@ -47,7 +47,7 @@ void RawImageSource::green_equilibrate_global(array2D &rawData) for (int i = border; i < H - border; i++) { double avgg = 0.; for (int j = border + ((FC(i, border) & 1) ^ 1); j < W - border; j += 2) { - avgg += rawData[i][j]; + avgg += static_cast(rawData[i][j]); } int ng = (W - 2 * border + (FC(i, border) & 1)) / 2; @@ -71,15 +71,15 @@ void RawImageSource::green_equilibrate_global(array2D &rawData) avgg2 = 1.0; } - double corrg1 = (avgg1 / ng1 + avgg2 / ng2) / 2.0 / (avgg1 / ng1); - double corrg2 = (avgg1 / ng1 + avgg2 / ng2) / 2.0 / (avgg2 / ng2); + const float corrg1 = (avgg1 / ng1 + avgg2 / ng2) / 2.0 / (avgg1 / ng1); + const float corrg2 = (avgg1 / ng1 + avgg2 / ng2) / 2.0 / (avgg2 / ng2); #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif for (int i = border; i < H - border; i++) { - double corrg = (i & 1) ? corrg2 : corrg1; + const float corrg = (i & 1) ? corrg2 : corrg1; for (int j = border + ((FC(i, border) & 1) ^ 1); j < W - border; j += 2) { rawData[i][j] *= corrg; @@ -220,7 +220,7 @@ void RawImageSource::green_equilibrate(const GreenEqulibrateThreshold &thresh, a float tf = thresh(rr, cc); - if (c1 + c2 < 6 * tf * fabs(d1 - d2)) { + if (c1 + c2 < 6 * tf * std::fabs(d1 - d2)) { //pixel interpolation float gin = cfa[rr][cc >> 1]; diff --git a/rtengine/histmatching.cc b/rtengine/histmatching.cc index f5d16866e..0053cb0d4 100644 --- a/rtengine/histmatching.cc +++ b/rtengine/histmatching.cc @@ -179,7 +179,7 @@ void mappingToCurve(const std::vector &mapping, std::vector &curve) }; idx = -1; for (ssize_t i = curve.size()-1; i > 0; i -= 2) { - if (curve[i] <= 0.f) { + if (curve[i] <= 0.0) { idx = i+1; break; } @@ -328,7 +328,7 @@ void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, st int tw = target->getWidth(), th = target->getHeight(); float thumb_ratio = float(std::max(sw, sh)) / float(std::min(sw, sh)); float target_ratio = float(std::max(tw, th)) / float(std::min(tw, th)); - if (std::abs(thumb_ratio - target_ratio) > 0.01) { + if (std::abs(thumb_ratio - target_ratio) > 0.01f) { int cx = 0, cy = 0; if (thumb_ratio > target_ratio) { // crop the height @@ -342,7 +342,7 @@ void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, st tw -= cw; } if (settings->verbose) { - std::cout << "histogram matching: cropping target to get an aspect ratio of " << round(thumb_ratio * 100)/100.0 << ":1, new size is " << tw << "x" << th << std::endl; + std::cout << "histogram matching: cropping target to get an aspect ratio of " << round(thumb_ratio * 100)/100.f << ":1, new size is " << tw << "x" << th << std::endl; } if (cx || cy) { diff --git a/rtengine/image16.cc b/rtengine/image16.cc index a98d64d51..7013af4b7 100644 --- a/rtengine/image16.cc +++ b/rtengine/image16.cc @@ -147,10 +147,10 @@ void Image16::getStdImage(const ColorTemp &ctemp, int tran, Imagefloat* image, P gm = dgm; bm = dbm; - rm = 1.0 / rm; - gm = 1.0 / gm; - bm = 1.0 / bm; - float mul_lum = 0.299 * rm + 0.587 * gm + 0.114 * bm; + rm = 1.f / rm; + gm = 1.f / gm; + bm = 1.f / bm; + float mul_lum = 0.299f * rm + 0.587f * gm + 0.114f * bm; rm /= mul_lum; gm /= mul_lum; bm /= mul_lum; diff --git a/rtengine/image8.cc b/rtengine/image8.cc index 66ad8b60f..f2098962c 100644 --- a/rtengine/image8.cc +++ b/rtengine/image8.cc @@ -111,10 +111,10 @@ void Image8::getStdImage (const ColorTemp &ctemp, int tran, Imagefloat* image, P gm = dgm; bm = dbm; - rm = 1.0 / rm; - gm = 1.0 / gm; - bm = 1.0 / bm; - float mul_lum = 0.299 * rm + 0.587 * gm + 0.114 * bm; + rm = 1.f / rm; + gm = 1.f / gm; + bm = 1.f / bm; + float mul_lum = 0.299f * rm + 0.587f * gm + 0.114f * bm; rm /= mul_lum; gm /= mul_lum; bm /= mul_lum; diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc index 1da91a4b4..f905134a0 100644 --- a/rtengine/imagefloat.cc +++ b/rtengine/imagefloat.cc @@ -178,10 +178,10 @@ void Imagefloat::getStdImage (const ColorTemp &ctemp, int tran, Imagefloat* imag gm = dgm; bm = dbm; - rm = 1.0 / rm; - gm = 1.0 / gm; - bm = 1.0 / bm; - float mul_lum = 0.299 * rm + 0.587 * gm + 0.114 * bm; + rm = 1.f / rm; + gm = 1.f / gm; + bm = 1.f / bm; + float mul_lum = 0.299f * rm + 0.587f * gm + 0.114f * bm; rm /= mul_lum; gm /= mul_lum; bm /= mul_lum; @@ -368,7 +368,7 @@ Imagefloat::to16() const void Imagefloat::normalizeFloat(float srcMinVal, float srcMaxVal) { - float scale = MAXVALD / (srcMaxVal - srcMinVal); + float scale = MAXVALF / (srcMaxVal - srcMinVal); int w = width; int h = height; diff --git a/rtengine/ipdehaze.cc b/rtengine/ipdehaze.cc index 28a0f2d57..2dc0287a1 100644 --- a/rtengine/ipdehaze.cc +++ b/rtengine/ipdehaze.cc @@ -240,9 +240,9 @@ float estimate_ambient_light(const array2D &R, const array2D &G, c float g = G[y][x]; float b = B[y][x]; if (r + g + b >= bright_lim) { - rr += r; - gg += g; - bb += b; + rr += static_cast(r); + gg += static_cast(g); + bb += static_cast(b); ++n; } } diff --git a/rtengine/iplabregions.cc b/rtengine/iplabregions.cc index 6526419f5..786d42e56 100644 --- a/rtengine/iplabregions.cc +++ b/rtengine/iplabregions.cc @@ -139,7 +139,7 @@ BENCHFUN auto &hm = hmask[i]; auto &cm = cmask[i]; auto &lm = lmask[i]; - float blend = LIM01((hm ? hm->getVal(h) : 1.f) * (cm ? cm->getVal(c) : 1.f) * (lm ? lm->getVal(l) : 1.f)); + float blend = LIM01((hm ? hm->getVal(h) : 1.0) * (cm ? cm->getVal(c) : 1.0) * (lm ? lm->getVal(l) : 1.0)); Lmask[i][y][x] = abmask[i][y][x] = blend; } } @@ -147,8 +147,8 @@ BENCHFUN } for (int i = begin_idx; i < end_idx; ++i) { - float blur = params->colorToning.labregions[i].maskBlur; - blur = blur < 0.f ? -1.f/blur : 1.f + blur; + double blur = params->colorToning.labregions[i].maskBlur; + blur = blur < 0.0 ? -1.0 / blur : 1.0 + blur; int r1 = max(int(4 / scale * blur + 0.5), 1); int r2 = max(int(25 / scale * blur + 0.5), 1); rtengine::guidedFilter(guide, abmask[i], abmask[i], r1, 0.001, multiThread); @@ -188,7 +188,7 @@ BENCHFUN auto &r = params->colorToning.labregions[i]; abca[i] = abcoord(r.a); abcb[i] = abcoord(r.b); - rs[i] = 1.f + r.saturation / (SGN(r.saturation) > 0 ? 50.f : 100.f); + rs[i] = 1.0 + r.saturation / (SGN(r.saturation) > 0 ? 50.0 : 100.0); slope[i] = r.slope; offset[i] = r.offset; power[i] = r.power; diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc index 84f33482f..6768eca93 100644 --- a/rtengine/ipretinex.cc +++ b/rtengine/ipretinex.cc @@ -110,8 +110,8 @@ void mean_stddv2( float **dst, float &mean, float &stddv, int W_L, int H_L, floa for (int i = 0; i < H_L; i++ ) for (int j = 0; j < W_L; j++) { - sum += dst[i][j]; - vsquared += (dst[i][j] * dst[i][j]); + sum += static_cast(dst[i][j]); + vsquared += rtengine::SQR(dst[i][j]); lmax = dst[i][j] > lmax ? dst[i][j] : lmax; lmin = dst[i][j] < lmin ? dst[i][j] : lmin; @@ -128,8 +128,8 @@ void mean_stddv2( float **dst, float &mean, float &stddv, int W_L, int H_L, floa } mean = sum / (double) (W_L * H_L); vsquared /= (double) W_L * H_L; - stddv = ( vsquared - (mean * mean) ); - stddv = (float)sqrt(stddv); + stddv = vsquared - rtengine::SQR(mean); + stddv = std::sqrt(stddv); } } @@ -678,9 +678,9 @@ BENCHFUN float valparam; if(useHsl || useHslLin) { - valparam = shcurve->getVal(HH) - 0.5f; + valparam = shcurve->getVal(HH) - 0.5; } else { - valparam = shcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f; + valparam = shcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5; } str *= (1.f + 2.f * valparam); diff --git a/rtengine/ipshadowshighlights.cc b/rtengine/ipshadowshighlights.cc index 5c5b6b324..5d5be57e9 100644 --- a/rtengine/ipshadowshighlights.cc +++ b/rtengine/ipshadowshighlights.cc @@ -46,7 +46,7 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) array2D mask(width, height); array2D L(width, height); - const float radius = float(params->sh.radius) * 10 / scale; + const float radius = params->sh.radius * 10 / scale; LUTf f(lab_mode ? 32768 : 65536); TMatrix ws = ICCStore::getInstance()->workingSpaceMatrix(params->icm.workingProfile); diff --git a/rtengine/ipvibrance.cc b/rtengine/ipvibrance.cc index 14e5f3c44..8636ecb95 100644 --- a/rtengine/ipvibrance.cc +++ b/rtengine/ipvibrance.cc @@ -48,7 +48,7 @@ void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve) // change to [0,1] range // apply custom/parametric/NURBS curve, if any // and store result in a temporary array - outCurve[i] = 65535.f * diagCurve->getVal ( double (i) / 65535.0 ); + outCurve[i] = 65535.0 * diagCurve->getVal(i / 65535.0); } } else { outCurve.makeIdentity(); @@ -606,7 +606,7 @@ void ImProcFunctions::vibrance (LabImage* lab) bool inGamut; const float fyy = Color::c1By116 * Lprov + Color::c16By116; - const float yy_ = (Lprov > Color::epskap) ? fyy * fyy*fyy : Lprov / Color::kappaf; + const float yy_ = (Lprov > static_cast(Color::epskap)) ? fyy * fyy*fyy : Lprov / Color::kappaf; float ChprovOld = std::numeric_limits::min(); do { inGamut = true; diff --git a/rtengine/lmmse_demosaic.cc b/rtengine/lmmse_demosaic.cc index f4af1b801..5c4ddffed 100644 --- a/rtengine/lmmse_demosaic.cc +++ b/rtengine/lmmse_demosaic.cc @@ -334,7 +334,7 @@ void RawImageSource::lmmse_interpolate_omp(int winw, int winh, const array2DlocalContrast.amount = true; diff --git a/rtengine/tmo_fattal02.cc b/rtengine/tmo_fattal02.cc index feba5c95f..cee57c851 100644 --- a/rtengine/tmo_fattal02.cc +++ b/rtengine/tmo_fattal02.cc @@ -308,7 +308,7 @@ float calculateGradients (Array2Df* H, Array2Df* G, int k, bool multithread) // however, the impact is not visible so we ignore this here (*G) (x, y) = sqrt (gx * gx + gy * gy) / divider; - avgGrad += (*G) (x, y); + avgGrad += static_cast((*G) (x, y)); } } @@ -381,7 +381,7 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[], #endif for ( int y = 0; y < height; y++ ) { for ( int x = 0; x < width; x++ ) { - float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4 : (*gradients[k]) (x, y); + float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4f : (*gradients[k]) (x, y); float a = alfa * avgGrad[k]; float value = pow ((grad + noise) / a, beta - 1.0f); @@ -603,8 +603,8 @@ void tmo_fattal02 (size_t width, // sets index+1 based on the boundary assumption H(N+1)=H(N-1) unsigned int xp1 = (x + 1 >= width ? width - 2 : x + 1); // forward differences in H, so need to use between-points approx of FI - (*Gx) (x, y) = ((*H) (xp1, y) - (*H) (x, y)) * 0.5 * ((*FI) (xp1, y) + (*FI) (x, y)); - (*Gy) (x, y) = ((*H) (x, yp1) - (*H) (x, y)) * 0.5 * ((*FI) (x, yp1) + (*FI) (x, y)); + (*Gx) (x, y) = ((*H) (xp1, y) - (*H) (x, y)) * 0.5f * ((*FI) (xp1, y) + (*FI) (x, y)); + (*Gy) (x, y) = ((*H) (x, yp1) - (*H) (x, y)) * 0.5f * ((*FI) (x, yp1) + (*FI) (x, y)); } } @@ -747,7 +747,7 @@ void transform_ev2normal (Array2Df *A, Array2Df *T, bool multithread) } for (int y = 1 ; y < height - 1 ; y++ ) { - (*A) (0, y) *= 0.5; + (*A) (0, y) *= 0.5f; (*A) (width - 1, y) *= 0.5f; } @@ -912,7 +912,7 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/* for (int y = 0 ; y < height ; y++ ) { for (int x = 0 ; x < width ; x++ ) { - (*F_tr) (x, y) = (*F_tr) (x, y) / (l1[y] + l2[x]); + (*F_tr) (x, y) = static_cast((*F_tr) (x, y)) / (l1[y] + l2[x]); } } diff --git a/rtengine/xtrans_demosaic.cc b/rtengine/xtrans_demosaic.cc index cb1315ed0..b01b0ac1c 100644 --- a/rtengine/xtrans_demosaic.cc +++ b/rtengine/xtrans_demosaic.cc @@ -31,7 +31,7 @@ namespace rtengine { -const double xyz_rgb[3][3] = { // XYZ from RGB +const float xyz_rgb[3][3] = { // XYZ from RGB { 0.412453, 0.357580, 0.180423 }, { 0.212671, 0.715160, 0.072169 }, { 0.019334, 0.119193, 0.950227 } diff --git a/rtgui/blackwhite.cc b/rtgui/blackwhite.cc index 596d99607..ea493d6e1 100644 --- a/rtgui/blackwhite.cc +++ b/rtgui/blackwhite.cc @@ -70,7 +70,7 @@ BlackWhite::BlackWhite (): FoldableToolPanel(this, "blackwhite", M("TP_BWMIX_LAB // -0.1 rad < Hue < 1.6 rad for (int i = 0; i < 7; i++) { - float x = float(i) * (1.0f / 6.0); + float x = float(i) * (1.0f / 6.f); Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); bottomMilestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) ); } @@ -1185,10 +1185,10 @@ void BlackWhite::updateRGBLabel () RGBLabels->set_text( Glib::ustring::compose(M("TP_BWMIX_RGBLABEL"), - Glib::ustring::format(std::fixed, std::setprecision(1), r * 100.), - Glib::ustring::format(std::fixed, std::setprecision(1), g * 100.), - Glib::ustring::format(std::fixed, std::setprecision(1), b * 100.), - Glib::ustring::format(std::fixed, std::setprecision(0), ceil(kcorrec * 100./*(r+g+b)*100.)*/))) + Glib::ustring::format(std::fixed, std::setprecision(1), r * 100.f), + Glib::ustring::format(std::fixed, std::setprecision(1), g * 100.f), + Glib::ustring::format(std::fixed, std::setprecision(1), b * 100.f), + Glib::ustring::format(std::fixed, std::setprecision(0), ceil(kcorrec * 100.f/*(r+g+b)*100.)*/))) ); // We have to update the RGB sliders too if preset values has been chosen diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 62f6eee2c..9468770fc 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -523,7 +523,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" float R, G, B; for (int i = 0; i < 7; i++) { - float x = float (i) * (1.0f / 6.0); + float x = float (i) * (1.0f / 6.f); Color::hsv2rgb01 (x, 0.5f, 0.5f, R, G, B); shape3Milestones.push_back ( GradientMilestone (double (x), double (R), double (G), double (B)) ); } diff --git a/rtgui/colortoning.cc b/rtgui/colortoning.cc index 59768a6ce..ddf917149 100644 --- a/rtgui/colortoning.cc +++ b/rtgui/colortoning.cc @@ -74,7 +74,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR // whole hue range for (int i = 0; i < 7; i++) { float R, G, B; - float x = float(i) * (1.0f / 6.0); + float x = float(i) * (1.0f / 6.f); Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); milestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) ); } @@ -1203,11 +1203,11 @@ void ColorToning::colorForValue (double valX, double valY, enum ColorCaller::Ele // the strength applied to the current hue double strength, hue; hlColSat->getValue(strength, hue); - Color::hsv2rgb01(hue / 360.f, 1.f, 1.f, R, G, B); + Color::hsv2rgb01(hue / 360.0, 1.f, 1.f, R, G, B); const double gray = 0.46; - R = (gray * (1.0 - valX)) + R * valX; - G = (gray * (1.0 - valX)) + G * valX; - B = (gray * (1.0 - valX)) + B * valX; + R = (gray * (1.0 - valX)) + static_cast(R) * valX; + G = (gray * (1.0 - valX)) + static_cast(G) * valX; + B = (gray * (1.0 - valX)) + static_cast(B) * valX; } } else if (callerId == 3) { // Slider 2 background if (valY <= 0.5) @@ -1218,17 +1218,17 @@ void ColorToning::colorForValue (double valX, double valY, enum ColorCaller::Ele // the strength applied to the current hue double strength, hue; shadowsColSat->getValue(strength, hue); - Color::hsv2rgb01(hue / 360.f, 1.f, 1.f, R, G, B); + Color::hsv2rgb01(hue / 360.0, 1.f, 1.f, R, G, B); const double gray = 0.46; - R = (gray * (1.0 - valX)) + R * valX; - G = (gray * (1.0 - valX)) + G * valX; - B = (gray * (1.0 - valX)) + B * valX; + R = (gray * (1.0 - valX)) + static_cast(R) * valX; + G = (gray * (1.0 - valX)) + static_cast(G) * valX; + B = (gray * (1.0 - valX)) + static_cast(B) * valX; } } else if (callerId == 4) { // color curve vertical and horizontal crosshair Color::hsv2rgb01(float(valY), 1.0f, 0.5f, R, G, B); } else if (callerId == ID_LABREGION_HUE) { // TODO - float x = valX - 1.f/6.f; + float x = valX - 1.0/6.0; if (x < 0.f) { x += 1.f; } diff --git a/rtgui/coordinateadjuster.cc b/rtgui/coordinateadjuster.cc index ebf36b7e7..57190cf63 100644 --- a/rtgui/coordinateadjuster.cc +++ b/rtgui/coordinateadjuster.cc @@ -69,14 +69,14 @@ void CoordinateAdjuster::AxisAdjuster::setValue(double newValue) { float range = rangeUpperBound - rangeLowerBound; spinButtonConn.block(true); - spinButton->set_value(newValue * range + rangeLowerBound); + spinButton->set_value(static_cast(newValue) * range + rangeLowerBound); spinButtonConn.block(false); } void CoordinateAdjuster::AxisAdjuster::valueChanged() { float range = rangeUpperBound - rangeLowerBound; - parent->updatePos(idx, (spinButton->get_value() - rangeLowerBound) / range); + parent->updatePos(idx, (static_cast(spinButton->get_value()) - rangeLowerBound) / range); } CoordinateAdjuster::CoordinateAdjuster(CoordinateProvider *provider, CurveEditorSubGroup *parent, const std::vector &axis) @@ -171,7 +171,7 @@ void CoordinateAdjuster::startNumericalAdjustment(const std::vector Gtk::SpinButton *currSpinButton = axisAdjusters.at(i)->spinButton; currSpinButton->set_sensitive(true); float range = axisAdjusters.at(i)->rangeUpperBound - axisAdjusters.at(i)->rangeLowerBound; - currSpinButton->set_range(newBoundaries.at(i).minVal * range + axisAdjusters.at(i)->rangeLowerBound, newBoundaries.at(i).maxVal * range + axisAdjusters.at(i)->rangeLowerBound); + currSpinButton->set_range(newBoundaries.at(i).minVal * static_cast(range) + static_cast(axisAdjusters.at(i)->rangeLowerBound), newBoundaries.at(i).maxVal * static_cast(range) + static_cast(axisAdjusters.at(i)->rangeLowerBound)); } axisAdjusters.at(0)->spinButton->grab_focus(); @@ -200,7 +200,7 @@ void CoordinateAdjuster::switchAdjustedPoint(std::vector &pos, const std // ...narrow the range to the new interval float range = axisAdjusters.at(i)->rangeUpperBound - axisAdjusters.at(i)->rangeLowerBound; - currAxis->spinButton->set_range(newBoundaries.at(i).minVal * range + axisAdjusters.at(i)->rangeLowerBound, newBoundaries.at(i).maxVal * range + axisAdjusters.at(i)->rangeLowerBound); + currAxis->spinButton->set_range(newBoundaries.at(i).minVal * static_cast(range) + static_cast(axisAdjusters.at(i)->rangeLowerBound), newBoundaries.at(i).maxVal * static_cast(range) + static_cast(axisAdjusters.at(i)->rangeLowerBound)); // enable events currAxis->spinButtonConn.block(false); diff --git a/rtgui/crop.cc b/rtgui/crop.cc index 3bdcf14cf..d9d496523 100644 --- a/rtgui/crop.cc +++ b/rtgui/crop.cc @@ -1006,7 +1006,7 @@ void Crop::cropWidth1Resized (int &X, int &Y, int &W, int &H, float custom_ratio } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0.f ? custom_ratio : static_cast(getRatio()); H = (int)round(W / r); int Hmax = min(ny + nh, maxh - ny); @@ -1053,7 +1053,7 @@ void Crop::cropWidth2Resized (int &X, int &Y, int &W, int &H, float custom_ratio } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); H = (int)round(W / r); int Hmax = min(ny + nh, maxh - ny); @@ -1101,7 +1101,7 @@ void Crop::cropHeight1Resized (int &X, int &Y, int &W, int &H, float custom_rati } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); W = (int)round(H * r); int Wmax = min(nx + nw, maxw - nx); @@ -1148,7 +1148,7 @@ void Crop::cropHeight2Resized (int &X, int &Y, int &W, int &H, float custom_rati } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); W = (int)round(H * r); int Wmax = min(nx + nw, maxw - nx); @@ -1205,7 +1205,7 @@ void Crop::cropTopLeftResized (int &X, int &Y, int &W, int &H, float custom_rati } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); W = (int)round(H * r); if (W > oldXR) { @@ -1252,7 +1252,7 @@ void Crop::cropTopRightResized (int &X, int &Y, int &W, int &H, float custom_rat } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); W = (int)round(H * r); if (W > maxw - nx) { @@ -1298,7 +1298,7 @@ void Crop::cropBottomLeftResized (int &X, int &Y, int &W, int &H, float custom_r } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); W = (int)round(H * r); if (W > oldXR) { @@ -1342,7 +1342,7 @@ void Crop::cropBottomRightResized (int &X, int &Y, int &W, int &H, float custom_ } if (fixr->get_active() || custom_ratio > 0) { - double r = custom_ratio > 0 ? custom_ratio : getRatio(); + double r = custom_ratio > 0 ? custom_ratio : static_cast(getRatio()); W = (int)round(H * r); if (W > maxw - nx) { diff --git a/rtgui/editwidgets.cc b/rtgui/editwidgets.cc index f7c748744..e67b664db 100644 --- a/rtgui/editwidgets.cc +++ b/rtgui/editwidgets.cc @@ -126,13 +126,13 @@ void Circle::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuffer if (filled && state != INSENSITIVE) { cr->arc(center_.x + 0.5, center_.y + 0.5, radius_, 0., 2.*rtengine::RT_PI); - if (innerLineWidth > 0.) { + if (innerLineWidth > 0.f) { cr->fill_preserve(); cr->stroke(); } else { cr->fill(); } - } else if (innerLineWidth > 0.) { + } else if (innerLineWidth > 0.f) { cr->arc(center_.x + 0.5, center_.y + 0.5, radius_, 0., 2.*rtengine::RT_PI); if (state == INSENSITIVE) { @@ -176,7 +176,7 @@ void Circle::drawToMOChannel (Cairo::RefPtr &cr, unsigned short cr->arc(center_.x + 0.5, center_.y + 0.5, radius_, 0, 2.*rtengine::RT_PI); if (filled) { - if (innerLineWidth > 0.) { + if (innerLineWidth > 0.f) { cr->fill_preserve(); cr->stroke(); } else { @@ -224,7 +224,7 @@ void Line::drawOuterGeometry(Cairo::RefPtr &cr, ObjectMOBuffer * void Line::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) { - if ((flags & F_VISIBLE) && innerLineWidth > 0.) { + if ((flags & F_VISIBLE) && innerLineWidth > 0.f) { if (state != INSENSITIVE) { RGBColor color; @@ -383,13 +383,13 @@ void Polyline::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuff } } - if (innerLineWidth > 0.) { + if (innerLineWidth > 0.f) { cr->fill_preserve(); cr->stroke(); } else { cr->fill(); } - } else if (innerLineWidth > 0.) { + } else if (innerLineWidth > 0.f) { rtengine::Coord currPos; for (unsigned int i = 0; i < points.size(); ++i) { @@ -459,7 +459,7 @@ void Polyline::drawToMOChannel (Cairo::RefPtr &cr, unsigned shor } if (filled) { - if (innerLineWidth > 0.) { + if (innerLineWidth > 0.f) { cr->fill_preserve(); cr->stroke(); } else { @@ -576,13 +576,13 @@ void Rectangle::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuf if (filled && state != INSENSITIVE) { cr->rectangle(tl.x + 0.5, tl.y + 0.5, br.x - tl.x, br.y - tl.y); - if (innerLineWidth > 0.) { + if (innerLineWidth > 0.f) { cr->fill_preserve(); cr->stroke(); } else { cr->fill(); } - } else if (innerLineWidth > 0.) { + } else if (innerLineWidth > 0.f) { cr->rectangle(tl.x + 0.5, tl.y + 0.5, br.x - tl.x, br.y - tl.y); if (state == INSENSITIVE) { @@ -634,7 +634,7 @@ void Rectangle::drawToMOChannel(Cairo::RefPtr &cr, unsigned shor cr->rectangle(tl.x + 0.5, tl.y + 0.5, br.x - tl.x, br.y - tl.y); if (filled) { - if (innerLineWidth > 0.) { + if (innerLineWidth > 0.f) { cr->fill_preserve(); cr->stroke(); } else { From 806c086fbcc92c6a11bb714d1bce37b13d41c34b Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 21 Jan 2020 14:01:27 +0100 Subject: [PATCH 040/264] more double promote fixes, still not complete --- rtengine/FTblockDN.cc | 64 ++++++------- rtengine/color.h | 1 + rtengine/hilite_recon.cc | 4 +- rtengine/improcfun.cc | 199 +++++++++++++++++++-------------------- 4 files changed, 134 insertions(+), 134 deletions(-) diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 121c8189d..4e5dae42b 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -548,7 +548,7 @@ BENCHFUN const bool denoiseMethodRgb = (dnparams.dmethod == "RGB"); // init luma noisevarL const float noiseluma = static_cast(dnparams.luma); - const float noisevarL = (useNoiseLCurve && (denoiseMethodRgb || !isRAW)) ? static_cast(SQR(((noiseluma + 1.0) / 125.0) * (10. + (noiseluma + 1.0) / 25.0))) : static_cast(SQR((noiseluma / 125.0) * (1.0 + noiseluma / 25.0))); + const float noisevarL = (useNoiseLCurve && (denoiseMethodRgb || !isRAW)) ? SQR(((noiseluma + 1.f) / 125.f) * (10.f + (noiseluma + 1.f) / 25.f)) : SQR((noiseluma / 125.f) * (1.f + noiseluma / 25.f)); const bool denoiseLuminance = (noisevarL > 0.00001f); //printf("NL=%f \n",noisevarL); @@ -635,20 +635,20 @@ BENCHFUN if (dnparams.luma != 0 || dnparams.chroma != 0 || dnparams.methodmed == "Lab" || dnparams.methodmed == "Lonly") { // gamma transform for input data - float gam = dnparams.gamma; - float gamthresh = 0.001f; + double gam = dnparams.gamma; + constexpr double gamthresh = 0.001; if (!isRAW) {//reduce gamma under 1 for Lab mode ==> TIF and JPG - if (gam < 1.9f) { - gam = 1.f - (1.9f - gam) / 3.f; //minimum gamma 0.7 - } else if (gam >= 1.9f && gam <= 3.f) { - gam = (1.4f / 1.1f) * gam - 1.41818f; + if (gam < 1.9) { + gam = 1.0 - (1.9 - gam) / 3.0; //minimum gamma 0.7 + } else if (gam >= 1.9 && gam <= 3.0) { + gam = (1.4 / 1.1) * gam - 1.41818; } } LUTf gamcurve(65536, LUT_CLIP_BELOW); - float gamslope = exp(log(static_cast(gamthresh)) / gam) / gamthresh; + const double gamslope = exp(log(gamthresh) / gam) / gamthresh; if (denoiseMethodRgb) { Color::gammaf2lut(gamcurve, gam, gamthresh, gamslope, 65535.f, 32768.f); @@ -657,9 +657,9 @@ BENCHFUN } // inverse gamma transform for output data - float igam = 1.f / gam; - float igamthresh = gamthresh * gamslope; - float igamslope = 1.f / gamslope; + const float igam = 1.0 / gam; + const float igamthresh = gamthresh * gamslope; + const float igamslope = 1.0 / gamslope; LUTf igamcurve(65536, LUT_CLIP_BELOW); @@ -669,9 +669,9 @@ BENCHFUN Color::gammanf2lut(igamcurve, igam, 32768.f, 65535.f); } - const float gain = pow(2.0f, float(expcomp)); - float params_Ldetail = min(float(dnparams.Ldetail), 99.9f); // max out to avoid div by zero when using noisevar_Ldetail as divisor - float noisevar_Ldetail = SQR(static_cast(SQR(100. - params_Ldetail) + 50.*(100. - params_Ldetail)) * TS * 0.5f); + const float gain = std::pow(2.0, expcomp); + const double params_Ldetail = std::min(dnparams.Ldetail, 99.9); // max out to avoid div by zero when using noisevar_Ldetail as divisor + const float noisevar_Ldetail = SQR(SQR(100. - params_Ldetail) + 50.0 * (100.0 - params_Ldetail) * TS * 0.5); array2D tilemask_in(TS, TS); array2D tilemask_out(TS, TS); @@ -681,13 +681,13 @@ BENCHFUN for (int i = 0; i < TS; ++i) { float i1 = abs((i > TS / 2 ? i - TS + 1 : i)); - float vmask = (i1 < border ? SQR(sin((rtengine::RT_PI * i1) / (2 * border))) : 1.0f); - float vmask2 = (i1 < 2 * border ? SQR(sin((rtengine::RT_PI * i1) / (2 * border))) : 1.0f); + float vmask = (i1 < border ? SQR(sin((rtengine::RT_PI_F * i1) / (2 * border))) : 1.f); + float vmask2 = (i1 < 2 * border ? SQR(sin((rtengine::RT_PI_F * i1) / (2 * border))) : 1.f); for (int j = 0; j < TS; ++j) { float j1 = abs((j > TS / 2 ? j - TS + 1 : j)); - tilemask_in[i][j] = (vmask * (j1 < border ? SQR(sin((rtengine::RT_PI * j1) / (2 * border))) : 1.0f)) + epsilon; - tilemask_out[i][j] = (vmask2 * (j1 < 2 * border ? SQR(sin((rtengine::RT_PI * j1) / (2 * border))) : 1.0f)) + epsilon; + tilemask_in[i][j] = (vmask * (j1 < border ? SQR(sin((rtengine::RT_PI_F * j1) / (2 * border))) : 1.0f)) + epsilon; + tilemask_out[i][j] = (vmask2 * (j1 < 2 * border ? SQR(sin((rtengine::RT_PI_F * j1) / (2 * border))) : 1.0f)) + epsilon; } } @@ -883,19 +883,19 @@ BENCHFUN int height = tilebottom - tiletop; int width2 = (width + 1) / 2; float realred, realblue; - float interm_med = static_cast(dnparams.chroma) / 10.0; + float interm_med = dnparams.chroma / 10.0; float intermred, intermblue; if (dnparams.redchro > 0.) { - intermred = (dnparams.redchro / 10.); + intermred = dnparams.redchro / 10.0; } else { - intermred = static_cast(dnparams.redchro) / 7.0; //increase slower than linear for more sensit + intermred = dnparams.redchro / 7.0; //increase slower than linear for more sensit } if (dnparams.bluechro > 0.) { - intermblue = (dnparams.bluechro / 10.); + intermblue = dnparams.bluechro / 10.0; } else { - intermblue = static_cast(dnparams.bluechro) / 7.0; //increase slower than linear for more sensit + intermblue = dnparams.bluechro / 7.0; //increase slower than linear for more sensit } if (ponder && kall == 2) { @@ -1096,7 +1096,7 @@ BENCHFUN //binary 1 or 0 for each level, eg subsampling = 0 means no subsampling, 1 means subsample //the first level only, 7 means subsample the first three levels, etc. //actual implementation only works with subsampling set to 1 - float interm_medT = static_cast(dnparams.chroma) / 10.0; + float interm_medT = dnparams.chroma / 10.0; bool execwavelet = true; if (!denoiseLuminance && interm_medT < 0.05f && dnparams.median && (dnparams.methodmed == "Lab" || dnparams.methodmed == "Lonly")) { @@ -2121,7 +2121,7 @@ float ImProcFunctions::Mad(const float * DataList, const int datalen) int count_ = count - histo[median - 1]; // interpolate - return (((median - 1) + (datalen / 2 - count_) / (static_cast(count - count_))) / 0.6745); + return (((median - 1) + (datalen / 2 - count_) / (static_cast(count - count_))) / 0.6745f); } float ImProcFunctions::MadRgb(const float * DataList, const int datalen) @@ -2155,7 +2155,7 @@ float ImProcFunctions::MadRgb(const float * DataList, const int datalen) // interpolate delete[] histo; - return (((median - 1) + (datalen / 2 - count_) / (static_cast(count - count_))) / 0.6745); + return (((median - 1) + (datalen / 2 - count_) / (static_cast(count - count_))) / 0.6745f); } @@ -2908,7 +2908,7 @@ void ImProcFunctions::RGB_denoise_infoGamCurve(const procparams::DirPyrDenoisePa bool denoiseMethodRgb = (dnparams.dmethod == "RGB"); if (denoiseMethodRgb) { - gamslope = exp(log(static_cast(gamthresh)) / gam) / gamthresh; + gamslope = exp(log(static_cast(gamthresh)) / static_cast(gam)) / static_cast(gamthresh); Color::gammaf2lut(gamcurve, gam, gamthresh, gamslope, 65535.f, 32768.f); } else { Color::gammanf2lut(gamcurve, gam, 65535.f, 32768.f); @@ -3189,19 +3189,19 @@ void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat * provicalc, } float realred, realblue; - float interm_med = static_cast(dnparams.chroma) / 10.0; + float interm_med = dnparams.chroma / 10.0; float intermred, intermblue; if (dnparams.redchro > 0.) { - intermred = (dnparams.redchro / 10.); + intermred = dnparams.redchro / 10.0; } else { - intermred = static_cast(dnparams.redchro) / 7.0; //increase slower than linear for more sensit + intermred = dnparams.redchro / 7.0; //increase slower than linear for more sensit } if (dnparams.bluechro > 0.) { - intermblue = (dnparams.bluechro / 10.); + intermblue = dnparams.bluechro / 10.0; } else { - intermblue = static_cast(dnparams.bluechro) / 7.0; //increase slower than linear for more sensit + intermblue = dnparams.bluechro / 7.0; //increase slower than linear for more sensit } realred = interm_med + intermred; diff --git a/rtengine/color.h b/rtengine/color.h index 845770bbe..998e47ee7 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -147,6 +147,7 @@ public: constexpr static double u0 = 4.0 * static_cast(D50x) / (static_cast(D50x) + 15 + 3 * static_cast(D50z)); constexpr static double v0 = 9.0 / (static_cast(D50x) + 15 + 3 * static_cast(D50z)); constexpr static double epskap = 8.0; + constexpr static float epskapf = epskap; constexpr static float c1By116 = 1.0 / 116.0; constexpr static float c16By116 = 16.0 / 116.0; diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc index 697a5e3d3..a56ff1918 100644 --- a/rtengine/hilite_recon.cc +++ b/rtengine/hilite_recon.cc @@ -496,7 +496,7 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue && blue[i + miny][j + minx] < max_f[2] ) { // if one or more channels is highlight but none are blown, add to highlight accumulator - hipass_sum += channelblur[0][i][j]; + hipass_sum += static_cast(channelblur[0][i][j]); ++hipass_norm; hilite_full[0][i][j] = red[i + miny][j + minx]; @@ -507,7 +507,7 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue } } - const float hipass_ave = 2.f * hipass_sum / (hipass_norm + epsilon); + const float hipass_ave = 2.0 * hipass_sum / (hipass_norm + static_cast(epsilon)); if (plistener) { progress += 0.05; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index d5c69773e..91c1e2c00 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -137,7 +137,7 @@ void highlightToneCurve(const LUTf &hltonecurve, float *rtemp, float *gtemp, flo float b = btemp[ti * tileSize + tj + k]; float tonefactor = ((r < MAXVALF ? hltonecurve[r] : CurveFactory::hlcurve(exp_scale, comp, hlrange, r)) + (g < MAXVALF ? hltonecurve[g] : CurveFactory::hlcurve(exp_scale, comp, hlrange, g)) + - (b < MAXVALF ? hltonecurve[b] : CurveFactory::hlcurve(exp_scale, comp, hlrange, b))) / 3.0; + (b < MAXVALF ? hltonecurve[b] : CurveFactory::hlcurve(exp_scale, comp, hlrange, b))) / 3.f; // note: tonefactor includes exposure scaling, that is here exposure slider and highlight compression takes place rtemp[ti * tileSize + tj + k] = r * tonefactor; @@ -165,7 +165,7 @@ void highlightToneCurve(const LUTf &hltonecurve, float *rtemp, float *gtemp, flo //float tonefactor = hltonecurve[(0.299f*r+0.587f*g+0.114f*b)]; float tonefactor = ((r < MAXVALF ? hltonecurve[r] : CurveFactory::hlcurve(exp_scale, comp, hlrange, r)) + (g < MAXVALF ? hltonecurve[g] : CurveFactory::hlcurve(exp_scale, comp, hlrange, g)) + - (b < MAXVALF ? hltonecurve[b] : CurveFactory::hlcurve(exp_scale, comp, hlrange, b))) / 3.0; + (b < MAXVALF ? hltonecurve[b] : CurveFactory::hlcurve(exp_scale, comp, hlrange, b))) / 3.f; // note: tonefactor includes exposure scaling, that is here exposure slider and highlight compression takes place rtemp[ti * tileSize + tj] = r * tonefactor; @@ -518,8 +518,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw int width = lab->W, height = lab->H; float minQ = 10000.f; float maxQ = -1000.f; - float Yw; - Yw = 1.0; + double Yw = 1.0; double Xw, Zw; float f = 0.f, nc = 0.f, la, c = 0.f, xw, yw, zw, f2 = 1.f, c2 = 1.f, nc2 = 1.f, yb2; float fl, n, nbb, ncb, aw; //d @@ -596,13 +595,13 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw algepd = true; } - xwd = 100.f * Xwout; - zwd = 100.f * Zwout; - ywd = 100.f / params->colorappearance.greenout;//approximation to simplify + xwd = 100.0 * Xwout; + zwd = 100.0 * Zwout; + ywd = 100.0 / params->colorappearance.greenout;//approximation to simplify - xws = 100.f * Xwsc; - zws = 100.f * Zwsc; - yws = 100.f / params->colorappearance.greensc;//approximation to simplify + xws = 100.0 * Xwsc; + zws = 100.0 * Zwsc; + yws = 100.0 / params->colorappearance.greensc;//approximation to simplify /* @@ -699,20 +698,20 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw if (alg == 3 || alg == 1) { schr = params->colorappearance.schroma; - if (schr > 0.0) { - schr = schr / 2.0f; //divide sensibility for saturation + if (schr > 0.f) { + schr = schr / 2.f; //divide sensibility for saturation } if (alg == 3) { - if (schr == -100.0f) { + if (schr == -100.f) { schr = -99.f; } - if (schr == 100.0f) { + if (schr == 100.f) { schr = 98.f; } } else { - if (schr == -100.0f) { + if (schr == -100.f) { schr = -99.8f; } } @@ -751,7 +750,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw LUTu hist16J; LUTu hist16Q; - if ((needJ && CAMBrightCurveJ.dirty) || (needQ && CAMBrightCurveQ.dirty) || (std::isnan (mean) && settings->viewinggreySc != 0)) { + if ((needJ && CAMBrightCurveJ.dirty) || (needQ && CAMBrightCurveQ.dirty) || (std::isnan(mean) && settings->viewinggreySc != 0)) { if (needJ) { hist16J (32768); @@ -788,7 +787,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw #endif - for (int i = 0; i < height; i++) + for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { //rough correspondence between L and J float currL = lab->L[i][j] / 327.68f; float koef; //rough correspondence between L and J @@ -849,10 +848,11 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw //hist16Qthr[ (int) (sqrtf ((koef * (lab->L[i][j])) * 32768.f))]++; //for brightness Q : approximation for Q=wh*sqrt(J/100) J not equal L } - sum += koef * lab->L[i][j]; //evaluate mean J to calculate Yb + sum += static_cast(koef) * static_cast(lab->L[i][j]); //evaluate mean J to calculate Yb //sumQ += whestim * sqrt ((koef * (lab->L[i][j])) / 32768.f); //can be used in case of... } + } #ifdef _OPENMP #pragma omp critical @@ -868,8 +868,8 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw } - if (std::isnan (mean)) { - mean = (sum / ((height) * width)) / 327.68f; //for Yb for all image...if one day "pipette" we can adapt Yb for each zone + if (std::isnan(mean)) { + mean = (sum / ((height) * width)) / 327.68; //for Yb for all image...if one day "pipette" we can adapt Yb for each zone } } #ifdef _OPENMP @@ -916,9 +916,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw const bool highlight = params->toneCurve.hrenabled; //Get the value if "highlight reconstruction" is activated const int gamu = (params->colorappearance.gamut) ? 1 : 0; - xw = 100.0f * Xw; - yw = 100.0f * Yw; - zw = 100.0f * Zw; + xw = 100.0 * Xw; + yw = 100.0 * Yw; + zw = 100.0 * Zw; float xw1 = 0.f, yw1 = 0.f, zw1 = 0.f, xw2 = 0.f, yw2 = 0.f, zw2 = 0.f; // settings of WB: scene and viewing @@ -2002,9 +2002,9 @@ void ImProcFunctions::moyeqt (Imagefloat* working, float &moyS, float &eqty) for (int i = 0; i < tHh; i++) { for (int j = 0; j < tWw; j++) { - float s = Color::rgb2s (CLIP (working->r (i, j)), CLIP (working->g (i, j)), CLIP (working->b (i, j))); + double s = Color::rgb2s (CLIP (working->r (i, j)), CLIP (working->g (i, j)), CLIP (working->b (i, j))); moy += s; - sqrs += SQR (s); + sqrs += SQR(s); } } @@ -2108,17 +2108,17 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer float toxyz[3][3] = { { - static_cast ( wprof[0][0] / Color::D50x), - static_cast ( wprof[0][1] / Color::D50x), - static_cast ( wprof[0][2] / Color::D50x) + static_cast(wprof[0][0] / static_cast(Color::D50x)), + static_cast(wprof[0][1] / static_cast(Color::D50x)), + static_cast(wprof[0][2] / static_cast(Color::D50x)) }, { - static_cast ( wprof[1][0]), - static_cast ( wprof[1][1]), - static_cast ( wprof[1][2]) + static_cast(wprof[1][0]), + static_cast(wprof[1][1]), + static_cast(wprof[1][2]) }, { - static_cast ( wprof[2][0] / Color::D50z), - static_cast ( wprof[2][1] / Color::D50z), - static_cast ( wprof[2][2] / Color::D50z) + static_cast(wprof[2][0] / static_cast(Color::D50z)), + static_cast(wprof[2][1] / static_cast(Color::D50z)), + static_cast(wprof[2][2] / static_cast(Color::D50z)) } }; float maxFactorToxyz = max (toxyz[1][0], toxyz[1][1], toxyz[1][2]); @@ -2238,10 +2238,10 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer const float film_simulation_strength = static_cast (params->filmSimulation.strength) / 100.0f; - const float exp_scale = pow (2.0, expcomp); - const float comp = (max (0.0, expcomp) + 1.0) * hlcompr / 100.0; - const float shoulder = ((65536.0 / max (1.0f, exp_scale)) * (hlcomprthresh / 200.0)) + 0.1; - const float hlrange = 65536.0 - shoulder; + const float exp_scale = pow(2.0, expcomp); + const float comp = (max(0.0, expcomp) + 1.0) * hlcompr / 100.0; + const float shoulder = ((65536.f / max(1.0f, exp_scale)) * (hlcomprthresh / 200.f)) + 0.1f; + const float hlrange = 65536.f - shoulder; const bool isProPhoto = (params->icm.workingProfile == "ProPhoto"); // extracting data from 'params' to avoid cache flush (to be confirmed) ToneCurveMode curveMode = params->toneCurve.curveMode; @@ -2303,43 +2303,43 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer } */ - float RedLow = params->colorToning.redlow / 100.f; - float GreenLow = params->colorToning.greenlow / 100.f; - float BlueLow = params->colorToning.bluelow / 100.f; - float RedMed = params->colorToning.redmed / 100.f; - float GreenMed = params->colorToning.greenmed / 100.f; - float BlueMed = params->colorToning.bluemed / 100.f; - float RedHigh = params->colorToning.redhigh / 100.f; - float GreenHigh = params->colorToning.greenhigh / 100.f; - float BlueHigh = params->colorToning.bluehigh / 100.f; - float SatLow = float (params->colorToning.shadowsColSat.getBottom()) / 100.f; - float SatHigh = float (params->colorToning.hlColSat.getBottom()) / 100.f; + float RedLow = params->colorToning.redlow / 100.0; + float GreenLow = params->colorToning.greenlow / 100.0; + float BlueLow = params->colorToning.bluelow / 100.0; + float RedMed = params->colorToning.redmed / 100.0; + float GreenMed = params->colorToning.greenmed / 100.0; + float BlueMed = params->colorToning.bluemed / 100.0; + float RedHigh = params->colorToning.redhigh / 100.0; + float GreenHigh = params->colorToning.greenhigh / 100.0; + float BlueHigh = params->colorToning.bluehigh / 100.0; + float SatLow = params->colorToning.shadowsColSat.getBottom() / 100.f; + float SatHigh = params->colorToning.hlColSat.getBottom() / 100.f; - float Balan = float (params->colorToning.balance); + float Balan = params->colorToning.balance; - float chMixRR = float (params->chmixer.red[0])/10.f; - float chMixRG = float (params->chmixer.red[1])/10.f; - float chMixRB = float (params->chmixer.red[2])/10.f; - float chMixGR = float (params->chmixer.green[0])/10.f; - float chMixGG = float (params->chmixer.green[1])/10.f; - float chMixGB = float (params->chmixer.green[2])/10.f; - float chMixBR = float (params->chmixer.blue[0])/10.f; - float chMixBG = float (params->chmixer.blue[1])/10.f; - float chMixBB = float (params->chmixer.blue[2])/10.f; + float chMixRR = params->chmixer.red[0] / 10.f; + float chMixRG = params->chmixer.red[1] / 10.f; + float chMixRB = params->chmixer.red[2] / 10.f; + float chMixGR = params->chmixer.green[0] / 10.f; + float chMixGG = params->chmixer.green[1] / 10.f; + float chMixGB = params->chmixer.green[2] / 10.f; + float chMixBR = params->chmixer.blue[0] / 10.f; + float chMixBG = params->chmixer.blue[1] / 10.f; + float chMixBB = params->chmixer.blue[2] / 10.f; bool blackwhite = params->blackwhite.enabled; bool complem = params->blackwhite.enabledcc; - float bwr = float (params->blackwhite.mixerRed); - float bwg = float (params->blackwhite.mixerGreen); - float bwb = float (params->blackwhite.mixerBlue); - float bwrgam = float (params->blackwhite.gammaRed); - float bwggam = float (params->blackwhite.gammaGreen); - float bwbgam = float (params->blackwhite.gammaBlue); - float mixerOrange = float (params->blackwhite.mixerOrange); - float mixerYellow = float (params->blackwhite.mixerYellow); - float mixerCyan = float (params->blackwhite.mixerCyan); - float mixerMagenta = float (params->blackwhite.mixerMagenta); - float mixerPurple = float (params->blackwhite.mixerPurple); + float bwr = params->blackwhite.mixerRed; + float bwg = params->blackwhite.mixerGreen; + float bwb = params->blackwhite.mixerBlue; + float bwrgam = params->blackwhite.gammaRed; + float bwggam = params->blackwhite.gammaGreen; + float bwbgam = params->blackwhite.gammaBlue; + float mixerOrange = params->blackwhite.mixerOrange; + float mixerYellow = params->blackwhite.mixerYellow; + float mixerCyan = params->blackwhite.mixerCyan; + float mixerMagenta = params->blackwhite.mixerMagenta; + float mixerPurple = params->blackwhite.mixerPurple; int algm = 0; if (params->blackwhite.method == "Desaturation") { @@ -2720,7 +2720,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer //HSV equalizer if (hCurveEnabled) { - h = (hCurve->getVal (double (h)) - 0.5) * 2.f + h; + h = (hCurve->getVal(h) - 0.5) * 2.0 + static_cast(h); if (h > 1.0f) { h -= 1.0f; @@ -2751,7 +2751,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer } //shift value - float valparam = vCurve->getVal ((double)h) - 0.5f; + float valparam = vCurve->getVal(h) - 0.5; valparam *= (1.f - SQR (SQR (1.f - min (s, 1.0f)))); if (valparam > 0.00001f) { @@ -3063,7 +3063,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer if (bwlCurveEnabled) { L /= 32768.f; double hr = Color::huelab_to_huehsv2 (HH); - float valparam = float ((bwlCurve->getVal (hr) - 0.5f) * 2.0f); //get l_r=f(H) + float valparam = (bwlCurve->getVal(hr) - 0.5) * 2.0; //get l_r=f(H) float kcc = (CC / 70.f); //take Chroma into account...70 "middle" of chromaticity (arbitrary and simple), one can imagine other algorithme //reduct action for low chroma and increase action for high chroma valparam *= kcc; @@ -3317,9 +3317,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer for (int i = 0; i < tH; i++) { for (int j = 0; j < tW; j++) { - nr += tmpImage->r (i, j); - ng += tmpImage->g (i, j); - nb += tmpImage->b (i, j); + nr += static_cast(tmpImage->r(i, j)); + ng += static_cast(tmpImage->g(i, j)); + nb += static_cast(tmpImage->b(i, j)); } } @@ -4385,8 +4385,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW float factnoise = 1.f; if (params->dirpyrDenoise.enabled) { - factnoise = (1.f + params->dirpyrDenoise.chroma / 500.f); //levels=5 -// if(yyyy) factnoise=(1.f+params->dirpyrDenoise.chroma/100.f);//levels=7 + factnoise = 1.0 + params->dirpyrDenoise.chroma / 500.0; //levels=5 } const float scaleConst = 100.0f / 100.1f; @@ -4564,7 +4563,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW float l_r;//Luminance Lab in 0..1 l_r = Lprov1 / 100.f; { - float valparam = float ((lhCurve->getVal (Color::huelab_to_huehsv2 (HH)) - 0.5f)); //get l_r=f(H) + float valparam = lhCurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5; //get l_r=f(H) float valparamneg; valparamneg = valparam; float kcc = (CC / amountchroma); //take Chroma into account...40 "middle low" of chromaticity (arbitrary and simple), one can imagine other algorithme @@ -4597,9 +4596,9 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW float fx = (0.002f * aprov1) + fy; float fz = fy - (0.005f * bprov1); - float x_ = 65535.0f * Color::f2xyz (fx) * Color::D50x; - float z_ = 65535.0f * Color::f2xyz (fz) * Color::D50z; - float y_ = (Lprov1 > Color::epskap) ? 65535.0 * fy * fy * fy : 65535.0 * Lprov1 / Color::kappa; + float x_ = 65535.f * Color::f2xyz (fx) * Color::D50x; + float z_ = 65535.f * Color::f2xyz (fz) * Color::D50z; + float y_ = Lprov1 > Color::epskapf ? 65535.f * fy * fy * fy : 65535.f * Lprov1 / Color::kappaf; float R, G, B; Color::xyz2rgb (x_, y_, z_, R, G, B, wip); @@ -4627,7 +4626,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW // calculate C=f(H) if (chutili) { double hr = Color::huelab_to_huehsv2 (HH); - float chparam = float ((chCurve->getVal (hr) - 0.5f) * 2.0f); //get C=f(H) + float chparam = (chCurve->getVal(hr) - 0.5) * 2.0; //get C=f(H) float chromaChfactor = 1.0f + chparam; atmp *= chromaChfactor;//apply C=f(H) btmp *= chromaChfactor; @@ -4635,9 +4634,9 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW if (hhutili) { // H=f(H) //hue Lab in -PI +PI - float valparam = float ((hhCurve->getVal (Color::huelab_to_huehsv2 (HH)) - 0.5f) * 1.7f) + HH; //get H=f(H) 1.7 optimisation ! + float valparam = (hhCurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5) * 1.7 + static_cast(HH); //get H=f(H) 1.7 optimisation ! HH = valparam; - sincosval = xsincosf (HH); + sincosval = xsincosf(HH); } if (!bwToning) { @@ -4713,11 +4712,11 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW deltaHH = protect_redhcur; //transition hue - if (chromaCfactor > 0.0) { + if (chromaCfactor > 0.f) { Color::scalered ( rstprotection, chromaCfactor, 0.0, HH, deltaHH, scale, scaleext); //1.0 } - if (chromaCfactor > 1.0) { + if (chromaCfactor > 1.f) { float interm = (chromaCfactor - 1.0f) * 100.0f; factorskin = 1.0f + (interm * scale) / 100.0f; factorskinext = 1.0f + (interm * scaleext) / 100.0f; @@ -4774,11 +4773,11 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW deltaHH = protect_redhcur; //transition hue - if (chromaCfactor > 0.0) { + if (chromaCfactor > 0.f) { Color::scalered ( rstprotection, chromaCfactor, 0.0, HH, deltaHH, scale, scaleext); //1.0 } - if (chromaCfactor > 1.0) { + if (chromaCfactor > 1.f) { float interm = (chromaCfactor - 1.0f) * 100.0f; factorskin = 1.0f + (interm * scale) / 100.0f; factorskinext = 1.0f + (interm * scaleext) / 100.0f; @@ -5061,7 +5060,7 @@ void ImProcFunctions::impulsedenoise (LabImage* lab) if (params->impulseDenoise.enabled && lab->W >= 8 && lab->H >= 8) { - impulse_nr (lab, (float)params->impulseDenoise.thresh / 20.0 ); + impulse_nr(lab, params->impulseDenoise.thresh / 20.0); } } @@ -5071,7 +5070,7 @@ void ImProcFunctions::impulsedenoisecam (CieImage* ncie, float **buffers[3]) if (params->impulseDenoise.enabled && ncie->W >= 8 && ncie->H >= 8) { - impulse_nrcam (ncie, (float)params->impulseDenoise.thresh / 20.0, buffers ); + impulse_nrcam(ncie, params->impulseDenoise.thresh / 20.0, buffers); } } @@ -5141,7 +5140,7 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi float sca = params->epd.scale; float gamm = params->epd.gamma; float rew = params->epd.reweightingIterates; - float Qpro = ( 4.0 / c_) * ( a_w + 4.0 ) ; //estimate Q max if J=100.0 + float Qpro = (4.f / c_) * (a_w + 4.f) ; //estimate Q max if J=100.0 float *Qpr = ncie->Q_p[0]; if (settings->verbose) { @@ -5172,7 +5171,7 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi //Auto select number of iterates. Note that p->EdgeStopping = 0 makes a Gaussian blur. if (Iterates == 0) { - Iterates = (unsigned int) (edgest * 15.0); + Iterates = edgest * 15.f; } //Jacques Desmis : always Iterates=5 for compatibility images between preview and output @@ -5399,7 +5398,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double octile[count] += histogram[j]; if (octile[count] > sum / 8.f || (count == 7 && octile[count] > sum / 16.f)) { - octile[count] = xlog (1. + j) / log (2.f); + octile[count] = xlog(1. + j) / log(2.0); count++;// = min(count+1,7); } } @@ -5412,7 +5411,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double octile[count] += histogram[j]; if (octile[count] > sum / 8.f || (count == 7 && octile[count] > sum / 16.f)) { - octile[count] = xlog (1. + j) / log (2.f); + octile[count] = xlog(1. + j) / log(2.0); count++;// = min(count+1,7); } } @@ -5487,7 +5486,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double } //compute clipped white point - unsigned int clippable = (int) (sum * clip / 100.f ); + unsigned int clippable = (int) (static_cast(sum) * clip / 100.0 ); clipped = 0; int whiteclip = (imax) - 1; @@ -5546,8 +5545,8 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double hlcomprthresh = 0; //this is a series approximation of the actual formula for comp, //which is a transcendental equation - float comp = (gain * ((float)whiteclip) / scale - 1.f) * 2.3f; // 2.3 instead of 2 to increase slightly comp - hlcompr = (int) (100.*comp / (max (0.0, expcomp) + 1.0)); + double comp = (gain * whiteclip / scale - 1.f) * 2.3f; // 2.3 instead of 2 to increase slightly comp + hlcompr = 100.0 * comp / (max(0.0, expcomp) + 1.0); hlcompr = max (0, min (100, hlcompr)); //now find brightness if gain didn't bring ave to midgray using @@ -5555,9 +5554,9 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double float midtmp = gain * sqrt (median * ave) / scale; if (midtmp < 0.1f) { - bright = (midgray - midtmp) * 15.0 / (midtmp); + bright = (midgray - midtmp) * 15.f / (midtmp); } else { - bright = (midgray - midtmp) * 15.0 / (0.10833 - 0.0833 * midtmp); + bright = (midgray - midtmp) * 15.f / (0.10833f - 0.0833f * midtmp); } bright = 0.25 */*(median/ave)*(hidev/lodev)*/max (0, bright); From 914daffa39b223b01859e5c7956e2ef8cff1de0a Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 22 Jan 2020 00:11:39 +0100 Subject: [PATCH 041/264] more double promote fixes, still not complete --- rtengine/CMakeLists.txt | 1 + rtengine/color.cc | 1379 +----------------------------------- rtengine/color.h | 8 +- rtengine/curves.cc | 1 + rtengine/munselllch.cc | 1232 ++++++++++++++++++++++++++++++++ rtengine/rawimagesource.cc | 1 + rtengine/rtthumbnail.cc | 1 + 7 files changed, 1241 insertions(+), 1382 deletions(-) create mode 100644 rtengine/munselllch.cc diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 6bce68d1a..e41202832 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -105,6 +105,7 @@ set(RTENGINESOURCEFILES lj92.c lmmse_demosaic.cc loadinitial.cc + munselllch.cc myfile.cc panasonic_decoders.cc pdaflinesfilter.cc diff --git a/rtengine/color.cc b/rtengine/color.cc index 8d20fb9ba..e998b665c 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -16,6 +16,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include #include "rtengine.h" #include "color.h" @@ -2997,1384 +2998,6 @@ void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N, } -/* - * MunsellLch correction - * Copyright (c) 2012 Jacques Desmis - * - * Find the right LUT and calculate the correction - */ -void Color::MunsellLch (float lum, float hue, float chrom, float memChprov, float &correction, int zone, float &lbe, bool &correctL) -{ - - int x = int(memChprov); - int y = int(chrom); - - //begin PB correction + sky - if(zone == 1) { - if(lum > 5.0) { - if(lum < 15.0) { - if( (hue >= (_15PB10[x] - 0.035)) && (hue < (_15PB10[x] + 0.052) && x <= 45)) { - if(y > 49) { - y = 49; - } - - correction = _15PB10[y] - _15PB10[x] ; - lbe = _15PB10[y]; - correctL = true; - } else if (( hue >= ( _3PB10[x] - 0.052)) && (hue < (_45PB10[x] + _3PB10[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _3PB10[y] - _3PB10[x]; - lbe = _3PB10[y]; - correctL = true; - } else if (( hue >= (_45PB10[x] + _3PB10[x]) / 2.0) && (hue < (_45PB10[x] + 0.052)) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _45PB10[y] - _45PB10[x] ; - lbe = _45PB10[y]; - correctL = true; - } else if (( hue >= (_6PB10[x] - 0.052) && (hue < (_6PB10[x] + _75PB10[x]) / 2.0))) { - correction = _6PB10[y] - _6PB10[x] ; - lbe = _6PB10[y]; - correctL = true; - } else if (( hue >= (_6PB10[x] + _75PB10[x]) / 2.0) && (hue < (_9PB10[x] + _75PB10[x]) / 2.0)) { - correction = _75PB10[y] - _75PB10[x] ; - lbe = _75PB10[y]; - correctL = true; - } else if (( hue >= (_9PB10[x] + _75PB10[x]) / 2.0) && (hue < (_9PB10[x] + _10PB10[x]) / 2.0)) { - correction = _9PB10[y] - _9PB10[x] ; - lbe = _9PB10[y]; - correctL = true; - } else if (( hue >= (_10PB10[x] + _9PB10[x]) / 2.0) && (hue < (_1P10[x] + _10PB10[x]) / 2.0)) { - correction = _10PB10[y] - _10PB10[x] ; - lbe = _10PB10[y]; - correctL = true; - } else if (( hue >= (_10PB10[x] + _1P10[x]) / 2.0) && (hue < (_1P10[x] + _4P10[x]) / 2.0)) { - correction = _1P10[y] - _1P10[x]; - lbe = _1P10[y]; - correctL = true; - } else if (( hue >= (_1P10[x] + _4P10[x]) / 2.0) && (hue < (0.035 + _4P10[x]) / 2.0)) { - correction = _4P10[y] - _4P10[x] ; - lbe = _4P10[y]; - correctL = true; - } - } else if (lum < 25.0) { - if( (hue >= (_15PB20[x] - 0.035)) && (hue < (_15PB20[x] + _3PB20[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _15PB20[y] - _15PB20[x] ; - lbe = _15PB20[y]; - correctL = true; - } else if (( hue >= (_15PB20[x] + _3PB20[x]) / 2.0) && (hue < (_45PB20[x] + _3PB20[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _3PB20[y] - _3PB20[x] ; - lbe = _3PB20[y]; - correctL = true; - } else if (( hue >= (_45PB20[x] + _3PB20[x]) / 2.0) && (hue < ( _45PB20[x] + 0.052)) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _45PB20[y] - _45PB20[x] ; - lbe = _45PB20[y]; - correctL = true; - } else if (( hue >= (_45PB20[x] + 0.052)) && (hue < (_6PB20[x] + _75PB20[x]) / 2.0)) { - correction = _6PB20[y] - _6PB20[x]; - lbe = _6PB20[y]; - correctL = true; - } else if (( hue >= (_6PB20[x] + _75PB20[x]) / 2.0) && (hue < (_9PB20[x] + _75PB20[x]) / 2.0)) { - correction = _75PB20[y] - _75PB20[x] ; - lbe = _75PB20[y]; - correctL = true; - } else if (( hue >= (_9PB20[x] + _75PB20[x]) / 2.0) && (hue < (_9PB20[x] + _10PB20[x]) / 2.0)) { - correction = _9PB20[y] - _9PB20[x] ; - lbe = _9PB20[y]; - correctL = true; - } else if (( hue >= (_10PB20[x] + _9PB20[x]) / 2.0) && (hue < (_1P20[x] + _10PB20[x]) / 2.0)) { - correction = _10PB20[y] - _10PB20[x] ; - lbe = _10PB20[y]; - correctL = true; - } else if (( hue >= (_10PB20[x] + _1P20[x]) / 2.0) && (hue < (_1P20[x] + _4P20[x]) / 2.0)) { - correction = _1P20[y] - _1P20[x] ; - lbe = _1P20[y]; - correctL = true; - } else if (( hue >= (_1P20[x] + _4P20[x]) / 2.0) && (hue < (0.035 + _4P20[x]) / 2.0)) { - correction = _4P20[y] - _4P20[x] ; - lbe = _4P20[y]; - correctL = true; - } - } else if (lum < 35.0) { - if( (hue >= (_15PB30[x] - 0.035)) && (hue < (_15PB30[x] + _3PB30[x]) / 2.0) && x <= 85 ) { - if(y > 89) { - y = 89; - } - - correction = _15PB30[y] - _15PB30[x] ; - lbe = _15PB30[y]; - correctL = true; - } else if (( hue >= (_15PB30[x] + _3PB30[x]) / 2.0) && (hue < (_45PB30[x] + _3PB30[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _3PB30[y] - _3PB30[x] ; - lbe = _3PB30[y]; - correctL = true; - } else if (( hue >= (_45PB30[x] + _3PB30[x]) / 2.0) && (hue < (_45PB30[x] + 0.052)) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _45PB30[y] - _45PB30[x] ; - lbe = _45PB30[y]; - correctL = true; - } else if (( hue >= ( _45PB30[x] + 0.052)) && (hue < (_6PB30[x] + _75PB30[x]) / 2.0)) { - correction = _6PB30[y] - _6PB30[x] ; - lbe = _6PB30[y]; - correctL = true; - } else if (( hue >= (_6PB30[x] + _75PB30[x]) / 2.0) && (hue < (_9PB30[x] + _75PB30[x]) / 2.0)) { - correction = _75PB30[y] - _75PB30[x] ; - lbe = _75PB30[y] ; - correctL = true; - } else if (( hue >= (_9PB30[x] + _75PB30[x]) / 2.0) && (hue < (_9PB30[x] + _10PB30[x]) / 2.0)) { - correction = _9PB30[y] - _9PB30[x] ; - lbe = _9PB30[y]; - correctL = true; - } else if (( hue >= (_10PB30[x] + _9PB30[x]) / 2.0) && (hue < (_1P30[x] + _10PB30[x]) / 2.0)) { - correction = _10PB30[y] - _10PB30[x] ; - lbe = _10PB30[y]; - correctL = true; - } else if (( hue >= (_10PB30[x] + _1P30[x]) / 2.0) && (hue < (_1P30[x] + _4P30[x]) / 2.0)) { - correction = _1P30[y] - _1P30[x] ; - lbe = _1P30[y]; - correctL = true; - } else if (( hue >= (_1P30[x] + _4P30[x]) / 2.0) && (hue < (0.035 + _4P30[x]) / 2.0)) { - correction = _4P30[y] - _4P30[x] ; - lbe = _4P30[y]; - correctL = true; - } - } else if (lum < 45.0) { - if( (hue <= (_05PB40[x] + _15PB40[x]) / 2.0) && (hue > (_05PB40[x] + _10B40[x]) / 2.0) && x < 75 ) { - if(y > 75) { - y = 75; - } - - correction = _05PB40[y] - _05PB40[x] ; - lbe = _05PB40[y]; - correctL = true; - } else if( (hue <= (_05PB40[x] + _10B40[x]) / 2.0) && (hue > (_10B40[x] + _9B40[x]) / 2.0) && x < 70 ) { - if(y > 70) { - y = 70; - } - - correction = _10B40[y] - _10B40[x] ; - lbe = _10B40[y]; - correctL = true; - } else if( (hue <= (_10B40[x] + _9B40[x]) / 2.0) && (hue > (_9B40[x] + _7B40[x]) / 2.0) && x < 70 ) { - if(y > 70) { - y = 70; - } - - correction = _9B40[y] - _9B40[x] ; - lbe = _9B40[y]; - correctL = true; - } else if( (hue <= (_9B40[x] + _7B40[x]) / 2.0) && (hue > (_5B40[x] + _7B40[x]) / 2.0) && x < 70 ) { - if(y > 70) { - y = 70; - } - - correction = _7B40[y] - _7B40[x] ; - lbe = _7B40[y]; - correctL = true; - } else if (( hue <= (_5B40[x] + _7B40[x]) / 2.0) && (hue > (_5B40[x] - 0.035)) && x < 70) { - if(y > 70) { - y = 70; // - } - - correction = _5B40[y] - _5B40[x] ; - lbe = _5B40[y]; - correctL = true; - } - - else if( (hue >= (_15PB40[x] - 0.035)) && (hue < (_15PB40[x] + _3PB40[x]) / 2.0) && x <= 85 ) { - if(y > 89) { - y = 89; - } - - correction = _15PB40[y] - _15PB40[x] ; - lbe = _15PB40[y]; - correctL = true; - } else if (( hue >= (_15PB40[x] + _3PB40[x]) / 2.0) && (hue < (_45PB40[x] + _3PB40[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _3PB40[y] - _3PB40[x] ; - lbe = _3PB40[y]; - correctL = true; - } else if (( hue >= (_45PB40[x] + _3PB40[x]) / 2.0) && (hue < (_45PB40[x] + 0.052)) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _45PB40[y] - _45PB40[x] ; - lbe = _45PB40[y] ; - correctL = true; - } else if (( hue >= (_45PB40[x] + 0.052)) && (hue < (_6PB40[x] + _75PB40[x]) / 2.0)) { - correction = _6PB40[y] - _6PB40[x] ; - lbe = _6PB40[y]; - correctL = true; - } else if (( hue >= (_6PB40[x] + _75PB40[x]) / 2.0) && (hue < (_9PB40[x] + _75PB40[x]) / 2.0)) { - correction = _75PB40[y] - _75PB40[x] ; - lbe = _75PB40[y]; - correctL = true; - } else if (( hue >= (_9PB40[x] + _75PB40[x]) / 2.0) && (hue < (_9PB40[x] + _10PB40[x]) / 2.0)) { - correction = _9PB40[y] - _9PB40[x] ; - lbe = _9PB40[y]; - correctL = true; - } else if (( hue >= (_10PB40[x] + _9PB40[x]) / 2.0) && (hue < (_1P40[x] + _10PB40[x]) / 2.0)) { - correction = _10PB40[y] - _10PB40[x] ; - lbe = _10PB40[y]; - correctL = true; - } else if (( hue >= (_10PB40[x] + _1P40[x]) / 2.0) && (hue < (_1P40[x] + _4P40[x]) / 2.0)) { - correction = _1P40[y] - _1P40[x] ; - lbe = _1P40[y]; - correctL = true; - } else if (( hue >= (_1P40[x] + _4P40[x]) / 2.0) && (hue < (0.035 + _4P40[x]) / 2.0)) { - correction = _4P40[y] - _4P40[x] ; - lbe = _4P40[y]; - correctL = true; - } - } else if (lum < 55.0) { - if( (hue <= (_05PB50[x] + _15PB50[x]) / 2.0) && (hue > (_05PB50[x] + _10B50[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _05PB50[y] - _05PB50[x] ; - lbe = _05PB50[y]; - correctL = true; - } else if( (hue <= (_05PB50[x] + _10B50[x]) / 2.0) && (hue > (_10B50[x] + _9B50[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _10B50[y] - _10B50[x] ; - lbe = _10B50[y]; - correctL = true; - } else if( (hue <= (_10B50[x] + _9B50[x]) / 2.0) && (hue > (_9B50[x] + _7B50[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _9B50[y] - _9B50[x] ; - lbe = _9B50[y]; - correctL = true; - } else if( (hue <= (_9B50[x] + _7B50[x]) / 2.0) && (hue > (_5B50[x] + _7B50[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _7B50[y] - _7B50[x] ; - lbe = _7B50[y]; - correctL = true; - } else if (( hue <= (_5B50[x] + _7B50[x]) / 2.0) && (hue > (_5B50[x] - 0.035)) && x < 79) { - if(y > 79) { - y = 79; // - } - - correction = _5B50[y] - _5B50[x] ; - lbe = _5B50[y]; - correctL = true; - } - - else if( (hue >= (_15PB50[x] - 0.035)) && (hue < (_15PB50[x] + _3PB50[x]) / 2.0) && x <= 85 ) { - if(y > 89) { - y = 89; - } - - correction = _15PB50[y] - _15PB50[x] ; - lbe = _15PB50[y]; - correctL = true; - } else if (( hue >= (_15PB50[x] + _3PB50[x]) / 2.0) && (hue < (_45PB50[x] + _3PB50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _3PB50[y] - _3PB50[x] ; - lbe = _3PB50[y]; - correctL = true; - } else if (( hue >= (_45PB50[x] + _3PB50[x]) / 2.0) && (hue < (_6PB50[x] + _45PB50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _45PB50[y] - _45PB50[x] ; - lbe = _45PB50[y]; - correctL = true; - } else if (( hue >= (_6PB50[x] + _45PB50[x]) / 2.0) && (hue < (_6PB50[x] + _75PB50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _6PB50[y] - _6PB50[x] ; - lbe = _6PB50[y]; - correctL = true; - } else if (( hue >= (_6PB50[x] + _75PB50[x]) / 2.0) && (hue < (_9PB50[x] + _75PB50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _75PB50[y] - _75PB50[x] ; - lbe = _75PB50[y]; - correctL = true; - } else if (( hue >= (_9PB50[x] + _75PB50[x]) / 2.0) && (hue < (_9PB50[x] + _10PB50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _9PB50[y] - _9PB50[x] ; - lbe = _9PB50[y]; - correctL = true; - } else if (( hue >= (_10PB50[x] + _9PB50[x]) / 2.0) && (hue < (_1P50[x] + _10PB50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _10PB50[y] - _10PB50[x] ; - lbe = _10PB50[y]; - correctL = true; - } else if (( hue >= (_10PB50[x] + _1P50[x]) / 2.0) && (hue < (_1P50[x] + _4P50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _1P50[y] - _1P50[x] ; - lbe = _1P50[y]; - correctL = true; - } else if (( hue >= (_1P50[x] + _4P50[x]) / 2.0) && (hue < (0.035 + _4P50[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _4P50[y] - _4P50[x] ; - lbe = _4P50[y]; - correctL = true; - } - } else if (lum < 65.0) { - if( (hue <= (_05PB60[x] + _15PB60[x]) / 2.0) && (hue > (_05PB60[x] + _10B60[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _05PB60[y] - _05PB60[x] ; - lbe = _05PB60[y]; - correctL = true; - } else if( (hue <= (_05PB60[x] + _10B60[x]) / 2.0) && (hue > (_10B60[x] + _9B60[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _10B60[y] - _10B60[x] ; - lbe = _10B60[y]; - correctL = true; - } else if( (hue <= (_10B60[x] + _9B60[x]) / 2.0) && (hue > (_9B60[x] + _7B60[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _9B60[y] - _9B60[x] ; - lbe = _9B60[y]; - correctL = true; - } else if( (hue <= (_9B60[x] + _7B60[x]) / 2.0) && (hue > (_5B60[x] + _7B60[x]) / 2.0) && x < 79 ) { - if(y > 79) { - y = 79; - } - - correction = _7B60[y] - _7B60[x] ; - lbe = _7B60[y]; - correctL = true; - } else if (( hue <= (_5B60[x] + _7B60[x]) / 2.0) && (hue > (_5B60[x] - 0.035)) && x < 79) { - if(y > 79) { - y = 79; // - } - - correction = _5B60[y] - _5B60[x] ; - lbe = _5B60[y]; - correctL = true; - } - - else if( (hue >= (_15PB60[x] - 0.035)) && (hue < (_15PB60[x] + _3PB60[x]) / 2.0) && x <= 85 ) { - if(y > 89) { - y = 89; - } - - correction = _15PB60[y] - _15PB60[x] ; - lbe = _15PB60[y]; - correctL = true; - } else if (( hue >= (_15PB60[x] + _3PB60[x]) / 2.0) && (hue < (_45PB60[x] + _3PB60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _3PB60[y] - _3PB60[x] ; - lbe = _3PB60[y]; - correctL = true; - } else if (( hue >= (_45PB60[x] + _3PB60[x]) / 2.0) && (hue < (_6PB60[x] + _45PB60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _45PB60[y] - _45PB60[x] ; - lbe = _45PB60[y]; - correctL = true; - } else if (( hue >= (_6PB60[x] + _45PB60[x]) / 2.0) && (hue < (_6PB60[x] + _75PB60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _6PB60[y] - _6PB60[x] ; - lbe = _6PB60[y]; - correctL = true; - } else if (( hue >= (_6PB60[x] + _75PB60[x]) / 2.0) && (hue < (_9PB60[x] + _75PB60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _75PB60[y] - _75PB60[x] ; - lbe = _75PB60[y]; - correctL = true; - } else if (( hue >= (_9PB60[x] + _75PB60[x]) / 2.0) && (hue < (_9PB60[x] + _10PB60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _9PB60[y] - _9PB60[x] ; - lbe = _9PB60[y]; - correctL = true; - } else if (( hue >= (_10PB60[x] + _9PB60[x]) / 2.0) && (hue < (_1P60[x] + _10PB60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _10PB60[y] - _10PB60[x] ; - lbe = _10PB60[y]; - correctL = true; - } else if (( hue >= (_10PB60[x] + _1P60[x]) / 2.0) && (hue < (_1P60[x] + _4P60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _1P60[y] - _1P60[x] ; - lbe = _1P60[y]; - correctL = true; - } else if (( hue >= (_1P60[x] + _4P60[x]) / 2.0) && (hue < (0.035 + _4P60[x]) / 2.0) && x <= 85) { - if(y > 89) { - y = 89; - } - - correction = _4P60[y] - _4P60[x] ; - lbe = _4P60[y]; - correctL = true; - } - } else if (lum < 75.0) { - if( (hue <= (_05PB70[x] + _15PB70[x]) / 2.0) && (hue > (_05PB70[x] + _10B70[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _05PB70[y] - _05PB70[x] ; - lbe = _05PB70[y]; - correctL = true; - } else if( (hue <= (_05PB70[x] + _10B70[x]) / 2.0) && (hue > (_10B70[x] + _9B70[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _10B70[y] - _10B70[x] ; - lbe = _10B70[y]; - correctL = true; - } else if( (hue <= (_10B70[x] + _9B70[x]) / 2.0) && (hue > (_9B70[x] + _7B70[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _9B70[y] - _9B70[x] ; - lbe = _9B70[y]; - correctL = true; - } else if( (hue <= (_9B70[x] + _7B70[x]) / 2.0) && (hue > (_5B70[x] + _7B70[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _7B70[y] - _7B70[x] ; - lbe = _7B70[y]; - correctL = true; - } else if (( hue <= (_5B70[x] + _7B70[x]) / 2.0) && (hue > (_5B70[x] - 0.035)) && x < 50) { - if(y > 49) { - y = 49; // - } - - correction = _5B70[y] - _5B70[x] ; - lbe = _5B70[y]; - correctL = true; - } - - else if( (hue >= (_15PB70[x] - 0.035)) && (hue < (_15PB70[x] + _3PB70[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _15PB70[y] - _15PB70[x] ; - lbe = _15PB70[y]; - correctL = true; - } else if (( hue >= (_45PB70[x] + _3PB70[x]) / 2.0) && (hue < (_6PB70[x] + _45PB70[x]) / 2.0) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _45PB70[y] - _45PB70[x] ; - lbe = _45PB70[y]; - correctL = true; - } else if (( hue >= (_6PB70[x] + _45PB70[x]) / 2.0) && (hue < (_6PB70[x] + _75PB70[x]) / 2.0) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _6PB70[y] - _6PB70[x] ; - lbe = _6PB70[y]; - correctL = true; - } else if (( hue >= (_6PB70[x] + _75PB70[x]) / 2.0) && (hue < (_9PB70[x] + _75PB70[x]) / 2.0) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _75PB70[y] - _75PB70[x] ; - lbe = _75PB70[y]; - correctL = true; - } else if (( hue >= (_9PB70[x] + _75PB70[x]) / 2.0) && (hue < (_9PB70[x] + 0.035)) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _9PB70[y] - _9PB70[x] ; - lbe = _9PB70[y]; - correctL = true; - } - } else if (lum < 85.0) { - if( (hue <= (_05PB80[x] + _15PB80[x]) / 2.0) && (hue > (_05PB80[x] + _10B80[x]) / 2.0) && x < 40 ) { - if(y > 39) { - y = 39; - } - - correction = _05PB80[y] - _05PB80[x] ; - lbe = _05PB80[y] ; - correctL = true; - } else if( (hue <= (_05PB80[x] + _10B80[x]) / 2.0) && (hue > (_10B80[x] + _9B80[x]) / 2.0) && x < 40 ) { - if(y > 39) { - y = 39; - } - - correction = _10B80[y] - _10B80[x] ; - lbe = _10B80[y]; - correctL = true; - } else if( (hue <= (_10B80[x] + _9B80[x]) / 2.0) && (hue > (_9B80[x] + _7B80[x]) / 2.0) && x < 40 ) { - if(y > 39) { - y = 39; - } - - correction = _9B80[y] - _9B80[x] ; - lbe = _9B80[y]; - correctL = true; - } else if( (hue <= (_9B80[x] + _7B80[x]) / 2.0) && (hue > (_5B80[x] + _7B80[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _7B80[y] - _7B80[x] ; - lbe = _7B80[y]; - correctL = true; - } else if (( hue <= (_5B80[x] + _7B80[x]) / 2.0) && (hue > (_5B80[x] - 0.035)) && x < 50) { - if(y > 49) { - y = 49; // - } - - correction = _5B80[y] - _5B80[x] ; - lbe = _5B80[y]; - correctL = true; - } - - else if( (hue >= (_15PB80[x] - 0.035)) && (hue < (_15PB80[x] + _3PB80[x]) / 2.0) && x < 50 ) { - if(y > 49) { - y = 49; - } - - correction = _15PB80[y] - _15PB80[x] ; - lbe = _15PB80[y]; - correctL = true; - } else if (( hue >= (_45PB80[x] + _3PB80[x]) / 2.0) && (hue < (_6PB80[x] + _45PB80[x]) / 2.0) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _45PB80[y] - _45PB80[x] ; - lbe = _45PB80[y]; - correctL = true; - } else if (( hue >= (_6PB80[x] + _45PB80[x]) / 2.0) && (hue < (_6PB80[x] + _75PB80[x]) / 2.0) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _6PB80[y] - _6PB80[x] ; - lbe = _6PB80[y]; - correctL = true; - } else if (( hue >= (_6PB80[x] + _75PB80[x]) / 2.0) && (hue < (_9PB80[x] + _75PB80[x]) / 2.0) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _75PB80[y] - _75PB80[x] ; - lbe = _75PB80[y]; - correctL = true; - } else if (( hue >= (_9PB80[x] + _75PB80[x]) / 2.0) && (hue < (_9PB80[x] + 0.035)) && x < 50) { - if(y > 49) { - y = 49; - } - - correction = _9PB80[y] - _9PB80[x] ; - lbe = _9PB80[y]; - correctL = true; - } - } - } - } - // end PB correction - - //red yellow correction - else if(zone == 2) { - if(lum > 15.0) { - if(lum < 25.0) { - if( (hue <= (_10YR20[x] + 0.035)) && (hue > (_10YR20[x] + _85YR20[x]) / 2.0) && x <= 45) { - if(y > 49) { - y = 49; - } - - correction = _10YR20[y] - _10YR20[x] ; - lbe = _10YR20[y]; - correctL = true; - } else if (( hue <= (_85YR20[x] + _10YR20[x]) / 2.0) && (hue > (_85YR20[x] + 0.035) && x <= 45)) { - if(y > 49) { - y = 49; - } - - correction = _85YR20[y] - _85YR20[x] ; - lbe = _85YR20[y]; - correctL = true; - } - } else if (lum < 35.0) { - if( (hue <= (_10YR30[x] + 0.035)) && (hue > (_10YR30[x] + _85YR30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10YR30[y] - _10YR30[x] ; - lbe = _10YR30[y]; - correctL = true; - } else if( (hue <= (_10YR30[x] + _85YR30[x]) / 2.0) && (hue > (_85YR30[x] + _7YR30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _85YR30[y] - _85YR30[x] ; - lbe = _85YR30[y]; - correctL = true; - } else if (( hue <= (_85YR30[x] + _7YR30[x]) / 2.0) && (hue > (_7YR30[x] + _55YR30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7YR30[y] - _7YR30[x] ; - lbe = _7YR30[y]; - correctL = true; - } else if (( hue <= (_7YR30[x] + _55YR30[x]) / 2.0) && (hue > (_55YR30[x] + _4YR30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _55YR30[y] - _55YR30[x] ; - lbe = _55YR30[y]; - correctL = true; - } else if (( hue <= (_55YR30[x] + _4YR30[x]) / 2.0) && (hue > (_4YR30[x] + _25YR30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _4YR30[y] - _4YR30[x] ; - lbe = _4YR30[y]; - correctL = true; - } else if (( hue <= (_4YR30[x] + _25YR30[x]) / 2.0) && (hue > (_25YR30[x] + _10R30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _25YR30[y] - _25YR30[x] ; - lbe = _25YR30[y]; - correctL = true; - } else if (( hue <= (_25YR30[x] + _10R30[x]) / 2.0) && (hue > (_10R30[x] + _9R30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10R30[y] - _10R30[x] ; - lbe = _10R30[y]; - correctL = true; - } else if (( hue <= (_10R30[x] + _9R30[x]) / 2.0) && (hue > (_9R30[x] + _7R30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _9R30[y] - _9R30[x] ; - lbe = _9R30[y]; - correctL = true; - } else if (( hue <= (_9R30[x] + _7R30[x]) / 2.0) && (hue > (_7R30[x] - 0.035)) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7R30[y] - _7R30[x] ; - lbe = _7R30[y] ; - correctL = true; - } - } else if (lum < 45.0) { - if( (hue <= (_10YR40[x] + 0.035)) && (hue > (_10YR40[x] + _85YR40[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10YR40[y] - _10YR40[x] ; - lbe = _10YR40[y]; - correctL = true; - } else if( (hue <= (_10YR40[x] + _85YR40[x]) / 2.0) && (hue > (_85YR40[x] + _7YR40[x]) / 2.0) && x < 85 ) { - if(y > 89) { - y = 89; - } - - correction = _85YR40[y] - _85YR40[x] ; - lbe = _85YR40[y]; - correctL = true; - } else if (( hue <= (_85YR40[x] + _7YR40[x]) / 2.0) && (hue > (_7YR40[x] + _55YR40[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7YR40[y] - _7YR40[x] ; - lbe = _7YR40[y]; - correctL = true; - } else if (( hue <= (_7YR40[x] + _55YR40[x]) / 2.0) && (hue > (_55YR40[x] + _4YR40[x]) / 2.0) && x < 85 ) { - if(y > 89) { - y = 89; - } - - correction = _55YR40[y] - _55YR40[x] ; - lbe = _55YR40[y]; - correctL = true; - } else if (( hue <= (_55YR40[x] + _4YR40[x]) / 2.0) && (hue > (_4YR40[x] + _25YR40[x]) / 2.0) && x < 85 ) { - if(y > 89) { - y = 89; - } - - correction = _4YR40[y] - _4YR40[x] ; - lbe = _4YR40[y]; - correctL = true; - } else if (( hue <= (_4YR40[x] + _25YR40[x]) / 2.0) && (hue > (_25YR40[x] + _10R40[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _25YR40[y] - _25YR40[x] ; - lbe = _25YR40[y] ; - correctL = true; - } else if (( hue <= (_25YR40[x] + _10R40[x]) / 2.0) && (hue > (_10R40[x] + _9R40[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10R40[y] - _10R40[x] ; - lbe = _10R40[y]; - correctL = true; - } else if (( hue <= (_10R40[x] + _9R40[x]) / 2.0) && (hue > (_9R40[x] + _7R40[x]) / 2.0) && x < 85 ) { - if(y > 89) { - y = 89; - } - - correction = _9R40[y] - _9R40[x] ; - lbe = _9R40[y]; - correctL = true; - } else if (( hue <= (_9R40[x] + _7R40[x]) / 2.0) && (hue > (_7R40[x] - 0.035)) && x < 85 ) { - if(y > 89) { - y = 89; - } - - correction = _7R40[y] - _7R40[x] ; - lbe = _7R40[y]; - correctL = true; - } - } else if (lum < 55.0) { - if( (hue <= (_10YR50[x] + 0.035)) && (hue > (_10YR50[x] + _85YR50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10YR50[y] - _10YR50[x] ; - lbe = _10YR50[y]; - correctL = true; - } else if( (hue <= (_10YR50[x] + _85YR50[x]) / 2.0) && (hue > (_85YR50[x] + _7YR50[x]) / 2.0) && x < 85 ) { - if(y > 89) { - y = 89; - } - - correction = _85YR50[y] - _85YR50[x] ; - lbe = _85YR50[y]; - correctL = true; - } else if (( hue <= (_85YR50[x] + _7YR50[x]) / 2.0) && (hue > (_7YR50[x] + _55YR50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7YR50[y] - _7YR50[x] ; - lbe = _7YR50[y]; - correctL = true; - } else if (( hue <= (_7YR50[x] + _55YR50[x]) / 2.0) && (hue > (_55YR50[x] + _4YR50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _55YR50[y] - _55YR50[x] ; - lbe = _55YR50[y]; - correctL = true; - } else if (( hue <= (_55YR50[x] + _4YR50[x]) / 2.0) && (hue > (_4YR50[x] + _25YR50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _4YR50[y] - _4YR50[x] ; - lbe = _4YR50[y]; - correctL = true; - } else if (( hue <= (_4YR50[x] + _25YR50[x]) / 2.0) && (hue > (_25YR50[x] + _10R50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _25YR50[y] - _25YR50[x] ; - lbe = _25YR50[y]; - correctL = true; - } else if (( hue <= (_25YR50[x] + _10R50[x]) / 2.0) && (hue > (_10R50[x] + _9R50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10R50[y] - _10R50[x] ; - lbe = _10R50[y]; - correctL = true; - } else if (( hue <= (_10R50[x] + _9R50[x]) / 2.0) && (hue > (_9R50[x] + _7R50[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _9R50[y] - _9R50[x] ; - lbe = _9R50[y]; - correctL = true; - } else if (( hue <= (_9R50[x] + _7R50[x]) / 2.0) && (hue > (_7R50[x] - 0.035)) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7R50[y] - _7R50[x] ; - lbe = _7R50[y]; - correctL = true; - } - } else if (lum < 65.0) { - if( (hue <= (_10YR60[x] + 0.035)) && (hue > (_10YR60[x] + _85YR60[x]) / 2.0)) { - ; - correction = _10YR60[y] - _10YR60[x] ; - lbe = _10YR60[y]; - correctL = true; - } else if( (hue <= (_10YR60[x] + _85YR60[x]) / 2.0) && (hue > (_85YR60[x] + _7YR60[x]) / 2.0) ) { - ; - correction = _85YR60[y] - _85YR60[x] ; - lbe = _85YR60[y]; - correctL = true; - } else if (( hue <= (_85YR60[x] + _7YR60[x]) / 2.0) && (hue > (_7YR60[x] + _55YR60[x]) / 2.0)) { - correction = _7YR60[y] - _7YR60[x] ; - lbe = _7YR60[y]; - correctL = true; - } else if (( hue <= (_7YR60[x] + _55YR60[x]) / 2.0) && (hue > (_55YR60[x] + _4YR60[x]) / 2.0)) { - correction = _55YR60[y] - _55YR60[x] ; - lbe = _55YR60[y]; - correctL = true; - } else if (( hue <= (_55YR60[x] + _4YR60[x]) / 2.0) && (hue > (_4YR60[x] + _25YR60[x]) / 2.0)) { - correction = _4YR60[y] - _4YR60[x] ; - lbe = _4YR60[y]; - correctL = true; - } else if (( hue <= (_4YR60[x] + _25YR60[x]) / 2.0) && (hue > (_25YR60[x] + _10R60[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _25YR60[y] - _25YR60[x] ; - lbe = _25YR60[y]; - correctL = true; - } else if (( hue <= (_25YR60[x] + _10R60[x]) / 2.0) && (hue > (_10R60[x] + _9R60[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10R60[y] - _10R60[x] ; - lbe = _10R60[y]; - correctL = true; - } else if (( hue <= (_10R60[x] + _9R60[x]) / 2.0) && (hue > (_9R60[x] + _7R60[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _9R60[y] - _9R60[x] ; - lbe = _9R60[y]; - correctL = true; - } else if (( hue <= (_9R60[x] + _7R60[x]) / 2.0) && (hue > (_7R60[x] - 0.035)) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7R60[y] - _7R60[x] ; - lbe = _7R60[y]; - correctL = true; - } - } else if (lum < 75.0) { - if( (hue <= (_10YR70[x] + 0.035)) && (hue > (_10YR70[x] + _85YR70[x]) / 2.0)) { - correction = _10YR70[y] - _10YR70[x] ; - lbe = _10YR70[y]; - correctL = true; - } else if( (hue <= (_10YR70[x] + _85YR70[x]) / 2.0) && (hue > (_85YR70[x] + _7YR70[x]) / 2.0)) { - correction = _85YR70[y] - _85YR70[x] ; - lbe = _85YR70[y]; - correctL = true; - } - - if (( hue <= (_85YR70[x] + _7YR70[x]) / 2.0) && (hue > (_7YR70[x] + _55YR70[x]) / 2.0)) { - correction = _7YR70[y] - _7YR70[x] ; - lbe = _7YR70[y]; - correctL = true; - } else if (( hue <= (_7YR70[x] + _55YR70[x]) / 2.0) && (hue > (_55YR70[x] + _4YR70[x]) / 2.0)) { - correction = _55YR70[y] - _55YR70[x] ; - lbe = _55YR70[y]; - correctL = true; - } else if (( hue <= (_55YR70[x] + _4YR70[x]) / 2.0) && (hue > (_4YR70[x] + _25YR70[x]) / 2.0)) { - correction = _4YR70[y] - _4YR70[x] ; - lbe = _4YR70[y]; - correctL = true; - } else if (( hue <= (_4YR70[x] + _25YR70[x]) / 2.0) && (hue > (_25YR70[x] + _10R70[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _25YR70[y] - _25YR70[x] ; - lbe = _25YR70[y]; - correctL = true; - } else if (( hue <= (_25YR70[x] + _10R70[x]) / 2.0) && (hue > (_10R70[x] + _9R70[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10R70[y] - _10R70[x] ; - lbe = _10R70[y]; - correctL = true; - } else if (( hue <= (_10R70[x] + _9R70[x]) / 2.0) && (hue > (_9R70[x] + _7R70[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _9R70[y] - _9R70[x] ; - lbe = _9R70[y] ; - correctL = true; - } else if (( hue <= (_9R70[x] + _7R70[x]) / 2.0) && (hue > (_7R70[x] - 0.035)) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7R70[y] - _7R70[x] ; - lbe = _7R70[y]; - correctL = true; - } - } else if (lum < 85.0) { - if( (hue <= (_10YR80[x] + 0.035)) && (hue > (_10YR80[x] + _85YR80[x]) / 2.0)) { - correction = _10YR80[y] - _10YR80[x] ; - lbe = _10YR80[y]; - correctL = true; - } else if( (hue <= (_10YR80[x] + _85YR80[x]) / 2.0) && (hue > (_85YR80[x] + _7YR80[x]) / 2.0)) { - correction = _85YR80[y] - _85YR80[x] ; - lbe = _85YR80[y]; - } else if (( hue <= (_85YR80[x] + _7YR80[x]) / 2.0) && (hue > (_7YR80[x] + _55YR80[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _7YR80[y] - _7YR80[x] ; - lbe = _7YR80[y]; - correctL = true; - } else if (( hue <= (_7YR80[x] + _55YR80[x]) / 2.0) && (hue > (_55YR80[x] + _4YR80[x]) / 2.0) && x < 45) { - correction = _55YR80[y] - _55YR80[x] ; - lbe = _55YR80[y]; - correctL = true; - } else if (( hue <= (_55YR80[x] + _4YR80[x]) / 2.0) && (hue > (_4YR80[x] - 0.035) && x < 45)) { - if(y > 49) { - y = 49; - } - - correction = _4YR80[y] - _4YR80[x] ; - lbe = _4YR80[y] ; - correctL = true; - } - } else if (lum < 95.0) { - if( (hue <= (_10YR90[x] + 0.035)) && (hue > (_10YR90[x] - 0.035) && x < 85)) { - if(y > 89) { - y = 89; - } - - correction = _10YR90[y] - _10YR90[x] ; - lbe = _10YR90[y]; - correctL = true; - } else if ( hue <= (_85YR90[x] + 0.035) && hue > (_85YR90[x] - 0.035) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _85YR90[y] - _85YR90[x] ; - lbe = _85YR90[y]; - correctL = true; - } else if (( hue <= (_55YR90[x] + 0.035) && (hue > (_55YR90[x] - 0.035) && x < 45))) { - if(y > 49) { - y = 49; - } - - correction = _55YR90[y] - _55YR90[x] ; - lbe = _55YR90[y]; - correctL = true; - } - } - } - } - //end red yellow - - //Green yellow correction - else if(zone == 3) { - if (lum >= 25.0) { - if (lum < 35.0) { - if( (hue <= (_7G30[x] + 0.035)) && (hue > (_7G30[x] + _5G30[x]) / 2.0) ) { - correction = _7G30[y] - _7G30[x] ; - lbe = _7G30[y]; - correctL = true; - } else if( (hue <= (_7G30[x] + _5G30[x]) / 2.0) && (hue > (_5G30[x] + _25G30[x]) / 2.0)) { - correction = _5G30[y] - _5G30[x] ; - lbe = _5G30[y]; - correctL = true; - } else if (( hue <= (_25G30[x] + _5G30[x]) / 2.0) && (hue > (_25G30[x] + _1G30[x]) / 2.0)) { - correction = _25G30[y] - _25G30[x] ; - lbe = _25G30[y]; - correctL = true; - } else if (( hue <= (_1G30[x] + _25G30[x]) / 2.0) && (hue > (_1G30[x] + _10GY30[x]) / 2.0)) { - correction = _1G30[y] - _1G30[x] ; - lbe = _1G30[y]; - correctL = true; - } else if (( hue <= (_1G30[x] + _10GY30[x]) / 2.0) && (hue > (_10GY30[x] + _75GY30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10GY30[y] - _10GY30[x] ; - lbe = _10GY30[y]; - correctL = true; - } else if (( hue <= (_10GY30[x] + _75GY30[x]) / 2.0) && (hue > (_75GY30[x] + _5GY30[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _75GY30[y] - _75GY30[x] ; - lbe = _75GY30[y]; - correctL = true; - } else if (( hue <= (_5GY30[x] + _75GY30[x]) / 2.0) && (hue > (_5GY30[x] - 0.035)) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _5GY30[y] - _5GY30[x] ; - lbe = _5GY30[y] ; - correctL = true; - } - } else if (lum < 45.0) { - if( (hue <= (_7G40[x] + 0.035)) && (hue > (_7G40[x] + _5G40[x]) / 2.0) ) { - correction = _7G40[y] - _7G40[x] ; - lbe = _7G40[y]; - correctL = true; - } else if( (hue <= (_7G40[x] + _5G40[x]) / 2.0) && (hue > (_5G40[x] + _25G40[x]) / 2.0)) { - correction = _5G40[y] - _5G40[x] ; - lbe = _5G40[y]; - correctL = true; - } else if (( hue <= (_25G40[x] + _5G40[x]) / 2.0) && (hue > (_25G40[x] + _1G40[x]) / 2.0)) { - correction = _25G40[y] - _25G40[x] ; - lbe = _25G40[y]; - correctL = true; - } else if (( hue <= (_1G40[x] + _25G40[x]) / 2.0) && (hue > (_1G40[x] + _10GY40[x]) / 2.0)) { - correction = _1G40[y] - _1G40[x] ; - lbe = _1G40[y]; - correctL = true; - } else if (( hue <= (_1G40[x] + _10GY40[x]) / 2.0) && (hue > (_10GY40[x] + _75GY40[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _10GY40[y] - _10GY40[x] ; - lbe = _10GY40[y]; - correctL = true; - } else if (( hue <= (_10GY40[x] + _75GY40[x]) / 2.0) && (hue > (_75GY40[x] + _5GY40[x]) / 2.0) && x < 85) { - if(y > 89) { - y = 89; - } - - correction = _75GY40[y] - _75GY40[x] ; - lbe = _75GY40[y]; - correctL = true; - } else if (( hue <= (_5GY40[x] + _75GY40[x]) / 2.0) && (hue > (_5GY40[x] - 0.035)) && x < 85) { - if(y > 89) { - y = 89; // - } - - correction = _5GY40[y] - _5GY40[x] ; - lbe = _5GY40[y]; - correctL = true; - } - } else if (lum < 55.0) { - if( (hue <= (_7G50[x] + 0.035)) && (hue > (_7G50[x] + _5G50[x]) / 2.0) ) { - correction = _7G50[y] - _7G50[x] ; - lbe = _7G50[y]; - correctL = true; - } else if( (hue <= (_7G50[x] + _5G50[x]) / 2.0) && (hue > (_5G50[x] + _25G50[x]) / 2.0)) { - correction = _5G50[y] - _5G50[x] ; - lbe = _5G50[y]; - correctL = true; - } else if (( hue <= (_25G50[x] + _5G50[x]) / 2.0) && (hue > (_25G50[x] + _1G50[x]) / 2.0)) { - correction = _25G50[y] - _25G50[x] ; - lbe = _25G50[y]; - correctL = true; - } else if (( hue <= (_1G50[x] + _25G50[x]) / 2.0) && (hue > (_1G50[x] + _10GY50[x]) / 2.0)) { - correction = _1G50[y] - _1G50[x] ; - lbe = _1G50[y]; - correctL = true; - } else if (( hue <= (_1G50[x] + _10GY50[x]) / 2.0) && (hue > (_10GY50[x] + _75GY50[x]) / 2.0)) { - correction = _10GY50[y] - _10GY50[x] ; - lbe = _10GY50[y]; - correctL = true; - } else if (( hue <= (_10GY50[x] + _75GY50[x]) / 2.0) && (hue > (_75GY50[x] + _5GY50[x]) / 2.0)) { - correction = _75GY50[y] - _75GY50[x] ; - lbe = _75GY50[y]; - correctL = true; - } else if (( hue <= (_5GY50[x] + _75GY50[x]) / 2.0) && (hue > (_5GY50[x] - 0.035))) { - correction = _5GY50[y] - _5GY50[x] ; - lbe = _5GY50[y]; - correctL = true; - } - } else if (lum < 65.0) { - if( (hue <= (_7G60[x] + 0.035)) && (hue > (_7G60[x] + _5G60[x]) / 2.0) ) { - correction = _7G60[y] - _7G60[x] ; - lbe = _7G60[y]; - correctL = true; - } else if( (hue <= (_7G60[x] + _5G60[x]) / 2.0) && (hue > (_5G60[x] + _25G60[x]) / 2.0)) { - correction = _5G60[y] - _5G60[x] ; - lbe = _5G60[y]; - correctL = true; - } else if (( hue <= (_25G60[x] + _5G60[x]) / 2.0) && (hue > (_25G60[x] + _1G60[x]) / 2.0)) { - correction = _25G60[y] - _25G60[x] ; - lbe = _25G60[y]; - correctL = true; - } else if (( hue <= (_1G60[x] + _25G60[x]) / 2.0) && (hue > (_1G60[x] + _10GY60[x]) / 2.0)) { - correction = _1G60[y] - _1G60[x] ; - lbe = _1G60[y]; - correctL = true; - } else if (( hue <= (_1G60[x] + _10GY60[x]) / 2.0) && (hue > (_10GY60[x] + _75GY60[x]) / 2.0)) { - correction = _10GY60[y] - _10GY60[x] ; - lbe = _10GY60[y]; - correctL = true; - } else if (( hue <= (_10GY60[x] + _75GY60[x]) / 2.0) && (hue > (_75GY60[x] + _5GY60[x]) / 2.0)) { - correction = _75GY60[y] - _75GY60[x] ; - lbe = _75GY60[y] ; - correctL = true; - } else if (( hue <= (_5GY60[x] + _75GY60[x]) / 2.0) && (hue > (_5GY60[x] - 0.035))) { - correction = _5GY60[y] - _5GY60[x] ; - lbe = _5GY60[y]; - correctL = true; - } - } else if (lum < 75.0) { - if( (hue <= (_7G70[x] + 0.035)) && (hue > (_7G70[x] + _5G70[x]) / 2.0) ) { - correction = _7G70[y] - _7G70[x] ; - lbe = _7G70[y]; - correctL = true; - } else if( (hue <= (_7G70[x] + _5G70[x]) / 2.0) && (hue > (_5G70[x] + _25G70[x]) / 2.0)) { - correction = _5G70[y] - _5G70[x] ; - lbe = _5G70[y]; - correctL = true; - } else if (( hue <= (_25G70[x] + _5G70[x]) / 2.0) && (hue > (_25G70[x] + _1G70[x]) / 2.0)) { - correction = _25G70[y] - _25G70[x] ; - lbe = _25G70[y]; - correctL = true; - } else if (( hue <= (_1G70[x] + _25G70[x]) / 2.0) && (hue > (_1G70[x] + _10GY70[x]) / 2.0)) { - correction = _1G70[y] - _1G70[x] ; - lbe = _1G70[y] ; - correctL = true; - } else if (( hue <= (_1G70[x] + _10GY70[x]) / 2.0) && (hue > (_10GY70[x] + _75GY70[x]) / 2.0)) { - correction = _10GY70[y] - _10GY70[x] ; - lbe = _10GY70[y]; - correctL = true; - } else if (( hue <= (_10GY70[x] + _75GY70[x]) / 2.0) && (hue > (_75GY70[x] + _5GY70[x]) / 2.0)) { - correction = _75GY70[y] - _75GY70[x] ; - lbe = _75GY70[y]; - correctL = true; - } else if (( hue <= (_5GY70[x] + _75GY70[x]) / 2.0) && (hue > (_5GY70[x] - 0.035))) { - correction = _5GY70[y] - _5GY70[x] ; - lbe = _5GY70[y]; - correctL = true; - } - } else if (lum < 85.0) { - if( (hue <= (_7G80[x] + 0.035)) && (hue > (_7G80[x] + _5G80[x]) / 2.0) ) { - correction = _7G80[y] - _7G80[x] ; - lbe = _7G80[y]; - correctL = true; - } else if( (hue <= (_7G80[x] + _5G80[x]) / 2.0) && (hue > (_5G80[x] + _25G80[x]) / 2.0)) { - correction = _5G80[y] - _5G80[x] ; - lbe = _5G80[y]; - correctL = true; - } else if (( hue <= (_25G80[x] + _5G80[x]) / 2.0) && (hue > (_25G80[x] + _1G80[x]) / 2.0)) { - correction = _25G80[y] - _25G80[x] ; - lbe = _25G80[y]; - correctL = true; - } else if (( hue <= (_1G80[x] + _25G80[x]) / 2.0) && (hue > (_1G80[x] + _10GY80[x]) / 2.0)) { - correction = _1G80[y] - _1G80[x] ; - lbe = _1G80[y]; - correctL = true; - } else if (( hue <= (_1G80[x] + _10GY80[x]) / 2.0) && (hue > (_10GY80[x] + _75GY80[x]) / 2.0)) { - correction = _10GY80[y] - _10GY80[x] ; - lbe = _10GY80[y]; - correctL = true; - } else if (( hue <= (_10GY80[x] + _75GY80[x]) / 2.0) && (hue > (_75GY80[x] + _5GY80[x]) / 2.0)) { - correction = _75GY80[y] - _75GY80[x] ; - lbe = _75GY80[y]; - correctL = true; - } else if (( hue <= (_5GY80[x] + _75GY80[x]) / 2.0) && (hue > (_5GY80[x] - 0.035))) { - correction = _5GY80[y] - _5GY80[x] ; - lbe = _5GY80[y]; - correctL = true; - } - } - } - } - //end green yellow - - //Red purple correction : only for L < 30 - else if(zone == 4) { - if (lum > 5.0) { - if (lum < 15.0) { - if( (hue <= (_5R10[x] + 0.035)) && (hue > (_5R10[x] - 0.043)) && x < 45) { - if(y > 44) { - y = 44; - } - - correction = _5R10[y] - _5R10[x] ; - lbe = _5R10[y]; - correctL = true; - } else if( (hue <= (_25R10[x] + 0.043)) && (hue > (_25R10[x] + _10RP10[x]) / 2.0) && x < 45 ) { - if(y > 44) { - y = 44; - } - - correction = _25R10[y] - _25R10[x] ; - lbe = _25R10[y]; - correctL = true; - } else if ( (hue <= (_25R10[x] + _10RP10[x]) / 2.0) && (hue > (_10RP10[x] - 0.035) ) && x < 45) { - if(y > 44) { - y = 44; - } - - correction = _10RP10[y] - _10RP10[x] ; - lbe = _10RP10[y]; - correctL = true; - } - } else if (lum < 25.0) { - if( (hue <= (_5R20[x] + 0.035)) && (hue > (_5R20[x] + _25R20[x]) / 2.0) && x < 70 ) { - if(y > 70) { - y = 70; - } - - correction = _5R20[y] - _5R20[x] ; - lbe = _5R20[y]; - correctL = true; - } else if( (hue <= (_5R20[x] + _25R20[x]) / 2.0) && (hue > (_10RP20[x] + _25R20[x]) / 2.0) && x < 70) { - if(y > 70) { - y = 70; - } - - correction = _25R20[y] - _25R20[x] ; - lbe = _25R20[y]; - correctL = true; - } else if (( hue <= (_10RP20[x] + _25R20[x]) / 2.0) && (hue > (_10RP20[x] - 0.035)) && x < 70) { - if(y > 70) { - y = 70; - } - - correction = _10RP20[y] - _10RP20[x] ; - lbe = _10RP20[y]; - correctL = true; - } - } else if (lum < 35.0) { - if( (hue <= (_5R30[x] + 0.035)) && (hue > (_5R30[x] + _25R30[x]) / 2.0) && x < 85 ) { - if(y > 85) { - y = 85; - } - - correction = _5R30[y] - _5R30[x] ; - lbe = _5R30[y]; - correctL = true; - } else if( (hue <= (_5R30[x] + _25R30[x]) / 2.0) && (hue > (_10RP30[x] + _25R30[x]) / 2.0) && x < 85) { - if(y > 85) { - y = 85; - } - - correction = _25R30[y] - _25R30[x] ; - lbe = _25R30[y]; - correctL = true; - } else if (( hue <= (_10RP30[x] + _25R30[x]) / 2.0) && (hue > (_10RP30[x] - 0.035)) && x < 85) { - if(y > 85) { - y = 85; - } - - correction = _10RP30[y] - _10RP30[x] ; - lbe = _10RP30[y]; - correctL = true; - } - } - } - } - - //end red purple -} - - /* * SkinSat * Copyright (c)2011 Jacques Desmis diff --git a/rtengine/color.h b/rtengine/color.h index 998e47ee7..b48b1e907 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -20,16 +20,16 @@ #pragma once #include -#include #include "rt_math.h" #include "LUT.h" -#include "iccmatrices.h" #include "lcms2.h" #include "sleef.h" -#define SAT(a,b,c) ((float)max(a,b,c)-(float)min(a,b,c))/(float)max(a,b,c) - +namespace Glib +{ +class ustring; +} namespace rtengine { diff --git a/rtengine/curves.cc b/rtengine/curves.cc index b2105a091..ac1f9fccc 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -33,6 +33,7 @@ #include "opthelper.h" #include "ciecam02.h" #include "color.h" +#include "iccmatrices.h" #include "iccstore.h" using namespace std; diff --git a/rtengine/munselllch.cc b/rtengine/munselllch.cc new file mode 100644 index 000000000..b1ec305f6 --- /dev/null +++ b/rtengine/munselllch.cc @@ -0,0 +1,1232 @@ +/* +* This file is part of RawTherapee. +* +* Copyright (c) 2004-2010 Gabor Horvath +* +* RawTherapee is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* RawTherapee is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with RawTherapee. If not, see . +*/ + +#include "color.h" + +using namespace std; + +namespace rtengine +{ + +/* + * MunsellLch correction + * Copyright (c) 2012 Jacques Desmis + * Copyright (c) 2020 Ingo Weyrich + * + * Find the right LUT and calculate the correction + */ +void Color::MunsellLch (float lum, float hue, float chrom, float memChprov, float &correction, int zone, float &lbe, bool &correctL) +{ + + const int x = memChprov; + int y = chrom; + + //begin PB correction + sky + if (zone == 1) { + if (lum > 5.f) { + if (lum < 15.f) { + if (x <= 45 && (hue >= (_15PB10[x] - 0.035f)) && (hue < (_15PB10[x] + 0.052f))) { + if (y > 49) { + y = 49; + } + correction = _15PB10[y] - _15PB10[x] ; + lbe = _15PB10[y]; + correctL = true; + } else if (x <= 85 && (hue >= ( _3PB10[x] - 0.052f)) && (hue < (_45PB10[x] + _3PB10[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _3PB10[y] - _3PB10[x]; + lbe = _3PB10[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_45PB10[x] + _3PB10[x]) * 0.5f) && (hue < (_45PB10[x] + 0.052f))) { + if (y > 89) { + y = 89; + } + correction = _45PB10[y] - _45PB10[x] ; + lbe = _45PB10[y]; + correctL = true; + } else if ((hue >= (_6PB10[x] - 0.052f) && (hue < (_6PB10[x] + _75PB10[x]) * 0.5f))) { + correction = _6PB10[y] - _6PB10[x] ; + lbe = _6PB10[y]; + correctL = true; + } else if ((hue >= (_6PB10[x] + _75PB10[x]) * 0.5f) && (hue < (_9PB10[x] + _75PB10[x]) * 0.5f)) { + correction = _75PB10[y] - _75PB10[x] ; + lbe = _75PB10[y]; + correctL = true; + } else if ((hue >= (_9PB10[x] + _75PB10[x]) * 0.5f) && (hue < (_9PB10[x] + _10PB10[x]) * 0.5f)) { + correction = _9PB10[y] - _9PB10[x] ; + lbe = _9PB10[y]; + correctL = true; + } else if ((hue >= (_10PB10[x] + _9PB10[x]) * 0.5f) && (hue < (_1P10[x] + _10PB10[x]) * 0.5f)) { + correction = _10PB10[y] - _10PB10[x] ; + lbe = _10PB10[y]; + correctL = true; + } else if ((hue >= (_10PB10[x] + _1P10[x]) * 0.5f) && (hue < (_1P10[x] + _4P10[x]) * 0.5f)) { + correction = _1P10[y] - _1P10[x]; + lbe = _1P10[y]; + correctL = true; + } else if ((hue >= (_1P10[x] + _4P10[x]) * 0.5f) && (hue < (0.035f + _4P10[x]) * 0.5f)) { + correction = _4P10[y] - _4P10[x] ; + lbe = _4P10[y]; + correctL = true; + } + } else if (lum < 25.f) { + if (x <= 85 && (hue >= (_15PB20[x] - 0.035f)) && (hue < (_15PB20[x] + _3PB20[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _15PB20[y] - _15PB20[x] ; + lbe = _15PB20[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB20[x] + _3PB20[x]) * 0.5f) && (hue < (_45PB20[x] + _3PB20[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _3PB20[y] - _3PB20[x] ; + lbe = _3PB20[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_45PB20[x] + _3PB20[x]) * 0.5f) && (hue < ( _45PB20[x] + 0.052f))) { + if (y > 89) { + y = 89; + } + correction = _45PB20[y] - _45PB20[x] ; + lbe = _45PB20[y]; + correctL = true; + } else if ((hue >= (_45PB20[x] + 0.052f)) && (hue < (_6PB20[x] + _75PB20[x]) * 0.5f)) { + correction = _6PB20[y] - _6PB20[x]; + lbe = _6PB20[y]; + correctL = true; + } else if ((hue >= (_6PB20[x] + _75PB20[x]) * 0.5f) && (hue < (_9PB20[x] + _75PB20[x]) * 0.5f)) { + correction = _75PB20[y] - _75PB20[x] ; + lbe = _75PB20[y]; + correctL = true; + } else if ((hue >= (_9PB20[x] + _75PB20[x]) * 0.5f) && (hue < (_9PB20[x] + _10PB20[x]) * 0.5f)) { + correction = _9PB20[y] - _9PB20[x] ; + lbe = _9PB20[y]; + correctL = true; + } else if ((hue >= (_10PB20[x] + _9PB20[x]) * 0.5f) && (hue < (_1P20[x] + _10PB20[x]) * 0.5f)) { + correction = _10PB20[y] - _10PB20[x] ; + lbe = _10PB20[y]; + correctL = true; + } else if ((hue >= (_10PB20[x] + _1P20[x]) * 0.5f) && (hue < (_1P20[x] + _4P20[x]) * 0.5f)) { + correction = _1P20[y] - _1P20[x] ; + lbe = _1P20[y]; + correctL = true; + } else if ((hue >= (_1P20[x] + _4P20[x]) * 0.5f) && (hue < (0.035f + _4P20[x]) * 0.5f)) { + correction = _4P20[y] - _4P20[x] ; + lbe = _4P20[y]; + correctL = true; + } + } else if (lum < 35.f) { + if (x <= 85 && (hue >= (_15PB30[x] - 0.035f)) && (hue < (_15PB30[x] + _3PB30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _15PB30[y] - _15PB30[x] ; + lbe = _15PB30[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB30[x] + _3PB30[x]) * 0.5f) && (hue < (_45PB30[x] + _3PB30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _3PB30[y] - _3PB30[x] ; + lbe = _3PB30[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_45PB30[x] + _3PB30[x]) * 0.5f) && (hue < (_45PB30[x] + 0.052f))) { + if (y > 89) { + y = 89; + } + correction = _45PB30[y] - _45PB30[x] ; + lbe = _45PB30[y]; + correctL = true; + } else if ((hue >= ( _45PB30[x] + 0.052f)) && (hue < (_6PB30[x] + _75PB30[x]) * 0.5f)) { + correction = _6PB30[y] - _6PB30[x] ; + lbe = _6PB30[y]; + correctL = true; + } else if ((hue >= (_6PB30[x] + _75PB30[x]) * 0.5f) && (hue < (_9PB30[x] + _75PB30[x]) * 0.5f)) { + correction = _75PB30[y] - _75PB30[x] ; + lbe = _75PB30[y] ; + correctL = true; + } else if ((hue >= (_9PB30[x] + _75PB30[x]) * 0.5f) && (hue < (_9PB30[x] + _10PB30[x]) * 0.5f)) { + correction = _9PB30[y] - _9PB30[x] ; + lbe = _9PB30[y]; + correctL = true; + } else if ((hue >= (_10PB30[x] + _9PB30[x]) * 0.5f) && (hue < (_1P30[x] + _10PB30[x]) * 0.5f)) { + correction = _10PB30[y] - _10PB30[x] ; + lbe = _10PB30[y]; + correctL = true; + } else if ((hue >= (_10PB30[x] + _1P30[x]) * 0.5f) && (hue < (_1P30[x] + _4P30[x]) * 0.5f)) { + correction = _1P30[y] - _1P30[x] ; + lbe = _1P30[y]; + correctL = true; + } else if ((hue >= (_1P30[x] + _4P30[x]) * 0.5f) && (hue < (0.035f + _4P30[x]) * 0.5f)) { + correction = _4P30[y] - _4P30[x] ; + lbe = _4P30[y]; + correctL = true; + } + } else if (lum < 45.f) { + if (x < 75 && (hue <= (_05PB40[x] + _15PB40[x]) * 0.5f) && (hue > (_05PB40[x] + _10B40[x]) * 0.5f)) { + if (y > 75) { + y = 75; + } + correction = _05PB40[y] - _05PB40[x] ; + lbe = _05PB40[y]; + correctL = true; + } else if (x < 70 && (hue <= (_05PB40[x] + _10B40[x]) * 0.5f) && (hue > (_10B40[x] + _9B40[x]) * 0.5f)) { + if (y > 70) { + y = 70; + } + correction = _10B40[y] - _10B40[x] ; + lbe = _10B40[y]; + correctL = true; + } else if (x < 70 && (hue <= (_10B40[x] + _9B40[x]) * 0.5f) && (hue > (_9B40[x] + _7B40[x]) * 0.5f)) { + if (y > 70) { + y = 70; + } + correction = _9B40[y] - _9B40[x] ; + lbe = _9B40[y]; + correctL = true; + } else if (x < 70 && (hue <= (_9B40[x] + _7B40[x]) * 0.5f) && (hue > (_5B40[x] + _7B40[x]) * 0.5f)) { + if (y > 70) { + y = 70; + } + correction = _7B40[y] - _7B40[x] ; + lbe = _7B40[y]; + correctL = true; + } else if (x < 70 && (hue <= (_5B40[x] + _7B40[x]) * 0.5f) && (hue > (_5B40[x] - 0.035f))) { + if (y > 70) { + y = 70; // + } + correction = _5B40[y] - _5B40[x] ; + lbe = _5B40[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB40[x] - 0.035f)) && (hue < (_15PB40[x] + _3PB40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _15PB40[y] - _15PB40[x] ; + lbe = _15PB40[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB40[x] + _3PB40[x]) * 0.5f) && (hue < (_45PB40[x] + _3PB40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _3PB40[y] - _3PB40[x] ; + lbe = _3PB40[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_45PB40[x] + _3PB40[x]) * 0.5f) && (hue < (_45PB40[x] + 0.052f))) { + if (y > 89) { + y = 89; + } + correction = _45PB40[y] - _45PB40[x] ; + lbe = _45PB40[y] ; + correctL = true; + } else if ((hue >= (_45PB40[x] + 0.052f)) && (hue < (_6PB40[x] + _75PB40[x]) * 0.5f)) { + correction = _6PB40[y] - _6PB40[x] ; + lbe = _6PB40[y]; + correctL = true; + } else if ((hue >= (_6PB40[x] + _75PB40[x]) * 0.5f) && (hue < (_9PB40[x] + _75PB40[x]) * 0.5f)) { + correction = _75PB40[y] - _75PB40[x] ; + lbe = _75PB40[y]; + correctL = true; + } else if ((hue >= (_9PB40[x] + _75PB40[x]) * 0.5f) && (hue < (_9PB40[x] + _10PB40[x]) * 0.5f)) { + correction = _9PB40[y] - _9PB40[x] ; + lbe = _9PB40[y]; + correctL = true; + } else if ((hue >= (_10PB40[x] + _9PB40[x]) * 0.5f) && (hue < (_1P40[x] + _10PB40[x]) * 0.5f)) { + correction = _10PB40[y] - _10PB40[x] ; + lbe = _10PB40[y]; + correctL = true; + } else if ((hue >= (_10PB40[x] + _1P40[x]) * 0.5f) && (hue < (_1P40[x] + _4P40[x]) * 0.5f)) { + correction = _1P40[y] - _1P40[x] ; + lbe = _1P40[y]; + correctL = true; + } else if ((hue >= (_1P40[x] + _4P40[x]) * 0.5f) && (hue < (0.035f + _4P40[x]) * 0.5f)) { + correction = _4P40[y] - _4P40[x] ; + lbe = _4P40[y]; + correctL = true; + } + } else if (lum < 55.f) { + if (x < 79 && (hue <= (_05PB50[x] + _15PB50[x]) * 0.5f) && (hue > (_05PB50[x] + _10B50[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _05PB50[y] - _05PB50[x] ; + lbe = _05PB50[y]; + correctL = true; + } else if (x < 79 && (hue <= (_05PB50[x] + _10B50[x]) * 0.5f) && (hue > (_10B50[x] + _9B50[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _10B50[y] - _10B50[x] ; + lbe = _10B50[y]; + correctL = true; + } else if (x < 79 && (hue <= (_10B50[x] + _9B50[x]) * 0.5f) && (hue > (_9B50[x] + _7B50[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _9B50[y] - _9B50[x] ; + lbe = _9B50[y]; + correctL = true; + } else if (x < 79 && (hue <= (_9B50[x] + _7B50[x]) * 0.5f) && (hue > (_5B50[x] + _7B50[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _7B50[y] - _7B50[x] ; + lbe = _7B50[y]; + correctL = true; + } else if (x < 79 && (hue <= (_5B50[x] + _7B50[x]) * 0.5f) && (hue > (_5B50[x] - 0.035f))) { + if (y > 79) { + y = 79; // + } + correction = _5B50[y] - _5B50[x] ; + lbe = _5B50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB50[x] - 0.035f)) && (hue < (_15PB50[x] + _3PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _15PB50[y] - _15PB50[x] ; + lbe = _15PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB50[x] + _3PB50[x]) * 0.5f) && (hue < (_45PB50[x] + _3PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _3PB50[y] - _3PB50[x] ; + lbe = _3PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_45PB50[x] + _3PB50[x]) * 0.5f) && (hue < (_6PB50[x] + _45PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _45PB50[y] - _45PB50[x] ; + lbe = _45PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_6PB50[x] + _45PB50[x]) * 0.5f) && (hue < (_6PB50[x] + _75PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _6PB50[y] - _6PB50[x] ; + lbe = _6PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_6PB50[x] + _75PB50[x]) * 0.5f) && (hue < (_9PB50[x] + _75PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _75PB50[y] - _75PB50[x] ; + lbe = _75PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_9PB50[x] + _75PB50[x]) * 0.5f) && (hue < (_9PB50[x] + _10PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9PB50[y] - _9PB50[x] ; + lbe = _9PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_10PB50[x] + _9PB50[x]) * 0.5f) && (hue < (_1P50[x] + _10PB50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10PB50[y] - _10PB50[x] ; + lbe = _10PB50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_10PB50[x] + _1P50[x]) * 0.5f) && (hue < (_1P50[x] + _4P50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _1P50[y] - _1P50[x] ; + lbe = _1P50[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_1P50[x] + _4P50[x]) * 0.5f) && (hue < (0.035f + _4P50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _4P50[y] - _4P50[x] ; + lbe = _4P50[y]; + correctL = true; + } + } else if (lum < 65.f) { + if (x < 79 && (hue <= (_05PB60[x] + _15PB60[x]) * 0.5f) && (hue > (_05PB60[x] + _10B60[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _05PB60[y] - _05PB60[x] ; + lbe = _05PB60[y]; + correctL = true; + } else if (x < 79 && (hue <= (_05PB60[x] + _10B60[x]) * 0.5f) && (hue > (_10B60[x] + _9B60[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _10B60[y] - _10B60[x] ; + lbe = _10B60[y]; + correctL = true; + } else if (x < 79 && (hue <= (_10B60[x] + _9B60[x]) * 0.5f) && (hue > (_9B60[x] + _7B60[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _9B60[y] - _9B60[x] ; + lbe = _9B60[y]; + correctL = true; + } else if (x < 79 && (hue <= (_9B60[x] + _7B60[x]) * 0.5f) && (hue > (_5B60[x] + _7B60[x]) * 0.5f)) { + if (y > 79) { + y = 79; + } + correction = _7B60[y] - _7B60[x] ; + lbe = _7B60[y]; + correctL = true; + } else if (x < 79 && (hue <= (_5B60[x] + _7B60[x]) * 0.5f) && (hue > (_5B60[x] - 0.035f))) { + if (y > 79) { + y = 79; // + } + correction = _5B60[y] - _5B60[x] ; + lbe = _5B60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB60[x] - 0.035f)) && (hue < (_15PB60[x] + _3PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _15PB60[y] - _15PB60[x] ; + lbe = _15PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_15PB60[x] + _3PB60[x]) * 0.5f) && (hue < (_45PB60[x] + _3PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _3PB60[y] - _3PB60[x] ; + lbe = _3PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_45PB60[x] + _3PB60[x]) * 0.5f) && (hue < (_6PB60[x] + _45PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _45PB60[y] - _45PB60[x] ; + lbe = _45PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_6PB60[x] + _45PB60[x]) * 0.5f) && (hue < (_6PB60[x] + _75PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _6PB60[y] - _6PB60[x] ; + lbe = _6PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_6PB60[x] + _75PB60[x]) * 0.5f) && (hue < (_9PB60[x] + _75PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _75PB60[y] - _75PB60[x] ; + lbe = _75PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_9PB60[x] + _75PB60[x]) * 0.5f) && (hue < (_9PB60[x] + _10PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9PB60[y] - _9PB60[x] ; + lbe = _9PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_10PB60[x] + _9PB60[x]) * 0.5f) && (hue < (_1P60[x] + _10PB60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10PB60[y] - _10PB60[x] ; + lbe = _10PB60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_10PB60[x] + _1P60[x]) * 0.5f) && (hue < (_1P60[x] + _4P60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _1P60[y] - _1P60[x] ; + lbe = _1P60[y]; + correctL = true; + } else if (x <= 85 && (hue >= (_1P60[x] + _4P60[x]) * 0.5f) && (hue < (0.035f + _4P60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _4P60[y] - _4P60[x] ; + lbe = _4P60[y]; + correctL = true; + } + } else if (lum < 75.f) { + if (x < 50 && (hue <= (_05PB70[x] + _15PB70[x]) * 0.5f) && (hue > (_05PB70[x] + _10B70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _05PB70[y] - _05PB70[x] ; + lbe = _05PB70[y]; + correctL = true; + } else if (x < 50 && (hue <= (_05PB70[x] + _10B70[x]) * 0.5f) && (hue > (_10B70[x] + _9B70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _10B70[y] - _10B70[x] ; + lbe = _10B70[y]; + correctL = true; + } else if (x < 50 && (hue <= (_10B70[x] + _9B70[x]) * 0.5f) && (hue > (_9B70[x] + _7B70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _9B70[y] - _9B70[x] ; + lbe = _9B70[y]; + correctL = true; + } else if (x < 50 && (hue <= (_9B70[x] + _7B70[x]) * 0.5f) && (hue > (_5B70[x] + _7B70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _7B70[y] - _7B70[x] ; + lbe = _7B70[y]; + correctL = true; + } else if (x < 50 && (hue <= (_5B70[x] + _7B70[x]) * 0.5f) && (hue > (_5B70[x] - 0.035f))) { + if (y > 49) { + y = 49; // + } + correction = _5B70[y] - _5B70[x] ; + lbe = _5B70[y]; + correctL = true; + } else if (x < 50 && (hue >= (_15PB70[x] - 0.035f)) && (hue < (_15PB70[x] + _3PB70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _15PB70[y] - _15PB70[x] ; + lbe = _15PB70[y]; + correctL = true; + } else if (x < 50 && (hue >= (_45PB70[x] + _3PB70[x]) * 0.5f) && (hue < (_6PB70[x] + _45PB70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _45PB70[y] - _45PB70[x] ; + lbe = _45PB70[y]; + correctL = true; + } else if (x < 50 && (hue >= (_6PB70[x] + _45PB70[x]) * 0.5f) && (hue < (_6PB70[x] + _75PB70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _6PB70[y] - _6PB70[x] ; + lbe = _6PB70[y]; + correctL = true; + } else if (x < 50 && (hue >= (_6PB70[x] + _75PB70[x]) * 0.5f) && (hue < (_9PB70[x] + _75PB70[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _75PB70[y] - _75PB70[x] ; + lbe = _75PB70[y]; + correctL = true; + } else if (x < 50 && (hue >= (_9PB70[x] + _75PB70[x]) * 0.5f) && (hue < (_9PB70[x] + 0.035f))) { + if (y > 49) { + y = 49; + } + correction = _9PB70[y] - _9PB70[x] ; + lbe = _9PB70[y]; + correctL = true; + } + } else if (lum < 85.f) { + if (x < 40 && (hue <= (_05PB80[x] + _15PB80[x]) * 0.5f) && (hue > (_05PB80[x] + _10B80[x]) * 0.5f)) { + if (y > 39) { + y = 39; + } + correction = _05PB80[y] - _05PB80[x] ; + lbe = _05PB80[y] ; + correctL = true; + } else if (x < 40 && (hue <= (_05PB80[x] + _10B80[x]) * 0.5f) && (hue > (_10B80[x] + _9B80[x]) * 0.5f)) { + if (y > 39) { + y = 39; + } + correction = _10B80[y] - _10B80[x] ; + lbe = _10B80[y]; + correctL = true; + } else if (x < 40 && (hue <= (_10B80[x] + _9B80[x]) * 0.5f) && (hue > (_9B80[x] + _7B80[x]) * 0.5f)) { + if (y > 39) { + y = 39; + } + correction = _9B80[y] - _9B80[x] ; + lbe = _9B80[y]; + correctL = true; + } else if (x < 50 &&(hue <= (_9B80[x] + _7B80[x]) * 0.5f) && (hue > (_5B80[x] + _7B80[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _7B80[y] - _7B80[x] ; + lbe = _7B80[y]; + correctL = true; + } else if (x < 50 && (hue <= (_5B80[x] + _7B80[x]) * 0.5f) && (hue > (_5B80[x] - 0.035f))) { + if (y > 49) { + y = 49; // + } + correction = _5B80[y] - _5B80[x] ; + lbe = _5B80[y]; + correctL = true; + } else if (x < 50 && (hue >= (_15PB80[x] - 0.035f)) && (hue < (_15PB80[x] + _3PB80[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _15PB80[y] - _15PB80[x] ; + lbe = _15PB80[y]; + correctL = true; + } else if (x < 50 && (hue >= (_45PB80[x] + _3PB80[x]) * 0.5f) && (hue < (_6PB80[x] + _45PB80[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _45PB80[y] - _45PB80[x] ; + lbe = _45PB80[y]; + correctL = true; + } else if (x < 50 && (hue >= (_6PB80[x] + _45PB80[x]) * 0.5f) && (hue < (_6PB80[x] + _75PB80[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _6PB80[y] - _6PB80[x] ; + lbe = _6PB80[y]; + correctL = true; + } else if (x < 50 && (hue >= (_6PB80[x] + _75PB80[x]) * 0.5f) && (hue < (_9PB80[x] + _75PB80[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _75PB80[y] - _75PB80[x] ; + lbe = _75PB80[y]; + correctL = true; + } else if (x < 50 && (hue >= (_9PB80[x] + _75PB80[x]) * 0.5f) && (hue < (_9PB80[x] + 0.035f))) { + if (y > 49) { + y = 49; + } + correction = _9PB80[y] - _9PB80[x] ; + lbe = _9PB80[y]; + correctL = true; + } + } + } + } else if (zone == 2) { //red yellow correction + if (lum > 15.f) { + if (lum < 25.f) { + if (x <= 45 && (hue <= (_10YR20[x] + 0.035f)) && (hue > (_10YR20[x] + _85YR20[x]) * 0.5f)) { + if (y > 49) { + y = 49; + } + correction = _10YR20[y] - _10YR20[x] ; + lbe = _10YR20[y]; + correctL = true; + } else if (x <= 45 && (hue <= (_85YR20[x] + _10YR20[x]) * 0.5f) && (hue > (_85YR20[x] + 0.035f))) { + if (y > 49) { + y = 49; + } + correction = _85YR20[y] - _85YR20[x] ; + lbe = _85YR20[y]; + correctL = true; + } + } else if (lum < 35.f) { + if (x < 85 && (hue <= (_10YR30[x] + 0.035f)) && (hue > (_10YR30[x] + _85YR30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10YR30[y] - _10YR30[x] ; + lbe = _10YR30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10YR30[x] + _85YR30[x]) * 0.5f) && (hue > (_85YR30[x] + _7YR30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _85YR30[y] - _85YR30[x] ; + lbe = _85YR30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_85YR30[x] + _7YR30[x]) * 0.5f) && (hue > (_7YR30[x] + _55YR30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _7YR30[y] - _7YR30[x] ; + lbe = _7YR30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_7YR30[x] + _55YR30[x]) * 0.5f) && (hue > (_55YR30[x] + _4YR30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _55YR30[y] - _55YR30[x] ; + lbe = _55YR30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_55YR30[x] + _4YR30[x]) * 0.5f) && (hue > (_4YR30[x] + _25YR30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _4YR30[y] - _4YR30[x] ; + lbe = _4YR30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_4YR30[x] + _25YR30[x]) * 0.5f) && (hue > (_25YR30[x] + _10R30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _25YR30[y] - _25YR30[x] ; + lbe = _25YR30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_25YR30[x] + _10R30[x]) * 0.5f) && (hue > (_10R30[x] + _9R30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10R30[y] - _10R30[x] ; + lbe = _10R30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10R30[x] + _9R30[x]) * 0.5f) && (hue > (_9R30[x] + _7R30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9R30[y] - _9R30[x] ; + lbe = _9R30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_9R30[x] + _7R30[x]) * 0.5f) && (hue > (_7R30[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + + correction = _7R30[y] - _7R30[x] ; + lbe = _7R30[y] ; + correctL = true; + } + } else if (lum < 45.f) { + if (x < 85 && (hue <= (_10YR40[x] + 0.035f)) && (hue > (_10YR40[x] + _85YR40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10YR40[y] - _10YR40[x] ; + lbe = _10YR40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10YR40[x] + _85YR40[x]) * 0.5f) && (hue > (_85YR40[x] + _7YR40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _85YR40[y] - _85YR40[x] ; + lbe = _85YR40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_85YR40[x] + _7YR40[x]) * 0.5f) && (hue > (_7YR40[x] + _55YR40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _7YR40[y] - _7YR40[x] ; + lbe = _7YR40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_7YR40[x] + _55YR40[x]) * 0.5f) && (hue > (_55YR40[x] + _4YR40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _55YR40[y] - _55YR40[x] ; + lbe = _55YR40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_55YR40[x] + _4YR40[x]) * 0.5f) && (hue > (_4YR40[x] + _25YR40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _4YR40[y] - _4YR40[x] ; + lbe = _4YR40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_4YR40[x] + _25YR40[x]) * 0.5f) && (hue > (_25YR40[x] + _10R40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _25YR40[y] - _25YR40[x] ; + lbe = _25YR40[y] ; + correctL = true; + } else if (x < 85 && (hue <= (_25YR40[x] + _10R40[x]) * 0.5f) && (hue > (_10R40[x] + _9R40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10R40[y] - _10R40[x] ; + lbe = _10R40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10R40[x] + _9R40[x]) * 0.5f) && (hue > (_9R40[x] + _7R40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9R40[y] - _9R40[x] ; + lbe = _9R40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_9R40[x] + _7R40[x]) * 0.5f) && (hue > (_7R40[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + correction = _7R40[y] - _7R40[x] ; + lbe = _7R40[y]; + correctL = true; + } + } else if (lum < 55.f) { + if (x < 85 && (hue <= (_10YR50[x] + 0.035f)) && (hue > (_10YR50[x] + _85YR50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10YR50[y] - _10YR50[x] ; + lbe = _10YR50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10YR50[x] + _85YR50[x]) * 0.5f) && (hue > (_85YR50[x] + _7YR50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _85YR50[y] - _85YR50[x] ; + lbe = _85YR50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_85YR50[x] + _7YR50[x]) * 0.5f) && (hue > (_7YR50[x] + _55YR50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _7YR50[y] - _7YR50[x] ; + lbe = _7YR50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_7YR50[x] + _55YR50[x]) * 0.5f) && (hue > (_55YR50[x] + _4YR50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _55YR50[y] - _55YR50[x] ; + lbe = _55YR50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_55YR50[x] + _4YR50[x]) * 0.5f) && (hue > (_4YR50[x] + _25YR50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _4YR50[y] - _4YR50[x] ; + lbe = _4YR50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_4YR50[x] + _25YR50[x]) * 0.5f) && (hue > (_25YR50[x] + _10R50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _25YR50[y] - _25YR50[x] ; + lbe = _25YR50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_25YR50[x] + _10R50[x]) * 0.5f) && (hue > (_10R50[x] + _9R50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10R50[y] - _10R50[x] ; + lbe = _10R50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10R50[x] + _9R50[x]) * 0.5f) && (hue > (_9R50[x] + _7R50[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9R50[y] - _9R50[x] ; + lbe = _9R50[y]; + correctL = true; + } else if (x < 85 && (hue <= (_9R50[x] + _7R50[x]) * 0.5f) && (hue > (_7R50[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + correction = _7R50[y] - _7R50[x] ; + lbe = _7R50[y]; + correctL = true; + } + } else if (lum < 65.f) { + if ((hue <= (_10YR60[x] + 0.035f)) && (hue > (_10YR60[x] + _85YR60[x]) * 0.5f)) { + correction = _10YR60[y] - _10YR60[x] ; + lbe = _10YR60[y]; + correctL = true; + } else if ((hue <= (_10YR60[x] + _85YR60[x]) * 0.5f) && (hue > (_85YR60[x] + _7YR60[x]) * 0.5f)) { + correction = _85YR60[y] - _85YR60[x] ; + lbe = _85YR60[y]; + correctL = true; + } else if ((hue <= (_85YR60[x] + _7YR60[x]) * 0.5f) && (hue > (_7YR60[x] + _55YR60[x]) * 0.5f)) { + correction = _7YR60[y] - _7YR60[x] ; + lbe = _7YR60[y]; + correctL = true; + } else if ((hue <= (_7YR60[x] + _55YR60[x]) * 0.5f) && (hue > (_55YR60[x] + _4YR60[x]) * 0.5f)) { + correction = _55YR60[y] - _55YR60[x] ; + lbe = _55YR60[y]; + correctL = true; + } else if ((hue <= (_55YR60[x] + _4YR60[x]) * 0.5f) && (hue > (_4YR60[x] + _25YR60[x]) * 0.5f)) { + correction = _4YR60[y] - _4YR60[x] ; + lbe = _4YR60[y]; + correctL = true; + } else if (x < 85 && (hue <= (_4YR60[x] + _25YR60[x]) * 0.5f) && (hue > (_25YR60[x] + _10R60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _25YR60[y] - _25YR60[x] ; + lbe = _25YR60[y]; + correctL = true; + } else if (x < 85 && (hue <= (_25YR60[x] + _10R60[x]) * 0.5f) && (hue > (_10R60[x] + _9R60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10R60[y] - _10R60[x] ; + lbe = _10R60[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10R60[x] + _9R60[x]) * 0.5f) && (hue > (_9R60[x] + _7R60[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9R60[y] - _9R60[x] ; + lbe = _9R60[y]; + correctL = true; + } else if (x < 85 && (hue <= (_9R60[x] + _7R60[x]) * 0.5f) && (hue > (_7R60[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + correction = _7R60[y] - _7R60[x] ; + lbe = _7R60[y]; + correctL = true; + } + } else if (lum < 75.f) { + if ((hue <= (_10YR70[x] + 0.035f)) && (hue > (_10YR70[x] + _85YR70[x]) * 0.5f)) { + correction = _10YR70[y] - _10YR70[x] ; + lbe = _10YR70[y]; + correctL = true; + } else if ((hue <= (_10YR70[x] + _85YR70[x]) * 0.5f) && (hue > (_85YR70[x] + _7YR70[x]) * 0.5f)) { + correction = _85YR70[y] - _85YR70[x] ; + lbe = _85YR70[y]; + correctL = true; + } else if ((hue <= (_85YR70[x] + _7YR70[x]) * 0.5f) && (hue > (_7YR70[x] + _55YR70[x]) * 0.5f)) { + correction = _7YR70[y] - _7YR70[x] ; + lbe = _7YR70[y]; + correctL = true; + } else if ((hue <= (_7YR70[x] + _55YR70[x]) * 0.5f) && (hue > (_55YR70[x] + _4YR70[x]) * 0.5f)) { + correction = _55YR70[y] - _55YR70[x] ; + lbe = _55YR70[y]; + correctL = true; + } else if ((hue <= (_55YR70[x] + _4YR70[x]) * 0.5f) && (hue > (_4YR70[x] + _25YR70[x]) * 0.5f)) { + correction = _4YR70[y] - _4YR70[x] ; + lbe = _4YR70[y]; + correctL = true; + } else if (x < 85 && (hue <= (_4YR70[x] + _25YR70[x]) * 0.5f) && (hue > (_25YR70[x] + _10R70[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _25YR70[y] - _25YR70[x] ; + lbe = _25YR70[y]; + correctL = true; + } else if (x < 85 && (hue <= (_25YR70[x] + _10R70[x]) * 0.5f) && (hue > (_10R70[x] + _9R70[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10R70[y] - _10R70[x] ; + lbe = _10R70[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10R70[x] + _9R70[x]) * 0.5f) && (hue > (_9R70[x] + _7R70[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _9R70[y] - _9R70[x] ; + lbe = _9R70[y] ; + correctL = true; + } else if (x < 85 && (hue <= (_9R70[x] + _7R70[x]) * 0.5f) && (hue > (_7R70[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + correction = _7R70[y] - _7R70[x] ; + lbe = _7R70[y]; + correctL = true; + } + } else if (lum < 85.f) { + if ((hue <= (_10YR80[x] + 0.035f)) && (hue > (_10YR80[x] + _85YR80[x]) * 0.5f)) { + correction = _10YR80[y] - _10YR80[x] ; + lbe = _10YR80[y]; + correctL = true; + } else if ((hue <= (_10YR80[x] + _85YR80[x]) * 0.5f) && (hue > (_85YR80[x] + _7YR80[x]) * 0.5f)) { + correction = _85YR80[y] - _85YR80[x] ; + lbe = _85YR80[y]; + } else if (x < 85 && (hue <= (_85YR80[x] + _7YR80[x]) * 0.5f) && (hue > (_7YR80[x] + _55YR80[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _7YR80[y] - _7YR80[x] ; + lbe = _7YR80[y]; + correctL = true; + } else if (x < 45 && (hue <= (_7YR80[x] + _55YR80[x]) * 0.5f) && (hue > (_55YR80[x] + _4YR80[x]) * 0.5f)) { + correction = _55YR80[y] - _55YR80[x] ; + lbe = _55YR80[y]; + correctL = true; + } else if (x < 45 && (hue <= (_55YR80[x] + _4YR80[x]) * 0.5f) && (hue > (_4YR80[x] - 0.035f))) { + if (y > 49) { + y = 49; + } + correction = _4YR80[y] - _4YR80[x] ; + lbe = _4YR80[y] ; + correctL = true; + } + } else if (lum < 95.f) { + if (x < 85 && (hue <= (_10YR90[x] + 0.035f)) && (hue > (_10YR90[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + correction = _10YR90[y] - _10YR90[x] ; + lbe = _10YR90[y]; + correctL = true; + } else if (x < 85 && hue <= (_85YR90[x] + 0.035f) && hue > (_85YR90[x] - 0.035f)) { + if (y > 89) { + y = 89; + } + correction = _85YR90[y] - _85YR90[x] ; + lbe = _85YR90[y]; + correctL = true; + } else if (x < 45 && (hue <= (_55YR90[x] + 0.035f) && (hue > (_55YR90[x] - 0.035f)))) { + if (y > 49) { + y = 49; + } + correction = _55YR90[y] - _55YR90[x] ; + lbe = _55YR90[y]; + correctL = true; + } + } + } + } else if (zone == 3) { // //Green yellow correction + if (lum >= 25.f) { + if (lum < 35.f) { + if ((hue <= (_7G30[x] + 0.035f)) && (hue > (_7G30[x] + _5G30[x]) * 0.5f)) { + correction = _7G30[y] - _7G30[x] ; + lbe = _7G30[y]; + correctL = true; + } else if ((hue <= (_7G30[x] + _5G30[x]) * 0.5f) && (hue > (_5G30[x] + _25G30[x]) * 0.5f)) { + correction = _5G30[y] - _5G30[x] ; + lbe = _5G30[y]; + correctL = true; + } else if ((hue <= (_25G30[x] + _5G30[x]) * 0.5f) && (hue > (_25G30[x] + _1G30[x]) * 0.5f)) { + correction = _25G30[y] - _25G30[x] ; + lbe = _25G30[y]; + correctL = true; + } else if ((hue <= (_1G30[x] + _25G30[x]) * 0.5f) && (hue > (_1G30[x] + _10GY30[x]) * 0.5f)) { + correction = _1G30[y] - _1G30[x] ; + lbe = _1G30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_1G30[x] + _10GY30[x]) * 0.5f) && (hue > (_10GY30[x] + _75GY30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10GY30[y] - _10GY30[x] ; + lbe = _10GY30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10GY30[x] + _75GY30[x]) * 0.5f) && (hue > (_75GY30[x] + _5GY30[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _75GY30[y] - _75GY30[x] ; + lbe = _75GY30[y]; + correctL = true; + } else if (x < 85 && (hue <= (_5GY30[x] + _75GY30[x]) * 0.5f) && (hue > (_5GY30[x] - 0.035f))) { + if (y > 89) { + y = 89; + } + correction = _5GY30[y] - _5GY30[x] ; + lbe = _5GY30[y] ; + correctL = true; + } + } else if (lum < 45.f) { + if ((hue <= (_7G40[x] + 0.035f)) && (hue > (_7G40[x] + _5G40[x]) * 0.5f)) { + correction = _7G40[y] - _7G40[x] ; + lbe = _7G40[y]; + correctL = true; + } else if ((hue <= (_7G40[x] + _5G40[x]) * 0.5f) && (hue > (_5G40[x] + _25G40[x]) * 0.5f)) { + correction = _5G40[y] - _5G40[x] ; + lbe = _5G40[y]; + correctL = true; + } else if ((hue <= (_25G40[x] + _5G40[x]) * 0.5f) && (hue > (_25G40[x] + _1G40[x]) * 0.5f)) { + correction = _25G40[y] - _25G40[x] ; + lbe = _25G40[y]; + correctL = true; + } else if ((hue <= (_1G40[x] + _25G40[x]) * 0.5f) && (hue > (_1G40[x] + _10GY40[x]) * 0.5f)) { + correction = _1G40[y] - _1G40[x] ; + lbe = _1G40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_1G40[x] + _10GY40[x]) * 0.5f) && (hue > (_10GY40[x] + _75GY40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _10GY40[y] - _10GY40[x] ; + lbe = _10GY40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_10GY40[x] + _75GY40[x]) * 0.5f) && (hue > (_75GY40[x] + _5GY40[x]) * 0.5f)) { + if (y > 89) { + y = 89; + } + correction = _75GY40[y] - _75GY40[x] ; + lbe = _75GY40[y]; + correctL = true; + } else if (x < 85 && (hue <= (_5GY40[x] + _75GY40[x]) * 0.5f) && (hue > (_5GY40[x] - 0.035f))) { + if (y > 89) { + y = 89; // + } + correction = _5GY40[y] - _5GY40[x] ; + lbe = _5GY40[y]; + correctL = true; + } + } else if (lum < 55.f) { + if ((hue <= (_7G50[x] + 0.035f)) && (hue > (_7G50[x] + _5G50[x]) * 0.5f)) { + correction = _7G50[y] - _7G50[x] ; + lbe = _7G50[y]; + correctL = true; + } else if ((hue <= (_7G50[x] + _5G50[x]) * 0.5f) && (hue > (_5G50[x] + _25G50[x]) * 0.5f)) { + correction = _5G50[y] - _5G50[x] ; + lbe = _5G50[y]; + correctL = true; + } else if ((hue <= (_25G50[x] + _5G50[x]) * 0.5f) && (hue > (_25G50[x] + _1G50[x]) * 0.5f)) { + correction = _25G50[y] - _25G50[x] ; + lbe = _25G50[y]; + correctL = true; + } else if ((hue <= (_1G50[x] + _25G50[x]) * 0.5f) && (hue > (_1G50[x] + _10GY50[x]) * 0.5f)) { + correction = _1G50[y] - _1G50[x] ; + lbe = _1G50[y]; + correctL = true; + } else if ((hue <= (_1G50[x] + _10GY50[x]) * 0.5f) && (hue > (_10GY50[x] + _75GY50[x]) * 0.5f)) { + correction = _10GY50[y] - _10GY50[x] ; + lbe = _10GY50[y]; + correctL = true; + } else if ((hue <= (_10GY50[x] + _75GY50[x]) * 0.5f) && (hue > (_75GY50[x] + _5GY50[x]) * 0.5f)) { + correction = _75GY50[y] - _75GY50[x] ; + lbe = _75GY50[y]; + correctL = true; + } else if ((hue <= (_5GY50[x] + _75GY50[x]) * 0.5f) && (hue > (_5GY50[x] - 0.035f))) { + correction = _5GY50[y] - _5GY50[x] ; + lbe = _5GY50[y]; + correctL = true; + } + } else if (lum < 65.f) { + if ((hue <= (_7G60[x] + 0.035f)) && (hue > (_7G60[x] + _5G60[x]) * 0.5f)) { + correction = _7G60[y] - _7G60[x] ; + lbe = _7G60[y]; + correctL = true; + } else if ((hue <= (_7G60[x] + _5G60[x]) * 0.5f) && (hue > (_5G60[x] + _25G60[x]) * 0.5f)) { + correction = _5G60[y] - _5G60[x] ; + lbe = _5G60[y]; + correctL = true; + } else if ((hue <= (_25G60[x] + _5G60[x]) * 0.5f) && (hue > (_25G60[x] + _1G60[x]) * 0.5f)) { + correction = _25G60[y] - _25G60[x] ; + lbe = _25G60[y]; + correctL = true; + } else if ((hue <= (_1G60[x] + _25G60[x]) * 0.5f) && (hue > (_1G60[x] + _10GY60[x]) * 0.5f)) { + correction = _1G60[y] - _1G60[x] ; + lbe = _1G60[y]; + correctL = true; + } else if ((hue <= (_1G60[x] + _10GY60[x]) * 0.5f) && (hue > (_10GY60[x] + _75GY60[x]) * 0.5f)) { + correction = _10GY60[y] - _10GY60[x] ; + lbe = _10GY60[y]; + correctL = true; + } else if ((hue <= (_10GY60[x] + _75GY60[x]) * 0.5f) && (hue > (_75GY60[x] + _5GY60[x]) * 0.5f)) { + correction = _75GY60[y] - _75GY60[x] ; + lbe = _75GY60[y] ; + correctL = true; + } else if ((hue <= (_5GY60[x] + _75GY60[x]) * 0.5f) && (hue > (_5GY60[x] - 0.035f))) { + correction = _5GY60[y] - _5GY60[x] ; + lbe = _5GY60[y]; + correctL = true; + } + } else if (lum < 75.f) { + if ((hue <= (_7G70[x] + 0.035f)) && (hue > (_7G70[x] + _5G70[x]) * 0.5f)) { + correction = _7G70[y] - _7G70[x] ; + lbe = _7G70[y]; + correctL = true; + } else if ((hue <= (_7G70[x] + _5G70[x]) * 0.5f) && (hue > (_5G70[x] + _25G70[x]) * 0.5f)) { + correction = _5G70[y] - _5G70[x] ; + lbe = _5G70[y]; + correctL = true; + } else if ((hue <= (_25G70[x] + _5G70[x]) * 0.5f) && (hue > (_25G70[x] + _1G70[x]) * 0.5f)) { + correction = _25G70[y] - _25G70[x] ; + lbe = _25G70[y]; + correctL = true; + } else if ((hue <= (_1G70[x] + _25G70[x]) * 0.5f) && (hue > (_1G70[x] + _10GY70[x]) * 0.5f)) { + correction = _1G70[y] - _1G70[x] ; + lbe = _1G70[y] ; + correctL = true; + } else if ((hue <= (_1G70[x] + _10GY70[x]) * 0.5f) && (hue > (_10GY70[x] + _75GY70[x]) * 0.5f)) { + correction = _10GY70[y] - _10GY70[x] ; + lbe = _10GY70[y]; + correctL = true; + } else if ((hue <= (_10GY70[x] + _75GY70[x]) * 0.5f) && (hue > (_75GY70[x] + _5GY70[x]) * 0.5f)) { + correction = _75GY70[y] - _75GY70[x] ; + lbe = _75GY70[y]; + correctL = true; + } else if ((hue <= (_5GY70[x] + _75GY70[x]) * 0.5f) && (hue > (_5GY70[x] - 0.035f))) { + correction = _5GY70[y] - _5GY70[x] ; + lbe = _5GY70[y]; + correctL = true; + } + } else if (lum < 85.f) { + if ((hue <= (_7G80[x] + 0.035f)) && (hue > (_7G80[x] + _5G80[x]) * 0.5f)) { + correction = _7G80[y] - _7G80[x] ; + lbe = _7G80[y]; + correctL = true; + } else if ((hue <= (_7G80[x] + _5G80[x]) * 0.5f) && (hue > (_5G80[x] + _25G80[x]) * 0.5f)) { + correction = _5G80[y] - _5G80[x] ; + lbe = _5G80[y]; + correctL = true; + } else if ((hue <= (_25G80[x] + _5G80[x]) * 0.5f) && (hue > (_25G80[x] + _1G80[x]) * 0.5f)) { + correction = _25G80[y] - _25G80[x] ; + lbe = _25G80[y]; + correctL = true; + } else if ((hue <= (_1G80[x] + _25G80[x]) * 0.5f) && (hue > (_1G80[x] + _10GY80[x]) * 0.5f)) { + correction = _1G80[y] - _1G80[x] ; + lbe = _1G80[y]; + correctL = true; + } else if ((hue <= (_1G80[x] + _10GY80[x]) * 0.5f) && (hue > (_10GY80[x] + _75GY80[x]) * 0.5f)) { + correction = _10GY80[y] - _10GY80[x] ; + lbe = _10GY80[y]; + correctL = true; + } else if ((hue <= (_10GY80[x] + _75GY80[x]) * 0.5f) && (hue > (_75GY80[x] + _5GY80[x]) * 0.5f)) { + correction = _75GY80[y] - _75GY80[x] ; + lbe = _75GY80[y]; + correctL = true; + } else if ((hue <= (_5GY80[x] + _75GY80[x]) * 0.5f) && (hue > (_5GY80[x] - 0.035f))) { + correction = _5GY80[y] - _5GY80[x] ; + lbe = _5GY80[y]; + correctL = true; + } + } + } + } else if (zone == 4) { //Red purple correction : only for L < 30 + if (lum > 5.f) { + if (lum < 15.f && x < 45) { + y = std::min(y, 44); + if ((hue <= (_5R10[x] + 0.035f)) && (hue > (_5R10[x] - 0.043f))) { + correction = _5R10[y] - _5R10[x] ; + lbe = _5R10[y]; + correctL = true; + } else if ((hue <= (_25R10[x] + 0.043f)) && (hue > (_25R10[x] + _10RP10[x]) * 0.5f)) { + correction = _25R10[y] - _25R10[x] ; + lbe = _25R10[y]; + correctL = true; + } else if ((hue <= (_25R10[x] + _10RP10[x]) * 0.5f) && (hue > (_10RP10[x] - 0.035f))) { + correction = _10RP10[y] - _10RP10[x] ; + lbe = _10RP10[y]; + correctL = true; + } + } else if (lum < 25.f && x < 70) { + y = std::min(y, 70); + if ((hue <= (_5R20[x] + 0.035f)) && (hue > (_5R20[x] + _25R20[x]) * 0.5f)) { + correction = _5R20[y] - _5R20[x] ; + lbe = _5R20[y]; + correctL = true; + } else if ((hue <= (_5R20[x] + _25R20[x]) * 0.5f) && (hue > (_10RP20[x] + _25R20[x]) * 0.5f)) { + correction = _25R20[y] - _25R20[x] ; + lbe = _25R20[y]; + correctL = true; + } else if ( (hue <= (_10RP20[x] + _25R20[x]) * 0.5f) && (hue > (_10RP20[x] - 0.035f))) { + correction = _10RP20[y] - _10RP20[x] ; + lbe = _10RP20[y]; + correctL = true; + } + } else if (lum < 35.f && x < 85) { + y = rtengine::min(y, 85); + if ((hue <= (_5R30[x] + 0.035f)) && (hue > (_5R30[x] + _25R30[x]) * 0.5f)) { + correction = _5R30[y] - _5R30[x] ; + lbe = _5R30[y]; + correctL = true; + } else if ((hue <= (_5R30[x] + _25R30[x]) * 0.5f) && (hue > (_10RP30[x] + _25R30[x]) * 0.5f)) { + correction = _25R30[y] - _25R30[x] ; + lbe = _25R30[y]; + correctL = true; + } else if ((hue <= (_10RP30[x] + _25R30[x]) * 0.5f) && (hue > (_10RP30[x] - 0.035f))) { + correction = _10RP30[y] - _10RP30[x] ; + lbe = _10RP30[y]; + correctL = true; + } + } + } + } + //end red purple +} +} diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 18fc18f58..56c6ac479 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -25,6 +25,7 @@ #include "dcp.h" #include "dfmanager.h" #include "ffmanager.h" +#include "iccmatrices.h" #include "iccstore.h" #include "imagefloat.h" #include "improcfun.h" diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 9da601e2a..e526f6e30 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -31,6 +31,7 @@ #include "colortemp.h" #include "curves.h" #include "dcp.h" +#include "iccmatrices.h" #include "iccstore.h" #include "image8.h" #include "improcfun.h" From fefb9c43b9a6b86bf07ff609fcf213eb5c509930 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Fri, 7 Feb 2020 12:45:24 -0800 Subject: [PATCH 042/264] macos_bundle.sh: fix libpixbuf and immodules Fixes building libpixbuf and immodules database by modifying install names later on. --- tools/osx/macosx_bundle.sh | 41 +++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 08740f696..eae8a2021 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -124,6 +124,19 @@ ditto ${LOCAL_PREFIX}/local/lib/liblensfun.2.dylib "${CONTENTS}/Frameworks/lible # Copy libomp to Frameworks ditto ${LOCAL_PREFIX}/local/lib/libomp.dylib "${CONTENTS}/Frameworks" +# dylib install names +find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib))' | while read -r x; do + msg "Modifying dylib install names: ${x}" + { + # id + case ${x} in *.dylib) echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'";; esac + # names + GetDependencies "${x}" | while read -r y; do + echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" + done + } | bash -v +done + msg "Copying dependencies from ${GTK_PREFIX}:" CheckLink "${EXECUTABLE}" @@ -189,6 +202,13 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/icons/Adwaita/index.theme "${LOCAL_PREFIX}/local/bin/gtk-update-icon-cache" "${RESOURCES}/share/icons/Adwaita" ditto "${LOCAL_PREFIX}/local/share/icons/hicolor" "${RESOURCES}/share/icons/hicolor" +# pixbuf loaders & immodules +msg "Build GTK3 databases:" +"${LOCAL_PREFIX}"/local/bin/gdk-pixbuf-query-loaders "${LIB}"/libpix*.so > "${ETC}"/gtk-3.0/gdk-pixbuf.loaders +"${LOCAL_PREFIX}"/local/bin/gtk-query-immodules-3.0 "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules +sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules" +sed -i "" -e "s|/opt/local/|/usr/|" "${ETC}/gtk-3.0/gtk.immodules" + # Install names find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do msg "Modifying install names: ${x}" @@ -209,13 +229,6 @@ for frameworklibs in ${CONTENTS}/Frameworks/* ; do echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v done -# pixbuf loaders & immodules -msg "Build GTK3 databases:" -"${LOCAL_PREFIX}"/local/bin/gdk-pixbuf-query-loaders "${LIB}"/libpix*.so > "${ETC}"/gtk-3.0/gdk-pixbuf.loaders -"${LOCAL_PREFIX}"/local/bin/gtk-query-immodules-3.0 "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules -sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules" -sed -i "" -e "s|/opt/local/|/usr/|" "${ETC}/gtk-3.0/gtk.immodules" - # Mime directory msg "Copying shared files from ${GTK_PREFIX}:" ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/mime @@ -247,6 +260,20 @@ msg "Registering @rpath into the executable:" echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${MACOS}/bin/rawtherapee-bin'" | bash -v echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${EXECUTABLE}-cli'" | bash -v +# Install names +find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do + msg "Modifying install names: ${x}" + { + # id + case ${x} in *.dylib) echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'";; esac + # names + GetDependencies "${x}" | while read -r y; do + echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" + done + } | bash -v +done + + # Sign the app msg "Codesigning:" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" From 5dc1c1dce2c1b12a572d7b3be0652eda9aa4a7bf Mon Sep 17 00:00:00 2001 From: Benitoite Date: Fri, 7 Feb 2020 13:10:32 -0800 Subject: [PATCH 043/264] Mac: install_name change after CheckLink --- tools/osx/macosx_bundle.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index eae8a2021..b8554a6e3 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -124,6 +124,9 @@ ditto ${LOCAL_PREFIX}/local/lib/liblensfun.2.dylib "${CONTENTS}/Frameworks/lible # Copy libomp to Frameworks ditto ${LOCAL_PREFIX}/local/lib/libomp.dylib "${CONTENTS}/Frameworks" +msg "Copying dependencies from ${GTK_PREFIX}:" +CheckLink "${EXECUTABLE}" + # dylib install names find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib))' | while read -r x; do msg "Modifying dylib install names: ${x}" @@ -137,9 +140,6 @@ find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib } | bash -v done -msg "Copying dependencies from ${GTK_PREFIX}:" -CheckLink "${EXECUTABLE}" - # Copy libjpeg-turbo ("62") into the app bundle ditto ${LOCAL_PREFIX}/local/lib/libjpeg.62.dylib "${CONTENTS}/Frameworks/libjpeg.62.dylib" @@ -273,6 +273,12 @@ find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib } | bash -v done +# fix @rpath in Frameworks +msg "Registering @rpath in Frameworks folder:" +for frameworklibs in ${CONTENTS}/Frameworks/* ; do + echo " install_name_tool -delete_rpath /opt/local/lib '${frameworklibs}'" | bash -v + echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v +done # Sign the app msg "Codesigning:" From d796f70caf12ea2825610d20962b646bbd56fc39 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sat, 8 Feb 2020 02:52:31 -0800 Subject: [PATCH 044/264] Mac: fix os deployment target compilation flags Uses `${CMAKE_OSX_DEPLOYMENT_TARGET}` instead of `10.9` --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13c648de0..259a0d7a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,8 +118,8 @@ if(APPLE) endif() # Set minimum system version - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.9") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.9") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -headerpad_max_install_names") endif() From 291abfd7a705122420af7874c109c4fea712dada Mon Sep 17 00:00:00 2001 From: scx Date: Sat, 8 Feb 2020 12:56:40 +0100 Subject: [PATCH 045/264] Install additional icons - Install 32x32 icon - Install 64x64 icon - Install scalable icon --- rtdata/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rtdata/CMakeLists.txt b/rtdata/CMakeLists.txt index 46722ba01..76804c0f0 100644 --- a/rtdata/CMakeLists.txt +++ b/rtdata/CMakeLists.txt @@ -29,9 +29,12 @@ if(UNIX) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/rawtherapee.desktop" DESTINATION ${DESKTOPDIR}) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-16.png" DESTINATION "${ICONSDIR}/hicolor/16x16/apps" RENAME rawtherapee.png) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-24.png" DESTINATION "${ICONSDIR}/hicolor/24x24/apps" RENAME rawtherapee.png) + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-32.png" DESTINATION "${ICONSDIR}/hicolor/32x32/apps" RENAME rawtherapee.png) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-48.png" DESTINATION "${ICONSDIR}/hicolor/48x48/apps" RENAME rawtherapee.png) + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-64.png" DESTINATION "${ICONSDIR}/hicolor/64x64/apps" RENAME rawtherapee.png) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-128.png" DESTINATION "${ICONSDIR}/hicolor/128x128/apps" RENAME rawtherapee.png) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-256.png" DESTINATION "${ICONSDIR}/hicolor/256x256/apps" RENAME rawtherapee.png) + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/svg/rt-logo.svg" DESTINATION "${ICONSDIR}/hicolor/scalable/apps" RENAME rawtherapee.svg) endif() install(FILES ${LANGUAGEFILES} DESTINATION "${DATADIR}/languages") From 344e9862ef971344e89eaef8f2a899d48d5e3c3b Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sat, 8 Feb 2020 13:14:37 -0800 Subject: [PATCH 046/264] mac: append bundle-time to AboutThisBuild.txt Appends a section of information to uniquely identify a particular bundle. --- tools/osx/macosx_bundle.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index b8554a6e3..779b31a1e 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -68,7 +68,6 @@ if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then PROJECT_FULL_VERSION="$gitDescribe" PROJECT_VERSION="$gitVersionNumericBS" - fi MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')" @@ -110,6 +109,13 @@ install -d "${RESOURCES}" \ "${LIB}" \ "${ETC}" +echo "\n--------\n" >> Resources/AboutThisBuild.txt +echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> Resources/AboutThisBuild.txt +echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> Resources/AboutThisBuild.txt +echo "Bundle date: $(date -Ru) ZULU" >> Resources/AboutThisBuild.txt +echo "Bundle epoch: $(date +%s)" >> Resources/AboutThisBuild.txt +echo "Bundle UUID: $(uuidgen)" >> Resources/AboutThisBuild.txt + msg "Copying release files:" ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" ditto "Resources" "${RESOURCES}" From acdb3c32ddbcc7c78075a9e75e2e8803e88e0694 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 9 Feb 2020 12:02:57 +0100 Subject: [PATCH 047/264] MLsharpen: cleanup --- rtengine/ipsharpenedges.cc | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/rtengine/ipsharpenedges.cc b/rtengine/ipsharpenedges.cc index 73295e4fa..8dd12c836 100644 --- a/rtengine/ipsharpenedges.cc +++ b/rtengine/ipsharpenedges.cc @@ -23,13 +23,9 @@ #include "procparams.h" #include "rt_math.h" -#define BENCHMARK -#include "StopWatch.h" - -using namespace std; namespace { #ifdef __SSE2__ -bool inintervall(float a, float b, float c) +bool inintervalLoRo(float a, float b, float c) { return a < std::max(b, c) && a > std::min(b, c); } @@ -43,7 +39,7 @@ float selectweight(float a, float b, float low, float high) } #else -bool inintervall(float a, float b, float c) +bool inintervalLoRo(float a, float b, float c) { return (a < b && a > c) || (a < c && a > b); } @@ -75,8 +71,6 @@ void ImProcFunctions::MLsharpen (LabImage* lab) return; } -BENCHFUN - const int width = lab->W, height = lab->H; constexpr float chmax[3] = {1.f / 8.f, 1.f / 3.f, 1.f / 3.f}; const int width2 = 2 * width; @@ -127,7 +121,7 @@ BENCHFUN const float contrast = std::min(std::sqrt(SQR(L[offset + 1] - L[offset - 1]) + SQR(L[offset + width] - L[offset - width])) * chmax[c], 1.f); // new possible values - if (inintervall(v, L[offset - 1], L[offset + 1])) { + if (inintervalLoRo(v, L[offset - 1], L[offset + 1])) { float f1 = fabs(L[offset - 2] - L[offset - 1]); float f2 = L[offset - 1] - v; float f3 = (L[offset - 1] - L[offset - width]) * (L[offset - 1] - L[offset + width]); @@ -146,7 +140,7 @@ BENCHFUN } } - if (inintervall(v, L[offset - width], L[offset + width])) { + if (inintervalLoRo(v, L[offset - width], L[offset + width])) { float f1 = fabs(L[offset - width2] - L[offset - width]); float f2 = L[offset - width] - v; float f3 = (L[offset - width] - L[offset - 1]) * (L[offset - width] - L[offset + 1]); @@ -165,7 +159,7 @@ BENCHFUN } } - if (inintervall(v, L[offset - 1 - width], L[offset + 1 + width])) { + if (inintervalLoRo(v, L[offset - 1 - width], L[offset + 1 + width])) { float f1 = fabs(L[offset - 2 - width2] - L[offset - 1 - width]); float f2 = L[offset - 1 - width] - v; float f3 = (L[offset - 1 - width] - L[offset - width + 1]) * (L[offset - 1 - width] - L[offset + width - 1]); @@ -184,7 +178,7 @@ BENCHFUN } } - if (inintervall(v, L[offset + 1 - width], L[offset - 1 + width])) { + if (inintervalLoRo(v, L[offset + 1 - width], L[offset - 1 + width])) { float f1 = fabs(L[offset - 2 + width2] - L[offset - 1 + width]); float f2 = L[offset - 1 + width] - v; float f3 = (L[offset - 1 + width] - L[offset - width - 1]) * (L[offset - 1 + width] - L[offset + width + 1]); From 8170b6ed759cdd6a365ec74c7a6a76bfb73b6e9e Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 9 Feb 2020 05:02:50 -0800 Subject: [PATCH 048/264] cmake: gather and display build information Displays unique info: the build OS, the build zulu datetime, the build epoch, and a uuid during cmake configuration. --- UpdateInfo.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index d1f532506..9aa211d96 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -63,6 +63,11 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() + + execute_process(COMMAND uname -mrs COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_OS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND date -Ru COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND date +%s COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND uuidgen COMMAND tr "A-Z" "a-z" COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_UUID OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Git checkout information:") message(STATUS " Commit description: ${GIT_DESCRIBE}") @@ -72,6 +77,11 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS "Build information:") + message(STATUS " Build OS: ${BUILDINFO_OS}") + message(STATUS " Build date: ${BUILDINFO_DATE}") + message(STATUS " Epoch: ${BUILDINFO_EPOCH}") + message(STATUS " UUID: ${BUILDINFO_UUID}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") From 80eb85215ad9c133affcd9996fb5e4dde7e3391e Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 9 Feb 2020 05:05:30 -0800 Subject: [PATCH 049/264] Appends build-unique info to AboutThisBuild.txt --- AboutThisBuild.txt.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AboutThisBuild.txt.in b/AboutThisBuild.txt.in index f48d39b50..d6454d8a0 100644 --- a/AboutThisBuild.txt.in +++ b/AboutThisBuild.txt.in @@ -13,3 +13,7 @@ Build flags: ${CXX_FLAGS} Link flags: ${LFLAGS} OpenMP support: ${OPTION_OMP} MMAP support: ${WITH_MYFILE_MMAP} +Build OS: ${BUILDINFO_OS} +Build date: ${BUILDINFO_DATE} ZULU +Build Epoch: ${BUILDINFO_EPOCH} +Build UUID: ${BUILDINFO_UUID} From d9a62aa27af2d3fa930d370c7ed524451cac81d4 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 9 Feb 2020 14:14:46 +0100 Subject: [PATCH 050/264] Fix LGTM alerts --- rtengine/ipsharpenedges.cc | 48 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/rtengine/ipsharpenedges.cc b/rtengine/ipsharpenedges.cc index 8dd12c836..6a44ee40a 100644 --- a/rtengine/ipsharpenedges.cc +++ b/rtengine/ipsharpenedges.cc @@ -75,8 +75,8 @@ void ImProcFunctions::MLsharpen (LabImage* lab) constexpr float chmax[3] = {1.f / 8.f, 1.f / 3.f, 1.f / 3.f}; const int width2 = 2 * width; constexpr float eps2 = 0.001f; //prevent divide by zero - const float amount = params->sharpenEdge.amount / 100.0f; - const float amountby3 = params->sharpenEdge.amount / 300.0f; + const float amount = params->sharpenEdge.amount / 100.0; + const float amountby3 = params->sharpenEdge.amount / 300.0; std::unique_ptr L(new float[width * height]); @@ -103,12 +103,12 @@ void ImProcFunctions::MLsharpen (LabImage* lab) for (int j = 2; j < height - 2; j++) { for (int i = 2, offset = j * width + i; i < width - 2; i++, offset++) { // weight functions - const float wH = eps2 + fabs(L[offset + 1] - L[offset - 1]); - const float wV = eps2 + fabs(L[offset + width] - L[offset - width]); + const float wH = eps2 + std::fabs(L[offset + 1] - L[offset - 1]); + const float wV = eps2 + std::fabs(L[offset + width] - L[offset - width]); - float s = 2.f / (2.f + fabs(wH - wV)); - float wD1 = eps2 + fabs(L[offset + width + 1] - L[offset - width - 1]) * s; - float wD2 = eps2 + fabs(L[offset + width - 1] - L[offset - width + 1]) * s; + float s = 2.f / (2.f + std::fabs(wH - wV)); + float wD1 = eps2 + std::fabs(L[offset + width + 1] - L[offset - width - 1]) * s; + float wD2 = eps2 + std::fabs(L[offset + width - 1] - L[offset - width + 1]) * s; s = wD1; wD1 /= wD2; wD2 /= s; @@ -122,16 +122,16 @@ void ImProcFunctions::MLsharpen (LabImage* lab) // new possible values if (inintervalLoRo(v, L[offset - 1], L[offset + 1])) { - float f1 = fabs(L[offset - 2] - L[offset - 1]); + float f1 = std::fabs(L[offset - 2] - L[offset - 1]); float f2 = L[offset - 1] - v; float f3 = (L[offset - 1] - L[offset - width]) * (L[offset - 1] - L[offset + width]); - float f4 = std::sqrt(fabs((L[offset - 1] - L[offset - width2]) * (L[offset - 1] - L[offset + width2]))); + float f4 = std::sqrt(std::fabs((L[offset - 1] - L[offset - width2]) * (L[offset - 1] - L[offset + width2]))); const float difL = f1 * SQR(f2 * f3) * f4; if (difL > 0.f) { - f1 = fabs(L[offset + 2] - L[offset + 1]); + f1 = std::fabs(L[offset + 2] - L[offset + 1]); f2 = L[offset + 1] - v; f3 = (L[offset + 1] - L[offset - width]) * (L[offset + 1] - L[offset + width]); - f4 = std::sqrt(fabs((L[offset + 1] - L[offset - width2]) * (L[offset + 1] - L[offset + width2]))); + f4 = std::sqrt(std::fabs((L[offset + 1] - L[offset - width2]) * (L[offset + 1] - L[offset + width2]))); const float difR = f1 * SQR(f2 * f3) * f4; if (difR > 0.f) { lumH = (L[offset - 1] * difR + L[offset + 1] * difL) / (difL + difR); @@ -141,16 +141,16 @@ void ImProcFunctions::MLsharpen (LabImage* lab) } if (inintervalLoRo(v, L[offset - width], L[offset + width])) { - float f1 = fabs(L[offset - width2] - L[offset - width]); + float f1 = std::fabs(L[offset - width2] - L[offset - width]); float f2 = L[offset - width] - v; float f3 = (L[offset - width] - L[offset - 1]) * (L[offset - width] - L[offset + 1]); - float f4 = std::sqrt(fabs((L[offset - width] - L[offset - 2]) * (L[offset - width] - L[offset + 2]))); + float f4 = std::sqrt(std::fabs((L[offset - width] - L[offset - 2]) * (L[offset - width] - L[offset + 2]))); const float difT = f1 * SQR(f2 * f3) * f4; if (difT > 0.f) { - f1 = fabs(L[offset + width2] - L[offset + width]); + f1 = std::fabs(L[offset + width2] - L[offset + width]); f2 = L[offset + width] - v; f3 = (L[offset + width] - L[offset - 1]) * (L[offset + width] - L[offset + 1]); - f4 = std::sqrt(fabs((L[offset + width] - L[offset - 2]) * (L[offset + width] - L[offset + 2]))); + f4 = std::sqrt(std::fabs((L[offset + width] - L[offset - 2]) * (L[offset + width] - L[offset + 2]))); const float difB = f1 * SQR(f2 * f3) * f4; if (difB > 0.f) { lumV = (L[offset - width] * difB + L[offset + width] * difT) / (difT + difB); @@ -160,16 +160,16 @@ void ImProcFunctions::MLsharpen (LabImage* lab) } if (inintervalLoRo(v, L[offset - 1 - width], L[offset + 1 + width])) { - float f1 = fabs(L[offset - 2 - width2] - L[offset - 1 - width]); + float f1 = std::fabs(L[offset - 2 - width2] - L[offset - 1 - width]); float f2 = L[offset - 1 - width] - v; float f3 = (L[offset - 1 - width] - L[offset - width + 1]) * (L[offset - 1 - width] - L[offset + width - 1]); - float f4 = std::sqrt(fabs((L[offset - 1 - width] - L[offset - width2 + 2]) * (L[offset - 1 - width] - L[offset + width2 - 2]))); + float f4 = std::sqrt(std::fabs((L[offset - 1 - width] - L[offset - width2 + 2]) * (L[offset - 1 - width] - L[offset + width2 - 2]))); const float difLT = f1 * SQR(f2 * f3) * f4; if (difLT > 0.f) { - f1 = fabs(L[offset + 2 + width2] - L[offset + 1 + width]); + f1 = std::fabs(L[offset + 2 + width2] - L[offset + 1 + width]); f2 = L[offset + 1 + width] - v; f3 = (L[offset + 1 + width] - L[offset - width + 1]) * (L[offset + 1 + width] - L[offset + width - 1]); - f4 = std::sqrt(fabs((L[offset + 1 + width] - L[offset - width2 + 2]) * (L[offset + 1 + width] - L[offset + width2 - 2]))); + f4 = std::sqrt(std::fabs((L[offset + 1 + width] - L[offset - width2 + 2]) * (L[offset + 1 + width] - L[offset + width2 - 2]))); const float difRB = f1 * SQR(f2 * f3) * f4; if (difRB > 0.f) { lumD1 = (L[offset - 1 - width] * difRB + L[offset + 1 + width] * difLT) / (difLT + difRB); @@ -179,16 +179,16 @@ void ImProcFunctions::MLsharpen (LabImage* lab) } if (inintervalLoRo(v, L[offset + 1 - width], L[offset - 1 + width])) { - float f1 = fabs(L[offset - 2 + width2] - L[offset - 1 + width]); + float f1 = std::fabs(L[offset - 2 + width2] - L[offset - 1 + width]); float f2 = L[offset - 1 + width] - v; float f3 = (L[offset - 1 + width] - L[offset - width - 1]) * (L[offset - 1 + width] - L[offset + width + 1]); - float f4 = std::sqrt(fabs((L[offset - 1 + width] - L[offset - width2 - 2]) * (L[offset - 1 + width] - L[offset + width2 + 2]))); + float f4 = std::sqrt(std::fabs((L[offset - 1 + width] - L[offset - width2 - 2]) * (L[offset - 1 + width] - L[offset + width2 + 2]))); const float difLB = f1 * SQR(f2 * f3) * f4; if (difLB > 0.f) { - f1 = fabs(L[offset + 2 - width2] - L[offset + 1 - width]); + f1 = std::fabs(L[offset + 2 - width2] - L[offset + 1 - width]); f2 = L[offset + 1 - width] - v; f3 = (L[offset + 1 - width] - L[offset + width + 1]) * (L[offset + 1 - width] - L[offset - width - 1]); - f4 = std::sqrt(fabs((L[offset + 1 - width] - L[offset + width2 + 2]) * (L[offset + 1 - width] - L[offset - width2 - 2]))); + f4 = std::sqrt(std::fabs((L[offset + 1 - width] - L[offset + width2 + 2]) * (L[offset + 1 - width] - L[offset - width2 - 2]))); const float difRT = f1 * SQR(f2 * f3) * f4; if (difRT > 0.f) { lumD2 = (L[offset + 1 - width] * difLB + L[offset - 1 + width] * difRT) / (difLB + difRT); @@ -203,7 +203,7 @@ void ImProcFunctions::MLsharpen (LabImage* lab) if (c == 0) { if (v < 92.f) { - channel[j][i] = fabs(327.68f * intp(weight, (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2), v)); // fabs because lab->L always > 0 + channel[j][i] = std::fabs(327.68f * intp(weight, (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2), v)); // fabs because lab->L always > 0 } } else { channel[j][i] = 327.68f * intp(weight, (lumH * wH + lumV * wV + lumD1 * wD1 + lumD2 * wD2) / (wH + wV + wD1 + wD2), v); From 9115addbc2299e1b527d2906b8c0127c17eec16c Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 9 Feb 2020 11:25:21 -0800 Subject: [PATCH 051/264] mac: copy correct AboutThisBuild.txt into bundle --- tools/osx/macosx_bundle.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 779b31a1e..19b78fae4 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -335,7 +335,7 @@ function CreateDmg { msg "Preparing disk image sources at ${srcDir}:" cp -R "${APP}" "${srcDir}" - ditto AboutThisBuild.txt "${srcDir}" + ditto Resources/AboutThisBuild.txt "${srcDir}" ln -s /Applications "${srcDir}" # Web bookmarks @@ -392,7 +392,7 @@ function CreateDmg { # Zip disk image for redistribution msg "Zipping disk image for redistribution:" - zip "${dmg_name}.zip" "${dmg_name}.dmg" AboutThisBuild.txt + zip "${dmg_name}.zip" "${dmg_name}.dmg" Resources/AboutThisBuild.txt rm "${dmg_name}.dmg" msg "Removing disk image caches:" From cb09e78e81bb8129656eaf51437f54436eb372d0 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 9 Feb 2020 12:21:47 -0800 Subject: [PATCH 052/264] mac: convert case statement to if --- tools/osx/macosx_bundle.sh | 53 ++++++++++++++------------------------ 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 19b78fae4..83bc4f630 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -34,6 +34,22 @@ function CheckLink { done } +function ModifyInstallNames { + find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib))' | while read -r x; do + msg "Modifying install names: ${x}" + { + # id + if [ ${x:(-6)} == ".dylib" ]; then + echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'" + fi + GetDependencies "${x}" | while read -r y + do + echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" + done + } | bash -v + done +} + # Source check if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." @@ -134,17 +150,7 @@ msg "Copying dependencies from ${GTK_PREFIX}:" CheckLink "${EXECUTABLE}" # dylib install names -find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib))' | while read -r x; do - msg "Modifying dylib install names: ${x}" - { - # id - case ${x} in *.dylib) echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'";; esac - # names - GetDependencies "${x}" | while read -r y; do - echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" - done - } | bash -v -done +ModifyInstallNames # Copy libjpeg-turbo ("62") into the app bundle ditto ${LOCAL_PREFIX}/local/lib/libjpeg.62.dylib "${CONTENTS}/Frameworks/libjpeg.62.dylib" @@ -216,17 +222,7 @@ sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/C sed -i "" -e "s|/opt/local/|/usr/|" "${ETC}/gtk-3.0/gtk.immodules" # Install names -find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do - msg "Modifying install names: ${x}" - { - # id - case ${x} in *.dylib) echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'";; esac - # names - GetDependencies "${x}" | while read -r y; do - echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" - done - } | bash -v -done +ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder:" @@ -266,18 +262,7 @@ msg "Registering @rpath into the executable:" echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${MACOS}/bin/rawtherapee-bin'" | bash -v echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${EXECUTABLE}-cli'" | bash -v -# Install names -find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do - msg "Modifying install names: ${x}" - { - # id - case ${x} in *.dylib) echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'";; esac - # names - GetDependencies "${x}" | while read -r y; do - echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" - done - } | bash -v -done +ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder:" From 3349aa041a9546ea7afd5b59a29bcab679577e38 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 9 Feb 2020 13:25:45 -0800 Subject: [PATCH 053/264] mac: include .so objects in routine --- tools/osx/macosx_bundle.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 83bc4f630..7a6bfe765 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -35,7 +35,7 @@ function CheckLink { } function ModifyInstallNames { - find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib))' | while read -r x; do + find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do msg "Modifying install names: ${x}" { # id From 2c831a11a7a164685e51169e7696ffc50f7e04e5 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 9 Feb 2020 23:34:12 +0100 Subject: [PATCH 054/264] more double promote fixes --- rtengine/capturesharpening.cc | 18 +++++----- rtengine/filmnegativeproc.cc | 12 +++---- rtengine/filmnegativethumb.cc | 4 +-- rtengine/hilite_recon.cc | 4 +-- rtengine/improccoordinator.cc | 4 +-- rtengine/improcfun.cc | 10 +++--- rtengine/ipsharpen.cc | 22 ++++++------ rtengine/iptransform.cc | 64 +++++++++++++++++------------------ 8 files changed, 68 insertions(+), 70 deletions(-) diff --git a/rtengine/capturesharpening.cc b/rtengine/capturesharpening.cc index b5b74e140..4dcdd0734 100644 --- a/rtengine/capturesharpening.cc +++ b/rtengine/capturesharpening.cc @@ -761,13 +761,13 @@ bool checkForStop(float** tmpIThr, float** iterCheck, int fullTileSize, int bord return false; } -void CaptureDeconvSharpening (float** luminance, const float* const * oldLuminance, const float * const * blend, int W, int H, double sigma, double sigmaCornerOffset, int iterations, bool checkIterStop, rtengine::ProgressListener* plistener, double startVal, double endVal) +void CaptureDeconvSharpening (float** luminance, const float* const * oldLuminance, const float * const * blend, int W, int H, float sigma, float sigmaCornerOffset, int iterations, bool checkIterStop, rtengine::ProgressListener* plistener, double startVal, double endVal) { BENCHFUN - const bool is9x9 = (sigma <= 1.50 && sigmaCornerOffset == 0.0); - const bool is7x7 = (sigma <= 1.15 && sigmaCornerOffset == 0.0); - const bool is5x5 = (sigma <= 0.84 && sigmaCornerOffset == 0.0); - const bool is3x3 = (sigma < 0.6 && sigmaCornerOffset == 0.0); + const bool is9x9 = (sigma <= 1.5f && sigmaCornerOffset == 0.f); + const bool is7x7 = (sigma <= 1.15f && sigmaCornerOffset == 0.f); + const bool is5x5 = (sigma <= 0.84f && sigmaCornerOffset == 0.f); + const bool is3x3 = (sigma < 0.6f && sigmaCornerOffset == 0.f); float kernel13[13][13]; float kernel9[9][9]; float kernel7[7][7]; @@ -906,11 +906,11 @@ BENCHFUN } } } else { - if (sigmaCornerOffset != 0.0) { + if (sigmaCornerOffset != 0.f) { const float distance = sqrt(rtengine::SQR(i + tileSize / 2 - H / 2) + rtengine::SQR(j + tileSize / 2 - W / 2)); const float sigmaTile = static_cast(sigma) + distanceFactor * distance; if (sigmaTile >= 0.4f) { - if (sigmaTile > 1.50) { // have to use 13x13 kernel + if (sigmaTile > 1.5f) { // have to use 13x13 kernel float lkernel13[13][13]; compute13x13kernel(static_cast(sigma) + distanceFactor * distance, lkernel13); for (int k = 0; k < iterations; ++k) { @@ -921,7 +921,7 @@ BENCHFUN break; } } - } else if (sigmaTile > 1.15) { // have to use 9x9 kernel + } else if (sigmaTile > 1.15f) { // have to use 9x9 kernel float lkernel9[9][9]; compute9x9kernel(static_cast(sigma) + distanceFactor * distance, lkernel9); for (int k = 0; k < iterations; ++k) { @@ -932,7 +932,7 @@ BENCHFUN break; } } - } else if (sigmaTile > 0.84) { // have to use 7x7 kernel + } else if (sigmaTile > 0.84f) { // have to use 7x7 kernel float lkernel7[7][7]; compute7x7kernel(static_cast(sigma) + distanceFactor * distance, lkernel7); for (int k = 0; k < iterations; ++k) { diff --git a/rtengine/filmnegativeproc.cc b/rtengine/filmnegativeproc.cc index 1f27983ed..c7de3c483 100644 --- a/rtengine/filmnegativeproc.cc +++ b/rtengine/filmnegativeproc.cc @@ -122,8 +122,8 @@ bool rtengine::RawImageSource::getFilmNegativeExponents(Coord2D spotA, Coord2D s } if (settings->verbose) { - printf("Clear film values: R=%g G=%g B=%g\n", clearVals[0], clearVals[1], clearVals[2]); - printf("Dense film values: R=%g G=%g B=%g\n", denseVals[0], denseVals[1], denseVals[2]); + printf("Clear film values: R=%g G=%g B=%g\n", static_cast(clearVals[0]), static_cast(clearVals[1]), static_cast(clearVals[2])); + printf("Dense film values: R=%g G=%g B=%g\n", static_cast(denseVals[0]), static_cast(denseVals[1]), static_cast(denseVals[2])); } const float denseGreenRatio = clearVals[1] / denseVals[1]; @@ -141,12 +141,12 @@ bool rtengine::RawImageSource::getFilmNegativeExponents(Coord2D spotA, Coord2D s if (ch == 1) { newExps[ch] = 1.f; // Green is the reference channel } else { - newExps[ch] = CLAMP(logBase(clearVals[ch] / denseVals[ch], denseGreenRatio), 0.3f, 4.f); + newExps[ch] = rtengine::LIM(logBase(clearVals[ch] / denseVals[ch], denseGreenRatio), 0.3f, 4.f); } } if (settings->verbose) { - printf("New exponents: R=%g G=%g B=%g\n", newExps[0], newExps[1], newExps[2]); + printf("New exponents: R=%g G=%g B=%g\n", static_cast(newExps[0]), static_cast(newExps[1]), static_cast(newExps[2])); } return true; @@ -246,8 +246,8 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ if (settings->verbose) { printf("Sample count: %zu, %zu, %zu\n", cvs[0].size(), cvs[1].size(), cvs[2].size()); - printf("Medians: %g %g %g\n", medians[0], medians[1], medians[2] ); - printf("Computed multipliers: %g %g %g\n", mults[0], mults[1], mults[2] ); + printf("Medians: %g %g %g\n", static_cast(medians[0]), static_cast(medians[1]), static_cast(medians[2])); + printf("Computed multipliers: %g %g %g\n", static_cast(mults[0]), static_cast(mults[1]), static_cast(mults[2])); printf("Median calc time us: %d\n", t3.etime(t2)); } diff --git a/rtengine/filmnegativethumb.cc b/rtengine/filmnegativethumb.cc index b31432a55..003fab8e0 100644 --- a/rtengine/filmnegativethumb.cc +++ b/rtengine/filmnegativethumb.cc @@ -89,8 +89,8 @@ void rtengine::Thumbnail::processFilmNegative( const float bmult = (MAX_OUT_VALUE / (bmed * 24)) ; if (settings->verbose) { - printf("Thumbnail channel medians: %g %g %g\n", rmed, gmed, bmed); - printf("Thumbnail computed multipliers: %g %g %g\n", rmult, gmult, bmult); + printf("Thumbnail channel medians: %g %g %g\n", static_cast(rmed), static_cast(gmed), static_cast(bmed)); + printf("Thumbnail computed multipliers: %g %g %g\n", static_cast(rmult), static_cast(gmult), static_cast(bmult)); } #ifdef __SSE2__ diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc index a56ff1918..1ba42a68b 100644 --- a/rtengine/hilite_recon.cc +++ b/rtengine/hilite_recon.cc @@ -323,7 +323,7 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue if (settings->verbose) { for (int c = 0; c < 3; ++c) { - printf("chmax[%d] : %f\tclmax[%d] : %f\tratio[%d] : %f\n", c, chmax[c], c, clmax[c], c, chmax[c] / clmax[c]); + printf("chmax[%d] : %f\tclmax[%d] : %f\tratio[%d] : %f\n", c, static_cast(chmax[c]), c, static_cast(clmax[c]), c, static_cast(chmax[c] / clmax[c])); } } @@ -366,7 +366,7 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue if (settings->verbose) { for (int c = 0; c < 3; ++c) { - printf("correction factor[%d] : %f\n", c, factor[c]); + printf("correction factor[%d] : %f\n", c, static_cast(factor[c])); } } diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index e915a11b0..c14e889ad 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -734,7 +734,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (params->blackwhite.enabled && params->blackwhite.autoc && abwListener) { if (settings->verbose) { - printf("ImProcCoordinator / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", bwAutoR, bwAutoG, bwAutoB); + printf("ImProcCoordinator / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", static_cast(bwAutoR), static_cast(bwAutoG), static_cast(bwAutoB)); } abwListener->BWChanged((float) rrm, (float) ggm, (float) bbm); @@ -871,7 +871,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) double E_V = fcomp + log2(double ((fnum * fnum) / fspeed / (fiso / 100.f))); E_V += params->toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV E_V += log2(params->raw.expos); // exposure raw white point ; log2 ==> linear to EV - adap = powf(2.f, E_V - 3.f); // cd / m2 + adap = pow(2.0, E_V - 3.0); // cd / m2 // end calculation adaptation scene luminosity } diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 236f3c672..7ade3e92c 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -5142,7 +5142,7 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi float *Qpr = ncie->Q_p[0]; if (settings->verbose) { - printf ("minQ=%f maxQ=%f Qpro=%f\n", minQ, maxQ, Qpro); + printf ("minQ=%f maxQ=%f Qpro=%f\n", static_cast(minQ), static_cast(maxQ), static_cast(Qpro)); } if (maxQ > Qpro) { @@ -5563,7 +5563,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double contr = (int) 50.0f * (1.1f - ospread); contr = max (0, min (100, contr)); //take gamma into account - double whiteclipg = (int) (CurveFactory::gamma2 (whiteclip * corr / 65536.0) * 65536.0); + double whiteclipg = (int) (CurveFactory::gamma2(whiteclip * static_cast(corr) / 65536.0) * 65536.0); float gavg = 0.; @@ -5585,7 +5585,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double } } - whiteclipg = CurveFactory::igamma2 ((float) (whiteclipg / 65535.0)) * 65535.0; //need to inverse gamma transform to get correct exposure compensation parameter + whiteclipg = CurveFactory::igamma2(whiteclipg / 65535.0) * 65535.0; //need to inverse gamma transform to get correct exposure compensation parameter //correction with gamma black = (int) ((65535 * black) / whiteclipg); @@ -5820,8 +5820,8 @@ void ImProcFunctions::lab2rgb (const LabImage &src, Imagefloat &dst, const Glib: */ void ImProcFunctions::colorToningLabGrid(LabImage *lab, int xstart, int xend, int ystart, int yend, bool MultiThread) { - const float factor = ColorToningParams::LABGRID_CORR_MAX * 3.f; - const float scaling = ColorToningParams::LABGRID_CORR_SCALE; + const double factor = ColorToningParams::LABGRID_CORR_MAX * 3.0; + const double scaling = ColorToningParams::LABGRID_CORR_SCALE; float a_scale = (params->colorToning.labgridAHigh - params->colorToning.labgridALow) / factor / scaling; float a_base = params->colorToning.labgridALow / scaling; float b_scale = (params->colorToning.labgridBHigh - params->colorToning.labgridBLow) / factor / scaling; diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 959030dc6..0e46cd596 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -103,7 +103,7 @@ void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, float** void dcdamping (float** aI, float** aO, float damping, int W, int H) { - const float dampingFac = -2.0 / (damping * damping); + const float dampingFac = -2.f / (damping * damping); #ifdef __SSE2__ vfloat Iv, Ov, Uv, zerov, onev, fourv, fivev, dampingFacv, Tv, Wv, Lv; @@ -163,7 +163,7 @@ namespace rtengine void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, const float * const * blend, int W, int H, const procparams::SharpeningParams &sharpenParam, double Scale) { - if (sharpenParam.deconvamount == 0 && sharpenParam.blurradius < 0.25f) { + if (sharpenParam.deconvamount == 0 && sharpenParam.blurradius < 0.25) { return; } BENCHFUN @@ -180,7 +180,7 @@ BENCHFUN JaggedArray* blurbuffer = nullptr; - if (sharpenParam.blurradius >= 0.25f) { + if (sharpenParam.blurradius >= 0.25) { blurbuffer = new JaggedArray(W, H); JaggedArray &blur = *blurbuffer; #ifdef _OPENMP @@ -229,7 +229,7 @@ BENCHFUN } } - if (sharpenParam.blurradius >= 0.25f) { + if (sharpenParam.blurradius >= 0.25) { JaggedArray &blur = *blurbuffer; #ifdef _OPENMP #pragma omp for @@ -255,7 +255,7 @@ void ImProcFunctions::sharpening (LabImage* lab, const procparams::SharpeningPar // calculate contrast based blend factors to reduce sharpening in regions with low contrast JaggedArray blend(W, H); - float contrast = sharpenParam.contrast / 100.f; + float contrast = sharpenParam.contrast / 100.0; buildBlendMask(lab->L, blend, W, H, contrast); if(showMask) { @@ -292,7 +292,7 @@ BENCHFUN JaggedArray blur(W, H); - if (sharpenParam.blurradius >= 0.25f) { + if (sharpenParam.blurradius >= 0.25) { #ifdef _OPENMP #pragma omp parallel #endif @@ -372,7 +372,7 @@ BENCHFUN delete [] b3; } - if (sharpenParam.blurradius >= 0.25f) { + if (sharpenParam.blurradius >= 0.25) { #ifdef _OPENMP #pragma omp parallel for #endif @@ -405,10 +405,10 @@ BENCHFUN // k=2 matrix 5x5 k=1 matrix 3x3 const int width = W, height = H; const int unif = params->sharpenMicro.uniformity; - const float amount = (k == 1 ? 2.7f : 1.f) * params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artifacts ==> 1500 = maximum, after artifacts, 25/9 if 3x3 + const float amount = (k == 1 ? 2.7 : 1.) * params->sharpenMicro.amount / 1500.0; //amount 2000.0 quasi no artifacts ==> 1500 = maximum, after artifacts, 25/9 if 3x3 if (settings->verbose) { - printf ("Micro-contrast amount %f\n", amount); + printf ("Micro-contrast amount %f\n", static_cast(amount)); printf ("Micro-contrast uniformity %i\n", unif); } @@ -439,7 +439,7 @@ BENCHFUN // calculate contrast based blend factors to reduce sharpening in regions with low contrast JaggedArray blend(W, H); - float contrast = params->sharpenMicro.contrast / 100.f; + float contrast = params->sharpenMicro.contrast / 100.0; buildBlendMask(luminance, blend, W, H, contrast); #ifdef _OPENMP @@ -648,7 +648,7 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2, bool showMask) // calculate contrast based blend factors to reduce sharpening in regions with low contrast JaggedArray blend(W, H); - float contrast = params->sharpening.contrast / 100.f; + float contrast = params->sharpening.contrast / 100.0; buildBlendMask(ncie->sh_p, blend, W, H, contrast); if(showMask) { #ifdef _OPENMP diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc index 9e7c61dcf..b0dc55b2f 100644 --- a/rtengine/iptransform.cc +++ b/rtengine/iptransform.cc @@ -689,11 +689,11 @@ static void calcGradientParams (int oW, int oH, const GradientParams& gradient, gp.ta = tan (gradient_angle); gp.xc = w * gradient_center_x; gp.yc = h * gradient_center_y; - gp.ys = sqrt ((float)h * h + (float)w * w) * (gradient_span / cos (gradient_angle)); - gp.ys_inv = 1.0 / gp.ys; - gp.top_edge_0 = gp.yc - gp.ys / 2.0; + gp.ys = rtengine::norm2(static_cast(h), static_cast(w)) * (gradient_span / cos(gradient_angle)); + gp.ys_inv = 1.f / gp.ys; + gp.top_edge_0 = gp.yc - gp.ys / 2.f; - if (gp.ys < 1.0 / h) { + if (h * gp.ys < 1.f) { gp.ys_inv = 0; gp.ys = 0; } @@ -723,7 +723,7 @@ static float calcGradientFactor (const struct grad_params& gp, int x, int y) val = 1.f - pow3 (xcosf (val)); } - return gp.scale + val * (1.0 - gp.scale); + return gp.scale + val * (1.f - gp.scale); } } else { int gy = gp.transpose ? x : y; @@ -747,7 +747,7 @@ static float calcGradientFactor (const struct grad_params& gp, int x, int y) val = 1.f - pow3 (xcosf (val)); } - return gp.scale + val * (1.0 - gp.scale); + return gp.scale + val * (1.f - gp.scale); } } } @@ -766,7 +766,7 @@ static void calcPCVignetteParams (int fW, int fH, int oW, int oH, const PCVignet { // ellipse formula: (x/a)^2 + (y/b)^2 = 1 - double roundness = pcvignette.roundness / 100.0; + float roundness = pcvignette.roundness / 100.f; pcv.feather = pcvignette.feather / 100.0; if (crop.enabled) { @@ -783,42 +783,40 @@ static void calcPCVignetteParams (int fW, int fH, int oW, int oH, const PCVignet pcv.h = oH; } - pcv.fadeout_mul = 1.0 / (0.05 * sqrtf (oW * oW + oH * oH)); + pcv.fadeout_mul = 20.0 / rtengine::norm2(static_cast(oW), static_cast(oW)); float short_side = (pcv.w < pcv.h) ? pcv.w : pcv.h; float long_side = (pcv.w > pcv.h) ? pcv.w : pcv.h; pcv.sep = 2; pcv.sepmix = 0; - pcv.oe_a = sqrt (2.0) * long_side * 0.5; + pcv.oe_a = std::sqrt(2.f) * long_side * 0.5f; pcv.oe_b = pcv.oe_a * short_side / long_side; - pcv.ie_mul = (1.0 / sqrt (2.0)) * (1.0 - pcv.feather); + pcv.ie_mul = (1.f - pcv.feather) / std::sqrt(2.f); pcv.is_super_ellipse_mode = false; pcv.is_portrait = (pcv.w < pcv.h); - if (roundness < 0.5) { + if (roundness < 0.5f) { // make super-ellipse of higher and higher degree pcv.is_super_ellipse_mode = true; - float sepf = 2 + 4 * powf (1.0 - 2 * roundness, 1.3); // gamma 1.3 used to balance the effect in the 0.0...0.5 roundness range + float sepf = 2 + 4 * std::pow(1.f - 2 * roundness, 1.3f); // gamma 1.3 used to balance the effect in the 0.0...0.5 roundness range pcv.sep = ((int)sepf) & ~0x1; - pcv.sepmix = (sepf - pcv.sep) * 0.5; // 0.0 to 1.0 - pcv.oe1_a = powf (2.0, 1.0 / pcv.sep) * long_side * 0.5; + pcv.sepmix = (sepf - pcv.sep) * 0.5f; // 0.0 to 1.0 + pcv.oe1_a = std::pow(2.f, 1.f / pcv.sep) * long_side * 0.5f; pcv.oe1_b = pcv.oe1_a * short_side / long_side; - pcv.ie1_mul = (1.0 / powf (2.0, 1.0 / pcv.sep)) * (1.0 - pcv.feather); - pcv.oe2_a = powf (2.0, 1.0 / (pcv.sep + 2)) * long_side * 0.5; + pcv.ie1_mul = (1.f - pcv.feather) / std::pow(2.f, 1.f / pcv.sep); + pcv.oe2_a = std::pow(2.f, 1.f / (pcv.sep + 2)) * long_side * 0.5f; pcv.oe2_b = pcv.oe2_a * short_side / long_side; - pcv.ie2_mul = (1.0 / powf (2.0, 1.0 / (pcv.sep + 2))) * (1.0 - pcv.feather); - } - - if (roundness > 0.5) { + pcv.ie2_mul = (1.f - pcv.feather) / std::pow(2.f, 1.f / (pcv.sep + 2)); + } else if (roundness > 0.5f) { // scale from fitted ellipse towards circle - float rad = sqrtf (pcv.w * pcv.w + pcv.h * pcv.h) / 2.0; + float rad = rtengine::norm2(static_cast(pcv.w), static_cast(pcv.h)) / 2.f; float diff_a = rad - pcv.oe_a; float diff_b = rad - pcv.oe_b; - pcv.oe_a = pcv.oe_a + diff_a * 2 * (roundness - 0.5); - pcv.oe_b = pcv.oe_b + diff_b * 2 * (roundness - 0.5); + pcv.oe_a = pcv.oe_a + diff_a * 2 * (roundness - 0.5f); + pcv.oe_b = pcv.oe_b + diff_b * 2 * (roundness - 0.5f); } - pcv.scale = powf (2, -pcvignette.strength); + pcv.scale = std::pow(2, -pcvignette.strength); if (pcvignette.strength >= 6.0) { pcv.scale = 0.0; @@ -954,23 +952,23 @@ void ImProcFunctions::transformLuminanceOnly (Imagefloat* original, Imagefloat* double r = sqrt (vig_x_d * vig_x_d + vig_y_d * vig_y_d); if (darkening) { - factor /= std::max (v + mul * tanh (b * (maxRadius - r) / maxRadius), 0.001); + factor /= std::max (v + mul * tanh(b * (maxRadius - r) / maxRadius), 0.001); } else { - factor = v + mul * tanh (b * (maxRadius - r) / maxRadius); + factor = v + mul * tanh(b * (maxRadius - r) / maxRadius); } } if (applyGradient) { - factor *= calcGradientFactor (gp, cx + x, cy + y); + factor *= static_cast(calcGradientFactor(gp, cx + x, cy + y)); } if (applyPCVignetting) { - factor *= calcPCVignetteFactor (pcv, cx + x, cy + y); + factor *= static_cast(calcPCVignetteFactor(pcv, cx + x, cy + y)); } - transformed->r (y, x) = original->r (y, x) * factor; - transformed->g (y, x) = original->g (y, x) * factor; - transformed->b (y, x) = original->b (y, x) * factor; + transformed->r(y, x) = static_cast(original->r(y, x)) * factor; + transformed->g(y, x) = static_cast(original->g(y, x)) * factor; + transformed->b(y, x) = static_cast(original->b(y, x)) * factor; } } } @@ -1147,11 +1145,11 @@ void ImProcFunctions::transformGeneral(bool highQuality, Imagefloat *original, I } if (enableGradient) { - vignmul *= calcGradientFactor(gp, cx + x, cy + y); + vignmul *= static_cast(calcGradientFactor(gp, cx + x, cy + y)); } if (enablePCVignetting) { - vignmul *= calcPCVignetteFactor(pcv, cx + x, cy + y); + vignmul *= static_cast(calcPCVignetteFactor(pcv, cx + x, cy + y)); } if (yc > 0 && yc < original->getHeight() - 2 && xc > 0 && xc < original->getWidth() - 2) { From f0b5ca02e7f9649db5354db6313885ee4b4fbbb7 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 10 Feb 2020 16:22:42 +0100 Subject: [PATCH 055/264] More double promote fixes --- rtengine/imagesource.h | 2 +- rtengine/ipwavelet.cc | 27 +++---- rtengine/rawimage.cc | 41 +++++----- rtengine/rawimagesource.cc | 63 +++++++-------- rtengine/shmap.cc | 115 ++++++++++++--------------- rtengine/shmap.h | 2 - rtengine/simpleprocess.cc | 8 +- rtgui/cropwindow.cc | 2 +- rtgui/defringe.cc | 2 +- rtgui/diagonalcurveeditorsubgroup.cc | 6 +- rtgui/dirpyrequalizer.cc | 4 +- rtgui/gradient.cc | 4 +- rtgui/histogrampanel.cc | 20 ++--- rtgui/hsvequalizer.cc | 2 +- rtgui/labcurve.cc | 2 +- rtgui/labgrid.cc | 16 ++-- rtgui/lockablecolorpicker.cc | 14 ++-- 17 files changed, 155 insertions(+), 175 deletions(-) diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index 76f4e435a..96711c1a0 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -85,7 +85,7 @@ protected: public: ImageSource () : references (1), redAWBMul(-1.), greenAWBMul(-1.), blueAWBMul(-1.), - embProfile(nullptr), idata(nullptr), dirpyrdenoiseExpComp(INFINITY) {} + embProfile(nullptr), idata(nullptr), dirpyrdenoiseExpComp(RT_INFINITY) {} ~ImageSource () override {} virtual int load (const Glib::ustring &fname) = 0; diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index be64be0fc..0e621b254 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -897,10 +897,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //init for edge and denoise float vari[4]; - vari[0] = 8.f * SQR((cp.lev0n / 125.0) * (1.0 + cp.lev0n / 25.0)); - vari[1] = 8.f * SQR((cp.lev1n / 125.0) * (1.0 + cp.lev1n / 25.0)); - vari[2] = 8.f * SQR((cp.lev2n / 125.0) * (1.0 + cp.lev2n / 25.0)); - vari[3] = 8.f * SQR((cp.lev3n / 125.0) * (1.0 + cp.lev3n / 25.0)); + vari[0] = 8.f * SQR((cp.lev0n / 125.f) * (1.f + cp.lev0n / 25.f)); + vari[1] = 8.f * SQR((cp.lev1n / 125.f) * (1.f + cp.lev1n / 25.f)); + vari[2] = 8.f * SQR((cp.lev2n / 125.f) * (1.f + cp.lev2n / 25.f)); + vari[3] = 8.f * SQR((cp.lev3n / 125.f) * (1.f + cp.lev3n / 25.f)); if((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) { int edge = 1; @@ -1116,7 +1116,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float Chprov1 = sqrtf(SQR(a) + SQR(b)); yBuffer[col] = (Chprov1 == 0.f) ? 1.f : a / Chprov1; xBuffer[col] = (Chprov1 == 0.f) ? 0.f : b / Chprov1; - chprovBuffer[col] = Chprov1 / 327.68; + chprovBuffer[col] = Chprov1 / 327.68f; } } @@ -1280,7 +1280,7 @@ void ImProcFunctions::Aver( float * RESTRICT DataList, int datalen, float &aver for(int i = 0; i < datalen; i++) { if(DataList[i] >= thres) { - averaP += DataList[i]; + averaP += static_cast(DataList[i]); if(DataList[i] > lmax) { lmax = DataList[i]; @@ -1288,7 +1288,7 @@ void ImProcFunctions::Aver( float * RESTRICT DataList, int datalen, float &aver countP++; } else if(DataList[i] < -thres) { - averaN += DataList[i]; + averaN += static_cast(DataList[i]); if(DataList[i] < lmin) { lmin = DataList[i]; @@ -1334,10 +1334,10 @@ void ImProcFunctions::Sigma( float * RESTRICT DataList, int datalen, float aver for(int i = 0; i < datalen; i++) { if(DataList[i] >= thres) { - variP += SQR(DataList[i] - averagePlus); + variP += static_cast(SQR(DataList[i] - averagePlus)); countP++; } else if(DataList[i] <= -thres) { - variN += SQR(DataList[i] - averageNeg); + variN += static_cast(SQR(DataList[i] - averageNeg)); countN++; } } @@ -1613,7 +1613,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #endif for (int i = 0; i < W_L * H_L; i++) { - avedbl += WavCoeffs_L0[i]; + avedbl += static_cast(WavCoeffs_L0[i]); } #ifdef _OPENMP @@ -1702,7 +1702,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif { - if(contrast != 0.f && cp.resena && max0 > 0.0) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step + if(contrast != 0.f && cp.resena && max0 > 0.f) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step { #ifdef _OPENMP #pragma omp for @@ -2011,7 +2011,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a, editWhatever->v(i,j) = valpar; } */ - float valparam = float((hhCurve->getVal(Color::huelab_to_huehsv2(hueR)) - 0.5f) * 1.7f) + hueR; //get H=f(H) 1.7 optimisation ! + float valparam = (static_cast(hhCurve->getVal(Color::huelab_to_huehsv2(hueR))) - 0.5f) * 1.7f + hueR; //get H=f(H) 1.7 optimisation ! float2 sincosval = xsincosf(valparam); WavCoeffs_a0[i * W_L + j] = chR * sincosval.y; WavCoeffs_b0[i * W_L + j] = chR * sincosval.x; @@ -3016,9 +3016,8 @@ void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschit if(Chutili) { int i_i = i / W_L; int j_j = i - i_i * W_L; - double lr; float modhue2 = varhue[i_i][j_j]; - float valparam = float((ChCurve->getVal(lr = Color::huelab_to_huehsv2(modhue2)) - 0.5f)); //get valparam=f(H) + float valparam = static_cast(ChCurve->getVal(Color::huelab_to_huehsv2(modhue2))) - 0.5f; //get valparam=f(H) if(valparam > 0.f) { scale2 = 1.f + 3.f * valparam; //arbitrary value diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc index 4421e4af4..34d5d961c 100644 --- a/rtengine/rawimage.cc +++ b/rtengine/rawimage.cc @@ -171,7 +171,7 @@ void RawImage::get_colorsCoeff( float *pre_mul_, float *scale_mul_, float *cblac } for (int c = 0; c < 4; c++) { - dsumthr[c] += sum[c]; + dsumthr[c] += static_cast(sum[c]); } skip_block2: @@ -195,7 +195,7 @@ skip_block2: } for(int c = 0; c < 4; c++) { - dsum[c] -= cblack_[c] * dsum[c + 4]; + dsum[c] -= static_cast(cblack_[c]) * dsum[c + 4]; } } else if(isXtrans()) { @@ -241,7 +241,7 @@ skip_block2: } for (int c = 0; c < 8; c++) { - dsumthr[c] += sum[c]; + dsumthr[c] += static_cast(sum[c]); } skip_block3: @@ -365,18 +365,14 @@ skip_block: } for (dmin = DBL_MAX, dmax = c = 0; c < 4; c++) { - if (dmin > pre_mul_[c]) { - dmin = pre_mul_[c]; - } - - if (dmax < pre_mul_[c]) { - dmax = pre_mul_[c]; - } + dmin = rtengine::min(dmin, pre_mul_[c]); + dmax = rtengine::max(dmax, pre_mul_[c]); } for (c = 0; c < 4; c++) { int sat = this->get_white(c) - cblack_[c]; - scale_mul_[c] = (pre_mul_[c] /= dmax) * 65535.0 / sat; + pre_mul_[c] /= static_cast(dmax); + scale_mul_[c] = pre_mul_[c] * 65535.f / sat; } if (settings->verbose) { @@ -387,25 +383,30 @@ skip_block: asn[c] = 0; } - if (asn[c] > dmax) { + if (asn[c] > static_cast(dmax)) { dmax = asn[c]; } } for (c = 0; c < 4; c++) { - asn[c] /= dmax; + asn[c] /= static_cast(dmax); } printf("cam_mul:[%f %f %f %f], AsShotNeutral:[%f %f %f %f]\n", - cam_mul[0], cam_mul[1], cam_mul[2], cam_mul[3], asn[0], asn[1], asn[2], asn[3]); + static_cast(cam_mul[0]), static_cast(cam_mul[1]), + static_cast(cam_mul[2]), static_cast(cam_mul[3]), + static_cast(asn[0]), static_cast(asn[1]), static_cast(asn[2]), static_cast(asn[3])); printf("pre_mul:[%f %f %f %f], scale_mul:[%f %f %f %f], cblack:[%f %f %f %f]\n", - pre_mul_[0], pre_mul_[1], pre_mul_[2], pre_mul_[3], - scale_mul_[0], scale_mul_[1], scale_mul_[2], scale_mul_[3], - cblack_[0], cblack_[1], cblack_[2], cblack_[3]); + static_cast(pre_mul_[0]), static_cast(pre_mul_[1]), + static_cast(pre_mul_[2]), static_cast(pre_mul_[3]), + static_cast(scale_mul_[0]), static_cast(scale_mul_[1]), + static_cast(scale_mul_[2]), static_cast(scale_mul_[3]), + static_cast(cblack_[0]), static_cast(cblack_[1]), + static_cast(cblack_[2]), static_cast(cblack_[3])); printf("rgb_cam:[ [ %f %f %f], [%f %f %f], [%f %f %f] ]%s\n", - rgb_cam[0][0], rgb_cam[1][0], rgb_cam[2][0], - rgb_cam[0][1], rgb_cam[1][1], rgb_cam[2][1], - rgb_cam[0][2], rgb_cam[1][2], rgb_cam[2][2], + static_cast(rgb_cam[0][0]), static_cast(rgb_cam[1][0]), static_cast(rgb_cam[2][0]), + static_cast(rgb_cam[0][1]), static_cast(rgb_cam[1][1]), static_cast(rgb_cam[2][1]), + static_cast(rgb_cam[0][2]), static_cast(rgb_cam[1][2]), static_cast(rgb_cam[2][2]), (!this->isBayer()) ? " (not bayer)" : ""); } diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 003e018a4..fcc85f2c6 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -17,6 +17,7 @@ * along with RawTherapee. If not, see . */ #include +#include #include #include "camconst.h" @@ -98,7 +99,7 @@ void transLineFuji (const float* const red, const float* const green, const floa { // Fuji SuperCCD rotation + coarse rotation - int start = ABS(fw - i); + int start = std::abs(fw - i); int w = fw * 2 + 1; int h = (imheight - fw) * 2 + 1; int end = min(h + fw - i, w - fw + i); @@ -422,10 +423,6 @@ void transLineD1x (const float* const red, const float* const green, const float namespace rtengine { -#undef ABS - -#define ABS(a) ((a)<0?-(a):(a)) - RawImageSource::RawImageSource () : ImageSource() , W(0), H(0) @@ -615,7 +612,7 @@ float calculate_scale_mul(float scale_mul[4], const float pre_mul_[4], const flo { if (isMono || colors == 1) { for (int c = 0; c < 4; c++) { - scale_mul[c] = 65535.0 / (c_white[c] - c_black[c]); + scale_mul[c] = 65535.f / (c_white[c] - c_black[c]); } } else { float pre_mul[4]; @@ -631,7 +628,7 @@ float calculate_scale_mul(float scale_mul[4], const float pre_mul_[4], const flo float maxpremul = max(pre_mul[0], pre_mul[1], pre_mul[2], pre_mul[3]); for (int c = 0; c < 4; c++) { - scale_mul[c] = (pre_mul[c] / maxpremul) * 65535.0 / (c_white[c] - c_black[c]); + scale_mul[c] = (pre_mul[c] / maxpremul) * 65535.f / (c_white[c] - c_black[c]); } } @@ -670,7 +667,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); for (int i = 0; i < 4; ++i) { - c_white[i] = (ri->get_white(i) - cblacksom[i]) / raw.expos + cblacksom[i]; + c_white[i] = (ri->get_white(i) - cblacksom[i]) / static_cast(raw.expos) + cblacksom[i]; } float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); @@ -679,21 +676,21 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima bm = new_scale_mul[2] / scale_mul[2] * gain; //fprintf(stderr, "camera gain: %f, current wb gain: %f, diff in stops %f\n", camInitialGain, gain, log2(camInitialGain) - log2(gain)); } else { - // old scaling: used a fixed reference gain based on camera (as-shot) white balance - - // how much we need to scale each channel to get our new white balance - rm = refwb_red / rm; - gm = refwb_green / gm; - bm = refwb_blue / bm; - // normalize so larger multiplier becomes 1.0 - float minval = min(rm, gm, bm); - rm /= minval; - gm /= minval; - bm /= minval; - // multiply with reference gain, ie as-shot WB - rm *= camInitialGain; - gm *= camInitialGain; - bm *= camInitialGain; +// // old scaling: used a fixed reference gain based on camera (as-shot) white balance +// +// // how much we need to scale each channel to get our new white balance +// rm = refwb_red / rm; +// gm = refwb_green / gm; +// bm = refwb_blue / bm; +// // normalize so larger multiplier becomes 1.0 +// float minval = min(rm, gm, bm); +// rm /= minval; +// gm /= minval; +// bm /= minval; +// // multiply with reference gain, ie as-shot WB +// rm *= camInitialGain; +// gm *= camInitialGain; +// bm *= camInitialGain; } defGain = 0.0; @@ -872,13 +869,13 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima for (int i = 1; i < image->getHeight() - 1; i++) { for (int j = 2 - (a + i + 1) % 2; j < image->getWidth() - 1; j += 2) { // edge-adaptive interpolation - double dh = (ABS(image->r(i, j + 1) - image->r(i, j - 1)) + ABS(image->g(i, j + 1) - image->g(i, j - 1)) + ABS(image->b(i, j + 1) - image->b(i, j - 1))) / 1.0; - double dv = (ABS(image->r(i + 1, j) - image->r(i - 1, j)) + ABS(image->g(i + 1, j) - image->g(i - 1, j)) + ABS(image->b(i + 1, j) - image->b(i - 1, j))) / 1.0; - double eh = 1.0 / (1.0 + dh); - double ev = 1.0 / (1.0 + dv); - image->r(i, j) = (eh * (image->r(i, j + 1) + image->r(i, j - 1)) + ev * (image->r(i + 1, j) + image->r(i - 1, j))) / (2.0 * (eh + ev)); - image->g(i, j) = (eh * (image->g(i, j + 1) + image->g(i, j - 1)) + ev * (image->g(i + 1, j) + image->g(i - 1, j))) / (2.0 * (eh + ev)); - image->b(i, j) = (eh * (image->b(i, j + 1) + image->b(i, j - 1)) + ev * (image->b(i + 1, j) + image->b(i - 1, j))) / (2.0 * (eh + ev)); + float dh = (std::fabs(image->r(i, j + 1) - image->r(i, j - 1)) + std::fabs(image->g(i, j + 1) - image->g(i, j - 1)) + std::fabs(image->b(i, j + 1) - image->b(i, j - 1))); + float dv = (std::fabs(image->r(i + 1, j) - image->r(i - 1, j)) + std::fabs(image->g(i + 1, j) - image->g(i - 1, j)) + std::fabs(image->b(i + 1, j) - image->b(i - 1, j))); + float eh = 1.f / (1.f + dh); + float ev = 1.f / (1.f + dv); + image->r(i, j) = (eh * (image->r(i, j + 1) + image->r(i, j - 1)) + ev * (image->r(i + 1, j) + image->r(i - 1, j))) / (2.f * (eh + ev)); + image->g(i, j) = (eh * (image->g(i, j + 1) + image->g(i, j - 1)) + ev * (image->g(i + 1, j) + image->g(i - 1, j))) / (2.f * (eh + ev)); + image->b(i, j) = (eh * (image->b(i, j + 1) + image->b(i, j - 1)) + ev * (image->b(i + 1, j) + image->b(i - 1, j))) / (2.f * (eh + ev)); } // first pixel @@ -1542,7 +1539,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } } - if(prepareDenoise && dirpyrdenoiseExpComp == INFINITY) { + if(prepareDenoise && dirpyrdenoiseExpComp == RT_INFINITY) { LUTu aehist; int aehistcompr; double clip = 0; @@ -3873,7 +3870,7 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) { if (fuji) { int fw = ri->get_FujiWidth(); - start = ABS(fw - x) + border; + start = std::abs(fw - x) + border; end = min(H + W - fw - x, fw + x) - border; } else { start = border; @@ -3914,7 +3911,7 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) if (fuji) { for (int i = 32; i < H - 32; i++) { int fw = ri->get_FujiWidth(); - int start = ABS(fw - i) + 32; + int start = std::abs(fw - i) + 32; int end = min(H + W - fw - i, fw + i) - 32; for (int j = start; j < end; j++) { diff --git a/rtengine/shmap.cc b/rtengine/shmap.cc index abdcc42a4..306e30bdd 100644 --- a/rtengine/shmap.cc +++ b/rtengine/shmap.cc @@ -27,6 +27,37 @@ #undef THREAD_PRIORITY_NORMAL #include "opthelper.h" +namespace { + +void fillLuminance(rtengine::Imagefloat* img, float** luminance, const float lumi[3], int W, int H) // fill with luminance +{ + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < H; i++) + for (int j = 0; j < W; j++) { + luminance[i][j] = lumi[0] * std::max(img->r(i, j), 0.f) + lumi[1] * std::max(img->g(i, j), 0.f) + lumi[2] * std::max(img->b(i, j), 0.f); + } + +} + +void fillLuminanceL(float** L, float** luminance, int W, int H) // fill with luminance +{ + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < H; i++) + for (int j = 0; j < W; j++) { + luminance[i][j] = std::max(L[i][j], 0.f) ;//we can put here some enhancements Gamma, compression data,... + } + +} + +} namespace rtengine { @@ -51,39 +82,13 @@ SHMap::~SHMap () delete [] map; } -void SHMap::fillLuminance( Imagefloat * img, float **luminance, double lumi[3] ) // fill with luminance -{ - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 0; i < H; i++) - for (int j = 0; j < W; j++) { - luminance[i][j] = lumi[0] * std::max(img->r(i, j), 0.f) + lumi[1] * std::max(img->g(i, j), 0.f) + lumi[2] * std::max(img->b(i, j), 0.f); - } - -} - -void SHMap::fillLuminanceL( float ** L, float **luminance) // fill with luminance -{ - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 0; i < H; i++) - for (int j = 0; j < W; j++) { - luminance[i][j] = std::max(L[i][j], 0.f) ;//we can put here some enhancements Gamma, compression data,... - } - -} - void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int skip) { + const float lumif[3] = { static_cast(lumi[0]), static_cast(lumi[1]), static_cast(lumi[2]) }; + if (!hq) { - fillLuminance( img, map, lumi); + fillLuminance(img, map, lumif, W, H); const bool useBoxBlur = radius > 40.0; // boxblur is less prone to artifacts for large radi @@ -91,7 +96,7 @@ void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int #pragma omp parallel if (!useBoxBlur) #endif { - gaussianBlur (map, map, W, H, radius, useBoxBlur); + gaussianBlur(map, map, W, H, radius, useBoxBlur); } } @@ -99,7 +104,7 @@ void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //experimental dirpyr shmap - float thresh = (100.f * radius); //1000; + float thresh = 100.0 * radius; //1000; // set up range function // calculate size of Lookup table. That's possible because from a value k for all i>=k rangefn[i] will be exp(-10) @@ -142,7 +147,7 @@ void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int dirpyrlo[1] = buffer; } - fillLuminance( img, dirpyrlo[0], lumi); + fillLuminance(img, dirpyrlo[0], lumif, W, H); scale = 1; int level = 0; @@ -181,28 +186,18 @@ void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int for (int j = 0; j < W; j++) { _val = map[i][j]; - if (_val < _min_f) { - _min_f = _val; - } + _min_f = std::min(_min_f, _val); + _max_f = std::max(_max_f, _val); - if (_val > _max_f) { - _max_f = _val; - } - - _avg += _val; + _avg += static_cast(_val); } #ifdef _OPENMP #pragma omp critical #endif { - if(_min_f < min_f ) { - min_f = _min_f; - } - - if(_max_f > max_f ) { - max_f = _max_f; - } + min_f = std::min(min_f, _min_f); + max_f = std::max(max_f, _max_f); } } _avg /= ((H) * (W)); @@ -214,7 +209,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip) { if (!hq) { - fillLuminanceL( L, map); + fillLuminanceL(L, map, W, H); #ifdef _OPENMP #pragma omp parallel #endif @@ -228,7 +223,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip) { //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //experimental dirpyr shmap - float thresh = (100.f * radius); //1000; + float thresh = 100.0 * radius; //1000; int levrad; // = 16; levrad = 2; //for retinex - otherwise levrad = 16 // set up range function @@ -274,7 +269,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip) dirpyrlo[1] = buffer; } - fillLuminanceL( L, dirpyrlo[0]); + fillLuminanceL(L, dirpyrlo[0], W, H); scale = 1; int level = 0; @@ -313,28 +308,18 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip) for (int j = 0; j < W; j++) { _val = map[i][j]; - if (_val < _min_f) { - _min_f = _val; - } + _min_f = std::min(_min_f, _val); + _max_f = std::max(_max_f, _val); - if (_val > _max_f) { - _max_f = _val; - } - - _avg += _val; + _avg += static_cast(_val); } #ifdef _OPENMP #pragma omp critical #endif { - if(_min_f < min_f ) { - min_f = _min_f; - } - - if(_max_f > max_f ) { - max_f = _max_f; - } + min_f = std::min(min_f, _min_f); + max_f = std::max(max_f, _max_f); } } _avg /= ((H) * (W)); diff --git a/rtengine/shmap.h b/rtengine/shmap.h index 68e352b23..b1b1e5eff 100644 --- a/rtengine/shmap.h +++ b/rtengine/shmap.h @@ -48,8 +48,6 @@ public: private: int W, H; - void fillLuminance( Imagefloat * img, float **luminance, double lumi[3] ); - void fillLuminanceL( float ** L, float **luminance ); void dirpyr_shmap(float ** data_fine, float ** data_coarse, int width, int height, const LUTf& rangefn, int level, int scale); }; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 1c1e46a65..c50e23d4b 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -994,7 +994,7 @@ private: ipf.rgbProc (baseImg, labView, nullptr, curve1, curve2, curve, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve, options.chunkSizeRGB, options.measure); if (settings->verbose) { - printf ("Output image / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", autor, autog, autob); + printf ("Output image / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", static_cast(autor), static_cast(autog), static_cast(autob)); } // if clut was used and size of clut cache == 1 we free the memory used by the clutstore (default clut cache size = 1 for 32 bit OS) @@ -1162,10 +1162,10 @@ private: adap = 2000.; }//if no exif data or wrong else { - float E_V = fcomp + log2 ((fnum * fnum) / fspeed / (fiso / 100.f)); + double E_V = fcomp + log2 ((fnum * fnum) / fspeed / (fiso / 100.f)); E_V += params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV - E_V += log2 (params.raw.expos); // exposure raw white point ; log2 ==> linear to EV - adap = powf (2.f, E_V - 3.f); //cd / m2 + E_V += log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV + adap = std::pow(2.0, E_V - 3.0); //cd / m2 } LUTf CAMBrightCurveJ; diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index edc378700..8e1dcfaf5 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -124,7 +124,7 @@ void CropWindow::initZoomSteps() zoomSteps.push_back(ZoomStep(" 8%", 1.0/12.0, 120, true)); char lbl[64]; for (int s = 100; s >= 11; --s) { - float z = 10./float(s); + float z = 10.f / s; sprintf(lbl, "% 2d%%", int(z * 100)); bool is_major = (s == s/10 * 10); zoomSteps.push_back(ZoomStep(lbl, z, s, is_major)); diff --git a/rtgui/defringe.cc b/rtgui/defringe.cc index cdec88edc..7aae8377a 100644 --- a/rtgui/defringe.cc +++ b/rtgui/defringe.cc @@ -37,7 +37,7 @@ Defringe::Defringe () : FoldableToolPanel(this, "defringe", M("TP_DEFRINGE_LABEL float R, G, B; for (int i = 0; i < 7; i++) { - float x = float(i) * (1.0f / 6.0); + float x = i / 6.f; Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); bottomMilestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) ); } diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index eed6c63d3..079a083ea 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -477,13 +477,13 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i double pos[3]; shcSelector->getPositions(pos[0], pos[1], pos[2]); - if (pipetteVal >= pos[2]) { + if (static_cast(pipetteVal) >= pos[2]) { editedAdjuster = highlights; paramCurve->setActiveParam(4); - } else if(pipetteVal >= pos[1]) { + } else if(static_cast(pipetteVal) >= pos[1]) { editedAdjuster = lights; paramCurve->setActiveParam(5); - } else if(pipetteVal >= pos[0]) { + } else if(static_cast(pipetteVal) >= pos[0]) { editedAdjuster = darks; paramCurve->setActiveParam(6); } else { diff --git a/rtgui/dirpyrequalizer.cc b/rtgui/dirpyrequalizer.cc index fd0268efa..34aecf095 100644 --- a/rtgui/dirpyrequalizer.cc +++ b/rtgui/dirpyrequalizer.cc @@ -428,7 +428,7 @@ void DirPyrEqualizer::lumacontrastPlusPressed () { for (int i = 0; i < 6; i++) { - float inc = 0.05 * (6 - i); + double inc = 0.05 * (6 - i); multiplier[i]->setValue(multiplier[i]->getValue() + inc); adjusterChanged(multiplier[i], multiplier[i]->getValue()); } @@ -439,7 +439,7 @@ void DirPyrEqualizer::lumacontrastMinusPressed () { for (int i = 0; i < 6; i++) { - float inc = -0.05 * (6 - i); + double inc = -0.05 * (6 - i); multiplier[i]->setValue(multiplier[i]->getValue() + inc); adjusterChanged(multiplier[i], multiplier[i]->getValue()); } diff --git a/rtgui/gradient.cc b/rtgui/gradient.cc index 4f389e112..b46f8e1ca 100644 --- a/rtgui/gradient.cc +++ b/rtgui/gradient.cc @@ -164,7 +164,7 @@ void Gradient::updateGeometry(const int centerX, const int centerY, const double const auto decay = feather * rtengine::norm2 (imW, imH) / 200.0; rtengine::Coord origin (imW / 2 + centerX * imW / 200, imH / 2 + centerY * imH / 200); - const auto updateLine = [&](Geometry* geometry, const float radius, const float begin, const float end) + const auto updateLine = [&](Geometry* geometry, const double radius, const double begin, const double end) { const auto line = static_cast(geometry); line->begin = PolarCoord(radius, -degree + begin); @@ -173,7 +173,7 @@ void Gradient::updateGeometry(const int centerX, const int centerY, const double line->end += origin; }; - const auto updateLineWithDecay = [&](Geometry* geometry, const float radius, const float offSetAngle) + const auto updateLineWithDecay = [&](Geometry* geometry, const double radius, const double offSetAngle) { const auto line = static_cast(geometry); line->begin = PolarCoord (radius, -degree + 180.) + PolarCoord (decay, -degree + offSetAngle); diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index dd0cbde46..b8338e4e8 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -518,26 +518,26 @@ void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustrin // Luma cc->set_source_rgb(1.0, 1.0, 1.0); if (options.histogramDrawMode < 2) { - cc->move_to(Lab_L * (winw - 3.*s) / 100.0 + 0.5*s, 0); - cc->line_to(Lab_L * (winw - 3.*s) / 100.0 + 0.5*s, winh - 0); + cc->move_to(static_cast(Lab_L) * (winw - 3. * s) / 100.0 + 0.5 * s, 0); + cc->line_to(static_cast(Lab_L) * (winw - 3. * s) / 100.0 + 0.5 * s, winh - 0); } else { - cc->move_to(HistogramScaling::log (100, Lab_L) * (winw - 1.) / 100.0 + 0.5*s, 0); - cc->line_to(HistogramScaling::log (100, Lab_L) * (winw - 1.) / 100.0 + 0.5*s, winh - 0); + cc->move_to(HistogramScaling::log(100, Lab_L) * (winw - 1.) / 100.0 + 0.5 * s, 0); + cc->line_to(HistogramScaling::log(100, Lab_L) * (winw - 1.) / 100.0 + 0.5 * s, winh - 0); } cc->stroke(); } if (needChroma) { // Chroma - float chromaval = sqrt(Lab_a * Lab_a + Lab_b * Lab_b) / 1.8; + double chromaval = sqrt(Lab_a * Lab_a + Lab_b * Lab_b) / 1.8; // float chromaval = sqrt(Lab_a*Lab_a + Lab_b*Lab_b); cc->set_source_rgb(0.9, 0.9, 0.0); if (options.histogramDrawMode < 2) { - cc->move_to(chromaval * (winw - 1.) / 100.0 + 0.5*s, 0); - cc->line_to(chromaval * (winw - 1.) / 100.0 + 0.5*s, winh - 0); + cc->move_to(chromaval * (winw - 1.) / 100.0 + 0.5 * s, 0); + cc->line_to(chromaval * (winw - 1.) / 100.0 + 0.5 * s, winh - 0); } else { - cc->move_to(HistogramScaling::log (100, chromaval) * (winw - 1.) / 100.0 + 0.5*s, 0); - cc->line_to(HistogramScaling::log (100, chromaval) * (winw - 1.) / 100.0 + 0.5*s, winh - 0); + cc->move_to(HistogramScaling::log(100, chromaval) * (winw - 1.) / 100.0 + 0.5 * s, 0); + cc->line_to(HistogramScaling::log(100, chromaval) * (winw - 1.) / 100.0 + 0.5 * s, winh - 0); } cc->stroke(); } @@ -989,7 +989,7 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, cr->set_line_width(s); cr->move_to (0, vsize - 1); - scale = scale <= 0.f ? 0.001f : scale; // avoid division by zero and negative values + scale = scale <= 0.0 ? 0.001 : scale; // avoid division by zero and negative values for (int i = 0; i < 256; i++) { double val = data[i] * (double)vsize / scale; diff --git a/rtgui/hsvequalizer.cc b/rtgui/hsvequalizer.cc index ee3eb90a7..817ba1f4d 100644 --- a/rtgui/hsvequalizer.cc +++ b/rtgui/hsvequalizer.cc @@ -38,7 +38,7 @@ HSVEqualizer::HSVEqualizer () : FoldableToolPanel(this, "hsvequalizer", M("TP_HS // -0.1 rad < Hue < 1.6 rad for (int i = 0; i < 7; i++) { - float x = float(i) * (1.0f / 6.0); + float x = i / 6.0; Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); bottomMilestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) ); } diff --git a/rtgui/labcurve.cc b/rtgui/labcurve.cc index 491b02c4c..5f4febc0a 100644 --- a/rtgui/labcurve.cc +++ b/rtgui/labcurve.cc @@ -203,7 +203,7 @@ LCurve::LCurve () : FoldableToolPanel(this, "labcurves", M("TP_LABCURVE_LABEL"), for (int i = 0; i < 7; i++) { float R, G, B; - float x = float(i) * (1.0f / 6.0); + float x = i / 6.0; Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); milestones.emplace_back(x, R, G, B); } diff --git a/rtgui/labgrid.cc b/rtgui/labgrid.cc index 516dbb825..d8a22b1d9 100644 --- a/rtgui/labgrid.cc +++ b/rtgui/labgrid.cc @@ -209,8 +209,8 @@ bool LabGridArea::on_draw(const ::Cairo::RefPtr &crf) float x, y, z; int ii = i - cells/2; int jj = j - cells/2; - float a = step * (ii + 0.5); - float b = step * (jj + 0.5); + float a = step * (ii + 0.5f); + float b = step * (jj + 0.5f); Color::Lab2XYZ(25000.f, a, b, x, y, z); Color::xyz2srgb(x, y, z, R, G, B); cr->set_source_rgb(R / 65535.f, G / 65535.f, B / 65535.f); @@ -231,10 +231,10 @@ bool LabGridArea::on_draw(const ::Cairo::RefPtr &crf) // drawing the connection line cr->set_antialias(Cairo::ANTIALIAS_DEFAULT); float loa, hia, lob, hib; - loa = .5f * (width + width * low_a); - hia = .5f * (width + width * high_a); - lob = .5f * (height + height * low_b); - hib = .5f * (height + height * high_b); + loa = .5 * (width + width * low_a); + hia = .5 * (width + width * high_a); + lob = .5 * (height + height * low_b); + hib = .5 * (height + height * high_b); cr->set_line_width(2. * double(s)); cr->set_source_rgb(0.6, 0.6, 0.6); cr->move_to(loa, lob); @@ -319,8 +319,8 @@ bool LabGridArea::on_motion_notify_event(GdkEventMotion *event) int height = get_allocated_height() - 2 * inset * s - padding.get_top() - padding.get_bottom(); const float mouse_x = std::min(double(std::max(event->x - inset * s - padding.get_right(), 0.)), double(width)); const float mouse_y = std::min(double(std::max(get_allocated_height() - 1 - event->y - inset * s - padding.get_bottom(), 0.)), double(height)); - const float ma = (2.0 * mouse_x - width) / (float)width; - const float mb = (2.0 * mouse_y - height) / (float)height; + const float ma = (2.f * mouse_x - width) / width; + const float mb = (2.f * mouse_y - height) / height; if (isDragged) { if (litPoint == LOW) { low_a = ma; diff --git a/rtgui/lockablecolorpicker.cc b/rtgui/lockablecolorpicker.cc index 071847424..0a08bb945 100644 --- a/rtgui/lockablecolorpicker.cc +++ b/rtgui/lockablecolorpicker.cc @@ -37,7 +37,7 @@ void LockableColorPicker::updateBackBuffer () int newW, newH; // -------------------- setting some key constants --------------------- - constexpr float circlePadding = 3.f; // keep this value odd + constexpr double circlePadding = 3.0; // keep this value odd constexpr double opacity = 0.62; // --------------------------------------------------------------------- @@ -121,18 +121,18 @@ void LockableColorPicker::updateBackBuffer () bbcr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); bbcr->set_line_width (0.); - float center = (float)size / 2.f + circlePadding; + double center = static_cast(size) / 2.0 + circlePadding; // black background of the whole color picker bbcr->set_line_width (0.); bbcr->set_source_rgba (0., 0., 0., opacity); - bbcr->arc_negative (center, center, center, 0., (double)rtengine::RT_PI); + bbcr->arc_negative (center, center, center, 0., rtengine::RT_PI); bbcr->line_to (0, 2. * center + textHeight); - bbcr->arc_negative (2. * textPadding, 2. * center + textHeight, 2. * textPadding, (double)rtengine::RT_PI, (double)rtengine::RT_PI / 2.); + bbcr->arc_negative (2. * textPadding, 2. * center + textHeight, 2. * textPadding, rtengine::RT_PI, rtengine::RT_PI / 2.); bbcr->line_to (textWidth, 2. * center + textHeight + 2. * textPadding); - bbcr->arc_negative (textWidth, 2. * center + textHeight, 2. * textPadding, (double)rtengine::RT_PI / 2., 0.); + bbcr->arc_negative (textWidth, 2. * center + textHeight, 2. * textPadding, rtengine::RT_PI / 2., 0.); bbcr->line_to (textWidth + 2. * textPadding, 2. * center + 2. * textPadding); - bbcr->arc_negative (textWidth, 2. * center + 2. * textPadding, 2. * textPadding, 0., (double)rtengine::RT_PI * 1.5); + bbcr->arc_negative (textWidth, 2. * center + 2. * textPadding, 2. * textPadding, 0., rtengine::RT_PI * 1.5); bbcr->line_to (2. * center, 2. * center); bbcr->close_path(); bbcr->set_line_join (Cairo::LINE_JOIN_BEVEL); @@ -222,7 +222,7 @@ void LockableColorPicker::updateBackBuffer () bbcr->set_antialias(Cairo::ANTIALIAS_SUBPIXEL); - float center = (float)size / 2.f + circlePadding; + double center = static_cast(size) / 2. + circlePadding; // light grey circle around the color mark bbcr->arc (center, center, center - circlePadding / 2., 0., 2. * (double)rtengine::RT_PI); From 4790eb08b3f6440a7a487375aec2ba2735365157 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 10 Feb 2020 09:45:39 -0800 Subject: [PATCH 056/264] Epoch -> epoch --- AboutThisBuild.txt.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AboutThisBuild.txt.in b/AboutThisBuild.txt.in index d6454d8a0..06f628187 100644 --- a/AboutThisBuild.txt.in +++ b/AboutThisBuild.txt.in @@ -15,5 +15,5 @@ OpenMP support: ${OPTION_OMP} MMAP support: ${WITH_MYFILE_MMAP} Build OS: ${BUILDINFO_OS} Build date: ${BUILDINFO_DATE} ZULU -Build Epoch: ${BUILDINFO_EPOCH} +Build epoch: ${BUILDINFO_EPOCH} Build UUID: ${BUILDINFO_UUID} From b4c0bb3acbc6b2acead76b7ea8321d01e60415b6 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 10 Feb 2020 20:06:43 +0100 Subject: [PATCH 057/264] More double promote fixes --- rtengine/lcp.cc | 132 ++++++++++++++------------------------- rtengine/lcp.h | 2 - rtgui/mycurve.cc | 2 +- rtgui/mydiagonalcurve.cc | 16 ++--- rtgui/myflatcurve.cc | 12 ++-- rtgui/retinex.cc | 2 +- rtgui/rtscalable.cc | 2 +- rtgui/rtwindow.cc | 4 +- 8 files changed, 65 insertions(+), 107 deletions(-) diff --git a/rtengine/lcp.cc b/rtengine/lcp.cc index c80a126f5..1826101e7 100644 --- a/rtengine/lcp.cc +++ b/rtengine/lcp.cc @@ -42,7 +42,6 @@ class rtengine::LCPProfile::LCPPersModel public: LCPPersModel(); bool hasModeData(LCPCorrectionMode mode) const; - void print() const; float focLen; float focDist; @@ -82,27 +81,18 @@ bool rtengine::LCPModelCommon::empty() const && param[2] == 0.0f; } -void rtengine::LCPModelCommon::print() const -{ - std::printf("focLen %g/%g; imgCenter %g/%g; scale %g; err %g\n", foc_len_x, foc_len_y, img_center_x, img_center_y, scale_factor, mean_error); - std::printf("xy0 %g/%g fxy %g/%g\n", x0, y0, fx, fy); - std::printf("param: %g/%g/%g/%g/%g\n", param[0], param[1], param[2], param[3], param[4]); -} - // weighted merge two parameters void rtengine::LCPModelCommon::merge(const LCPModelCommon& a, const LCPModelCommon& b, float facA) { - const float facB = 1.0f - facA; - - foc_len_x = facA * a.foc_len_x + facB * b.foc_len_x; - foc_len_y = facA * a.foc_len_y + facB * b.foc_len_y; - img_center_x = facA * a.img_center_x + facB * b.img_center_x; - img_center_y = facA * a.img_center_y + facB * b.img_center_y; - scale_factor = facA * a.scale_factor + facB * b.scale_factor; - mean_error = facA * a.mean_error + facB * b.mean_error; + foc_len_x = rtengine::intp(facA, a.foc_len_x, b.foc_len_x); + foc_len_y = rtengine::intp(facA, a.foc_len_y, b.foc_len_y); + img_center_x = rtengine::intp(facA, a.img_center_x, b.img_center_x); + img_center_y = rtengine::intp(facA, a.img_center_y, b.img_center_y); + scale_factor = rtengine::intp(facA, a.scale_factor, b.scale_factor); + mean_error = rtengine::intp(facA, a.mean_error, b.mean_error); for (int i = 0; i < 5; ++i) { - param[i] = facA * a.param[i] + facB * b.param[i]; + param[i] = rtengine::intp(facA, a.param[i], b.param[i]); } const float param0Sqr = param[0] * param[0]; @@ -152,7 +142,6 @@ void rtengine::LCPModelCommon::prepareParams( rfx = 1.0f / fx; rfy = 1.0f / fy; - //std::printf("FW %i /X0 %g FH %i /Y0 %g %g\n",fullWidth,x0,fullHeight,y0, imgYCenter); } rtengine::LCPProfile::LCPPersModel::LCPPersModel() : @@ -188,35 +177,6 @@ bool rtengine::LCPProfile::LCPPersModel::hasModeData(LCPCorrectionMode mode) con return false; } -void rtengine::LCPProfile::LCPPersModel::print() const -{ - std::printf("--- PersModel focLen %g; focDist %g; aperture %g\n", focLen, focDist, aperture); - std::printf("Base:\n"); - base.print(); - - if (!chromRG.empty()) { - std::printf("ChromRG:\n"); - chromRG.print(); - } - - if (!chromG.empty()) { - std::printf("ChromG:\n"); - chromG.print(); - } - - if (!chromBG.empty()) { - std::printf("ChromBG:\n"); - chromBG.print(); - } - - if (!vignette.empty()) { - std::printf("Vignette:\n"); - vignette.print(); - } - - std::printf("\n"); -} - rtengine::LCPProfile::LCPProfile(const Glib::ustring& fname) : isFisheye(false), sensorFormatFactor(1.f), @@ -522,7 +482,7 @@ void rtengine::LCPProfile::calcParams( ) { // Mix in aperture const float facAperLow = (pHigh->aperture - aperture) / (pHigh->aperture - pLow->aperture); - facLow = focLenOnSpot ? facAperLow : (0.5 * facLow + 0.5 * facAperLow); + facLow = focLenOnSpot ? facAperLow : (0.5f * (facLow + facAperLow)); } else if ( mode != LCPCorrectionMode::VIGNETTE @@ -532,7 +492,7 @@ void rtengine::LCPProfile::calcParams( ) { // focus distance for all else (if focus distance is given) const float facDistLow = (std::log(pHigh->focDist) + euler - focusDistLog) / (std::log(pHigh->focDist) - std::log(pLow->focDist)); - facLow = focLenOnSpot ? facDistLow : (0.8 * facLow + 0.2 * facDistLow); + facLow = focLenOnSpot ? facDistLow : (0.8f * facLow + 0.2f * facDistLow); } switch (mode) { @@ -555,7 +515,16 @@ void rtengine::LCPProfile::calcParams( } if (settings->verbose) { - std::printf("LCP mode=%i, dist: %g found frames: Fno %g-%g; FocLen %g-%g; Dist %g-%g with weight %g\n", toUnderlying(mode), focusDist, pLow->aperture, pHigh->aperture, pLow->focLen, pHigh->focLen, pLow->focDist, pHigh->focDist, facLow); + std::printf("LCP mode=%i, dist: %g found frames: Fno %g-%g; FocLen %g-%g; Dist %g-%g with weight %g\n", + toUnderlying(mode), + static_cast(focusDist), + static_cast(pLow->aperture), + static_cast(pHigh->aperture), + static_cast(pLow->focLen), + static_cast(pHigh->focLen), + static_cast(pLow->focDist), + static_cast(pHigh->focDist), + static_cast(facLow)); } } else { if (settings->verbose) { @@ -564,15 +533,6 @@ void rtengine::LCPProfile::calcParams( } } -void rtengine::LCPProfile::print() const -{ - std::printf("=== Profile %s\n", profileName.c_str()); - std::printf("Frames: %i, RAW: %i; Fisheye: %i; Sensorformat: %f\n", persModelCount, isRaw, isFisheye, sensorFormatFactor); - - for (int pm = 0; pm < persModelCount; ++pm) { - aPersModel[pm]->print(); - } -} // from all frames not marked as bad already, take average and filter out frames with higher deviation than this if there are enough values int rtengine::LCPProfile::filterBadFrames(LCPCorrectionMode mode, double maxAvgDevFac, int minFramesLeft) @@ -649,7 +609,7 @@ int rtengine::LCPProfile::filterBadFrames(LCPCorrectionMode mode, double maxAvgD } if (settings->verbose && count) { - std::printf("Filtered %.1f%% frames for maxAvgDevFac %g leaving %i\n", filtered * 100.f / count, maxAvgDevFac, count - filtered); + std::printf("Filtered %.1f%% frames for maxAvgDevFac %g leaving %i\n", filtered * 100.0 / count, maxAvgDevFac, count - filtered); } } @@ -1007,7 +967,7 @@ rtengine::LCPMapper::LCPMapper( const bool mirrorX = (rot == 90 || rot == 180); const bool mirrorY = (rot == 180 || rot == 270); if (settings->verbose) { - std::printf("Vign: %i, fullWidth: %i/%i, focLen %g SwapXY: %i / MirX/Y %i / %i on rot:%i from %i\n",vignette, fullWidth, fullHeight, focalLength, swapXY, mirrorX, mirrorY, rot, rawRotationDeg); + std::printf("Vign: %i, fullWidth: %i/%i, focLen %g SwapXY: %i / MirX/Y %i / %i on rot:%i from %i\n",vignette, fullWidth, fullHeight, static_cast(focalLength), swapXY, mirrorX, mirrorY, rot, rawRotationDeg); } pProf->calcParams(vignette ? LCPCorrectionMode::VIGNETTE : LCPCorrectionMode::DISTORTION, focalLength, focusDist, aperture, &mc, nullptr, nullptr); @@ -1038,8 +998,8 @@ void rtengine::LCPMapper::correctDistortion(double &x, double &y, int cx, int cy if (isFisheye) { const double u = x * scale; const double v = y * scale; - const double u0 = mc.x0 * scale; - const double v0 = mc.y0 * scale; + const double u0 = static_cast(mc.x0) * scale; + const double v0 = static_cast(mc.y0) * scale; const double du = (u - u0); const double dv = (v - v0); const double fx = mc.fx; @@ -1059,22 +1019,22 @@ void rtengine::LCPMapper::correctDistortion(double &x, double &y, int cx, int cy } else { x *= scale; y *= scale; - const double x0 = mc.x0 * scale; - const double y0 = mc.y0 * scale; - const double xd = (x - x0) / mc.fx, yd = (y - y0) / mc.fy; + const double x0 = static_cast(mc.x0) * scale; + const double y0 = static_cast(mc.y0) * scale; + const double xd = (x - x0) / static_cast(mc.fx), yd = (y - y0) / static_cast(mc.fy); - const LCPModelCommon::Param aDist = mc.param; + const auto& aDist = mc.param; const double rsqr = xd * xd + yd * yd; - const double xfac = aDist[swapXY ? 3 : 4], yfac = aDist[swapXY ? 4 : 3]; + const double xfac = static_cast(aDist[swapXY ? 3 : 4]), yfac = static_cast(aDist[swapXY ? 4 : 3]); - const double commonFac = (((aDist[2] * rsqr + aDist[1]) * rsqr + aDist[0]) * rsqr + 1.) + const double commonFac = (((static_cast(aDist[2]) * rsqr + static_cast(aDist[1])) * rsqr + static_cast(aDist[0])) * rsqr + 1.) + 2. * (yfac * yd + xfac * xd); const double xnew = xd * commonFac + xfac * rsqr; const double ynew = yd * commonFac + yfac * rsqr; - x = xnew * mc.fx + x0; - y = ynew * mc.fy + y0; + x = xnew * static_cast(mc.fx) + x0; + y = ynew * static_cast(mc.fy) + y0; } x -= cx * scale; @@ -1094,20 +1054,20 @@ void rtengine::LCPMapper::correctCA(double& x, double& y, int cx, int cy, int ch // First calc the green channel like normal distortion // the other are just deviations from it - double xd = (x - chrom[1].x0) / chrom[1].fx; - double yd = (y - chrom[1].y0) / chrom[1].fy; + double xd = (x - static_cast(chrom[1].x0)) / static_cast(chrom[1].fx); + double yd = (y - static_cast(chrom[1].y0)) / static_cast(chrom[1].fy); // Green contains main distortion, just like base if (useCADist) { - const LCPModelCommon::Param aDist = chrom[1].param; - double rsqr = xd * xd + yd * yd; - double xfac = aDist[swapXY ? 3 : 4], yfac = aDist[swapXY ? 4 : 3]; + const auto& aDist = chrom[1].param; + double rsqr = xd * xd + yd * yd; + double xfac = static_cast(aDist[swapXY ? 3 : 4]), yfac = static_cast(aDist[swapXY ? 4 : 3]); - double commonFac = (((aDist[2] * rsqr + aDist[1]) * rsqr + aDist[0]) * rsqr + 1.) + double commonFac = (((static_cast(aDist[2]) * rsqr + static_cast(aDist[1])) * rsqr + static_cast(aDist[0])) * rsqr + 1.) + 2. * (yfac * yd + xfac * xd); - xgreen = xd * commonFac + aDist[4] * rsqr; - ygreen = yd * commonFac + aDist[3] * rsqr; + xgreen = xd * commonFac + static_cast(aDist[4]) * rsqr; + ygreen = yd * commonFac + static_cast(aDist[3]) * rsqr; } else { xgreen = xd; ygreen = yd; @@ -1115,20 +1075,20 @@ void rtengine::LCPMapper::correctCA(double& x, double& y, int cx, int cy, int ch if (channel == 1) { // green goes directly - x = xgreen * chrom[1].fx + chrom[1].x0; - y = ygreen * chrom[1].fy + chrom[1].y0; + x = xgreen * static_cast(chrom[1].fx) + static_cast(chrom[1].x0); + y = ygreen * static_cast(chrom[1].fy) + static_cast(chrom[1].y0); } else { // others are diffs from green xd = xgreen; yd = ygreen; const double rsqr = xd * xd + yd * yd; - const LCPModelCommon::Param aCA = chrom[channel].param; - const double xfac = aCA[swapXY ? 3 : 4], yfac = aCA[swapXY ? 4 : 3]; - const double commonSum = 1. + rsqr * (aCA[0] + rsqr * (aCA[1] + aCA[2] * rsqr)) + 2. * (yfac * yd + xfac * xd); + const auto& aCA = chrom[channel].param; + const double xfac = static_cast(aCA[swapXY ? 3 : 4]), yfac = static_cast(aCA[swapXY ? 4 : 3]); + const double commonSum = 1. + rsqr * (static_cast(aCA[0]) + rsqr * (static_cast(aCA[1]) + static_cast(aCA[2] )* rsqr)) + 2. * (yfac * yd + xfac * xd); - x = (chrom[channel].scale_factor * ( xd * commonSum + xfac * rsqr )) * chrom[channel].fx + chrom[channel].x0; - y = (chrom[channel].scale_factor * ( yd * commonSum + yfac * rsqr )) * chrom[channel].fy + chrom[channel].y0; + x = (static_cast(chrom[channel].scale_factor) * ( xd * commonSum + xfac * rsqr )) * static_cast(chrom[channel].fx) + static_cast(chrom[channel].x0); + y = (static_cast(chrom[channel].scale_factor) * ( yd * commonSum + yfac * rsqr )) * static_cast(chrom[channel].fy) + static_cast(chrom[channel].y0); } x -= cx; diff --git a/rtengine/lcp.h b/rtengine/lcp.h index 2e36fe113..4c1e09865 100644 --- a/rtengine/lcp.h +++ b/rtengine/lcp.h @@ -54,7 +54,6 @@ public: LCPModelCommon(); bool empty() const; // is it empty - void print() const; // printf all values void merge(const LCPModelCommon& a, const LCPModelCommon& b, float facA); void prepareParams( int fullWidth, @@ -106,7 +105,6 @@ public: LCPModelCommon *pCorr3 ) const; // Interpolates between the persModels frames - void print() const; //private: // Common data diff --git a/rtgui/mycurve.cc b/rtgui/mycurve.cc index 7401570c8..d460713fb 100644 --- a/rtgui/mycurve.cc +++ b/rtgui/mycurve.cc @@ -183,7 +183,7 @@ float MyCurve::getVal(LUTf &curve, int x) if (size_t(graphW) == curve.getSize()) { return curve[x]; } else { - return curve.getVal01(float(x) / graphW); + return curve.getVal01(x / graphW); } } diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index abd339ce0..ac7976b7e 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -358,14 +358,14 @@ void MyDiagonalCurve::draw (int handle) // draw upper and lower bounds if (curve.type == DCT_Parametric && activeParam > 0 && lpoint.getUpperBound() > 1 && upoint.getUpperBound() > 1) { cr->set_source_rgba (1.0, 1.0, 1.0, 0.1); - cr->move_to (graphX, getVal(upoint, 0) * -graphH + graphY); + cr->move_to (graphX, static_cast(getVal(upoint, 0)) * -graphH + graphY); for (int i = 1; i < graphW - 2; ++i) { - cr->line_to ((double)i + graphX, getVal(upoint, i) * -graphH + graphY); + cr->line_to ((double)i + graphX, static_cast(getVal(upoint, i)) * -graphH + graphY); } for (int i = graphW - 3; i >= 0; --i) { - cr->line_to ((double)i + graphX, getVal(lpoint, i) * -graphH + graphY); + cr->line_to ((double)i + graphX, static_cast(getVal(lpoint, i)) * -graphH + graphY); } cr->fill (); @@ -390,21 +390,21 @@ void MyDiagonalCurve::draw (int handle) if (n > 1) { if (pipetteR > -1.f) { cr->set_source_rgba (1., 0., 0., 0.5); // WARNING: assuming that red values are stored in pipetteR, which might not be the case! - cr->move_to (graphX + graphW*pipetteR, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteR), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); } if (pipetteG > -1.f) { cr->set_source_rgba (0., 1., 0., 0.5); // WARNING: assuming that green values are stored in pipetteG, which might not be the case! - cr->move_to (graphX + graphW*pipetteG, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteG), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); } if (pipetteB > -1.f) { cr->set_source_rgba (0., 0., 1., 0.5); // WARNING: assuming that blue values are stored in pipetteB, which might not be the case! - cr->move_to (graphX + graphW*pipetteB, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteB), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); } @@ -414,7 +414,7 @@ void MyDiagonalCurve::draw (int handle) cr->set_line_width (2. * s); c = style->get_color (state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->move_to (graphX + graphW*pipetteVal, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteVal), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); cr->set_line_width (1. * s); @@ -460,7 +460,7 @@ void MyDiagonalCurve::draw (int handle) // draw curve cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->move_to (graphX, getVal(point, 0) * -graphH + graphY); + cr->move_to (graphX, static_cast(getVal(point, 0)) * -graphH + graphY); for (int i = 1; i < graphW; ++i) { cr->line_to ((double)i + graphX, (double)getVal(point, i) * -graphH + graphY); diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index 362d34f35..da993987c 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -233,21 +233,21 @@ void MyFlatCurve::draw () if (n > 1) { if (pipetteR > -1.f) { cr->set_source_rgba (1., 0., 0., 0.5); // WARNING: assuming that red values are stored in pipetteR, which might not be the case! - cr->move_to (graphX + graphW*pipetteR, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteR), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); } if (pipetteG > -1.f) { cr->set_source_rgba (0., 1., 0., 0.5); // WARNING: assuming that green values are stored in pipetteG, which might not be the case! - cr->move_to (graphX + graphW*pipetteG, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteG), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); } if (pipetteB > -1.f) { cr->set_source_rgba (0., 0., 1., 0.5); // WARNING: assuming that blue values are stored in pipetteB, which might not be the case! - cr->move_to (graphX + graphW*pipetteB, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteB), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); } @@ -257,7 +257,7 @@ void MyFlatCurve::draw () cr->set_line_width (2. * s); c = style->get_color (state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->move_to (graphX + graphW*pipetteVal, graphY + 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteVal), graphY + 1. * s); cr->rel_line_to (0, -graphH - 1. * s); cr->stroke (); cr->set_line_width (1. * s); @@ -437,10 +437,10 @@ void MyFlatCurve::draw () // draw curve c = style->get_color(state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->move_to (graphX, getVal(point, 0) * -graphH + graphY); + cr->move_to (graphX, static_cast(getVal(point, 0)) * -graphH + graphY); for (int i = 1; i < graphW; ++i) { - cr->line_to ((double)i + graphX, (double)getVal(point, i) * -graphH + graphY); + cr->line_to ((double)i + graphX, static_cast(getVal(point, i)) * -graphH + graphY); } cr->stroke (); diff --git a/rtgui/retinex.cc b/rtgui/retinex.cc index c78be375f..7fdea0319 100644 --- a/rtgui/retinex.cc +++ b/rtgui/retinex.cc @@ -278,7 +278,7 @@ Retinex::Retinex () : FoldableToolPanel (this, "retinex", M ("TP_RETINEX_LABEL") for (int i = 0; i < 7; i++) { float R, G, B; - float x = float (i) * (1.0f / 6.0); + float x = i / 6.0; Color::hsv2rgb01 (x, 0.5f, 0.5f, R, G, B); milestones.push_back ( GradientMilestone (double (x), double (R), double (G), double (B)) ); } diff --git a/rtgui/rtscalable.cc b/rtgui/rtscalable.cc index a48a95fd2..78202326a 100644 --- a/rtgui/rtscalable.cc +++ b/rtgui/rtscalable.cc @@ -68,7 +68,7 @@ double RTScalable::getDPI () double RTScalable::getTweakedDPI () { - return dpi * fontScale; + return dpi * static_cast(fontScale); } int RTScalable::getScale () diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 514685a16..8cfeb8ec0 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -179,7 +179,7 @@ RTWindow::RTWindow () fontScale = options.fontSize / (float)RTScalable::baseFontSize; } if (rtengine::settings->verbose) { - printf("\"Non-Default\" font size(%d) * scale(%d) / fontScale(%.3f)\n", options.fontSize, (int)initialGdkScale, fontScale); + printf("\"Non-Default\" font size(%d) * scale(%d) / fontScale(%.3f)\n", options.fontSize, (int)initialGdkScale, static_cast(fontScale)); } } else { Glib::RefPtr style = Gtk::StyleContext::create(); @@ -209,7 +209,7 @@ RTWindow::RTWindow () if ((int)initialGdkScale > 1 || pt != RTScalable::baseFontSize) { css = Glib::ustring::compose ("* { font-size: %1pt}", pt * (int)initialGdkScale); if (rtengine::settings->verbose) { - printf("\"Default\" font size(%d) * scale(%d) / fontScale(%.3f)\n", pt, (int)initialGdkScale, fontScale); + printf("\"Default\" font size(%d) * scale(%d) / fontScale(%.3f)\n", pt, (int)initialGdkScale, static_cast(fontScale)); } } } From a65b6e6edb3e69d3c23d03810aa61907c4746dba Mon Sep 17 00:00:00 2001 From: Benitoite Date: Tue, 11 Feb 2020 06:52:27 -0800 Subject: [PATCH 058/264] Remove COMMAND_ECHO STDOUTs --- UpdateInfo.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 9aa211d96..1c31cf44f 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -64,10 +64,10 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() - execute_process(COMMAND uname -mrs COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_OS OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND date -Ru COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND date +%s COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND uuidgen COMMAND tr "A-Z" "a-z" COMMAND_ECHO STDOUT OUTPUT_VARIABLE BUILDINFO_UUID OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND uname -mrs OUTPUT_VARIABLE BUILDINFO_OS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND date -Ru OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND date +%s OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND uuidgen COMMAND tr "A-Z" "a-z" OUTPUT_VARIABLE BUILDINFO_UUID OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Git checkout information:") message(STATUS " Commit description: ${GIT_DESCRIBE}") From 1c0033f798498803a80661305b35b075edac0fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Wed, 12 Feb 2020 09:04:55 +0100 Subject: [PATCH 059/264] Collapse all tools on first start (fixes #4776) I had to remove the `isVisible` check in `MyExpander::set_expanded()` because it would trigger in Wavelet and Retinex for unknown reasons. One inner expander in CIECAM isn't covered by the tool states, and the way they are distributed to Wavelet and Retinex won't allow for further tool states in those tools. We should consider to move the tool states for sub-tools (like Wavelet, Retinex, and CIECAM) to seperate keys in the `options` file. --- rtgui/guiutils.cc | 6 --- rtgui/retinex.cc | 10 +++- rtgui/retinex.h | 41 ++++++++-------- rtgui/toolpanelcoord.cc | 42 ++++++++++------ rtgui/wavelet.cc | 36 +++++++++----- rtgui/wavelet.h | 105 ++++++++++++++++++++-------------------- 6 files changed, 133 insertions(+), 107 deletions(-) diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 9a4e71ab4..d759751c3 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -826,12 +826,6 @@ void MyExpander::set_expanded( bool expanded ) return; } - bool isVisible = expBox->is_visible(); - - if (isVisible == expanded) { - return; - } - if (!useEnabled) { if (expanded ) { statusImage->set(openedImage->get_surface()); diff --git a/rtgui/retinex.cc b/rtgui/retinex.cc index 7fdea0319..2fdd8f319 100644 --- a/rtgui/retinex.cc +++ b/rtgui/retinex.cc @@ -659,10 +659,16 @@ void Retinex::writeOptions (std::vector &tpOpen) tpOpen.push_back (expsettings->get_expanded ()); } -void Retinex::updateToolState (std::vector &tpOpen) +void Retinex::updateToolState(const std::vector& tpOpen) { + if (tpOpen.empty()) { + expsettings->set_expanded(false); + + return; + } + if (tpOpen.size() >= 10) { - expsettings->set_expanded (tpOpen.at (9)); + expsettings->set_expanded(tpOpen[9]); } } diff --git a/rtgui/retinex.h b/rtgui/retinex.h index ff524f854..dea65daab 100644 --- a/rtgui/retinex.h +++ b/rtgui/retinex.h @@ -104,32 +104,32 @@ protected: sigc::connection medianmapConn; public: - Retinex (); - ~Retinex () override; + Retinex(); + ~Retinex() override; - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override; - void setBatchMode (bool batchMode) override; - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; - void trimValues (rtengine::procparams::ProcParams* pp) override; - void adjusterChanged (Adjuster* a, double newval) override; - void autoOpenCurve () override; - void medianmapChanged (); - void minmaxChanged (double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) override; - void updateLabel (); - void updateTrans (); - void neutral_pressed (); + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override; + void setBatchMode(bool batchMode) override; + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; + void trimValues(rtengine::procparams::ProcParams* pp) override; + void adjusterChanged(Adjuster* a, double newval) override; + void autoOpenCurve() override; + void medianmapChanged(); + void minmaxChanged(double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) override; + void updateLabel(); + void updateTrans(); + void neutral_pressed(); - void enabledChanged () override; - void curveChanged (CurveEditor* ce) override; + void enabledChanged() override; + void curveChanged(CurveEditor* ce) override; void retinexMethodChanged(); void mapMethodChanged(); void viewMethodChanged(); void retinexColorSpaceChanged(); void gammaretinexChanged(); void ColorSpaceUpdateUI(); - void writeOptions (std::vector &tpOpen); - void updateToolState (std::vector &tpOpen); + void writeOptions(std::vector &tpOpen); + void updateToolState(const std::vector& tpOpen); void setAdjusterBehavior (bool strAdd, bool neighAdd, bool limdAdd, bool offsAdd, bool vartAdd, bool gamAdd, bool slopeAdd); void updateCurveBackgroundHistogram( const LUTu& histToneCurve, @@ -144,9 +144,8 @@ public: const LUTu& histLRETI ); - void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller) override; + void colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller) override; private: - void foldAllButMe (GdkEventButton* event, MyExpander *expander); - + void foldAllButMe(GdkEventButton* event, MyExpander *expander); }; diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 57f61a09c..00ad96328 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -632,40 +632,52 @@ void ToolPanelCoordinator::closeImage () void ToolPanelCoordinator::closeAllTools() { - - for (size_t i = 0; i < options.tpOpen.size(); i++) + for (size_t i = 0; i < options.tpOpen.size(); ++i) { if (i < expList.size()) { - expList.at (i)->set_expanded (false); + expList[i]->set_expanded(false); } + } } void ToolPanelCoordinator::openAllTools() { - - for (size_t i = 0; i < options.tpOpen.size(); i++) + for (size_t i = 0; i < options.tpOpen.size(); ++i) { if (i < expList.size()) { - expList.at (i)->set_expanded (true); + expList[i]->set_expanded(true); } + } } void ToolPanelCoordinator::updateToolState() { - - for (size_t i = 0; i < options.tpOpen.size(); i++) - if (i < expList.size()) { - expList.at (i)->set_expanded (options.tpOpen.at (i)); + if (options.tpOpen.empty()) { + for (auto expander : expList) { + expander->set_expanded(false); } + wavelet->updateToolState({}); + retinex->updateToolState({}); + + return; + } + + for (size_t i = 0; i < options.tpOpen.size(); ++i) { + if (i < expList.size()) { + expList[i]->set_expanded(options.tpOpen[i]); + } + } + if (options.tpOpen.size() > expList.size()) { - size_t sizeWavelet = options.tpOpen.size() - expList.size(); + const size_t sizeWavelet = options.tpOpen.size() - expList.size(); + std::vector temp; - for (size_t i = 0; i < sizeWavelet; i++) { - temp.push_back (options.tpOpen.at (i + expList.size())); + for (size_t i = 0; i < sizeWavelet; ++i) { + temp.push_back(options.tpOpen[i + expList.size()]); } - wavelet->updateToolState (temp); - retinex->updateToolState (temp); + wavelet->updateToolState(temp); + retinex->updateToolState(temp); } } diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 3981457e6..a2642dad7 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -3030,18 +3030,32 @@ void Wavelet::writeOptions(std::vector &tpOpen) tpOpen.push_back (expfinal->get_expanded ()); } -void Wavelet::updateToolState(std::vector &tpOpen) +void Wavelet::updateToolState(const std::vector& tpOpen) { - if(tpOpen.size() >= 9) { - expsettings->set_expanded(tpOpen.at(0)); - expcontrast->set_expanded(tpOpen.at(1)); - expchroma->set_expanded(tpOpen.at(2)); - exptoning->set_expanded(tpOpen.at(3)); - expnoise->set_expanded(tpOpen.at(4)); - expedge->set_expanded(tpOpen.at(5)); - expgamut->set_expanded(tpOpen.at(6)); - expresid->set_expanded(tpOpen.at(7)); - expfinal->set_expanded(tpOpen.at(8)); + if (tpOpen.empty()) { + expsettings->set_expanded(false); + expcontrast->set_expanded(false); + expchroma->set_expanded(false); + exptoning->set_expanded(false); + expnoise->set_expanded(false); + expedge->set_expanded(false); + expgamut->set_expanded(false); + expresid->set_expanded(false); + expfinal->set_expanded(false); + + return; + } + + if (tpOpen.size() >= 9) { + expsettings->set_expanded(tpOpen[0]); + expcontrast->set_expanded(tpOpen[1]); + expchroma->set_expanded(tpOpen[2]); + exptoning->set_expanded(tpOpen[3]); + expnoise->set_expanded(tpOpen[4]); + expedge->set_expanded(tpOpen[5]); + expgamut->set_expanded(tpOpen[6]); + expresid->set_expanded(tpOpen[7]); + expfinal->set_expanded(tpOpen[8]); } } diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 6551b58d4..d01e52749 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -20,12 +20,13 @@ #pragma once #include + #include "adjuster.h" -#include "toolpanel.h" -#include "curvelistener.h" -#include "thresholdadjuster.h" #include "colorprovider.h" +#include "curvelistener.h" #include "guiutils.h" +#include "thresholdadjuster.h" +#include "toolpanel.h" class CurveEditor; class CurveEditorGroup; @@ -43,21 +44,21 @@ class Wavelet final : public FoldableToolPanel { public: - Wavelet (); - ~Wavelet () override; + Wavelet(); + ~Wavelet() override; - bool wavComputed_ (); + bool wavComputed_(); void adjusterChanged(Adjuster* a, double newval) override; - void autoOpenCurve () override; - void curveChanged (CurveEditor* ce) override; - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; - void setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add); - void setBatchMode (bool batchMode) override; - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; - void setEditProvider (EditDataProvider *provider) override; - void updateToolState (std::vector &tpOpen); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override; - void writeOptions (std::vector &tpOpen); + void autoOpenCurve() override; + void curveChanged(CurveEditor* ce) override; + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; + void setAdjusterBehavior(bool multiplieradd, bool thresholdadd, bool threshold2add, bool thresadd, bool chroadd, bool chromaadd, bool contrastadd, bool skinadd, bool reschroadd, bool tmrsadd, bool resconadd, bool resconHadd, bool thradd, bool thrHadd, bool skyadd, bool edgradadd, bool edgvaladd, bool strengthadd, bool gammaadd, bool edgedetectadd, bool edgedetectthradd, bool edgedetectthr2add); + void setBatchMode(bool batchMode) override; + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; + void setEditProvider(EditDataProvider *provider) override; + void updateToolState(const std::vector& tpOpen); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override; + void writeOptions(std::vector &tpOpen); void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) override; void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) override; @@ -66,38 +67,38 @@ public: void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) override; private: - void foldAllButMe (GdkEventButton* event, MyExpander *expander); + void foldAllButMe(GdkEventButton* event, MyExpander *expander); - void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller) override; - void BAmethodChanged (); - void NPmethodChanged (); - void BackmethodChanged (); - void CHSLmethodChanged (); - void CHmethodChanged (); - void CLmethodChanged (); - void DirmethodChanged (); - void EDmethodChanged (); - void HSmethodChanged (); - void LmethodChanged (); - void MedgreinfChanged (); - void TMmethodChanged (); - void TilesmethodChanged (); - void avoidToggled (); - void cbenabToggled (); - void contrastMinusPressed (); - void contrastPlusPressed (); - void daubcoeffmethodChanged (); - void enabledChanged () override; - void linkedgToggled (); - void lipstToggled (); - void medianToggled (); - void medianlevToggled (); - void neutralPressed (); - void neutral_pressed (); - void neutralchPressed (); - void tmrToggled (); + void colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller) override; + void BAmethodChanged(); + void NPmethodChanged(); + void BackmethodChanged(); + void CHSLmethodChanged(); + void CHmethodChanged(); + void CLmethodChanged(); + void DirmethodChanged(); + void EDmethodChanged(); + void HSmethodChanged(); + void LmethodChanged(); + void MedgreinfChanged(); + void TMmethodChanged(); + void TilesmethodChanged(); + void avoidToggled(); + void cbenabToggled(); + void contrastMinusPressed(); + void contrastPlusPressed(); + void daubcoeffmethodChanged(); + void enabledChanged() override; + void linkedgToggled(); + void lipstToggled(); + void medianToggled(); + void medianlevToggled(); + void neutralPressed(); + void neutral_pressed(); + void neutralchPressed(); + void tmrToggled(); void updatewavLabel (); - void wavChanged (double nlevel) override; + void wavChanged(double nlevel) override; void HSmethodUpdateUI(); void CHmethodUpdateUI(); @@ -113,13 +114,13 @@ private: // void MedgreinfUpdateUI(); // void DirmethodUpdateUI(); // void LmethodUpdateUI(); - void adjusterUpdateUI (Adjuster* a); - void enabledUpdateUI (); - void medianlevUpdateUI (); - void cbenabUpdateUI (); - void lipstUpdateUI (); + void adjusterUpdateUI(Adjuster* a); + void enabledUpdateUI(); + void medianlevUpdateUI(); + void cbenabUpdateUI(); + void lipstUpdateUI(); - void enableToggled(MyExpander *expander); + void enableToggled(MyExpander* expander); CurveEditorGroup* const curveEditorG; From 562b19bb5cf1d0d2cc99341bccf8f5fdad38ca3b Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 12 Feb 2020 21:08:03 +0100 Subject: [PATCH 060/264] Silence -Wunused-macros warning in dcraw.cc, #3558 --- rtengine/dcraw.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 537bf1334..0858bdaaa 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1,6 +1,7 @@ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsign-compare" +#pragma GCC diagnostic ignored "-Wunused-macros" #if (__GNUC__ >= 6) #pragma GCC diagnostic ignored "-Wmisleading-indentation" #endif From 30317f41332ee4a4a4b0924a5838915993bbdc4f Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 12 Feb 2020 23:38:07 +0100 Subject: [PATCH 061/264] use std::fabs, hopefully fixes #5651 --- rtgui/cropwindow.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 8e1dcfaf5..d87876cec 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -295,7 +295,7 @@ void CropWindow::flawnOver (bool isFlawnOver) void CropWindow::scroll (int state, GdkScrollDirection direction, int x, int y, double deltaX, double deltaY) { double delta = 0.0; - if (abs(deltaX) > abs(deltaY)) { + if (std::fabs(deltaX) > std::fabs(deltaY)) { delta = deltaX; } else { delta = deltaY; @@ -304,7 +304,7 @@ void CropWindow::scroll (int state, GdkScrollDirection direction, int x, int y, if (direction == GDK_SCROLL_SMOOTH) { scrollAccum += delta; //Only change zoom level if we've accumulated +/- 1.0 of deltas. This conditional handles the previous delta=0.0 case - if (abs(scrollAccum) < 1.0) { + if (std::fabs(scrollAccum) < 1.0) { return; } } From 06be849a31bd091b80e181254dd33f4608af5263 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 13 Feb 2020 16:07:30 +0100 Subject: [PATCH 062/264] Finally eliminate aehistograms cache folder, #4904 --- rtgui/cachemanager.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/rtgui/cachemanager.cc b/rtgui/cachemanager.cc index c37964e23..93dafc1ba 100644 --- a/rtgui/cachemanager.cc +++ b/rtgui/cachemanager.cc @@ -39,7 +39,7 @@ namespace { constexpr int cacheDirMode = 0777; -constexpr const char* cacheDirs[] = { "profiles", "images", "aehistograms", "embprofiles", "data" }; +constexpr const char* cacheDirs[] = { "profiles", "images", "embprofiles", "data" }; } @@ -59,9 +59,7 @@ void CacheManager::init () auto error = g_mkdir_with_parents (baseDir.c_str(), cacheDirMode); for (const auto& cacheDir : cacheDirs) { - if (strncmp(cacheDir, "aehistograms", 12)) { // don't create aehistograms folder. - error |= g_mkdir_with_parents (Glib::build_filename (baseDir, cacheDir).c_str(), cacheDirMode); - } + error |= g_mkdir_with_parents (Glib::build_filename (baseDir, cacheDir).c_str(), cacheDirMode); } if (error != 0 && rtengine::settings->verbose) { @@ -187,7 +185,6 @@ void CacheManager::renameEntry (const std::string& oldfilename, const std::strin auto error = g_rename (getCacheFileName ("profiles", oldfilename, paramFileExtension, oldmd5).c_str (), getCacheFileName ("profiles", newfilename, paramFileExtension, newmd5).c_str ()); error |= g_rename (getCacheFileName ("images", oldfilename, ".rtti", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".rtti", newmd5).c_str ()); - error |= g_rename (getCacheFileName ("aehistograms", oldfilename, "", oldmd5).c_str (), getCacheFileName ("aehistograms", newfilename, "", newmd5).c_str ()); error |= g_rename (getCacheFileName ("embprofiles", oldfilename, ".icc", oldmd5).c_str (), getCacheFileName ("embprofiles", newfilename, ".icc", newmd5).c_str ()); error |= g_rename (getCacheFileName ("data", oldfilename, ".txt", oldmd5).c_str (), getCacheFileName ("data", newfilename, ".txt", newmd5).c_str ()); @@ -241,7 +238,6 @@ void CacheManager::clearImages () const deleteDir ("data"); deleteDir ("images"); - deleteDir ("aehistograms"); deleteDir ("embprofiles"); } @@ -277,7 +273,6 @@ void CacheManager::deleteFiles (const Glib::ustring& fname, const std::string& m } auto error = g_remove (getCacheFileName ("images", fname, ".rtti", md5).c_str ()); - error |= g_remove (getCacheFileName ("aehistograms", fname, "", md5).c_str ()); error |= g_remove (getCacheFileName ("embprofiles", fname, ".icc", md5).c_str ()); if (purgeData) { From 67ca8e2c19af3896ab065a325fb4f3f66bd09ada Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 13 Feb 2020 16:34:45 +0100 Subject: [PATCH 063/264] further aehistograms cleanup --- rtengine/rtthumbnail.cc | 38 -------------------------------------- rtengine/rtthumbnail.h | 4 ---- rtgui/thumbnail.cc | 9 --------- 3 files changed, 51 deletions(-) diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index c956b9032..4507f2b40 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -2253,44 +2253,6 @@ bool Thumbnail::writeEmbProfile (const Glib::ustring& fname) return false; } -bool Thumbnail::readAEHistogram (const Glib::ustring& fname) -{ - - FILE* f = g_fopen(fname.c_str(), "rb"); - - if (!f) { - aeHistogram.reset(); - } else { - aeHistogram(65536 >> aeHistCompression); - const size_t histoBytes = (65536 >> aeHistCompression) * sizeof(aeHistogram[0]); - const size_t bytesRead = fread(&aeHistogram[0], 1, histoBytes, f); - fclose (f); - if (bytesRead != histoBytes) { - aeHistogram.reset(); - return false; - } - return true; - } - - return false; -} - -bool Thumbnail::writeAEHistogram (const Glib::ustring& fname) -{ - - if (aeHistogram) { - FILE* f = g_fopen (fname.c_str (), "wb"); - - if (f) { - fwrite (&aeHistogram[0], 1, (65536 >> aeHistCompression)*sizeof (aeHistogram[0]), f); - fclose (f); - return true; - } - } - - return false; -} - unsigned char* Thumbnail::getImage8Data() { if (thumbImg && thumbImg->getType() == rtengine::sImage8) { diff --git a/rtengine/rtthumbnail.h b/rtengine/rtthumbnail.h index c8d657a62..ccca1c582 100644 --- a/rtengine/rtthumbnail.h +++ b/rtengine/rtthumbnail.h @@ -113,10 +113,6 @@ public: bool readEmbProfile (const Glib::ustring& fname); bool writeEmbProfile (const Glib::ustring& fname); - bool readAEHistogram (const Glib::ustring& fname); - bool writeAEHistogram (const Glib::ustring& fname); - - bool isAeValid() { return aeValid; }; unsigned char* getImage8Data(); // accessor to the 8bit image if it is one, which should be the case for the "Inspector" mode. // Hombre: ... let's hope that proper template can make this cleaner diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index 5295b9d61..87bc730eb 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -887,11 +887,6 @@ void Thumbnail::_loadThumbnail(bool firstTrial) } if ( cfs.thumbImgType == CacheImageData::FULL_THUMBNAIL ) { - if(!tpp->isAeValid()) { - // load aehistogram - tpp->readAEHistogram (getCacheFileName ("aehistograms", "")); - } - // load embedded profile tpp->readEmbProfile (getCacheFileName ("embprofiles", ".icc")); @@ -937,10 +932,6 @@ void Thumbnail::_saveThumbnail () // save thumbnail image tpp->writeImage (getCacheFileName ("images", "")); - if(!tpp->isAeValid()) { - // save aehistogram - tpp->writeAEHistogram (getCacheFileName ("aehistograms", "")); - } // save embedded profile tpp->writeEmbProfile (getCacheFileName ("embprofiles", ".icc")); From 1069c890f51cf7b3aa9235918fadc41405851b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Fri, 14 Feb 2020 11:44:57 +0100 Subject: [PATCH 064/264] Incorporate FreeBSD fix from @mandree (#5651) plus a little hardening --- rtengine/imagedata.cc | 6 +++--- rtengine/procparams.cc | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/rtengine/imagedata.cc b/rtengine/imagedata.cc index 24cfefde9..a631a6c8d 100644 --- a/rtengine/imagedata.cc +++ b/rtengine/imagedata.cc @@ -502,11 +502,11 @@ FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory* } else if (!make.compare (0, 6, "PENTAX") || (!make.compare (0, 5, "RICOH") && !model.compare (0, 6, "PENTAX"))) { // ISO at max value supported, check manufacturer specific if (iso_speed == 65535 || iso_speed == 0) { - rtexif::Tag* baseIsoTag = mnote->getTag("ISO"); + const rtexif::Tag* const baseIsoTag = mnote->getTag("ISO"); if (baseIsoTag) { - std::string isoData = baseIsoTag->valueToString(); + const std::string isoData = baseIsoTag->valueToString(); if (isoData.size() > 1) { - iso_speed = stoi(isoData); + iso_speed = std::stoi(isoData); } } } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index f53b4c513..f6b139550 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -4606,8 +4606,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) Glib::ustring temp; assignFromKeyfile(keyFile, "Wavelet", "LevMethod", pedited, temp, pedited->wavelet.Lmethod); - if (!temp.empty()) { + try { wavelet.Lmethod = std::stoi(temp); + } catch (...) { } } else { assignFromKeyfile(keyFile, "Wavelet", "LevMethod", pedited, wavelet.Lmethod, pedited->wavelet.Lmethod); From 12b1d8f7671d64dd15cce0115550be8a483f50f5 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 15 Feb 2020 14:47:34 +0100 Subject: [PATCH 065/264] Polish translation updated by bwisn, closes #5653 --- rtdata/languages/Polish | 143 ++++++++++++++++++++-------------------- 1 file changed, 72 insertions(+), 71 deletions(-) diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index b4e1a2281..1bcc98456 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -9,6 +9,7 @@ #09 2014-10-16 DrSlony #10 2020-02-02 Bartłomiej Wiśniowski #11 2020-02-02 Bartłomiej Wiśniowski +#12 2020-02-15 Bartłomiej Wiśniowski ABOUT_TAB_BUILD;Wersja ABOUT_TAB_CREDITS;Zasługi @@ -40,6 +41,7 @@ DIRBROWSER_FOLDERS;Katalogi DYNPROFILEEDITOR_DELETE;Usuń DYNPROFILEEDITOR_EDIT;Edytuj DYNPROFILEEDITOR_IMGTYPE_ANY;Każdy +DYNPROFILEEDITOR_IMGTYPE_HDR;HDR DYNPROFILEEDITOR_IMGTYPE_STD;Standardowy DYNPROFILEEDITOR_MOVE_DOWN;Przesuń w dół DYNPROFILEEDITOR_MOVE_UP;Przesuń w górę @@ -146,6 +148,7 @@ FILEBROWSER_POPUPRANK2;Ocena 2 ** FILEBROWSER_POPUPRANK3;Ocena 3 *** FILEBROWSER_POPUPRANK4;Ocena 4 **** FILEBROWSER_POPUPRANK5;Ocena 5 ***** +FILEBROWSER_POPUPREMOVE;Usuń na zawsze FILEBROWSER_POPUPRENAME;Zmień nazwę FILEBROWSER_POPUPSELECTALL;Zaznacz wszystkie FILEBROWSER_POPUPTRASH;Przenieś do kosza @@ -218,6 +221,7 @@ GENERAL_PORTRAIT;Pionowo GENERAL_RESET;Resetuj GENERAL_SAVE;Zapisz GENERAL_SAVE_AS;Zapisz jako... +GENERAL_SLIDER;Suwak GENERAL_UNCHANGED;(Niezmienione) GENERAL_WARNING;Uwaga HISTOGRAM_TOOLTIP_B;Pokaż/Ukryj histogram błękitów. @@ -590,6 +594,8 @@ HISTORY_MSG_411;Retinex - Siła HISTORY_MSG_413;Retinex - Kontrast HISTORY_MSG_418;Retinex - Próg HISTORY_MSG_419;Retinex - Przestrzeń kolorów +HISTORY_MSG_421;Retinex - Gamma +HISTORY_MSG_422;Retinex - Gamma HISTORY_MSG_426;Retinex - Wyrównywanie odcieni HISTORY_MSG_429;Retinex - Iteracje HISTORY_MSG_432;Retinex - M - Podświetlenia @@ -652,13 +658,20 @@ ICCPROFCREATOR_ILL_INC;StdA 2856K ICCPROFCREATOR_PRIM_ADOBE;Adobe RGB (1998) ICCPROFCREATOR_PRIM_BEST;BestRGB ICCPROFCREATOR_PRIM_BETA;BetaRGB +ICCPROFCREATOR_PRIM_BLUX;Niebieski X +ICCPROFCREATOR_PRIM_BLUY;Niebieski Y ICCPROFCREATOR_PRIM_BRUCE;BruceRGB +ICCPROFCREATOR_PRIM_GREX;Zielony X +ICCPROFCREATOR_PRIM_GREY;Zielony Y ICCPROFCREATOR_PRIM_PROPH;Prophoto ICCPROFCREATOR_PRIM_REC2020;Rec2020 +ICCPROFCREATOR_PRIM_REDX;Czerwony X +ICCPROFCREATOR_PRIM_REDY;Czerwony Y ICCPROFCREATOR_PRIM_SRGB;sRGB ICCPROFCREATOR_PROF_V2;ICC v2 ICCPROFCREATOR_PROF_V4;ICC v4 ICCPROFCREATOR_SAVEDIALOG_TITLE;Zapisz profil ICC jako... +ICCPROFCREATOR_SLOPE;Nachylenie IPTCPANEL_CATEGORY;Kategoria IPTCPANEL_CITY;Miasto IPTCPANEL_CITYHINT;Wprowadź nazwę miasta uwiecznionego na zdjęciu. @@ -834,12 +847,15 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Cienie/Podświetlenia PARTIALPASTE_SHARPENEDGE;Krawędzie PARTIALPASTE_SHARPENING;Wyostrzanie PARTIALPASTE_SHARPENMICRO;Mikrokontrast +PARTIALPASTE_TM_FATTAL;Kompresja zakresu dynamiki PARTIALPASTE_VIBRANCE;Jaskrawość PARTIALPASTE_VIGNETTING;Korekcja winietowania PARTIALPASTE_WHITEBALANCE;Balans bieli PREFERENCES_ADD;Dodaj PREFERENCES_APPEARANCE;Wygląd +PREFERENCES_APPEARANCE_MAINFONT;Główny font PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Kolor ramki Nawigatora +PREFERENCES_APPEARANCE_PSEUDOHIDPI; Tryb pseudo-HiDPI PREFERENCES_APPEARANCE_THEME;Motyw graficzny PREFERENCES_APPLNEXTSTARTUP;wymaga ponownego uruchomienia PREFERENCES_AUTOMONPROFILE;Automatycznie użyj systemowego profilu monitora @@ -860,6 +876,7 @@ PREFERENCES_CHUNKSIZE_RAW_RCD;Demozaikowanie RCD PREFERENCES_CHUNKSIZE_RAW_XT;Demozaikowanie Xtrans PREFERENCES_CHUNKSIZE_RGB;Przetwarzanie RGB PREFERENCES_CLIPPINGIND;Pokazywanie obciętych prześwietleń/cieni +PREFERENCES_CLUTSCACHE;Cache HaldCLUT PREFERENCES_CLUTSDIR;Folder obrazów HaldCLUT PREFERENCES_CMMBPC;Kompensacja punktu czerni PREFERENCES_CROP_GUIDES_FRAME;Ramka @@ -974,6 +991,7 @@ PROFILEPANEL_MODE_TIP;Tryb wypełnienia parametrów przetwarzania.\n\nWduszone: PROFILEPANEL_MYPROFILES;Moje profile przetwarzania PROFILEPANEL_PASTEPPASTE;Parametry do wklejenia PROFILEPANEL_PCUSTOM;Własny +PROFILEPANEL_PDYNAMIC;Dynamika PROFILEPANEL_PFILE;Z pliku PROFILEPANEL_PINTERNAL;Neutralny PROFILEPANEL_PLASTSAVED;Ostatnio zapisany @@ -1099,6 +1117,9 @@ TP_BWMIX_VAL;L TP_CACORRECTION_BLUE;Niebieski TP_CACORRECTION_LABEL;Korekcja aberracji chromatycznej TP_CACORRECTION_RED;Czerwony +TP_CBDL_AFT;Po zmianie na Cz-B +TP_CBDL_BEF;Przed zmianą na Cz-B +TP_CBDL_METHOD;Gdzie TP_CHMIXER_BLUE;Niebieski TP_CHMIXER_GREEN;Zielony TP_CHMIXER_LABEL;Mieszacz kanałów @@ -1188,11 +1209,17 @@ TP_COLORTONING_LABREGION_CHANNEL_ALL;Wszystkie TP_COLORTONING_LABREGION_CHANNEL_B;Niebieski TP_COLORTONING_LABREGION_CHANNEL_G;Zielony TP_COLORTONING_LABREGION_CHANNEL_R;Czerwony +TP_COLORTONING_LABREGION_CHROMATICITYMASK;C +TP_COLORTONING_LABREGION_HUEMASK;H +TP_COLORTONING_LABREGION_LIGHTNESSMASK;L TP_COLORTONING_LABREGION_LIST_TITLE;Korekcja TP_COLORTONING_LABREGION_MASK;Maska +TP_COLORTONING_LABREGION_MASKBLUR;Rozmycie maski TP_COLORTONING_LABREGION_OFFSET;Przesunięcie +TP_COLORTONING_LABREGION_POWER;Moc TP_COLORTONING_LABREGION_SATURATION;Saturacja TP_COLORTONING_LABREGION_SHOWMASK;Pokaż maskę +TP_COLORTONING_LABREGION_SLOPE;Nachylenie TP_COLORTONING_LUMA;Luminancja TP_COLORTONING_LUMAMODE;Zachowaj luminancję TP_COLORTONING_LUMAMODE_TOOLTIP;Luminancja zostanie zachowana przy zmianie kolorów. @@ -1205,7 +1232,7 @@ TP_COLORTONING_OPACITY;Przezroczystość TP_COLORTONING_RGBCURVES;RGB - Krzywe TP_COLORTONING_RGBSLIDERS;RGB - Suwaki TP_COLORTONING_SA;Ochrona przed przesyceniem -TP_COLORTONING_SATURATEDOPACITY;Śiła +TP_COLORTONING_SATURATEDOPACITY;Siła TP_COLORTONING_SATURATIONTHRESHOLD;Próg TP_COLORTONING_SHADOWS;Cienie TP_COLORTONING_SPLITCO;Cienie/półcienie/podświetlenia @@ -1277,6 +1304,12 @@ TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Przy użyciu metod "tylko luminancja" oraz "L*a*b*", filtrowanie mediana zostanie wykonane prosto po funkcji falki w procesie odszumiania.\nW trybie "RGB" filtrowanie to zostanie wykonana pod koniec calego procesu. TP_DIRPYRDENOISE_MEDIAN_PASSES;Liczba powtórzeń mediana TP_DIRPYRDENOISE_MEDIAN_TYPE;Rodzaj mediana +TP_DIRPYRDENOISE_TYPE_3X3;3×3 +TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 miękko +TP_DIRPYRDENOISE_TYPE_5X5;5×5 +TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 miękko +TP_DIRPYRDENOISE_TYPE_7X7;7×7 +TP_DIRPYRDENOISE_TYPE_9X9;9×9 TP_DIRPYREQUALIZER_ALGO;Zakres odcieni skóry TP_DIRPYREQUALIZER_ALGO_TOOLTIP;- TP_DIRPYREQUALIZER_ARTIF;Usuń artefakty @@ -1327,6 +1360,10 @@ TP_EXPOSURE_TCMODE_STANDARD;Standardowa TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Ważona standardowa TP_EXPOS_BLACKPOINT_LABEL;Punkt czerni raw TP_EXPOS_WHITEPOINT_LABEL;Punkt bieli raw +TP_FILMNEGATIVE_BLUE;Proporcja niebieskiego +TP_FILMNEGATIVE_LABEL;Negatyw - klisza +TP_FILMNEGATIVE_PICK;Wybierz miejsce neutralne +TP_FILMNEGATIVE_RED;Proporcja czerwonego TP_FILMSIMULATION_LABEL;Symulacja Kliszy TP_FILMSIMULATION_STRENGTH;Siła TP_FILMSIMULATION_ZEROCLUTSFOUND;Ustaw folder HaldCLUT w Ustawieniach @@ -1390,7 +1427,9 @@ TP_ICM_TONECURVE;Użyj krzywą tonalną z DCP TP_ICM_TONECURVE_TOOLTIP;Włącz aby użyć krzywą tonalną znajdującą się w profilu DCP. Opcja ta jest tylko aktywna jeśli profil DCP zawiera krzywą tonalną. TP_ICM_WORKINGPROFILE;Profil roboczy TP_ICM_WORKING_TRC_CUSTOM;Własna +TP_ICM_WORKING_TRC_GAMMA;Gamma TP_ICM_WORKING_TRC_NONE;Żadna +TP_ICM_WORKING_TRC_SLOPE;Nachylenie TP_IMPULSEDENOISE_LABEL;Redukcja Szumów Impulsowych TP_IMPULSEDENOISE_THRESH;Próg TP_LABCURVE_AVOIDCOLORSHIFT;Zapobiegaj zmianom koloru @@ -1435,14 +1474,19 @@ TP_LENSGEOM_FILL;Auto-wypełnienie TP_LENSGEOM_LABEL;Obiektyw / Geometria TP_LENSGEOM_LIN;Liniowo TP_LENSGEOM_LOG;Logarytmicznie +TP_LENSPROFILE_CORRECTION_AUTOMATCH;Wybierz automatycznie TP_LENSPROFILE_CORRECTION_LCPFILE;Plik LCP +TP_LENSPROFILE_CORRECTION_MANUAL;Wybierz ręcznie TP_LENSPROFILE_LABEL;Profil korekcji obiektywu LCP TP_LENSPROFILE_MODE_HEADER;Profil obiektywu TP_LENSPROFILE_USE_CA;Aberracja chromatyczna TP_LENSPROFILE_USE_GEOMETRIC;Zniekształcenia geometryczne +TP_LENSPROFILE_USE_HEADER;Popraw TP_LENSPROFILE_USE_VIGNETTING;Winietowanie TP_LOCALCONTRAST_AMOUNT;Ilość +TP_LOCALCONTRAST_DARKNESS;Ciemne miejsca TP_LOCALCONTRAST_LABEL;Kontrast lokalny +TP_LOCALCONTRAST_LIGHTNESS;Jasne miejsca TP_LOCALCONTRAST_RADIUS;Promień TP_METADATA_EDIT;Zastosuj modyfikacje TP_METADATA_MODE;Tryb kopiowania metadanych @@ -1470,9 +1514,11 @@ TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Łata gorące piksele (pojedyńcze świecące, TP_PREPROCESS_LABEL;Przetwarzanie początkowe TP_PREPROCESS_LINEDENOISE;Filtr zakłóceń liniowych TP_PREPROCESS_LINEDENOISE_DIRECTION;Kierunek +TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Oba TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Poziomo TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Pionowo TP_PREPROCESS_NO_FOUND;Nic nie znaleziono +TP_PRSHARPENING_LABEL;Wyostrzanie po zmianie rozmiaru TP_RAWCACORR_AUTO;Autokorekcja TP_RAWCACORR_AUTOIT;Iteracje TP_RAWCACORR_AVOIDCOLORSHIFT;Unikaj przesunięcia kolorów @@ -1550,6 +1596,8 @@ TP_RETINEX_CONTEDIT_LH;Odcień TP_RETINEX_CONTEDIT_MAP;Wyrównywanie TP_RETINEX_EQUAL;Wyrównywanie TP_RETINEX_GAIN;Wzmocnienie +TP_RETINEX_GAMMA;Gamma +TP_RETINEX_GAMMA_NONE;Żaden TP_RETINEX_HIGH;Wysoki TP_RETINEX_HIGHLIGHT;Próg podświetleń TP_RETINEX_LABEL;Retinex @@ -1595,6 +1643,7 @@ TP_SHARPENEDGE_LABEL;Krawędzie TP_SHARPENEDGE_PASSES;Powtórzenia TP_SHARPENEDGE_THREE;Tylko luminancja TP_SHARPENING_AMOUNT;Siła +TP_SHARPENING_BLUR;Promień rozmycia TP_SHARPENING_CONTRAST;Próg kontrastu TP_SHARPENING_EDRADIUS;Promień TP_SHARPENING_EDTOLERANCE;Tolerancja krawędzi @@ -1617,6 +1666,7 @@ TP_SHARPENMICRO_MATRIX;Matryca 3×3 zamiast 5×5 TP_SHARPENMICRO_UNIFORMITY;Jednolitość TP_SOFTLIGHT_STRENGTH;Siła TP_TM_FATTAL_AMOUNT;Ilość +TP_TM_FATTAL_LABEL;Kompresja zakresu dynamiki TP_TM_FATTAL_THRESHOLD;Detale TP_VIBRANCE_AVOIDCOLORSHIFT;Zapobiegaj przesunięcia kolorów TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH @@ -1659,14 +1709,24 @@ TP_WAVELET_BACKGROUND;Tło TP_WAVELET_BACUR;Krzywa TP_WAVELET_BALCHRO;Balans chrominancji TP_WAVELET_BANONE;Żaden +TP_WAVELET_BASLI;Suwak +TP_WAVELET_BATYPE;Metoda balansu kontrastu +TP_WAVELET_CBENAB;Tonowanie i balans kolorów TP_WAVELET_CCURVE;Kontrast lokalny +TP_WAVELET_CH1;Cały zakres chrominancji +TP_WAVELET_CH2;Nasycone/pastelowe +TP_WAVELET_CH3;Połącz poziomy kontrastu TP_WAVELET_CHCU;Krzywa +TP_WAVELET_CHSL;Suwaki TP_WAVELET_COMPCONT;Kontrast +TP_WAVELET_COMPGAMMA;Kompresja - Gamma TP_WAVELET_CONTR;Gamut TP_WAVELET_CONTRA;Kontrast TP_WAVELET_CONTRAST_MINUS;Kontrast - TP_WAVELET_CONTRAST_PLUS;Kontrast + TP_WAVELET_CTYPE;Kontrola chrominancji +TP_WAVELET_CURVEEDITOR_CL;L +TP_WAVELET_CURVEEDITOR_HH;HH TP_WAVELET_DALL;We wszystkich kierunkach TP_WAVELET_DAUB2;D2 - niski TP_WAVELET_DAUB4;D4 - standard @@ -1681,18 +1741,23 @@ TP_WAVELET_EDGCONT;Kontrast lokalny TP_WAVELET_EDGE;Ostrość krawędzi TP_WAVELET_EDGEDETECTTHR;Niski próg (szum) TP_WAVELET_EDGEDETECTTHR2;Wysoki próg (wykrywanie) +TP_WAVELET_EDGTHRESH;Szczegółowość TP_WAVELET_EDRAD;Promień TP_WAVELET_EDSL;Suwaki progów +TP_WAVELET_EDTYPE;Metoda kontrastu lokalnego: TP_WAVELET_EDVAL;Siła +TP_WAVELET_FINEST;Najdokładniej TP_WAVELET_HS2;Cienie/Podświetlenia TP_WAVELET_HUESKIN;Odcień skóry TP_WAVELET_HUESKY;Odcień nieba +TP_WAVELET_LEVCH;Chrominancja TP_WAVELET_LEVF;Kontrast TP_WAVELET_LEVONE;Poziom 2 TP_WAVELET_LEVTHRE;Poziom 4 TP_WAVELET_LEVTWO;Poziom 3 TP_WAVELET_LEVZERO;Poziom 1 TP_WAVELET_LIPST;Usprawniony algorytm +TP_WAVELET_MEDGREINF;Pierwszy poziom TP_WAVELET_MEDI;Usuwaj artefakty niebieskiego nieba TP_WAVELET_MEDILEV;Wykrywanie krawędzi TP_WAVELET_NEUTRAL;Neutralny @@ -1701,12 +1766,15 @@ TP_WAVELET_NPHIGH;Wysoki TP_WAVELET_NPLOW;Niski TP_WAVELET_NPNONE;Brak TP_WAVELET_NPTYPE;Piksele sąsiadujące +TP_WAVELET_PASTEL;Chrominancja kolorów pastelowych TP_WAVELET_PROC;Proces TP_WAVELET_RE1;Wzmocniony TP_WAVELET_RE2;Niezmieniony TP_WAVELET_RE3;Zmniejszony +TP_WAVELET_RESCHRO;Chrominancja TP_WAVELET_RESCON;Cienie TP_WAVELET_RESCONH;Podświetlenia +TP_WAVELET_SAT;Chrominancja kolorów nasyconych TP_WAVELET_STREN;Siła TP_WAVELET_STRENGTH;Siła TP_WAVELET_SUPE;Ekstra @@ -1714,7 +1782,9 @@ TP_WAVELET_THR;Próg cieni TP_WAVELET_THRESHOLD;Poziom podświetleń TP_WAVELET_THRESHOLD2;Poziom cieni TP_WAVELET_THRH;Próg podświetleń +TP_WAVELET_TMSTRENGTH;Siła kompresji TP_WAVELET_TMTYPE;Metoda kompresji +TP_WAVELET_TON;Tonowanie TP_WBALANCE_AUTO;Auto TP_WBALANCE_CAMERA;Z aparatu TP_WBALANCE_CLOUDY;Pochmurnie @@ -1757,6 +1827,7 @@ TP_WBALANCE_SOLUX41;Solux 4100K TP_WBALANCE_SOLUX47;Solux 4700K (vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Punktowy +TP_WBALANCE_TEMPBIAS;Kompensacja automatycznego balansu bieli (AWB) TP_WBALANCE_TEMPERATURE;Temperatura TP_WBALANCE_TUNGSTEN;Wolfram TP_WBALANCE_WATER1;Pod wodą 1 @@ -1783,7 +1854,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !DONT_SHOW_AGAIN;Don't show this message again. !DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule !DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the "re:" prefix to enter\na regular expression. -!DYNPROFILEEDITOR_IMGTYPE_HDR;HDR !DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift !DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule !EXPORT_BYPASS;Processing steps to bypass @@ -1796,11 +1866,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to permanently delete all %1 files in trash? !FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? !FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to permanently delete the selected %1 files, including a queue-processed version? -!FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_235;B&W - CM - Auto @@ -1862,8 +1930,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_416;Retinex !HISTORY_MSG_417;Retinex - Transmission median !HISTORY_MSG_420;Retinex - Histogram - HSL -!HISTORY_MSG_421;Retinex - Gamma -!HISTORY_MSG_422;Retinex - Gamma !HISTORY_MSG_423;Retinex - Gamma slope !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base @@ -1946,15 +2012,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !ICCPROFCREATOR_PRIMARIES;Primaries: !ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 !ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 -!ICCPROFCREATOR_PRIM_BLUX;Blue X -!ICCPROFCREATOR_PRIM_BLUY;Blue Y -!ICCPROFCREATOR_PRIM_GREX;Green X -!ICCPROFCREATOR_PRIM_GREY;Green Y -!ICCPROFCREATOR_PRIM_REDX;Red X -!ICCPROFCREATOR_PRIM_REDY;Red Y !ICCPROFCREATOR_PRIM_TOOLTIP;You can only set custom primaries for ICC v4 profiles. !ICCPROFCREATOR_PRIM_WIDEG;Widegamut -!ICCPROFCREATOR_SLOPE;Slope !ICCPROFCREATOR_TRC_PRESET;Tone response curve: !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_COPYRIGHT;Copyright notice @@ -1992,17 +2051,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PARTIALPASTE_RAW_IMAGENUM;Sub-image !PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift !PARTIALPASTE_SOFTLIGHT;Soft light -!PARTIALPASTE_TM_FATTAL;Dynamic range compression !PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font !PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color -!PREFERENCES_APPEARANCE_MAINFONT;Main font -!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode !PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction -!PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CROP;Crop Editing !PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop @@ -2040,7 +2095,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PROFILEPANEL_PDYNAMIC;Dynamic !PROGRESSBAR_GREENEQUIL;Green equilibration... !PROGRESSBAR_HOTDEADPIXELFILTER;Hot/dead pixel filter... !PROGRESSBAR_LINEDENOISE;Line noise filter... @@ -2060,9 +2114,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. !TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen the tool is active:\n- Add a picker: left-click.\n- Drag a picker: left-click and drag.\n- Delete a picker: right-click.\n- Delete all pickers: Ctrl+Shift+right-click.\n- Revert to hand tool: right-click outside any picker. -!TP_CBDL_AFT;After Black-and-White -!TP_CBDL_BEF;Before Black-and-White -!TP_CBDL_METHOD;Process located !TP_CBDL_METHOD_TOOLTIP;Choose whether the Contrast by Detail Levels tool is to be positioned after the Black-and-White tool, which makes it work in L*a*b* space, or before it, which makes it work in RGB space. !TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;When setting manually, values above 65 are recommended. !TP_COLORAPP_FREE;Free temp+green + CAT02 + [output] @@ -2072,13 +2123,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 !TP_COLORTONING_LABREGIONS;Color correction regions !TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2 -!TP_COLORTONING_LABREGION_CHROMATICITYMASK;C -!TP_COLORTONING_LABREGION_HUEMASK;H !TP_COLORTONING_LABREGION_LIGHTNESS;Lightness -!TP_COLORTONING_LABREGION_LIGHTNESSMASK;L -!TP_COLORTONING_LABREGION_MASKBLUR;Mask Blur -!TP_COLORTONING_LABREGION_POWER;Power -!TP_COLORTONING_LABREGION_SLOPE;Slope !TP_CROP_GTHARMMEANS;Harmonic Means !TP_CROP_GTTRIANGLE1;Golden Triangles 1 !TP_CROP_GTTRIANGLE2;Golden Triangles 2 @@ -2096,22 +2141,12 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Weighted L* (little) + a*b* (normal) !TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Applying three median filter iterations with a 3×3 window size often leads to better results than using one median filter iteration with a 7×7 window size. !TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one. -!TP_DIRPYRDENOISE_TYPE_3X3;3×3 -!TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 soft -!TP_DIRPYRDENOISE_TYPE_5X5;5×5 -!TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 soft -!TP_DIRPYRDENOISE_TYPE_7X7;7×7 -!TP_DIRPYRDENOISE_TYPE_9X9;9×9 !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. !TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual -!TP_FILMNEGATIVE_BLUE;Blue ratio !TP_FILMNEGATIVE_GREEN;Reference exponent (contrast) !TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picking two patches which had a neutral hue (no color) in the original scene. The patches should differ in brightness. Set the white balance afterwards. -!TP_FILMNEGATIVE_LABEL;Film Negative -!TP_FILMNEGATIVE_PICK;Pick neutral spots -!TP_FILMNEGATIVE_RED;Red ratio !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. @@ -2123,20 +2158,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_ICM_SAVEREFERENCE;Save Reference Image !TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles. !TP_ICM_WORKING_TRC;Tone response curve: -!TP_ICM_WORKING_TRC_GAMMA;Gamma -!TP_ICM_WORKING_TRC_SLOPE;Slope !TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. -!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically selected -!TP_LENSPROFILE_CORRECTION_MANUAL;Manually selected !TP_LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong. -!TP_LENSPROFILE_USE_HEADER;Correct -!TP_LOCALCONTRAST_DARKNESS;Darkness level -!TP_LOCALCONTRAST_LIGHTNESS;Lightness level !TP_PDSHARPENING_LABEL;Capture Sharpening -!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both !TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows !TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTOIT_TOOLTIP;This setting is available if "Auto-correction" is checked.\nAuto-correction is conservative, meaning that it often does not correct all chromatic aberration.\nTo correct the remaining chromatic aberration, you can use up to five iterations of automatic chromatic aberration correction.\nEach iteration will reduce the remaining chromatic aberration from the last iteration at the cost of additional processing time. !TP_RAW_BORDER;Border @@ -2179,12 +2205,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission !TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. -!TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free !TP_RETINEX_GAMMA_HIGH;High !TP_RETINEX_GAMMA_LOW;Low !TP_RETINEX_GAMMA_MID;Middle -!TP_RETINEX_GAMMA_NONE;None !TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). !TP_RETINEX_GRAD;Transmission gradient !TP_RETINEX_GRADS;Strength gradient @@ -2219,31 +2243,21 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed -!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_ITERCHECK;Auto limit iterations !TP_SHARPENING_RADIUS_BOOST;Corner radius boost !TP_SOFTLIGHT_LABEL;Soft Light !TP_TM_FATTAL_ANCHOR;Anchor -!TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_WAVELET_B2;Residual !TP_WAVELET_BALANCE;Contrast balance d/v-h !TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. !TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. -!TP_WAVELET_BASLI;Slider -!TP_WAVELET_BATYPE;Contrast balance method -!TP_WAVELET_CBENAB;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted -!TP_WAVELET_CH1;Whole chroma range -!TP_WAVELET_CH2;Saturated/pastel -!TP_WAVELET_CH3;Link contrast levels !TP_WAVELET_CHR;Chroma-contrast link strength !TP_WAVELET_CHRO;Saturated/pastel threshold !TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. !TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" -!TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. !TP_WAVELET_COMPTM;Tone mapping !TP_WAVELET_CONTEDIT;'After' contrast curve @@ -2251,9 +2265,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) !TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. -!TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. -!TP_WAVELET_CURVEEDITOR_HH;HH !TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Modifies the residual image's hue as a function of hue. !TP_WAVELET_DAUB;Edge performance !TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the firsts levels. However the quality is not strictly related to this coefficient and can vary with images and uses. @@ -2264,12 +2276,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise. !TP_WAVELET_EDGESENSI;Edge sensitivity !TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. -!TP_WAVELET_EDGTHRESH;Detail !TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts. !TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect. -!TP_WAVELET_EDTYPE;Local contrast method !TP_WAVELET_FINAL;Final Touchup -!TP_WAVELET_FINEST;Finest !TP_WAVELET_HIGHLIGHT;Highlight luminance range !TP_WAVELET_HS1;Whole luminance range !TP_WAVELET_HUESKIN_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. @@ -2278,7 +2287,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_ITER_TOOLTIP;Left: increase low levels and reduce high levels,\nRight: reduce low levels and increase high levels. !TP_WAVELET_LABEL;Wavelet Levels !TP_WAVELET_LARGEST;Coarsest -!TP_WAVELET_LEVCH;Chroma !TP_WAVELET_LEVDIR_ALL;All levels in all directions !TP_WAVELET_LEVDIR_INF;Below or equal the level !TP_WAVELET_LEVDIR_ONE;One level @@ -2288,7 +2296,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LOWLIGHT;Shadow luminance range -!TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. !TP_WAVELET_NOISE;Denoise and Refine !TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. @@ -2296,10 +2303,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_OPACITYW;Contrast balance d/v-h curve !TP_WAVELET_OPACITYWL;Final local contrast !TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right. -!TP_WAVELET_PASTEL;Pastel chroma -!TP_WAVELET_RESCHRO;Chroma !TP_WAVELET_RESID;Residual Image -!TP_WAVELET_SAT;Saturated chroma !TP_WAVELET_SETTINGS;Wavelet Settings !TP_WAVELET_SKIN;Skin targetting/protection !TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. @@ -2312,8 +2316,5 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. -!TP_WAVELET_TON;Toning -!TP_WBALANCE_TEMPBIAS;AWB temperature bias !TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". From 2acf13a62a55d4b9c7fae29c9061ab8b242c6229 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sat, 15 Feb 2020 15:37:42 -0800 Subject: [PATCH 066/264] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bab7397a6..d1f1578f8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: CMAKE_CXX_STANDARD: 11 PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig RAW_THERAPEE_MAJOR: '5' - RAW_THERAPEE_MINOR: '7' + RAW_THERAPEE_MINOR: '8' C_FLAGS: -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include -I/usr/local/opt/expat/include -I/usr/local/opt/llvm/include run: | # GITHUB_REF is the ref that triggered the build, like refs/heads/new-feature - the next line parses that to REF: the branch name only (new-feature) From 9d24423c770ed582f05557772d8a89011ffe24d6 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sat, 15 Feb 2020 15:56:20 -0800 Subject: [PATCH 067/264] mac: simplify bundle structure --- AboutThisBuild.txt.in | 4 ++++ UpdateInfo.cmake | 10 ++++++++++ tools/osx/Info.plist-bin.in | 10 ---------- tools/osx/Info.plist.in | 31 ++++++++++++++++++++++++++++++- tools/osx/executable_loader.in | 33 --------------------------------- tools/osx/macosx_bundle.sh | 33 +++++++++++++++++++++++++++------ tools/osx/rt-bin.entitlements | 8 -------- tools/osx/rt.entitlements | 34 +++++++++++++++++----------------- 8 files changed, 88 insertions(+), 75 deletions(-) delete mode 100644 tools/osx/Info.plist-bin.in delete mode 100644 tools/osx/executable_loader.in delete mode 100644 tools/osx/rt-bin.entitlements diff --git a/AboutThisBuild.txt.in b/AboutThisBuild.txt.in index f48d39b50..06f628187 100644 --- a/AboutThisBuild.txt.in +++ b/AboutThisBuild.txt.in @@ -13,3 +13,7 @@ Build flags: ${CXX_FLAGS} Link flags: ${LFLAGS} OpenMP support: ${OPTION_OMP} MMAP support: ${WITH_MYFILE_MMAP} +Build OS: ${BUILDINFO_OS} +Build date: ${BUILDINFO_DATE} ZULU +Build epoch: ${BUILDINFO_EPOCH} +Build UUID: ${BUILDINFO_UUID} diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index d1f532506..a4de8fe1a 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -64,6 +64,11 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() + execute_process(COMMAND uname -mrs OUTPUT_VARIABLE BUILDINFO_OS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND date -Ru OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND date +%s OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND uuidgen COMMAND tr "A-Z" "a-z" OUTPUT_VARIABLE BUILDINFO_UUID OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Git checkout information:") message(STATUS " Commit description: ${GIT_DESCRIBE}") message(STATUS " Branch: ${GIT_BRANCH}") @@ -72,6 +77,11 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS "Build information:") + message(STATUS " Build OS: ${BUILDINFO_OS}") + message(STATUS " Build date: ${BUILDINFO_DATE}") + message(STATUS " Epoch: ${BUILDINFO_EPOCH}") + message(STATUS " UUID: ${BUILDINFO_UUID}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") diff --git a/tools/osx/Info.plist-bin.in b/tools/osx/Info.plist-bin.in deleted file mode 100644 index 33abd4f7a..000000000 --- a/tools/osx/Info.plist-bin.in +++ /dev/null @@ -1,10 +0,0 @@ - - - - - CFBundleName - RawTherapee-bin - CFBundleIdentifier - com.rawtherapee.rawtherapee - - diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index eec1ab490..7e4918cc0 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -2,6 +2,35 @@ + LSEnvironment + + XDG_DATA_DIRS + /Applications/RawTherapee.app/Contents/Resources/share + DYLD_FALLBACK_LIBRARY_PATH + /Applications/RawTherapee.app/Contents/Frameworks + GTK_PATH + /Applications/RawTherapee.app/Contents/Frameworks + GTK_IM_MODULE_FILE + /Applications/RawTherapee.app/Contents/Resources/etc/gtk-3.0/gtk.immodules + XDG_DATA_HOME + /Applications/RawTherapee.app/Contents/Resources/share + GSETTINGS_SCHEMA_DIR + /Applications/RawTherapee.app/Contents/Resources/share/glib-2.0/schemas + GDK_PIXBUF_MODULE_FILE + /Applications/RawTherapee.app/Contents/Resources/etc/gtk-3.0/gdk-pixbuf.loaders + GDK_PIXBUF_MODULEDIR + /Applications/RawTherapee.app/Contents/Frameworks + FONTCONFIG_PATH + /Applications/RawTherapee.app/Contents/Resources/etc/fonts + LIBDIR + /Applications/RawTherapee.app/Contents/Frameworks + DATADIR + /Applications/RawTherapee.app/Contents/Resources + GDK_RENDERING + similar + GTK_OVERLAY_SCROLLING + 0 + CFBundleDevelopmentRegion English CFBundleDisplayName @@ -115,7 +144,7 @@ CFBundleIconFile rawtherapee.icns CFBundleIdentifier - com.rawtherapee.rawtherapee + com.rawtherapee.RawTherapee CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/tools/osx/executable_loader.in b/tools/osx/executable_loader.in deleted file mode 100644 index 5ee609043..000000000 --- a/tools/osx/executable_loader.in +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -# GIMP has this next line regarding raising the number-of-open-files limit: -ulimit -n 7000 - -cd "$(dirname "$0")" || exit 1 - -cwd="$(pwd)" -app="/Applications/RawTherapee.app" -lib="${app}/Contents/Frameworks" -resources="${app}/Contents/Resources" -etc="${resources}/etc" -export XDG_DATA_DIRS="${resources}/share" -export DYLD_FALLBACK_LIBRARY_PATH="${lib}" -export GTK_PATH="${lib}/gtk-3.0/3.0.0" -export XDG_DATA_HOME="${resources}/share" -export GSETTINGS_SCHEMA_DIR="${resources}/share/glib-2.0/schemas" -export GDK_PIXBUF_MODULE_FILE="${etc}/gtk-3.0/gdk-pixbuf.loaders" -export GDK_PIXBUF_MODULEDIR="${lib}" - -export RT_SETTINGS="${HOME}/Library/Application Support/RawTherapee/config" -export RT_CACHE="${HOME}/Library/Application Support/RawTherapee/cache" - -# Strip out system argument -case "$1" in - -psn_*) shift ;; -esac - -# Prevent crash when directory name contains special characters -AppleLocale=`defaults read -g AppleLocale` -export LANG=${AppleLocale%@*}.UTF-8 - -exec "${app}/Contents/MacOS/bin/rawtherapee-bin" "$@" diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 7a6bfe765..cb5338121 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -50,6 +50,22 @@ function ModifyInstallNames { done } +function ModifyInstallNames { + find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do + msg "Modifying install names: ${x}" + { + # id + if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then + echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'" + fi + GetDependencies "${x}" | while read -r y + do + echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" + done + } | bash -v + done +} + # Source check if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." @@ -132,9 +148,16 @@ echo "Bundle date: $(date -Ru) ZULU" >> Resources/AboutThisBuild.txt echo "Bundle epoch: $(date +%s)" >> Resources/AboutThisBuild.txt echo "Bundle UUID: $(uuidgen)" >> Resources/AboutThisBuild.txt +echo "\n--------\n" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "Bundle UUID: $(uuidgen)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt + msg "Copying release files:" ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" -ditto "Resources" "${RESOURCES}" +ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" # Copy the Lensfun database into the app bundle mkdir -p "${RESOURCES}/share/lensfun" @@ -152,6 +175,9 @@ CheckLink "${EXECUTABLE}" # dylib install names ModifyInstallNames +# dylib install names +ModifyInstallNames + # Copy libjpeg-turbo ("62") into the app bundle ditto ${LOCAL_PREFIX}/local/lib/libjpeg.62.dylib "${CONTENTS}/Frameworks/libjpeg.62.dylib" @@ -193,11 +219,6 @@ ditto "${LIB}"/gtk-3.0/3*/immodules/*.{dylib,so} "${LIB}" rm -r "${LIB}"/gtk-3.0 rm -r "${LIB}"/gdk-pixbuf-2.0 -msg "Build glib database:" -mkdir -p ${RESOURCES}/share/glib-2.0 -ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/glib-2.0/schemas -"${LOCAL_PREFIX}/local/bin/glib-compile-schemas" "${RESOURCES}/share/glib-2.0/schemas" - # GTK+3 themes msg "Copy GTK+3 theme and icon resources:" ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/themes/Mac/gtk-3.0/gtk-keys.css diff --git a/tools/osx/rt-bin.entitlements b/tools/osx/rt-bin.entitlements deleted file mode 100644 index 9e5e269cb..000000000 --- a/tools/osx/rt-bin.entitlements +++ /dev/null @@ -1,8 +0,0 @@ - - - - -com.apple.security.inherit - - - \ No newline at end of file diff --git a/tools/osx/rt.entitlements b/tools/osx/rt.entitlements index 082661401..61422fae7 100644 --- a/tools/osx/rt.entitlements +++ b/tools/osx/rt.entitlements @@ -1,20 +1,20 @@ - - application-identifier - com.rawtherapee.rawtherapee - com.apple.security.temporary-exception.files.absolute-path.read-write - - "/" - - com.apple.security.cs.allow-dyld-environment-variables - - com.apple.security.files.user-selected.read-write - - com.apple.security.app-sandbox - - com.apple.security.files.downloads.read-write - - - + + application-identifier + com.rawtherapee.RawTherapee + com.apple.security.temporary-exception.files.absolute-path.read-write + + / + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.files.user-selected.read-write + + com.apple.security.app-sandbox + + com.apple.security.files.downloads.read-write + + + \ No newline at end of file From debf97126b4243ac209eab2ec8c0725e8a08011d Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sat, 15 Feb 2020 18:02:14 -0800 Subject: [PATCH 068/264] revert AboutThisBuild.txt --- AboutThisBuild.txt.in | 4 ---- 1 file changed, 4 deletions(-) diff --git a/AboutThisBuild.txt.in b/AboutThisBuild.txt.in index 06f628187..f48d39b50 100644 --- a/AboutThisBuild.txt.in +++ b/AboutThisBuild.txt.in @@ -13,7 +13,3 @@ Build flags: ${CXX_FLAGS} Link flags: ${LFLAGS} OpenMP support: ${OPTION_OMP} MMAP support: ${WITH_MYFILE_MMAP} -Build OS: ${BUILDINFO_OS} -Build date: ${BUILDINFO_DATE} ZULU -Build epoch: ${BUILDINFO_EPOCH} -Build UUID: ${BUILDINFO_UUID} From ba388cc196c55cec5037c68eaa91aad68ea8ab90 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sat, 15 Feb 2020 18:04:24 -0800 Subject: [PATCH 069/264] revert UpdateInfo.cmake --- UpdateInfo.cmake | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index a4de8fe1a..d1f532506 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -64,11 +64,6 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() - execute_process(COMMAND uname -mrs OUTPUT_VARIABLE BUILDINFO_OS OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND date -Ru OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND date +%s OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND uuidgen COMMAND tr "A-Z" "a-z" OUTPUT_VARIABLE BUILDINFO_UUID OUTPUT_STRIP_TRAILING_WHITESPACE) - message(STATUS "Git checkout information:") message(STATUS " Commit description: ${GIT_DESCRIBE}") message(STATUS " Branch: ${GIT_BRANCH}") @@ -77,11 +72,6 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") - message(STATUS "Build information:") - message(STATUS " Build OS: ${BUILDINFO_OS}") - message(STATUS " Build date: ${BUILDINFO_DATE}") - message(STATUS " Epoch: ${BUILDINFO_EPOCH}") - message(STATUS " UUID: ${BUILDINFO_UUID}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") From 7b215e83a3c29eb002a0d06dcbc76afbe86e55fd Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sat, 15 Feb 2020 18:07:30 -0800 Subject: [PATCH 070/264] mac: bundle simplification --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 259a0d7a2..8503fe573 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,7 +168,7 @@ endif() if(NOT DEFINED DATADIR) if(BUILD_BUNDLE) if(APPLE) - set(DATADIR "../../Resources") + set(DATADIR "../Resources") else() set(DATADIR .) endif() @@ -180,7 +180,7 @@ endif() if(NOT DEFINED LIBDIR) if(BUILD_BUNDLE) if(APPLE) - set(LIBDIR "../../Frameworks") + set(LIBDIR "../Frameworks") else() set(LIBDIR .) endif() From 338c2aaccee9cbb099c778c83f2dc7c93b55fea2 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 06:08:12 -0800 Subject: [PATCH 071/264] mac:bundle simplification cont'd --- rtdata/options/options.osx | 5 +- tools/osx/macosx_bundle.sh | 343 +++++++++++++++++-------------------- 2 files changed, 156 insertions(+), 192 deletions(-) diff --git a/rtdata/options/options.osx b/rtdata/options/options.osx index 58e0a5604..bffd48495 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -9,6 +9,7 @@ # which can be useful if you want to keep the application and all the cache data in a single place, # an external HD for example MultiUser=true +UseSystemTheme=false [File Browser] # Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include) @@ -38,5 +39,5 @@ CustomProfileBuilder= #ImgDefault=Neutral [GUI] -FontFamily=Helvetica Regular -CPFontFamily=Helvetica Regular +FontFamily=DroidSansMonoSlashed Regular +CPFontFamily=DroidSansMonoSlashed Regular diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index cb5338121..35b80a44c 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -16,95 +16,79 @@ fMagenta="$(tput setaf 5)" fRed="$(tput setaf 1)" function msg { - printf "\\n${fBold}-- %s${fNormal}\\n" "${@}" +printf "\\n${fBold}-- %s${fNormal}\\n" "${@}" } function msgError { - printf "\\n${fBold}Error:${fNormal}\\n%s\\n" "${@}" +printf "\\n${fBold}Error:${fNormal}\\n%s\\n" "${@}" } function GetDependencies { - otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' +otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' } function CheckLink { - GetDependencies "$1" | while read -r; do - local dest="${LIB}/$(basename "${REPLY}")" - test -f "${dest}" || { ditto --arch "${arch}" "${REPLY}" "${dest}"; CheckLink "${dest}"; } - done +GetDependencies "$1" | while read -r; do +local dest="${LIB}/$(basename "${REPLY}")" +test -f "${dest}" || { ditto --arch "${arch}" "${REPLY}" "${dest}"; CheckLink "${dest}"; } +done } function ModifyInstallNames { - find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do - msg "Modifying install names: ${x}" - { - # id - if [ ${x:(-6)} == ".dylib" ]; then - echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'" - fi - GetDependencies "${x}" | while read -r y - do - echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" - done - } | bash -v - done -} - -function ModifyInstallNames { - find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do - msg "Modifying install names: ${x}" - { - # id - if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then - echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'" - fi - GetDependencies "${x}" | while read -r y - do - echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" - done - } | bash -v - done +find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do +msg "Modifying install names: ${x}" +{ +# id +if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then +echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'" +fi +GetDependencies "${x}" | while read -r y +do +echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" +done +} | bash -v +done } # Source check if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then - msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." - exit 1 +msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." +exit 1 fi # Update project version if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then - ### This section is copied from tools/generateReleaseInfo - # Get version description. - # Depending on whether you checked out a branch (dev) or a tag (release), - # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. - gitDescribe="$(git describe --tags --always)" +### This section is copied from tools/generateReleaseInfo +# Get version description. +# Depending on whether you checked out a branch (dev) or a tag (release), +# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. +gitDescribe="$(git describe --tags --always)" - # Apple requires a numeric version of the form n.n.n - # https://goo.gl/eWDQv6 +# Apple requires a numeric version of the form n.n.n +# https://goo.gl/eWDQv6 - # Get number of commits since tagging. This is what gitDescribe uses. - # Works when checking out branch, tag or commit. - gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))" +# Get number of commits since tagging. This is what gitDescribe uses. +# Works when checking out branch, tag or commit. +gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))" - # Create numeric version. - # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. - # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). - if [[ -z $gitCommitsSinceTag ]]; then - gitVersionNumericBS="0.0.0" - else - gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen. - gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0 - fi - ### Copy end. +# Create numeric version. +# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. +# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). +if [[ -z $gitCommitsSinceTag ]]; then +gitVersionNumericBS="0.0.0" +else +gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen. +gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0 +fi +### Copy end. - PROJECT_FULL_VERSION="$gitDescribe" - PROJECT_VERSION="$gitVersionNumericBS" +PROJECT_FULL_VERSION="$gitDescribe" +PROJECT_VERSION="$gitVersionNumericBS" fi MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')" if [[ -z "${MINIMUM_SYSTEM_VERSION}" ]]; then - MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" +MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" fi arch=x86_64 @@ -122,7 +106,7 @@ __EOS__ LOCAL_PREFIX="$(cmake .. -LA -N | grep "LOCAL_PREFIX" | cut -d "=" -f2)" EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" - + APP="${PROJECT_NAME}.app" CONTENTS="${APP}/Contents" RESOURCES="${CONTENTS}/Resources" @@ -137,16 +121,9 @@ rm -rf "${APP}" "${PROJECT_NAME}_*.dmg" "*zip" msg "Creating bundle container:" install -d "${RESOURCES}" \ - "${MACOS}" \ - "${LIB}" \ - "${ETC}" - -echo "\n--------\n" >> Resources/AboutThisBuild.txt -echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> Resources/AboutThisBuild.txt -echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> Resources/AboutThisBuild.txt -echo "Bundle date: $(date -Ru) ZULU" >> Resources/AboutThisBuild.txt -echo "Bundle epoch: $(date +%s)" >> Resources/AboutThisBuild.txt -echo "Bundle UUID: $(uuidgen)" >> Resources/AboutThisBuild.txt +"${MACOS}" \ +"${LIB}" \ +"${ETC}" echo "\n--------\n" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt @@ -175,9 +152,6 @@ CheckLink "${EXECUTABLE}" # dylib install names ModifyInstallNames -# dylib install names -ModifyInstallNames - # Copy libjpeg-turbo ("62") into the app bundle ditto ${LOCAL_PREFIX}/local/lib/libjpeg.62.dylib "${CONTENTS}/Frameworks/libjpeg.62.dylib" @@ -228,8 +202,8 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/themes/Default/gtk-3.0/gtk- msg "Copy Adwaita icons" iconfolders=("16x16/actions" "16x16/devices" "16x16/mimetypes" "16x16/places" "16x16/status" "48x48/devices") for f in "${iconfolders[@]}"; do - mkdir -p ${RESOURCES}/share/icons/Adwaita/${f} - ditto ${LOCAL_PREFIX}/local/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f} +mkdir -p ${RESOURCES}/share/icons/Adwaita/${f} +ditto ${LOCAL_PREFIX}/local/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f} done ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/icons/Adwaita/index.theme "${LOCAL_PREFIX}/local/bin/gtk-update-icon-cache" "${RESOURCES}/share/icons/Adwaita" @@ -240,47 +214,39 @@ msg "Build GTK3 databases:" "${LOCAL_PREFIX}"/local/bin/gdk-pixbuf-query-loaders "${LIB}"/libpix*.so > "${ETC}"/gtk-3.0/gdk-pixbuf.loaders "${LOCAL_PREFIX}"/local/bin/gtk-query-immodules-3.0 "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules" -sed -i "" -e "s|/opt/local/|/usr/|" "${ETC}/gtk-3.0/gtk.immodules" - -# Install names -ModifyInstallNames - -# fix @rpath in Frameworks -msg "Registering @rpath in Frameworks folder:" -for frameworklibs in ${CONTENTS}/Frameworks/* ; do - echo " install_name_tool -delete_rpath /opt/local/lib '${frameworklibs}'" | bash -v - echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v -done +sed -i "" -e "s|/opt/local/|/Applications/RawTherapee.app/Contents/Frameworks/|" "${ETC}/gtk-3.0/gtk.immodules" # Mime directory msg "Copying shared files from ${GTK_PREFIX}:" ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/mime +# Install names +ModifyInstallNames + msg "Installing required application bundle files:" PROJECT_SOURCE_DATA_DIR="${PROJECT_SOURCE_DIR}/tools/osx" ditto "${PROJECT_SOURCE_DIR}/build/Resources" "${RESOURCES}" -# Executable loader -# Note: executable is renamed to 'rawtherapee-bin'. -mkdir "${MACOS}/bin" -ditto "${MACOS}/rawtherapee" "${MACOS}/bin/rawtherapee-bin" -rm "${MACOS}/rawtherapee" -install -m 0755 "${PROJECT_SOURCE_DATA_DIR}/executable_loader.in" "${MACOS}/rawtherapee" +ditto "${PROJECT_SOURCE_DIR}/rtdata/fonts" "${ETC}/fonts" + # App bundle resources ditto "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}" ditto "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}" install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/Info.plist.in" "${CONTENTS}/Info.plist" -install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/Info.plist-bin.in" "${CONTENTS}/MacOS/bin/Info.plist" sed -i "" -e "s|@version@|${PROJECT_FULL_VERSION}| s|@shortVersion@|${PROJECT_VERSION}| s|@arch@|${arch}|" \ - "${CONTENTS}/Info.plist" -plutil -convert xml1 "${CONTENTS}/Info.plist" -plutil -convert xml1 "${CONTENTS}/MacOS/bin/Info.plist" +"${CONTENTS}/Info.plist" +plutil -convert binary1 "${CONTENTS}/Info.plist" update-mime-database -V "${CONTENTS}/Resources/share/mime" +msg "Build glib database:" +mkdir -p ${RESOURCES}/share/glib-2.0 +ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/glib-2.0/schemas +"${LOCAL_PREFIX}/local/bin/glib-compile-schemas" "${RESOURCES}/share/glib-2.0/schemas" + # Append an LC_RPATH msg "Registering @rpath into the executable:" -echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${MACOS}/bin/rawtherapee-bin'" | bash -v +echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${EXECUTABLE}'" | bash -v echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${EXECUTABLE}-cli'" | bash -v ModifyInstallNames @@ -288,121 +254,118 @@ ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder:" for frameworklibs in ${CONTENTS}/Frameworks/* ; do - echo " install_name_tool -delete_rpath /opt/local/lib '${frameworklibs}'" | bash -v - echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v +echo " install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib '${frameworklibs}'" | bash -v +echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v done # Sign the app msg "Codesigning:" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" if ! test -z "$CODESIGNID" ; then -install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt.entitlements" "${CONTENTS}/Entitlements.plist" -plutil -convert xml1 "${CONTENTS}/Entitlements.plist" -install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt-bin.entitlements" "${CONTENTS}/MacOS/bin/Entitlements.plist" -plutil -convert xml1 "${CONTENTS}/MacOS/bin/Entitlements.plist" -codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.rawtherapee-bin" -o runtime --timestamp --entitlements "${APP}/Contents/MacOS/bin/Entitlements.plist" "${APP}/Contents/MacOS/bin/rawtherapee-bin" +install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt.entitlements" "${CONTENTS}/rt.entitlements" +plutil -convert binary1 "${CONTENTS}/rt.entitlements" +codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp --entitlements "${CONTENTS}/rt.entitlements" "${CONTENTS}/rt.entitlements" +codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp --entitlements "${CONTENTS}/rt.entitlements" "${EXECUTABLE}" +codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp --entitlements "${CONTENTS}/rt.entitlements" "${EXECUTABLE}-cli" for frameworklibs in ${CONTENTS}/Frameworks/* ; do - codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.rawtherapee-bin" -o runtime --timestamp "${frameworklibs}" +codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp "${frameworklibs}" done -codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --entitlements "${CONTENTS}/Entitlements.plist" "${APP}" +codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --entitlements "${CONTENTS}/rt.entitlements" "${APP}" spctl -a -vvvv "${APP}" fi # Notarize the app NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" if ! test -z "$NOTARY" ; then - msg "Notarizing the application:" - ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" - uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` - echo "Result= $uuid" # Display identifier string - sleep 15 - while : - do - fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status - status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` - if [ "$status1" = "success" ]; then - xcrun stapler staple *app # staple the ticket - xcrun stapler validate -v *app - echo "Notarization success" - break - elif [ "$status1" = "in" ]; then - echo "Notarization still in progress, sleeping for 15 seconds and trying again" - sleep 15 - else - echo "Notarization failed fullstatus below" - echo "$fullstatus" - exit 1 - fi - done +msg "Notarizing the application:" +ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" +uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` +echo "Result= $uuid" # Display identifier string +sleep 15 +while : +do +fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status +status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` +if [ "$status1" = "success" ]; then +xcrun stapler staple *app # staple the ticket +xcrun stapler validate -v *app +echo "Notarization success" +break +elif [ "$status1" = "in" ]; then +echo "Notarization still in progress, sleeping for 15 seconds and trying again" +sleep 15 +else +echo "Notarization failed fullstatus below" +echo "$fullstatus" +exit 1 +fi +done fi function CreateDmg { - local srcDir="$(mktemp -dt $$)" +local srcDir="$(mktemp -dt $$)" - msg "Preparing disk image sources at ${srcDir}:" - cp -R "${APP}" "${srcDir}" - ditto Resources/AboutThisBuild.txt "${srcDir}" - ln -s /Applications "${srcDir}" +msg "Preparing disk image sources at ${srcDir}:" +cp -R "${APP}" "${srcDir}" +ditto "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt "${srcDir}" +ln -s /Applications "${srcDir}" - # Web bookmarks - function CreateWebloc { - defaults write "${srcDir}/$1" URL "$2" - mv "${srcDir}/$1".{plist,webloc} - } - CreateWebloc 'Website' 'http://www.rawtherapee.com/' - CreateWebloc 'Manual' 'http://rawpedia.rawtherapee.com/' +# Web bookmarks +function CreateWebloc { +defaults write "${srcDir}/$1" URL "$2" +mv "${srcDir}/$1".{plist,webloc} +} +CreateWebloc 'Website' 'http://www.rawtherapee.com/' +CreateWebloc 'Manual' 'http://rawpedia.rawtherapee.com/' - # Disk image name - dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" - lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" - if [[ ${lower_build_type} != release ]]; then - dmg_name="${dmg_name}_${lower_build_type}" - fi +# Disk image name +dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" +lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" +if [[ ${lower_build_type} != release ]]; then +dmg_name="${dmg_name}_${lower_build_type}" +fi - msg "Creating disk image:" - hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" +msg "Creating disk image:" +hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" - # Sign disk image - if ! test -z "$CODESIGNID" ; then - codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" - fi +# Sign disk image +if ! test -z "$CODESIGNID" ; then +codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" +fi + +# Notarize the dmg +if ! test -z "$NOTARY" ; then +msg "Notarizing the dmg:" +zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" +uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` +echo "dmg Result= $uuid" # Display identifier string +sleep 15 +while : +do +fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status +status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` +if [ "$status1" = "success" ]; then +xcrun stapler staple "${dmg_name}.dmg" # staple the ticket +xcrun stapler validate -v "${dmg_name}.dmg" +echo "dmg Notarization success" +break +elif [ "$status1" = "in" ]; then +echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again" +sleep 15 +else +echo "dmg Notarization failed fullstatus below" +echo "$fullstatus" +exit 1 +fi +done +fi - # Notarize the dmg - - if ! test -z "$NOTARY" ; then - msg "Notarizing the dmg:" - zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" - uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` - echo "dmg Result= $uuid" # Display identifier string - sleep 15 - while : - do - fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status - status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` - if [ "$status1" = "success" ]; then - xcrun stapler staple "${dmg_name}.dmg" # staple the ticket - xcrun stapler validate -v "${dmg_name}.dmg" - echo "dmg Notarization success" - break - elif [ "$status1" = "in" ]; then - echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again" - sleep 15 - else - echo "dmg Notarization failed fullstatus below" - echo "$fullstatus" - exit 1 - fi - done - fi - # Zip disk image for redistribution - msg "Zipping disk image for redistribution:" - - zip "${dmg_name}.zip" "${dmg_name}.dmg" Resources/AboutThisBuild.txt - rm "${dmg_name}.dmg" - - msg "Removing disk image caches:" - rm -rf "${srcDir}" +msg "Zipping disk image for redistribution:" +zip "${dmg_name}.zip" "${dmg_name}.dmg" "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" +rm "${dmg_name}.dmg" +msg "Removing disk image caches:" +rm -rf "${srcDir}" } CreateDmg msg "Finishing build:" From 209f8a5921de4ee46470321654bcbb0442599fda Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 16 Feb 2020 11:33:16 -0800 Subject: [PATCH 072/264] mac: sets the Resources font folder Sets a directory of fonts to use by the app @ Contents/Resources/etc/fonts (https://developer.apple.com/documentation/bundleresources/information_property_list/atsapplicationfontspath?language=objc) --- tools/osx/Info.plist.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index 7e4918cc0..4874567e7 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -31,6 +31,8 @@ GTK_OVERLAY_SCROLLING 0 + ATSApplicationFontsPath + etc/fonts CFBundleDevelopmentRegion English CFBundleDisplayName From 8b1438f23d6c8e172e35cb764172dfa1149440ff Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 14:53:36 -0800 Subject: [PATCH 073/264] mac: also set RT_SETTINGS and RT_CACHE --- tools/osx/Info.plist.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index 4874567e7..8e68a165f 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -30,6 +30,10 @@ similar GTK_OVERLAY_SCROLLING 0 + RT_SETTINGS + ~/Library/Application Support/RawTherapee/config + RT_CACHE + ~/Library/Application Support/RawTherapee/cache ATSApplicationFontsPath etc/fonts From d8d96784a492d446ff714d06c1049aea80361ab9 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 20:21:07 -0800 Subject: [PATCH 074/264] mac: set config path in options.cc --- rtgui/options.cc | 6 +++++- tools/osx/Info.plist.in | 8 ++++---- tools/osx/macosx_bundle.sh | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index dcb16e1ea..fe19bf42e 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2270,8 +2270,12 @@ void Options::load(bool lightweight) const gchar* path; Glib::ustring dPath; +#ifdef __APPLE__ + path = g_getenv("HOME") + "Library/Application Support/RawTherapee/config"; +#else path = g_getenv("RT_SETTINGS"); - +#endif + if (path != nullptr) { rtdir = Glib::ustring(path); diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index 8e68a165f..cc445c1b0 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -30,13 +30,13 @@ similar GTK_OVERLAY_SCROLLING 0 - RT_SETTINGS - ~/Library/Application Support/RawTherapee/config - RT_CACHE - ~/Library/Application Support/RawTherapee/cache ATSApplicationFontsPath etc/fonts + LSMultipleInstancesProhibited + + LSMinimumSystemVersion + @minimum_macos_version@ CFBundleDevelopmentRegion English CFBundleDisplayName diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 35b80a44c..81746ba4b 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -104,6 +104,7 @@ GTK_PREFIX: ${GTK_PREFIX} PWD: ${PWD} __EOS__ +minimum_macos_version=${MINIMUM_SYSTEM_VERSION} LOCAL_PREFIX="$(cmake .. -LA -N | grep "LOCAL_PREFIX" | cut -d "=" -f2)" EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" From 12ea3db9cb05ec27ad96fd57ec02f56c8c2e97d3 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 22:36:17 -0800 Subject: [PATCH 075/264] mac:build pathname in options.cc --- rtgui/options.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index fe19bf42e..7bcf0b466 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2271,7 +2271,16 @@ void Options::load(bool lightweight) Glib::ustring dPath; #ifdef __APPLE__ - path = g_getenv("HOME") + "Library/Application Support/RawTherapee/config"; + const gchar* homedir; + const gchar* configdir; + homedir = g_getenv("HOME"); + configdir = "Library/Application Support/RawTherapee/config"; + int bufferSize = strlen(homedir) + strlen(configdir) + 1; + gchar* concatString = new gchar[ bufferSize ]; + strcpy( concatString, homedir ); + strcat( concatString, configdir ); + path = concatString; + delete[] concatString; #else path = g_getenv("RT_SETTINGS"); #endif From 0770363c6fa1ef79364c33907f7687d4610cc78e Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 22:53:56 -0800 Subject: [PATCH 076/264] mac:also build cache dir in options.cc --- rtgui/options.cc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 7bcf0b466..6a2522de0 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2274,12 +2274,14 @@ void Options::load(bool lightweight) const gchar* homedir; const gchar* configdir; homedir = g_getenv("HOME"); - configdir = "Library/Application Support/RawTherapee/config"; + std::cout << "homedir=" << homedir << "\n"; + configdir = "/../../../Application Support/RawTherapee/config"; int bufferSize = strlen(homedir) + strlen(configdir) + 1; gchar* concatString = new gchar[ bufferSize ]; strcpy( concatString, homedir ); strcat( concatString, configdir ); path = concatString; + std::cout << concatString << "\n"; delete[] concatString; #else path = g_getenv("RT_SETTINGS"); @@ -2326,8 +2328,23 @@ void Options::load(bool lightweight) } // Modify the path of the cache folder to the one provided in RT_CACHE environment variable +#ifdef __APPLE__ + const gchar* homedir; + const gchar* cachedir; + homedir = g_getenv("HOME"); // This returns the current container + std::cout << "homedir=" << homedir << "\n"; + configdir = "/../../../Application Support/RawTherapee/cache"; + int bufferSize = strlen(homedir) + strlen(cachedir) + 1; + gchar* concatString = new gchar[ bufferSize ]; + strcpy( concatString, homedir ); + strcat( concatString, cachedir ); + std::cout << path << "\n"; + path = concatString; + delete[] concatString; +#else path = g_getenv("RT_CACHE"); - +#endif + if (path != nullptr) { cacheBaseDir = Glib::ustring(path); From af624df79883d3d06290a3c659038b04f0e9afdd Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 23:03:48 -0800 Subject: [PATCH 077/264] mac:use another variable name for cache folder --- rtgui/options.cc | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 6a2522de0..efc718c20 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2271,9 +2271,10 @@ void Options::load(bool lightweight) Glib::ustring dPath; #ifdef __APPLE__ + // Build Application Support directory path for macOS. const gchar* homedir; const gchar* configdir; - homedir = g_getenv("HOME"); + homedir = g_getenv("HOME"); // This returns the current container std::cout << "homedir=" << homedir << "\n"; configdir = "/../../../Application Support/RawTherapee/config"; int bufferSize = strlen(homedir) + strlen(configdir) + 1; @@ -2327,20 +2328,17 @@ void Options::load(bool lightweight) rtdir = Glib::build_filename(argv0, "mysettings"); } - // Modify the path of the cache folder to the one provided in RT_CACHE environment variable + // Modify the path of the cache folder to the one provided in RT_CACHE environment variable. Build the cache folder name in macOS. #ifdef __APPLE__ - const gchar* homedir; const gchar* cachedir; - homedir = g_getenv("HOME"); // This returns the current container - std::cout << "homedir=" << homedir << "\n"; - configdir = "/../../../Application Support/RawTherapee/cache"; - int bufferSize = strlen(homedir) + strlen(cachedir) + 1; - gchar* concatString = new gchar[ bufferSize ]; - strcpy( concatString, homedir ); - strcat( concatString, cachedir ); + cachedir = "/../../../Application Support/RawTherapee/cache"; + int bufferSize2 = strlen(homedir) + strlen(cachedir) + 1; //reuse homedir from above. + gchar* concatString2 = new gchar[ bufferSize2 ]; + strcpy( concatString2, homedir ); + strcat( concatString2, cachedir ); std::cout << path << "\n"; - path = concatString; - delete[] concatString; + path = concatString2; + delete[] concatString2; #else path = g_getenv("RT_CACHE"); #endif From 910ce572b08ecc0cbfd6853ee694db7978ccd080 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 23:13:46 -0800 Subject: [PATCH 078/264] mac:reorder a cout --- rtgui/options.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index efc718c20..9bf1302ed 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2282,7 +2282,7 @@ void Options::load(bool lightweight) strcpy( concatString, homedir ); strcat( concatString, configdir ); path = concatString; - std::cout << concatString << "\n"; + std::cout << "config=" << path << "\n"; delete[] concatString; #else path = g_getenv("RT_SETTINGS"); @@ -2336,8 +2336,8 @@ void Options::load(bool lightweight) gchar* concatString2 = new gchar[ bufferSize2 ]; strcpy( concatString2, homedir ); strcat( concatString2, cachedir ); - std::cout << path << "\n"; path = concatString2; + std::cout << "cache=" << path << "\n"; delete[] concatString2; #else path = g_getenv("RT_CACHE"); From 4905b03372306dd19d16cfa5f9d126f982823ea2 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 23:47:44 -0800 Subject: [PATCH 079/264] mac: add some comments --- rtdata/options/options.osx | 1 + rtgui/options.cc | 6 +++--- tools/osx/Info.plist.in | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/rtdata/options/options.osx b/rtdata/options/options.osx index bffd48495..9c1cb4c92 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -39,5 +39,6 @@ CustomProfileBuilder= #ImgDefault=Neutral [GUI] +# Set the included font as default FontFamily=DroidSansMonoSlashed Regular CPFontFamily=DroidSansMonoSlashed Regular diff --git a/rtgui/options.cc b/rtgui/options.cc index 9bf1302ed..7625e6620 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2274,9 +2274,9 @@ void Options::load(bool lightweight) // Build Application Support directory path for macOS. const gchar* homedir; const gchar* configdir; - homedir = g_getenv("HOME"); // This returns the current container + homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library std::cout << "homedir=" << homedir << "\n"; - configdir = "/../../../Application Support/RawTherapee/config"; + configdir = "/../../../Application Support/RawTherapee/config"; // Back out of containers and into App. Support int bufferSize = strlen(homedir) + strlen(configdir) + 1; gchar* concatString = new gchar[ bufferSize ]; strcpy( concatString, homedir ); @@ -2331,7 +2331,7 @@ void Options::load(bool lightweight) // Modify the path of the cache folder to the one provided in RT_CACHE environment variable. Build the cache folder name in macOS. #ifdef __APPLE__ const gchar* cachedir; - cachedir = "/../../../Application Support/RawTherapee/cache"; + cachedir = "/../../../Application Support/RawTherapee/cache"; // Back out of containers and into App. Support int bufferSize2 = strlen(homedir) + strlen(cachedir) + 1; //reuse homedir from above. gchar* concatString2 = new gchar[ bufferSize2 ]; strcpy( concatString2, homedir ); diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index cc445c1b0..ee11ba6d7 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -12,6 +12,8 @@ /Applications/RawTherapee.app/Contents/Frameworks GTK_IM_MODULE_FILE /Applications/RawTherapee.app/Contents/Resources/etc/gtk-3.0/gtk.immodules + GTK_MODULES + /Applications/RawTherapee.app/Contents/Frameworks/im-quartz.so XDG_DATA_HOME /Applications/RawTherapee.app/Contents/Resources/share GSETTINGS_SCHEMA_DIR @@ -30,6 +32,8 @@ similar GTK_OVERLAY_SCROLLING 0 + GDK_NATIVE_WINDOWS + 1 ATSApplicationFontsPath etc/fonts From 7a258d1a25a1af37637a63fbc67d06a221001ce7 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 16 Feb 2020 23:56:24 -0800 Subject: [PATCH 080/264] mac: remove cout outputs --- rtgui/options.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 7625e6620..d447bc980 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2275,14 +2275,12 @@ void Options::load(bool lightweight) const gchar* homedir; const gchar* configdir; homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library - std::cout << "homedir=" << homedir << "\n"; configdir = "/../../../Application Support/RawTherapee/config"; // Back out of containers and into App. Support int bufferSize = strlen(homedir) + strlen(configdir) + 1; gchar* concatString = new gchar[ bufferSize ]; strcpy( concatString, homedir ); strcat( concatString, configdir ); path = concatString; - std::cout << "config=" << path << "\n"; delete[] concatString; #else path = g_getenv("RT_SETTINGS"); @@ -2337,7 +2335,6 @@ void Options::load(bool lightweight) strcpy( concatString2, homedir ); strcat( concatString2, cachedir ); path = concatString2; - std::cout << "cache=" << path << "\n"; delete[] concatString2; #else path = g_getenv("RT_CACHE"); From c9f887281e952e9b4eae964f62ef42e2e72abc80 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 17 Feb 2020 06:55:18 -0800 Subject: [PATCH 081/264] mac: truncate homedir --- rtgui/options.cc | 37 +++++++++++++++++-------------------- tools/osx/macosx_bundle.sh | 26 +++++++++++++------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index d447bc980..31b816a19 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2272,20 +2272,18 @@ void Options::load(bool lightweight) #ifdef __APPLE__ // Build Application Support directory path for macOS. - const gchar* homedir; - const gchar* configdir; - homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library - configdir = "/../../../Application Support/RawTherapee/config"; // Back out of containers and into App. Support - int bufferSize = strlen(homedir) + strlen(configdir) + 1; - gchar* concatString = new gchar[ bufferSize ]; - strcpy( concatString, homedir ); - strcat( concatString, configdir ); - path = concatString; - delete[] concatString; + const gchar* homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library + const gchar* configdir = "/Application Support/RawTherapee/config"; + gchar* homebuf = g_strnfill(789, 'a'); + gsize homelength = strlen(homedir); + g_stpcpy(homebuf, homedir); + homebuf[homelength-45] = '\0'; + configdir = "/Application Support/RawTherapee/config"; // Back out of containers and into App. Support + const gchar* pathconcat = g_strconcat(homebuf, configdir); + path = pathconcat; #else path = g_getenv("RT_SETTINGS"); #endif - if (path != nullptr) { rtdir = Glib::ustring(path); @@ -2294,6 +2292,8 @@ void Options::load(bool lightweight) throw Error(msg); } } else { + + #ifdef WIN32 WCHAR pathW[MAX_PATH] = {0}; @@ -2329,25 +2329,22 @@ void Options::load(bool lightweight) // Modify the path of the cache folder to the one provided in RT_CACHE environment variable. Build the cache folder name in macOS. #ifdef __APPLE__ const gchar* cachedir; - cachedir = "/../../../Application Support/RawTherapee/cache"; // Back out of containers and into App. Support - int bufferSize2 = strlen(homedir) + strlen(cachedir) + 1; //reuse homedir from above. - gchar* concatString2 = new gchar[ bufferSize2 ]; - strcpy( concatString2, homedir ); - strcat( concatString2, cachedir ); - path = concatString2; - delete[] concatString2; + cachedir = "/Application Support/RawTherapee/cache"; // Back out of containers and into App. Support + const gchar* pathconcat2 = g_strconcat(homebuf, cachedir); + path = pathconcat2; #else path = g_getenv("RT_CACHE"); #endif - if (path != nullptr) { cacheBaseDir = Glib::ustring(path); - + if (!Glib::path_is_absolute(cacheBaseDir)) { Glib::ustring msg = Glib::ustring::compose("Cache base dir %1 is not absolute", cacheBaseDir); throw Error(msg); } } + + // No environment variable provided, so falling back to the multi user mode, if enabled else if (options.multiUser) { #ifdef WIN32 diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 81746ba4b..4a9d8d41c 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -217,16 +217,16 @@ msg "Build GTK3 databases:" sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules" sed -i "" -e "s|/opt/local/|/Applications/RawTherapee.app/Contents/Frameworks/|" "${ETC}/gtk-3.0/gtk.immodules" +# Install names +ModifyInstallNames + # Mime directory msg "Copying shared files from ${GTK_PREFIX}:" ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/mime -# Install names -ModifyInstallNames - msg "Installing required application bundle files:" PROJECT_SOURCE_DATA_DIR="${PROJECT_SOURCE_DIR}/tools/osx" -ditto "${PROJECT_SOURCE_DIR}/build/Resources" "${RESOURCES}" +ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" ditto "${PROJECT_SOURCE_DIR}/rtdata/fonts" "${ETC}/fonts" # App bundle resources @@ -260,19 +260,19 @@ echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Fra done # Sign the app -msg "Codesigning:" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" -if ! test -z "$CODESIGNID" ; then +if ! test -z "${CODESIGNID}" ; then +msg "Codesigning:" install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt.entitlements" "${CONTENTS}/rt.entitlements" plutil -convert binary1 "${CONTENTS}/rt.entitlements" -codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp --entitlements "${CONTENTS}/rt.entitlements" "${CONTENTS}/rt.entitlements" -codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp --entitlements "${CONTENTS}/rt.entitlements" "${EXECUTABLE}" -codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp --entitlements "${CONTENTS}/rt.entitlements" "${EXECUTABLE}-cli" +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements '${CONTENTS}/rt.entitlements' '${CONTENTS}/rt.entitlements' +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements '${CONTENTS}/rt.entitlements' '${EXECUTABLE}' +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements '${CONTENTS}/rt.entitlements' '${EXECUTABLE}-cli' for frameworklibs in ${CONTENTS}/Frameworks/* ; do -codesign -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --timestamp "${frameworklibs}" +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp '${frameworklibs}' done -codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i "com.rawtherapee.RawTherapee" -o runtime --entitlements "${CONTENTS}/rt.entitlements" "${APP}" -spctl -a -vvvv "${APP}" +codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements '${CONTENTS}/rt.entitlements' '${APP}' +spctl -a -vvvv ${APP} fi # Notarize the app @@ -331,7 +331,7 @@ hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAM # Sign disk image if ! test -z "$CODESIGNID" ; then -codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" +codesign --deep --force -v -s ""${CODESIGNID}"" --timestamp "${dmg_name}.dmg" fi # Notarize the dmg From c6579a4efc285818db69fe053c0525f0a757d64a Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 17 Feb 2020 07:32:19 -0800 Subject: [PATCH 082/264] mac:fix a codesign stmnt --- tools/osx/macosx_bundle.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 4a9d8d41c..bdfbf2aee 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -254,7 +254,7 @@ ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder:" -for frameworklibs in ${CONTENTS}/Frameworks/* ; do +for frameworklibs in "${CONTENTS}"/Frameworks/* ; do echo " install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib '${frameworklibs}'" | bash -v echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v done @@ -263,15 +263,15 @@ done CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" if ! test -z "${CODESIGNID}" ; then msg "Codesigning:" -install -m 0644 "${PROJECT_SOURCE_DATA_DIR}/rt.entitlements" "${CONTENTS}/rt.entitlements" -plutil -convert binary1 "${CONTENTS}/rt.entitlements" -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements '${CONTENTS}/rt.entitlements' '${CONTENTS}/rt.entitlements' -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements '${CONTENTS}/rt.entitlements' '${EXECUTABLE}' -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements '${CONTENTS}/rt.entitlements' '${EXECUTABLE}-cli' -for frameworklibs in ${CONTENTS}/Frameworks/* ; do -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp '${frameworklibs}' +install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CONTENTS}"/rt.entitlements +plutil -convert binary1 "${CONTENTS}"/rt.entitlements +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${CONTENTS}"/rt.entitlements +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${EXECUTABLE}" +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${EXECUTABLE}"-cli +for frameworklibs in "${LIB}" ; do +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp "${frameworklibs}" done -codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements '${CONTENTS}/rt.entitlements' '${APP}' +codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CONTENTS}/rt.entitlements" "${APP}" spctl -a -vvvv ${APP} fi From 18c360ed4d7ffec28ce342fc719c55eed4169fbe Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 17 Feb 2020 07:34:07 -0800 Subject: [PATCH 083/264] mac:fix a glob for frameworks codesign --- tools/osx/macosx_bundle.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index bdfbf2aee..f08e45c48 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -268,7 +268,7 @@ plutil -convert binary1 "${CONTENTS}"/rt.entitlements codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${CONTENTS}"/rt.entitlements codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${EXECUTABLE}" codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${EXECUTABLE}"-cli -for frameworklibs in "${LIB}" ; do +for frameworklibs in "${LIB}"/* ; do codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp "${frameworklibs}" done codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CONTENTS}/rt.entitlements" "${APP}" From 38037aee8c2658f928daefb566c55184a4506e0f Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 17 Feb 2020 11:24:05 -0800 Subject: [PATCH 084/264] mac:use a std::string --- rtgui/options.cc | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 31b816a19..5b908d499 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2272,15 +2272,15 @@ void Options::load(bool lightweight) #ifdef __APPLE__ // Build Application Support directory path for macOS. - const gchar* homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library - const gchar* configdir = "/Application Support/RawTherapee/config"; - gchar* homebuf = g_strnfill(789, 'a'); - gsize homelength = strlen(homedir); - g_stpcpy(homebuf, homedir); + const char* homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library + std::string configdir = "/Application Support/RawTherapee/config"; + std::string homebuf{homedir}; + int homelength = strlen(homebuf.c_str()); homebuf[homelength-45] = '\0'; - configdir = "/Application Support/RawTherapee/config"; // Back out of containers and into App. Support - const gchar* pathconcat = g_strconcat(homebuf, configdir); - path = pathconcat; + configdir = "/Application Support/RawTherapee/config"; + std::string configpath = homebuf + configdir; + path = configpath.c_str(); + std::cout< Date: Mon, 17 Feb 2020 11:31:39 -0800 Subject: [PATCH 085/264] mac: use fewer variables --- rtgui/options.cc | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 5b908d499..3cd3adb8a 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2273,12 +2273,10 @@ void Options::load(bool lightweight) #ifdef __APPLE__ // Build Application Support directory path for macOS. const char* homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library - std::string configdir = "/Application Support/RawTherapee/config"; std::string homebuf{homedir}; int homelength = strlen(homebuf.c_str()); - homebuf[homelength-45] = '\0'; - configdir = "/Application Support/RawTherapee/config"; - std::string configpath = homebuf + configdir; + homebuf[homelength-44] = '\0'; + std::string configpath = homebuf + "/Application Support/RawTherapee/config"; path = configpath.c_str(); std::cout< Date: Mon, 17 Feb 2020 11:44:01 -0800 Subject: [PATCH 086/264] mac:use strcat() --- rtgui/options.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 3cd3adb8a..84cd4d857 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2276,8 +2276,9 @@ void Options::load(bool lightweight) std::string homebuf{homedir}; int homelength = strlen(homebuf.c_str()); homebuf[homelength-44] = '\0'; - std::string configpath = homebuf + "/Application Support/RawTherapee/config"; - path = configpath.c_str(); + std::string homeconfig{homebuf}; + std::strcat(homeconfig, "/Application Support/RawTherapee/config"); + path = homebuf.c_str(); std::cout< Date: Mon, 17 Feb 2020 11:47:09 -0800 Subject: [PATCH 087/264] mac:change a variable name --- rtgui/options.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 84cd4d857..93a898987 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2275,7 +2275,7 @@ void Options::load(bool lightweight) const char* homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library std::string homebuf{homedir}; int homelength = strlen(homebuf.c_str()); - homebuf[homelength-44] = '\0'; + homebuf[homelength-44] = '\0'; // Truncate path to just ${HOME}/Library std::string homeconfig{homebuf}; std::strcat(homeconfig, "/Application Support/RawTherapee/config"); path = homebuf.c_str(); @@ -2328,8 +2328,8 @@ void Options::load(bool lightweight) // Modify the path of the cache folder to the one provided in RT_CACHE environment variable. Build the cache folder name in macOS. #ifdef __APPLE__ std::string homecache{homebuf}; - std::strcat(homecache + "/Application Support/RawTherapee/cache"); - path = cachepath.c_str(); + std::strcat(homecache, "/Application Support/RawTherapee/cache"); + path = homecache.c_str(); std::cout< Date: Mon, 17 Feb 2020 11:55:56 -0800 Subject: [PATCH 088/264] mac:try a string pointer --- rtgui/options.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 93a898987..b09a16ae8 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2277,9 +2277,9 @@ void Options::load(bool lightweight) int homelength = strlen(homebuf.c_str()); homebuf[homelength-44] = '\0'; // Truncate path to just ${HOME}/Library std::string homeconfig{homebuf}; - std::strcat(homeconfig, "/Application Support/RawTherapee/config"); + std::strcat(&homeconfig[0], "/Application Support/RawTherapee/config"); path = homebuf.c_str(); - std::cout< Date: Mon, 17 Feb 2020 12:21:45 -0800 Subject: [PATCH 089/264] mac: spell font name correctly --- rtdata/options/options.osx | 4 ++-- rtgui/options.cc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rtdata/options/options.osx b/rtdata/options/options.osx index 9c1cb4c92..f5477d11d 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -40,5 +40,5 @@ CustomProfileBuilder= [GUI] # Set the included font as default -FontFamily=DroidSansMonoSlashed Regular -CPFontFamily=DroidSansMonoSlashed Regular +FontFamily=Droid Sans Mono Slashed Regular +CPFontFamily=Droid Sans Mono Slashed Regular diff --git a/rtgui/options.cc b/rtgui/options.cc index b09a16ae8..615485c42 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2278,7 +2278,7 @@ void Options::load(bool lightweight) homebuf[homelength-44] = '\0'; // Truncate path to just ${HOME}/Library std::string homeconfig{homebuf}; std::strcat(&homeconfig[0], "/Application Support/RawTherapee/config"); - path = homebuf.c_str(); + path = homeconfig.c_str(); std::cout<<"config="< Date: Mon, 17 Feb 2020 13:18:40 -0800 Subject: [PATCH 090/264] mac:options font name adjust. --- rtdata/options/options.osx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtdata/options/options.osx b/rtdata/options/options.osx index f5477d11d..c83aea179 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -40,5 +40,5 @@ CustomProfileBuilder= [GUI] # Set the included font as default -FontFamily=Droid Sans Mono Slashed Regular -CPFontFamily=Droid Sans Mono Slashed Regular +FontFamily=Droid Sans Mono Slashed +CPFontFamily=Droid Sans Mono Slashed From b8fce85a2d8c4afce9e8b8ecafdf80a696f09a69 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 17 Feb 2020 13:40:39 -0800 Subject: [PATCH 091/264] mac:remove debug outputs --- rtgui/options.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 615485c42..414eec521 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2275,11 +2275,11 @@ void Options::load(bool lightweight) const char* homedir = g_getenv("HOME"); // This returns the current container data dir in ~/Library std::string homebuf{homedir}; int homelength = strlen(homebuf.c_str()); - homebuf[homelength-44] = '\0'; // Truncate path to just ${HOME}/Library + homebuf[homelength-44] = '\0'; // Terminate string after ${HOME}/Library std::string homeconfig{homebuf}; std::strcat(&homeconfig[0], "/Application Support/RawTherapee/config"); path = homeconfig.c_str(); - std::cout<<"config="< Date: Mon, 17 Feb 2020 14:14:57 -0800 Subject: [PATCH 092/264] mac:lowercase bundle UUID --- rtgui/options.cc | 1 - tools/osx/macosx_bundle.sh | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 414eec521..d85317c9d 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2279,7 +2279,6 @@ void Options::load(bool lightweight) std::string homeconfig{homebuf}; std::strcat(&homeconfig[0], "/Application Support/RawTherapee/config"); path = homeconfig.c_str(); - delete(homedir); #else path = g_getenv("RT_SETTINGS"); #endif diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index f08e45c48..be76face3 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -131,7 +131,7 @@ echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TY echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -echo "Bundle UUID: $(uuidgen)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt msg "Copying release files:" ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" From b27c78916e5a432b7485537bf300cbce1d9849fb Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 14:30:46 -0800 Subject: [PATCH 093/264] mac:travis adjustment --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bab7397a6..45c877559 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: CMAKE_CXX_STANDARD: 11 PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig RAW_THERAPEE_MAJOR: '5' - RAW_THERAPEE_MINOR: '7' + RAW_THERAPEE_MINOR: '8' C_FLAGS: -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include -I/usr/local/opt/expat/include -I/usr/local/opt/llvm/include run: | # GITHUB_REF is the ref that triggered the build, like refs/heads/new-feature - the next line parses that to REF: the branch name only (new-feature) @@ -54,6 +54,7 @@ jobs: -DOpenMP_CXX_FLAGS="${C_FLAGS}" \ -DCMAKE_AR="/usr/local/opt/llvm/bin/llvm-ar" \ -DCMAKE_RANLIB="/usr/local/opt/llvm/bin/llvm-ranlib" \ + -DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" .. make --jobs make install From 3041169499dc293e39dff4a5015d698640f7cc2c Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 14:49:17 -0800 Subject: [PATCH 094/264] UpdateInfo.cmake: remove an errant whitespace --- UpdateInfo.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 1c31cf44f..a4de8fe1a 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -63,7 +63,7 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() - + execute_process(COMMAND uname -mrs OUTPUT_VARIABLE BUILDINFO_OS OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND date -Ru OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND date +%s OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) From 2029bfdf14b0e25e4c202cba5e7f8b52e4cb9de5 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 14:50:24 -0800 Subject: [PATCH 095/264] mac: revert the travis yml for this PR --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d1f1578f8..bab7397a6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: CMAKE_CXX_STANDARD: 11 PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig RAW_THERAPEE_MAJOR: '5' - RAW_THERAPEE_MINOR: '8' + RAW_THERAPEE_MINOR: '7' C_FLAGS: -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include -I/usr/local/opt/expat/include -I/usr/local/opt/llvm/include run: | # GITHUB_REF is the ref that triggered the build, like refs/heads/new-feature - the next line parses that to REF: the branch name only (new-feature) From 9047e89bd3b461d4c4f3593dbba382ed7523ce2d Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 14:55:01 -0800 Subject: [PATCH 096/264] options.cc: remove a whitespace --- rtgui/options.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index d85317c9d..71e77fa70 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2334,7 +2334,7 @@ void Options::load(bool lightweight) #endif if (path != nullptr) { cacheBaseDir = Glib::ustring(path); - + if (!Glib::path_is_absolute(cacheBaseDir)) { Glib::ustring msg = Glib::ustring::compose("Cache base dir %1 is not absolute", cacheBaseDir); throw Error(msg); From 6bc7e16d9b473302ba6236d1149f0072a52f1496 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 15:26:41 -0800 Subject: [PATCH 097/264] remove another whitespace --- rtgui/options.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 71e77fa70..b0f8d714e 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2291,7 +2291,6 @@ void Options::load(bool lightweight) } } else { - #ifdef WIN32 WCHAR pathW[MAX_PATH] = {0}; From 007fe17e48d2dab6849968e012b04c8f20ef408c Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 15:27:59 -0800 Subject: [PATCH 098/264] another whitespace removed --- rtgui/options.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index b0f8d714e..5e9d48cc5 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2340,7 +2340,6 @@ void Options::load(bool lightweight) } } - // No environment variable provided, so falling back to the multi user mode, if enabled else if (options.multiUser) { #ifdef WIN32 From 85bffa10381450bee541283616e3572665f12314 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 17 Feb 2020 15:35:31 -0800 Subject: [PATCH 099/264] mac: use the LIB var to refer to frameworks dir. --- tools/osx/macosx_bundle.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index be76face3..aa6228500 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -254,7 +254,7 @@ ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder:" -for frameworklibs in "${CONTENTS}"/Frameworks/* ; do +for frameworklibs in "${LIB}"/* ; do echo " install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib '${frameworklibs}'" | bash -v echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v done From 6e7943752f7983a29e83e8ef2aa99aac4f90684b Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 18 Feb 2020 13:29:42 +0100 Subject: [PATCH 100/264] Added Canon PowerShot S120 dual-illuminant DCP Closes #5637 --- rtdata/dcpprofiles/Canon PowerShot S120.dcp | Bin 0 -> 1102974 bytes rtengine/camconst.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 rtdata/dcpprofiles/Canon PowerShot S120.dcp diff --git a/rtdata/dcpprofiles/Canon PowerShot S120.dcp b/rtdata/dcpprofiles/Canon PowerShot S120.dcp new file mode 100644 index 0000000000000000000000000000000000000000..8bb089c293d86c32b47fdbec2edccbc0522cc371 GIT binary patch literal 1102974 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 z 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

1iPn_JsTAnkz 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

_9brUvm0+A>nv`cEvLa;=tI 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∓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�uX}Y9U>$ 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

?{Zp9iitv(C&6f<$`+9^k!W6( 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%0Dt&Y_k>@tp4y#U1cn>9FF&D% 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Ð*&$J!j> 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

uI*#WiOm=`rmVS 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 Date: Tue, 18 Feb 2020 16:20:16 +0100 Subject: [PATCH 101/264] Polish translation updated by bwisn, closes #5655 --- rtdata/languages/Polish | 207 ++++++++++++++++++++-------------------- 1 file changed, 104 insertions(+), 103 deletions(-) diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 1bcc98456..06a5136d6 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -10,13 +10,19 @@ #10 2020-02-02 Bartłomiej Wiśniowski #11 2020-02-02 Bartłomiej Wiśniowski #12 2020-02-15 Bartłomiej Wiśniowski +#13 2020-02-17 Bartłomiej Wiśniowski ABOUT_TAB_BUILD;Wersja ABOUT_TAB_CREDITS;Zasługi ABOUT_TAB_LICENSE;Licencja ABOUT_TAB_RELEASENOTES;Notatki eksploatacyjne ABOUT_TAB_SPLASH;Ekran powitalny +ADJUSTER_RESET_TO_DEFAULT;Klik - przywróć wartość domyślną.\nCtrl+klik - przywróć wartość początkową. BATCH_PROCESSING;Przetwarzanie wsadowe +CURVEEDITOR_AXIS_IN;We: +CURVEEDITOR_AXIS_LEFT_TAN;Lw: +CURVEEDITOR_AXIS_OUT;Wy: +CURVEEDITOR_AXIS_RIGHT_TAN;Pw: CURVEEDITOR_CATMULLROM;Elastyczny CURVEEDITOR_CURVE;Krzywa CURVEEDITOR_CURVES;Krzywe @@ -38,6 +44,7 @@ CURVEEDITOR_TOOLTIPPASTE;Wstaw krzywą ze schowka CURVEEDITOR_TOOLTIPSAVE;Zapisz krzywą CURVEEDITOR_TYPE;Typ: DIRBROWSER_FOLDERS;Katalogi +DONT_SHOW_AGAIN;Nie pokazuj tej wiadomości ponownie. DYNPROFILEEDITOR_DELETE;Usuń DYNPROFILEEDITOR_EDIT;Edytuj DYNPROFILEEDITOR_IMGTYPE_ANY;Każdy @@ -175,6 +182,7 @@ FILEBROWSER_SHOWDIRHINT;Wyłącza wyszstkie filtry.\nSkrót: d FILEBROWSER_SHOWEDITEDHINT;Pokazuje edytowane zdjęcia.\nSkrót: 7 FILEBROWSER_SHOWEDITEDNOTHINT;Pokazuje nieedytowane zdjęcia.\nSkrót: 6 FILEBROWSER_SHOWEXIFINFO;Pokaż dane Exif.\n\nSkróty:\ni - Tryb wielu zakładek,\nAlt-i - Tryb jednej zakładki. +FILEBROWSER_SHOWNOTTRASHHINT;Pokazuj tylko obrazy które nie znajdują się w koszu. FILEBROWSER_SHOWRANK1HINT;Pokazuje zdjęcia ocenione na 1 gwiazdkę.\nSkrót: 1 FILEBROWSER_SHOWRANK2HINT;Pokazuje zdjęcia ocenione na 2 gwiazdki.\nSkrót: 2 FILEBROWSER_SHOWRANK3HINT;Pokazuje zdjęcia ocenione na 3 gwiazdki.\nSkrót: 3 @@ -608,7 +616,11 @@ HISTORY_MSG_440;CbDL - Metoda HISTORY_MSG_442;Retinex - Skala HISTORY_MSG_449;PS - Adaptacja ISO HISTORY_MSG_452;PS - Pokaż ruch +HISTORY_MSG_453;PS - Pokaż tylko maskę +HISTORY_MSG_465;PS - Promień rozmycia +HISTORY_MSG_468;PS - Wypełnij dziury HISTORY_MSG_471;PS - Korekcja ruchu +HISTORY_MSG_472;PS - Miękkie przejścia HISTORY_MSG_474;PS - Wyrównaj HISTORY_MSG_475;PS - Wyrównaj kanał HISTORY_MSG_485;Korekcja obiektywu @@ -619,6 +631,10 @@ HISTORY_MSG_490;DRC - Ilość HISTORY_MSG_491;Balans bieli HISTORY_MSG_492;Krzywe RGB HISTORY_MSG_CLAMPOOG;Ucinaj kolory spoza zakresu +HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Korekcja koloru +HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Korekcja koloru +HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Kanał +HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - Saturacja HISTORY_MSG_DEHAZE_DEPTH;Usuwanie mgły - Głębia HISTORY_MSG_DEHAZE_ENABLED;Usuwanie mgły HISTORY_MSG_DEHAZE_LUMINANCE;Usuwanie mgły - Tylko luminancja @@ -637,6 +653,14 @@ HISTORY_MSG_PDSHARPEN_CONTRAST;CS - Próg kontrastu HISTORY_MSG_PDSHARPEN_ITERATIONS;CS - Iteracje HISTORY_MSG_PDSHARPEN_RADIUS;CS - Promień HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Próg kontrastu +HISTORY_MSG_RAWCACORR_AUTOIT;Korekcja aberracji chromatycznej - Iteracje +HISTORY_MSG_RAWCACORR_COLORSHIFT;Korekcja aberracji chromatycznej - Unikaj przesunięcia kolorów +HISTORY_MSG_SHARPENING_BLUR;Wyostrzanie - Promień rozmycia +HISTORY_MSG_SHARPENING_CONTRAST;Wyostrzanie - Próg kontrastu +HISTORY_MSG_SH_COLORSPACE;S/H - Przestrzeń kolorów +HISTORY_MSG_SOFTLIGHT_ENABLED;Miękkie światło +HISTORY_MSG_SOFTLIGHT_STRENGTH;Miękkie światło - Siła +HISTORY_MSG_TRANS_Method;Geometria - Metoda HISTORY_NEWSNAPSHOT;Nowa migawka HISTORY_NEWSNAPSHOT_TOOLTIP;Skrót: Alt-s HISTORY_SNAPSHOT;Migawka @@ -655,6 +679,8 @@ ICCPROFCREATOR_ILL_65;D65 ICCPROFCREATOR_ILL_80;D80 ICCPROFCREATOR_ILL_DEF;Domyślne ICCPROFCREATOR_ILL_INC;StdA 2856K +ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 +ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 ICCPROFCREATOR_PRIM_ADOBE;Adobe RGB (1998) ICCPROFCREATOR_PRIM_BEST;BestRGB ICCPROFCREATOR_PRIM_BETA;BetaRGB @@ -668,21 +694,28 @@ ICCPROFCREATOR_PRIM_REC2020;Rec2020 ICCPROFCREATOR_PRIM_REDX;Czerwony X ICCPROFCREATOR_PRIM_REDY;Czerwony Y ICCPROFCREATOR_PRIM_SRGB;sRGB +ICCPROFCREATOR_PRIM_WIDEG;Szeroka gama ICCPROFCREATOR_PROF_V2;ICC v2 ICCPROFCREATOR_PROF_V4;ICC v4 ICCPROFCREATOR_SAVEDIALOG_TITLE;Zapisz profil ICC jako... ICCPROFCREATOR_SLOPE;Nachylenie +ICCPROFCREATOR_TRC_PRESET;Krzywa odpowiedzi tonalnej: IPTCPANEL_CATEGORY;Kategoria IPTCPANEL_CITY;Miasto IPTCPANEL_CITYHINT;Wprowadź nazwę miasta uwiecznionego na zdjęciu. IPTCPANEL_COPYHINT;Kopiuje ustawienia IPTC do schowka +IPTCPANEL_COPYRIGHT;Informacja o prawach autorskich +IPTCPANEL_COPYRIGHTHINT;Wprowadź informację o aktualnym posiadaczu praw autorskich np. ©2008 Jane Doe. IPTCPANEL_COUNTRY;Kraj +IPTCPANEL_COUNTRYHINT;Wprowadź nazwę kraju uwiecznionego na tym obrazie. IPTCPANEL_CREATOR;Twórca +IPTCPANEL_CREATORHINT;Wprowadź nazwę twórcy obrazu. IPTCPANEL_CREDIT;Zasługa IPTCPANEL_CREDITHINT;Identyfikuje dostawcę zdjęcia, niekoniecznie właściciela lub autora (Credit). IPTCPANEL_DATECREATED;Data utworzenia IPTCPANEL_DATECREATEDHINT;Wprowadź datę zrobienia zdjęcia. IPTCPANEL_DESCRIPTION;Opis +IPTCPANEL_DESCRIPTIONWRITER;Twórca opisu IPTCPANEL_EMBEDDED;Osadzony IPTCPANEL_EMBEDDEDHINT;Resetuje dane IPTC do domyślnych ustawień osadzonych w orginalnym zdjęciu IPTCPANEL_HEADLINE;Nagłówek @@ -695,6 +728,8 @@ IPTCPANEL_RESETHINT;Resetuje do domyślnych ustawień profilu IPTCPANEL_SOURCE;Źródło IPTCPANEL_SUPPCATEGORIES;Dodatkowe kategorie IPTCPANEL_TITLE;Tytuł +IPTCPANEL_TRANSREFERENCE;Numer pracy +IPTCPANEL_TRANSREFERENCEHINT;!IPTCPANEL_TRANSREFERENCEHINT;Wprowadź numer pracy, który umożliwi śledzenie obrazu. MAIN_BUTTON_FULLSCREEN;Pełen ekran MAIN_BUTTON_ICCPROFCREATOR;Kreator profili ICC MAIN_BUTTON_NAVNEXT_TOOLTIP;Przejdź do następnego zdjęcia względem zdjęcia otwartego w Edytorze.\nSkrót: Shift-F4\n\nAby przejść do następnego zdjęcia względem miniaturki wybranej w Nawigatorze Zdjęć:\nSkrót: F4 @@ -729,6 +764,7 @@ MAIN_MSG_OPERATIONCANCELLED;Operację anulowano MAIN_MSG_PATHDOESNTEXIST;Ścieżka\n\n%1\n\nnie istnieje. Wybierz przawidłową ścieżkę w Ustawieniach. MAIN_MSG_QOVERWRITE;Zastąpić? MAIN_MSG_SETPATHFIRST;Aby użyć tej funkcji należy wpierw wybrać odpowiednią ścieżkę docelową w Ustawieniach! +MAIN_MSG_TOOMANYOPENEDITORS;Za duża liczba otwartych edytorów.\nZamknij edytor aby kontynuować. MAIN_MSG_WRITEFAILED;Zapis nie powiódł się:\n\n"%1"\n\nUpewnij się, że folder istnieje oraz że można do niego zapisywać. MAIN_TAB_ADVANCED;Zaawansowane MAIN_TAB_ADVANCED_TOOLTIP;Skrót: Alt-a @@ -847,12 +883,15 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;Cienie/Podświetlenia PARTIALPASTE_SHARPENEDGE;Krawędzie PARTIALPASTE_SHARPENING;Wyostrzanie PARTIALPASTE_SHARPENMICRO;Mikrokontrast +PARTIALPASTE_SOFTLIGHT;Miękkie światło PARTIALPASTE_TM_FATTAL;Kompresja zakresu dynamiki PARTIALPASTE_VIBRANCE;Jaskrawość PARTIALPASTE_VIGNETTING;Korekcja winietowania PARTIALPASTE_WHITEBALANCE;Balans bieli PREFERENCES_ADD;Dodaj PREFERENCES_APPEARANCE;Wygląd +PREFERENCES_APPEARANCE_COLORPICKERFONT;Czcionka narzędzia do wybierania kolorów +PREFERENCES_APPEARANCE_CROPMASKCOLOR;Kolor maski kadrowania PREFERENCES_APPEARANCE_MAINFONT;Główny font PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Kolor ramki Nawigatora PREFERENCES_APPEARANCE_PSEUDOHIDPI; Tryb pseudo-HiDPI @@ -871,7 +910,9 @@ PREFERENCES_CACHECLEAR_ONLYPROFILES;Usuń wszystkie profile przetwarzania z pami PREFERENCES_CACHEMAXENTRIES;Maksymalna liczba wpisów w pamięci podręcznej PREFERENCES_CACHEOPTS;Opcje pamięci podręcznej PREFERENCES_CACHETHUMBHEIGHT;Maksymalna wysokość miniatury +PREFERENCES_CHUNKSIZES;Liczba kafelków na wątek PREFERENCES_CHUNKSIZE_RAW_AMAZE;Demozaikowanie AMaZE +PREFERENCES_CHUNKSIZE_RAW_CA;Korekcja aberracji chromatycznej PREFERENCES_CHUNKSIZE_RAW_RCD;Demozaikowanie RCD PREFERENCES_CHUNKSIZE_RAW_XT;Demozaikowanie Xtrans PREFERENCES_CHUNKSIZE_RGB;Przetwarzanie RGB @@ -879,9 +920,13 @@ PREFERENCES_CLIPPINGIND;Pokazywanie obciętych prześwietleń/cieni PREFERENCES_CLUTSCACHE;Cache HaldCLUT PREFERENCES_CLUTSDIR;Folder obrazów HaldCLUT PREFERENCES_CMMBPC;Kompensacja punktu czerni +PREFERENCES_CROP;Kadrowanie +PREFERENCES_CROP_AUTO_FIT;Automatycznie przybliż aby dopasować do skadrowanego obrazu +PREFERENCES_CROP_GUIDES;Zawsze pokazuj ramkę kadrowania PREFERENCES_CROP_GUIDES_FRAME;Ramka PREFERENCES_CROP_GUIDES_FULL;Oryginał PREFERENCES_CROP_GUIDES_NONE;Brak +PREFERENCES_CURVEBBOXPOS;Położenie przycisków kopiuj oraz wklej krzywą PREFERENCES_CURVEBBOXPOS_ABOVE;Powyżej PREFERENCES_CURVEBBOXPOS_BELOW;Poniżej PREFERENCES_CURVEBBOXPOS_LEFT;Z lewej @@ -904,9 +949,11 @@ PREFERENCES_DIRLAST;Ostatnio odwiedzony katalog PREFERENCES_DIROTHER;Inny PREFERENCES_DIRSELECTDLG;Wybierz katalog z obrazami po uruchomieniu... PREFERENCES_DIRSOFTWARE;Katalog instalacyjny +PREFERENCES_EDITORCMDLINE;Własny wiersz poleceń PREFERENCES_EDITORLAYOUT;Układ edytora PREFERENCES_EXTERNALEDITOR;Zewnętrzny edytor PREFERENCES_FBROWSEROPTS;Opcje przeglądarki plików +PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Zwiń paski w przeglądarce plików PREFERENCES_FLATFIELDFOUND;Znaleziono PREFERENCES_FLATFIELDSDIR;Katalog z pustymi polami PREFERENCES_FLATFIELDSHOTS;kadry @@ -928,6 +975,7 @@ PREFERENCES_INTENT_SATURATION;Nasyceniowy PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Pokaż osadzoną miniaturę JPEG jeśli plik raw jest nieedytowany PREFERENCES_LANG;Język PREFERENCES_LANGAUTODETECT;Użyj języka systemowego +PREFERENCES_MAXRECENTFOLDERS;Maksymalna liczba ostatnio otwieranych folderów PREFERENCES_MENUGROUPEXTPROGS;Grupuj "Otwórz za pomocą" PREFERENCES_MENUGROUPFILEOPERATIONS;Grupuj operacje plików PREFERENCES_MENUGROUPLABEL;Grupuj operacje etykiet @@ -936,30 +984,39 @@ PREFERENCES_MENUGROUPRANK;Grupuj operacje oceny PREFERENCES_MENUOPTIONS;Opcje menu PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Domyślny profil kolorów +PREFERENCES_MONPROFILE_WARNOSX;Z powodu ograniczeń MacOS, dostępna jest tylko paleta sRGB. PREFERENCES_MULTITAB;Tryb wielu zakładek PREFERENCES_MULTITABDUALMON;Tryb wielu zakładek (na drugim monitorze jeśli dostępny) PREFERENCES_NAVIGATIONFRAME;Nawigacja PREFERENCES_OVERLAY_FILENAMES;Nakładaj nazwy pliku na miniatury +PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Nakładaj nazwy plików na miniaturki w przeglądarce PREFERENCES_OVERWRITEOUTPUTFILE;Nadpisuj istniejące pliki PREFERENCES_PANFACTORLABEL;Współczynnik PREFERENCES_PARSEDEXT;Przetwarzane rozszerzenia PREFERENCES_PARSEDEXTADD;Dodaj rozszerzenie PREFERENCES_PARSEDEXTADDHINT;Proszę wprowadzić rozszerzenie i zatwierdzić przyciskiem, by dodać do listy PREFERENCES_PARSEDEXTDELHINT;Skasuje wybrane rozszerzenie z listy +PREFERENCES_PARSEDEXTDOWNHINT;Przenieś wybrane rozszerzenie w dół. +PREFERENCES_PARSEDEXTUPHINT;Przenieś wybrane rozszerzenie w górę. +PREFERENCES_PERFORMANCE_MEASURE;Zmierz PREFERENCES_PERFORMANCE_THREADS;Wątki PREFERENCES_PREVDEMO;Metoda demozaikowania podglądu PREFERENCES_PREVDEMO_FAST;Szybka +PREFERENCES_PREVDEMO_LABEL;Metoda demozaikowania podczas podglądu przy powiększeniu mniejszym niż 100%: +PREFERENCES_PREVDEMO_SIDECAR;Tak jak w PP3 PREFERENCES_PROFILEHANDLING;Obsługa profili PREFERENCES_PROFILELOADPR;Priorytet wczytywania profilu PREFERENCES_PROFILEPRCACHE;Profil w pamięci podręcznej PREFERENCES_PROFILEPRFILE;Profil przy pliku wejściowym PREFERENCES_PROFILESAVECACHE;Zapisz parametry przetwarzania w pamięci podręcznej PREFERENCES_PROFILESAVEINPUT;Zapisz parametry przetwarzania obok pliku wejściowego +PREFERENCES_PROFILESAVELOCATION;Miejsce zapisywania profilu przetwarzania PREFERENCES_PROFILE_NONE;Żaden PREFERENCES_PROPERTY;Własność PREFERENCES_PRTPROFILE;Profil kolorów PREFERENCES_PSPATH;Katalog w którym zainstalowany jest Adobe Photoshop PREFERENCES_SELECTLANG;Wybierz język +PREFERENCES_SERIALIZE_TIFF_READ;Ustawienia odczytu TIFF PREFERENCES_SET;Ustaw PREFERENCES_SHOWBASICEXIF;Pokaż podstawowe dane Exif PREFERENCES_SHOWDATETIME;Pokaż datę i czas @@ -978,6 +1035,7 @@ PREFERENCES_TAB_GENERAL;Ogólne PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu PREFERENCES_TAB_PERFORMANCE;Wydajność PREFERENCES_TAB_SOUND;Dźwięki +PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show PREFERENCES_TP_LABEL;Panel narzędzi: PREFERENCES_TP_VSCROLLBAR;Ukry pionowy pasek przesuwania PREFERENCES_USEBUNDLEDPROFILES;Użyj załączone profile przetwarzania @@ -1002,7 +1060,10 @@ PROFILEPANEL_TOOLTIPLOAD;Ładuj profil z pliku.\nCtrl+klik aby wybrać pa PROFILEPANEL_TOOLTIPPASTE;Wklej profil ze schowka.\nCtrl+klik aby wybrać parametry do wklejenia. PROFILEPANEL_TOOLTIPSAVE;Zapisz aktualny profil.\nCtrl+klik aby wybrać parametry do zapisania. PROGRESSBAR_DECODING;Dekodowanie... +PROGRESSBAR_GREENEQUIL;Równoważenie koloru zielonego... PROGRESSBAR_HLREC;Rekonstrukcja podświetleń... +PROGRESSBAR_HOTDEADPIXELFILTER;Filtr gorących/martwych pikseli.. +PROGRESSBAR_LINEDENOISE;Liniowy filtr szumu... PROGRESSBAR_LOADING;Wczytywanie obrazu... PROGRESSBAR_LOADINGTHUMBS;Wczytywanie miniatur... PROGRESSBAR_LOADJPEG;Ładowanie pliku JPEG... @@ -1011,6 +1072,7 @@ PROGRESSBAR_LOADTIFF;Ładowanie pliku TIFF... PROGRESSBAR_NOIMAGES;Nie znaleziono żadnych obrazów PROGRESSBAR_PROCESSING;Przetwarzanie obrazu... PROGRESSBAR_PROCESSING_PROFILESAVED;Zapisano profil przetwarzania +PROGRESSBAR_RAWCACORR;Korekcja aberracji chromatycznej... PROGRESSBAR_READY;Gotowe PROGRESSBAR_SAVEJPEG;Zapisywanie pliku JPEG... PROGRESSBAR_SAVEPNG;Zapisywanie pliku PNG... @@ -1029,8 +1091,18 @@ QUEUE_FORMAT_TITLE;Format pliku QUEUE_LOCATION_FOLDER;Zapisz do katalogu QUEUE_LOCATION_TEMPLATE;Użyj schemat QUEUE_LOCATION_TEMPLATE_TOOLTIP;Dozwolone są następujące kody formatujące:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r, %s1, %s2, ...\n\nKody formatujące odnoszą się do różnych elementów ścieżki zdjęcia, atrybutów zdjęcia oraz do arbitralnego ciągu numerycznego operacji wsadowej.\n\nPrzykładowo, jeśli zdjęcie obrabiane ma następującą ścieżkę:\n/home/andrzej/zdjecia/2010-10-31/dsc0042.nef\nznaczenie kodów formatujących jest następujące:\n%d4 = home\n%d3 = andrzej\n%d2 = zdjecia\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/andrzej/zdjecia/\n%p3 = /home/andrzej/\n%p4 = /home/\n\n%r zostanie zastąpione oceną zdjęcia. Jeśli zdjęcie nie posiada oceny, %r zostanie zastąpione liczbą '0'. Jeśli zdjęcie leży w śmietniku, %r zostanie zastąpione znakiem 'x'.\n\n%s1, %s2, etc. zostanie zastąpione ciągniem numerycznym dopełnionym od jednej do dziewięciu cyfr. Ciąg ten zostanie rozpocznięty od "1" za każdym razem gdy kolejka przetwarzania zostanie uruchomiona, i liczba jest zwiększona o "1" dla każdego zapisanego obrazu.\n\nJeśli chcesz zapisać obraz wyjściowy obok obrazu wejściowego, napisz:\n%p1/%f\n\nJeśli chcesz zapisać obraz wyjściowy w folderze o nazwie "wywolane" znajdującego się w katalogu zawierającym otwarty obraz, napisz:\n%p1/wywolane/%f\n\nJeśli chcesz zapisać obraz wyjściowy w folderze o nazwie "/home/andrzej/zdjecia/wywolane/2010-10-31", napisz:\n%p2/wywolane/%d1/%f +QUEUE_LOCATION_TITLE;Lokalizacja wyjściowa +SAMPLEFORMAT_0;Nieznany typ pliku +SAMPLEFORMAT_1;8-bit bez znaku +SAMPLEFORMAT_2;16-bit bez znaku +SAMPLEFORMAT_4;24-bit LogLuv +SAMPLEFORMAT_8;32-bit LogLuv +SAMPLEFORMAT_16;16-bit zmiennoprzecinkowy +SAMPLEFORMAT_32;24-bit zmiennoprzecinkowy +SAMPLEFORMAT_64;32-bit zmiennoprzecinkowy SAVEDLG_AUTOSUFFIX;Automatycznie dodaj przyrostek, jeżeli plik już istnieje SAVEDLG_FILEFORMAT;Format pliku +SAVEDLG_FILEFORMAT_FLOAT; zmiennoprzecinkowy SAVEDLG_FORCEFORMATOPTS;Wymuś opcje zapisu SAVEDLG_JPEGQUAL;Jakość JPEG SAVEDLG_PUTTOQUEUE;Umieść w kolejce przetwarzania @@ -1271,6 +1343,7 @@ TP_DEHAZE_LABEL;Usuwanie mgły TP_DEHAZE_LUMINANCE;Tylko luminancja TP_DEHAZE_SHOW_DEPTH_MAP;Pokaż mapę głębokości TP_DEHAZE_STRENGTH;Siła +TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatycznie TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominancja - Błękit-żółć TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Krzywa chrominancji TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominancja @@ -1355,6 +1428,7 @@ TP_EXPOSURE_TCMODE_FILMLIKE;Klisza TP_EXPOSURE_TCMODE_LABEL1;Tryb krzywej 1 TP_EXPOSURE_TCMODE_LABEL2;Tryb krzywej 2 TP_EXPOSURE_TCMODE_LUMINANCE;Luminancja +TP_EXPOSURE_TCMODE_PERCEPTUAL;Percepcyjny TP_EXPOSURE_TCMODE_SATANDVALBLENDING;Mieszanie nasycenia i mocy światła białego TP_EXPOSURE_TCMODE_STANDARD;Standardowa TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Ważona standardowa @@ -1426,10 +1500,12 @@ TP_ICM_SAVEREFERENCE_TOOLTIP;Zapisz liniowy obraz TIFF zanim profil wejściowy z TP_ICM_TONECURVE;Użyj krzywą tonalną z DCP TP_ICM_TONECURVE_TOOLTIP;Włącz aby użyć krzywą tonalną znajdującą się w profilu DCP. Opcja ta jest tylko aktywna jeśli profil DCP zawiera krzywą tonalną. TP_ICM_WORKINGPROFILE;Profil roboczy +TP_ICM_WORKING_TRC;Krzywa odpowiedzi tonalnej: TP_ICM_WORKING_TRC_CUSTOM;Własna TP_ICM_WORKING_TRC_GAMMA;Gamma TP_ICM_WORKING_TRC_NONE;Żadna TP_ICM_WORKING_TRC_SLOPE;Nachylenie +TP_ICM_WORKING_TRC_TOOLTIP;Tylko dla wbudowanych profili. TP_IMPULSEDENOISE_LABEL;Redukcja Szumów Impulsowych TP_IMPULSEDENOISE_THRESH;Próg TP_LABCURVE_AVOIDCOLORSHIFT;Zapobiegaj zmianom koloru @@ -1563,11 +1639,23 @@ TP_RAW_LMMSE;LMMSE TP_RAW_LMMSEITERATIONS;Ilość kroków udoskonalenia LMMSE TP_RAW_LMMSE_TOOLTIP;Aby zmniejszyć ilość artefaktów i poprawić stosunek sygnału do szumów, można wykorzystać następujące ustawienia:\n1: Gamma\n2-4: Średnia mediana\n5-6: Rafinowanie TP_RAW_MONO;Mono +TP_RAW_PIXELSHIFTBLUR;Maska rozmycia ruchu +TP_RAW_PIXELSHIFTDMETHOD;Metoda demozaikowania ruchu TP_RAW_PIXELSHIFTEPERISO;Czułość +TP_RAW_PIXELSHIFTEQUALBRIGHT;Wyrównaj jasność klatek +TP_RAW_PIXELSHIFTHOLEFILL;Wypełnij dziury w masce ruchu +TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Wypełnia dziury w masce ruchu +TP_RAW_PIXELSHIFTMEDIAN;Użyj mediany dla poruszonych fragmentów TP_RAW_PIXELSHIFTMM_AUTO;Automatyczny TP_RAW_PIXELSHIFTMM_CUSTOM;Własny TP_RAW_PIXELSHIFTMM_OFF;Wyłączony +TP_RAW_PIXELSHIFTMOTIONMETHOD;Korekcja ruchu +TP_RAW_PIXELSHIFTNONGREENCROSS;Szukaj ruchu w kanale niebieskim/czerwonym +TP_RAW_PIXELSHIFTSHOWMOTION;Pokaż maskę ruchu +TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Pokaż tylko maskę ruchu +TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Pokaż samą maskę ruchu (bez obrazu). TP_RAW_PIXELSHIFTSIGMA;Promień rozmycia +TP_RAW_PIXELSHIFTSMOOTH;Miękkie przejścia TP_RAW_RCD;RCD TP_RAW_RCDVNG4;RCD+VNG4 TP_RAW_SENSOR_BAYER_LABEL;Matryca z filtrem Bayera @@ -1576,6 +1664,7 @@ TP_RAW_SENSOR_XTRANS_LABEL;Matryca z filtrem X-Trans TP_RAW_VNG4;VNG4 TP_RAW_XTRANS;X-Trans TP_RAW_XTRANSFAST;Szybki X-Trans +TP_RESIZE_ALLOW_UPSCALING;Zezwól na zwiększenie rozdzielczości TP_RESIZE_APPLIESTO;Dotyczy: TP_RESIZE_CROPPEDAREA;Obszaru kadrowanego TP_RESIZE_FITBOX;Wymiary obwodu @@ -1594,12 +1683,21 @@ TP_RETINEX_CONTEDIT_HSL;Histogram HSL TP_RETINEX_CONTEDIT_LAB;Histogram L*a*b* TP_RETINEX_CONTEDIT_LH;Odcień TP_RETINEX_CONTEDIT_MAP;Wyrównywanie +TP_RETINEX_CURVEEDITOR_CD;L=f(L) +TP_RETINEX_CURVEEDITOR_LH;Siła=f(H) +TP_RETINEX_CURVEEDITOR_MAP;L=f(L) TP_RETINEX_EQUAL;Wyrównywanie TP_RETINEX_GAIN;Wzmocnienie TP_RETINEX_GAMMA;Gamma +TP_RETINEX_GAMMA_FREE;Wolna +TP_RETINEX_GAMMA_HIGH;Wysoka +TP_RETINEX_GAMMA_LOW;Niska +TP_RETINEX_GAMMA_MID;Średnia TP_RETINEX_GAMMA_NONE;Żaden TP_RETINEX_HIGH;Wysoki TP_RETINEX_HIGHLIGHT;Próg podświetleń +TP_RETINEX_HSLSPACE_LIN;HSL-Liniowa +TP_RETINEX_HSLSPACE_LOG;HSL-Logarytmiczna TP_RETINEX_LABEL;Retinex TP_RETINEX_LABEL_MASK;Maska TP_RETINEX_LABSPACE;L*a*b* @@ -1746,7 +1844,10 @@ TP_WAVELET_EDRAD;Promień TP_WAVELET_EDSL;Suwaki progów TP_WAVELET_EDTYPE;Metoda kontrastu lokalnego: TP_WAVELET_EDVAL;Siła +TP_WAVELET_FINAL;Ostateczny retusz TP_WAVELET_FINEST;Najdokładniej +TP_WAVELET_HIGHLIGHT;Zakres luminancji podświetleń +TP_WAVELET_HS1;Zakres luminancji TP_WAVELET_HS2;Cienie/Podświetlenia TP_WAVELET_HUESKIN;Odcień skóry TP_WAVELET_HUESKY;Odcień nieba @@ -1756,7 +1857,9 @@ TP_WAVELET_LEVONE;Poziom 2 TP_WAVELET_LEVTHRE;Poziom 4 TP_WAVELET_LEVTWO;Poziom 3 TP_WAVELET_LEVZERO;Poziom 1 +TP_WAVELET_LINKEDG;Połącz z siłą 'Ostrość krawędzi' TP_WAVELET_LIPST;Usprawniony algorytm +TP_WAVELET_LOWLIGHT;Zakres luminancji cieni TP_WAVELET_MEDGREINF;Pierwszy poziom TP_WAVELET_MEDI;Usuwaj artefakty niebieskiego nieba TP_WAVELET_MEDILEV;Wykrywanie krawędzi @@ -1775,6 +1878,7 @@ TP_WAVELET_RESCHRO;Chrominancja TP_WAVELET_RESCON;Cienie TP_WAVELET_RESCONH;Podświetlenia TP_WAVELET_SAT;Chrominancja kolorów nasyconych +TP_WAVELET_SKY;Odcień nieba - wybór/ochrona TP_WAVELET_STREN;Siła TP_WAVELET_STRENGTH;Siła TP_WAVELET_SUPE;Ekstra @@ -1845,13 +1949,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. -!CURVEEDITOR_AXIS_IN;I: -!CURVEEDITOR_AXIS_LEFT_TAN;LT: -!CURVEEDITOR_AXIS_OUT;O: -!CURVEEDITOR_AXIS_RIGHT_TAN;RT: !CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. -!DONT_SHOW_AGAIN;Don't show this message again. !DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule !DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the "re:" prefix to enter\na regular expression. !DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift @@ -1867,7 +1965,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? !FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to permanently delete the selected %1 files, including a queue-processed version? !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version -!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. @@ -1943,14 +2040,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_443;Output black point compensation !HISTORY_MSG_444;WB - Temp bias !HISTORY_MSG_445;Raw sub-image -!HISTORY_MSG_453;PS - Show mask only !HISTORY_MSG_457;PS - Check red/blue !HISTORY_MSG_462;PS - Check green !HISTORY_MSG_464;PS - Blur motion mask -!HISTORY_MSG_465;PS - Blur radius -!HISTORY_MSG_468;PS - Fill holes !HISTORY_MSG_469;PS - Median -!HISTORY_MSG_472;PS - Smooth transitions !HISTORY_MSG_473;PS - Use LMMSE !HISTORY_MSG_476;CAM02 - Temp out !HISTORY_MSG_477;CAM02 - Green out @@ -1964,9 +2057,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_488;Dynamic Range Compression !HISTORY_MSG_493;L*a*b* Adjustments !HISTORY_MSG_494;Capture Sharpening -!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction -!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Channel !HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - region C mask !HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - H mask !HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - Lightness @@ -1975,7 +2065,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - region mask blur !HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset !HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power -!HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - Saturation !HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - region show mask !HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - region slope !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold @@ -1994,36 +2083,19 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations -!HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling -!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius -!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold -!HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace -!HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light -!HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor -!HISTORY_MSG_TRANS_Method;Geometry - Method !ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description !ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Leave empty to set the default description. !ICCPROFCREATOR_ILL;Illuminant: !ICCPROFCREATOR_ILL_TOOLTIP;You can only set the illuminant for ICC v4 profiles. !ICCPROFCREATOR_PRIMARIES;Primaries: -!ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 -!ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 !ICCPROFCREATOR_PRIM_TOOLTIP;You can only set custom primaries for ICC v4 profiles. -!ICCPROFCREATOR_PRIM_WIDEG;Widegamut -!ICCPROFCREATOR_TRC_PRESET;Tone response curve: !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. -!IPTCPANEL_COPYRIGHT;Copyright notice -!IPTCPANEL_COPYRIGHTHINT;Enter a Notice on the current owner of the Copyright for this image, such as ©2008 Jane Doe. -!IPTCPANEL_COUNTRYHINT;Enter the name of the country pictured in this image. -!IPTCPANEL_CREATORHINT;Enter the name of the person that created this image. !IPTCPANEL_CREATORJOBTITLE;Creator's job title !IPTCPANEL_CREATORJOBTITLEHINT;Enter the Job Title of the person listed in the Creator field. !IPTCPANEL_DESCRIPTIONHINT;Enter a "caption" describing the who, what, and why of what is happening in this image, this might include names of people, and/or their role in the action that is taking place within the image. -!IPTCPANEL_DESCRIPTIONWRITER;Description writer !IPTCPANEL_DESCRIPTIONWRITERHINT;Enter the name of the person involved in writing, editing or correcting the description of the image. !IPTCPANEL_HEADLINEHINT;Enter a brief publishable synopsis or summary of the contents of the image. !IPTCPANEL_INSTRUCTIONSHINT;Enter information about embargoes, or other restrictions not covered by the Copyright field. @@ -2032,9 +2104,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !IPTCPANEL_SOURCEHINT;Enter or edit the name of a person or party who has a role in the content supply chain, such as a person or entity from whom you received this image from. !IPTCPANEL_SUPPCATEGORIESHINT;Further refines the subject of the image. !IPTCPANEL_TITLEHINT;Enter a short verbal and human readable name for the image, this may be the file name. -!IPTCPANEL_TRANSREFERENCE;Job ID -!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking. -!MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. !OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. @@ -2050,66 +2119,30 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_IMAGENUM;Sub-image !PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift -!PARTIALPASTE_SOFTLIGHT;Soft light -!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font -!PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color !PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. -!PREFERENCES_CHUNKSIZES;Tiles per thread -!PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs -!PREFERENCES_CROP;Crop Editing -!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop -!PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop -!PREFERENCES_CURVEBBOXPOS;Position of curve copy & paste buttons -!PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. -!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders !PREFERENCES_MONINTENT;Default rendering intent -!PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. -!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel -!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. -!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. -!PREFERENCES_PERFORMANCE_MEASURE;Measure !PREFERENCES_PERFORMANCE_MEASURE_HINT;Logs processing times in console !PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) -!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: -!PREFERENCES_PREVDEMO_SIDECAR;As in PP3 !PREFERENCES_PRINTER;Printer (Soft-Proofing) !PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file -!PREFERENCES_PROFILESAVELOCATION;Processing profile saving location !PREFERENCES_PRTINTENT;Rendering intent !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3". !PREFERENCES_SAVE_TP_OPEN_NOW;Save tool collapsed/expanded state now -!PREFERENCES_SERIALIZE_TIFF_READ;TIFF Read Settings !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize reading of TIFF files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Enabling this option when working with folders containing uncompressed TIFF files can increase performance of thumbnail generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview -!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PROGRESSBAR_GREENEQUIL;Green equilibration... -!PROGRESSBAR_HOTDEADPIXELFILTER;Hot/dead pixel filter... -!PROGRESSBAR_LINEDENOISE;Line noise filter... -!PROGRESSBAR_RAWCACORR;Raw CA correction... -!QUEUE_LOCATION_TITLE;Output Location !QUEUE_STARTSTOP_TOOLTIP;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s -!SAMPLEFORMAT_0;Unknown data format -!SAMPLEFORMAT_1;8-bit unsigned -!SAMPLEFORMAT_2;16-bit unsigned -!SAMPLEFORMAT_4;24-bit LogLuv -!SAMPLEFORMAT_8;32-bit LogLuv -!SAMPLEFORMAT_16;16-bit floating-point -!SAMPLEFORMAT_32;24-bit floating-point -!SAMPLEFORMAT_64;32-bit floating-point -!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. @@ -2128,7 +2161,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_CROP_GTTRIANGLE1;Golden Triangles 1 !TP_CROP_GTTRIANGLE2;Golden Triangles 2 !TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zones -!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatic global !TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. !TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. @@ -2144,7 +2176,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. !TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve !TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. -!TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual !TP_FILMNEGATIVE_GREEN;Reference exponent (contrast) !TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picking two patches which had a neutral hue (no color) in the original scene. The patches should differ in brightness. Set the white balance afterwards. !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2157,8 +2188,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_ICM_PROFILEINTENT;Rendering Intent !TP_ICM_SAVEREFERENCE;Save Reference Image !TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles. -!TP_ICM_WORKING_TRC;Tone response curve: -!TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. !TP_LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong. !TP_PDSHARPENING_LABEL;Capture Sharpening !TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows @@ -2173,42 +2202,22 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_NONE;None (Shows sensor pattern) !TP_RAW_PIXELSHIFT;Pixel Shift -!TP_RAW_PIXELSHIFTBLUR;Blur motion mask -!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion !TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images. -!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames !TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel !TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels. !TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction. !TP_RAW_PIXELSHIFTGREEN;Check green channel for motion -!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask -!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask -!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts !TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects. -!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction -!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion -!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask -!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask -!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image. !TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion. !TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value. -!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions !TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected. -!TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling -!TP_RETINEX_CURVEEDITOR_CD;L=f(L) !TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. -!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) !TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. -!TP_RETINEX_CURVEEDITOR_MAP;L=f(L) !TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts! !TP_RETINEX_FREEGAMMA;Free gamma !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission !TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. -!TP_RETINEX_GAMMA_FREE;Free -!TP_RETINEX_GAMMA_HIGH;High -!TP_RETINEX_GAMMA_LOW;Low -!TP_RETINEX_GAMMA_MID;Middle !TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). !TP_RETINEX_GRAD;Transmission gradient !TP_RETINEX_GRADS;Strength gradient @@ -2216,8 +2225,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely. !TP_RETINEX_HIGHLIG;Highlight !TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. -!TP_RETINEX_HSLSPACE_LIN;HSL-Linear -!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic !TP_RETINEX_ITER;Iterations (Tone-mapping) !TP_RETINEX_ITERF;Tone mapping !TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time. @@ -2278,9 +2285,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. !TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts. !TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect. -!TP_WAVELET_FINAL;Final Touchup -!TP_WAVELET_HIGHLIGHT;Highlight luminance range -!TP_WAVELET_HS1;Whole luminance range !TP_WAVELET_HUESKIN_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. !TP_WAVELET_HUESKY_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. !TP_WAVELET_ITER;Delta balance levels @@ -2294,8 +2298,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_LEVELS;Wavelet levels !TP_WAVELET_LEVELS_TOOLTIP;Choose the number of detail levels the image is to be decomposed into. More levels require more RAM and require a longer processing time. !TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1 -!TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength -!TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. !TP_WAVELET_NOISE;Denoise and Refine !TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. @@ -2307,7 +2309,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_SETTINGS;Wavelet Settings !TP_WAVELET_SKIN;Skin targetting/protection !TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. -!TP_WAVELET_SKY;Sky targetting/protection !TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. !TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels between 9 and 9 minus the value will be affected by the shadow luminance range. Other levels will be fully treated. The highest level possible is limited by the highlight level value (9 minus highlight level value). !TP_WAVELET_THRESHOLD_TOOLTIP;Only levels beyond the chosen value will be affected by the highlight luminance range. Other levels will be fully treated. The chosen value here limits the highest possible value of the shadow levels. From 4ea92d3e93712125f7ffc5bd23d132e3646a142a Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 18 Feb 2020 18:06:21 +0100 Subject: [PATCH 102/264] Fix broken camonst.json --- rtengine/camconst.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 3deab9c38..f58167478 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1221,7 +1221,7 @@ Camera constants: { // Quality A, changes for raw crop which is wrong (larger) in dcraw "make_model": "Canon PowerShot S120", - "dcraw_matrix": [ 6961, -1685, -695, -4625, 12945, 1836, -1114, 2152, 5518 ] // ColorMatrix2 using illuminant D65 from Adobe DNG Converter 12.2 + "dcraw_matrix": [ 6961, -1685, -695, -4625, 12945, 1836, -1114, 2152, 5518 ], // ColorMatrix2 using illuminant D65 from Adobe DNG Converter 12.2 "raw_crop": [ 120, 30, 4024, 3030 ], "masked_areas": [ 32, 2, 3028, 80 ], "ranges": { "white": 4050 } From e7a4ae3c9fa987d625b537573fd811a9cb5d2fb8 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 18 Feb 2020 18:07:45 +0100 Subject: [PATCH 103/264] Fix segfault on close of RT when RT was started with a filename as argument --- rtgui/rtwindow.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 8cfeb8ec0..fc315e1b7 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -99,6 +99,8 @@ RTWindow::RTWindow () , bpanel (nullptr) , splash (nullptr) , btn_fullscreen (nullptr) + , iFullscreen (nullptr) + , iFullscreen_exit (nullptr) , epanel (nullptr) , fpanel (nullptr) { From 020051fd4bcb582c5edcd03ce1851374b876ab13 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 18 Feb 2020 20:02:51 +0100 Subject: [PATCH 104/264] Better formatting of generateRtexifUpdates No functional changes. --- tools/generateRtexifUpdates | 87 ++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/tools/generateRtexifUpdates b/tools/generateRtexifUpdates index 72a97862e..b4ace209d 100755 --- a/tools/generateRtexifUpdates +++ b/tools/generateRtexifUpdates @@ -32,7 +32,10 @@ echo #------------------------------------------------------------------------------ # Canon printf '%s\n' "Saving ${tmpdir}/canon_lenses" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='LensType']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -canon:all) | sort -fuV > "${tmpdir}/canon_lenses" +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='LensType']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -canon:all) | sort -fuV > "${tmpdir}/canon_lenses" #In :10.1 Sigma 50mm f/2.8 EX #Out: {10, "Sigma 50mm f/2.8 EX"}, @@ -55,7 +58,11 @@ sed -r -i \ # replace with '] = "' # append '";' printf '%s\n' "Saving ${tmpdir}/canon_cameras" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='CanonModelID']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -canon:all) | sort -fuV > "${tmpdir}/canon_cameras" +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='CanonModelID']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -canon:all) | sort -fuV > "${tmpdir}/canon_cameras" + sed -r -i \ -e 's/^/ choices[/' \ -e 's/\t/] = "/' \ @@ -65,28 +72,84 @@ sed -r -i \ #------------------------------------------------------------------------------ # Nikon LensIDs are composite tags printf '%s\n' "Saving ${tmpdir}/nikon" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='LensID']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -composite:all) > "${tmpdir}/nikon" -sed -r -i -e '/^... /d' -e 's/^/ {"/' -e 's/([A-F0-9]+)[A-F0-9.]*\t/\1", "/' -e 's/$/"},/' -e 's|(.* ")(.*) F([0-9]+)|\1\2 f/\3|' -e 's| F/([0-9]+)| f/\1|' "${tmpdir}/nikon" + +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='LensID']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -composite:all) > "${tmpdir}/nikon" + +sed -r -i \ + -e '/^... /d' \ + -e 's/^/ {"/' \ + -e 's/([A-F0-9]+)[A-F0-9.]*\t/\1", "/' \ + -e 's/$/"},/' \ + -e 's|(.* ")(.*) F([0-9]+)|\1\2 f/\3|' \ + -e 's| F/([0-9]+)| f/\1|' \ + "${tmpdir}/nikon" #------------------------------------------------------------------------------ # Olympus printf '%s\n' "Saving ${tmpdir}/olympus" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='LensType']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -olympus:all) | sort -fuV > "${tmpdir}/olympus" -sed -r -i -e '/0 00 00\tNone/d' -e 's/^/ lenses["0/' -e 's/\t/"] = "/' -e 's/$/";/' -e 's| F([0-9]+)| f/\1|g' "${tmpdir}/olympus" + +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='LensType']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -olympus:all) | sort -fuV > "${tmpdir}/olympus" + +sed -r -i \ + -e '/0 00 00\tNone/d' \ + -e 's/^/ lenses["0/' \ + -e 's/\t/"] = "/' \ + -e 's/$/";/' \ + -e 's| F([0-9]+)| f/\1|g' \ + "${tmpdir}/olympus" #------------------------------------------------------------------------------ # Pentax printf '%s\n' "Saving ${tmpdir}/pentax" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='LensType']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -pentax:all) | sort -fuV > "${tmpdir}/pentax" -sed -r -i -e 's/^/ choices.insert (p_t (256 * /' -e 's/([0-9]+) ([0-9]+)([0-9.]*)/\1 + \2/' -e 's/\t/, "/' -e 's/$/"));/' -e 's| F([0-9]+)| f/\1|' "${tmpdir}/pentax" + +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='LensType']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -pentax:all) | sort -fuV > "${tmpdir}/pentax" + +sed -r -i \ + -e 's/^/ choices.insert (p_t (256 * /' \ + -e 's/([0-9]+) ([0-9]+)([0-9.]*)/\1 + \2/' \ + -e 's/\t/, "/' \ + -e 's/$/"));/' \ + -e 's| F([0-9]+)| f/\1|' \ + "${tmpdir}/pentax" #------------------------------------------------------------------------------ # Sony printf '%s\n' "Saving ${tmpdir}/sony" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='LensType']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -sony:all) | sort -fuV > "${tmpdir}/sony" + +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='LensType']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -sony:all) | sort -fuV > "${tmpdir}/sony" + # Sony has more lenses under the LensType2 tag printf '%s\n' "Saving ${tmpdir}/sony-lenstype2" -xmlstarlet sel -T -t -m "taginfo/table/tag[@name='LensType2']/values/key" -v "concat(@id,' ',val)" -n < <("$et" -listx -sony:all) | sort -fuV > "${tmpdir}/sony-lenstype2" -sed -r -i -e 's/^/ {/' -e 's/([0-9]+)[0-9.]*\t/\1, "/' -e 's/$/"},/' -e 's| F([0-9]+)| f/\1|g' "${tmpdir}/sony" -sed -r -i -e '/255\tTamron Lens (255)/d' -e 's/([0-9]+)[0-9.]*\t/\1, "/' -e 's/^/ choices.insert (p_t (/' -e 's/$/"));/' -e 's| F([0-9]+)| f/\1|g' "${tmpdir}/sony-lenstype2" + +xmlstarlet sel -T -t \ + -m "taginfo/table/tag[@name='LensType2']/values/key" \ + -v "concat(@id,' ',val)" \ + -n < <("$et" -listx -sony:all) | sort -fuV > "${tmpdir}/sony-lenstype2" + +sed -r -i \ + -e 's/^/ {/' \ + -e 's/([0-9]+)[0-9.]*\t/\1, "/' \ + -e 's/$/"},/' \ + -e 's| F([0-9]+)| f/\1|g' \ + "${tmpdir}/sony" + +sed -r -i \ + -e '/255\tTamron Lens (255)/d' \ + -e 's/([0-9]+)[0-9.]*\t/\1, "/' \ + -e 's/^/ choices.insert (p_t (/' \ + -e 's/$/"));/' \ + -e 's| F([0-9]+)| f/\1|g' \ + "${tmpdir}/sony-lenstype2" From 533db7aa17d50c331b1c00b533bf83ac41a64dff Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Wed, 19 Feb 2020 12:03:11 -0800 Subject: [PATCH 105/264] mac bundle: fix -cli codesigning --- tools/osx/macosx_bundle.sh | 53 +++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index be76face3..23c5df2b9 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -40,11 +40,11 @@ msg "Modifying install names: ${x}" { # id if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then -echo " install_name_tool -id '@rpath/$(basename "${x}")' '${x}'" +install_name_tool -id @rpath/$(basename ${x}) ${x} fi GetDependencies "${x}" | while read -r y do -echo " install_name_tool -change '${y}' '@rpath/$(basename "${y}")' '${x}'" +install_name_tool -change ${y} @rpath/$(basename ${y}) ${x} done } | bash -v done @@ -107,6 +107,8 @@ __EOS__ minimum_macos_version=${MINIMUM_SYSTEM_VERSION} LOCAL_PREFIX="$(cmake .. -LA -N | grep "LOCAL_PREFIX" | cut -d "=" -f2)" EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" +CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" +NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" APP="${PROJECT_NAME}.app" CONTENTS="${APP}/Contents" @@ -118,7 +120,7 @@ EXECUTABLE="${MACOS}/rawtherapee" GDK_PREFIX="${LOCAL_PREFIX}/local/" msg "Removing old files:" -rm -rf "${APP}" "${PROJECT_NAME}_*.dmg" "*zip" +rm -rf "${APP}" *.dmg *.zip msg "Creating bundle container:" install -d "${RESOURCES}" \ @@ -133,8 +135,10 @@ echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutT echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -msg "Copying release files:" +msg "Copying binary executable files." ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" + +msg "Copying Resources directory." ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" # Copy the Lensfun database into the app bundle @@ -147,7 +151,7 @@ ditto ${LOCAL_PREFIX}/local/lib/liblensfun.2.dylib "${CONTENTS}/Frameworks/lible # Copy libomp to Frameworks ditto ${LOCAL_PREFIX}/local/lib/libomp.dylib "${CONTENTS}/Frameworks" -msg "Copying dependencies from ${GTK_PREFIX}:" +msg "Copying dependencies from ${GTK_PREFIX}." CheckLink "${EXECUTABLE}" # dylib install names @@ -238,7 +242,7 @@ s|@shortVersion@|${PROJECT_VERSION}| s|@arch@|${arch}|" \ "${CONTENTS}/Info.plist" plutil -convert binary1 "${CONTENTS}/Info.plist" -update-mime-database -V "${CONTENTS}/Resources/share/mime" +update-mime-database -V "${RESOURCES}/share/mime" msg "Build glib database:" mkdir -p ${RESOURCES}/share/glib-2.0 @@ -246,37 +250,34 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/glib-2.0/schemas "${LOCAL_PREFIX}/local/bin/glib-compile-schemas" "${RESOURCES}/share/glib-2.0/schemas" # Append an LC_RPATH -msg "Registering @rpath into the executable:" -echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${EXECUTABLE}'" | bash -v -echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${EXECUTABLE}-cli'" | bash -v +msg "Registering @rpath into the main executable." +install_name_tool -add_rpath ${LIB} ${EXECUTABLE} ModifyInstallNames # fix @rpath in Frameworks -msg "Registering @rpath in Frameworks folder:" -for frameworklibs in "${CONTENTS}"/Frameworks/* ; do -echo " install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib '${frameworklibs}'" | bash -v -echo " install_name_tool -add_rpath /Applications/RawTherapee.app/Contents/Frameworks '${frameworklibs}'" | bash -v +msg "Registering @rpath in Frameworks folder." +for frameworklibs in "${LIB}"/*{dylib,so} ; do +install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib ${frameworklibs} +install_name_tool -add_rpath "${LIB}" ${frameworklibs} done +install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli +install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli -# Sign the app -CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" +# Codesign the app if ! test -z "${CODESIGNID}" ; then -msg "Codesigning:" -install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CONTENTS}"/rt.entitlements -plutil -convert binary1 "${CONTENTS}"/rt.entitlements -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${CONTENTS}"/rt.entitlements -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${EXECUTABLE}" -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp --entitlements "${CONTENTS}"/rt.entitlements "${EXECUTABLE}"-cli +msg "Codesigning Application." +install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements +plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements +mv "${EXECUTABLE}"-cli "${LIB}" for frameworklibs in "${LIB}"/* ; do -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --timestamp "${frameworklibs}" +codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}" done -codesign --deep --preserve-metadata=identifier,entitlements,runtime --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CONTENTS}/rt.entitlements" "${APP}" +codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" spctl -a -vvvv ${APP} fi # Notarize the app -NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" if ! test -z "$NOTARY" ; then msg "Notarizing the application:" ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" @@ -308,7 +309,6 @@ local srcDir="$(mktemp -dt $$)" msg "Preparing disk image sources at ${srcDir}:" cp -R "${APP}" "${srcDir}" -ditto "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt "${srcDir}" ln -s /Applications "${srcDir}" # Web bookmarks @@ -331,7 +331,7 @@ hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAM # Sign disk image if ! test -z "$CODESIGNID" ; then -codesign --deep --force -v -s ""${CODESIGNID}"" --timestamp "${dmg_name}.dmg" +codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" fi # Notarize the dmg @@ -363,7 +363,6 @@ fi # Zip disk image for redistribution msg "Zipping disk image for redistribution:" -zip "${dmg_name}.zip" "${dmg_name}.dmg" "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" rm "${dmg_name}.dmg" msg "Removing disk image caches:" rm -rf "${srcDir}" From 3bbdd89c8f6edb32b06f330ad7fb8c1f15abab55 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Wed, 19 Feb 2020 14:40:42 -0800 Subject: [PATCH 106/264] mac: fix -cli and add a linker flag --- CMakeLists.txt | 7 +++++-- cmake/modules/FindMacIntegration.cmake | 2 +- tools/osx/macosx_bundle.sh | 12 ++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8503fe573..05efc3a3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,14 +113,14 @@ endif() if(APPLE) if(CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib -Wl,-headerpad_max_install_names -mtune=generic") message(STATUS "CMAKE_CXX_COMPILER is MacPorts GCC.\n CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") endif() # Set minimum system version set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -headerpad_max_install_names") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names -mtune=generic") endif() option(USE_EXPERIMENTAL_LANG_VERSIONS "Build with -std=c++0x" OFF) @@ -270,6 +270,9 @@ if(APPLE) elseif(NOT DEFINED LOCAL_PREFIX) set(LOCAL_PREFIX "/usr") endif() + if("${FANCY_DMG}") + set(FANCY_DMG ON CACHE BOOL "Use the andreyvit/create-dmg script to make a fancy .dmg") + endif() endif() # Enforce absolute paths for non-bundle builds: diff --git a/cmake/modules/FindMacIntegration.cmake b/cmake/modules/FindMacIntegration.cmake index a67c31baa..a6729ad7f 100644 --- a/cmake/modules/FindMacIntegration.cmake +++ b/cmake/modules/FindMacIntegration.cmake @@ -24,7 +24,7 @@ mark_as_advanced(MACINTEGRATION_LIBRARY) # handle the QUIETLY and REQUIRED arguments and set MACINTEGRATION_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MACINTEGRATION DEFAULT_MSG MACINTEGRATION_LIBRARY MACINTEGRATION_INCLUDE_DIR) +find_package_handle_standard_args(MacIntegration DEFAULT_MSG MACINTEGRATION_LIBRARY MACINTEGRATION_INCLUDE_DIR) if(MACINTEGRATION_FOUND) set(MacIntegration_LIBRARIES ${MACINTEGRATION_LIBRARY}) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 23c5df2b9..6beefd83f 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -40,11 +40,11 @@ msg "Modifying install names: ${x}" { # id if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then -install_name_tool -id @rpath/$(basename ${x}) ${x} +install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} fi GetDependencies "${x}" | while read -r y do -install_name_tool -change ${y} @rpath/$(basename ${y}) ${x} +install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x} done } | bash -v done @@ -109,6 +109,8 @@ LOCAL_PREFIX="$(cmake .. -LA -N | grep "LOCAL_PREFIX" | cut -d "=" -f2)" EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" +FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" +echo ${FANCY_DMG} || echo "Building plain .dmg" APP="${PROJECT_NAME}.app" CONTENTS="${APP}/Contents" @@ -251,7 +253,7 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/glib-2.0/schemas # Append an LC_RPATH msg "Registering @rpath into the main executable." -install_name_tool -add_rpath ${LIB} ${EXECUTABLE} +install_name_tool -add_rpath /Applications/"${LIB}" ${EXECUTABLE} ModifyInstallNames @@ -259,7 +261,7 @@ ModifyInstallNames msg "Registering @rpath in Frameworks folder." for frameworklibs in "${LIB}"/*{dylib,so} ; do install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib ${frameworklibs} -install_name_tool -add_rpath "${LIB}" ${frameworklibs} +install_name_tool -add_rpath /Applications/"${LIB}" ${frameworklibs} done install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli @@ -370,3 +372,5 @@ rm -rf "${srcDir}" CreateDmg msg "Finishing build:" echo "Script complete." +# +# TODO filter out the benign errors From a78c4b99df54ff9a12b31e9b3f6796ebee665806 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Wed, 19 Feb 2020 15:51:50 -0800 Subject: [PATCH 107/264] mac:send an absolute path to config.h.in via CMakeLists.txt --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05efc3a3b..1947d2c1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,7 +168,7 @@ endif() if(NOT DEFINED DATADIR) if(BUILD_BUNDLE) if(APPLE) - set(DATADIR "../Resources") + set(DATADIR "/Applications/RawTherapee.app/Contents/Resources") else() set(DATADIR .) endif() @@ -180,7 +180,7 @@ endif() if(NOT DEFINED LIBDIR) if(BUILD_BUNDLE) if(APPLE) - set(LIBDIR "../Frameworks") + set(LIBDIR "/Applications/RawTherapee.app/Contents/Frameworks") else() set(LIBDIR .) endif() From 9bc078c5bb88addb87ee40bb93478ac0bd29c582 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Thu, 20 Feb 2020 01:17:49 -0800 Subject: [PATCH 108/264] mac:export non-relative paths to config.h --- CMakeLists.txt | 4 ++-- rtengine/CMakeLists.txt | 4 ++++ rtgui/config.h.in | 9 +++++++++ tools/osx/macosx_bundle.sh | 24 +++++++++++------------- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1947d2c1b..5cef1fc97 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,7 +168,7 @@ endif() if(NOT DEFINED DATADIR) if(BUILD_BUNDLE) if(APPLE) - set(DATADIR "/Applications/RawTherapee.app/Contents/Resources") + set(DATADIR "../Resources/share") else() set(DATADIR .) endif() @@ -180,7 +180,7 @@ endif() if(NOT DEFINED LIBDIR) if(BUILD_BUNDLE) if(APPLE) - set(LIBDIR "/Applications/RawTherapee.app/Contents/Frameworks") + set(LIBDIR "../Frameworks") else() set(LIBDIR .) endif() diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 5f59da371..3ac8a8071 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -195,4 +195,8 @@ target_link_libraries(rtengine rtexif ${KLT_LIBRARIES} ) +if(APPLE) +install(FILES ${CAMCONSTSFILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/RawTherapee.app/Contents/Resources" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) +else() install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) +endif() diff --git a/rtgui/config.h.in b/rtgui/config.h.in index 95217b689..570f263b8 100644 --- a/rtgui/config.h.in +++ b/rtgui/config.h.in @@ -22,10 +22,19 @@ #cmakedefine BUILD_BUNDLE #cmakedefine HAVE_UNALIGNED_MALLOC + +#ifdef __APPLE__ +#define DATA_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources/share" +#define DOC_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources" +#define CREDITS_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources" +#define LICENCE_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources" +#define LENSFUN_DB_PATH "${LENSFUNDBDIR}" +#else #define DATA_SEARCH_PATH "${DATADIR}" #define DOC_SEARCH_PATH "${DOCDIR}" #define CREDITS_SEARCH_PATH "${CREDITSDIR}" #define LICENCE_SEARCH_PATH "${LICENCEDIR}" #define LENSFUN_DB_PATH "${LENSFUNDBDIR}" +#endif #endif diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 6beefd83f..44908cb4d 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -110,7 +110,7 @@ EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" -echo ${FANCY_DMG} || echo "Building plain .dmg" +echo ${FANCY_DMG} APP="${PROJECT_NAME}.app" CONTENTS="${APP}/Contents" @@ -125,17 +125,14 @@ msg "Removing old files:" rm -rf "${APP}" *.dmg *.zip msg "Creating bundle container:" -install -d "${RESOURCES}" \ -"${MACOS}" \ -"${LIB}" \ -"${ETC}" +install -d "${APP}" "${RESOURCES}" "${MACOS}" "${LIB}" "${ETC}" -echo "\n--------\n" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt -echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${CMAKE_BUILD_TYPE}"/Resources/AboutThisBuild.txt +echo "\n--------\n" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" +echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" +echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}/${RESOURCES}/AboutThisBuild.txt" +echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" +echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" +echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" msg "Copying binary executable files." ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" @@ -318,8 +315,8 @@ function CreateWebloc { defaults write "${srcDir}/$1" URL "$2" mv "${srcDir}/$1".{plist,webloc} } -CreateWebloc 'Website' 'http://www.rawtherapee.com/' -CreateWebloc 'Manual' 'http://rawpedia.rawtherapee.com/' +CreateWebloc 'Website' 'https://www.rawtherapee.com/' +CreateWebloc 'Manual' 'https://rawpedia.rawtherapee.com/' # Disk image name dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" @@ -374,3 +371,4 @@ msg "Finishing build:" echo "Script complete." # # TODO filter out the benign errors +# Build a fancy dmg From d21f051f437e6437bd784a3eb0e4f4b9edcc9e08 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Thu, 20 Feb 2020 01:56:00 -0800 Subject: [PATCH 109/264] mac:sync build directories locations --- CMakeLists.txt | 36 ++++++++++++++++++++++++++++++------ tools/osx/macosx_bundle.sh | 20 ++++++++++++-------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cef1fc97..a9f96a4d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,7 +200,11 @@ endif() if(NOT DEFINED DOCDIR) if(BUILD_BUNDLE) - set(DOCDIR "${DATADIR}/share/doc") + if(APPLE) + set(DOCDIR "${DATADIR}/doc") + else() + set(DOCDIR "${DATADIR}/share/doc") + endif() else() set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/rawtherapee") endif() @@ -208,7 +212,11 @@ endif() if(NOT DEFINED CREDITSDIR) if(BUILD_BUNDLE) - set(CREDITSDIR "${DATADIR}") + if(APPLE) + set(CREDITSDIR "${DATADIR}") + else() + set(CREDITSDIR "${DATADIR}") + endif() else() set(CREDITSDIR "${CMAKE_INSTALL_PREFIX}/share/doc/rawtherapee") endif() @@ -216,7 +224,11 @@ endif() if(NOT DEFINED LICENCEDIR) if(BUILD_BUNDLE) - set(LICENCEDIR "${DATADIR}") + if(APPLE) + set(LICENCEDIR "${CREDITSDIR}") + else() + set(LICENCEDIR "${DATADIR}") + endif() else() set(LICENCEDIR "${CMAKE_INSTALL_PREFIX}/share/doc/rawtherapee") endif() @@ -225,7 +237,11 @@ endif() if(NOT DEFINED DESKTOPDIR) if(UNIX) if(BUILD_BUNDLE) - set(DESKTOPDIR "${DATADIR}/share/applications") + if(APPLE) + set(DESKTOPDIR "${DATADIR}/applications") + else() + set(DESKTOPDIR "${DATADIR}/share/applications") + endif() else() set(DESKTOPDIR "${CMAKE_INSTALL_PREFIX}/share/applications") endif() @@ -235,7 +251,11 @@ endif() if(NOT DEFINED ICONSDIR) if(UNIX) if(BUILD_BUNDLE) - set(ICONSDIR "${DATADIR}/share/icons") + if(APPLE) + set(ICONSDIR "${DATADIR}/icons") + else() + set(ICONSDIR "${DATADIR}/share/icons") + endif() else() set(ICONSDIR "${CMAKE_INSTALL_PREFIX}/share/icons") endif() @@ -245,7 +265,11 @@ endif() if(NOT DEFINED APPDATADIR) if(UNIX) if(BUILD_BUNDLE) - set(APPDATADIR "${DATADIR}/share/metainfo") + if(APPLE) + set(APPDATADIR "${DATADIR}/share/metainfo") + else() + set(APPDATADIR "${DATADIR}/share/metainfo") + endif() else() set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo") endif() diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 44908cb4d..1d184899f 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -12,7 +12,7 @@ fNormal="$(tput sgr0)" fBold="$(tput bold)" # Colors depend upon the user's terminal emulator color scheme - what is readable for you may be not readable for someone else. -fMagenta="$(tput setaf 5)" +fMagenta="$(tput setaf 3)" fRed="$(tput setaf 1)" function msg { @@ -125,11 +125,16 @@ msg "Removing old files:" rm -rf "${APP}" *.dmg *.zip msg "Creating bundle container:" -install -d "${APP}" "${RESOURCES}" "${MACOS}" "${LIB}" "${ETC}" +cd "${CMAKE_INSTALL_PREEFIX}" +install -d "${APP}" +install -d "${RESOURCES}" +install -d "${MACOS}" +install -d "${LIB}" +install -d "${ETC}" echo "\n--------\n" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" -echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}/${RESOURCES}/AboutThisBuild.txt" +echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" @@ -250,15 +255,15 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/glib-2.0/schemas # Append an LC_RPATH msg "Registering @rpath into the main executable." -install_name_tool -add_rpath /Applications/"${LIB}" ${EXECUTABLE} +install_name_tool -add_rpath /Applications/"${LIB}" "${EXECUTABLE}" ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder." for frameworklibs in "${LIB}"/*{dylib,so} ; do -install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib ${frameworklibs} -install_name_tool -add_rpath /Applications/"${LIB}" ${frameworklibs} +install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib "${frameworklibs}" +install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" done install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli @@ -370,5 +375,4 @@ CreateDmg msg "Finishing build:" echo "Script complete." # -# TODO filter out the benign errors -# Build a fancy dmg +# TODO filter out the benign errors; Build a fancy dmg From 4e4faafb08cea176173e86f1403d16968e36c9af Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Thu, 20 Feb 2020 03:14:46 -0800 Subject: [PATCH 110/264] mac:fix destination of comconst.json --- CMakeLists.txt | 10 +++++++--- rtengine/CMakeLists.txt | 4 ++-- tools/osx/macosx_bundle.sh | 6 ++---- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a9f96a4d6..403314b07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,7 +150,7 @@ endif() if(NOT DEFINED BUNDLE_BASE_INSTALL_DIR) if(APPLE) - set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/MacOS") + set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BUILD_TYPE}") else() set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}") endif() @@ -266,7 +266,7 @@ if(NOT DEFINED APPDATADIR) if(UNIX) if(BUILD_BUNDLE) if(APPLE) - set(APPDATADIR "${DATADIR}/share/metainfo") + set(APPDATADIR "${DATADIR}/metainfo") else() set(APPDATADIR "${DATADIR}/share/metainfo") endif() @@ -561,7 +561,11 @@ install(FILES RELEASE_NOTES.txt DESTINATION "${CREDITSDIR}" OPTIONAL) # The standard location for man pages in Linux is /usr/share/man # Use "manpath" to see the search paths for man pages on your system. if(BUILD_BUNDLE) - install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/share/man/man1") + if(APPLE) + install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/man/man1") + else() + install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/share/man/man1") + endif() else() install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1") endif() diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 3ac8a8071..8d13f0d6e 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -196,7 +196,7 @@ target_link_libraries(rtengine rtexif ) if(APPLE) -install(FILES ${CAMCONSTSFILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/RawTherapee.app/Contents/Resources" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) + install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) else() -install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) + install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) endif() diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 1d184899f..884979aba 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -12,7 +12,7 @@ fNormal="$(tput sgr0)" fBold="$(tput bold)" # Colors depend upon the user's terminal emulator color scheme - what is readable for you may be not readable for someone else. -fMagenta="$(tput setaf 3)" +fMagenta="$(tput setaf 5)" fRed="$(tput setaf 1)" function msg { @@ -125,8 +125,6 @@ msg "Removing old files:" rm -rf "${APP}" *.dmg *.zip msg "Creating bundle container:" -cd "${CMAKE_INSTALL_PREEFIX}" -install -d "${APP}" install -d "${RESOURCES}" install -d "${MACOS}" install -d "${LIB}" @@ -278,7 +276,7 @@ for frameworklibs in "${LIB}"/* ; do codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}" done codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" -spctl -a -vvvv ${APP} +spctl -a -vvvv "${APP}" fi # Notarize the app From 4dbbc405391770d43c8fa7caf9ce25b7d1bbede0 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Thu, 20 Feb 2020 11:43:11 -0800 Subject: [PATCH 111/264] mac:config.h.in use macos extention --- CMakeLists.txt | 15 ++++++++++----- UpdateInfo.cmake | 6 +++++- rtgui/config.h.in | 8 ++++---- tools/osx/macosx_bundle.sh | 15 ++++++++------- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 403314b07..00604052e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,15 +150,20 @@ endif() if(NOT DEFINED BUNDLE_BASE_INSTALL_DIR) if(APPLE) - set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BUILD_TYPE}") + set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BUILD_TYPE}/MacOS") else() set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}") endif() endif() if(BUILD_BUNDLE) - set(BINDIR .) - set(CMAKE_INSTALL_PREFIX "${BUNDLE_BASE_INSTALL_DIR}") + if(APPLE) + set(BINDIR "${BUNDLE_BASE_INSTALL_DIR}") + set(CMAKE_INSTALL_PREFIX ".") + else() + set(BINDIR .) + set(CMAKE_INSTALL_PREFIX "${BUNDLE_BASE_INSTALL_DIR}") + endif() endif() if(NOT DEFINED BINDIR) @@ -168,7 +173,7 @@ endif() if(NOT DEFINED DATADIR) if(BUILD_BUNDLE) if(APPLE) - set(DATADIR "../Resources/share") + set(DATADIR "${CMAKE_BUILD_TYPE}/Resources/share") else() set(DATADIR .) endif() @@ -180,7 +185,7 @@ endif() if(NOT DEFINED LIBDIR) if(BUILD_BUNDLE) if(APPLE) - set(LIBDIR "../Frameworks") + set(LIBDIR "${CMAKE_BUILD_TYPE}/Frameworks") else() set(LIBDIR .) endif() diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index d1f532506..ce194bfe9 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -107,4 +107,8 @@ endif(WIN32) # build version.h from template configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") # build AboutThisBuild.txt from template -configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") +if(APPLE) + configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") +else() + configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") +endif() diff --git a/rtgui/config.h.in b/rtgui/config.h.in index 570f263b8..558c25f76 100644 --- a/rtgui/config.h.in +++ b/rtgui/config.h.in @@ -24,10 +24,10 @@ #cmakedefine HAVE_UNALIGNED_MALLOC #ifdef __APPLE__ -#define DATA_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources/share" -#define DOC_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources" -#define CREDITS_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources" -#define LICENCE_SEARCH_PATH "/Applications/RawTherapee.com/Contents/Resources" +#define DATA_SEARCH_PATH "/Applications/RawTherapee.app/Contents/Resources/share" +#define DOC_SEARCH_PATH "/Applications/RawTherapee.app/Contents/Resources" +#define CREDITS_SEARCH_PATH "/Applications/RawTherapee.app/Contents/Resources" +#define LICENCE_SEARCH_PATH "/Applications/RawTherapee.app/Contents/Resources" #define LENSFUN_DB_PATH "${LENSFUNDBDIR}" #else #define DATA_SEARCH_PATH "${DATADIR}" diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 884979aba..da44ed51e 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -130,19 +130,20 @@ install -d "${MACOS}" install -d "${LIB}" install -d "${ETC}" -echo "\n--------\n" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" -echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" -echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" -echo "Bundle date: $(date -Ru) ZULU" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" -echo "Bundle epoch: $(date +%s)" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" -echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${CMAKE_BUILD_TYPE}/Resources/AboutThisBuild.txt" - msg "Copying binary executable files." ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" msg "Copying Resources directory." +mv "${CMAKE_BUILD_TYPE}/Resources/share/AboutThisBuild.txt" ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" +echo "\n--------\n" >> "${RESOURCES}/AboutThisBuild.txt" +echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${RESOURCES}/AboutThisBuild.txt" +echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${RESOURCES}/AboutThisBuild.txt" +echo "Bundle date: $(date -Ru) ZULU" >> "${RESOURCES}/AboutThisBuild.txt" +echo "Bundle epoch: $(date +%s)" >> "${RESOURCES}/AboutThisBuild.txt" +echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${RESOURCES}/AboutThisBuild.txt" + # Copy the Lensfun database into the app bundle mkdir -p "${RESOURCES}/share/lensfun" ditto ${LOCAL_PREFIX}/local/share/lensfun/version_2/* "${RESOURCES}/share/lensfun" From e53113ca6d28f77a498cf68d9bb6451f2f44343e Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Thu, 20 Feb 2020 12:01:11 -0800 Subject: [PATCH 112/264] mac:add a destination --- tools/osx/macosx_bundle.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index da44ed51e..6ceff6592 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -134,7 +134,7 @@ msg "Copying binary executable files." ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" msg "Copying Resources directory." -mv "${CMAKE_BUILD_TYPE}/Resources/share/AboutThisBuild.txt" +mv "${CMAKE_BUILD_TYPE}/Resources/share/AboutThisBuild.txt" "${RESOURCES}" ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" echo "\n--------\n" >> "${RESOURCES}/AboutThisBuild.txt" From e81d09aa567ddc065805e737141de9a576ecb461 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sat, 22 Feb 2020 15:37:25 -0800 Subject: [PATCH 113/264] mac:build a fancy .dmg --- tools/osx/macosx_bundle.sh | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 6ceff6592..e68d2659c 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -110,7 +110,9 @@ EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" -echo ${FANCY_DMG} +if [[ -n ${FANCY_DMG} ]] ; then +echo "Fancy .dmg build is ON." +fi APP="${PROJECT_NAME}.app" CONTENTS="${APP}/Contents" @@ -134,13 +136,13 @@ msg "Copying binary executable files." ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" msg "Copying Resources directory." -mv "${CMAKE_BUILD_TYPE}/Resources/share/AboutThisBuild.txt" "${RESOURCES}" +mv AboutThisBuild.txt "${RESOURCES}" ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" echo "\n--------\n" >> "${RESOURCES}/AboutThisBuild.txt" echo "Bundle system: $(sysctl -n machdep.cpu.brand_string)" >> "${RESOURCES}/AboutThisBuild.txt" echo "Bundle OS: $(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -mrs)" >> "${RESOURCES}/AboutThisBuild.txt" -echo "Bundle date: $(date -Ru) ZULU" >> "${RESOURCES}/AboutThisBuild.txt" +echo "Bundle date: $(date -Ru) UTC" >> "${RESOURCES}/AboutThisBuild.txt" echo "Bundle epoch: $(date +%s)" >> "${RESOURCES}/AboutThisBuild.txt" echo "Bundle UUID: $(uuidgen|tr 'A-Z' 'a-z')" >> "${RESOURCES}/AboutThisBuild.txt" @@ -268,7 +270,7 @@ install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABL install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli # Codesign the app -if ! test -z "${CODESIGNID}" ; then +if [ -n "${CODESIGNID}" ] ; then msg "Codesigning Application." install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements @@ -281,7 +283,7 @@ spctl -a -vvvv "${APP}" fi # Notarize the app -if ! test -z "$NOTARY" ; then +if [ -n "$NOTARY" ] ; then msg "Notarizing the application:" ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` @@ -312,6 +314,7 @@ local srcDir="$(mktemp -dt $$)" msg "Preparing disk image sources at ${srcDir}:" cp -R "${APP}" "${srcDir}" +cp "${RESOURCES}"/share/LICENSE.txt "${srcDir}" ln -s /Applications "${srcDir}" # Web bookmarks @@ -319,8 +322,10 @@ function CreateWebloc { defaults write "${srcDir}/$1" URL "$2" mv "${srcDir}/$1".{plist,webloc} } -CreateWebloc 'Website' 'https://www.rawtherapee.com/' -CreateWebloc 'Manual' 'https://rawpedia.rawtherapee.com/' +CreateWebloc 'Website' 'https://www.rawtherapee.com/' +CreateWebloc 'Documentation' 'https://rawpedia.rawtherapee.com/' +CreateWebloc 'Forum' 'https://discuss.pixls.us/c/software/rawtherapee' +CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new' # Disk image name dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" @@ -330,10 +335,25 @@ dmg_name="${dmg_name}_${lower_build_type}" fi msg "Creating disk image:" +if [ ! -z ${FANCY_DMG} ] ; then +echo "Building Fancy .dmg" +cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" +cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png" +SetFile -c incC "${srcDir}/.VolumeIcon.icns" +create-dmg ${dmg_name}.dmg "${srcDir}" \ +--volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ +--volicon "${srcDir}/.VolumeIcon.icns" \ +--sandbox-safe \ +--no-internet-enable \ +--eula LICENSE.txt \ +--hdiutil-verbose \ +--rez /Library/Developer/CommandLineTools/usr/bin/Rez +else hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" +fi # Sign disk image -if ! test -z "$CODESIGNID" ; then +if [ -n "$CODESIGNID" ] ; then codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" fi @@ -374,4 +394,4 @@ CreateDmg msg "Finishing build:" echo "Script complete." # -# TODO filter out the benign errors; Build a fancy dmg +# TODO filter out the benign errors From fc4db9a5021f586b0b48f634995091bb9b5e1454 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sat, 22 Feb 2020 15:38:51 -0800 Subject: [PATCH 114/264] mac:images for fancy .dmg --- tools/osx/rtdmg-bkgd.png | Bin 0 -> 375796 bytes tools/osx/rtdmg.icns | Bin 0 -> 1323996 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/osx/rtdmg-bkgd.png create mode 100644 tools/osx/rtdmg.icns diff --git a/tools/osx/rtdmg-bkgd.png b/tools/osx/rtdmg-bkgd.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd9b9d422d2ed51bbba349527d9b79e8f6e2199 GIT binary patch literal 375796 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

jK#c%<}?7QpRr{ob%S61!21RR3X(itku@*NdYy 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%0A$j>lQ3Y=!HOhzQ)OtY=4N9`)Mjbpp2qU!- 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∨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

TU$7`UPuDY`hB+j49e{@3=X>M`OyDL7- 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%0D;wW!&k_fB3W6 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 z

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

;-?pVneCe-pzOPOG07L-2(?@;gs`H%$Gt2nu!g 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 yfR27tNB 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%0DvJ>wA3L_4C=nhdx%@l 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

<8oS*ZJ>OF;?36 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON D5300.dcp b/rtdata/dcpprofiles/NIKON D5300.dcp new file mode 100644 index 0000000000000000000000000000000000000000..2c7566c8cd78547ff598f94a97d9f333d3082f19 GIT binary patch literal 65350 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

+BJ270IlF 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON D610.dcp b/rtdata/dcpprofiles/NIKON D610.dcp new file mode 100644 index 0000000000000000000000000000000000000000..a5a05ca34feb3ac6947d7572c59fc7da8f5bb2d6 GIT binary patch literal 65350 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON D7100.dcp b/rtdata/dcpprofiles/NIKON D7100.dcp new file mode 100644 index 0000000000000000000000000000000000000000..332157fc96dd4ff99242aa420804b9e507ca8610 GIT binary patch literal 65350 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

dKMxfEE@9hVkA8>7aMFM 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 z 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 CiGS+= literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON D800.dcp b/rtdata/dcpprofiles/NIKON D800.dcp new file mode 100644 index 0000000000000000000000000000000000000000..5f0ebba8c15c2bdc7fea753cdd128f0e35a3def3 GIT binary patch literal 65350 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­vd}GZZK2*|_(3C=a1KZ^sqN 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON D850.dcp b/rtdata/dcpprofiles/NIKON D850.dcp new file mode 100644 index 0000000000000000000000000000000000000000..806e1e9bb7ed9086baeb92d15b4d147228aa8bbd GIT binary patch literal 65350 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 h2%+)$+(5BcG%@+1mQr~;w?LoIv`~1KAd8g(z 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON Z 50.dcp b/rtdata/dcpprofiles/NIKON Z 50.dcp new file mode 100644 index 0000000000000000000000000000000000000000..beca667a73a76ef894b17f0fc83f77f5cdc0fec1 GIT binary patch literal 65350 zcmY&=1yoe+_cgX+D-`gv>n%7J`Zih@xV57wY%C zzW;BnAFeg)UeDYa?(8|wdCu8qpP4ml@s!49W@atTEY8(6Ys${@*`wPzbF(JwSi&CN z|L@$gj+xo&bM?&F!K^iVtogt5cI^Dy|GjoSd-D6a`eyZ*Z8tmrajvOZL>Du&BkcU= z|D87!nVHqF^ZM)>@84!-zu5KvzURNM`OV&^1v^GDyT$qc?je(%xBI{I-|Rf<{D0T~ z`>VJ&wQ-;9ZyqNzZNQ zdx#2^jYJr|cL3%0P+^T)h~`$KXxB9rzV~7G?LUqld1~<5L5$c%qbX;i7QM`**qJ_n z29DI=z%eQ2?6M~PO(i~MO7K(Pg!WF6NK*_XmMOW{924*VKP9p_5Xdx;Wn2MVY`T`5j)RYTjp zD~;Lg1kcY(DgoX6z_O)Bhez^oo347b^V*RgI;EEPfMwFyrT zxnrEW2*J%;B51lh=9Y`F`@xrqJp`9TA4~-8!-Q@7|yFE znZ|cAAo;r((^@VwJvP&$S96B{wg6MsNez@Q#JCpIj-NYJf#0rTEPCz8_a!le??k9+ zox~5d5n=EO5hiZG%};T1!GH=Oevkdek3Zo8x7R{&x0{eyB|?2(gf~qsXil~SvkpkG zaIqz+?Oc&Q(G~67%&GLC6kF!GVwUL@AJ9mQk}nd}Y&ypmOm#-d1~Dw#pXP_T9LM5t z5#*hV__cG6gIg&^-nQ5L;X#g=@>+tfaZTtA=Y*ACT(L}JLs~0mxDQcaPCOJwoxA!7^$ZWzj)q0`LDCW;w&A9MEUa(|77PY1Z zrFT5BJVA_Y*>$*%2R)HfB8HWHU9Ppz12fq9FZ~q=Zy52`PmInHX1Mc6gPQ(gOm|DG1G868x{IXGOUgC=fj@5AWJ62GoSNgV_!x z*3Ph`Z?Ek^?rL=ZR>Oau#4uMYYvD}GY`LiMUg*_U1n)6D=W4l>N|_I_;Y z_*jDe-Nmq(_z&MRS%QnVBq$N=?K8;w5z6!<5DzaYjE_p`h3J83B;S(S}@JvFBgj7SIjV9py9(WI-?uO(E3&i z-@Vgu7@sRJa%?d_Oy+_IuNAd$ZkH9wU0vsko=rudhN;}N_x=dz!s4?elbg9K5O2qe zV6pTRw{mh2H0wp^rO)JI^MYWKvG``6!Fe_ehBu4hbBoitdc%WJP$t5Q&*@y&r`oOPFAJQ^>CbwMUKKox}PQ^kn(N#TzC3V?377`fkqxGe*G z;l;kYpEgo%=wT0hVXkpXD~MR?L_02e$+i(!dE>`HCS9citGe2WkV-HKo= zQR4YkA$n}w0^4>pL6Kb4~M$Q7nh1{u;XNRhcK)6`*#D{@t?7_oOg z-)W-+CJQ;5)p6w&RU(Y|B(H_@mvNW55Muy_))Qgrrd!-hhQs0(B7D7F&UMNNLEWw* zIGni4ZO;wGxltmVA5h6n+!Kaji$wT1s*>}q3PZ_0wifzTa?J*X!&)PPolPYdv@9Iz zXokt%yIkX?;cz4o#(%2dtlNd-!z~d^>M~Ae7lx13>^-~P;EwkTMcXGLRDHU@jm-+e z`l}+0^vdMYfBIo>AiJNUFz)qhFSslbVWE?O^V#o?7VMrg^#|2~i>4&;9JK zhqMg{RUINa_ON*1ggm~rKmV02P#l$9JD2p;MVy*^l6%tG|8w4j` zHM+f%B7eoMNdvyAF!Z4-#^%qO_>&(D5xf6O9L)=7l1b~W52_eh8aiO@5kh6{WfiL8kt>{wjGZL^L- z_&gErulUL3m`6djmhGowzH?)fB0;;Dk1hPn<-Lr6oju#jF2CV;pA$$uERc{9}8IYpx5%N_PE;_Jv%DSpdRji_j<|ja%&KgZgaUUELSS4OM$$>rEkgX9aM{ z4FCH(+5J~~aamp6(5saYgTvjprTdLo_{IhHcQoAIwnli55hAXM6ZbLJ@ORC2kDSFt zKGI{9lI^Rz+?U$bnLEU*SO-0l`lq2*TOJehL`HpNs}E_*z`+=LSc9O zA{DX%U9sHqO5VYl3M^h(8)w(?^#lon!%^{st+nF~1kYAo#WrO@^5ZN(aT_b)^vXXP65l##orDh1l21To9iTiytq9 z=)b>-K;;z+i+4gS8`4;?u3Iend=g@Gn}&k?DKRKx@m71Gu3*N)D7^m3-ls_oXYnWk zlgvcuI^-=U7$1%SbwwDr;6B%~VF+^A`S`+OZnQ@Lcy>)uy)#_e3SVqx?|JBM61T6= z3+vha4~mQCI=1%2z9boe}==Vg%I7oJmKcWh2Z^oA@2I#;C4<7M2(XWeu??q z2Xj9>y(mPgCY_5Dd!tVi5kjY)iteft|HTvj|4*!T@_m7%8cf=ioABkZ*cFkX$C&o(9FLWMfH^G1*lceY( z9KhW@s>7lZX)Qnh-~8FM*FsRYdo0eK7eY1NQZP3$9<#iKuv*z(;O>-wj9o(9YGftw zDM^GC!)?qFE5Qv)!q@gfmhV{!+_om8?>iU7Bw7ic8Sm^|;Qhf;FzR;_YG%4%zo?xc%pwVvU0iT?TU$ZEg#`Tb-5FyJwi4WGeG+T$ zvfOB6Gr`&yu{d_s8B0Gj6wF&34X(-=VP6EjxE?OVdP5$!JKhJKdxq5BfxgHqKa{Jb{K3r(HJ3^XB;Jrlh7w0-!31(c7acdj6q1#~z5WVxS z-MLzV({(v+W=}l^yGU!r=li)p5p6TUraADbrA)bVdua4uS(GQZaL`Gx|BV7cAJHf|$0>5FczOIQuLK zzaBclJh_b^q)j3Uc_+mFY#|u;G9JOFoY3Zd6M^hNEL`t6;bc@jfy0a_te@zNuiw9M zb1TC!vCJ8>K0oIcyN5vI>w=l{E4Yu|f#|Vci0aZ}Zg5k7OztbfmWRZ(`sM?5kO-;; zr?}g5y-~n${uYwJeR}1I%PhAaw82{oK>@UIXFJ7GNtQ#^1OCanl z`fCqi_8GSJ+=G1vnBGZh;oNJMwcvzZGWx{|F{h4=V0Mo*gf0`JYKM*BmU#vi*B3$> zVcM5ba?hm^(ZbgP%KM`s3CD3$}J@N*(dqsfFMi!@vGhN8IRaF7R#;kB*a^FhWpY z&^;>};=4}BkN(MhIUWK32xkZsZ@3ow!(gFuL9q7&uKYwWu1SR0XmgYE?-7Xn=_2eM zd6AQ|y1?U|x1v{8;uTAEvj(ei<2Qfy6#B;aYJt55#!|!7_clNkDwlkh# z^9I#loELaVkYM!S9zHT+*3#NIpX%O0&{2?%M*c$h%5JLC|?q4(hdZ!MW)j1n1u7;AMg{np<=bZ0nticJrMvgscQ_ zo8@BpJ11mKw-Qvx=AgpM31tE81w-rQU^J^^;_ymy3?texONoh+oDbVTB} zwgOS=DYzeY#KTXm1=b@o;kL*T)+<{IhKSM;I?EBUi<=3)#-w1E&=F7l8w+;$C1UbJ zM=b18U$Ej>Jet`tpKtSgU+>no4;nqkjZsLOPKb~?;J;L$$j|(bK-Q^a3 z2*JRHA`}{~aZ6o;aN0`*&FphrOq@UJv6^e`pVQoZhVukgGY%?D=T5Zq#?Iej%s(H` zxFoU={5qe9)louZkF^jy3*s^V zm=Kd1SqO&SAat55gu1M)z^KWGTW28(PqY>ExSfxMEI$8P-B!@FARpzt3x0lTBk)_B z552(!6L+)`l*STb*0^A3RBM4vI*-vkT`()6mB2x2g2gju*eq%(*xw}&S0kOV%D1_o zSf7iaHO{cy)Kswgb~ez+87t2<7M!1Q8kXdQE4Ld6HrJ%%v&IR{4%8I{C!}D&VkfMz z{>5!SmWX*NOF_FI<8PTRYvmHWpNLDMo)C%ae7D1RL#2 zP|nuTu6~UK|5#jsowXQ8${Pxr^}B+sjbc2}HWZ{>EWyesF=h>GC>YYH1TPpzRFl;} zF#7Ffd>O?4ZifbfR9z81?U&&4l==dv*B3D@K>~fhdV)Bs3mE-Of;PEz1ahl$_}y6w z`K>>k`14t0E@b?}=AT@GlF*IqDQ`2sa2IpVK%6GUpyThkdF5GX!fLd65ihyxtuisT zy(`itKIVSzO+_rL)6Oox$F=*Mh`D=R(YF3=Zr90p%yx5y@0u&zG|w13PIbkgL+82d zlabhU%@xuX#P!}9hRhGH__+QI7s+ro*~s8`HH~Z4G!RC;43D;?aXp^+LeWKrKULY> zJ%;~gmTzZvi|0JN?5aRp#xrc~ z_LQ^he-~8@x2tuZa7}vOg-p-t)_#w<=c)>X3}ZF^rfROeT{%*&OQDuL;-bIY!4P{_ zwA}lUv+s2q4sBSC`lpKf(EKJU5@hi0cAx8UrWB#m2^wd*k8=uanDCX#yz^8y1D z!pxT{-0qpjow$*KIUCg|U3Z%6QYRIMuc;BdB$XSyEfIC00oV2Q$Oh>hf` zE=OZiD=pSti{N@Oob_TYntq7jA{frAK5AL+9l}j&$M}IC3amU7#wCRN;h2Y_mY;9) zJi&E~^Fdor8I~>o5C4|(+Bhe=E1_9dR??nT|jPZo<( zhO#vha2K0d-uTcelatg`pwAL1F89meq>syy_fv|fk?EY*o-)Y8SxwYFjr$RN8&_G~ zG%_iLJE*&f2Tx@Pe~`qjnsOaqUFAsePT-`MuVQH@1st;DxLqSkFeO=mf{D>wPk9mg zOjP2t^aN+0d>-%4D6u^wgtKXN7JWykusk4u6KM0Gj8LKOXdmwD_-tHnsm55nJ9n&C zCPYWn$cWK#F0)ec`i>e;^-3-*DiOA$HSnD!`?&^v7l^o? z3}?%^T6pA1xf2ZM%L!T>n&!-HX%vk9jWw7zM)cR-X}AX4&&jy927fd$Dsg_Uo;xq} zg^OH)tJiY=#+gs{wQ)Xk-pIAcFNcD0p4Oa}JFmTq&`n}^Z&Yzf6D#q!jRaQ?E4ZCQ zD)Hs41Of{=H^p!li|wUo{@IngeXIg&d$_`*TFNQvm1E~sSE#ckT>S}maQe6m{g;cm zu|sb`(M^tmF+wip<#n_ukYoOv%M z*`3^T?g9*rR7mN%nH%7G7Dt#52Q^#6nLW=#-c1$yE0=IjWZ9@1u7)IF4mW*cCQho= z@L4p4t8+9JDV1vM%N)l&y_AS812yowHH^EpEFQfaG_1bv%WZ8JgN1n-B<}x*>%nlo z-ck$gF^&soIPcu3#nrK+xXldbaj{w)@R;z|KK+gsE>_dI$94f|AE`!`*-9?qh#yuw zQPuME|E*K({ibq(4i#v1iuG2ujOChhl`!pRT>a?b+_krr2x58T$8CeShYu<-<(>rD zpZalWQ!3HjONy40`*3B$?!t4nE6gi;ax%Ug4}LN3Wmk9Z{qH-NoG3$fY!`0e_gi?m zT8`~IJ90;}ZlHNR1ui*Rac^gp;&r3~O)s?NMr2;W$H_`;9MOW)H7&-eG9~nUWA2yX z0=Q+&Z@bjv{IbqMepZEoX+JQwg$bek)fgP`8V(`ZsMe_AKBo%L4rZdmGc^|MEX96t zDvDUFNUL9fwye(DHg@w&y@M?$_+xHcsJHz>jT#Kj?FA>IY zo>HmB(#mVt#Bk1G*iJrD{ny^7p$_vWT}Pc&f%tS*iy0g5{^OhkvapoR+jbr)AKo3-;-NWo}65LBsLt%Xn zff-VK8taNhEh@3!))g|XGZvqyz@PpyJQ#0>BhShpeINr4?L>p;x6#*=@q~NVA}rx1 ztS2j2jWZus>|WhpC@|S`5_U&k#ZRpgeR>W=%B5mV>!X6)WDWhZ3s`YNg-LrG>{mSQ)o{u(Ru}F=X0sN$`+1a@HSdB}Qye8ciX2Ny42Hol}oHSXUiWlJ;wDzr@ z*pm74;h!2L-`7tVJ|iB|g^aUPg`M&J9*te$TI`HDFsU2ES@&BDF1Zsz8P2-ZIs|si zpR|$TtQ(}mtG%uN+9hjr_+}`ZWX5m~*~;qe)cSwzE>1eEALoQa3I51!bAujL-WTbsxfc62#^`&KntdAFbL*ku7dy3U7NK7uen^ zeQs&0-|`+l`?%uKv>v7{@po~3g$$uR2Aht4Er%Q9W5fK$nCdd$UQ;Z`(bZE-j|y*L zxmbZ-G~aY=@eQ09qQv82YfSSJt|5eRj)muUntrS=!8;ZoMxHrra+rD%ciyW|T_iR+ zjVwUG4mHk>Q<a=_E?#1cz4P7FJ-!MFjK6kBY`~AosA9cHDY70m<%bTgLegg` zhV5&`mk+;>v8+$=>q%R_&h1Lry2@}P+mdhH?=Ivsif%9@Kaw^VN|#nH-B&E+h2TuWII;ZAF$;U9zMY9sZz8kIm(yre1J9WT(P^o z3*Yi+6=qkvBIKKhck6K!{qXg82#=|LV{cTr^js?s*xnu5$?^-PG_{BIoz#GJkH# z`q?#dK0D8ZmkPG8nH2nx<~iucVgl!{1ZcUkvA5(!+Az>c94~yLx0=Zsv;_&h<)b<9yfIgWv!3KIgeh`OD z3q5wn=JMTlM&r7p9z7-}@ST}I4}PhKTPGhrkm1~IodGKM6Z|@c^YmT@yx02vwU1wK zKzHYmzc?37Ho(=)|F3=81_OeJ1@o5~&W#rvYWeg2;Pd>=PgU@(WWD2AxB2fAAF&>* z7~;qW{QJ4pnC>UR-qL4$v7s7G9Hi)Y^EE$ebT$52>WV_ad;a>mN9ZmIJBDUcxj#J9R$0gYIRn}&~krDYk8&QhVvfe-xQ z?ziB>eE6&KJ^w{@6_cVE&iU{7n^!JD!!#M6+rQ(lFD=B(GaA?`-tzK(JS@QWvKDXo zeG78%Fh`34v2XZEXEU*Dgbt6FzTq2)QdvHx!{8Qgc&R86SFQDESjsd5ra1Vhn12Sn z=0A*%#+%Q2+&o>$cVakS+GW7fb%lHY!`bG60rkF=@@pB+Q=$y8yMFGk{SC7lR+sQK z%%ATU81Q)hg}?TUhX!PnT>gu*_l?>(w=AyVb6Y&b^G8ghvab={5m)2Rd8Q56(VT84 zJw{bL>mz7elU1`Pc*Oc%%XeGQ=<|=^%ybf47Fkl0AJu5LT!y6w+f#AMBitJ$N1y8U zWd8X9?pP=gnBSi4FW$%fHwt(RY)?6;#QU>KM6%Z=+LvR4hYH=dw4*kSSWd!x_-=>= zHRyE>W4@?y?^Rn;PAh`7n$;9D+S1;Wg%Db5aUrn{Wo+m1CQyseu5IYLeGayE*1<8L zHT@~gL{NYZX`NbA52sX&X{X1v$X0ZEH;d02J=}-4qAh-L(EQQkU4BclsuvAwTLX&u zM%0nvy!E*OmJL4h{tRd9?M660u0v}W&VTwCk>UO2FP@v2-7@Jn|C8aIH^Yef*5Cfx zKQjAjtJYM>GytP=jJ5o^T;74Ujd+CNFGOfv-h(V|J;t~jVnihOr>x#ju|7|Nf%}Hg z+K{J+h+#R#$>G%T;8UD+XSxv@LA#TlV2G0pZ!1R9ryY;cajP8tJB^~&p^xA)O98K# zku+_~0}L9Vgj320>VEMaIyP2e`+8n(~S z;Gp?X+L2p?jQbiKZ8L;C>YRh}pcc`+228uzp`RvSB#C z+G#{Z-?sEG&TU^BAuzY0)&IulI3qarz5i>sWA7V3hD7-3RnxFa9Yvyw-Cn(ymeR7VkI`4Cz}I0*X-|hoXt+y> zm>Y{};DIV&z6w2hEuu)5O2`JO@m;)t4xYP%k`HP`w4YC(wwJ=sPlL$ZxpaT{WwaW_ z@Z2|tiWi?l^CB(Md(Wnd5+0pcertF-ldebRU`@3Sn-XVGz3Z6>+pWiv+yB=G}>*Ih=2L_L0zZPsh)9o{L%ocACu|rfhe?K*lsBuPu2|Q!e>UjHVh;`hNsIx zH*ESc;xEoO2D)M5szHD4`OF?OY#Oz_vIu>Q$|O5?tE8k483liF)Ns^Kj6XdN+Cr zCF8iJ-n1j%O)oIxBI`L`wx{DApTn7#V~)r9rvZL*{Juc{Fo!~EITmRyHC z!~t&=WcCNB1X&-4L%1|cI!1eSVYSHjIroPf(TAkh0CHyjUS}oLzcT$Pp zIoS8o!6I%uE&9mA_p}a44Y$#;lR4-)gY~C(Y@xfROnkql$EV^=)S^!+F03*@Fm@vy zsYpPV`v&OZ)>GB3SlDegg73bLcDIc}uWBQfyjo5j7|xA$xnWw`bn<05AOFJej9x&i zm_K_axgp0evZ@$Ib~?Y62Zc+zw1W-&P>P(=adPtfj#5+_`gl-r;hK2<7M4OYim$HZufL8SlUUySTuRHnUPko;EjCw5D7WAo6fQcvDHYSj zA3U;H>>YVYL~p!u5E-M#N`;Wfkcoa{4EQZ{rj`#<@Q&?M&xMYZE=hoRff1xUMlbfo zV)h*)`UECj)Cw?1=&|CLST!*GspbVvOo_B4M|08#|**wp7RS!Md* zHS3o7i;4@Hd{u!hCgF5O^i0*bkrsN zB|0{cz<#F(ZAyL(&qh+%_4J`tr{CZ}Q&+6@@S_Kx-k@1)8O)#f(*)Z$m}e!&i^&1B zdem#kyDA{Q<4+xyy~L`%N(k=y(Uu3#U_Xdy9Ynq~=H+7?9H_?B58fo3_z;PmSuPRk zMW%rjxN}c~hATbEx6utOH!#kjl?Qd1Pz=c^9a>&=qgD6Mp&qNV_DGBr{DFtlAwBFS z8Yt;t4w{=Au<@skzAnmyGS~po87&>qr$9HLPV#ZxJreji&74zq(JKgce-T5!hR&|*c_O_bhioId)?hgGd9i9K}h6&~#xcAAM zM#ZtcLgs-EExjqFpBg8MJrHN>OPAisvB%1@R@|5w;Z8$y%Fy_m2#-Pn=+>x86u%Lp zYeX2C&%2M0Os|%7Kay6es}OikifB^|ZEN=cd&^w0=WrYy|5^pFTQbb(6;Dk@RpHW2 zrk(m8M_Cp3(Ds%BzCGfo)#tl7bW;h*jTjoCE{EZ&3QtBxQ+)Vs%s8t?PoGHYR8)#x zKCJHO6+r_AU&fP}T0BV)r!l#O*#1_Fvy;Q9L4*nMdL1rY389&9vk=>t)obg5DJn3X z)sK4ocoj&QQAya&^kI8N0d&4$JR(>QHll++wa<*gtpi3}JMBwWiQ(8(V?@kGA3FOi z7+y@P@w>G*`ECqAMr($1u_uML^2HB-cdS_DPQ{GR_w7~NZygc>=#B;Ri(n7TY#%^} zz9=!_sR!PA1=2T1IaZ9QjdPcWfz*Fi5q`cBA^l7g9m*|%;~g<%`xB_u)2oDk?liO#}=24{>D^bAF z=`{7feHG&!l~^HF( zr6`$3|2YHmNG)35OQf3Nr?GH~4)w++P;quDK2)$A!y}$f`X^xhK|Qo@V(Igh7>Mf_ z(0N`AWh{$8eWL*d$x+m&cPMstWI2OPB)N_cM2lz^H}ofHhtU@^hq~dDc{t^C@xsc} zEcUvGQgyW(?BR|heL^Ue)qj@?-Es6{5UpgIG2t8!)Eo<>^$S!;z3RdAQl2!5|Z3qm3{>je5nv?C(7|XzkptEE5tpf7yRs8K#qz6 zTLYS-T|qWfg?qU5zMjm%#EFKPXd;SkXP6ZolzjYsC$z6Jn|2q&t3GbHnTH(X=GU zfNiYLR}~&fmvglk^~N1TKb)WzjTr~v$go`=PL@ur=hN5|Ejx$&#re69C-w&fQ>QaB z1n;el^V^&#ia(slxGxc2KTD2eN%^(bGhXFO8Rv$V<~8uj|KS%QZb$m(SbI((C& z&(vb-*gOvNF1f;L%T>B`Cl2;uGDI#erK%b6FmsW^w*Pgy%y{*f4GR2hbe(cO#-VJg z60uE7$=@mtpZlqBX3<%%9Ws4*+P66n*YE3aG&7ghmiS?OpdRK#<-te4nz@s%8B<|pe zroRnHIGaM9HnF|zq!C4eM0$ErkE^TPu<%|SHDAvBwvju!g+5=9&x^+iT~x#5fZIVQmZ`yXu~w&XY4bnW{E#qO_ac~ERR~a_`#<}f?sC~$tv3)Lrv`an^i<@ z+6SVu+!cR>SIB8-5VkL7_hDN~7i)r$(^HN={ce!Tmi5nxmuN;;A9Sf^y}SYE zsONc46oqQhs)p!3%U#zp?tO#r8TyrF#Ae13)ft{e?E(!<*Q3XRm+4f!K@S%v1KQ;# zQ$asg(+o1gCh;Ws|I(ne(ufH~F(kXI#zZ}v&*>OR>E{?PJBjUyv0+r5qr~8M?npl# zOvW4qx`lhd+cSV#70U5!sV6!#38o>8_ia<^fk(ZAsP||&yoT4tdH!8*O0E}xdK(*R!nJ!y|M2S>;INrp{EDEQO8dX$?|JtZs!ftJ_V+RU!$*Ez0r2M z5}p^X()(`SFlRFz-7l5UX9q6~d#u92uSN9D&l68r4=&K{0u{%3VB2O5{_q8~Cxhj- z9ko~!!PDJ5H`rd+;?L4tGGp4#-YOl_QJ*5|IRm;((4$^>8a<8GL&3PXud9=2oSP2k z{8;WcAfA2-wb;)%iY8s6X|sa{)t`)L$(^7w2Q`j{yP>Xc2(1>Yuy3I|<_rm>5Dz6j z{$_g9=6*CTQGp?e9CXP|4Jh5P_3Mc1ZBw=$;obRs2gBj<@mhJP!%;y&J`4r&9X2Dp$?+IIL zmeFq5!ScXYN!cVVF`_BsJ&c<(>C#gJS~D*6Me|f@$?ETxjJFRxl|YX_vfQwq0onUv zY1bbuauW@3m>5YvT4}Lhl@Y&&htcGI8eFgEhDED_$aSU~x*;z^|cgMFSYP1^6)0L6#IL&(fGu(3NrPK{2 z*&5UdI!yr=jR;~qf7yX_x>Lu9N9`Gp*E5;A4=}(ZUxz2><7wRzJ?`w$qi}aLEpyhP zr-cFPjwcuwq(wyzn;Cl$~~9$kEhi&ep;pF759`q1Z|N?co28|O2RdkJK>-GI{rbXesYOKB;3Xi9bXX&p(PKXn*zRF8S-p;R?Z zhnkKC(8fTz@5W*h8L(=IFWFUT;J?j?!a<(YhiNx{H*v#98*l2`iRJr@ccNpSR28U3 z3foWr*U$gA-|ZK>nFikQz%G>tx6O}}J6n$yE!jMdi;RMgx?!mYn-{CrQd+(d4ptH@ zZR<%>7aO4uWp(1B0J_x4h?RqwmO~p(w{47=!%N}q97{8%8WFzQ6~>|@T5UAqFw-0C zwa%cNuSOh*mEl|GEJ|XW&4qPxtW3zEMVH)|c1wY!g}LehPhC{!w8 zwIGKYR=Ar*!Z;rpI*_A1vFkoUwxe zZTEQ5S350|vkdq!#f^kFG*GkHvh*Jh8c|1!+YO8;=;20ll34#?nGql49#mSRW_5IJ z{@D|As6NYOmb-|MYurSK*?q>c8vM?7TZ(0IYpJamsVjvv>6aeaOanF{QBG?;SzlrY z)5x{ZlP%*QTQiN^;#@CUeOQlG2c*c`8AQWQ>e1;p%eSK=D77)`KX|#~PNR6bCNtp5 zC>f;v*jlzSqRvAZqOPV+NQ>c& zKj|}3PiyBhY$FUV^|yHMLq zEpD-zu~?@df7X{%b(W&vX9J~M=uj3W#k+yN^p8Y`hJ#sOAUT908ON4T;EFX(qbQr@ zTYN&%t66=uF16Ip%J|pH?`zW6198J zeCLJ|F9#>mxZAAGb5lNL{JF|NC}o~|?eD;fS<8ILzWqlF;8b|1Fx5=)xF_JkojMOd@4KYe2B zrIghyL*%1L)1Jk)L2Rab+!S)$uK^59(^!8YePH}agHK{azFJS`>S&O&j`a|q9UyzQ zN7pT3GfLKCx-8Pbdb$*QSE{KSTVJ!!OX1MYgSMPxy{08>zWTC1`6<{O&1+XwTZPdG zXFbz6$*?#-lKfczGndU{+nkS~@+L-H{3u7<^f=md+=%;OOeeN4j%KGBv3xG;GwzM0 z)44_{KPX|aiza1=5$iowxRew@b+;PPf$6~(%?+cit&JFRS&g{|gD5Y-fT3Gh4mZh< zeoZtW{VU_TZ+lXMa||;z+Y6T(sdT0uel|ML6%7SnV71{%rjuE!qX`BbgzL2E=cl1{ zlbQXC7E&KA{bJZEW*b=S(~vvUC|mW^p$vi&R0$ba(y74Wg4vRS3)$L)Ul$MYG<>H5Ru=U7AOw3KgC@OAs8p ziGn|>(EBCZD_0+({%SR@ZIa>}C!-q+n9ibF3QLim5|=Tpii0c4cX`t~CDT$_%ka=Y zkPyW_?>QM}ehVct=I0&l52LY#`a#iz_+v(Ieid13Gqz6G00 zqkBT+`F`g|F~}2W4}X=kN8TmLaU)HG}DVwi@Y0qz*G(q-gz4Lv@+`SgI5k#waL+ z@vjxkAKW)d=&OSctt{E>YiAdF#`?WBn1|ZHjmuuIQ?N-yrULuX7h{_ zbz*U~Fr@Z8?85usO{!8U0y;4Mx$bcO3+odOFlTe?!{+hE#31 zY-yQ2ziqiAN=LI9!w(w1=-M%K@nrLlbEA024o4BEamMTom-szHj$po-6FLdM@|VZk zquZlnFm7*0^Zq#kx0c5str|kPOOIht%u!g(n@zW-usNaKNAc(LW_tNl1lyHI;qB!> zhnq2MmK{YkFQqFi##k>sig7Ddq=x5t2MoBbq#5-zn5%I>57xWc<)lH^84f5sE~2%prhi>?1Yi3( zkdo8FKJf_a>FlK%Pv)QNj$q&WEp$?*g>z3wI5yZok{G6CSm=mz-!@Pr>#fBo*leTk zW}3v}LsQnv{@=XLBDyy=mMPF@8mqe%P7}W~%}eiXA_UkE$h$6;;*qlm*-aIB-vT6< z>&>{P%CmVLSZqEOBSPBoo~Evg#0X)2_|VU2ie+=ywruWTv%?2dlMO=HT8i+;djfxG zn=_hRc7b4#l6Twh2-_kjjH#c+kGOCQW+RS6ZuXY{`RFJrtR1k$-hy_HKZX&3cIf(L z2rb!l98bRST z^4^Z0Nek#@z8XT$ZP-&XmEIXN7-ZOrjYlSv`)w9ig?8AUI+5%dkJyR*W_!jIO%d4y&pC%UA8`9bzO4>mU3(0VG=oDre@Gz+c)(-56$B*sun zOK!WD9GzB(@ha1bEBY-%k2o<%-;N7ADns|rV&qsg;!-MH@tDoO{IjGKH!WD7wz~x1 z+_vFGPbnN(UAeAVqdaXF37U@*!+&dr>31JChcS-L-834{cRj#nac()Yc?u7{b00R_ zmv|f_uUzEo&lh3La0krWR>Qkq62aw!9V)Wg(g7Wd8Qej<+tibqsM+s82=<}q#1Q(o z7ZF;z8$EO*>7S3T_}pR_o6{IYFD9^kwa!iyJpG3}TohPvVh1iw9862&l_;p*0o(B2 zv@u(S7l}L3@lhw%mr=w1`7SgJv!D$u2T(Ze!S8-Hl(LrPhEr|vxX_XsMQCs(-4SAdv;lFJk$-r$a5ApIr3hUbB2;oIm@$fG7>Q zGcEL~^{Kd;!ZDmpUAW)tX9P@5p+dSC7}iIihC)7rVoQ@v`hU0SeD>YuG;iFJBioB#&Er zQx8Kk2`V-D+%;A+?PHo5-?R(dg_$};u-;0%q=cLNiuG~W@8HZkeT^$(aqRzb^_F2( zZr%5=ih&AFlnHVaK+RL!xQvzYpR3r`MAUrV~r^vj36K9By1smMD*CM^?BB} zR+c@`9s6lNc{;{dw?BVWZ2HEM|M9-t`F}%ba6;bVM(n9LriJvb-er82C>=5c} ziAu9tR!tm%y{|1%vG6WSJ8XjkK9&geaAeA~Cp^n7ut>Cy+3&N$8XcMkMfdR`;{SNi zrbsX!q25IEcY22eH*H*`ox?3*wN#9oDssZe`NVa~H3B>q2%E*0=#^^--9*~vytf1+ z?}))BYJ$>#R*0ErgrCD^3wE(qs2gsK-pV6|jQ3X9M7;W8Ub4byI?sk{64W?+kxrjN zy-l(SB5LJ@?+Vs9y37=UYac;SvW5!j?zu{&Ji2Qb79qm_l(i*ZtZ5;_gNIN?u~YMTV#VhdwiKuhAnQS)90x@#w>Gf zaC)^Bf)x8Pjb1j`>12WX(I-%EVvY1_GZcpP%28fvjiGy}9-W&nja*84oiNg`{aq<_ zqQ3nI>A%cX2TE5Ru}0Vo@&+pO%_*dsu-M)lJ#7QBo9W&*6MywdS)khQ@z!wAu!8P~ z;p(z&R>-!nMyvPA91WVwLWbHvMwjKN(r4d1?Jp7ek=)z5=Z6h!adxRLhJ1bash6t(wt zLus`sevx*yBFGh3YmWEdhlz~ID{1r>3oJdaBvSWrMPsEEx?fioX#|rmP!(~KOGk*B zwF$2l>~QGvAW^q+7sN9MsDJDw8WrY@DX$&i*#9j%zR3x<@(3T>l+RQ<9bh@s0n0*s znRyNEt_dqianxaQFYKTp(C+)uOy)A!4l7REz$@Yd6lt#)w8x$UXrAkK$PU^vGV}~uV>SK!1M+=Xn5i`+q-E6}EW_joiwn%8J?yiO z#Lu(B9OA=tC%)uF;-+2paK`(AvCuBF!slpbRFAoYi4Uz%NPj+W@^J)HuQJiPD=uo2 zIaGA&N+8bCtQS}^MAV+^i&ylH>ntB4ny2cGlMf{5ZZTA}RofFjgeMfarc8JJR5shEt zfrAaS5A8KV6#mW~wga4TT0u^xz-YnHW}G!&a%dVEzRc46(>$ zhhID4%On?^Z4O}1O9*Q!cZT*f8@7}aF6Zft-&>4W!hPZ?e|AP#=q;x6k+`CBT~QM+ zW=jXz;nHw-DCwKB62gsgn{*db*{BazfU-A+o>OA_DORL?_rictJ=kfQc`HtOVa@WNkh^F_x^u5C z@4>t6N+RQw5M+?9&}6fcNHs11uEdQol~oee7W%?>kqN%aDT#_Rym6T{p=7&@_cbRJ6II9(u;UxE@&!~6%9P>i8YaKxb63w&1W9?{g8Hn-Y=M@vOC&KJjko4 zob~-odzoxc6!n&}#c3`$-QtC>k_`6ilrxUp^ugmTnM|vj6Es5oa7smBZT1eRR1HMv zz+9Fyjj#vTVC36pGv7vAtlJZc=R*@&Cq3(qv%~N-C4lvMY>iZfFf=q;v6~~T@$6R! z)~laj!!4~~@H+^%dhKRGHdffB7KGq^>g)jNIVR5t#E<&v?Abyq^iB#u{@`(JZ9ls6 zQv$l2bI!GqqMh~Om_=NI8-qrQpc_nHM-u#SQ5MP13BU;#6PUeK5_#P7g&Xld)RmP) z4YPePo3uP>vqp%F)_5bB-aYOUhKp9yo^dmA!Xv7OiVkfcjYfbiv@-^a@*jKSmYxHa zJ{ceyyWR)aES=G72zk`3@`3z$H*CDu$#xWZqqx-rfxhpVY9HEH&ho~StM#nkNH56g z(chh2&5ZuibI~^d@Ag%*d>>oDhsfN9$NyxhtGn!qBt%HLEXk29YsgwEQEhr#r7= z5C>7m8+NA69-6*)P-$1g4xc9-2}{8C0eNiA1lp%q-@&5i;cU`K8+`PSgZcwY7E1NJ zmsd1q2JK;oG6+u&3ddLHBh2cdCAJ)hK-|_ftc0{mHi2PqQdD6R(=G6NYy?)JlkFAByodf$~# z9wyp$lXTEu%u!P@Smf8@k8xp^kpHbHTHDJXi=(Zvz+GN6pu~^*4m)@s?kk%6+z%%6 z91)TrBZ|4>2W=0k1yR45(N#aZAbypu?i;r5lpo>@y|JvmhUvHYqO6BM_OePgV}UP< z9t5G$wSoow^Tt%QaGbWQXJ;mO5#AGnsw3anKqq%x@<~K+TX)f!90T@3j0g>9#LvN0+XyS!>y%@bRkskw^{1v%^{&2IOz)1f^(fZZniB8s{}e>sO5-70 zYKE`x`is8Q#vpYs)nq4G(ZuK|ydaKFzkNML*LFqXkh~3Y;{UOjw-KbFw!@x<-`J3; zk(kxj2^)sIVji0!F}H^s6dIne1@#d~-sFX(K<6$Eh;J7G^=G1}Bu6g*JLMWAVkJAZmbeB^nK*q` zku}*^VP%q5u6S|!9&9n#1bALHj4iO_b;xU_FUx0Et=jw{b?76vsEe@vSdGe4oc4lJs zNOO1|s9<9zq+^M@1+t=wSlkcdYSO&gZB{mmi%Y~0;?{;$#WREN38S9B9 zFGyl_2TF6Uv88Jhuxe8}Ccm^`@*Qz_lqH47D@V5Cax^w27r?rkGh06+9RET~=y$SZ zPPc zXL6Twws;cBmJhy%Lv+rcwL8;pbJvN!uuP?hV0wuwqib1U7Q&LDao`?3xX@>U9u#Hh!;n8W!bBxKz|!CeLR zyg30;Gt-gZIhuLI$D@yy6gieNm`=|a%vCMGUyV7ezA_yBOiD1%awb#R5sZVRyEt)Z z91F|vL-Oi-81JRXI_7#|c2ha5^?o7kfh+14lp(932v3Qlk$$2WWhO2dd7pN&-uaN- z0kkf)g1Vf5tmSvq|FxN6!r!}?Q5~Q4h%}VN#5-)98I&`D_SFXMcMy{WX?NlfIh{-G za?UQx4VgW^hi-JvY>p`lT0}k!uV|jVV9sL zyU88@G?I~bJQYa_z6jiEfUsk!xO6-iefG@7@xT-uRg8khfdM$aH5vN760mdG5L}cb z!b~L{r9N{p;YY~~T&VWK`NDfhSp7%6z{3si-jpLd%u-#+f%eg_N>O<@Va4rS+7&)8g3lVg zoNJ4%q0yFy=RIYl2Y#4i=2CVmZk?zWppk!cr zmvg>3e>%%LaUXN2KHDx@!d&Z$;NBvEdyG2UWts~`y3f5s)tPdy9PFpMadH0=7PaCo zd8S#Q=I9KTwlEEQ<`Z|ta2Ru$k%A$EZ7^cs&T_IK(F!W(^I?;|UHRhou@3qx?|(P632lT2b-fOuI) zsovZq2%>a!uCkNnjkyEgEjgGUXD*#IA_nuf=V4!fvGhi5IDB=BkhuDmRBRp$Q|D6r zy=5qUw9p^1?&T=@XCnRc%L`NW?%{c>tu&zC4Gl~0!LGqm8cW>U^KZ*Ai$zEWEwaaJ z-x7FTOP9vc+&@RV5XB!#q;m}{a9W&;|9;g;%Zv$Y>6?S9;1ANc>|pe#L>NLgWj7e)blLTpk8E;g}Z!n-n*w`Qg0V% z2T7!(BQs#K&J#O(Ka#5Ux{GhK{9(VTzo2E3foHm*a63CeXjV%{(`)KoW#$VP_oiae zkwly(j5_2?673h#VZKOB5FfZhGeHh|>#Y!ilw(jHkc$)7mkGlK^0>QDh{#z>1hbRD zXgFGe+Np~KgOUE2tW|~=;R}SDAH86pSC0J|^94qD!h8F281I=cj8Sw(PEr|KwdV`^ z=j^fRQwdzUFA!D`=l%VzBD|1WDCm?~VD+Co1b8nJd>@hLYcB!TDNBU)VB7ye7&+%7$aPr?qgoC<7BV#lrfy zi(q*x4NtV`9_xDw0XfMSwk`vkFM10hG;??k$$>P&Td0~CgMZU=@wdoJ7!eVUN6rQ4 zJIhm8rWTA$>OJa)y9=J5{h&Cm6o>D)2;rq(7^Yf=J_DQtgDN-jZ!d%6YI{MauQL{w zltS~Ujo?7~!Y3LfIDgerct?BxU#j$s_?ihH3BUQhJ)fRQi4fV-49>Lz3bKub#pF$8 z_$>=6gUtjFM-!w?&FON^-|xgp0|!)Mrh*unlZ~Yvq+bYmPJUJ|4@w7r&Bq`&Q=Gbg zLi+n0$Fp7LSoX|L`m~o63b2I1t9)ra&nCW{H7*Ou5NOAYVq{4T0+V4x!MCd>%5Q5OlB?m;IVW zc*Py`ZSBjQOEYL^n?l&V953&rzBTAB@-^kTt4adG&gEd*26^7Ti2P3dID~z2JXJRw zwkycjAh{oJYzP7u6=J}3S$@^nkNlmAP?*w-Pe14dADv>_h4kRc7v0c}-kV{sI)sD7 z<;xmfjQ*-Wg;O9rMy?2ljHUOj+f(8Z4Lc^J*B4?`uqhVn zpBH*-=R?=S99NZ1g%YhiEc{Fy4s#!2wR0XGzp=qq=evRo=}=_TNk^7hCxrPHpyLAJ z4*lAN=1GOv@RIJ(COM8+@*F4&fNuM6eqK4BxL0Ag-#(Umx^v9)ib1r&6h8E94mQap zqT}uiZd`pAB|Xz{uVEIqzmkgomSmDiw~U_gUbgwq?cy$x!b~V z+$RrXW>4p{B7)F=X94Xar|<>L53g?&LO);vzc<_qvBQcmMlyy^n(c;~$wdhHrp$AV zo$x8H5Wi)I@j^v=giufZpk9%Wt|2d6mX8~@{kiW`%2qg(i!bQShsc}Zp|Svz@!h!= z`9=M7$i|HIJ^8#06GUZpJ?CqNvBH9LRj4D);9XZgA=kJJH)ubXc-%+W`@RTgVodQi zH&h6uv$DxEM@IL%!m1Yq(BDrzrTB@Um{ka4;_5u=|5rFMt{8h>5x;PhBEPwfp35HY z$TAqmH~N&Iwa5o~>*ny$vBmWBgCO6&oDVWB#DB#R@Vc{_<6ItG55?hW_D0?-Lki!^ zN#q&3l^dsKV(H&Bbavm)cb2ANYy>IsWw&z&jRdrKiwt(E#1r)jHUPB z*Ieq~Ht@e%K^S|KzRT`w`69wh-fSyCy|sv6uJEM4u7G?IS8!3QD}H7dpr~yTaT^Ht zUR{8-1LyL^^>)bB$j8=~)44`G>FoyPVS&p;zMk|4Iu|*z*N^5he@tm!m!fXo2%b!J zBTyq7DTyPwUmVRWT3yfCu;r<+xvC0=J;a!@vPAG5TaIhQ=a{~_L~u|jK}MP>k~TgO z26Yr+4$b^!(RV_*IT39}oC= zuI0=BltU%T50`TG@WZC`JywR0AKEc~F0&X5gQKud^9+B{y8tTh;!#|7k$-PPUd8eNVz7uBhzxA0+toggS)p$idb)U9;7uxd55mrIGnXSKscdJT?%V!ET zy8p7EQx$ML;DUG2`?;=dCHxlC z^EvSXH(pQ)MM(hkkKE)4=1z%7^nxlRK<~}gvxg9^!?MD2W>_fc0 z?~PsBR(uhAfSVi1qrcUWr->`kgZx#;|8(PVyUGz76${zLUVQ7dA{<$mh!#a3{)NtF z@TgSyg!}O5CE3`0Gy}HkKD?%18k`?x;sNo#UMnTQ_(3*owt4cM=FuoSMb9s3nIHT| zST5b|_F*m@rhzEYv_t8&zA5@>7gv z?Tjo~*&g9Cgx%$x>w3zKqew(*MDZV?_Xt}ezlJff{P~7r^nII%HMisV-`C^~tCxyZ z&T(94LpDq_GH^RJmhX6*O1k4r_>eAaal;*i@5n}4MI@K1MdRC@90Yv{<8OO~;YFep ze_ew4@p*yp(GYO4(x3mA<%3b_0v>00^E|3&>q`Zcopk44X-E0YM?lnTC+@bE`u(NU zKkT&Q)#Tw39Vvx&nk665Npslm9H`AO<%;v^KF`g8Zmtn8_A*8PW7!CrrcW9-3H)5M zuy4dwzKZ%fwT#Rz_j#%AD*kBM1AHfc-A$8M@L3PZm$gKK`pnhbdf$CGQ>}mRyPxY{ zsl=bxq_6b2#y@_10Fyf63mRDS7{e!M_)dP)tGxMzZnc=KGO*v-zcn`>-^Rr|c4en>5oraWDxhUkd!SI{5+mq{8Eh zz{{6qw$f{{w-go0Oo?2n|^c>t8;KXMRwZHefru%@nZzHcBsN;8yD#IOy_S#K0qkjH>uHVPd)=Om08K`Ydz_pW=JVBC#Bd3!fJMcbVpBjrRgkN9$S<3TvMxa)WJi+G`ap(QP7!j3% z?B-mqRN#k>vJ~QyJ3#ess4>#}9^w@_sqiLG(a5xuJUk^0lH;U(I6%%@ za+z4O-xO|&_WU$Gmtz-MK+i0YE7|4Kb8G|SmL$H(zZkYZiStdGZrR~w7;5i^H3?N* zlir(7>OR_;~r7(w{{V<$xZsbqCXJATw1O_c{ zi6;2E*eFZhh4bV7Ain&Usq%8GdtF40&r){=(FwT{SJ#{1#vtM@#yM+WAvApP^2kGzoPY`5k>oE!L& z+uXiGnH9n4vHv|EP#BFH_k%Ityp<;| z#wdjUktM!gM^|1!7{Xa_lWkaQNQ>f zm1wN;_C{gL53brL9Fou8(5d{&n=S`o{#$SSyZ({yoa~2w^x04JYvsLEz3{iq3mN%M z+|tGky2PWH{JM@$T<#1@1y3|ZKja~c9I*9?J8rGI$0r$(uFA{}jgJa=K~HO}o#Be7 zCOLe61@ZkzM=YH9Xgwba!y_D^U3}iJliV}#|{{wRBjjF`Y{j-q?8@jQ-epZ4nnpn=`>0E@YO#E zxs<>5qS}_f`Vj=_Qu5Kw3E@>ILU3}L1TG#~e58n;Mf$$47gzJRA8|;#NnQk3TKJ>F z1Za|$BXH9fUS*a5gT0m3v|V@oh44-t%Q5HykIuWHJ4{ z@iNY+r|gXyqh~yu^eICVNZU5|5zo^ikELaH(9bXD-o33cAc45!=kj^KRtrpl=p zSzJcm9OsD7S7b+8$cv;|UqgD=t+70!w+Wu~F-Jjs7+*kIfx*-#sJsv5dlHBv5NnMa z-$^S+-1trl>n`Uk{=1W_HTolMj}dk)-oRxy1t2EX2x(?J`Mcx*v`?TryzngdA03E) ze#W%FGvj8&E3lm+hHENm$?pc@$Xzjd>Ll@n*?~x+e!VAYhlh3s<2Y#s%Qw8>{m+JD zJI#{SuRd^DnFt(NNBfuFKe+FTFm#j9zSE$MHzfyS$#mKgtZe6Pa)Ge9Mx6NJ9sI@( zKh%;(=wsc#{BXWEV*A-3CFd8fSNDL&8EagS|H}WixS-0AJO-oQ^3Roy@Ff3{RRfy% z$R73>+hmT}8Bh5^J<`aMk9y1C3cil^68bbt9MdV_+SI3YE1^ucL0NoA1o=FCHb(qu z@?9~aJhvm{eeD#@k6$ETdD8A}4+`O*3`ruac_2l-IxsZmes2L;MF8#iVxFBs>KHsVqansSIA_n_~> zp0X`w-sC^p{b59VuIGM^eC@ITYzY$M@Xl}^wlDyv=^H`?;&^VLLK$tum96{| z&cDe1pJrN&Qwo7RPTm9~ABfRsqBp-bg|hQpB^a^LjW=#5-Rdp!FS_W#N0QF$j6Zq% z4|3zX4~t>aYSQICS58~X>(2W?W3v&60m&zK`ru$FWp!mN=DVyZ=YsTBBSvoK2juJlc&V&g-^LcC-ne(Xh-(=IWM|RoQ@DNp1M&zS9QUta%0?9dc|$m zlLq;t5%f>DaJyFym`WO=Y5I*km^h_oiH4|fujRw1+QOYOjQSW?ae;PBuRc*m;lU!_ zc8)anBFgC-lg-~uA^o*I<#nD(;w#<|XRVI>fvuu=AIg+en@K%wL=fNXVTxb}V>mqY z<_+#9_&1DnWOQyJNfM~io!2_#$OB$co&)h)`bFCE5!1w2LfD+2#GdbRCXW0%6U@xE z<=q#G@rC%?|J&CMSTl|HO7ue9I?6BnK88p9=M6U>;s#?1kNHCUpiatVYhTJkZ}}iv z+Zb}OyLrPqAN+b}jLYU%c+DhVgj^IOpY(LI2l!&h2Ql`{_T|IOsHdVcY&a9k15c2@ zldS}2&)ntRT|ALTyyA7ud7KZ!@;_Hb%CT@R&h1sA!|ypAvyzZzOJ;lOdXNNIy$D zpn_?X0rw(?pLC?2;kFTRaf5k}1Lm+PFhY2yH}5vf47m!%sCnVSqo^OAe%TmHXfrK0 zoATLYXpX3|;gbI{yJ!db?>ZlL*&D|6z4z^7&6m}9;r(RNHhlKrQK6nVv4gzA zVncXxIn{yL5*(fs#~aCCLXt}SocAeQ80d@^!dO--W${Ok9f&h-jFMRbKSKTuua=Mw zTEzLeJXUW;Yjay@{22ZW`@y)vd!Z&cL7&l4SImbK#*;?a z+MH2_Ja!b#)Ks6#{SEjfdUjieQ{C%zgS*i)z0i=}gN+9K$v&zfUrmrW$$)X~MTSpV?oPZ&%Azg#Ce(HFzym8IM4NO96H+|j++u`?`2%>)c25XfjPcceBH^E& zI7K~PX+Jft{M!>%RL8oD|KrYt>%OOF|BI$JA2Q7ovA@XEc%y{>edUhup%N@EwdDrn z<6-%lc9E;y`7p|j3e*xqHo>2-IO+%+;!>Us2;&cy*~9-n<<~<~~$ZetAoa3=v z|ELX04Q}J!p=kb{c!uA8-@*X-P_AW6{zar=X`ST5%g7(4v7ZrA9y{@(b_;B=q4)bl zD?W#?b3eMnW4y$??1CBgKc<|@Ir@C$0#oGtFoH^`4nIQN*zn!NGrW0@AJ?N@2Wdu( zmY?AkZ^f`4E5VwjXSnG#()${l!1CT%?$}3+uS%5Z5Ppu2+Dm-=Tc$`qcb>l*CC1D3 zUHSZRjy1v*L-J2rYJ}={g+kaaH#{*mLjS2%!lgm(xbT!}W8Qn=L6SQrte|`ZmA-u8 zR1Y{tQce3bil^-JfVGksE@kt$HvPG|p%`;4)^geF?qJ3A-kranADiw5**YT)MuQUBl{iPOsXPP~J9wFa6JqO-1!4{eHT`%qC#{Zja11>hi@;DD} zLHvBJ9i(YAa3|kIE4+}u4J%zo{&tlWif$O<_Gn9P`;t60J?Q=$7;#JL(-!qJ#-b-W zT!}PRtyCZKw`lSios=QaYJ_b*`}r@buhvxm`Oe+^|L|b>eZ;q?{x)fm1olhB7*n>J zJ5*Bb6-%ITYab81C5D2EDQcH!@J*AbX1^r;Ob-n{{F6(b=v2Qet8?ms|>g$o%#P|1p5)rziE*bQt3T%V1Wj2`eA{+5yl|klD8}} zha8>ZW*ZSNFfoN9)x%=*Wn8LG80KpuT-dObkGMg;aaYLu+H(c(97JB%PV`xlR`LT+ zskV(aLFkB${8ljK{C*)%vpYNZ?*pXsrM~g9-5&n=su*`1%&^vMA9vd%#>tyq&-vtl z6T-0GPMAdc;ZTX1Q1jghairy|%Ge}?$~1fuxxa}KYhyP zdz&ES_H#vKJ=N8rrNW2%3a#!KHZh zd8-hY-e}EOuJ_XfvacwwxlV7?dWj^$cwC72-nKP~e#ep;F4j#>2XuA0w7 zWhIzN{pW0Jb#C5DIqJR4VSao)Hwhyx8hP=RWo_kZ7WDpar<|jUJNe4vRA;_+J?D`5 zMM8hSAXL3Ig5kMJA=fn!;dI9wf7c3iwgG6(qk8n9MVMjYk41?Rj8Xn9BA9 zc59e^2kmnR9|pFz>HaZWFIF8ryODOYbI}2ApgHZPRL1~$@P^S zkhQ}ZP1k4gGo+WlN%iaV`kB0Gi5+%OuC|iuOx|~^Ez;)@KWX+%{^1n)KTL7Q;dL|l z6`G}{jq#vdp@ICOo}l6EfDsFb=U4wo7)rXfNScqFhBpeUE9@{x#sVGNKMK(u zgn1Cxq+#b@;fks)Ml@MM>9Pzjr+3^t($er?SuS?6#@!NY${&*F6~z74B%M{}+`+t> zczi!d`y(|O!L^wscIDe)`cf4>o3w{p@<}^)dK7=-OZ<1*xfkyq#V3(R^7=4G@ZTzY z9qsZiI6A>BPKEnYcDn0LXQMshPn+Z zJdDoc&rEmP1F3MU-;^OtykaF&6~1P!5#%T*HS)k`;f?VXoGf(5Z`XIis&AL^VOrO7 zF2AZKoZn90A-#W{b2kaLk6fS`XN*X8KzMS%neuVy*?)FguqD6VX8JweMd=EoNz3_c z3C;OuZwZ=|k*YJ0xT?J+LJ^%|V5=$q47Lykq}kwTt{Ive?1gdb$zO#&f0L`XuqVJ0 zUvE=RZAzq&T5C?eNtTFxn0N({=JD)Z&xH4+ zAFWog#q_nUg4r`eJRzM`ZPIrkv)3)SD3GtqfexX?>;~~(9567pQ#g^WhiLLcNgdrO zTqUji@rUF&{INrjdwmr?E-V|OOWZLRY}IWSYQrxfk#>hY z_O=UsR_MTBg&R(3vE7i&d;Rm3s(O0hQ#s8k&yuCC3*2$si?Wr2OQoWxH0M&^W!K}m^oO|%<#0*h(ELGK zvw?iQ2v2$3)+YTq#tGvenjkr-yYP@O8%x4rf9~%seELBAhl|wP{FN7W!s2=p^d`MtcDcK-hxW@snzlGUHApx{n8cPHcK8+>EwsAQTq`15f;_ELIP8@WeHGUsPXTqgJ%p19=;1u0JZyjvD5U zGc;2dogJA|^u-l_X(r0kI+U}x!3D!TOrW>MBxhT_GsFi?QFh-o=UgLU&!f#?v@|ZK zvcZwE8_eJ&Y04?jazH(0T742tmzvXjXR1S4DoSGMA!l0{(p>Q~I$1ihfN%-ouJ8KZ zBHh~Ciu9wDuT;=ixO>b3<46;wAsHd||{6*HEe5Xu9u zBaHn1*8jL9WPHAkf9Htj^#A@bqJJCVkxxCM$nSJ)h7l|_--AA3x`8x%rc_IzME;il zW>Vd7NrtmK&C4`jyc41^--PCuAPHp8Mr4xZ(3$+D6ZdK;EtD zyPrwbuHV8Z$_`)c`$Jl}|0a1ayLLHeum0*R@2Wp#h*2-+vzS${^g|QPo*RG9Wi^EV zoFk6{g{8BYsk{&L1=1DnpT^GgqKxuO#B*9XnT5-Gp%3Nasg_P)i%E|#gK9`b)HoJ7 z#RC&*Pr1x+467y%qcZjI&y!TxtaYRjd`;dl$49W4BG>=tSr<~L$TSDjec5gS)Ak%^s@`e`z2hXC zO#S~~&a4XM1I{z>gTzyeEuSwjCw*V&h$x>r{307+=!4i+^12B*$LuY=G0VvW{gSm< zo2wVvmXU_Y{v?Y<1&wZnCXOh1FTTso_~9kiv^=i;rx|+&}L=hYMTUmlgVrEZ94J5Xx^oMEB$o}Ha{~)&xOvY zZBIhCX7UgD=8VRXzLc*jIdYTnPNUji7eTj}?9)uGC^j6JneOv;59apLAFcz*7sAwy^>6jV=Q|Rp<+w2R(HCF0o1pQf6La|D zLmETE1{)n%%O`JKbf$abYR9}t!+M_X_U=Y&c8NTMC)JtZm9GVR6zYLxV(R}RP1yU> z?l>{i0podZcUodNoU!eHO{DFR=6?b2%A{$h@Vu$m2~#7 z+fVJGM%ZXv{bn|t_Ga_wy{U6+4Kp8RgEPx)A*%&ed&CL~e{GR(yNq=dS|IhV9oFYA zV&gYZ4b!*Bmg@N|r^ys;wBK@ZoXcVzOi=O70mjc%*_!Q?RU7Y!o!+zA(J_SQopZvX z)LCp%yAe)IcE-#%_1)uMNSI zG@4mtQdsc1U`RF-R-%-|x)HZ%e3KZrdaA{;Lo3`2? zy&`F!QWeD>Eb_z1Ri-pcMz9%UX-`T!+>(o-Y~DX_+_*^|zDtAHr3x=xQX#xD$d6e& zdlKehjxq6G?DHlM7!nWajIJA7(@y$*Ir7#~bYgv@ToIKp2_jtztbRA~3?j2ojwNCJqY6Q$?DiZ`@;N!br>O zZ44LNGFBWF3hl{+YX_FFpD`hjOQLg*EMilmgV98sr+!`qtUNdfeJhCvd?t@wqq#Da zG<8{WoPD|-fR}_BI^N1*n~(UT-OLonQ#08pI{yjOHy5O&vk)0y*bwIapJ57~hDcMV1IQj9?n?T&U)dPPHVIZL@L0 zJ|8O-ZwzKlf=Zw~&Y6Cr@^O-l2QF$)j7tlMOT>%^K}qFL!#d=Y*e)>`A?Bkq0Z_ zM({~<#FNpk>>yre9Vr#3&xod z^t@F(U`r~3U>ig}^B1a^LUbSkXH!1!oBK>`NV@YZ;sUNJXXRVyU9iOrS*9f{b2#l~ z8pw|+t&n9l_}~li+pBu!vw`Z~P@&%2ERnO`RA+QZQ_W4KthcNiTxs5!ZkWwx8#|-l zP%8w6WU}B9j_53)?81%=rdLH?^4G1Yhfil7F{I<3M!m|hH1;#X3NrPSF?2eWDdbz= zgDv@i_@=Plf6Wj=zI9sd$xL&TDfwMcW|L7edqCL3o*;W%otVs)sEV<67x}KfOk%b< z+mV8wHs>mR*R7^`8CTp8jkf;zqT)FVY4=dVHVx( z<4c;E_RLUx*g<=}DUIwl@nSsay&l=Sfn_xWVG;G)LACYlRZ<{0)kMpPS~kc$08`JK z;o0@4Z0~-59Q#EWFKI|$$N0d&jl8Y@J!I1#c_L;xdFtvsV5S3T-fbow`@brdLo@VA zJ4;N9sbqIvI^w@&gew_Tu#F~EcVAnP_WC}%x{k6jU99oc{T^FBn{;?9Z7}OYIkTqc z!;($XhCKdKq(n zVg!R74%pdVz(&xH@riBM``mX&J5%zBNB?t1SbOgeOHYd<&u7Xa9N)$cRm8$!7*j$2z zJ3g^%p5b`k%>=_DKCq29!cb{o0DM_KYQP@H;Y4%f6WxSX>VA~h+ue; z?sUZZ*Q~O8AiO1JkRSYtZTsnq_vFV|{PQK7^wkR&C|lv>=VrD`o;VkVaAR8ov#ch6@;^2>(f*t*`DcnZ!Q{=I{+y+dcf0o%J7|iZvwSZx^ytjj?|sfL z^`T4y;@liu^?(_5Cm*S^UHiIuFaEGYH?xV0OJ0bcZLDv7CS@>Etyub-bu7M%dQCC> z-~41#?bGp_aKgCoA1tvc6`M#SC!_nFt)u+ldZ`H%*MDQ&GzoF$q=TFEmC4p5pm;0k z?)!dWGIQ=gl{B78KR+>hn>c(VTx0Lsk4*n_3={(>|N8X@c0(f?!6z(H`~5xjmXT1N zPB`-7_w00^Fc|)&Uc&AjGdv!IqzY?X{Pvc;CywM9@`uqq^_EpScw_NR!d70jvU(j4 zyxnDoVBJ=B!pN2S7RpkQZ)Jgm%{r2Yut(w>wst&uI+54PMa?(tdo1~>W;mjH^c!Y; z$QqR{PN*k;iJIw@6RzV7&xF@(0%7(CH?yY&v z;w~6Np_y>T;K$60_ME@|e{*-ngx5^Qvkdd+5hm5=75loH@?r=-b!&OaZhR_4iIW5$ z8=Bcz&wQkF6XbtyVwYFv;?XBl*p6vp%f3q~2ao!MLyc@qbT;xgSm0O03nn?2iP)>e zGwJbyU0Iw#*-BP0)oNfNifM=k>dS&*Ev43HZq33Z;TRk)GMtrV#!b8*RnHKzMU+N6++x2V?`LRs> z<^r{i^-T4w2O_91JUX(T4WxVCzL2ojFLf-Ka#7~)^+0BM9V_*v8Bxy@3uEe7HqAE& zJt?c$zK)F}Z<7Oey-|0qjy;+~ePx{wHXN&Cvhc3(tptz+9BOE6=UKO)uZ*r^KQ zU#JIQ=h;eT=p#n2B+oAOd69e>o0(b;XX=?pPb_7TCrgPBPv@*w!h!}Bql4z_dpC>O zrknz3KB4*gc@Zl(mxmtx%`op!5!*4EnNTg*)^VBYGuiYhE593y|z8L)JEBvDm_OmU;!k^k*d6 z=lbI9$O56ZEDZf5`_z34#EsuUE<>zTyvS=2SImSs?nB`Jh`Fz5MkH#IIUj z)O-b@^}l?fzQ`SSnRVy$Enj4Fj?nLR2;RKU7v=n(u2qMk*{givJ&5)G9p-30$rna- z?XdH1IA%Y{7gxVU;!0x$&H?05 zeNGbjm1ps|lzSsTZk2Kxm#AF}s+BAT`{uH*PIhOTWO1LKS%>ZJ2pG&d%_9qYc}Kf2 zC0WE=%fNs$o@i#4EP}?QU>f_$*S9B&=LL!Em3X76W3qVQ!~HzWhg#WWkrf?9u7fWc zrX`E6@58W)bF%d^S+qG2jNQimI9!%2UXKgFnDGJ7dYCLUhxp<{=RnxJPZlFNJG=Qi z5L^Ewi{T;e=zKc}>J5*Hxs92nd@`8)_G4mtq!Zv9f~}p8iIxkPUA37SlwQZgTlO0! z=!ap&z+=LR{Ry=$^uW|l60=x;#r&%n%Rp@dz0awl)~p*F!ii zDaPXSws@kr3$(n5Of`F?xw#AX!UCA;I>6G(T{N>k4|7XLH1~BEO=z3?bjAsD&bW(N ztyHK_j=|P1?&AHMGdRuuPuW-xvGK+!bl>TQ_BI~EyetPZ(#RRP>>;k-&W3p9ft;qE zqW0BHjC|*bFH=0l?v|-gEBC_iL!KhS>L?l<+ITdx#-vUDiWuX5qfN?_)%1ff9^IYJG?}+} z24BijagjcQRQ7xxxGWQGx}3qwBsbjMzFc(ecnV)%yJO4Z72-ql9P}OR38UsK#f2ru zq3Y{}yzG@?hCQ7Gbj zZxF4i*$6)q3UjM9;%?)r0xyBxpHEb<4#f#UMk;^&t$}yb*c|16+mk+tT6&LXUUjF5($LygiD`oR+G z=DWajQWuf5SB3ZxJ|E^?h4#v`NMa8YvE77+2|W;GD4ADv7dAyX=&^>J)6yOy>)LU= zT1H;>nVzB*{l_b2dc!!qmk8{YgzCXQNQvz&%Ch5erXlMAw?3lWms-mEWXi4XD;nj5 zBR0CYUiUtA$)F1`();d%o^aSYjb?9cDA9w2t# zBp)(72%2vOh}f~N7(xbF;*5bJnD6M*&LPyO4-^enIv|P~pttu2iduc_aKJAV<2w%$ z)#|Km4Z^U%zn|#KKKLw&kE*Y#vr>W`Ok zsCNiD-t@<4r>mHJo@|w*033aJ4THJPP4@@FQL~&{Oy1k31ffsw3OFPOYxOL0$ zWsB`}GS3!cMydlII@#+C^}L81YUEzcbJa;*R*2Td&M155r!#MOKGZmSN=uB^>00j` zQpi^Ds!G>MzNbQm`R@4gMe2OYI}1TSWaZauIwfQjq+js_s_yBenV-PID_$5-|BX(% zNQ3oxZwy}kL+AY3Bxt1jz;vM+T0V@&hX7wpUQ-_*Q=`fM^FwJ>V+^_wj_Ex6dZsqV zA2Pujj0ix==T^wb3qWqeKvAy$P;ZGfR!y0$db6Yq_j7EpY>{n%~bb_!jYED zS<>c4D(zlmtWeY6dS`vr@U!%BZzNx(jk;=>2Qx7BSyzm$qcZhouc>P=t`yc**-Pfs zd0b%cmDUJd_e(Xyu^d6?ZE(x1w$j(;8dmnQ zLr{yl%H@4msO7ZB^i*|4SzU@&PpD@dTu&LMcL{Z}xAy{PWRxl^eEZ{Z@@*9jM~>V|DP0YVH>m?sW0QyX<$WH9Jq?_*gHz_jsv_ zrvK?Lys_r@6V;qUX=udUv~DdQs+Kq>!JB>c4wZLR{lCPcc0WI;bgNaTbD}Z69q(w9 zZ>bJm3P)8f&ZhHksNQj%^`0}^Eb+Q(FxR=98p_byRVsaVUlgSVVZ_WTm6oR$Ogw_& z@uE^yc-9>m<{@~LT&Z#(FZY{%DDF8|sysZMFoXL;+ryPAzk#ebzJ)5%C3UT2(0CZiQN_|t&&Qhx0XKHP$Ol|zG57`L@r1A z0>yO1MVuxRxyo~{qJ4+Yw!a(ayR#HqtMjP*;SSwF)071+WT(t$)^qV>#U=X`jHq=9 zzM-oad_93y`+4>)gOcl;Mh%q@er=ejvB z^+&e};}qBH;czkzz@iJ>D<|2DZ4w`b9_HH02;Lj?ZNst5PFwM= zwnfP@dgmgwl{wU6oE#U4)gvY<1$<8HUaq;$2fjHeO-iq$4)5nHrnxDLA5@~@O|q2t zcq#$)E11b>hiQ#{l=41h@JqMH^&(#-XXsUoVo%=C(@*)@@iG#~{^~H_PucwF60UqC zx4OHpvdgmwQA=ELxUaXOLGD6J>g)@nJ(Q)#^D%6M2Ld(Sl!mn=dNLoVVz`Ua;^Qey z*fIYvgrCFt zSBLGa(~|5Jqf72MY8na-l9l7!H?${*;p$a;}{2_k63e` z&QZ)4RHC~PnH{~)C~sZL;aX^q71nu5{kUs*KgJPn15}E-?-dL_%3J{>m7--tZ@30$ zLRDv#-tUW%>%w=>^t7^`Op*8OeT|r&qilRufO{L6FJ+aboLC~^p6v;njmH&(?x#_U z+Pl-&Gn9Q}v#|d)bIBj1D=muB@R9zYHEYwA9+!Cz)@7FEkaT6j*aX~Up4{_J>B^X& z(I_D+xmK5SWkEwSTzT&pGbmk2F{55WEeH#B)0ODg0eJf(2wfMaE7_UkzP<~F?XGlX z(NQnBP**X?GhI2ubq*;Hh0am_-L|gCAoFeDxpXDcmYIWT;RwB%u9&qV+axpsChyXf z4)i6g;0$$UoeX7(BeO9#M`3Y9rZSgv)P+B4u52*2gL zRsWIFD4_~F*O2vd?3v>Ey@G5QduXU$D(8BXqlgS2w|=jciEXdpPBF7I%3mo9O8IQ- zx*+N83uT^R37T?FSMl(vQhlZf9f!E%neHRyeU}S(8|#5fM)#HT$0ce%_rxFVyGj$I z)7aU>8y0GJls)URpx2lB8`o+j`&SzL=t;9%RjmZjTX}j0YvYyG%9b?=@G|m;<*sVw zc=s5jnDLzRs#fd=M8JM|AWmmgD|&lFux&*UK9pB0&eXGHEenR-m-Tfj_ z;Lguaw8gUyQSc4FqtrF0eztxzqPpKxMo>p-;X&@x|NZ*^`i-R{Ys=2PZsYeMYdoD_ zmr~=K(EC9)qkDb%T*i&bf__3_=lFdtlK>qk32cYpQJ7qSR}wN z${)>))TQQ#7$oq%w|s-T3>^^x$CH6raadgnuCrSnwQyeQvhaHVex4&YIa*y7r~9Hw zK?uI2smm+855A+1>+%_O*_u6oD}07SE~v}(uU&9CFC06rs!Ki2vzq2cV9#}Rx#gNY z5;G!ET+M%Xr!BG*qY!XkT~-aFmnb5dp5l74`Fv`jKh|95ZY$bJ(@E8sW5Ygm9}Rir z^er^3Yl{>4v^pE_NSYyUQvS0{_Z&WxQp!Z^CEPbdg5+|COHGFJ*IhK zqn4&jD>#jTd%RJ%rKaq5Ig4`x`hWQG=(*|mbjlZXyK71}kql?*|6Y&Mlx=(y(EPPO z>dw-XMH6Ds>R$j_tk9IDS`ql(EC`==YD%ZAA!yw>7=!FI0fdguXqk#eog(V zM=4CGy{~USTpBx+z;wDD)G|g%pB#M76?QbSgOaT$@82eqj~RA}=cmf;uQ-397Swm<3|VpH3^r>zL0@C098vEy zqV_qXdhrZ7u5~Vg*~7JUnB;F$T+nt&I2tAD$@on2w^l{qv9F%&xSMRi^^q{Q(36(* zHra2ALg)2*@)hTME4D@>U5=IAn^MbktLDDZ`}|lrYzX&5e%|*N6Xnv~$MKS$qRE<* z<)e^HSYDytUCf{#FcZJqGS6b?9N8`?1O1mcU~J0;^6!as-c1~__q?HexibyJxmSOQ zG?d$Jr@)`S)1$o?$T{_oq5Oa=X119peY+%~A@$7PC(Mysrzc`_Lk}z*K3is!3*L+T zpG6f0a&Omo{0Q6-B7h`W2$frM8ClB#Mvb_`-BqJezg+6$|w7qqoAkh_yP zD@+IhRvAcd=1^FW&)*RSa?23vS5;wX-O)gf;M~fgI2;{5l5@p1*jW*QI+te2$NkCO zxf2OX-^p^SuxI~`Y|V?hQhNophh8<;c}?V4=^sy?B=_;vNfYJX=9w6{!Up}+CQB3F zbl7liBcrKidRmX7p0 z2az2}4&J@R^W~Mv(eNtf%)?;5JokyU(qC@`Or9?{I=;^F&F02yT3tE44Z6o>svb*r~bl*ELuCdKkuj=3LpcqYM7M566J1b7chQEarbB zaJkDYX~RB5PH+SU|D7feau4`0xaK-{o;F6l?34+E&dk{vHbI^`l8*Ibso{^DBuxy` zaDZORhC$Qi!P==fz0(f=hRl`Wr;g!|k3BNIjAWmk$#|Yg4L~;&`LkaVx|UN1dStP5 zBR^x!C-z@?eBwkBnrukz~}L@WigOM$+di?*SF`M?@IOz@!N1e)NXUVIw)sCk%eId=b0A zNG5IwL3SfQeCcK+CsWI0L;lf+Cx$X)VgSNB(DxN*D3d1nVWlRu2xf+|c(D&!cMl>r z%}`p|GmEolFisaPkWI&yGg@CD34FOu`; zkdN)dHK%vUtXDMJMl$bn#v&QSIbdayC$!owl4>OpIF{vw&-aXF?A4DZzQe0dg2x5DJyi1WW*BcW!46xm_M)a<;}&3d4}U^yJm>$dpC8{GCe75-u$$-Qk5!{&N?8i7KBYG1@p$6Bq?9DsULOV7wesB)QIWo9aEy^r7*&yV=?W-`+< z0Sk{gq45bbnP?u5lkv{5{$naV7RI4zqzi&Zo66?8u@FI=>qjh>D+b13h&QbGyKWu~bb{eTNX5i^e(yM#qD z)+QL2#`&O1cae1BJnDQ8UyP|VmWA~KaJiu$bXOV6*Q{SO-}}Mf?Lt{ejd^9IKThsj zC>xDuUiWG0`RXo|pU(0w6&Z*WKOLs5Dx`J>e|k4?$w6TuwP**dbfT@oHy z+EO#2FPp_2Mc-9+Sn4%fHdG}deyTk@1{%rQ*O`66dGOe?Ci3$01Z1?L=DV?(oWtH) z!gogmMw-d{f8ucLE*T;V%;dp3afr(2O#C8qHtUf+p5%g(X{NGmgBYCf|Gj){mj`q{dJM7 z&3buD3HSDWi{wkEAgqh?#?g<)%#{v6=s{+OuQitWJN+?czAsX*FO(~P`(g=ufL7BM zN^^RK2LAQK_0vYud<1&{<^Fj3!%&Xn`WH42Kqszq4*QF3uT#%D(MZ~PxueKz zTiag9bH0f<$qcXN)3|S!9l@&0)EfPqE2|nGLCYw6XlE~!UneHOWQPOX{+UR_4eZHJ zCc{eCRBCv}A+fy^CT=j5_0nT8{UtfSeNAOtNesfyI8z6?SUNw6#&+hqh3;D{m;Z`F zIO~8{U6}3IEDH76$6j{IL>iD;5%-Tdi!)7RGv?{EW^dwB=_0vfdKhMKZ$HClcrrDp zYs|=%O*EGO%;4oX_jAhK{K+JpTg=XA09tF@_n$Go4HD3KTJR)_L>@wn<<;Ci2etXsmaqFYEatIp{rED>LZH3|=JPv6pbH zzAHS2FOmzXjoESD71K``%ROyadmM7ZxE{uG4DTtLBi-S8XrZjjJeH)Fj`7 z%P7vsxQ4&~1mS{_CvJ>0loyNWJ#R!k|Kh#`_L6hHnj$GI}5VPVv@kV2gT+TD} z%Uk-1jONI7y#sJ8ls#*W1+uoMFOD&<&Xu*|^zYR5mr&<$eSvgo=7W#NYU=A!nl_YA zwU0o@ou2M`P2|(C1RT(?#_}gEc7FFcKbcvlU2kFG(*ExHP z*f3W%%!)yM>Jz@LnkOf*=Vterdb}6&|O2~J)96%cfK4mf|*Mv zomfxIlm6C`s6WdYU3$)w*U4IWf0uQY`CRE%5stELE{OA-BLhE&p}Mv!b_LCr$J%j@ z=R?h+yMff05Q-K(+>o$$mJD6Pye;yP+|6dnVCvg%3VKKNW=O-rAauCuj?alRW!InV7pN18nL#}wB21wZCX$@$}()-`<-hNeFh>m#hS=$#+8 z{;%@4cRbuaSYhYIy0Y2%I25wqH?vPu`F?L4hCk<;pKULT$Hk%RIx_B(d&+0EY62Ub)(?y<%r2)yo<$0 zqJ(=+zZSFP)4J@Rakg|uf2Pb|9)YB$eEtn)$jhhciFTnEXxMbA-98*==#hK>Ybx)p zWa-(s;6aYQbS(>oZvIXyq(vGLrhH4bw&+Z{!%O&sQ~wt|<% z1EpU|EP^gtVbh0K%HXxJST@8Oo1K0u-L+$}JHQ%8`Ztu@JI7*jZ5#MpZY!IyPPn** z{g6gI<+;}}2)%2={?SnBP!xj>)IzuaF;?~rjzQ!(W-xTpk*`f-aAA}kdaTuzhnmNr zIMEJwQuQb`jfOh4m~%!=k@KcUqn;bj)AstZQF#2uECfHdzkHjDT~JBU-R`vAstGhPGzUHh7Xe>l2PY2iSKLx>CI^ z?{g2C|5626dv6$CPjklNbvkm?>rm{aj`wGfj*RCs|DoE6Oe;v=st}x^ruyyZsq#*0 zF!I?GYuRv;G#?sF&IWTLcg~QbxaK>yF_-5*`}u$O=Mf@L*=QMq>vODNrzMrO?Bzy9 zTA|M6VkM(q4Bj%&dz9vFMf+Pcj!q^|X8i}{D(4pqLYehhub%8yKL)j_;j1&Vjcm~> z21fI2Q2wL4G;7VTlg9aa=^*LPuQQ0+ks&R$oabjINc$nt|HtFH(LzTKy&47U=X@8~*9u!3h0~Lm;~A?XmCy9`hq9jRrXwdE zjzmZH#yd}#D3_}-CuJ({P0c6BXZEbI>3_JNK2A>HoMrVp2P_`0&8*~b^qb^}bCF}@ z)YjqDx;R3s!Dwj|8V28|j(GBXxEyaBiV+j+&^~X3?86>v&Rc3_|MQ%`jT|L=j%5z% zF={wlO_d`vgYo{p8?I+TPC5{TBw3TIwzZj;a$#El8RKM$sCg^5LIU8GWC`7dLCT{C z0qA05iKcP!%DTycc(cS3>#}o|%AS-6{ zAUU9QD9S4M`N2cv&@tp56j-1(v%Cw~SDTw*fs`G?WJj(;Ot1yAwTH=ZCZU*WVF5e7 zM>jbeNn2)tag&G0VRJ&+i?x7N@gP}uDmAtmX?2|llOnWtoS?g&{O*;QPedY`DKaXqFzcrw?Jh4u*A?S z0~Ob;fsoHFF=O^br3rhD8kv^pxN@=bguR(<6UZL1wN?fm_ecNj7U*0QqJ&-b!#KUe zSk?ceGVil5c4Z$#ZTE7;O`pETXZx|F;FZ#k`iosn_i?uUS2^{?2e~u$V4Q6|nSH_+ zTB~-$utO6$n|e=`=PvB**h1dY@JDpcPP|TRB_;o@L3egw^w-vM23Z1Q{%nV$-9~<) zrt4RS?HH8OTB=V7#M@!pu))5S)F%TcX3AFNylX**a}Z7%Z^54y&E=PfAQaI9zpY+V z>C!G3+xBe2@28DqF+JD9&K#X*)|Fw@=cc^a2XEs#a?x|LEXwy`Tl0GI(dl5cUt|HB zKaHf>)nIIxMrO!=p7VuYI!WE6V9c9elaCa;Y^5sDKbWj{E3|f;t8z&RhS7L(gdQ(c zmGjU48e3tX_d(T)ndBp_x5BHwF{<3+Aaq{I{Q7aXRHxbp;o}%)ou6o>v=YoyQY>-r zC6px70A`g~a3;G=Y3j=P(#*rS^WIbG_Q4MwvJS#xd7Sbk+z&t796-YEEaesbqr>*^ zgY$y(%C`VNgumDW{THRmqhdca-?1A_CsZmEJNhF*a~Ha}-BeB-@JA2w7uw9ct;~JS z_5Zvbk89mlI&)6AyUTXiXx&uonT@i1^EMn_RHdw>zQFYMRs>!tQ}VL{nQ^uitsh-h zPOyg*$}I1y;$r1J?~EgpwqW$bQssa5>C_XuaQyuxr5k5oem=W!Bl?2!PzK@o>wV1p zDpV#j=QH*hGw8d$Qsy#)vQJNI40fq4w{qWhf6Dxh|2)r)zV}A}b&k)qtzh+07oRvQ z8?)aE8mDGZw-t)VxmGZ)2aGlk#VGQcX8h{_m%kx!>`rE&+7X>8E17qxMLt#c=(8rF z!Kl=O0(v(}xu8;9Jzl!=^M{d>0y^`^KhS_1=7 zmbDAoe$I;jhCryicj4z5d!-9C2yTaW;Sb!EU-as>H`tAX#;(e$%s^&|?M9`ooAQ*i zg9~f-qh6@1(!Mef`TTf*bG-7tQxG;8TXMFVqiB*ZeSr7t|E}}%UUfv`J#xqS+z!0i zP;B9>#)5alfbGr1iBxKrSW9<)+FX3y9*)NJxYhdDMC9=7SbLlNx}kN&Nw+YZpeLx= zndi{H6^e-q$*+mYg=Xzgn9`3_BKIP#IX$ogZJ_b(lFmck`&AdMG2X{C&v62IGUKdq z_riQttaTtpu!c{WmZ2*9$TK3w5=oQZsxEs6Aa1Ayrmt$I?B_dD_t7DAFVIwmPUGF7 z;vj79l4fEM0Mq6N@uGb{rNs*BZ9NY_wCSU)JrF?d<^lGuyDQgx12A{Q0W|oip{P;M z_;>sPjJ(%cabmA1$MgWUr#De1QcJVR=>Q7WX((MUQIme<04`OxQ?mG8_&zy+H!r#= z4)mZja6AOPaa|R|#{u~0bqH4qdMXdTaL!w0fl+^YDE^-Vu%+6f#yWp{JWpKz8;Pjh z+^bU-i58rF4Poyt)@7+U5*3Nb`>e5>lUMDfk$9$NL#^s+aiU%%8Jjlv+ij(Y@`}Lz z*3|s_FBT4;IK#BJ#pQXk#CPgSK3CepZp&!VaU3&pKigtt>yF|Iwb;F{+rq`~6<%qu zr*+U4kzwQj{ZAi6_RyCOy)b!f5ay30?{V0*i5(pSv2Pbyd8?1)IW?dzqkz8MC{2}e zG5|3Xtq|RJvPy9ZfYnv<7}w2KnQsn2mYpR+45z5H_-sGs$3Jq0seI|*H$QEO1AE%3 ztcM3+cq1!hnt#c&Z5M!zu)_2`O5V+{WCZQ8!n=T$svrMF3nIkR^C;kV>}!wKuK#@s_zNyUzUlYu40W7^t@K{W?|2XYxP$hKz6(!!%-G z>T88bV2ABw?SzImS|ZXuj1D!4|=|n`ws*HZO7PU=VISv&Hy=WGv+S8$$M=)?Lo< zdj%qyzA~$;W|);9fW>@wZmuy##9=;5X8d^#T#GS+{!MD;bH-aDpIND>w!x#@?zpM= z!-8I^h6nl1?Pm@Gdo=}r60l~lKc>F3#Ygs=jxF{_;vhRL=9%C)l0Cfzc4UwpLjO7J z+xgq!7tf^M=6>Hsa2kg6*CDc1cA!h^obs?$3nRmC8ua1~)6eFydX;O!GYCl_V zk;)9^es>+=(c+NMIvxUDdW$}&429Y9U>sQMfc<+$i1*~KxVqb;$DGc>#y$`S{*li< zxven!^S}NBGfVEa6Mww|Fn9zrMXz)gO9llXERn3a1HHs*vN6t$`(Ir>NR&{wyP}+W z*I6UPx<`KKwv4>2O`}EiMn4pmI%4I;0pf6~AN0w!c{E^zA%0ls;e>xLTMK_zKlXKN)^*(r&x?pD3GgNV@alv@VaYrA z)p%+-?q3wujpLEyXoKTHm&EP^aVQ`cblS4ZLi1BBe0STyN#mO6vm+MG9qdu=ST6Rz z|i29==adm|YRQ+?r z{e$69o8p4hjq##Rb}0N(oRR72BldO;K`40zS3GTmpf9Q;@7i1Rc8EQX0};SGg5UHl zqLX$YHr^xiYT6FbhI{Xlo#ds|KOpXP3&6rj&X_sJS_FBMpWWYu9wj^R@S7h#ll$yA z-cd|5BC{md6{SUvVrH5zbo#mBj)t{3-oOuzi`=00(@HeS@`cMbH#{=iB@!O^vTscm zSf^d0Uyd(|*SH~N?^-cNgZz-$ZkS@YR%ojG;U#bc=1&I#i=VHlR-ijoPL!orvROm%9oj1$DeG1S^K8(w7^B{D__!Pw6Q%RWVl z{X6NGqHkyLz*sSl=hrCanu#Yz#J--)VzXu@`s`z(h|I%=H>hcEmnNE%g*g7ZCtmuc z33uugUZr_q&hZqn>?e8h59!zb94~^%H*0d-3o$q1#Gzk4^iz1jF*RJ6QyZmgK)>hE zaPfm|iqB)Hhwm6JX1(^Mj?xDv%yPZU{51Q?HT!k@vtNloGWl&9G6!M#8?nxm{bvmu zbZq}lY*~W;QK=R~(O zdQDP1@S)8`akF+HzPNZ{URtTR$Njk(bxj{;Tob=d{qc7--{PoTZIKb|l@eUd^i=Sk`o+Dh?5*9YUw{LpV)u2`DH-v3iyOf}CD zFW32EH90JkzhnrFzP?z#hU_(?6XM%-A9(hzIZs*N;-~mvehl~fSfgO;FVUxeGOjML z!C}>JG5r2fR65u~@5&!x5R!;ViXBQr{)$VBkKiHod|}=H3Ey4`7&e1_n`QsRh@WK0 zM=<|U`=6M0o4w_~&d8hoSLB|GLFd)fUk?4n=Oh{}BHZw)`jbea-XVROJNl@<6amrU zsJ)kd)Mxj_h)1C~?LjT_{##<;LEh8vxI^dXb&+5mjOEA3aBO=^*c=VQs;OSk9eZEA zX-&2nzqd1P&&0Y-f!OoIALsR73onZR0cvKvJKPbz^xDq25`-tqt_%G@U#R$XC%vx_p+DHq-x7$vH;Y6|vXQQB48o5Y z7lkMHmXR%k$qX$Jr91s_lRB|C?FvLs?k#N#YU=q-wyEh}dz6Zy>=AWtSVy<^p%i>@ zv%w0FI=T^R$8hq7EleKN(Otej3F~`Pi}SsX?x%Z+n6QnRa7A@=Q$`)3znHfPIjojg`=+g0z_|6&MF!p})w7!YKnlPJ}e2w)%1yYOi}P3@&+L6nP&FQtyjNxBkbJ3c-Ec6$d)`qx@tr)*UJm6X;XS z)e6J4kbLoUmk-p{!ZCkMu4r`M3k%uXNozw%i|yn;EPPs9 zccasKPft(+0$0=|VpgmHZHOtK)F# zK`?%be`2p2|J*nd^MCyni=t!TOCQBGau{^RMImK*3^T62izVzukKx(icJY(gZb*)n zP87`Ay%V~8zt#S-XWHzQ*u}f~1Z(!@n%x$MK5*8$B^;S{RidbN0OmXhL+Shiv9F## zBG`NV?{n*&oFr}(l7qE48kgE7h|%|4P~;I^;~aE5_EwxIzJvtc^}>(66YYJAp!L@V z-<{rzx+5;&<32l#Z2CcTj>*TUr}o@;K8Vs=68*@J8j~rClcmhMFFtcgZ6Y({gnf1((itheMjI+o@ zG5uCoK0gqSyE3qve6t+Kha&1>I^6F2K`ru$*w~*8gcc!Cb9*k@9!|%Gv`9F=AZK7e zDstblmwn`!_%$dQ^ZD~Q9Qs83YL-ZySR79A>pL{!&+b(Wa&7L5LRM*3f1{w)=B{X( zABmn3)TZlJi&L@Tn6-d2fR@E#YJfkMX-1*T)O_*rx-T?eMIwJomgrRNg(~J|H7htS z(9IKLPDD`$k}Sp_;;d#Z`@D5SMGP7BCnm?#Sm)aF%S2T{3G{8)12HTY&9)WeVjWw2 zHmnfO-d?~E3p=>?uM~qO(vSJv9y3cSMdE^UxTEFB9EvL8J4A)0bDf|*w@PH*V8+)V zXQ0fAVc6@kczWyvrmXQmyu&3i@#1l^ zy}j@ur%0^1k%^0Ud~oRcMPc4Q6SJwmb*i{1tQ%!uB6VHWJ&VK!?sau_BJg2qk$BzZ z82*(!*PooG4f*p%-`ChUs|rH`gIN$`8<17pAxNZah*+^(C+1F(JuZBf+mv%vF(h| z;GT1&sSDQVpBA+PPvU(SSDej0Db7|f6Z5wllFl6$T_$8>ESYrcwxkYrV z^zv^yfv1{ePPRWLdVR}4We)Fh=aR&V^i(vm4W_^Gs2H%BtQ-F@*gQ@Y1saKPj*P^h zZHXc}k?bJt7#uc86du&ZZt58a>&=P6IUpS87LaR`mndqnS6p#39!p0Y74GE$=zb|4 zM@}6Tuc$wtH6b22$5?wJ4)EH5L=nRCF8fnxRe66lf%Ghk`3$nq+Jmpd~!?}msS z=L!+=gG|F+Ve~9fixQSj163>Q&EC1dAxt(~iPR z8wYXjXc(T2j)C_U2eGnGFxpk}uB$kRHmCj3Nj)A>8yrQGEzD#th)3Z=t?h|*)MXS;yr}r4QtfD z8iT~%OGJA&TWtSXbDgv5ZWYVVU4gy3HIlNoi}eFap+z6K_M=_m@19~j479`RG5f^M z)C};w)rm2Vm>y zdBSIE22LagVZbv3k@oNyx*rLFQInbCW=0~Kl9#kdP7^0H<4~Ovfw7~gj=d8_E_D?2 zJoQD_LF_}$ioxLf`l4AFd+D6J2XvbzZVnDW_02d$kC`EMJ)&zsfooehQl8)s6{MWUCkBgUG|Y5zcF=CT#bEWe&P@@px`Rjd6U5yI9&YcdKqzDY+?O)q|n%OiTX-A{Ao2- z^vGsTJ-Mtcvd4)#EekQg(-DcE$BSuE=dtmx6C#(46IEUkhW0KfoiI|&ZmHldvmjIS z`inyyRJdgC0dIQkeJAE&csp1S-L*~MMq_SLti}J70>+9`r^}YFWAt} z+~Y`NF@ev;xcUkBwylL2w9W;NPvTMF&{ho2b3~XmKPOj1Y@c8c`5+F4*Sd%C-w|B?HQ>^>ZvRE5Kq?o_8^~@kX9UI`6-qP4m$-?Hsb^y5mC`dsJ_T z=zrpgrB(KD_@iJ}t`FxdEAVBP3X6CjerIohM;p)L>vhfm4orb&yIfp98w|UNx`?cI z0@v4t;)sV1p7l*52R$6xQzpX3Jqbm=5jaym5hU-T#>slFB1~ZRf$Y4Zuy^3~2ZSi>g7?{|W;t82ZQ-cr|MrD=bK4b1`ZUlP&h_s@J!_{&dU?anR;7}iDgdk{10Cj?{e`cA5c`%dBc*AR$P?NlQNF&lk< z7$(`bR3&syN65=?tcz@{ie8+IEQ3gN-B(vN@^Jz+w^2BL`)l6t<1tu%ompJp?&bB7 z%zNVbwL9v3o^J!PPanp@Eh0Lv8GC(Wd0tM?-Ido_%MYeH@tClnQ{G#0K32rU!>jrF zv%PtSB$US^%xUz*_*t%K%8z$;?Whx)NXj)gLrGkkYJ1&_@av+-y~I5K*ER;9g5#|LWWEnVNJ_BKC;{F{+zlJr!y)cOegs4MmFdr!5EdME2H zF|f?5B84oHS;4WmuUo2GW5HSWM{1!W&Z(-t1Y%tR^-{O9Rc_Jj_l$_g!WK!YZ->c7 z_KnA6^DtElCl6-0$1`WkLpA!WE3Q+w-FcX$s(mMV%M|V#qgJYdBB|lGkH?1D15_9K zu=n6VX64D!JS$0N?Hqb({_ofSpLaJ-xumjuQh_A;W}Ce$RIMIghICz9XzaM4dR2La zb80*GF|Vp@t4fg+4|EyQn|pp&+p!$F!C`~ z)(4(Jmyj?RKQ~gYe#u7b2jMVHo2x{}Wx%H$`C7+kDy6B%aAiUibXEF_S_|GQ=S8C; zT2~2X|9r>17`z%aLAj9=iHBoi(RS5nyH9wv zv5I&s-uO+mjjZ3;+woX?{f4T(Gke>)HP?AZ&QPV@r%JqL&$*)C5asWJa$KEhizd0l zl*BgIu!kD0Ljl@K1LG@LeaQipduJ%^hF->c_B`)=TBW@7Ek(NtuGl`(Mk$(8if?41 z4m{zjZ2emTb$UN`mBuI=+n1m}wcO*UCMq7eMNr-0y!k<#vSfN8-oNI2-8WLXP<9R) z$3t@pT@rAl)I>?B#jJ*r2{7w3 zUwQ24h{av6a$zMH#H9v(1|7sI+@|6&^px6yqE@yX{pJ_j5+@?pURYHDP~hZwBROE2|=} zz^=>#&#H=)p2L`#uI~fQjO$AG@>1xtW}SQbrZVS2F?Ow@79pfUX{vnz+ZKmF{a&fk zh1sT2&B9=}@1jysKMy)f!%_0&yz+5E4t~+|^Swx=3@pt=ZZ!9b-=~!hN(!t}qEKa= zqnvMk6gQ4WlPh&Xu|6J$W_~gBpJXUkVxlm0LoENj6lFpcy(4|8TXj9Em`n|ZycCDW z{_#rodw-ZO6W^WF#P;UjCD2&Tytjw@d2Qw9xb+O*ecmuOSkP$-PO^Ps7iETb69 zSjVo$FvA$p@1C#uT^E0S>Nx7U-o4Lzd7k@z-C3w_;XasmURgnH!!g#-<5!(ks!gN* zu$BD`(^}AA ze`?kJVvO9jLFs-n8b{WAI?hJEKPgM}u3~Ie7!)e!l!xmsBX%Wwowpm6leL?e=MqVt z-d*K!(?%R5r>@ZQFXiM8jVSpg7M^yU<-KYnzO83grEVXoxp@gQb;twXG)S7y{tS)n zX;|PfRLo{vz=m?(4T`j6R3`V+*IUq8F+g_isKcuIt(e+XLkw@9hMHeC0t(cmctADz zNjdoYTrYZ!590wnKdO#B@ztPaLpIbSN6E(2YE-d~IY{xj zq#fct@op}<{ykgRkIt}TJ)Kx?@fbcOjfDa`+Kko~KhU=qqYd$Tbxu_MFK<-u9_-MgIss zd&7P}$0_1=ct5TW%7@MlV+kzTgHYBd8|e}I^Tke_m_kje!361_R*a(Yg&5hvKvF{r z@Se51t3Qtwb*?=tns=bOaEyF4jM>P0ixBbM7ZP|T6Ixs!M!AlXyCv+ss+3^eOkL4E zkOJHM6684Qh*t~Q+v8Yc4IeI@>=Ur~cqwWZP!l_ioXjHjjlR*AwDt*j!5&h2l!lD% zlz=MskUpNzY5BvX!@6_m=0-h?g^ny8+JHeP=%ep5TEcj@NwVJr$Ip$#xkCf2*l+dl zu@ton4M+}-!Js%Nsfav>;p6FD%<`7e!RO#Kf=tELe)0?JByoSxUy#2{UIm}Q$jQuY zda+ohs@B53B^_(5yd{6rDYQ|)QX4T})F&v(AEH*WkBjU*aTKrPnVnPbC~HCvVq9<* zHg>d^*qD9DSjx|QoUNRBup8TEvF~CuTLL$i0`yCs{=-Thvfj|)aW=JmGh{i}Z;yf; zM6I-xtFv=ZGdmae^~~jdyRFE(pG)rmMERIGbOCudzTZTqcSy&i=Xvl+`$}?Wq@ZAN zKKzp>%Ze%m^{ZrS{$MO&tevZvGZQ*-f}G$PcE#L0bj}+uZV{=a- zbS2s2n!eO;pT?7d80z2rsd!MiL|Pvo#PtbjupQwmH{B{R@L?JzPxThV z=jCwCN@wP@rzp;rVdKmU1UkBl+0!C8H?y}y|KRV;4k(S@jEhw+63wwpr_R;K+gTP+ ztFR<3lbmEn(K);Y>pGG{b#RVoJjp=8&qUf)9KfEoFdVb7mT3nLVnAy+TiE9hw%;9YMU&yu!@|3}kvtU4$ z`(O=sSzwWgG0&4Rd5@c1sG%N4F9n~?brIp;dE2}coapN;rSt}N*^~mce;j124*i(B zQxM$WUS52e0Nu+eh&w!6Ot~-Bk~eYW7i;=fsPE9&jINe5W&RoVJZF9CYiltWFWK$~ zFta=qUpz9TpKd=^dr<%RkBN-EUxg#|AZLGLEgNjAaK4^?%UE;WF#u9%`#t^BNH% zKa8wEq*)9?E(Xeo4&~VPfc>vE0TM(%HdWWV#y7lGN|^Vd+igN4L3(`lG!FDPq1w{ZiTOy%$%h zO}f*(RuazdVU|H8xd$O)HFOX5>qNo6EKJ&)S0IR9Dyx!EshCoZ%!ASRYDbX#JzzIZ zEhkg*$Qsf6b0^X@V&PM~O7yRnVQ_UUjB}Suwr45sE|0^3S$;Axxd>@omkhpNBG0(b zJgH=T`_dxW(3*$+P6-Gb>?=RH=itWk1X#>kD9+RlRMNA2cm4ti4cvk|S_*{D_moj& zGj!eGbsrR-RDW?e^TIA%`A|OuHwUSo@~K7X+8b>x(c#=*b8U2srv$E z;LxAh(7{{BcAEEL{-IDL-kBgL z2k`6F^mj*oB|0v9@s#?yW%MPTDcXZxFUjBD=qy>C_n`841oV3Q%8gYO@Jrr=RxN)? zKUWU5Ws%r5W4$!?Er*>swFkX}rF#5syj73JY z#pO{cp0nq*$$z=LYA7L#DHe8Tmx%S*VlI;=#UtjE&U`yg)_Lr~yx=hC zE}SF-l6mJc3&-7NbFpYF#~Bs&XUpfv1>JJ=xEujRFHi9e*$sLs_jWn&B$YchQeS0WVnD#Jtcc4y*OgCv*_=f0Vjf$Zz#=H=6~T$YBY zuw{Xe%9M!+ z(5F@`*I8P=Nx)F%r%XTPB=zGGF^+4{$Md;I)hKxoR)GztLb0xHjHu<8!#jp~xX&iY z$g{g)XCIFG3nntO<8I^*W==}tEV*a33u!G8I8;q;N$O4n{J05c_j=3irZVg+h{Wx3 zKQUG*!}gFUOw3#%&03`}aEnG?w-qvEKnb2O)64L(pTxEmVK4bJJ)?Xj`34ygC9z1b z_L2nlJE5WKDD|+76p%@ksjHT@EYq$UEZR)6PS>F3y2|a3XZ_ z-NnXY8wOHibMiL5_6GDXyjL)HcAk_NWFq5G5-iKyWbgD0B&_1SdaT?qACot>q|mAbq!X;@nBB&!}N@LZVV=H(=IWZ_u7OZ{Y? zzxu~f%>2nVW8Uz`<6JsmgmiD%jb8Q4YNw|=_qSaLNMjbW_E=e@^6#7s$AS6A^1b0s z`l^|Gu3;{3R+Pa`g}UD%T=SVF)Ov^6n%!L``eq3{m62#!?aY=B3`X=6)WGZc*{Ab-O*K!2h&$V zc7!Ti#H*NmQIlkJu$n8qn3-tNmW+(4&Js8(4cW(2@Y2vpD#KH7dVMNycYUKIz+7d-3DzUp{5#(^h-Qvs55sVH#fabr7{<%on0= z>Em%8tTR}yYVKl2A$e6E+M@f#PQ>Mg;nknI@|$HDe)kWDU8KH*`jsMQ26Ne`O%{_h z-tV=^J|1ZyN0r5R`fd}>Y1&9F`#igDM&g_HPU6?C2)0VH3sqg^+<+a3&5Op^4&?dt zE5y6+=v_7E`Ih(MmDaHsc%1i<$LxoYIiq&QPP$y6MxCtPOQUTin4Hd<9n{UzXFZ5H zWqTw4%}#QVSZcMZ{g_SoxucBICSPZU0$JgX(rqbumP44|X74B#)TIZ!U~g6FAPZGC zqm`#zFMz9WGffHQ($pfI`02%BeCRy44XvHQnan8k_(~7KF!DD{G_fg zvx&qVW(r=bHzs-fKT^#j}Geq$y2l<2JvHrkx$$65Ex)!5-&x5O_FR_xWMGc9m5e*AfQ}|T0Qy$q&3V4S=2KpQ+54^%SXqMG^hOPL z>m~oz|E}*3!wnyGd3&k|zovx4w{Va=yu{vDKm>MtGeVjl6ymAlCKTw57K671=w}?s z9@}_n>{S3KttdR4K1mXXQs>+;8U+WY${W3W^n1oUaUDqa(Rrx45Q9{ffUAe+qJA&A zuVtq4g+>l^5_nGj-bAi(FFQ+3g7Igj;@4*zUa{^v_qv&AkbgVDC=p9*EX1Ea&=Y#h z0ZE)L(PTM~BIjg~CC^2jG7-eH!XI;HNF@Cc?H?v%{QK#0EjS%*wY*=1O_!g{m`h%q ziXLw*xo@T-J|Ybc;g-@sO_vJU4lbiCJR9GsGZb};EG*AUK;`Jkvf6tKR5Qt1b(t#OA>`<~ucA*1-WQn44Ca1}vnIE})Krc}vTrhuOoyu`GLoFU z`x@!6i8c}4#AMjLW!~*v6Y04n36<1Ehgg}gzNA1)J-t0c%;eXLJSVoX*VV&J9A{H^ zNiT7@mbn<^l5O*6210wA%LVS68|m5jc-^>v_nz`+JI>Ynq0E1MraW(52)DCg?Ag3l zzO`b`U=>*eZ`zC5OfvAZnO*f#MGU9sLrKoY;O#wSrbQkMSCi?c(O0(7@6+lP1+!R9 zDY44I8TN06p3#y32WCE+#z4hjxCGE6>`8{d`Ml4ip6A=a!{V?uaij#$hw`8|`(Fq2 zq<-lZM0H3&>a8&{F(?yXzD>Z{-^Yo0)@Dp;O+=;LL`D-wmZZ_rNT&G~1UN%C~*UH)Wm9 zYptR9bB}W)pQ>$vp%`#qYmL~9x@Cq^#X61SnoQI@ohp}DQ>t|)WAolr$>O=XsBSav zy@KqGQ(&y|W>hpozT-LY$~XT%&i{_~hhD7zTAvlme6<&SvvT3GReZH}P`h@$N49I1 z-|55Cvg3#6@7+E;Uk&{59NqrIlW+Uq`!D_XzD582|FQueUO)Zc>!vCnzW<^7hv(@3 Y{(WqR58w00{qN`K{`XYZ{_y?(0ng`HT>t<8 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON Z 6.dcp b/rtdata/dcpprofiles/NIKON Z 6.dcp new file mode 100644 index 0000000000000000000000000000000000000000..eeb45a6b82fda30ae8ea94315136012d663eb451 GIT binary patch literal 65350 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 Y?fC)T{eAm?J`Vr6|NXqP_50`l0i+`>b^rhX literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/NIKON Z 7.dcp b/rtdata/dcpprofiles/NIKON Z 7.dcp new file mode 100644 index 0000000000000000000000000000000000000000..19fb7bba6e7197efd6a8b1ba396896e4387edc82 GIT binary patch literal 65350 zcmY&=1yq#V_cnH8cL#QNKgSLfySoE}ZkU3BnPC{ZQ$P?g5GB0CyJ-a#rKJVz?!12I z-uwU7`pH_e=5Ux9W}bJS9nXIDtXj2kNn0%~tn#^2d1pt)=ygKmMQB{O37;^ViYl_viV3kKF&>Ljqs-{J-_ze0@ImzsLXc zoPU1wR_U(O8?tlAEWXxXrlr+ol$KUg?eE|J+~58A-+j#g{hq(#zrUAt`S0HL`+tA; zYV+UkU&sD;zeeZ3`^ZoK{XOabUgz4&|9&^0{NLYyaKQfgKdJxsI*T}z|NO2! zeQ!JY`y0e>|Nnh!X^HXA&A*K{-Jj=-$&WMEs(FJ`#lV1$p`L{z`f01Z~LL)Li_oF*Km zwo7H$5@Uz9CpXdY%~Bk?W&^FW>*(z<{&^2sfi7>STNlOf?Pr1H?ZA@?Vz-rNv>ZEP|w%3%~sOL2}T%aCBlp9P4s=O39cK7QRT9Ys>00RdRT(LR_W2( zzUCN{B7y$fIn;cCDb}@>K$xyWzax#HIw!)x@cwjpiUDk&+hDHoFw$Oh2Di6bL3lQm zrrte;-Ji|z{`Lw=zoU;f4@}XraSuJ8r4P{;V^q`{(WK`3xNB&HbGA~_9;lB^OAXPb zs}4=sdK~W7rhnjUSukACmWuJHN`$^nchi5Zwuibzgdw_$^oON#G;x12bob))s30fE z`5A~@)+@c_p#t-Jag5xw(jDWK@R`hg!n3z&aSK%#y;h8atv;q%*{e`+T#UqBZPN#t ztFTri#!HuJ>27sO$dqD)zH?9iJx_t<9BY^FErpXU6;n8A!hC_}w)Xuc8ZJBu+?w;4GdJd6GwVzdtFOe5Qz!9X(!g2MVz zN4}Q(OEK|bUwSk0EcABCP%))FogHn6_$yNMk9sBKZ8XM_(-O37b5CflZvx$V5zHpv z6MEe?gheM?6isOo{Bur0*USo2E1OgA-$!w&hXsaw=t&bsAAspcQ*`<;hO|?6;lMBx z7_Dth?T4KP;>`cR`RVOnX%Vq9F#cIOCvRRjZi*wu6mp-ubugZVD{!D(gw4D6Lvcn0 zueTzM(Xz+PEN8rJFUIb_HMpLoM&vLt4jlABmAwm67Km}KM<7mi(O}+AF`8QkW8-lR zQcT5|o)U%D6KaWJ+-HThOBGC7SmE7H8Kha!LQBC4&0VAz_ugHw z(y>P37702<$py=9R@lbRbxn~{n4E2fJ_~Kpr+a|Vrk4>uCs?7!tZTyg=cgb#U;(-9 zdm%00Eb6l?{=oU{iYWAYBS&I|2uHs?!QClJRNoe%a%vkUNS$%{jtKpFbZ1&{!Gu~7 zc5Ug$KD%j9`BMZF&q2)7%N0YriLs$-2ovpe!;vv!1l=9VT%Wrkm*X=gdMNv{(j9)g z#ppeH2-7uiN1+M#iOUDD7Hi!R;v~k#-QC&zOK#Z0ZF1-SpU7zEikaNzD`sBBo^fjI zKE|(C%`}W0t;8Mh=lY#qVCwFO>m$Ty>(wfKr?&$(ar`HhIHX^lV2_9uVhoJTN$)XD zhAMs?XY_6*^fHlR(r^i^n??$Q?@G{($AF02i-d}W68tzUg?rOlq3)g-4Hu>8d}fvK z)tbLA3n^BF%@y*8i4p!lg1Xb=gvS0Ne5)2iuVjRt5ahv}wU&}lXd!T^Zr2P0orrX;cLwF4Jw;jz!4spe5 z{`gD%IVf$~LH=(}Me%S(jn8UV;5t+)fJY5mn&`vp^AMm8?Seb2-}k zi%=Ne126W;VVlc+&YCL=mw$DDg2!UL_G3~eA9KK4OEIFeiqq!D+C%w_+r|KvKI5ef z7Z*s7ATmuq&97JORtcWOIiy!vOEGnn1jkp))303TvFs}UyfvxmPuq!+z0D4{5q#>c*56iXaftg9Cu^LRROpNJh6d%}jV_uMpKOWJs#FZch6rF&VKjvIWNiScE@ zYNq<^0^dv#CZ3zlK3{W28)FgnIt^ig=aew|$Igy+VGEimurAjQvGJ|g)0d8@v9m+& zGA-6|zau0o>`xj9B?ci}G0|gFp?0am7 z^v=O3t#iQFBO(kMVuy?g4%l^rpX=`HVQOfP++-1AUdAj4DV1XLU=cRG@0}jxF2R7m z?f$^oa%>cf+~I~&9{b*SUSzAAdtyb32-mVNF^76DtiLQmddOuqVSx{pT@c}{=rX%8 z#TTz)L|E^BiLJfki&1eRba{P|eeC52;{Ugg-vu_Os~>jrv#`wNJQMxpi;a0Ad`LUT z>bm*jB45|{2xh~(`=B?!rq@k<+1?~C^uEZ?;B7Zn+RPJM7+twm%*D+xC=c#cj)((SW_OO?=N_^!Qjv2p}jVW}((K=hKu3}7og(G6^Y_Vd@ zTsHK$92sM6QE+-TOByPN?3oR!C(L0P^W@M@v%xRhIqZhH95-TZP&{H5bB>T>bFvMh zvyw@ns1?B|0{+=kb^%VI}%_#vFrv zJtAz2yun6)^TiXMzimbwdw<3U(S1btJvEkf^76vIM|OB5h2rWP`}H)(n0Q zST)23pQoC$y)7Mhy2C7bB!fWabbJep#~=69AO@QgLu{jy|_ zY~;A7Zw=ie7HsuhzHelW9qV_qz}fsP$ZT-;(JD5L=doRjY|uit1jjZwpsmH9_WbT^ zF{`il#rGl+9^EWqjk`HMJV*atRKh}92Ei#ngx8`HHepaO=JA?hVM#HI$qq&zQxP`Q z6tOGqLNMTv2qQutu;ll_*uib@#en;4p*$E(vqaF{a*r*~3qn~x5nipl!)$rZvH7zd zl0M&NpN|IMT%H}ucjvL30za&9wL`E)Haqsw2h-NrVg2$9R^P;Z%MV*Dr8Jfk;{lHl zTMTcy$)tL20Iwfq@d<2moeRF_+Q4w}H5O;#j9nXTaN_0`i8!N5wSwDg;?Cgk;I4gK0gfq|GjyURLg=QblF>$IR z8l8Av(()XO80dr=sTIUye3@G(1={FZWBUO&)~d`2e&*JH*!jQZ;Q!Tw75(a&Q*j_x za-6$fsbghpLXdt{gmZdzY;Ky;j3ot~-Yx19<*3wT87z4?``-(;~8(Wj+dp)onZYx21*HrO_)lzFW4z=Jh5*q|zA`Rm-Ut-%_37ay>#JfGZSZ4LXlLU#JL8bST7aX;ZM zv-5I>aLWo;a|+m~yDFq}43E{`W)lvpkhf}Sz*d8Uv@o7f%cnu?fLJ|e|7h~&5zm2 zrck6j;OG5yBl~(R95I)8uD-63)qjq_Sd|EwBO2L&hDewl7r}OQBU`=xJTyy07=N*m zt=n`SFSxCKo7KdG?~&N?$_{Irn%I_&k@%Qwhdvh`vyj6P7$vqtqvaF!d0sfKzz!?) zp0ZDm!f@`ZE!+k?V-bf#VR+FN5f7iS?FGSjx!o2oZJ)E{IzgD#+!l%-&sm~n0Meql zUtRfv9lh^|_IftxyXOTPKfxDkK3L=Cj2G;~9&b$Le&ELK=j?BLPxRVojgpSf+0$xw zRCTh(kS|Z!5NkI~FR?fadGue_f1oO=P4+~1<@BbL=C2D^5Ou&?qF`)wG5*zqFNa{QO? zi@}9&b|}hfVzuutAV#pm;jkyneBK3EN$hw|^^Cn*7LDce?eHVv1)DM`3c>Ge@gwII zyM8YcN6+z?LT{MSkqBh1vqh}uJ9h5bIduNPYvE}hSjQt_xDsiDGwvUmR!s=LuD8Lv z*iX!ITQFMwZH-yhpV?c_KwL?(hQ-g%tSrDETkWmkJ@yNmmEa52c58Ti`OLCDd!xln zYtEH?W;RE?aBZM9cJKVe^xAl0L>Ftsefz*3l)A%!Ukmy2_iTQl8&>zUMz?iuS^g_m z3>amNTL-I|QqL7J`z7eGypr3b1}Nfn)9ME-Gr<|xR$9TnI-m8tr$!FXN&eTK^=_22 zHRIxNc#0VJbGRSg6^{`-kA2mtgpE{Q#|mCMB!=*H=Ns6TEyg_UGM3!!27TE5*k5uUU9d6grKO zp_}eoHqa{)#}0Cyh`nRdPT^=9Cd0sncWjDVC|cC<`efpJ_HkM;d9mr-@KmLMZhy#+Pd2C~+n>d^3fGg(tOzT%7mg&h6 zGT|=URdfU4jdJMu7P1b0@th-a#JejGSi#mfcxXG}*QsK5yu%fo4|BroizVzu<3-d> zQ^3Nll#NJ<#)m8g+=iF22iGH!zFCQ+17&P|`8iB%P-4{DGUhfW6w?e;=<%$SSw;sT z>j&pd=a#ain*z|_;0)Eu5{6NJ@YYsif4^e3a;OiUdZ`h%rqX8X+wl5g zRwh=CmtdMy!{)xvghQqTFE+ZegfE%U-7Uq^W$tW)WhT--OA+_RlRfa_*TP+fdu@D~ z=|RGR$@Zw&62LrOrz7F6JqBC}W@gLMkbBwzb3TMI-?J(B*inw{?IYP+Zfky696Nk00`@aiI2{zn1a%m)6IF=Si(|_gg7JB# zGsfP$%2JL5V&-*cG<$r7E$ilwkV$IPm0xDrO+L`Qphj2yI99=N?lQ^+9z8Cyv=SbF zmpNm@(OA~Rc%E;=x$m#hY=6B6w38Kx8G4yDOL0f=4W~bFHmTaq2I^))JDAsvxAa)S z*lg^bFTuJ`y6o?l+4xZ@LE_l8EdEC}*4awYP`{oPDY9{Thz#0ewlbrHEKKM8PWv6Z z*-7tAY}2=g|JQ@8$LtK8?B)RHD<@dTNCD519dHQ-%%mX=OAg5K#mF;2k9_fDAc!=63S#KXitl`lW#I;v~ zRync(Yhtn8Nr_2s9huXkXgq7CLi92xHa<2I9W8jSpy$NGE}X-d7b<+{om|kb!Jc*9>x~W* zT`+a7_wb2g+Q z8$OY|AF!$&Yvz-Mp<5jA?0#p~wO1zIaNhIT{9bI$VZx5+FPsxuaO~*?++_ndhmA<5_A`651V5VC}BStXk&=oZc!hZ`?FCVRjts%#`@D zYzBL4cnMZtl(>6sCRh7RX~-Sm?dZr*YmBh#cfvhL2pHNS3Qw2=%;N55OBxBM2KkFv+$ zJZ-dEmWSrG_TYyMQLS@P$9c53pMfy4-b)gpY$idw%Igg0@VOX9G9codEwaz^tF*D&;HIOf$jLpwAMvw2-`aH|?; zYOipfA{adj)L1kA5>^`qfOm&*IQ#-W@LILzstb}^7NC^ld~gi!&uzYf5mDaQ{MrR0 zm!$u@FCD9a(D@>Q9KFzLqy{}i*YMAEdAL;b2hMB9ElvM+>=rz3i1B8hL;7R;d=%?T z5ck6){i9I<9uAixcY{y*sOSRxu9m{*zDN3m-36HIFT?!d&gpqq^09QgJwn?`(=!uq zBdj;)D36{_A11klxH8^HDcq7?*DVh>eB}7vcVYU^(>W;J>WCf_N2V`VWnoAUj_sq4 z>DJpbV0_mJjb|IvqAJqS%0Yp=n@MS^y1!sNQi9clJW~ISuMn?^FNT@1F4|&cStE1zUAKwx)`4;>Aee z!|gjbVl9Ew_Q}GRJ9n{ho)n9XrwMPn-h<^YDH5+w70e6o;tuiNfafIP``Ekq>1dDd zZN>?^XWoJBI_`&W=m@62^AXrvj>^_UghJ=rkk!huVSGQ~L`@#%pLaw=n;t^4bgPI|`=aEX*0Fz}r_X1s9&rcr_|8Z1dmgXOmJ8D^o%k@F~6VLn5!=RZ#tWl^$#u zkK$Mrn%{kz?ltcU!shbWbi66O-G+-O=6#57Ar0vPmpIP4YGkf#NRQTyz*nBvE}GSt zZlV(gyA3XQzUXnf`HWyh6uKa1(X;emvjBvy)!;(6SLqWQeG!(YL2TEY^b(HS%+;<~ zDm0{TiS&kPdsmd0-T!xgk*+Je9h=f`DZNlXj&r#0s{Y+ywZ`=idmfx;CQKFXpfk^n zT}vGW_3%QJDkX5wPz%o%+=phP6fT2Zg$URC@Est-nKiD$rfv7}_^Ax9dTE3&@r4+W zXpf|pYGLPJ_Yf|3K-n3kAXwf-+*UbMDo0`G#{%e$bVQuKy^t{~A3Hue;#jFzX#A0f zBk4|f>}eq!U6F$1xDJ*&}F{Mc~#-7Yuy7 zM-cT0!?AlVSU7s0;NLG8*Eea<>d}6|cw+z_muTSj`=Br_?)~j+w zqH3>j%H12?{arEc%9elkCsez_ZS6kcfXoY_DXzHEZ`Z&3(`)|3xuWul;Qjj^(h7J# z!Zb}tP(Q#JUSDia&K8zY5j;*vG3#rdFko0Q4$YIn<@zn*)~h0@JKJOQ-8|vK@*-Sq zvPW2Pj?i||0}M}f!1obZLh6%3{PvW?>a8Gn&%cMErySujAyx32b_YWjIia_Gk`Q+J zHuSnFaAsw^5RjjX_!^!AFSsH!mS~}p9W|}AA{VZo(Evpk+ z#mA#N&lx;F)(WyUS1{g84G;fXL1+F&WOjDpJb$fl&N2#1&bwgf_&VNK3P58?J8-z}c{-}DwZBo-H)XevVm9ZP9?yvqA&+pCMVZXdV z=*IbzDJgDPpH=(se*c#4IPj!F2+{Y#hBJJZT@#b{O~#t5Ch z6yRP4izEpq=?LpiPPTNhs%B+nMA}^fi#zjPuo) zY0`-{Ou7PTjT*kjok-dDB97X+AS|X6S#FHN%D$X~(AK8V`{7Vs(?G{do7QSVAz9_h z`SZ?HVjlz(e#ZO0=}bFg{SnFSa7RKH6104w*TNmYOFPj6ZqM(1+%f!U7uw9c5vb>m z%C*)q9NtXvdK>uM1IJ}=qIcjaUnuEXn;NA9ScGwI*` zwUay$;XH;`?DN83kKNIxTIb(=b#sqD?0NUa)wIX30z+Piaedu3vcF%2U8NG_4&O^v zhBXMzl;U#O0ebPJ1_ALh)RZ2iyHPbbdfpztHXWoR=c?fn;DFa>_LJx5N_2IXa~;wi zGK#6dPA8tf9oa!tP>NGFPB`6m3k}f}VcsbPW)Ipx4o~hOaue@4UC^Tl)h*-?Qekhi zwdA@b6C>+XX#G={Jls=};_r+&OI_-_G6@aq)KKlwrIOR}aM5ysvqqN|e7y|wOD=HZ zk8fTTgPGejxazfr(zK(n>~9UWu3Jl|9K+E*+?DH=^k~Y$P*g2*!`SBQX#Mygw0`1- zYp>T)m99T>^e6U5w1D;On=svgSE!iFjxU`BSbG#wwdSK0N{JVd^%7gb5 zwo~12544EzfbX;eG|I^x&!7H@^S-1LwCZUk&b=4I@TEEF+1FxJlLR55B3g}lT&j>F zFIz&TIrV6JUxpFKq_lc}J$B{WxEnBafQ`ffmJ@`X&b0kQ z1zt8+U~000#5+pi{#$`XT23^Z`)W;-5{ElF5^`@LHc5s48aX{Uo{0@IXG}UKr_G+J z@LHipJ8L=lGwz>TyI@h0obou%{W4texvL}f<#kFQD-A}99O($f;OHc-!TIJ$zh9n* z)gxDYwsxYbJ>j_S;Rdr73R>7P6i1i1V}V*hhu#IE=pFZ~y_MwE#vijoJkTRlN!7e} zb6eLF3o=wR_?#D(wDQEq5NGOL?t$gIJuy&ALo0u{!Y|PilN&D4&ehJCf5Qtq-6E*) zG_R{T-|@e7_xHtKqh86&>uc zBq)+*7d%FI4+m&&M9_hOP53&5_l85yQLXF|UQcv{dtwNQCe>p7d?!p(2htq#O7vT< zK&vu8dXiBFk}x4D_R)PtW7t zW;YC-=ufvchvPy=cl0NJs`?dz$(inm-^9CU)q#k#@PJ-p0PTJ4heZ=Skzg1|)5iH= zcD*Og%fslHF7N+t@Wi&5^R)Z58s0^oXp?!FLMs&bxy%a(7berJWxOWK^1}D!sT4R_ zhVsGQf8cy;cmy3CT8zdoV(hUWPe! z33S-zA$rx>W6ksgI@`AbyXzfrdj55KSy76IoI_TukE7{Ni%|L05r*F`QKfSs?mu_J zrx!8Qe)t{qd!m5&cQje8%0ncNeFnp#Xd@Q97=8_4@+dJsb*~ zN>}K(#gKyAZIZ?f%|=|LOG$n>znE)N5-!rWcyGu)x}*JySQ=jA0mn!WxE9Bf+f+By zZ}G&~y_aYN_x&lYy#BD;hSBM??grPS&Gdp@tU%j`Ibejs3yV5uQTh`p%1i&WXXV4I zRJu7AvtEn2X5ufhJe-eb4<#^_*0DzX!3m?Rln7pstPlwZ4wcx-L&jLoMKXoc@(+|75!v)BYmOuqmP*Jpq2 zl1K$BB9XYr1viz6L?gq{<}1&cyC%`*O+jcEtHF}cBx;%Mhta(5NSm5WCMMpvsqF@f zoMh^}%L6Ub+~Bg~Ce1MB_4Fy8n?1itzZ2Dn?dt(Ai@&I?jtVDpJaD~v3V9?rA<~F* zNlq!GdqNKJATLa6$3NFx&adD0LXLeZy%;Iwb(1$v^t?^yOQfif|B3UOFE?qB`X&^O zVy+p;p=z%*4C8rSm!doLHAleW7%3({yifBp2y-+tBt;d`>MTNynLSJbi)hCS0Raab zpw@aoh3nF>d7T`C#@wSr-BYm;T!W>_r|k6}x?scLYzj#AM=q~NZe?XtnynAoKhxlhehw`#_QYMT1$@;dmj?N{ zVecY0gvaO76P^Qpf8mCm8}rEgurnTdxntVPJet*<^V#r#llT^W5*#s{=MOd7w<#~k z0X1C5R_=Y9271dNnd607eex+fN`eWGIL9&J9^K29V&=p@aZZ0m9v_k6=D`|Twf6?*F1E+#j2ilqc^&eh4!Eda zO}mWa@w<(4EjDicd?Xl?vl+yh?3VEHfwd);vx;Fw7c#mmi_#GNFB@9hhoiSnkT?%;{gq8=@ z@M?dL)))HYH?INnZ{MS>6+Up~^8((z)AN$4dOM#u}-e|()s}vywKp} zbyxgOc|b$m)o|hZOYc)fv}XtJYiYUTOOIkIUZ}u~NOxXS6q62f#K_ei=%`mh&2~AU z#~TlHswtsUY8l3QdgAzzQnD+Nz?ow{dR!6ZU67(N|Id8G=cGE_r*y2R75$g zBDoetg5Yu0)N?E6VNOetS@(!y-J{_%pU1>cO*HaDG(0=mBfjD>nRrBFN4-6~E1Sqs z5ry4J4p^|hfzEK-^WeF(G`g17zY53Pvs~+DT1ovchvEDhCk#1RMv@~Tcs)vi=F(#F zS|0@W9|~-~QA8up2S6$);qkqQQl|T(r?m2+vioz2(~Mw zax*Wqm8*HJQARJ9c>v>GP`9+49*%IshJU!Yp%pZ%p9X108r=9&LDxsA@v*xrbh96l z&RP}Lam?k4N(xsfFr3HD^GmAeL!~29Ke%D=hbqcgEXM&}v&ej^DJ;bv>!x`?HMxeC zu9P9I=pP?cL+cwQs5SA#iwhOhH&z1K)IV|F-Y=7GbANAL@ML8(-=ik=3(`{`T`ki|gFBZObYBvODHUxdw4k z8C8#VgU4be_H8Mn&5au9^InO+Ryiq>T`-o%%F3tZG>g}Qr`9@S`l||ZbaBRPo@3ko zd`MrMRM_sOhIzXx>TjWh8}Bg{b*iT3yA=q%<$@0FYN&RF6FME@-14^?@>}4D{XaCE zkE^A)1-!=caD``F9S!BZ?gY*keK4=55Z)&b&)~Jp#7C57CBtg2mt9iwh#ql0b(>G_ zSf$@UM)xI{=*n~H%4(9>ixJ1`m;cS{zC@-{Q6G0?bN>0uu6rb?UD3>f^Utd*sdT#r zpC?PP_E-Z29pDs(;Q}Xw2<249x%`JM6j0=p(m`DX z8q*b+?pI0;Q=E{0R*9lPWu$24h>m?!xbcqL?JWm*-c;ezlX4Qd+rxCbGd{eiASLg; zTfBGX_4z|epT_&f3N;3Psidb}BrqN50vm3hr?_4|=nA*mw5p_SLDpE=QG*uA zmGn-qL?yQy&4DVi`(}<|{kd)ZT}5M7n8EX$E3`G$boYV@g1F7Ae^$}9CQBF(=R8Sj zHHCMv!fT#G{;xgPf4)j~jvDNY5ku&bLA~Fqabmp$^B&)!mY1BdllNga?IxdKC+?BS=bqkerAFq+0W|L__blOWrS6#UQ}e#>|t(7c@9%rHZ4mInFUcdd^w!R)23usT^m&KFFvl-Hpd9VocWx4lv0r zquc!*@l}UwV@8&cU!5FN3gzhF&++t-!<1`d=EM}z)ZubW80v(Re)njxqXW#z2|-Kl zQTJS~E8eL<`o4Rl{f29EUU40N;yvosPKFlNO57h?NR|CLU*19mzvx1GK28FE?yqN$ zx=(iV#dzG#86jc!>3xVD7CJd&RnG^sxX^~5V>O0L9*}=WYxJ>G<3r;E`nuH;{=6po z#ER(7RdWnK>Eo=oa^9&$v#eWYsm!6{~P-v;-ApsWh7N5E+RQlbJnGR>IuvArN!-u>uir@8 z=SO{_RG7%mRm7PKr1_=5ryhJZGVeN_igJRvp9C9t%^t6EME?Q&^F(LT+z>h121_AZ zn@8)b9I#^upMyG)Pa5Wcxja7B4!uMAoX`6*)*h>a?ogVwJt}Y5V|uSU6spT@a+w2u zH09Id@%E^x_$OB0rcInX*=rz2@vK`kwOEEJTzl|kOCJA>GDP`0Vp>%$CA5@b%t(&& zwOl%7AjRy zm4UX)Fg`Jhq?vY7N zTu=HXQHdeVGpTL8C4vU1p#M07o}aQnp`8l385!jH+YDW6Rha3QLHYrvs9oTUv+?}# zC(U5PXSQwhvx(wNvF3_1UUM6G9%_od8P0#$^N6Ezdec#XYkcPD@HH2M1{Um`dw?(!nmF`AJki$9Er5n=dkcj*KqxPuxPoqwD5*YFxZu^sIw3+AZPmc4s zg|2Dj;lktBYhLeU^XHmNFyBay*?y_Cc##C}-^)RYRQkyK5+iu+lb}qc5jK1V?Xe?d znpEoeS_J*=PH=HarR|w^@Z&M~p(K^2No+B3q5>vIQ)%NQ8))1WxI8bFCKOv?(gy|f zo2Sx1Q%fj0{;HG|a_GfpF)u2iK9xeB|1yIK_xa0vrqJ5srs%L!g$?|DuIp%qsg_FE z7-x`&zbT00f4VKvGYeB#^Yik*_M9o0lVKXyW}X$}X^xV#c-^dDAx7*HFX|X%k3c?O zCtevu{w6YLg-H+_7fwsLezvfg6e;hb3A{!hc~FW~OD|DPX9@cA{>#MIxC#;j;o) z9N}i4NF)E5|L*04{wEUY3!kfSvT(w?8HqH>%Ni|9c|P+pff_ek!C;aC<>~~|?qrGO zT-&gJPy$6}n4?X(0-M5aP^zUF=JVObGf~&+Imgp~zZ@_AzCrC5nc_8{YhAc4ovI|J z_>`~0k^Dq**EYoroj-MqP0`!whPO3ByYtWX(S$6uEHPjxpC>i7r}Up@*gRH@DWjZ8 ze#jI7llk1=8F!NM`Pz0f#8{f;Lv|C55inbf@A`qXM{I;eJgyJ74<%_&Bm8C@$F31H z^SvP^tP~?zD~iH(jPPia7$>J*ptm_j7{q5VpPY~3oVGExaNm_3a*n_oDZ!>J==QK%ri59mvL*^c?b8B&l8c*{X?p+eB zKORexToVLr=6?UiMKT^>fAPAru|8#9Rw^iq#y3`)vzspW#I|Lyw|ju?6m}_M!5g$5D0H9Qr?fX<7S|z#(&p zj{B1qpJ)Hfzl)*9D}YjTPouq)87icKR4qM&O?hizyOag6PS314K4A zh1EsAf7JlX`26-8`yd+8&JYcG#?T%TL_e7!S`ILVR2E2m_8Y?Vh!OfE2GD>rhM0HW z5IZydso2mEqFMu_Uv#JNLPKh%%z#sdta-SW{Hgu)c2X}$>w}q?8KzcQDJ04uN z#`#O5XwdyF&>n7uU2i5+>wcSY!O8+n^>b)M=|+@XH^Y*biz!ooBc6UYLB@bJ)Nhxr*t@wt_Dqsc*QCSPQhfrFFexoQcNAtA7d zMqO4O$2GHK7(UpZUR*tau2YXfJ;k1Cn@(b7{b4v)%Eq z`A(>e-H9_B`I%p%MdK&#M6HJjqWs%ZuGUU;x@H8|tzAj7W+%jn2AI;LA0_SE#piF% zV64S3is`xsh1sXDYt>jf^<^(E-#&@0x>M*?<9@8pKaS!Rv&bR$AV%FeiYYzkQ@HnG zTqrw?uY6>5v))k{y+4SNcNfv~m&dSi!~rb5xtKm1oIv z)hVa&&0sgusuohGv!^k1_%5ukoJYfb&tU!M9q>5AD7wJ_XLcS&#}=TiQw=e+<`5pg zTtGLN5r*lUz>OIT=}8$j3filEiy z6wb}lL&}KycS)XG#*3pXx?=-*=Wld;p>&bi5xeZA@fuiqyc!a$ns(sI(PNffb4>UxV zv;W5Vp>{TI(tD{*g=(WomXJ@sfQR%RZ1rA*G&R*W&dLBbMtVlZ^zhvr-bJ)Dc3UOUb zOLwlJvnjPi_Par4o}aaGCfEW)zS)%Rd7=#mBf2M~%gRDVoMtnu5T0b5!=VsU z4D*>Pj1iqj3cVKx>u(pj+vp&5F7+4mjRkM9E^Ln*z~;J(@Wx*cOQn>T^L&Mcf%-&PtT}_1wF!c2Ph&j(aRz$bVgZR%2Yzwt@Bv6*gzTF`N(E zVCVs5#y=WifjW5yKJ;O#)bBDGXoD@fZ!lVHgq!4{6a7iRg&-rGj<|?(XBpxi7-6lc z6#~n;ET6A#3==s^eEZR*?AkSBWSqYM_h%kuolluSF3}7vJMWYo=w^!KdnUNIuZLh1 zXo^Eh#@N|!m|!#14Er4oA@mq0tTQ#khs6d6ZW}9jXPA*kUmu;%4Ht5WnNcUvL-;y5 zVN`(`4vyBtHly!l+da+D*sP0@#v_D0H8U){ribL2gN4(B%ut%Bhg#At``t0cs62ff z3Ya0ByK0Ky@PGM8AA-Eu!A;KaJ8y%cICnOf<}!b%M|yUPgej}rV_lOC4D-b-m^63B z18s5ah=lzn9!dKG;#btUv9-SBg*`^|L{ks8nb-hzQu1oWN?Aya74Fe}Sl>#@9-pwn zW ziMeJ=HP0Y6xRVvyiPhjdwH_-cS%Hgephh*?`hDb`-D{0tlfvZ-#a76&x5CveuS*P4 zt?;_U0+Y91E4`dzh5oB9U`6k?(&h_R*tx_UN6RZpJ?Nd27-EK$CyPrPB$n8^*$kFL zvX<31T44B6GqkE#FE^NLfz=1-Gi&5aY#&@e`V@1t-l|x(hkUf>N1Nl+$)eJ=%P!!# zy*bKX1(${nBagC~`9J5`Ff@-{Cq~vI4;x@e4%<1%1yvn3ut7H4*64_+EmU)cXS35A zMEDeJi^;7yZ1iXc(n#7u?`s~*-E5DbMWm75S;#(A+o2(VdLWWwwo63*IqIXSy}raI zQJ>G>#U5|=Ut+Ti?XYAJ-G4#~*jyX(3;HJIWP(Ouna zRS721{ndi{O4~;yAkWYian$>GvNZ?mNkeh%o(&4NU&r1P#Qu@lpzdo6?h_B-X|WAF z@AhFW8>rV*PM^Crl6@U+1>Hx)0NMN(C+TcVqWF{_?#bRbk&m2wlpj5Aqsw_qc*)tq z&*TyK9D3&Z+Wr$~UCVkVPdcf=nZ!HFy3Q;~%eHZeE!I|EXJhFOT9RRl>kjp7cd#=| zsE_ph@eO8w$O&4`c6d>8iyap^!r%`vh`QWm>OCC6ob9pY^nGS>ON8yy9dJ|cA$w1~ zCdYOM=#z)kl{{_14@J<@f50xQ6NjYQ5i@OXvIPemQ9(Vr(ax1DeKmcCdKZ(&~pIdZ>IS?Cf!vMbLLOYrGSBY}mw9 z_B$Xa-VsmhHnTXfJv{UsF=g;x=0!cQ%c~sG(od7Akw4N;&JnBC^jQt{_jcSBA>h?T zc8~n-eKJM3f5MSP?<3!NvIuV!&$58}i|A}9!i?3r?Dq_so0y1TK7SiKk#iB(h?%0_ zc_+Ji_9E1&hwy*P=l{Qc{^Y(7l$6s@;x=PhS!ohyRh z|gbsNoC~qdF+f!!(Xu}O)hZnMVgsC_nE>Y7r3^$ z;;H8~wxGxb))it*cu~rnEM0KOM1t17*=zwlcTpWQH&IDs0{Mq7F*n5JM6o4KPRLs4 zhF)tTSS5XTO9#2(gMI{C*n>2H-V&_2AIbDnDCUpF_%=L-`O>qNJXVaL>G5nQ-4SO= zU6Fb>i5;VNPBdK6DI|@JId6@@Gh7iM7sBMJSD- z3sOgWF#8xAIFsJ^zj02J|G>KE`$4aTK6mXSTQ$-fA98G=oBN5iSxPbSm>u=7T9}>4 z9Y;D-zMj*<#wn53IMN>9CbzJK<0XjLLOsvvEi52Pj19!L^F7tVTHM9hrA%6=!WOpV zp%_PxI3Y-@g&jLiacZV{cgP23@>YUz(Zt|8*T@=IxRC}&0=ZAV3UxmTo))}hL&&Q>OvM9rAD*$lTRkzL*^_kGPuV5X z&yK3~!DYQ?tT96hcQ=3X*gt0u9nYUT}DM!d{C*Rc58>~NRFpI`{WA?;)CRb~ZN{JU@e$=sj4b-#U=7qg) zYFU(=9h68^Wj@`!8I`u}sDUypys5>ChA&lFp*+7C=;brcSdw?pEKk8JeBaO|S*`}VYttSKu5 zF_-Nj8`8{js)G>d;ecn&O{|AzAg)tyP2Bf28}1Z<+s7U8{Mj>By^&Zk)&DuATr?!_LMjKpVFH~Gm`_>mx zj#cdY2xshT^hH`u1#_I@gzBHZz{pf~-^d9g-;*|CLOh#EJejSP6wmV__TGs+rd1)h zFkZyQ(sMNGS;#+e*3GVGvisSvT5C(ak2|bpN;-z@A%8 zx$zG8VsnG-4vWJInk{uatzpmFVjzAa!jzepnbo^!Z2IGf%L6$ps*1*Fku$=)irM0( z81(t*iVTx{mhmzUFLm863U9`RuP!<wpX0}g+n}foU zczGA&$_}vH6aG(}pYBRynSQyrMlm_91Nl{up$zb*5gk4?AQN zi|x&>xMtzb9)68S%q8;e7P+vSlap{p+Z#P*J28=2GLDM_uxgMKdsLN-tL35S=i#?@o?8J~*%v&2v9!7WO;1GfGx+rKab7wVcLlET@fmJUg z?0r=L`VR|7pN(QRjP!<2NQdY7!i8N@^TxLLP)sXzX8mtU(PdRAqHjAf$4v4E{0@QP z04KJ$jC8@*LU8!7BP*s{G$Sw{2V~^pj z5&y(FNXM0}T9Xei%0W{drOZe>>;KlDIci?)cwriTQhz_FP|9>=$*?=-0HvoAX1kl1 z7;8jW+24u1I}wlG^BvL5tl6CJvFN*sJSpYpS?Ru5EKPPs%(H!LhA0j@NPoGmZZ+$A zJ`u&6Jus+v9;>{WjF^o+SlVX_%bS>rlEgrSe^p^sJ5#Z=OE?z1S7DELrNEa*W00jP zQyY*(KI}MTtewu*|BZ!Xa6Dc%%w}uHMdDjd9P&)&vnkdg2t_P$G8Zz_{Q)Q^%~|ZC zMeI+u4^-QtFivL?TW#!#87rdT=b93bOLL`hwzFBbnEa>yPLMAd$^Lea$1w6}PrlieUD8f~<~=dwp4WjH zCPQPj6i@p_VA_Y9WG<2+rz{VdMcq2}Q!Rr{DN#2Ax zgnF(#loFqOKzm6_-h?J|`9%w`Sl=4>v>?#UT1(9=6+(E@dY@lUkSH zKiwJAf0FOw2FDb7b`PdTBVvCQ@_Nyn^L#W?W3Qra3i*aLq9I%9jaTjVm`8c@zjfWb zw;f2aEke*KTX+}Bu_paoob|MWjk5yFPtC-qFni>E?9U!vN`q^J1NtR*W2M?DFpL$! zCgv^7lIV;HjyU<8cpDyxa2w-1GfzZ9vkU4^%HuV8`iAy(!|oSW#oxN55ue5r zi8^0OclXRdA9|-e-@2pB`FaM9o(Vzs*P=3;y%`t~6Nza}US;P>(y(TD9ELe~l@(4- z!Ovxhc-7)uHhgvhf=iNM(8;8%M{+cVD<{MK;O?>|>ftE4o`jCn`DGT9gYjuW5^`dO zmW7@1hq8Mj6rO!A{oct3Va*Acd9b|Hr%8&u{RucQR9dP%#2qI0;vwq2ymT+kU=xnS z_b!tGd80HHCZ=PPjg;WZALKDVUq@j89&#N*~(N&wpIeKGeOe)h-Pp(l)%% ze^oZ4B?Ajd(;29zD4ek&woiBf4zHOdjIGatWI!0!N3IllHf3UsN;IOzZ4mml(R*1t z9$Rm05T+7SfLkWve7lCQbYdcWRZ?(b41|j*G5C8Y1=+syguERQSlyHY`OQ-VV-|v( z@D$v5Hbz)w9e`z1QxM~?D14Tunj$e7X`cNA19}g3R!K(ovo68|(tIgLCt=o{wz36h zC8(c}1jT~qWk-Iv;Avta8d7hR{Va6C+u4b*@+&WkkD}f{c><0p7nEJ1yPD`!0v;!r zm#qsTAGSyQKXG24uTbVHE}>`N7R!5`EX`k2fZOqQu+{HX`o}E?CoAo7B2l+guOSoX zU(tQU`gf^nrwoi8MR#VuQ)O#DrvaqfKdV((cIajr+DS9FYgKPy(3^DZUoOGpjHQBS z*DRcxCPmv}9l=FDhdg<{NGcEuPQ!8$X%mFe4}*l&&vG!XA)L6QF+#N!d0k~Ocz8Tf zP@h8Fo?8j9t4$P|rlvu)IvD}V@xmmzB;2y6yb~TJ^ze;^&&f2j{tOZNt4Cs7UK)71 zpCFwZ3b%wb$mr^QH z&z%$2s+0ddn7*UBqe4CL)AC29KzsCV;R|U1M@A*XDq*8={DdQP)spE>v`83o$q|jB zBv@IG6+Ep(2!EOQPn^~CKbK|xErpU9F_Ude%Uq)ikw$kD_4cf?lApQwe$O6JCo0QY zY_g%>TZEIDpUakZ%EB3{`@g&$F6=SLL@VjN%#7CxCq89j=}9`n$~J;IecqF_vuBou z3B$v4q1Ey~uTzomVnse`2KYn6xL#;1&WE362>c753HY3c?BYnscX=<=4#-8(`8f1= z_(>RlGz*K?CXxR0lTb7%9hXO>q9(gp*w&Op_v19g=rsylD-KaN(_vKoOqe@73VqgR zpjP97px8eQ+9xy6w&8}*ZF3OfR%Os#=&BI@zzq;E-s+udlPWu*(0@1^NH zi-cwKb1`(52ou-s5w@u0U_!nl`qkPBou}mBcLwz@a>E3t)wwvQDW+#Z5Ska}!;$W@ z88t5itrdlEt@MV2S0{c?zX$MgD1KJj_OC;@}en{`^T4 zK<|}GqyD_|7O@CkW+J4bHx~v6qv~-c=KSc!wIlqIpH94!1)cZ|@||2horz;=--OKU*-@Equ@W=~(T1Pndaw_!he9sI0v% zwB9G3&fs+NG87BZbeHM3JMEu1uUY3UcwOa)vLy!ZDtqCQ`X$UQx5J7hwt`7R0Th4R z!@|H-822X+oO;vcS)oF^PTv1&Ot}3n6m}2J$LBpRFi(3d*i;lC+EjwLxGwzHpCVif zq4QBYggZA}f>x|AR`r?4hf7PKHJTV(M`!ccyO*F!weI;Fi}{e}MKCar#qLYsuDuIz zy&#diLo4{x*c`-;O~svT#?yXfASNyyhXyU@(=Vjp-l|NbY+B6o-o|6v#w@JJo5x4{ zMq|rsV$B51B<}_>Ij3c#Y|a#}P#cUPOR~|uP=&wU7XXv7*?6~k3|E}$i_{NUn6IGB zjhB({EinszLlt?l6V)O6>78LXkcX4bQL%d#TIa~|%rsYMq-DZOr#G*&amJ#9nb4iv znY#s0AFMP3?^Ny!1=pS6rC&6R$43QNYe4!d`LDv4iA7i-M>`?R2k`z!F5zjA8}d{q@kdpq z2%h1E=fjrro~H!Jx%%VK#7+E_RKSf1r*qBa9pLXY$8nH2loS@0Tun78{S;LhG`6wCJV zK`aL6zGh=w({}DLKLY#L<=|`GMy^cv_p7IJpqHw_<@*G}{74R}QW&pz>Ez&|RYs$ir z)uZ@EeOHv4XJPK5cH!@2ss$)t{WoujGd~EEbSseSVhib!hk{ORDV#_PI=kYbu(-Y$ zm2}rW?f+i5Q(c6$#UkYEcjw!+ilN^?nzvuWdBA}Z%)Rc4vt#CR_dWs|s@*ZidlL_E zl0mJSa^E0LZgHm^3Oa$<7iG*(XqBUBL^!^6*pP;bBX>8|tM?sv$<|UtK2Jbgg(E)` zQiK8I7t;Cb$jc(~&>BNIvr5Dh1G4bxekR&7?0LtdRQ%bPji_$6JZ5nsG&OQ)9&EwQ zUc``hEQc5l#ysm`1STREE*Ew9$Z?^h3Cu-(`Dy+mI}po^a^b{|ad}ritkcTHE`F%8K&pH2ZoRj+Y=Pz?BvBJ$36+vBjdp`l;5A2{=-Hp%NRf44p9k8QBo-ev_ ziTM2Fi5NDXmnu4&yvrs%#oiS ze;Fe;217Z-gSQPLKG>fKJeT-#d5ZZd`8ezw8p!9>mSM#)s;MG^_{5@ORDViEZeJ*+AUDf8-NVh8s$V1!W(>$rc4bx`i;h@6-UU^sohw5DD z9@@l{hDabSqPpt;{`LRqWR{1i@MG;&u%%w=I-}wI!g>y4(toaL9>EX1EJgMv2Yh;{ z#*oSYuQ+3q-ci1CKm|4%N^sTOh6fm4MyZA;YSTUV?E6;{-rFCS zbd+Y24w`B@Cc< zN;>(buMw-qBr_95{>gmYcdF+@veC~uf$vgE$Fjy8h(5${=krO(uF1up&XK&cQXCGS z$%Ezh5FR)r3g52hq4IkGZ`BOLwjud&8tuzZ{|SPXMm{cEd-B+a{^+TbkJbt9{9G&f zp~&AjV~Ci4Uhaiqm-6vwhcj0w@<9LQd>noy;;Rq4q0i(392ePgKYw>*Qmvq)sm;$* z{O8mA`>fe{-gT%OPS@xD6X#ILGCp(q6M7^fH+IjFd&EkVn`D{{m5{a|05 zi73Fd81j143_;pb0M&N^e6gk!z8eeii}bYZ#l)KGpO4#{Jo(D)#7LNvkH!lY+_^W! z;AlQ#<~#GDOWfh|@ZUI}y0wcxIC>Sc{pj9(VI5B^FGv0d;x5{4;ipH-u-MW8_scYS z)TwgxNg$2>6+3>gvzA4 z$qUPP?fPh(l`BBPlCLGI*3(z+%k85j$V97nIrJiMRL)Ad6Tv~{L3+dc%H8B8_ z3duj5!e4oNV~a`=y?YY*;{KFFGK%mY7zWmf} zclap&n>Td!p66AHrKp`}3(PpeH_a|Y`!qY+siev46^Tc*#~wF7ne!zzg|y#8gl|9H zxVcLSUSD#8OGp%VRHyeH@ryhw^ZCZKD%|v!VrXtP*KoXw>85`8G5!IMF1reqy&;%B z;{}(@BYq$v@gS^`Z`x80t<}_b(|*SzKbFEafa-=j@3^jU5k4XrYvtea*F*C#YI!PV z>AvPYzh}ZBEDf8kKI1*IQ}Nt59o?=x;)`$cSpu!Y}+^f zS}P6e(}_(`(aP68Ou~Tt1hB;)c+%H6T%+FfoQsXTZfi8kD`d7iZGlh&f`gXEk5FAQzo`yJEiWb3P!Z5M!yI|KivezTsOj-dyv>@|m=b zZ$vR-+x#(?ca@bND!}sL!H_-fE_>4{7iv+V#0cskd!nC-2j1Z@>fb{)=^c5`-$lR$ z-DG3jl8~PmiKAwnWt(;5(d{|;rAvPC&i!JrEH4sUc6{Z9wGlYEJrezUweYUDLlIve zfe+)}@lM1{d!rG7!Pj5$*>M4Is|?4gG0%AHNk7!l?89_e10O`bU_;8|GqUgVM4F>2 zT@S;#=XdzBL}F_fhCz1rHXml=iG=bnJe0e|C&WlGyo7$PtLF}#>74Hh!Da&>pV<(_SHZLU2NcR-kh_@Kq%7glD3;p+(-bi~E z-hB$d$?`9J?65$Djtl^A{>Z(1_{05xKUThd%a={|#rIr4JS%w3<4n9sfFG7susZkp>3|9f(>_s+>M@sbipc%V#ael)gTb8mobLS`f?j{D$XlAKKUP&mG{kcU0Bw=7#B6hD-_G0VBTtiCh|>NJn8xY$|d zPUm(x@#q}Fe)8Ehewa!e%a@DV`Lrp%kS}+~%(tKT#!KE<@|t*+exZyH|nCSq866Ek9j>;+#Zlj7VN39dvx=dF~JBghjs^6V2Xag!oA&<&&B zJ?45_q>zx``M-I?yU><*ALEZ+KWNuU#yJjefAl2{&8g+u{CI*t9#fph)>-g6M}J)T zO&T3Xcm4zZxZ7lnqWCyo@W2lhrL>1aR>9Yw^vC3(HsCogdA(;SG_OQU+rmVKZ(_`nD^-0d__b~il;q4y;irqfRr*G%632r+RMddkGg{+Kx56`wk~ z$Xtm`bxF^#M2`3^ z-{11ac*?Qo$p6{V$d@Zhk=TWNsS2<7ud~FwETmm(D_(L}+6gt!jr@B{p7AV-?O)P|y8*svBweFM+Fh>r(g$3{8dq1g^DChJ zLFDzAaHNN9{{CPTUa`lc-*U1!T|)5KhI-|l2g&Sq2BVEwG`spM%6|0?!sGc)`1DIr z=1%pkB60Bci-yRylP;kB3iTYT2FlJ@`J#oiSefSiWUWhm;HBVz-E}==cHg`(RGsvB zCpydQ=-Kael6J%G?cn=I5^n%j_*x#UHnW*arb}VrWQx_tns~%_4~!u{ z&%S|g_Z7^8NlgkeI;tqMqtllN^SucF3$8JqptSTO;MtdAKSfk7O zmwdt$Z(R1hh_`cp^PTmcNG6}8-q>C;jqhGqB(cU)-~O^e)4Y-AZiCJx3bM*@+VA$n z25}~XWoxrM(T(2A-fIWRbm@#OF0sZd6?s`@2Kn6|SYqPGUb3;ogz0!;2K(V%WMPZl zF;L40{an8BRfg`c>tu)}CqM9p=k8E^WdJ3L;f`s<74|hi;?C#%2=O6OMjN2D+^K7~UuIbQ&_m{_fE-`6TNrV1S*1+{2kk8e@7|TC5aQ4gt8&!<4zvdzD zUgCkaLFSn9=^@`o|1RGAyBE*p;aUEXSP?HiTf;%Tod+!Qft1entLBY-Z2~=O6z84N zU3}7g;$8K!foVT&UUJ6=CVfcvILeW43irWQig`?VFn5{e1C@KUziCh|-)TyWH$(E9 zC0*y&47?D`FCuza6Q44~6Fk}qcQStRWv4wbp{pfoR&p6zdr9VsZ*bQtm?Y_M9giku}j?)tjp%QYRFQt3L^-=@eA?|@3X`pVX8X!aKHvdj_ zZ?u&@e23iOD+@fJa9s~_Wp{aUFDd%X(1Vlp9b%?=;Qkoe0lDigZxVZ8a)ll~5KE!Q zZVxORY6Q6jclgc2q)~kP@7~gCy~8|wl^5oHvPMClHGJ+EZ$#7C_G642$9khT#d(}q zgR2p%re|Mb+-dFQ_qvi6V4w}muNm>ir}Qq8w}I|FH@<_uuT07(-MyoE%M~x|3#DC7 z?!`Q$+!N`o7cpqZP5$JR6x$w?w%_hGw-?;8YJ(+|lfLk&za&W1AfLsLzdV_I*!HwD z^w9pUvUvktQ5a*4L#MmSG<}H^_RtUqFaO~S#<`+Q)ey%uKlAUz+dg&B5OUjI@};2^0Nw~^A zsJDOAO&>0QuJIn@J@CC!4~xfM=Vmq@=%b{EtID-}YNI=3u6ihmtK)Cvh`lsh5A`~= zTz1(Vkrw*!nN!D4-*ZRZhJSVDPet2!G2JWOo2_we&|+@Z#S7_lwtbh(<|`w;P)qN@ ztUdGj*RI|$m7|znTgBaosTr?iL+q!6yw_-N=nkivB*c=xyiCjw`poz;PhL053n^Ev ziJcVB(__f6duOo{2w*zjd3^2sjTg6T!*-fs3X!?_}l)56VBe z5-;B8B5}5k)85;LSpIbetcoNWmP=07qLDTSfD$xp|)S39nho9 zVbtvruTpWrkf$any!V)|I^_(@W+S}OxySu!hnKcB?PImB<{mbrwb)<`sc{M45h%vF zr^c9iE}OT_lHgjsF`nn7ax2pFddx9K)b13%nzWNUmKouXX&Ud6DZz#@hG=fi;(e)p znb6e$0lo$Ny@DHlccwkE7fX3G@vb&f-l%Xc<`;<3>mEvHSi6+>*Cd|796j7MDkH9} z8>VaNVRMbZ9|X8TGXLK=*LIu3H^;bRdn4_r3R31Ht7xY8-Wnxc6nK#j)hblu9o($I z^(T75m2yRU&~Sc{xHTA0Iiy~d8~AzR*9_tT9j7b6vHvlIY%p5>0N-+pW>$3fscp01 zUx;yJ9bt`?S;UH@KWl&CMReg2TyM4;?aCvKOj0`ENxMw~Zdkx1rI-iMo|zr(=9r;U z!N*T@p}k3_P$|94g_AUc8*f5dPZ|G7@t^g}7^+Wl`9bnw_fRm!zSKmX>m$Y|cT*Il zL~wm#5A2+43RA-nuJA!jeG(IRb_(V5ABpJ<7~#XrNS=CAj7IWD#dyW@c`w9p+DLw) zhiTlWzl3In`e^^1%NOsKAVFOZzkB3!)qLX9lPASwc@b|T4p!GCdMJKS%-0Z`XwZ2* zWbZ2BzO){t5>qlz%ABS0DWn9?c;w zG{voV|8D$u1m)PtHmEX^=R0djTeQdqAxp;a^(j)+ET`D!&gTn>t&*!o&%%TqJa-Gd z@19ws_gzD7KzntX2{TM2F6BT*o^?}mBro*i8?T6QE7%EVw>7WXE;?8baOGw47oBx%ke5&*Xz%dFmjc41nO`%f_x^5YJm@!qmvp$(4pwKZd8^Ey z7`r2GhYLb7mHEn6H>|x*UIHg&-a_Z<(|T8I)luf1KS^-A$`wYZmASL71nTN^zKxW* z&u1}$1u=Adl=)y|F-Agy(9Pe4gyf6V+b0&sz&0U?_Qmz2ymR|vqi{6N6iuDnFk$FR z;m%_61QQqNzi}RU*HsuwTvd1STP-sX3kx2(U=n#=%rYdxJ=#qR`M6JNULMp&7S7DEiZm6#BByE$ToT8q#- zLIh7wN1Pb=QwZHCLhEQJEIieP&m_M~{|w@@9q7SB{2d^`8OwBfagAy8`)Jm4tE3m- zl27cnH7+<$um;&Odkm1dAZ27P-n-Hcr)bZ@`%mPx+-!#f#NX)opeHxJZ;Pw5iBEXD zC!atZA2Zf&}Nr_u?u2>G_`I2Co2_@O6O7#on}Iv-+$w*c0o}H{vyU`igS#$lAuh_@8XB#MS49{kdbaHY>h1zN`?zVtX!$D zY>V3)M+mb!h<`TD4n^xn39+QBeD6W*wMAov1+Sc8O}g~_+=;^e6{Optd#lWUme8H_ z48_Fkuo$&kXeSNN$z2WzS34%eQa}4E>EPSNHiAY9?QSC7!t`ZQL1mL2CX>(MO<DM|8WICrpx9;eopos%{8^qK5@}xSjEH{8eF7l{vnq(N6bq zb%N$WGu&NBY>{hqLY0;&j^(=`ys=hDi7`R_OyX^})(FMVjd3o~6<^J21l2*tI6*l@ zyu3y@3L_|lQLa&|5jxHof(?_9R$?M#um=-)Wsi5^(i>8v}l$b&Jken^@4gBuP!pq&UOhn3kFP=7_k76!9Nl#Tu- zp_+@>#qUOzRa#2$n%FMiUydqU-j(=>66#UMj48X|L_LP@b})^cSoX6s`D`>vpK7|G zY@enp!f)E6!|!le1J%Ia)M@{ZjZc}#!WnUw9AK|{wJdt96TU7Z?ruy#6;0%VdV>3oS+>RJ+hArE3VUC=$}rAQ#2B;CemJF zV#}0IuoXVMvw{j>9w))t^#a<%UD3AMQJ7O> zj)h9Z>qWwjS!USWo0xc`L_+96Vo(s9`n|kJs27=F$R7!ojSvYZ zQjM|N+zpefO@(v~bCl9vxkLoyWbfFv=w8#OA^w&a}{0o1Q9H6V{ehI{6 z>+mR*5I1bcEJyg=Q7h}9-A!Xk9BFoMS2nJn2qEj85U?YuZ22qlCf;{~w4g0n>Rbr#4FEJ*AxJhCqR<+v`bI42RTA;-GK9iysc?pGnLz$MA6w)?36siwpBid+Z zJ$V6w+LTy~G3_R*wnw13A{+eP9SZXukXNg~=C5@}akK+2KJUYxnz$i{Fd!I#~%j+Z+*1?}pIOgyl!? zh|r-yI~T^?T_z>g&>!;GIsHg3`Sr#gN=Jz|xJ|!w!w`B`yd%GiOIGQRgTx;)AU@{N z`=vD{#7+51tf(%{rL$>{x7tLEt-C&#ZYd@IbgLNaT|bn*+D`W~Z3zyQy)Na{8{YO( zLOU8Cm)@19JK26WLpg4b4A~*bEU-YFoo8LOg%5!}1 zX{9aRe%53siA(x5%@+NRYO=yCZ~PfW>vf8H!0zO)%pA$|hKcc3k$AyZ`>_cPq_d7BR#L|g z^q{?eQsS^JIsFU;fy5&!bOsw;jUJZdC8T$vy*tgM4QNm1Ey^dxxJSLNzhB6wH%Wrw zn{5z8d3OCaZM4=Q8@3sYWcp`lzbpBL zzNjiNuTVPkJO9la>%6jvddgEn3{DUHm$IwSfsO#w=`2q zCGY(0G}f^*03PJ29{wklJuLOdB8qdQQYsrY(Vslp)Y~7J!oE8Dp^fr$#=RuAlx9;0 zu9N>_S0X#I&=+@?JK(K;JUd|RgZgxOC(6gNJ9*xCK^9zFpyh#nOu;gK)-UI?odxnz7T9oiKp3#80;vv0slw7((|JrAj@v zlzimx>`6b@M~4lfdq4{H1V49Zvo8ju1qh?PkY-x!u^xHH)#wZxoMp2t$tRmj{LJ@< znCVku57XKHZ+@OVshXWs3xy@cc}e%Htc{q%3nPvj9f0S@X*X`3zy^NwhbPq= z8b36-cTi9 z?PSeNw&uDQB>t2)vQwGabx#PCHFn9x`=}FbtzOpRstrk^(}pDuwj`?j5z@K8;-{e`tei`|rob=TpldG9NHT|mp)gO>7sx$wzx*$6~hg~H8^Z;j993GapvioAEao4aDU(Y<_5$|0fzQE*1?BtO^crFkja`*$b#Du)G>Eu25ewS?`J#QB^x;I|E%~pi^ z;YO?@%8G6>Rhm=#sXC$MRXzJC=Z)-qnr%(K&Zf1}Zosw9=;~C<7LnKT)g!9WyVtPJ zEtJElm)e+E&E5?Z<7{_V*qU8sspJQ24Wd~B`C+reo!~Q5jCP;PEQQ_)s#Rj_d0fT1 zy3o#B+9%7`R`_m@Ywzt!R>W;lOntf*%SxtXM)Q#2?l?&v)wr>?(5d}5&fTrr z*$nR(gi@Su?E1pi(!Q;yw@6noqK#?wkA?=tdEblA?7T)4N-56kqFdMtvq-F`IA`wv z#O}vN;2XtxNcWG-wKg30zuAFBG_xHoVZ;csr(Le^SvL6>#E zXkr6agrK8>n7W2<*w@|UjaowY?V4ANoeQGfk0Ml!d&xH21!BQ;M@+x?oLRaCK#q9b zH6xxeE82$}Fpr-3JLKse>;vygCv1s+%*yU~;@ci)%yMdA+f!+_MV|dAyGLv;&1;rZ z{rtuMA={EjyniKE4y7y_gKhl;<(W7)t-Bgb#k#m3(fJ@`rlyt>CRC^JG}p!pGAg0 zSr<9t>QkH#?Ek^$tc-(*;;cWbgS|0~#dqQ{`t8|$hNiEJ%+r%HgX+MGL?6+)vH(#8-NzCYTO>9@Z7x~R;#$C|J;!jG+AMXrx#YUFT+~FW~ z!CTQA#uieajrgt=J>Rh58(guu)D?!ouUW1s^+k4x(Tdk>J^6b4sh3*Z_KN*c6v2sV zx{mRQ2F&Qub`@`ovAD2 zV97N)!_U94Q+`7=Kc zeYTN>GSU%*_&{${BXbei!9~Xx!xuENM~`XN&HS)9>>f)>CpPk?fA;~65kFz#6P%cq zwwQb8F|#2r!|bDWm^k4v>)xjXlRfB8>)60l$Uov-LJaMWN6hC^0rtHY;g{(nrV*Bh z@S(IP<^NE1mSI(H-PcFN?!xXaEbJHyMQm&Y6tTNI>F(}si&78-_P&>(VuG#MqN3Q? zqVkUC|9&}~FNce3tFZRk>t1utF@B?}MD%u|)@ZU5>U)%k8i&#myWJU1-Acq}Y6iE3 zy8yZO#bw82++dIRp6PudVvgh17dMRjcTc2TJ_-kNC3Ys<6FFK(@O>&jcc%Avr%J%! zt<(c`xF?Fg#^8{LHv(VW74>&TqV;hf{7t(n-nJu4q0kpC?Cy%oWI}9y;fGk$yTb9K zKO(FAVLkk=c+<`oi&zg>w!ABvZ1KWzUFv~;+!3#+kx4cTMy}R5o_dfBVZdPpmwA8u4Qtv3zx&$XS_zV6$NKbOojkEE<`@FkcwpwZY$cu&ZHS+MEw)cy*wQEEOJH4Kx^jCMc_dHY@yrK z2G_<{=Ryo`9w}xo%t!BW-< z+;Tbtzn<(DABYh5R%9W2sUz$oBE&|6OzaJGg6Gu;v2XY(JYZk_cFjl;JR}{T>Tu>U zAyTv$mx==R%m?p}6b}|A6CLV~hv|{R+wwRbBzr*pI#PILAH~R5o=9pHC88%Mp{Rj3 z3`azX`_wWGrlu=&PLw!sBMN(J_>#31C1yy!k zor7Y*-W;fz-E#HNA<5g&AegT0lwIwl2sv#HzoZ6*9yo`BI057b<1EslpBL*L} zz?k=AO&d|zBOYNhe2_fSMnsxMBW4)+4l8WLc~v;(@XnEBYa<#i3c>b|emEU&BMQ0& zqS<+W=%m|-CY}B8JSYHqXKlo?soq#YzxTy!Hljr+IXyf>R^77^$9PuX{YOpV6C3d% znKkxB-Y4vqJp*vEvopugs?B`!@IZ^~RWG0=54f>AZ_irjVb;}m*)g#5TFcs|EF*nm^ zl=!(Z7eCA$&^ne}g^6d-I-dLa@fe}qJqur`g?=%7oX~BOi69*pScHxj0d-HI!YkzeVKm=rxxZkUXQ%rUwBe4?1{a2yNmn9q1~k|@}71WTg5 zp>oj|&NlJr9PEP~ohA!|qtOU2-fq|R-@Z`m0;qMoMgNFX_?`I(TnFL~g z{{W<}Fc5DI{cuGq5P_ZsqW=zWyrVCr@ks;GRZTr3wVS)I83=Ip_sk*~@17foafQrX zniYc8pAAGO3rCo>4Mo~-1ED*YT%yuYSXUW{=HR^OSQvI|Oc5Tu%MIHRj_&c3#E^;X z6ECd3&Q2lEaDUQy?3!hb7XHtWQ@a2)Iqypu{Tw^5O0;J`(d|qrP6n!Ri}l)}ikIlW zmV5iK1J0a&jW^?Su&&S%$DhB&zmC~h)`IhC!;hF+?=*Cmx*+;~1yn*SrJZ z+)+#Hu=0a?dmuJ0&=NDlnP+7f1RYB)G5G~EV)_KbF;a`?1E0wnA$XOkC1$fOKX9Ap z#(6DKgT0e*YL^|0v_#A0_PDS=3^#6Qi8j-1(PmmW#C0ukbA~mJXh$H;y@q%?jWfNp z>g&9(v@1sA0!GcZM)KpXc%gX?zVSBjT+$1YpDDHX&72}+daX}Bk4YN??&RJK>>11MLq89ZlMa$;Fs?I4i z9PEy?)uzyCmyQnB9&miJ90okMN8a$naL09+WuA3|{1D%C51azX?CHY($ltxVL4Wb9#sPTbydUynAU^&KK;r^3%UQE~ zJ_*FMtb@qC;EjR#K?vP;2oZHX(Jn3+N#71((Ka^(*o5Gl;b9!EbjHo4p=fP;7{3!7 z@o!WZiUJQa$Il*Pn}wsB&tVK%V2h(=;n=?CFvid2T{xG1@(k+0=8!)(zq-!+P5nA* zgRzCEH0JqYUq?N>#(8w7kKTWBZMFZ^e0(FzBmJSKx=DnD=Q4Y)Wu>ZohZ>q$4mh&& zy=va9JS=VEgazv!sUGR%Aeql;UFEWBe%owRQS&?j*{Xx|CmGXI*ET6Z^`}V&RGT<& z&h%5wBzIys`#wwB+o>YPry;w&7fLT|RHf7Z(Pq6jY&sjOYTrJJ*@u0QK5?q5W^4j( z+xjAX&RErmm>4+Q_#yi0V3qm92sj;NuBBNYmCf8x{MyPMZbnzt)_;Lyya!^CUkBAs zJ{v#I3c?@RMy3A19K2Cn+XmVy&%Vr>?h=AV`YlzVuJrxY;=O!Q3zaGLW|v=wGXJHy zDv>pP)x|I}g<7ai9c0GQk#HP8-a=JnO5Lji_i#i@l_B?O&WcE^IbxvdNWN6>@734& znfigc!KjPKTWXE(haReL*SLUFxi<7oKUA0AEWn0#dox5e>;|wyshMZM< z(tDD3#2xNa^3+@D!H=%viNU#9YPEhk{8_*4{&PxQ!J24eiZ>b?rK`6Y9K#su$v)|% zsy%BYV)RX4?Aw~Gp8kd2z`K5USnq`TLbpg5QhR^4;+XoUM<}M<2!LnjW9p%Nz6Ehl zYdaiOKWXHT%)B7h>_^qBTC-LohpO>|BkC11J&_yE%(Ltx>ZhDz_jF-iTG|n{L0=ba z*cFDTyd&z>mmG15_3F?2N7Sq6z3wrI9tzE)YGtJ@?)8pDtKmo0V-{JXynYn!E=*NV zSZssgA=Nol8}E-*{DxnGCFkgEBE~7@T7{TW$o#xFTpS44rkEy$0)E;;}NwJu^OY46|3`*Nq(Ynz;NZMVGd4qVm9>0p-MeuQN9vn5DkFL;{ZAf) zMKiAL-d;+xC5hgC;FDpcUP|a*(2*w1oJJrD|Ojd@V>~NTD>010iFlNC!?@Y ztGD89W`l8vs&=odb=zL~FzhlWZm@=prGpYu{~{jVWQOKP2gUHid8{9Ahex#>m9#qr zXhe@ypvpl>R-Z))c?J91J1Fsq3ho_n!uFo_$|DaI8oXp)!#i80^WI!+W46#OdmClk z$}`Y9h8<^k~z~{C%D3e{(2oc~#f05T6KZSkhlHZt+}+BL2h7={ zXW-vP{@J8T%wMQ999sQjp z(HQ-5pHhqaIpRh2b>5SZtn?ao1zMa9h}0CNQHx91`GndLyHuq@vyjgOJJ|h9RSx_( zhZL1Pmi|pu7MABzN9TwO?y3Ka)!aiyC_ z4qQLG0j9?khyB^Ow!#CpXO1ZC==U9Z%M)fJl9a-&8AzT?re%*rWnsTGY_j&j&P54| z)8XSVO7z7Q8Ly<&N;kl%Cbo2vjm`vM!eE@9Jwif1CjM9 zP8oA02+iuTzIz|1)b{a5a5H)>zQidzo%kNM{@>j!PI-HjJ-zm1u{DWTmV9HsvjZ7x z-Qtx#>`@r>n)>Du`*uypReL&<7gZ_5U=RWAuF^_ z3|>D-P(tT1f5(MAwg1#9rVeYWuYxsWnDM%T+=C}7oKJJb zfx>%=hbk8v`?@3i-yH=}XE2eh%nyTZD|1}3Fs`i^fg3j!)hzlk-Kme9lDIO}EBeLB~b@>xlk*~%XkZ;F*g&ErryGywh27c1*JMxk;>AhI)y6}dhP zbCw4o=~S_j@Hq%8S%)X&6f0gS>{s(Hal5csSs&qpk)EL#T2ib;W_!XWI1JN16e}J6 za%K|E9AB;LiXLZK_Y)%!*Y3LV-~;RKJne?^7B=WHs5)1z;BXCTrhARgYiqQ0)|B@KT){E+>Mz*Ul*`6lLjN6h z_%lU|K9@oaqaI6@ttIVE&!cdIBMx5HlJ$%V@Vv|kIR~}m32_!X`SVS=TT}XVl!Ezj@Fvq?+=stP&;t4bj|SrHo4?BJ zz%YC~M}OeQze*47U_?9)#>2|Lirr;@SbhybV8egP>~w1X>V%7dwh(gYue@c=Q^*ht3>T><3bev*KHe?Kp zBmXIyAjzO~#tq6jmrt;wTnBP}Of#VmS@{Hxl^qsuSj zo-H*Ho!ZM7$BV?}J3zCfy&N5N0rj07(Xwp^f@sbms-ZLb-fJ%-UGs6)%LQlpw3kK8 zBo^^5*Lq+(d8eNmB7}Xh#%<-wuen&(nP>9%*7EcP^4#ckwC~hfF6SAtvY8LEk7>(h zOVaUet}k}%(v~4RPvDNDA6hTcme0wfdY$PHXL4 z$POMVvoBmi3o^di9T_ISe<;L`MD|wN=*mmq&%<{JHQ&#N$@>or$lY*F1tYbpmh)I&yPN99oPdcVeuLT;v*sS}TK4I8H~p zWre}Xm3KBh9eJU9Fj?80%}mjeUD;16y%~xJhB|UWxDOV64MVAsj+__miKylg&@$JN zor|dF(uu_TH9GPEeHqKAMX~>=BPUY_(tAZT#_ZOSs|VR*@qV&y59-K>=hVA-#zJMK zBcoHv*N=_Er~U(^x}^!%8{ui7L0+f*60GY?4<9eJmkCUuK)aFZUrxPQ~+u3Bf1LLRloo@sJ-yDYR# zbVal6Q)PPFOq6$G4LEp;yg)9_j{xS#f1fNnHA_dECSLembFxhBnF<|8YSu0ErFq?C ze4!Vsv4OtaRqrSkP4Gi{Z+$sXBLO$|(a+XeU-s-8gRbnqwQHs?XY3)%>R}+BHqn=3 zHA2yu&%U0`_2r@5KujMRfw%3>KRo>`zI1DGd>P!6LOfQmNNB;fS z$SNsP^GqI~FVC^=_IMnLQA70QW_w3mtc=26U41!KpR?lDF?cpoUk>kRi{3+H@o2QZ z9Nd^3uNiUJ95Gf7??c|hf$Hm=G2T$l&C0|9)+zta&XKoQXW$L%6i=u5vhV0q7}~)O zJ^C5R)h$oL<`C~2M#j?NX&P=(Px$JJiR|T0rlKIPb-k(l+AIZCG0r$W)KvD^M#e*J z>K}|uWKh~Mgi$m6q=T{i^x_EKUt?z9O(V$yk@s6q98xcowU&?%N?-J@h6`oGj5s{6 z^v0p21@ds0Se!QZWzDca)@mP(&!_z`Veta_hP?!juheZDE|Be6YwzqA$jq7ra$Nr) z^js2z2a^{_gBAWraS6s)1AhMu{W6&$$mDDK52Z);X(+Z$TOjuqy2GY!I7+7TH3wbs zTqgp)GZsjnsjR!_v%cfk5xiR+-W!FHd`&`sdsGESLv!i^S!V)!#yK&#uD?JUvHtk^ zAQlb_r^%F9_MZn;U*|nn=F4`Uj$knL4nwn zm&&7d!FWB@2kMqfrB&A;`rF7{dTu6@$%hUpBmbqqO#Tr5m^35+Z%^|3)H^NO7zqC( zW-?F58xGODL&um&Wib7Kw}bI1%uF7j27FYVPy_^;$-m^logNv6Ja03JAZCfL4aYYZ zGkKM@$t?c}G_>X4&pB|;*+^9FHshz=osCWiQ?h%D#~m|7V$; z?Bj>oL%ngrWtp63>Wjf!n1PLD@^yC~95~{OuZ@<;V;{XRfU~OGZ_VXsl_zF&3c$dd z=CYF)bp?yqvs0VPE34hnz&i+Ulg(u~=M2{`2IFLexxCwvIq90AXy{=s6E(=-9}|Z4 zhs@=G*Q^QH=Zs%(E_ZRB`SNH4$`_hTi*w|nmqsF3&s>Ted(7l#%*$%AJW7pE4-4ur z4w=f-FTC%at$u&LnPe!(#l#}8D|w8Sb7d!bvGwWOJ*#OXYc-9=_tmzDon|WQKIJ~7 zj=^)~QhE7w1Ugb*;reR1oaP&jo$Pgt*|SRS-xh|mf5>jTzgh;f7yhyb=gZn_2Qr_eKth~tF&nYWpDz!0#zj(mMdAYoK z*bf!#FWu5yE(?u)(M8`IYvPtkq3eSq8+|Zz`7-&lsW%*bd~tTrG8scZ#n~)BxYS!F zpBD4%eN1jzIoF?aX}g-N$FG^o_TkJ==o5qZ< zl1fcr`o_ZXaSv^Zm(~3rVI~$w`n=7sPzV+`*J?#i1nOYoyUu1uo zpEs3D&xNDwbbD-hv{dTlg~4u#16H+IAsc3f;yW`g54K$;%acPe*N!^2hpVJdB4YouL~X+2^C3tbyi{h@WY6q&DCXIi$@cA?@UIPPoKt3U{61!q*AE9qo6Buv z2Hb8`eVymm*O${cYy16^`78&g$a>ji7*<&0=EE7XTL#aBcQ(+Ci%dZorklwuQ=a$lI8SVD zCI>J(;`ke140yUkRLn(Cd!^P_}T1w6Jl(*!$E1 z_FW=P{m56i6~z46#q#eFC!8ZaXfJ zJvg6q-9W!XOB4BLYzXEUIl$O*iCnOetdU9o^8ziE4T6K9HN=S-5awisan9VCdAM0i z<%@R#NN-GyccqzJ+cbcgrOYPoYbHzBhjZbYFW#_3Mvy6&QbNtv<;Bu|DSgnqAEZrR zEd96p!15IPB+pId3mb3LiSk4uGau-j zHIaEdp9;xFzT;>jL!P+7pT6`lvrXjCpRV}X(jRH9P2|HCu4wwlA9bJ6XFb#ff1U?m z(=lUdxR6?3_F4}NGLfU`!>I8m5H%te%j3tK@Q~}D@W@n}(YKL1na`yE^fx{?(v?;J z!eLTuMIG}QG0x>&a68P<)%ryyqoTWRqth_{_d^Mdw+v z8E3+_pQ%MOohNr53dVtp^gcKk$><9~h>vkV&w(b=fte344l#Frf~kCM6o{tA^ji)y zm2HCqP&kad`#2M6dfOjf>_Pc_G?q;o_~Tc(3!L+--{l|r3eGK*7n^$`{W_T% z77OLd;T|ZB_lEW8h4Q?KJ9h4;Z{gblxtqEhhnc?6Ke<5Oqc#kj-P&(oASc{$LH=hy z7`ZNxEnc|b<^+EXnX*u>o6q%c5P+i#Ol3lq6Rxvwr5S51*HLF(+a{>mI$Kusm9724 zP$!ohs#ODJ!nIHs?6byT?V&QAOrihf8t*(gQvN#3c`r4$e;<#RFJA`ZN`@^0`{>K6 zIlCz}C2yx@=@mF)UEa^t=x~2m>*3Xk09Ru-z+zh*_`BLXi0OGxhg8-}c$D~%p`<2k*18MWq0Gd>fq=DVYI${bm#=Y<&N>+D)GN9yhLBpZ;cG!x z8O8PdUv^lSRWF(MIv96;TBGsw0rK(6V4UOqd&H%o((ZK-bEa&u%6GK!-`{R!ox>Z9L(- z)&n!@O_Q37J>bB-zA$B~45lXWX09h5FPJLzUbrD~jTc;hPm${exG{&t8>4PbljZ!o zPmp2PeS;zQKlRaE|FKgHWrmq6>hAKzo2zr>`wV8~6#7+L=V8;DNhK#3%Y0d%hqRPE z`v>DsFKeVOYAYY72H{l>^FH)DOP?u0h-6>YyJ;`^`gI`IvUfUV-auL5!Mld7g>3&)1ILD{D#8+vnJ)ARhZ zm7bjNoO&d4`uoyrH90BQoF~eEeBY+Kcw*<8 z8PfYUS=V)auxsfwnM>bW&{dvAYiG-8U0vx*;xqd{=d*9Drku?gdjm`6Io_)!hu;mv zynj|W>``Af-^+Qig*EK`n#$&V1F@|J&ycv*vPBtn_|%qK2w_L;d z=LkM4gZAsleuMe_u6Bsttt;c-`Xls&9X8z>NzcANu8g&Ze#g-=)rjZZW#*$Lj+QQe z{BYFN0q)O7%Z+}1IQYf^BfgH76`jbX+3SdN<)h^(@@yCKUR8E^v^?4Tf7%WDLPJK& z+E(<4u@22K9xacTd83N^zp(CTxod_u()byEeSDNGr}tbl$ptH>jFL+lasB&KOII>d zKH=O-_XPbu>qg2su5jl1|973s^Is^n*s-2jYEwZ^Z#b!5#_f9BM1Kl?S2JhkE>@|J*Rjy<|^n(-6lf)mD%DPAN^02Pa`dnL%enu_IAscK>Y$A`6 zmDK1NGstvW%Vm%Ku#!FTfU@>-+#NsMPoY<3Qzu!>8PtikcBtE_i?oRGg9UrtgN?e% zn6MPriW|3J(RQE?X0NN zT_(Bspz@&u`km`0D|l{C9P>Y)Pd9nT+Z*@j$vX6*tNhu_8^1m}B6n?9dCc1j&#C{{ zzSBkiZRUlWQJf7u?I?4!JTX907j&qL+(kajsS^&U7d}LKGS_B>bj8=CKC%`y)rHg$ z8m$~99mog@o9|w2pZ|A1cQbQWCelAw_KbXtW?Orq9GF zzv;)_=w%7R&~&BjfGgS^w!}Hje5HT6E81>lW@wAsir+GN`k4c6>RhIrB{O8%N_rO) ze=0MnO}@E`S(RTkWuTgwdK)ZJ)~AmA(bofIJ1x<+WqrAW_kywXETiW98MZubBIk_s#AklLhd$4=am*Lu>x&jQm9s{$c09gCfA)Fz*)8RYaGoC%>Hpe0M7H5szMAXb>uPTq z^_{;X88`o3=L52}Qu5jrm;YIkm)KG1Pfv!!H%lC8(MQSk<}>6WJ%{llm1DEW>po_Q z8nH7K>q-|KGqOb8&uf%Rkv#M6Sis_ijgm9b1t~o&aPzFMGLd`?=ZS~m&G)EN7W*7y z4q^1;lSpVIZ7foT^SzGL+lTVfTgu`x z7X;H&eNpqi(!+p0V9Pyt^8A6~6YUDCW6U8=c%&4vzBvAT7uM`~thi7oGPdU~tgw2l zXoR@o=8m0s`0%mYV%9>UBaHxvYt;q&GYb3@9MmbXXj>uKQCr=a&)l*7m<}60Nd1Zap-yC&G)-Bgo}Np7 z1(?;l+DTos#U1*itl-rwSq)}BF70f^8T>=F9km1V__^5Bww|KP`_HolGx7I)=LoEtqr`%!A)t;~2tA8L*Lc+|&FscPcWo*QYM>%w8O+ zAE2n{;kz(kFQ%RJS3<(*%Q?OW4-5U2w`bk4X~Z5}+2^Ymz9OIJ;%?}__EsF&1Ib&p z8#|^2D$dhAP=CsPXdMhtyy=H%-*Z1YPES(&eLc`2gP)6Dr9sp<54FU6mse`*H}vcrw!n%KE#(sLStaMG zYir*^dChfLuYDM6iaIK?J-IhK4q;b=o{BT?1J+LuVoLwMiXC;4!&V%`qtpGAyIiY{ zKMtVP)PBm$`5tHyaR5;p`Y7Fvxew)0KdLnvL9()LzLtN z^jq-zMyf%|Qhxp7=YC|ljZg-#*Q%Ou7(YXXE8lrmG#f)E!WeJG^928`bv76{B~?jD z@xX-Zw$;|TRa6(j2?9P%;yU#0D)#f4GR=u=Wzt2Q=M19P6)Uv9(^2%^$?ORB^saYl zE7E%T;6CR99pambz?6Kp-vD46V^ zlsl?Tn>^t<#R}n{yQrtLN3``9IZnGLt6NX=BvafHJ=>eA2l0IF*@ldu;N|KbT|7}< zYysT?=IWibJ*gS6z?C-()g#|{pr5@3vUW~Y|0?ABwcCPyrBUjj1olfdTi~4Sc6AM| z)dhYAPjz0e{><}XDZgGe#7&*V^=wM!c-r+i-Ihno7G6Ue%1ruKhrO~eZ2Bh z@xc9aHr3Yo@4#)M(+Pj1np$Dy(e2{?5`R3&w8EcNJ47A!8H`)f!{1?tsCR~U0L~C+ zZ`~$(uA>IF$Qo&PHi`1)e$eb|1NUQV#J|(NP#>_t^l@gQY@sg(s%`M{`)u)xJ+r4D znK_*}K{VxE_fKusHJN>daZ55PIg{uxy1B@pp6<+J8%zlLf@ty(g5v1Sk1N2{`rdeJ zN-xriP~>0of>}f6Qn%lO!{ooNF5u5oJRSASykO%-9!p+0Vu!1es%j$QTKsACiDLG>QIn~-|Y|GGq%{#(oc-5P0egaJB-@o zEWA!w}~+^5@#O|@9}dDtQ2$#(JXAib8ZcF>z=ER25mVAM)G#7vnW23nGV(8&%1 z*Y^^=$##2nm0r26EyUX_YCUXiF?nAd@!OniO#1q!9MBXsYkT98o-MMYHR&_;g7s|X zT(_t#&dgv&?k-!5G;1I}my_+5#F@v^X5uvSXd0H1*E+Jbc+<@jb2$&amESpYL6)9j>mdAg7l1pGS6By!{Kt)bzxP zQtFHT?>{U4-->(Sw5YNQq4$>A=(Dm!i#j0~(1Mu=X4xXygEe@xHIk;C5%oI+qYryZ zK3X~A8};u!uQHoyOOCiQnHtRX{Jjiwg#DvHgx0geLW4763pL#iNp^5Oe_Hgd3}B|1 zJr*=SDbmP*HOb?QXWKE6a>pOGEgayM6eYg*_D74M4rsRDSG3&CdpnsMyO-Jvd6jqO zoAxMgu}xHtA(QX`Ye_FtF($_cm-^Vl?3C5AM(8LjI zwgm`7*5G%4J7Bn}o7lA97a{a)uKnmJu0CNF@i7OO4tEmCGufAZ%ZxKaS5ZX$z{0hT z`1_T)u0vQGQm6g4zP|{K@WP|3PRI-j7S^@A(8JCdXP$?NcrtTpwsgUZpa5|?o!QIN zs4I>R6m3^}GVja8B_LiS0VnB#lLMSKtRL<0*K6#sG&g3pvx zvJ3ya&b7Kc7gjUKP|qN1Zd9pA4UK@=7HV`Sy$}uFh2w318*Ci%QoPX%$8~ZjPSt)T zq9VdDCW~6hv#*2`*}?}oH+*4I#+++1hgUK)=vbL(_8cBa zw{&rub?|ud=>nXxMBrOy>GW{Jn7g^+_!u&a`tV+uuM#2L!^s8i2#v`Ur4K!!N^*zh zM}EzJT8_y!rdw$v40P7$goa&hg*jXi!;n64+s(wN?WJ|{#M@)awiy{fJA z)bvkc&WUIg(+~S2?XwvAI11jOe0Bs>h}#XLV87J{35H+9{t29CO{E96~L=US5Zm-R(sAJx9|Qc%0Go+%Qt%%@BAvvMucJOYtB|`e-$Q&$aa3}h`^`{QFS^5 zZ^_aL_5L6}Uk*l9ApJJ;N`*GP^J~+bG3(N8ai4z5shoqlUbrZ<-uvTzYiBeWK!5rd zGHp2jitd#s^852_=le3biAo&x@I~_@oSRO_7nO~DnFT>U@pK`YNq{PpGk~Bo9|+h*%HiMb56?7w!7} zw2M{~!P1uedfK8m%I2@ps@~aacEso-FE= z>ird_<06r2X^#Z=KO#~;0@t^bRTN*zTws0{I2*p-{I@8X6NU}5oUpd(4-q~w6hR%y zlv8~Y6Y06x9O}&H?klmEGynJTT-)r2!k#+u$bHV(8+1!V*9*Wqax>g3io~ea{)i*v z==-H2F@p2eMc+BMJ9bM<`tD2qo+~~lJQ9|v>_`6MJ{(vkGH3f@MhkCp``?TIWnY-Y z`Qmoc2eE^98w)<0H@m(QR%A+FU~em>%WLtF`jLu#emK7SsVHghjUD6#cOLpgc({7u z8s{we{ffn#1aJI(<%{)CuZShoPerj8qqQzie4pZjZxe&ier%q&f0}F-KCAwFZZz`J z(3@||Tnx@(zkkutOSXsyzFA|>m>PPH8{#mKGZc$?HS{)3iNzi266OxCq4&K-401WE z8dIX7_w8yF=CHSRYM6%J)*X>#g*i~)|4(Rii9quV_A_-W#e_@rAMA2MSNrec!)j)o z*W%u5^GWRcPK|+)Ggf_hEu1}rFm9_ezQjKlvkU^UhYW{(haZc;ew+(9IHRr4BQb0? z*M{u83yckoxSbfy>993(4$#z)ba{Scdb{ut5nl{n%|z7TtnJvO}% zH*Rv~JHQ{qzZMGnV_pbLp;yjTB?>F4@!7&zdCGC|?u{ElCkA8oz$4=DRQ7*{RQDYx z|M)F*=AFX0Cae+sDuq{*lQ>IV>5MOx;zLFnOorRy>PPNR<{bJM*x}^fN^$K}GV_7y zz1sF$6xL*J+H?o3KlxL*F~jp8v)h9keHW8^9zpR-M~qohAvRSdu;)py(9jQpns3Y@ zm$Ir?xyaCt#owXMSnoz|!0KqMIzW!!-%_DZpY+;n?(?yw!cs=yc@OrpTJUTiLch;2 z>JX;B6>Bpi(3D!HKf}L@ZU-XK@gvWUj=zNG#|X$(K^QUYmw47QoZgubjGO;Me5x4= z=a>-mnfFzM-=Md5S_D$pWqFoXDkT(Nx;(Lksl}UfrE9&#YZj1dz zzUXEVi1&VZqQyNQbYPy;fA{TsvuNQQ?}B=FgOQ#RF6Qv_I=Hy{I;+e|g;V>pi0?`6 z-qTWX)=xo8LmS-a`9dUoP~qWjTPTfQh^amE;6uKoseP%)ACiM_NA0m_`*ZQRK{h_b z($9bVshE2rlZ-OXq1rtbb8d?zp~rEirVB#7Zi|bHj^R+S3oMK8h*sW5k$&72F3n3sW92CH_Oc#xd@M#> zItnviUrgWgOnkg`1m$ajuP5d*D*@GVP8B@RA1+nSMtTO`uQ;K zL;dsU0x@)##CguA##k1Jxp`_h9JEEcb%Dr!mIoPThdCn)#LJQ#6rQk$k59fB9+Qm~ zF=S@hoE2wvPeW&;BPukc_!!Q0{>>TpD79$RG950Qaqp?A5^2V%nD>=u$fi88tYr$W z6gVSkOrA)(aRL_3?8$oNi4&>E$!~Cl;ck^k_;?Hh$;+N>uNDgpj_Ve0z-cNI2s@HLoxBGB2vmDFi3>ald6b-AEBHN zhQY!~Esk{#h7&a?fjKJCZASnOKcw#DL!L1FN$up0;A;D}{@wuL&-vty|GghueTA}v zI+?5xGI`y^$Q$J5QA_i@)J05LV}}o9wfy&do-{jF%>R{-2L0K$PmL8<7Mz7U{ck`2 z#fod53KBRI5k2EXr$iMFvi8a77AM~M=i)SZFH641ib~@%FeBsTM?|dH|K&9FsLN^A zC03N~&%lb-{5f1>#G3&p(JIslX$@mUH{Uc|Hzp72TC^zGkO~j_Z8Y9Q3yY~Kuwm~t zb4H99+MD^hrfz5y86zfFa1U>H$CFbr;+jmvwKB5Z*Tsn5&*JdE+^G}!(L$4YssQ>5 zJJpC5x`C0{!&!6S;wa%ucF<}Wgb(i`Me+M!JdF>*NqY9ne(`*L#*C||NU@|5GYD+L zs7;L&VI#d^Oa8+tB~mQ1@jwmoZl*kq6zjjZqJ};5aWtaDL=Wmn4~A6Rw_7gm5$`$w zbk`0=&yzdEn+A3mTUdRaUEWxW&94if8c4>JfsIg)$j6o?WU)ru2%j|))17#idut=6 z?op%k7}+mQG;hl!(1|ieQiZWSr#4zQTv{4D{3ZW;^iW;T+Y}E z!=tC5+0q%0_t}csBTwSGrVI1bY=s{8xd&&KD}=46{7(Hdd&fZ=Y(?ga6Sz3fomo(} zVpjPP%r^DF)gffr^-6%IpC`1OY{X?|-kG!^i^IZN%(IF_Ea$SGldMDw>Y5vW<19zV zLTqL|TSZOXfyIYJa(n<5mj+?j#Dij!LQN_6+lA5tV&n_HS8kz*>vd54X~Uip*LKwF zgW~LJ=A?U3M_TK!NGRgnobSc4r556^32VnLeE)7)ii@?m?{g&9597NXLbJ#hUJ+$wPxNBE{jmvFdbY6(RdS`LS(-z-6^u+nu3Yw6C z_H6M)p+8xLBSrMo51u3z^kuH=T?Y)PoFqycp22|2ju?GdUwmlFJlRv!pHJ5p`&VV6 zc?xsACr=VuZ8KnT*9Ei3PZY)9PeQ*NeT8rIgvI4_*sx!`wn9(T^GiW2`@Ht)dLn2) z88y6bow*`}$~_T9kC=Y?r!g<;63QDXHHde-SL%HKFfgtOKhI4BGs?v4}wp?0WD4u#bmh#s45u#9?Q!}9}# zhK?P2w+pRyZp>9aWBi5l=sS%4N$~~dRRwTdLw4A&uUOhGA5#M9!HEBkH^U?vo+VFa z;!h}})i_B_T}kXOxBm-d?vKXLJUh9#(K%WRr-uG`B;^xSgRO-{|V zoaY!^>Wr2X!qC9_HO8~I@wy{x;F1q8>PwEYIus|DeZ!MKHmK7t6i=qs7Uvquk|@5;RX=z%%NfH}o;Uf>-Bop8DtXEz|I^P61L`o8+~biEG`?;%O0?qG#V}7ls z^O?Qzp&9D_JB@nlJn(aNQ?d#&5%<~?Y1>+$$K!OwxAaCtPAhERn2d$p=v#?xg_pgL z!h|~VIX{}?W^d~Mm-=DVw#K-;E(T|P{c&qXJq&mrfk)Q@5c^UKAL$|PSThK7H)!Gm z@5>|T3mSDq6G3zQ>1_(ZpnA2jevJ<*K7?SmUqcv&G3$(fWs7kcc?AO!z)M0&k24AKDRon(D>jy}ZAhIr5Ob@BXA zX||d=eR8z-y;3F4Q(;ItbzEEOsuKt1VdyXy?48j=9W^Ewxtu{-T!-3zVh-+6m*xD( zP`&&|HvUp`Vq7&t?K3$GDsp4GI!;pWG&+U3{e9T~9j7+VOu_Gd>}9);Qumla|HVK* z?5#gitiR|Dtt4xZi!GdeQeF zY%`}XX!|hroG0|gjt)Vs8UxiGKls3$>+GrOuFmb^g;x7RG46J2^)2cIu2Fy6GOnK5 zl6{fpHK~o;@I_URT4SpkVa)EmuDUtaff}Vy=By1;ElG7i`UCO}MtF}OvcewgPE}v$ z4f+?=+X64bc&s&47cZzgoVkEB&a4&>y`Uad%5yuN9_AH=YLhMn_(8^d^yn+XuK_<0Xy^R|w?l-crL5uga-Sw0OF&T)b4yIs5ZRKW3DlRe?r*k(g zCB^VK+VdG_5~!&-H%fvm_s34V8p?*2amb;b6OkIqgT+w@rPk+)s8V-)7>0pogU~^rY`;Mj`_u* zSo!L)`pX~9PyB^>1H3U4jSWt zTCc0GbLF!kN>8UtXgz^Fd<;=Kb8oMt2BXAgh@yS}Jg(>3V)u+;%2J(k=%!^)zxqgJ z&gpziUF?A0kH;$&*36JC=CdzliqgY}Y^7bSqYV})*J*t%A`4Eh_6p@wHwANcy5oxN zX5}ZngjW(hF=**l<=cilG~MluW%Jf6|9Ub1k(#-I$5twN|SH_m4;rVet z^uDxMIjzggM=yV9budvZA0%tFzwxRrB)3;q&5pht6FW@33*w|nX=gvEBT|mhNavs;)DDNhp$5*nh zjAHGTVZRHo)0(=G6c=S5@7|8hobb!bTWL5h9|NcrxO+ZW*${IU^^JOj5R&Cop}La%7g55 ztY>fG;@lABZH;6ssuO@V`+}6zkRurOjDFY`0gA0vJSJuZQbX&nG&mlOb523HTji@L zts*eMkn@Q>K8hCmgm-H49M1PrmXoC!$GddqV-IDgs~@Hf4h7D;De0NsaE|6VVCkX^ zugBiq&rrN*;iMd;UbpS=F!=e~D>d4?Ky5;vOgmd;>m9NLHiY5UsZEMgV`s$755vMY z!%O;NMOvzg`qzv2cNCc3D|rR)FHolF>5(pEUWL>n;`TX)&<96ol{d z)JnhO5%}mpAN}?`W$x5aSa2q>Yg>+@!8x5q@&Ejr*-DbOKbkKJ#o+ImiaX~rGYaYD zv^k~t`Ox3roxX)%X-bFs%p>EyZo-BX}Rmh}CbDe;Oag@0T+1pyHLX$!|Yu zx!?HM;f2!T&s}&H#yMR5RN3})IoeIi!Sk#q$~$+E0Iy(bpKqMDw~dA};( zT+2s4-#o0=d93`fJqIBl^U$&Kf$|YOM_ag744!aLdA?x_F1*i2*PXYOo_)w%apUKm z<}Kx2^0T$+XRZpruDm#k+0IYN%e(xua?87o2)SGU^S>@ArIeXm5C1#QKcCOvS2rs! zIbMX(4EBPDwJ0+~F5n9NgE|c#l=YA5(ewvBa(b$gUvnO=3(`_*9qy_r8|_7u&;a~MUvYuKgU^2+%v{$#&7(z1`d7ARg}<)+=p*_(~q1zIw2Q3Wj4|VH z(hpFxr?$MTt7t6!9^U!PpjfRVR&N@xmO9Tn8olK5>w0Pis2g9TC%KF2QN=#g`ksU3 zSM_>yG}r*6xg(@`*LigI+K6#G#!AO$bz~K9M$}+a2@5%gUTvt+EHIH}UCyAOp8n#p zu`DqLdzFvG}du#|P$iY|JR&GY-Fr~(vM^%irUbp-!afF40#$x!Z}d^v{G zN9jt%bh1#Cg>e2=SBe)hs=&Moo#|~Gqd8fm$5GsL%Yxg~iPD|>#7^8tAFr~KIm$g~ zt4)rHtEIGT-hl`A$U z=sWHyYE7lkDI1UMIaUECqOqDB$6xq z?tfbgJcxoRF|t7|g2vyXxv!rp&#DE3yT_8pWG6LE+^4LGgWsMx^81Kdyw^=YqK=z9 zcc~?3`)_}prvk!8X56yd-ZIlL`GjpYZ=SwwZ^zYct z5e>a^jGDwA)8knZms*D8Yw2j+FjEe)r&iA2kyFE*m=9Zk7W!UBoOO_wBXejO$2N+6-ypzd4wEk2eJ*B$Jx&?8{;R_ zr`9eRhUM9K{B*R8t6aEJRB_cg1faeF1U_D+IX=t}WuIf5^FrljY(TrS}- zN<20qB7K=We|HdF=}EA8>@Rw~_hEwNCa9hBmGD`+;J}|JOwC7TRCC`={bK$aFFCV# zE4_)E5w7kjSH_jV^e%I8@;$_J3i;~P+a-=%EN(o@e6uAP-pAa<_-~!bE$VS6x{3H? zVz*uj{OT6SEbfg4xKQshpFiWBRGd#tL2`?W?4wS2($N%*o$M%Wol{^&&%ib_JNcTg z-ODl^rZX)hisK)8I1d-yCW;do=ML1Sd_JFTwH?L!$u9VeRiOT*qqKj#3t|4$w)LMa zAFOxd?mh+X+;owLT6-{DCkg}Uq3&MI&b~PSwUU z|0qo2LiXUdyX0Kkg-Vt8PJH}=OcnJNqHA1^MzU+QjDp2me=DA{&nv}&@}o@&K4c`| znEo=^lSXFn=>%Lk93W0#wI&%MS`iTe68LU;AvCe`k9H~~DzyTK45RV1U8Hy!R$%a~Xmq_3E?+d3qibX|W(Ta6>hMP~)^KCeCIU3oOE2Qr0GK5f%cluSZ-1u0G%VT0Ner=Grk)QFkCmEDI0%h$&^8dF` z!*gV*oMc^buO*z_$97nC!Pu|jlz3hhz zn4#nCCBr_Xu#SsG$1go4cNy~(a$>P<*J3g8C&%|$0<+i`OE><0d~A~lHC<;JkWALE zY{G_bXUo)&?6>o?^Yd{&VlYDndT&SlPz5~c^}aWGJFMm^5YcKcIwQBEL7{*eJ($S` z+hKc<4F6wU`B}Uj&5so@Zs#S2^R{Cr*BR@iK=E0#9h-upm^HsjZl&>cjz{70%y8Mk z$B|^Lqg#Zm3*L_YPSh%F3>U}Y+p%gh$64)bssCvkSR~@ovrt(Ywhi7dqS08iTr|qJ zqJBUO46=h{)rwNQbdABhVS#eipcp69V=zT!nJl1g#P}k;Fb@Kx^ABWAX~ZJ_q`%xf zn*+MfksjwKN3T+!u!$wOKL>-(koll-BsRC zCIf)|&Ckaf)B13`G3mjzqYBKq$rRn1} zSGMtSwFdbqH{8TFb}M?3VVYg#BaK;G=>dsCV_}e_mu`jHqbLmTu~J^}zKvNl?#vF8 z#Ne%Pie-Hsvr1fsZpEte(FiRMk>(%D&__K6&T7HZF1QSp7UUs6Tq-L&mmxlsEZNZk zvSV5a<{gZ|=+XY-V_F2os~EWX`$^<5*0!9JCkuUL2ha93^KFdy)J?4c^YzarkoNA_?UE$7ITDJ#mvh_$7tu*y;- z=tsd|<~+H3xD>_9qo_G?ml?c2oBCBJ6(2cqs1!Z5qY)muRDLKbg|8pAyS;+sD(B>} zW6?O>5-7`tmSV#fF);jPscgJhg5nwUdmi?aZ2=|pj>j-_!CR8lOK{^<44RU?WXiiD zR@Tr(d9n(vR#oAEK{Q0yUK=q))PzS8t2qF)a%A9;}le z7h_5WGbvupkq3>%P^a#3Q}Y7Jsw+m4RW!PId&u^kWNqd!$8Cj|=&UYA0kzNr)xE`c zL@~NdrdGDpQ&x~WQN1|^eZTUM(10T5YR2IGc6U)#ErJW{$*{9-vSK|sluM`~dE_S1 zuky*^iN&mr^x)5Ak6JShwJ+VIj#}0{YW(!G-6W+)HjFCiH*e!6e{5zw-Yy=gQx=L% zSMp!!_rDuLuE>rpxWaz@(jr$GW1j~1C-HE*K3^0cS!0?dK-Xlxq)IX_E4cq%=_0=_ zO2ORu%t+|#BD;D2E`95>jhrQny4+&>c}3`ciDPbKD!RT!aMq2&)!Yd()S?KEe$4h$pDbo%7HS@&AN<91 zx$&V8t(~ch-sB{%cM9RpzD(OEbLEH1LKt#=7~?_jKgVk1kQiLw<0{%lg;*5H4B6hU zl6s{8cP{hs92eQfJ!@LOSX_0W&zfj*p{Gven-Bsnw*f6u)eb7jvG z_ER{XFAV333?cVmBm2ndbEM{N3d(L#=hI`(Ke^|PqZ9FmIX&jS^ncMSn)H5_thkzt znE9LLJ7eld<3`JKMFHj~M4^qPsmz^K0QIIQT#K|2uOS7PV$KYO{gY*4 zb3ST0hvT)T%QmuAJ2o?~@Tr|tY|KZ2JIC{bgY>tezVrn3PA-n}Eg1;@^b+n3bCAK| zdFZ<$7AC{&#a$~8a*AW_Y%kvXaxq+woW42-snE-XH`jsIYmTz(O*Yi1J=5`UlJAvS zC~;!8=?Z$`=@oULcK5;vC%NT9{eX4?Zhz;)p-K`%i6s6=wa?8WIxG9KMbgzf`7X}^rMHW?7bm3A_U_v^1QtEIwLda$?X zTElTpwUu9~=l}Va|Bmy{WLj~yi2URV0`*SSuU z3z->cWxc)1aGK<2r{ipP0*rsQk#KS^Lz@$D-`_^s?O`67dm;v?+Q=YD#afP4j|0{+ zq>1^VK@C_Pr1v$f=?b{={iVs7cJ&N8Vo7Y8(11FzN=@gUPTfPSAA z9r?L4&vegmpE5&NJWl7Jg1okJi@x%jd(GdN73)wjNR~|?f9S7hbRIZN3f^&@T*9mo ztx>Y@P&WNtG5C0OtUUJ0Mg}wTA{|U*WqazMsSo*Tx2c@s*=J~X>h=rG#Mmke4hm`* zOw7fXz6|$2$=+NsK@6FDcy38N)(^In{>>S%<2mj5R!g~$3@o=Hui4Z}?3m^8Blo1S z-K}JI5^R}q#{Yf8V;pUez4wvF@$wCH;bQL&O6?~-x*<_7G3V<~&*wo+%9M}FR_aG=JrvZ@sYq2s4r-JNs4i(E_B;=7C7#Ug5uzG%}o@$yY9RL>8UzGpdZL2)o?9xk>^$nm-thhAhMPX53e zjQz52yN!{z`RVwA+Eo9SW5wBs*?F@Qu<3%4C^??X&vA`?XCy%;TVOvf5y!6@$%up0 z;+7}ErNBt~j!eT0<_KhZ7|Fz4saO+9eTI>d3>}(^+TS<8j6BH^yHfCMeiC^LM&dP+ zYw|hzy93Q6xDCCx)2R9PGm{kRspqd_{^sWKV#hTkjh_8|3FAeR-m7+2|E-^&e|uYL zN5;z_KLvu;-cgo5&cd>b3RE4sr`#M)FNrDhJ|;aXMAmfw_@%ITeN7fqJ> zGv(z;nF!{-J7D-*r5ion3-3`gc3nj}u^(hee!cYxbuqTcfMo;qkh+@k?pZpfPh+;D zMptsi(&2G77Q4tAJz3jOMI~#1l<%W1< zG!7Q?+BEphNx3Al%PDT$m|5&z#z6 zQv;dj%`*!6a*t^lh}Zv;@w8tO=DyLF`XKJ%GRc>CtuIxtHlw-yMyPc%5VLj67$j@M zznP51In32NGFFzbejf2-5(Z2+6Hj`tx_KsHwY8Z<>`BHLj{m3m{P*9VYUmYV zo`C^g{k)e4EeQzz`)+R)l`r*GRDM+ZbY1Z8)mQV=*Wo=sT}QY1bXDc|{Qdkd{(YYD rzu#}6`{};&-~0R2KYiV^)2Hi)e_!YQzpul~Kd+Qui(R*4_e8X+sQhO4|NA}veN8L-K3&;!DqHWJ|KIPB$FBSQ-*wkE z_L}_v?*I2S|9-4lwbjUY9~nhfF@d;!(+c@hy~wPuA9zbE9P_ZI z(1~7Ho5WuG+?;+nx*?-dh%PWU$>H77wlQ+rpnty4s;`z8$WN2q(=bTa-sQK7~g+C{^Q)Zt&G>m2|<^Y0>p2&=M8oS zV~C9aZhcnsIY&b9AzJ{o3_U(CJ_HvT=k$zue6Vvc)P^ut^A7Ru27%bTOo-)!eE99x z{n7uF5d91u^QpuA5$hy`<)tCC#?24yqJ>!Vas$oN^TY5$AwFbT(Si|vh}00_`8Q9> zGx0<2DG^5O3a1k{{IIlx6$Y)nO0R$VU}=^W9CwG&`&usuE{IWf){9KWdthdc7z3?r zD9OVGi|30W4nIe#>2fTXVTH>_wo}AZJDk>L-@nC(TFtFdAr|7!yESBTQ;PkJdGpbo z^y#_;=ZZ!6`1BNAQjwtDJ~28PT2Zg_VuWpxV#_xN%Bi=)K09kjUV73DBlg}_*&@j% zh&U$^PU||rHOY%soE9P6%N`?>eJOFQ5FMia=DhZ?oDc321e>J-cpVtYE0>00pjZIE z?0m(kT@jd@EW|uosrsJgo#6E)9tCwm}$W5aPdLfvDz7P zJw@29FQKj3&e$}@3K!~~NPfx%W4~JAmE4u4JaoZ{Phw2cbsz&9XKYTFpv7E39joN9 zw3k4)eh)pHX@|+X#F#mHKD9_>=uj#`o8EX@c}|R2kr4Su$IxnD5yEB)G1X`msoZ00 z9YmO!v4&=`ub0?Z!S>lv+OkUsy(G%%;G6&k?#X@iT=`4Wp z1$)eN2&U4eD|iww$K`GA^zobka=pJf>*x*RYc7Vd*9j1veo?XCC<>038PD0hviGcw zhHt4$j@zqC47h=x2#wJboJ8 zIBN|xJu4(kUQcCRWH5Sdg#(9<(6Bc$RJ;^p{Et)Aqs$t1{iRr)dXU10+hAcw#N;yR<2ZdOo-X<>>-Wt zCHW$@r#m=ejMA3Ij}qek8T-Hd#&=q$Fjc#XzMKH(^Ro;eAHIf57X+{zCc~JO*D)a>UI-D|}kehsu-e@Y`98%gtkmB5V*7EJ5IoY2=}1gT=K{EL=8~ibHI0 zsab}R&xg^J3R`#u$nbkj2im^G9=9qa&EhTACH6tR?<>kpnKW_x-x%6MlfT z9cs>taBrU`ZTKR?mSXilNythT|>b-Pe zzZK@swMFL*<}_i12s-X|e{o(qt{=Vx#$vPqJNrf|Aqt4c%hLjEj#lRuZ%D+OFaZ{w z>&x{VmxQQ?0(h<(!uhOELQH2Nl1>cdOqvsMW(nJ4Te@*Q#wJ2XCd5kJAF%rp54BPu zOg`pg^` zYlX7I0=|=~H%#)ZU}+J_U!LxcNycKdad&vX9WIFNA;Hdn>iDLePEhSFMa-90e#SIM z41o;(jevY}D6VYR~06Q)W;R-$_Lvd7q2kmEbBhRPetgisA zvL)P_nQ7QsBtTsHN^Yr18dBN>=%KlsGw+#(+F3%hECxp#Q!&k4h}F%LxD|RSIH?fg z;-3E8m8(fG=^?_vW6j75Pr&nIBE+qUMnc_nT)QKJRcNc>uKH-SA8m!!J)IO2TElVV zq7{tS6e?~JE4WIA^C_nOm^)Vtq5Vc)XP*z;ZiunqoQSt-=Y_0Y638>W`7?bz zFvox~UmV99irrv8Uxwss*?i1aSCr1M##g-@ez%hg67N`J?jQw!u8RwFbFFc7coKgv z${F5z*61@UlAk`x89NTiu<2~!8g#(K#wDWH(n%sksA0~#>w>{si7l6s#CCK) z4+f6RKlGZemU{SlJ)W@6xRyn_I|N zS=u3Hlr^Rnedf3Jwnl4%>@UtYw`}IN49tYtWC2uhnyb^u#(9p8|K|1jum^bGri-aIF%c=%t7oHA8_hU0A$fc8SwA$;QEjLI^ZZaVqJ;+s$zBtlo?QCzrFD%31Qcv9Df^J|lk@Ir)Lr=xMlFAmez zSs`T2P@GMS!BFNmt`!~1I?)mdli6Y%A3s7dy)XWY`nZK4F z5bp)+5Ni}g9OAF)dSa514fbym^Divj@FUj-{dA-La87Hn!QJU@d|aj@h9_7f$2o%U ztM33e_S&xN9{%CK;{U@r%l|y57)SUxUVw#RVs2KM62sRC@Zz@(mza7Bi`bdCUvAGG z>ym@C00FdK+jF-+-a>Jn08b66WxBX?@N0Acd!-WX>BILGDBaGZEgz4CG zoYPqaQrv{lxv-n-JTD7_s)XQHEaqw@=~yyZgdl@a+?$nY$Z-@wudNj=eo5%xDniK3 zXp9VwL-hqK9DOhvb%8PX`O^yBmIfGX`W1-=mS1$0H)rei4abU~Vr>4kP7z%c0`n6R z7}i=V%0367ALD$|EL5>=XCTs6OOcY0tx$jJkEO*@{L+4^*t^9K_jk(BOP-u%`f-uTG&ex&D;Kb*J12CWyZ{%}5$X@egRO!@I?P7vzaz-EXoZ(PI9R(8+- z+WG(HDNp8Dab;WcuwXQc1*>hj$fA5aStfw`GdVX;T!8h=SEpZh;*3%X@W@VpySJRU zW99|8bX@@5HI5uTVCP(!0Cv0WIj{0O9ANR1b%TscJDZD^F+vP`Eaal%ZsE)}AvS+H z%kd(DoH1Y0eGg~*Ivf8yV)vX~%B`))!27Wxn0Suk25z{4a%&OZTXx{0PbFjZ4-vX7 z&W8H>cyzyHg*{g`qtl#g*xN;nko7{tgOj4bhl^q1H9vb%aTrd|lprpuA$#)f5ZI?m z;BjDrV))h|e4i%8+t{rN9qRzhPLN{0o|R(NeLsXxm*K#CAH}AzzSyIXVaU})MX=Bt z^VV4-tyJ|7=U#=@aCXuA!`X@PJmsLv4{dTrejgiHdhh(R-s_AF((F(1f#q_jmH+LZ z?@g6(ikL!}4i_MKw;k8Mr3hVF>{2C{b9?QJv35Hw2&dYWLau5^ci`X}*nBUzrczF5zfO0b*FZ9h-558{Rh$ zyOs-4H{=W_3BSd-u^jdIUT$4AkCExj=d`Zk^3$`>vz-VR)TeXb=BDG~ZV}Fo?#mS( zPlYbaJG$C6VE(v7oY-uIC5ku%#l)gVqZP()JqdTms~Bq|hR1_$=&l}t=HU{ooF_57 z)*%$WDH2GHw;1d;4}#BPDMCK4%-%6I0Cwe4%$`t?J!P;TO!v!BKe4Cc#8@BLv-q%P zgoEN=zmayp8e3Z{6#x3?02aGn+EA+q-{b3aN3OjOqN$Zn7@~kZ@L9%sSt)Q*K!Wqd0b__ePg&G*LpV- z?kqN~iXF?z$K60_pa>_WJ-AcWN$9C-g@XxSF?eDe{!v=te#b&Qnh=A>+r_B*912T^ zNCY*DVaxVm)5U#{kt)FB zwWqn|amC1DK1X43lr!cEk=QK2l@EKlitqxA9l`2O12=Php5)@`Rv~tLU%^G&5Kbit zp|CdK=Dx|qTgH6j#fjW0qZ`l<5h1N<5La58gsKTvcmK1aFOpyc^X23B2cxB*6z=8bh+>>KIZDw^FbU5XXE&B_ zmgv7R?3nI>UZpZTA3MTurpy(i`u=U_Z}H#xzqYph+uwZ zYT15nXXRs@V7~pmWIvZXsS*>`3-D{nKCW)jLpu@%dcI*jz-iI@JpMSzOXd z9;+S;5s^QUYpKkDOyUw`*81#lW={#6<(g#;+`CiLw6P*)~s)Z znj!`dOvQM)xehtTQRt#3!Bpc4jAfjw%p|z5Ee8>db5y+qSEeSSnsK(=BgMTyFDP9+ zF?$7z!wnq&te+G!zg-b-c;kQ@ESOJz6|yTU-qHnGAO7Y%YTjV(!_s#+zyJX{tL`V7mRom43_U@=&69S**) zgUHkhK2P2w@7!y2Y_P%&c@r$sYEX7ajJ?-CV--Ee@)u$}{QVi7{Ht+mvjlF7KVi_u z#|XS5!AOrrgdeQHA$=(}HNHj9tWwxUOL1lTE6f^Rh>HF)6xvjyMwts;R*!qqrvk~b zJR(2HAXK@F%$f|G+G33trnxZPmxeTjH7g%w;v%aX#Er5+{iY<;PK|@u)&^&mWnv8D z+?&P26&>$l6ysca#1@Z}o+6ZS_J3@P*QXlsnDGo*VTYgQxll09>ZZ0(JyP^%oeQ&t zRzVbsJ9wb(39F~nurq<(pZV?YynC<6&Tz@#kC^EwK>Iy63}wrk5XOAt{0C1B3)VE@ zO&Vj{TMbg@kJz+Ygk^fYF@D|$Y_1hyw&f_8oqP{tmb(peoPkV(cevV<#kBnvAuYKM zxshV{ry3*nRV_5pi6?~;=oOft(f=7Dwn_nqLons4&`={q?+HiH)cg?d z*|{IN>o6W_-pAky8H`H~Kv%yA?^wMeIdd=GCgdUOsx=<%*a3A*0@u|Bjn6m2#U&GO zPO>=m{A#RjNki8X8@Ml8f|Q6Pv`w(Z_fzxm+$#=0rM4Kg{5VE2&f4#6k+;bMBN^w7 zYwa-2AO#_e^Q#m)^lQ0~O2+Mbe|z|!h(R{vykWLI&I@n;S)XHSkM?U>-H~x#0DE+A z_WiRyhV=>l*FS%f5Jo-C-hprMKR>#XH*&s5%prJq7$<@@87J>tUgoGkNb?2 z7!fW(M`2yp1i>~d(2VYiJ-t3+jiwl5?*GWHDt`~NG%-$DR%D-M%vbN1Aopid_EhEv zr+1TLa+PZ~KeZNKX;O?nbRxT^@&&%_kil`Ees<}ur+CvU!{v{?vd0~*M1Kcsf``B?SB1}E>jXHC;l!hM-7k}GYpb`Hsc!8Kd> zTS&5&AHIRq&UW~kE6Y0CnuHxk?cn;(F>BW2I9$rL!`5#*3`a7~U&k?S3wmG#<2>5Y z9?zE^Mlj<%<&!;@tqi~;#(Bwl2bdl?giOZyBI~ELvh(lX^~!1o7;ajHJB+jMeFv1N z?)kI6=fmIi=XiB3e)_Sm7@sA8MNLQkL~b+2U12u-s2$(sRWmLx6k+}=75??)X6)Cr zLi^Ab#plW|7*uKniyMuKZYrPg+CvQa&R2@6)Q`~GDM9bNN=0#(M%*7R#R{zw#f2X4 z5b#QhrkOd4pT%$RDolp9<2MzW>t121i8YMBTvuqtKgXECHkgqap*WTH80}JRU{)Te zI5Dprk6??FY2J$6ns-4;TQse3Q*2@}`5Dd*+b=mP_9ZKE|E3+{V5i7&&cemX_Sh$u zDR|`#)CAk3FT{#&^OLc+hXW4p7b>hf#AE(t2V~d|SLiU#)n6PS*svgbIOA-4OpfU} zXAOfG=daJ?u-ZHZ4;jym>l~qb-or41aSqmZ#F7K8hX1Zh&O745-cyFR8E2`rBOKmF z|5=|A>G+pDA6m7GPeco*lnXE?U>AR?;5%GnSzg?ECvT2EklH@xLIHh3qWV4jWPtOmVw(H4I3 zv77jv=Ll)?dVWSiGGewkVZ)&{ywies2;MlMCUPP_oN+c5IOAkS2Yx8yJiEUOe$y>Q z0OOnz>w+&GE+`%_p1(O)+}n|$xXC!He{zA_H-|s#$L6}CqhEp|pK*TE-xc#m2mM)3 zn&v5w-{dbyG_}FZ z9U1(KijUZ6VT*oSQ}~9c1`H6|A-{V(-*)gdY7g7vPFM`zqx>mir#fJdO(cKE`5}To zI!f#ECy+91j;y7cA;!$q!?kEg8eup2oa3Bm&a@2x6#U=FJZSE`c18Z}O3rxm6yQ6s;xYTPm_F_t!} zQmvaRw<$(~3Exy`U4#m^kktoN8(MkpUMt4@mci@!59a58Vl<1Ryj;HWvq!feV5Kcm z8yfkDU!T$LlpThZzu~7ien2m0d!%-M$*T;gLxq5y9bc;WHIttsaGM-nV;}MBV;&)T zydzu#%lOjZdpPph5qZWXd{K`=Oh|QNd$5pS@+Aik&N`!DWj=4pDbP*V1*;uy@fY9U zgvm=6-2bNFyM0au++1_%z1(^i399j9>R>{hywm7^i!H&t;sqJ@Y_sn{9vAOFDV} z#W{ImKU%Osjq{o!ME2@IRG6jCO+L(Om0m-r{i1eUMJVg3dur24 zc4nSi__My?z1LryH#SVA z3##q7TT6wou$o1a!`gG*Sbtx$K%YWaci<|Sc46;v1Nvp$fg8O*g6cd2;_kNRwEd*8 zS2v&!kJ@py-&kF1sy?+@sB_L6Y_NLOEJ{yS<;En~;*7Z-?bU6=&d$tk2T!I!mOpS{ zzXLL#j;A>bzTi-p9Q7y1Q2qXQ=y=@`!)A`8^(8NHEy@XxhYu%B#bYe+cE)a9ZSt5~ zhR;G5oZL8w!cc@^`(4rK*`JjaEHyu?vz`Z zjI>M-R6BL0ZJ*;%YU7FTDe5$YaW>oK1ugUUe>m^b^F~*_a^8n=e$w6t{hc%TdyMn+ z3LjKmE#y;~Jr^DHLC8VHpY^YIeW1PJHh+t8e&yF-Aew_~r4ycnia2|M~b&k7QVQlwvM-fdukJa+{oHQa)u|Tg^)9&XzMYQjszUGYu6R?nnSwWzV`7^dE>7A&s9!Q&QM8;vP*74pGcj}hY$WEY(9T?!P8YhOz%mfQG@G(^JHtd4^cUyw(_)G@(&S7Xm?r9r4IR(u#Eltg zg-0e1WdEu&_l_51+h#{Pr`v`5YQpp<-JQrLt21{;(;9hK9cg7mCyr0H!O;0~>h)EV zvoNtkOLu!3OdYw6-5qdtmkrGt)t+-?daQ|irQ|VOjT3BRcKgMOTx!4LFzYe9Ulo#? z>j#{!c0uja%e3ryEvC0)He_u{yI)o@Er~leuQ4M__j1@zXZv&d85-MI1oZ`;7^81W zc29GmwZaP{_8g`BEehBec_TCOAjPe@i5W&di0iSBrluvqceyXl1neeTG1H|iWZE*% zEq^#qG4#jo=;btkao&pn%o#eDyqG;-F${!7<3uW9oD1d#q1bB%B{9y1X@Te=ne=D9 zaYhhg9&Dm<4ou4z7mN#Q_LJW?IUZ$){KZ*M!;N~3>BJ?m-gK?M58Zjuh1Jdf+GC1-qc*Fc-S-_7VMG zxuRRBBgJ2NjU~*-E}7v#jnk?zZh;3X9@>&Dq8z>Vvvc3xniPda2)N>fSL>v7)Fl_6 z-Mz6$S4>yyv+=zGT>mOspCAhYKo z_X2Rt@-X#hoDE+D!esYW@?@M3e+a^$kQH>7aenwS7=z#Jp*2D7SeX+H-61A)v!4rk z2Zz9Tzm(byv&WlR;n2zw(PXAK@VgcM7w6>BVRTfh3->!ih$}B+Xkp*(oR^68fHLE0 ze_#*plCcB=aS}Q8@5wD2B}0U5GOfSXgL}(#R26E;RDY^F7yZ%}ve}8`aJeg|R$!0u z(m0ya*ok`=Bgd@C*C^<|23IU|!k{}*Bwx^ubDidb{V&4lWiZQ$JY1pLDU=d7G~wkd zH)t#hqSoiHF=@01cF6td&WdVy@AQOTgAav^%VFZ+g_XO#$lziT`loqA^{qQOY3JhM z6CbRzbtT2tY-S6-c)8G-ZVb5r?*aap(ASX$?nq=Ye*nuF9Y|jz7Q0pkGL4EI_3Re~ z#U7?n*e(9UdC8?* z;WQ)V29|vB#p|LFlK3P-yN5sMbP$dCb`4GA18{Ik0KLqP#MlLa=%DFG?_P(X|K=e0 z|MaGZ2LhmVG#CRkylAPO59a(6f*%rRDrWY4*fkXHoouO+^#`Y33;WA%C)oOsIjgN2 z4vj$C3okmrYTgx@e{-JitsuR2KUuyd#2dwJ(pIW)tp}}e=VB>c3s>WeMzdJ1yqs=( zs&j`Mn9gV7L(1gUxm!1_!RI_A^_lA2Ik_$L>ME#8Q;qAvV&jOqa#Ai=;o=s{u}|$j zU26J?gdt8?u=Oq-p4E)2Z=KQE;STNW*@%N;SG3H}Cs9caxN0}#Yv#~Kt;g`!@qm5} zPiKCVV&N`NyeiEiVQ2wNoxCvQK|0<2!J}uUH{zPo$h_$$+lxMUJtl?vT}VPmJ3qu+ zNTd-0ruWnFhvTa_I?r?n*A1Bl@K`L(dl3S=&4C!%Er$Az48SncAauJMMI{;DND>7j zCMtrAn12wshoCSZj1Js!#?6ROjEfH;rJfwp)G)+X`Tg+^LyN+Z?(I%9UBp;Z69L`M z0c5*ahG%;t|FUQ0&D-=r@D2|mg-|tpKdA=9w+Pku?;d|J>@ zB1QL_TH1E@JL=u7aZ&FLt!-^V)IM8u`ShBW@Aw8IR-27HQA=jQU*Owa4tn~M3~sa9 z>1#)f*!zq=EqIWNQJuVTLqDH(pU%dFr9QY?dW)6?ry=x`FMi5+a@d-HtT;dH-b)5qd#zRV34oP(K)M3&xXCiIlO^3(i+U5E&Oo zzf9b)H8d0@J7VeKH7DH84MTg~7#cf+Y0Te*<7r?dO=5mHM>7&|5B$SX|8#Z1#r z)YbSM-k!F`WuGsUdFmZbu{zt8USBE7q8{-~^OrID3ng3DVdP^6W}lxZ^KdOj#xh@a zw~4GL zHYsV9ZzyW-1mfGfY;t}cfO3ssEQ`+|y5xf|iS;2nUi&~N>jClo;?U9954$T$scXblXeat(q;3)Qa1F!E?tv)c z^XX(&Afk>1VUx=(dVkRu^K*mIFH}K7Q%~3q35C&@4C)!)(H@V6M?!Eqk+fMY;kJ1c=HHH^vOzM~6kkO}WGww?v&OA!QMfcIhAL0Vpg!s9 zUz{yc?~`|zEabWh5qPMUKI!LRDC?hUg?^&^F}Jbgz8I=&e$hmaBA8k-&7_;EGOFY* z9LKRaf)aJ5XyP5{#~*WnCOe=2>I2G8%&S@w9Kb4IIZ`h55|uw8mG4JB~O9~Lpkt{5=$mIz@`MiwK{;Qm6=Q=7) z3l#W$(+Q3PJ1A>)Ght}zg4RXq%Gfn&$mrsR>&7 zl`z}(fak&>=pDU75hvWR=SDC#Z_OpoJuax87>X?kJQW{x!tvlRRG!MD3R^i=^<^=G z#|;{(U}w8sBra&D(6|nEa96#GlN}T3@Gcvs8H|P^D2aLxv&F`pS225UJaLS_>Xzug zIPWUYA-6-xELRrdi|b?R5|V`Hy{)j^^BraQCbD|380UYo(I=aq!Ay zXX;aRr9PX9v)pcjD+@a+i+fzh5p_E#tu>W-TVpYp^+A+rTFN;=*HB|BN78LAWk^~K z+QvJf<(#H6YIQUYKXFD=Ob2D&$|!6-?~3!Q)RlH4BjDQJ9m96Dk=E}}L_2w)_}4eu z{300g{$5Cq_((G<0 zpiAV5ZLWcsaif&pmARv9r(i^x6;k&ftS%u6f!HID2I;w=@(0u5^;gojOHQyn%ksP5 zS#+jSj(ZIeSg|mjwk&eMw}VkkpOH>e%pFkoJ`&Gt)2Jh>M}~fg`peG$*KY`CrBM3F zBuutonjfn|>ai^mdEZ62!u;Ol)d^_3EXJmZ4WvCi9yJuH_)}N0qBtDgJ-8}>4c6S4leS;qM^^|(sUm*W&0y(a3yWs=!M|f zfsmdoqf;^u^iK@J=)rd>5RRYWhc^yfKSP(zWtz%G$C!>>?ud(b zG?e?;J~N-;jC-#;C_4p4;y|$r-cM_%)XNJ;`|WN_2d=6tsS1Vir8~}r{iKzjgOPmD z6Ysu$p?*Drpi$?=>PwCEeog@7hkVdn@`hZF`eACVFHG%UkZB03AMf?Y6#FN%oZTy{ z3c$2S4=B>W6Q5ZQxY)duHnMtZT3IkGO$+H>H#hV%4#j24BU1+#EN2?u+A~Tz*v}cK zS4N;<;4Rwz-U;z6#s{1FP{HX{l%8KcOMm!W7#c=egrZKOt!>v?;*9PzCQhqGz*T_)xsF@yS zT|?&wtj9W2MY*~n1~2y7LiAN#dACmtwzb$H$D@N%av~aj?EDsd?Wo)ue-#r99ijTN zqcSBp3a6eq;rzJ{O8qI3ke_!!=;(GzScPN0nj4ySsVdE~LQ!h%4le!|S$+)04Au`a zKhjK#Mg<|z)(if9KGLl{0jTZhgVg(P>3+B$lB|3&EVYKZH2c84)el!ns%h0aZ?v-r zz~%9e=y|#)>wg8}Mag~2p6r1Erol`nT1=0*JXyt$8kZ$t&jBHpwItFP z%Xl2UCxTH}E}cCRhk0xsq^$S>1ueJ^FV@%o`n`tC2FIddf(*F}K2mPSYuLtmRYv|l z=uod1)InYpU+>#}H^zF~(7t9DB5psU!rhV@ccbWpZ1ANHj|&SnQXDASm)sI_)N zWNdq7U3vtF)jb9ksVg7M35Q9PD-w6ADoedWQK{>Whx2}u>@Cw}UH3rA(Qh<&W)M!W zd1LppP1HxiG|Z8#wru&18Y=xzJ&gHk&srKb%NIXbJ^6OkGaANx`Tp(!Fx&E&61sW8 zP8Nu(y&sT{y$1?gSzJA!l+1d$(oY5%H+(h^#h_QkG?>MkD-(iY(5H|> zm$@QS5rToQb4jI>3x87mSKlQBGYOimexz59#xp>Z({jy4fAw7PGUM%|YOl zCngN}OqF*7@SV+5ZMprPrY`iy!tJa^f2599rTZec*caFO)X?pjKIjcL7x%oHcBFeD zAua&M4MXI4NSyDn1I=Vsb;1Av4B3f(0 z_E}26Uv{o?qJTE|yWn+VAa>T}l8%}SCWroAf4);}PO=efM*D*RE!6Kds_XG%Ix2u=P&9z!XNKb9C3J93(Xtn2SK3|mUw(7ZEau7 zt#*cCOe3w<@Imc67YJ?M(hAmd)@yM^(ArmQj+^yQ)!d;q{dc zQypd}u&9Q37 zekGI9UO3z)L-pIQv}c4D&SY4l;KCPLUFQj~S)1^jCQ_AnqD_bCV@I(Xm%1mG-?PQs zXK(3@DeJv3otXCcTDn~5jswH(F?i~8I>mC6=v;fe==+4GpLWA4RufqG?E!`Gu6U*? zM`>LtrFUn2$Y?pbv=-7M6Bm@NWP7b9pMKlAuzrdhm(J$WFny+FSmlUm`b0nayCCqX z6XN1|a{T2C`+S$b?fj49_^%JUY(y5o5vlRFjI~=Yat3N%czrYjUM2H`q3gxd-I$Qba2KJ zp$L1Zh7Kk>V{xSjq5r(1xg%W=Jkg5vt7@np%a`x6|Gy!f{DLHBU7(r6w13a4sp_x` zUTKKgY3SCo*W)AZH}hNYJzS2K85U#<-zU9NCaeH%2-myN@-hMkkS5 zPiK(6H9ibaqP|RHvPAE19b@L%oBZ>k-WbZ}i&Lh57Ib#_9 zd?LL~vd1ZB0eW9tOdI2D@T{8v1!cQP-Y7*zz-1JDzd$cfvK&41B7QpCkohPvc1Qh# z{?FWLe1I6QNB;v0gJ6oBCBe<>mf$B{qbqFAta7a-%qFB!vy#n9jMhd+3K*;6dme3fb#`C{qjM#ud=PcPvMk zYys7PTpGHCowsi;VB1Zi$~ZZT?Jq!WeirrqE=P}r7Z7#i2EApyC#`yO)a^iUMCbLTA$zj9ME(=b9Xmn|TFcLqloU7$4fv@^p5A169>ndSZI zXP~;zhax{Q{cq4o)U%%Ns75x=z2*eO@50IAycBiY*u28yNK(sZ^G`dDAtNi28sAxC z`ud|NZwn{&MjLS45u~ez(mM9P3ra>FM(Kb+N>686@@;C)r$Ad`h zv(MgZz3Yv-PKR;1$&GFCk)yQz5xBH>W*3Qf7H@DAW6wFWL7x;@n{x@#>mAwo{*LIc za~Tu5DA*P{R~C1$LM+W3yKQuY)^aPD9Fws*wvJFOvuRUrqzpK%ezPqM+JlIT8}U^= zuQU)PuLbDnug8y=;zvAx8|1y)$!GQU#!kXLa&Jobtp*+lTu;6#lLGi1?xZO=CdAfL zS^S5tE~uv&!P5bCe1f|pj=!^kVDe}F@M<}Iy$ux0dN3U~Y$~HP=wk*_chLp?U9N3+(u^jrk>zmfhkKu5UWV4!*L*r_%E{xAh_$bBy%9 zqO(~1_!=8U{1N5#)A%%2z!E;t^Yt)?aFBqlAPhj~_bF`KV#N}|WYBqg3Wu$)Fd=d9 zXKXP?|9{W1g`?y!(K(IS{U=yJx}1K_8EhPRkPV%t!0N)Yh;ll`dahGo#js1HZ#l*^ zE-7#(`4Wm9Pp}li#x`HPhOd>!*xNh>LW-}!P4hVW`d$HxGV&hzzw`O8?tJ_-jKSlL z0+?MhUvRlL9KBB2!1aKpI(K;p&XPaF!Bh6?P~tDFpDx0a<;7~A zvM+;VShnUWj*ir4sheeZY<~qw;Y-*bwG8|AU8Z-ykm>3>;P~T92v99$(mV&KeqVx3 z3C9X&%CR8mGIn1f4x5J@|D;}l@W@$5v%%ZY&2|BrqTy!)p z5VZ?!iA!0aT0WZkEz*$ooVZPW)RlM>=j|ZU%usLb=!M`YJIuY^mH%er zZyn`|A`O~Dm|F5Pd%9q~t}V{x2J*GUqdDJKf>UM%{G@@7cto>?6QNJ|-TDf2btJ8K z%O8FqlOyW54QiviF?%ODju3u6@^f!i?M8SG`9KMkT5MjH9O7ouB+^~K<{9<xnzKuq5!qogY*GzB=Nt07uxx?Wl^A50NwBU<9k#|qB0PgQzTxF zSxYgjy|~VZ`4jd;Q2NDRr-9PP=>YZAMxkNgD7T1TOH7N(H2fMJ{Oxb z==>}*QO( z*;|Sdv(8-lCc-X;IN*07N7Q86!%72e>gFE$-?*s8;Uz=FvJ?D? zco*zYlHTW{9e=0T8SkFhW8ZQozH~Zi8tDG(=&0b=<~u=JD8=RPcKq6n#62gCz>g>! z{^1=*tUN0xFNQ1p!WE8qO!%_%-!uFxs+|=>oRH>nia*nVde-62$lWLAZ>&{dFY&9p z^%nC(e#wzn;EcS@O5T^&c_Z%(Pdz1X@kNe}gg4dna^{=EK(BTTFV#?@!*@qqNgc>vT2J4bI1GP+yYoL?opC)} ziOZsP{BGiFXD@Z6jfugFG;6#W(fam!uV#ENUOT0*qK(oCo zS_M(Cd>w+*b*^|fXeomA0@2>e6+Q;*3=BT`qUM7VrfF`fC+od&%tDEOO(v_gHhQA+ zgcA2RY*)uVa)(hrS8P7MOCPWj&yPwZWDy2^KTB0W zn)g4;{E+D#t@;__jMqy8FlI!JYV=OJ3$6tsefS{tra{DGeHe(jw%gQ;AIdTBXdry{ zg{d>>JYlN>kXW9q9#ctpSff7@Y%A2dv2rYV8-Px`n7Vk1939)y96}(;>r^g9T3LLX z{k-7EHf~6K8R1TZ9nD+ADTWte+*mPsXc%(mk22`XZ4t9-0hhXl{7GKgW6A1i+?$Xr z%$V;$z5FGnhL)BL&;?obd8e4^BNb5h~)?OFDdkpidlhvRqO9q8!22 zQRw^44Utr*ys!vE&n@oIySfG^VuR3Yu{-SW(!iRyuD8ay!#>>1;Myx6*b|o{zhR(( z*GO-4B<#53HJQP|H=dZd)EglmI%4M!!lYaLaJ<_R%z5XI;$Fe{F5iPzUpKrZJgw7I zGvxGf#m|Y6a2LC%gyc618i$aI@E&5t?hUJ`!MAT$~YB=4Y{SSvj z$Gn^Rf)V*QJ_|)Vyn3-}shb@Z zd`f7u&d;8Mt5V#;bn0cgKbpxcyH*OG?vDORlen*23Q<3lJep)9xe?VouK5#>uBsmw zRgjCBT6Dfm=*9)~%%b^}Bi4F;Bi>;edpIMCkw&jj z1@{p=GD&l{nr85mF6AJ})dj+34p@6H9Veq)Av<>fgC``znRLB|%jQD!NF0hq9>=G%VXw=4%r$QjWBdw;DzxzeNg2b43}(g^7k{sm2*KT>+O#>y*%(~K`?o#h2d{t zF&bY4LvuhpvITe0>JWs(*{R4<6vKe9zI_ieu;q0u?(Fn|_)#Vt%%te>%>ySEWn$Y% zW0=tIHC%^&zm#T!=}yiV{wkR~zxo`?y5)i12~l4oPqwbwxEf+!o8c6Om9RRQ-@iaIdcIxiL5=7P}`u z#I~-)jfwWbM9X@}9*E)iLWYz#Rq!L-U+9+$bVidNM2G6M85{8}tO&lOy%kCHVCBy+ zuLJ2B*L8!%<6P`t=z?|+3JrGd&V;6kD~`ReGT7506kcsYl1#|Ir8of(}dAMud z8#{c7>*Sn^*q&tui{>lwd~P7}o`OpX)ZlH2Ut=c_YS=Wmh+ zRbVPqzwW7?`P*Xsku>eti#M($TZ#!xI-bSKjuQcxr zaR%pZq*-Q-G-tL8`ST=Z(tDeheRFpRLbv8&ZFytvB;t5Deo&)ceL3%LgAX2ksE4|V@$PpzjJvE*pO{IwU|m|9b>11Iug;M?#jp-S1f5x} z);x3<5_&dXEV%XwH{of4x+_W7T#1I^>9% z&aUd=A~m{SaYpFZK(($}4$eC%VN{){SvrCkLu`(air$ZU%Yq`l{Uqh2ZnaTs+<4sSaEbfGMSF3~Y8$PuuT<8}}J@40TZN zb?`u3RX)rbh3euvO4Jw9$NuNksq3A{ub3e$ZkPJKh8*4#d1(J#pu~&z9Pchk_=>O^;2&eYJ;x!sd!%GqMor#gw<0s+N^W7X$$2P`t(tGp7Df2M6AQDe=jdjcmtTJ}5=qPX~P4tig{A zDZ~uwI}Xq4!rQj;$eB#o>&}08haq{mvt5bT(+Bf;eY0Uqetdfk$M8X0GhpK7i5+Vv z^4lM!;tvi~#e-dF(7ED;PE-!XVz`tn`nE6GA@7zBgp%>!d z)?0@+*NDN?+GO+_Jeha5jUb=23{1N*o>!KI;A*#AbZs5Y8@vmEY@-@RoT;U(Jv>L=lm^A>J_kkE*f+DyI(PWI zn6Etj66&wyd-D>SN zF5`y`xPkC{3Uqs7LjKSBX!`Ah_nS8H+!{4(k1Mga5DeDqCOp zcV}2L=_uJ4c%tZdK4vPn^O~A&INq@UfoE6qJ3XB7w<#ayll1v()C2x%mygZ5I=sn3 z8O{iK7!DfB&or|`;{_F#M0MvQ2{Vgr&4GvPtJ;Gwu(6}F@b98t{N&9dG)Iyj;{Wx7 z&)sc#8JaQTqYY+diFnVckKpVf#=sRqzBsZ0UAx=CWRQ@5tXqu_8_5rLsECi1RbZr; zyaIwGL>4K=ngsF$$dvKo((ADQB0)hma;9+-h};%@|HNpm2kldgW2P7J^M z4e>Zm@X*~C!gm|sh4fU0ayxJSzzNc4ugQl+u@m3t3(Zg#=R>hs!apGlV3r5Nj1L$1 z6~uv6lJA(u_uafx0bx1*D)@M=%D~-@HGo-f)?_l>O^>yk=4w$+s9Zb5MyUh1V5s&5nY}TUr{T9*E?7PgVCgqsE*{Dzu&}J zQwQvDiQ_Zmr5Nd^K(rv8A2Ra>E^3pO>Pi7WtnfN?^;|JpS;hMmFT7(?Ha2Y`PUh}!JSWcpI>lqT-Zy?@ zpA=+jCc}Nw7e4b^Jgje|q5siOeB@8^tm~JBe>%P88{EQ>Pu@Lh&FB1uO+mOkL51|# zd;C9!ez;$!M)|jDejstxcf9AZb7Tp>J>8A&bcWrgdHfW(;MO5V*l8kf`J3*+S{}=8 zhVZ*T$VgM5#%;o~Mh&n>k%vH4q1E>S|8@iU<*cB0 z>i_oham{*uh09yaCU4Kms9U^c;S+p6EXDyd$Mj-&Ds(zsZ4V-+x#Zac|ul z^053}S0-{HJy? z$$K^W9K6Yoo#B8q4K?}-)O;9mHX~Gd@cxm=A50_PwQ0FH8WG3ats+eKNG?uo4d5>| zi1AR;cAbTd?by5_@6nz5LC3(aeDRy7c(6u{+g_jeb3O0DgmkaTs!#l^2X(khzM6)$ z-}uA2w{cv<0Wps{u=0kRQ28kE!?q{O3ogfzT$=kf3}oUCWr(`yhOob5nDkN!29svz zQm77Fn|TAVhyC&N$4vIZzmU9{LumcyF@9VDQpii)vvL9Z`$i27(w?1ZT)>RevoWbD z5y$28na`m#2$rN$Pc)akS(u0~$bhr+OtxWJ49d#0FlnG3J1Gk%{ZJ0BswOeDW-#^n zd6*HX&CWLX;bE8xk#)n^=Eq)Ww^@yS*GLaO#T{Shs(9hv{sFOAFqOTG>xRV3X;wFAN@sv{xbMdi#1;5~| z1Up^YuCq?x0jyO10i$o)Al;=mo89g?7Lm6`FQ1-FKJY#s?X$(F-dyJ}3mPH(Lvx#hlcO?!^c7er-ImFMriTtJR*pRoBy=*PVoo3?R ztJW}6oia?II^eBz6FYOi7;}4v;Y;f_cC#O8hx(oEm?^tf8AH8E7Dnr>V$m((IIPZr+nr^s``%!L z_shfiJOlQ9us_YP^5ENUF1t3^8w;#e(95678g{tjakvVD$Bk#9Ph7CgLWS-$Q+pfk z2$!z(`6K<<#SjPlqMAH5s0Yihp&7JAF2bg2un}{pPq~_dMSHulXF|fTJLDqKpd%B{ zA}@cNw(C40athn`?jvjqY+&Z5&5Am_z}f-ikGEzNJ2>(I4CdM5@rW_3P}+dU`$(H% zJ&8%))I#^33`G;>Fz#M877?EK+Q^7?$heKau`U>}XfrduUWL2~9*_hbWWOzMAxO^` zKf=#2509I8b~Omo4qjnn+n2*MFC1RIuCd^|#dw|?1E0g!n8}O+T&H^O{FAH9ZCD=U z_X&r+f0@mnoq5_FpUNW#5(+^`4Pho{ZSipe`CRjruKEk!geM>bcDH>kDl7CW7XvSxj@{L%i&1i+(reGS5GaQ0d#_ z$iyY=ibg$dG{|sUx}FX6t;6N<KA5W&^B8Zn-+_ukF!wZDr7T5BEW{{V0-B`7WXJACkvQNFvvKaA9&?yykLT-hkau+m zTR`hSMW^jL8x(A2cP(0RHr56QR<2?e4`1S1g9r_sSFjngA7RU53A!9u!2Vrh`<8f7_Ks}$vwF;%=7p_qJ(+>m9T-0+ zkJOO?Y>!?oOl6_CJuaB-Y^Z{eMd3<*Fnc8{$NDbRhY%N{Cb|%Do05=e639Y7tFUln zDl`lISddpH?2e{mu!A=<2uX&4K_GhwlG&bZGw!=lfSe~(8FQg0q&uk@Xu zyCVm>nLF4@!aCYf=0n5ajcllm6ziI@kuuVhc@W-H*dqtcp2loctUac;lGaXpJS%ag z{oJwbI!_|K|HPQj=o3i$`R8ty&A%f2OoV{ZJ6SuE$M}{h!J{4r*~4k~(bUc!^M7At zmjdr1?UM}E=5}ne>@IYx9I;;8omJev3$tif%y}8i_Q>h;>%5Uz7|Xg2X@Z>QRV{YO zY_mx{%~8XkzMINs%4(3)Ee5XlNiX@K0uLX?!zdtyl_V5lAz_#&_a(8VS!(pRPKEW_ zc;>E?1x}idW1?u*pqWD1BAM8!9nSt9jzixiSJ%x<)D|=Y(8;at}C-~ z*ykb>TFUX!A{%4>o?wsj$ZPOSHcq;qV1>Ri98qRsa^QaEH9?9k8JTVN`Ty5-doS9s z4dq`jS!siyXXn{g?`HJ&7QwXqEHgRs1lrCLNGq~?u4a#R14)UnUAr06Q6`K^Fg&~r3 zNUXD&_SqCHX~;m7JdLeLiNoB&Oe9WEWS5Ra;>h+aSUE+rOhpK$CTBsTG?a}W8h~{T zSupzH&kQ^JpvRLe+?wyjHW_=s;(iu+$|+e;E%6oWvoLs}f(gja=0Z~zj*qctX&G{C z`H%(K0TJ8zlXO)hvJqh^VblN6tWuc*X-^R|jwdex`xHoUfgLz1Mb+W9c%8*cIs5tP zCDQuYKZ#|BKU#quu_XgavEr!#A@*2NyXG=4yxtBD3>&_ z-wre{%nwJ)vs2rBE_MGU5w6y@gTx-!)~zv%DlLFfSyHj z8RO?BVeW!N9FP^UJMl4C7Lkab={&3S3`ZbK1n-f}Hhc)eBmYE1Y)ECoct6x{AYY^& z@yw=-&NK4vxzQBCR0i(wmnWd{ZV)^A*9E<&Q8vt2Ul!ic2`8V$!=})kWzo5zlOB)a z+sP{IPqhu_xR~6=lQ&!6}J63h03|qp5@NiME%8sQd`YVEqfe*V~Uy1}R@~aGvW!EQF zAdLD%|4KExRauE@PJxGwRjdou8`;a0I1}@LnQGrgn71bm6h0?Ehg$AD^^JU z!#ydtqfYdSeQmvg=h~rIQU8MNokudj;o(?Y{geeJX5)rc1eBoNoBEo4T~US}?OZW5riFbKm0~R6Wn)%Q(?9(wR&!_`=F}=izr>()nn&uo9yTr0NA>Qt&&r_+k>QbA#~g`%6~U zDHc;pg3$ZSW9IpjvbT-}!D&Midv8XwEOj949#ymHw7>!VbbN67 z81eeXkjA>z8#bw-EPAvIPUb#XGAWn^43=VznGa@O3}h9wx67^C&bx;=da*Hnlrccu zsxERFdrZA-c>-mooUmoJG|!1mx5n#2dCuY+c4q z>AB(Y6*nX&6|mJiNaJ;4^_D3;gD(xv_B}TjrXKO2n3$R{^p0~aoKUj;3ev8wq_3GB&5{G-FsPpL z$;KD5fj^S*gYd!TpAXo2%}iWZP@a+S3!74vgMQbfaENW6|AG3mZ_nkBJnWc%H76J2 zlAUnoeW(19Qz5>qM9fo-{CxWad^+liO>^4kAGM4|n3*f`R{vy= zQ9qEL1);3kJ z%j8u#;Hd-p9xY@Vq?zgzA%j;&9-Asrz$St`P9LPR&Atu@B0T5aheY=CwG=+qlvC3h z!<-J;BbV}Pbo63azpca%+AGJQkC7~#dgWB&>g~T1!Qx1-uIjeYh=KCX9~qbW0mI4hp#HS*0Y!;wb(xs~aE zSVf0m?DTQK!jG-2<1Ih(iXpx8+Gh6aJL%=k?IAk(fSsdW?}V2vvMOqrt)mi~%Ej=m zC}o=oyL~fJgqO*T^|`IU-9j7OR%Nj!nh~9zCM5l13fp>{=B?vJSa~y!?Ilm1sY}R* zBs_|=hxW)J4T51rG~2Buh4Wf_Bo;@q{ksXrOSFgSoJcnHmOY%z+UAJu{w8MQx2K?K z31xYFJjMng39pGOD<8g_{iM5Hhx8Ovw;g1PggDH$qr8cDOBT^L7KhGRqs797ty4y$ z*2Efled3tjyeK61q8ygVgB`h#ki)?H9zH79Oe~Duwhl#d~Rr-}*bQ24X3P|Tw&w4*mLbuu)I??59*ehpjT_}Ke zbUr&g+zAf(0+<_Qvjf+Ne}38q4SQ2qa%VYut|ff)ZyY;LyuS&QRk7e>6bnBtMU+yE z<-H@Ai26R`Pt?2FM6&l!?STQd*gi3WO)#>jyO^|oI&_D|+e5!=Ti^IF{wg!7O2$z` zYiJp4X9tTCG3YF1Nt|5E>e?m1P(k@A&o;28opH!=v&LS#!z_^Wm`$|i&*w>4*uiLQ zJ4DZ-UjQ35APNaHtYL9ImwZtoQ2)pZ_2(Ly+ce55-E9SpppUGCc)y7qtHTsY*vQ^hxZ!VrHI5`!Fk62mPQRplsDgZ^4sb>?c}`yR z$zqG@9MMSGh|51HhPy7ig#i> z4hUsB3+*90P1ss+7#mqfS{bzjo*zQlEJJ%tp}fP4ePQfl0QJp(+VVwhJ|Abg%aZY7 z8R;NeSF*<|6QOgFG9wlkunMnu%yg&x!H$brLr?M|3$ezx-Wyn=R}9wrSz}??S+-+Q zG**ddufBI;r@u#{aSLUy=*6*%Pa?2%6lH~sD`kI&L|}O(t!MAYEG;!0ZkAT)v8aWu zQHG;%wH0aEezR|M-u_x_MRTHd`A-Xiamd^Xd!l}`2Mqz(S6~Hyo6p3L^}}FV+xx;- zY^&HCD|b>B#@i+qrr`-+58Ah)o2(sikTgr^x$ntmX*-nY)n0&-;hD^4voj(#QcmB` z1UAQsJXh`rQ1d;C4e3N&T=MyBPa1(au?{%rB}5tNPE`*vGgypxRXVLo^dwo6} z^X^)q^5zFtn;3@YHC7n^t(A=^4Tf678UZz*SR~aCA$r!>w!N8wdYzb4))*Xik2w(s z=?MKkCDKav^^*s7+@s8w?)l8*j2mpe(;dAmof(f*B55e)-Q0;~alJ{Sy@&EBKZmg{ zs~k~D+PyX6Al9Aua%+=pAes}v^rXb&svv)0KYw=lm<-!zP}bhc0Omzn>I1bBT)G#? zs^|`U8*T@MDv;H^wa2r1TUe5&W5_Y`tYdaCED2&MS@z_M-&UV;U9gg^nUsWQ%dJu4 zHiILStp*0*|c}m!_oWh z{O2%J-HgPsNNZS=c4I|l1isQfk9-hC^>zg1B9d;dQvur@K>A{OroW!lG0BN=bTzQX zvC&W2&C)RBan^7&d&MFNXKSLpnj8IsRkshsSx2gQh?WhUV&e0t5=8*t>@=(3&H_s*yoVe!~e{PY6&@=)?4TIARm! z^zEPJ#ZCtif1s9f;$C>NigV=6uO)(+kvFR#zm~Oul;c?7%W^5Fl%24J|FZx#$%eA> zsOG4h7Qj~Zl47sa4pkX}tkuaLT_yI2_6lTiwe~b~Z+kv#R?lblUWwR1cbVeKKz6Vy z9#uA!=XkLTn?W8LT}i*z>rW?U_fIVJO0B`q)MO_fM?*@wp<4Mw_Pitt|I%K%z^`Jz z)RBm+qMGD_C7bo%I%m<@V(iVX_m3dY6>H4tn96n$pD0C1IffsLnckIfsOVhUWqybG z{0+kndZy!)_n1mI1d?)VMCjgSenx>9)rt1u-zrw&?S}?4%Bk5{!2BM1qs~nLD`V2_ z5)fJ|dwmJr~A$*TnzJI{?RwxVpcO9H5wGn-zez?$wh@I2tm z1Ohqvzf!*8HYGcE+5z%2B4pflXP1aGUZg9*Xl)!VBzfLvAA<~9D4PgGHy$*?JyUyb*Connr5@b<5?4jz&eAmW9KsAPH z-An#zb1Y0#>3r6G!aqol!NWRhOnd&BzZ)8jrgx+n3GdBjMMNQhGTQKH8XJ}tiG2FF z)n^yGR}(?m5!N`oT*hj~Mj+*hHEihas8@$$`cry#$8%VmPdMg&qvzXH%AT2q;|F>+dxWT(E-9cN75F@5}*Y=aaQ zj5J;0f#h*&kIXw%|B=Vq%PvwZ`qOruwJiIw?H7obx7r%r)Q|bj<ZJA^p+>)PhjI83sBUUBa%$P3!cnOBl_c+V^w zY^xUW!ngnVLfOFf%VoZ-ryGL8gm`3qhL0it^=Es?Q&)1HA4R_Gy@)&gwUdaiBwl^! z2hzx_a_5&2hxBqe<$83B=f}ZqspE1#;nyO4Hcp$Kbc)~m~glb*3fgn4mK)i24% zW_&W`v|9Aw7v3e`0!s-pCG+@m_2k33#TM%PQ@q;A7Qu_j>p)A%x5g7LGK=o-FVXxY z(rSE~EQQ)t&6hkP9wu?Px%4W&a5wcdgB@^W)FVEzTm;MRas)*-^KXWU@TFOfxx-%a z+c_a*q2xc`dXLvwWdl7>{_);wUbaJk>f4Th2W36b`?~M46O7#|_^@az9ME^hfx27# zhuznZ+usE4KfZn)ofP7C7`uiKl{x{J;5Ez}bV78j35s+Z8_h5rv>(< zIKlswjL)BV1^thakI)(gU+i@WJiU9PPrC4#k1jw>GulZzJ@{UO&Lioo5&;5VUb*Tl zMm%!G`dvZ%UfF46lvD2YWAgCdW`V{dZP$5V^LTYciwio&QxEvdYkYg*I1y1_>up=pKo#}kvq_x^bOW9-&Kl_(>!q2M1a#7 z9k_s655$lL*-vjU_j;x$<~i6P_Wfk8(>_n!BHw@qljn0w$xrS()%Lnu47su`o)~W~ zq8@$~r!&G6Z~BVKqh~D_pXh;qvq|&vX%#oO#T{M;sOGoO=d?+?V>HwjA&x`1yJwZ) ziDPy*`yP7J`TQcw4u5-*m&!Q>z3YUJ?Wr~>oali5m&h}A_h41${^aewRR+oAG3uT3 z?Vv{(@!rcK^)DsmXbqIZbWg0>aJ(2@-^tO{u1MYEn-B`}R6mqmspcuaTJxeKekpIL z&s&pTWE8z`_fyo_BW*A!%L(&4_^A`fN8#U<#9{j;ReO`>wd}Do>^lk7VT1v!le%Ee zdXah+)xy7MM&8d>rnVSih0|SK;dwJht=waYgKygA)HMIr;@p;cp%e9VMylCdz6s&D z`T~pyS;JYs^v0)p0gid^;nJ4+!2c|9Jj~6xx2Jq?{vW~t23+M{T=2oKDEhsvZMd1+ zeGo!%jk$Wn_wCT2-OFDTei%E-7Ea40WdgI;{Y`lScKH6!o;H z*G_l9hA6_vWHT|~j19*-j;G9WEsQ85?geSs zBrLDmn7CIVG_Su~nwMoELeGDlXznv5uXBSC4z#!bv|q1(dYusV-gJiF9bynpHIB|) z7a-?^!3h)c>$>BDpBEGchN*;IS&{dz;&X0yGs>|%+;*L{7w_PDU-HFiZ|XsQU*_hY z@I%uy@*-Gn%jLB5C+}DR&UAO=TsHWVuMcGowzzV0C=(#?J!RSK^x`Vb{oyDU;=om3 zPE6d-X1bHUZ}#U3zW8BMx(LPh{J9;LG@COOWA!aRy3Tx2M0Lo`IB)L96Cdn!l_2P( zE4Rtr8)wPqMCotOwK7jQeX+&VDHpgd;ojY~liDyVCQr$C&teTm$)vaKvBL z-9MbuY9T*|u` zgM)%Nm(fA+P9~3t(g@D{a1cf>wn3P2EZ0hWqDk~z8+Imetp|dzd$$l(Gm^NWk%TCUK+k0+B5d;m4FDZqmd+^c*3^;E4&G#~#WM$P#0nIEFh!bE>i}5?p^2#&sFw zheWy``_}q#RabqWj3pk_0VU_A^n!4o9W)Qxa*h@rI5x%}{ePe5;3XRD>>s_$^pAZXZYTQobg!&l2<$6#HgvWyk|8UuaR~;Co#P-}STp`tX0^;iZ|M{G{Bb?Ly6O7Sv>QlZYaPsO9 zxDTKnAuOHyvpN*-`~|pqIESl}gktD~|2U;8&RH6Y4|Lzu`10I}U7?h}D5NY5#vSPr z3i~1N9_~k(3+av)aUC25c)q{wI*$-$akHuC-A}!C=qkqf5QaIG z^#13Zi#UN@1fEL;(3xDy*(OIo(9;HGN6I;IXat%RHpseE!L8dLfnqK4+&EUjxweL* zFX4(ItIN5mo5Eo;Muh%jO1bZLVW>?Ip+|EOXXX%!{KaBS2+!v}?FvD2y%^?ZdEBXv z!KgYf!H2;aT+!7)s0Z2NzD6QvQt3}Pm@RghMsix63EwzH8pt_8oaRbz%$#ZuYb$SV z;YJVWw%TLha91wj6y5p6W#OkNxCL>}SY#(dk1{*%Pd`UwZ6JO3Xc0F)j(D~s_@f*t z8RVTE?#g9&%TP;uduI<9uI#iucti4U>g2>_owr4&Zj|k4r{ER_)4Z$95j`);x$7T< z$aiqU(o6?#pP3DAu5yN8o&%RiSlT!8vs<;yo*PRw+AsgM`GdKVO3rL>9P%#FjMcM- zOR9}S4qh~qD!Wq8Ju-@gWvUPZwd=T;4KWbR5`phi%}M4)V@s9@pG+&c8DAnvCoU$e zpp-l98i6a-lx3`4#7!6!4!t81`1fU8d*V>MrR?nILAji%25|@S$di3bCbuok53{b= z!F)j~S7_ypfi&kR+mgt=JL!Qas=4EfV!2FPSGX5QVeKBpbu4#AJnij%RpFePION)N zZrhv=<&M@m(9Dgrf+vEx40kCUtL5;>3FNdb?I@2(0o{!O+($9_UT=1Ujh;Ve952F8 z(i!?M^W*xq*kFFW6U-I9+$O@k-g-Dw=87jL*=&RODQ(x;yz(~ZuSi7AX>06$P{;ji zl7xl_gl+C<;KV*j@L5H*ep4f7>6b*FD#WF+YvTItO2QcO=5o2*#Ep8Dh-g&*$D11!FDc$p-CHbI;cY0OYmh zIX0Km*6@YdZ9B+&WpSGKJ#m(}Qqhysxx=LK5>rj`M4G}49;}3LAmJp-lQ<3PxnB^M zX#Lp)?iJw-R^ARUc@f7ANTYw>CWpc$mK$kLc>Z7o1|5&#G%d+Hh`b}3PDFFd6r@EX zABHi?C~iqM^=F&O``}I_mq7ho`+?+*ur8GIerJOz=55zGbXFDDrFSas9VMTllQmpR z1?8F%hWu!M9d~AM8novMaMJA#_oz=A2KovxYJ5GHRG5l0?QPI+LOqvF{Q4e;ZLlx! z4(I8Zf>f$QzPQ(MNKS_SA|bST*K!XMl5jXih^hZnb0>&z`(lI$HomvG&ubH~+(U%@ zMHO5l&0$~m6GNx6lLB)1A?K zlMD?3>D-oSlwV32M!EWF-2O@j9ImEXuxl#$kVwh5Opf;7lDT1L>>wkLq>3)d+yrw8 z#`Si@d#bPe?f&y#bwthiM9w(N2HyXjCqa?iBgzsSBxzgM2?rEYexM45A=H;1E9D0D zP~!s4D`!3|UwGyG@*K#f;fHZ@2f7lH#=Pv7I;ZK1WGhUT)sUaDZXGi%>W+mK>4(T}Ff$q4= zH@KhcQ<36t3(b^5?u<<$maMbG$(90c{+w92b+<>=)O_xJk4Qw{AYR`wo{JtB3b90r zgNZ7xWe44xMlw9=n8!`J?~94#XOe$1hjXMXrr1&k9Qu^Sf}G=N!-0NLJX-;V#&c!?(7;7EcUd;H&*$^bJh>bq3A$)n$r@w z^-s$&rLzs9mnCskTsa)N3-Ld$&N3j&Z14JFcYxiE-L0^;fiVWyiiKcfjD>=zba!`m z2@(cz@2!H3jomq8ccH%PJfDX5d^voWk#XPGy{~_)^;`2g9uzeOpM_BqvPMe}ivRh2 zy7Ae2IyP6-(mRFX)=n6@FITLyD#PXW&N%FxD^>@cK%36YvYEqwCiEB#Sof~Ic~E4! zNYv}*hVqsNMc#%IwB{`CT!$QyzNnD@410=h*<$w60tEH)MD-R2#LLY&@E%Bi;+IUJ zTatmq5#)%S&k$?orXZg>)qAn&!f!wVG?RR>!7@#3pAm!d>3r8OP8De>5%^4vkl~~h zVWA%i17qfp>LrWr^~gu(Ib=;v5_4<%BV;|ZidQ6xYkkR9+!~DTE(zko9&#b9$oJR8 zi(Bv9aNdqN7q#O>sj~~cDdbx&juVIVoG>^r9O_7{Xw%dIx1%DU-UW-~S$PZHk<9*R>j0gJK4RRJGg!`N z^^2CT7&h)SX7+Ky#w=fvwf`jQ3~|O<_zAb3)PvQL} z6q^n+XLGcNcpM#sRPM`*%Th%Dw;gXB{%@Ud$8O6EC1yGdm2ZyFk3PET=Ei9@E_yiUPy)Na*2!=kphf+E30Revl(` zw3i5%zs}(HSSMH-E)y4gPNB;bGUleO5W6KaJLXV#)On@o_uvGYaZfzxh^c7v=@>?H zk9PW#nHc(;9=^Zbu_t+zn0KQXcR43DsaPexq#lO$3{MpoiNyKten{N4T-;tt z9pk@#Sl4Hn7*sbHL78NOJXs>vkr8r{HTTn0W6|o15AHH=_ki_c(UttV$L|86wS1Ad zM_p)jW}E8IS}5+ea>YE>G)6NQh#J&x{M$DKCynQeNCyYpAT#~VyxC%m1=*SLRnIy9 zTmw=2+(jI!Z;OQ72BL%eMfkTQzj19tF*oM|R&}#S^o>ShoK-oV4{|{DD^0|dTIcaj z-;u0TZLx68SuC5$yyL^oMdS3-Xvlit?$TD`)18yJvB3rL-`WW4>Sge^bjA2h?ZuW( zC-B|b4JSi8ippWfkQ&JPbx3Cs{*pPx-0KH*?jq(!9Kj(Y@^K=&2)QB;of^tkLhi^qZ^S2d7Di)|5W#2L;BqIijhdyXEb6+RcNA@gao)n2o6V;V z;!r>s+C1}xOSKN7LQ1G`ihHeeT+pniMa&f`kThXv?dlEeZ>D6kK1icZZ z7?;dG;zT;y%s38p*d0IGF=K(gz0HYaL~G|_d;@w0Ik&IqnvX(i`P0ZLGt()+s3c|t za850M=99fmT_5|k6K46CGcyTon)=Wam4`tsNEqG^YYh=G_;@XfXli;c+)9~oL$bNysF;M-m52-M8{mg zn5MQ+7G@>Ar(Qup7dxEazN%!#+{@4##u-ru!;)EA^hr%|z}#kiN*Zpz0N*8!7`gaU z@#muRXvrk7K3>8rD7?C1r#RECICX=62lstLuE$EGAk9N_=TK`I19{!h+_Wp^3{?fk> zpwj~{EW7Taf7~MtD;>S@2JZTYekEcSIjU=OJoF=FEGnfBx>$SapSi&NrNzEDdeKwA zxO*6VvFugKJ@s21;d{`=59{4M^-r??`q`BEk}W;;XSn#FX|zA`EIstI4|`&C-vDHm zxa-^NxFb4002^Pr>0b+Qfr)+~YSwbo?>?IONTq@BY2vCs_m@3ZQe!;7|1SMHH5|!P zt$NM@+YW0!x4i}}9a~HpTcSxWx{CRn7d2?9(bO!uf)dui^DT-r^_N`6k2wxFx&DyG zvhX7Au4m5Xfo#o>_vM&m>x7?oQZ)S7#bXQALVS(!)HYre3@5A^p&Udd`r(&|L)=gi1|rK#pw?^u{!^1&Xb6`Jbf zBJpAaSr2WNX&wiJ!b!^y3+gS=oa!Hh@IXI!{!+Dh65oW#0siIWz45@(iiYx2NAeXy$bMZ| zUq)=q#Xr-@fzqujU$)CaN4^I)>eZHq2c#l_xel2=HRYC=1jGm*v~E{JURWQ4yZ3xh zT%jdz+fkcu>5JAS)nxW#=4@;Gp=Zb+&2tCNms9-k{p&By!xerwLp`*ff2AgBvo|bR z18*|@si{c!fYCC(AD92oJg5G4^UDD0AHHjfqn+`Fe(Lt8ziCQmIpRfi=A-xjrn%GJ z9$T2H;P&u`=Hn=4L{F=F&QF`!$#ea0Agr}5K6^XJ*z?z^`Lx5Q&WLfkUv!!Im)uB=$FOe9L}@-v>X4b&zL1)*22*8Y`q3X6`Qv1tDYDx& zFJwOPN6@Cp@^w4v%q;@oSZ*K--Cc2;`kMvQ45W2uXZl9@4Bwh0lPessuWJzX(352M zbUQT8;(gS0vdrUN;MRt!=UkwZCCy52!kl`)Q@S~F!n&JSH_8qVALdADa0AW@?6I>+ zjvSayuINrOpSm89>x!?!DS)$xRT*-h?`34{FF=V-DO|SQ3r9~ z^!&P;+^Q9he%v?hY~m(gaz_w1f_KGwSNWZLnX?!Duxv#j8pM&BR^cLqC41J2cM zUJim9<|1ovu!qV2_a2PgdRv}ceH-X#i;24TWoDz>=&euYbIk`bn)l^{ zJ~wc~#sS?^@5t4yD-h3FVcGbbGMRUH>l2*w)W0T|^|*xSC(d|1;-Y-8v>bLdTv5I9 zjLh3~7L}dcVC7dT3)h^&zR|4v?@77D_c(S8^1#b!#qzHQMdxAYzIkqAV)?ukHY?j zzS!F(Tb^1NhVz_3k6Cj-?syo4fEi@#U(AwMQ&=1Q!wiE(Su&Ho^#pr=-g}wy>Qztd zXcvIi*_pB}HAqL8{WNx0rqrR9r_W^aon~apcScTla3c`A24u?hIu3ZxUUF^QOc_o6 z)VA+rL{8zK$=ItG)m9vD~fST6Wph~Cvb@v+4N*)Ei| zS_$h{J5R66MV7JXwZ{kMPb=h- zeUV7$LY``;3c2l4C}xpcc-{G$T(d3+OV;?|gU&U1V+=EC*>ATmzAE33XQoUnxi@>S z%GPyefMvb3wNafjHIcs!Zn`F_-!5PkLOH&ClACOA&+_ z{jSQ$OzHu<(l5FFnyh!y4m)pGJ?HJ6JE$6(dw9p4;LD6o>f4TcIL7b5w}G8i-(Gi- z#M;^1xRZJ}{5I}#ww7+)L8YF&f&3Ek-%qqv4L)CEkLv`Fg{@S;#miVx*9Bi!=qSI< z7jU3ASrs}>)SrLO;?orR?vB(~$N4-jGoxN@dmYuT`Y~io=Kk(YO|`9AA*MCr&hATf zb*~@~1!q{ByK1TKH4c!mK!&(;HP!u5D((&U#_O;@a?TiL20dk;;`&=Y{u+Z7+$$Z^ z{E}Z9M55amUtH+>OIB_O#pnCJxTY$lZG#{*wfDm?%Sx$v${w*B_odS-V?GvoTvWK|M)2NdDsJl7_uKU7_Hu4 zyN8XOAvf$hN);5}!7A1(tIiEqZ(H5M0eWiUjfbe4zbn`SIblML0jh)B6*O+^f}YiT ztG5*wP(;s+ZfZC6kc>gIrPLdlbySNDPobfuJ7P|^Re^mKJgAA$G-|E#%r=rKfnur4{EN?EKlWr!5dd1bd>$61p3jv5j;#s9rq*aKGg>y zue6n2Hgi?zw_0ATt?IX;ZjgI%zgTVMR2+!v%zPacsI43$=*OJs&-`3%bt{welE?lS z5v{Gdz2ZL0hBZsq$lOOar z2s8WXsMVuwv2<53^seZrpviVv+^_06ZyjT(4h?^VjNW8`yUbDFe?El8d^=?Ro}+#_ zKfq`^>h|2ote8aJ8g~izTxY3fD{mwI7Fkup{!;(`xDK0|WL6)aq>=|;#ksyNXyB`_ zrVO}c@>yPrckeWc&o4N!X(L%7qT+I3YuOt5?4=@hgQruv;(Hv}P*4m~c_1$#=e}tK6r?VAlyB z+(^__A?6Xd$r*dFpRSr&5rVdD{gCRbt8{DvVMQ%Sw`g6JzmgidRjip0>8d(AsRgSQ zfcTrb>Omgo&j|q-TD_ObYww1U;{(YD?4`n~b*y$L5J@Y0sloF(Bia#!`ax8FcCzQL zicI5kz0{kUwpbJ!jN-e!l+|$hw`Ny8=f{)Rs~SHa!>b?XqTe>E0jD2hG520x3pS~? zdXLc9owMaF=BoVkeOMiJK)cknDnIrPLS8uH@pw~}_u>XTnmgmR+Y*&<>MD-ux!^ld$(suLLr--lePtJ&iM}OXxF4dY3er=MO&!shDSFC`9_8|WKI~QXRNHUSsLq;s zK{Gv7(IEoa?!H*xPERFLZ_$@EM#Ts{)o4T@4&U`d$O=96Z)-pJvcIX(0YF(pNbvsqx^QJUCci^=#~jr6EBmx~H$Yl6AD2 z`mKPTP)&-Ni&7R0!=zE_5BF9JR#iP`^UXGDynO}cvaYiTvZIH+g4z+X1z+2#Zj;E3 zS!fT3+IA|o;}saPu6xp5J74`yISLQfsSWGTRf((fG3-yk*S0gp)a1=&rxIY?h zq~f}Tqx&{r@^X#Tpz>gpck#oHC?oZrnRia*eyH=0k$S{;qwj9k7<#kS@jBkNf z;MwXM_58MEX9a(mt-`8N*R(DW_6z5z4&<4%tRIB0hv%sMd+CEr4MKdIxvJF~du$@_ zVCU|+%4IDziH|wE?l@Jok6?}j=h*+fpQk#ys@)CAiQ>G@tdWPR{?}UKMb42I!PO8%liE-3XReZKn(WYb(&2mO`oxRGG z{?@DWT(GHRyBg7ub=qQA%=OfBuez12By?9yGP9v_Op5O>xa zX3JEVYbe%ItGeOnGPQ{{>|ox{Ufq|gTYT45(ldKHe7W-Jo=QIeV_Rx)4-|hx9M3n&YP?)h)tFdSte1Q`0_? ztU>C#tPK5BIoTI~y`<)BmXC_sbqLL#IiS-3`o53m!JK^E+f7{6r(pIJ*PU=E}}(xB(Vo%KO)73!UWo1AqB19vs3I1!Uf$VK_;s8TcH zaCtIyiNZ$R@r_1}{_G7CcdF{ksmIfC#l^CXs_|^{A%41IPy8BnZ9xQ%Jat3BdsFpp zZ8-fz^hv%qQ6_uB=;QW)ZetS_;1P;0>=OsQT%k6SGckdC|Cv)w)NhMmgjso`_#YG1 zt|$=NvwYxrXr($yopNz|U!=sCD(nB{f4%UfcEU^2 zywm6Tt34J8ILyqNuS{UO8L^I!#`_}r~)qBp~FK>3i*2WvuR5B6|PvJgmznRK3iGT^23*l2%s8WY; znEiIc=W9z7Pj?NQUtUHO&7!ZpKz`%7oF=41@kbC>XswVm2?EgDP4IH6S!D-}yN zQKgnMHbrewHcg|Dea0DPzH8KEy+|D5JonOp6{>P;1iH|RzNY#TH8m|9HvQc2q01uG z{2}*E-`!9nZ~=4b!*J^aJs3act6YS_#oGgm>Mu~k*M{KqB2QfMUZDQ){j<2E7Yddy zR85S6fO}prShh$R_hr6BxHl&4TC8T&3qYMk%n^t%R()TQ!KlqFOtnM}x#o-0)YDA3 zvs5)HM3M@;pb3$=s>lW<+7~ zCMVopXs*`3kHk1#-gm4C^En?5c;t+FotCIU?h&XH&0R&~1?t(2aMWGuioK`is7_tO zQPJ8B5l@U%@+xYxukvoGZKPVqgkr2WbIYC?s=uyfZ8oh z)K+rl&&{f;=QlfVtNe|aksU`*_ckY0@FR{pUR(57S@R!>t&^}}$^#|f7EQ9}IlpZ8uk~8_!+t1s@DuyjZ`0uUa`Vlk_O_nC{!Fpn9>WZ)Ar(_w7_M^_-ob zQ44*}MwL8`#zt#uC~fwrmNTOpAepn>saK{ct$7j1;vC!fg@KaC$&%+BXQTNbH>LL^HH0&s_snp&Fg8%x?YIM}<%xPhlhs7(%j^1k;{N$5>Q_8_7wZ3w3&?D= z3c!5o(yN{SOAUSDkEjovAI_Vnf|;>XzpgLbQpj^Cqu#%bFXq2ntom|xSP@iJFZwEP zlUi4kJQf=p%&**~((cAUr-m(3L#fT8_E_3{yE=9=3T09DD71JoF?h3BRwK;-_99M?qk&x@`}Qm zxM0QC(aNP-IIf1ez?5^Cw$u!mbaBO2z0qpQfl!Q3A_FvMw92RqL3A%Z^Lxjr+{qz0 zN>Abs`?1Q(JD9nX+?QpHQ{^|Pk%@PQixe_(_D?YFAnm}scEw%k{4Q*}+E@%^MNZfx1ArZuOAP|pr}rkj_H+i zxd*dBn+O$c6iHtc>+qIiRDNXy22gv`_QY`2EFc24(y05nGeqrd9f6^|+k3Ygtl~U) zpTs(2^7ujO+{ZAipo z>GU+w$M|#fP_;CYGl>agS*{@ zzB3R_se8PV2Sr*e@;>wDF$U_WLjX?DhZztuN3A@<>>; zzd1rRi-|Tp3QYzDa?{e!OZYZ8h) zH)>6*^;VD8h2X^_7Z`T$qg+n}BX%^;|6pHry@;GfdSN054^Xap!5IGC6|u%+RP^0I zw7l+)H48_nq?SRroI`#@>+vd8ClK#@RDI6>d(N}94Ah{YNc5aZCPtsx>crtl7)LNm zcj!Vz=O}hj3q8PUvC7p%VwU8uI$j84zn>NfT?6jQ z_s>!%nMwYDEX~j_lhw_lNLXl5*R)Yj89$3eBzFh%rw>#0w4zXWfpgceeyaBGNQ@ro zfZ;wp)%sify%F?kwd$&Bg)mR)H(3ooI;t~cBC&g^Bewi%ulCb_IJdwN7oW9L4JSt6 zdjq~(?c1rw2YI(FbAnw;I~CuWnN8_VST?x5T5Ls47PY2rt94L=ZiS+SzB5k$?4XjE zjZSSaHN=`asws}{T=@NqFlUy)ALsz+8V!m@t*DB9>Esp^zrd2S$(%V>P z(ipYmULgAM{D&8hQMWPzQ9iV4F5b3D!P;>37cRIkDJ_)tEduH>zKove<`=Vx?<{;pjUl!0|5 z4tA!8#cZrpjxoK0i zYfA*CPUY;fZBw=9PB^AHIHH4FQ?+Ii8JtCq2p7$ids-NNzIVj+9@;9d8Ef+HoP+hy zQP1{-;^llNIL5S4&GbUqUpm74R7bToIt0gg{vV7wD&H|7Fri=i%8#C^AD{ou+|Awk zF;e~34#JV0^u25us#fmeKK55tAN`kg-PKk@^6>hQ^U!OEDo6-NEwXnsvq!6Q&%(LK zu)z}Baq4of2w0G(@uP*FD(By2E4dJ5cgCvx!U$w=M=)>PXw{0lj76rlc+-2h+DQ%J z?O0nfqX#JebCK|QZi|vOJygLg)_BA0AlJ56$8w_3(#{SqTC`ABFQPDqECQRUO_bmJ zD12?nJeTM7)$fb!AC2viccPB!;2DL9^oKa7*HUfzN1?-Idvx7EpZg)+|Fs-&|4I#Y ziJ$xZp$_PEtcL2J6oHgw4rtk&`x>1HSlTo1FSDkaus?N78r!!@gO;u)g2*#H=!Zx*wS|`X!pg;Y; z_j!0}Z}oXcFe#P$@Hq@Oq%JY^Fh7H*dvsztMxU(-bmzXU(tf#t3 z&F_ATefVCYs|?t;?(MPG49g8^esIdwXEo@~K=rJPhkx_aLb0WBIdv7*6!s zgStZ=$(3J25mju3QDYv-_oqW4rdeUfyGOEfXegSWx5V+TPh`ltP-b^q;=$8fQu>9W z`y~2;10Tv`=G-k7*i?DWN7#OoVa-Ef#(j2P^)_l{qfk`v{Iz|WDa+X*u#R(LZc#U7 zUpoZ*y{dA1%FdO^wdY*Wg50gPPoKy~hn?Z|buXHC{whOUov|(78s%53skII1;j`L< zB=Z`oHGNKZR$C#wZB6x(>>#tnmRLWxhAK|t>}CFL3>c`TR&thnaLF#52>&4sV!fc1 zW`XmA-^hh2oXu~xK-vELa%-+1rrTK{E#{IOWgUQr`4&hxR4PaR%ell$3qY$#&ZrE+ znkLNDHqDd&6!M;IxeHlwS+e6u_9H(mm}j3R>+cPLYL;v`n}w??8nF9;V6R)DV5n zwub5bY>7a37?-z; zswKWvCP|0Q^fivQM33E(GMBTl=v|grW? z^UqkJzQry%>T(E@I`6@yw2jiEZzyig+k>tHS4o#?p=fNn2W6$p)UY^&->nlaFkf5rQlAY^yxyV-J?f24_PM^}rslTeVakJpYwE z|Noxzm#(Fn*5p#GE!mGw6B^684qg~EdOx=9>?_BRgV-i`AMCUt+rIZi+c$f0hpy%hdRyub**9YZl3&p* zS<-MEpW9B>Xm?wgKw_c{BKm{eb;_9KVt#(w-gs=B=1ISen_lDX9Di{{g#P&^-MgUwd|YUWde z|9pfEZW%w+)aM;*-rWW-Qf_IoxX&8?b3gTM6`EXr$6a0aW66gPnrah6u=mq`YCYd+ z%BzJ?r@tT0o3vz)@%&!&vc=Q0)#Rx5A=ur48oA&#(rSGOK64kFx5itpu%%a;xw@`# z%~e+u=KFEB@ZWO|Umc;pda^%e)utczf_q8qbzhvl&i@AO{+dIrc|SYs$GYVfnvmN* z*xPGAj{OeMe6Qt;{LA~0cP&Zd??e`hH?zX!L5;?UTD1-PaOVRdt@;3N$J3|38l0 zcDKgRr53xiHyKk6F6ldPM%$AA?qJ&>{jd815CwA8G7R;D76jt-8XH_rtD)bP8WlHk zC*q%a>vcWIN`we={04a%dPF+H%i6J$u~L3E}8jYKJL5_vlTj z76C5{vJpZW=r39nfe7}M>&IH@@0b#S)rAfysHXHM-VH~&o+GmM)WXIgoQEViLN4nA zEDyu@&yI*no52}bC`#x9El${gx4h5iv)>sTV+#}4U})$^xKKI=dwHG@*U$sK)p|e*o?oz9{^3iCFpBs!Z^h?;8=-|hyVAQVRj2ACk(DxpU3!MEXzPh1t zkinRmT=jn5Jbs$UZ5)P8b9rue2Z+}5LQu+DZpXlOV*bEj0gr>H%D z_6J6Tsq=kKj;nfwqA@{8X-vLT*&P`AlMQZQi!Y1HQ7|+Zqx@|7eU^Bm&6@K&xo3-V z(4rfA;eB?Py(SL6v%;`}J>!tj0G!$tj)9Mk<=pJT%akn1BnaJ~Dk+>AeZ0_mK z(A!T=v$YeBP_wmaY9ww=;Y|BcBI4L5PW$T2JoO@SL&9P0?t+Y?SJ5Lr3});v#&3BE z6V}FIoW(!i@dqDf@~#MV#r4;9#P{yO_?Sf=UEB|Jp4NJ-Od`GK3gs4G2$A(kJb5I9({F)sP!%cjo5?3s*kuse_1!yqTf?H3)}6?5PN5j zlT%uV>O5Q1A_ue|Ur(4jMv(pP2uIsWB(TTX#~r$()hl!v9)(Y3&L~*=9AZxtYO+Um zz5D?)T11g^;ELW!wM1XtNIa8doP{?R5nsYFn7&ub>fJ?ZQW$y09*8g-BHr>{`SQ32 zLW}i<&#Pd}`B%9@| zC%*I;Bm9;HVcbPe*7F0!9jhSRCHLUu--Co5Gp{G|=PNP&1gD#bcdRW@LeH}#2#^Ja?jY8Jt{h|%I z8OM*?Az}7zQM54(Ww3`|?X9AfC+q(!_SjprPTY7OhL4U8c>8^sXcQ2RUyB^!`qEIy zH4)6Sa$>F<#ACxqj52Y?gr0-Mqux>Q^>abj-rdEhGg0_{k8Hj{odmu`!FISi9uLqJ zj_f6$&^MIVWTd#xbKdCgiPrwpMERL;Jc(o;e6yvZ&ipVWhI-@UfsMk6yMVNfK6u*Q zN=#lzW=?fqYD#UzO6tV(r%}ITzgvVl@qDa((f#`#F^zk_zRZpt?)0}f+dc?q>DT^I zu~qCl5r{kd+1F%^*v9!rgCO!WpRW;dtVQSf`C`O`g<>psg)Q{%@vl9;!*Pi zduqLOF*r09Yu4N1U6VwSbs-upE6MM@6D=~?7cX+K!=#Pj;vRdw5%uk19~&$>C9*dU zvd6xK0pctf4m*bMyFSrZ#59e->E{mcJnJcX4~T#k^?2*cU4*_z1YRC;LS|E2(Yj|O zy*ti0et)z0aW@kE8o1&{r)8qW{wNr(a)YtuY!P!M3b$@DFRh`G=olY`q-FG|8X1cp z+!yqF#64{PjbcD*1bjC5V9rJxp<#br`ra2AW^Uri@le!Q&Ut&0pKur!f)tkkEXfNI zt>c66ae5${XhjI{eH7^xh>XT7(` zAREfYjO>$ON3mjQ5cTH4c=b~GFM4{x}8nKRk+aIH=<{->lcTzMMl7{;Y$?xrW zOq5$B;}zdo*Y6jL5^6F-E|W9a|ETC_5|8l^N8?>hC#{Q^#T{zJed>AP-M@aK<(eqmc}wkLcCe_Q5eb{le%KunBg%>+uulfy z*0OZbH#rv>S8}hDUo0Hw2Xe2= z`IO~RF*(N{2l;uw&^ai^{!PvP0Op1N$rkshF@I4Mfw8S)#5Zbh7l%h;#g{NKfZm8( zlcI2Sp^cc%zAtcaJkoi8zGDu+W$ve+teh{BulT@NH?hj|d|~@((RgYmQpiL)KB`nC z8>YcU*rCG(CC1!N#_X|VoR*b{Kc^BgkgWApb&AAWa$~+VqHZ$ihzRvz_WLJC)(D40 zm}x97y>P;~=zI}oAA_&onQ1*KSM;fj#trWH=2~Ql*XN>9=b#(b`6r9&r=l@z5jhw$ z^&_s9R3RPZt^73-lPrJ^qz^(fl|W1vNsE zwm~CK^G-J6t}%XOsW9Zs`FnBN%fkbwZpdFF*q_s9QHw;&%UB z^mpRi%)LZd4`AL)oIN^^E)u#?nYfcp-qD{U;{9qeT{-)$bN!I;uuerRc{>-f@`c6Y zWNa*VhVPWCc`7dZ-Z?7`pVtq z&lu6#@O zL5+9mqGQ)oH0qLyn9C_5p<@!(WToJ0<3tfVE*}2Ol6f9{=*nM)YF6;OLQvIs=yqZDuHB&rU+ms0AV=kTpdqvo0`I1P}JY zetxDaW2cBke>}*fNkrtn7D7{ldz+6{&w1ETZ&4$)3~kt#O>XZc?xY>VoX6B`(0kr$ zi3VDO9kBGgySTEq2;H_hB6)_J=<@jp>SWME{zg;UfZZJxhOoa%f6>W3XBv|lRBZ%8CB zbRZkfSWKy2f{SV7s2eX7{q`5);CClXiJmKV>odP~8hx)Wx>r6U3j}x#(-)hm4Ptgn!#yEa(-8l&BqR^crI8+f)Qhj>q4Rs*999d>$t-56il`@Lm!} zZD0z{Z>ui$xG928Yj;J@p6QA~FFe|sNcr%fiO8)7XYf?|-Iy+;cX&U~FuP=^Nl56^hpT$4* z#iLm6g&dQS%#70)oA^%qr|LP6jY@;Z^)qO~KKetOOr$+4!^@ubX!0=~b@P~w8%qrU zk`eodIpJi@y&D;g=+qL7iEu^|edg!mim;Az|8rf*cYb*kUmv*Ppk^ZuL>|E_vQ-TB84p{B;`GA9m|dTqGP54&z?|+yzd>|6T38I8a1k$E*T7VUfLVdj}sq&|r!2ZUJcGTy0wGb6-tJZABo*6K(K zqMZ%k_$`td^l8|XF&#@sgkf>B3>ZF}i)(?*dTL1C*3D()viOrzl}U!cdKi#bx49q_ z`)lpQv;!W9w8+F0@<2n2St~uvz=jkj)cWBB2dxY=TjIgprvoY;^SiUp7r$5whlix% z&))jDN#>c>>a;4)^Wm3s^bhIMKa$3Mf#p{HNh6u<#aeFZ?p6Ag+NJ2m-Pr`wf%*}< zkKyMWCoJreuGejDMp@`>yrZL`G$ife?qpEj={jrlsNKodnF-+CihMlf)TjG74`r*IfJ) zi+%M{F}t+B#;qweB!|*4diSrAIa9(gsZj>B<~}URPon<3RwgW*RLQSF{`kUL>c+*W zlEcrv@%(NkdYV*_6;MeAJ(RQBm=VMjRx&HGV8m-Oe@g|ouA_H@cvGr-h8qyc{{%_62 zb!7-)?>xAhou=`dx?C9NGHXL;nKe(S> zy`Y)=g2Nb7HyYcQHIl7==F&?Ni=ET!$$>@((D+C^+Rm&c^<)~Zu%uXNdhT&+uV}PJ z`$O9<6G10WYFd5pMw{|Xtjj3We7V8*_Qg#2Oh2IUe??}aS0-vbj?<*{rKY<HMk?Q+*@JNwbjl-bZl4CkEdxZ;{3od3bXs4j#Sm{JnL-WEz*lJqX#ba-u{aFdKBuGqx{0!adi-w3 zGH_HJ*2rErvOx zNnbwy{;gzjlmmK%W}t^xQ~7a_9Zc_}Bl&F$*_Y>cwq@0v$Ic5DNw0esu&>k>0~XAe z*PormIPMOzv=_^Pm8WpOw<8SWO{MvTGIaXpgns5*W#Q;jSbb)lyvj}ncRhh2W2n7< z=qV@ueH?G@dm_sqOy2%{441w!i>*VFOj~~pleq){JL>xsxMJ$RkQ)RGQKI&eH$A=DyGI>=t*7z`Ig?QWc`dF zwDHV<@n>iGbErQonq?yUu)Vzh#vA6Q%sqO%Pd>ZJ9C#a^r=f+k;5k3tlnKl7O|s_* zXFTqg3EjP`33 zHc86+zT`Y4uy&t+L0%kIib}HPM=iZ8zr>%wGV(xNzdV;l&c`wRNGLA8eJSgDDBLuO zBs=?s{3uIs%{T@htRKp+n+tK{d>jrBzAeLaSgZIXpzioA1}G6~;GmC!WTkRrJyIzbZ3bPq8m^#os$0%kCdeq9c7u zO^QCrPl+cnb2YiXLu#ld#wSthmmgIB25RJyGJK`}c=hw9YM6N`e4BEBuvfEa`+_6MlUtC=!e$U3b)k$Pt{FWCl zq$4ao8Sm9sdGALO8Xix9;f?ol!mc=cKAwv617697+@cLnOhe6s&t#(+VKC;rz-{hB z>A~6lz#19oTmO#S#B8QotlttZRmeeiym9$j2K3V|$-8GfFp>ALNys_*^0_Onbjrle zgp+dEAZPsBA``W5ACr$`=mUDsjG37wawE_ALO}*xY3ZoObAHM{=fC%J{r%77D6)DI z@7f~x<5M|t;su;cu}8Zf|H?Zl=TO_l5n5Y5OYQ$x)tQIofWBWG*~(IuP>HfevJ5d1 z$1)?7B_i2Ewo;O0Ny+=R*W14DskEqU$ymaBk0m5!Y*_}`vW>507{>NH^Y#5**ZAv^ zOX+%gdY1b>=X2UrAu%-=M#Gv&!9eceU&tbGY9;!$XJJxHZlsT{>?=46Gb6HqeY*=B z&;Hlnv1N#fL}#5rr*_HEePt#?bSg1DNe_AK zT7e-|xwwDMP)?K_z^f5EV3(&SPxbba4WExES9Qhlb}{_Z3*a@gz0Cfck9&EAaBHD0 zm8|jn8C!&h4Xv1gn2EQ%UwJ=nDT|Pbn_Y`h*{Hb;3#TsYKrzOdYRDcks9gE`-g$W= zX{hD$FK<20qi=06+;t7)N=+5~=8&gR*IPn!tGGrYFwbs?{2f~bL)HW&oweT~JSFPY!lZWV!E?|nD~+r;aZGq9$n;8vp5`nQH;bWT{(R! z3c+)ECz1BD;vn~p;u2(Q=}7tYQ0PA{fw5Z~G42x#llG-(_a80sNe#e0?$s@lTgt2~rZxw!^?ni&*W=6DJ(dS>J8_PJ6vUr;hA2U*^>^5IkkE?&*W zu0O2h?~4ae({TqHnp(;39(ytP2j*j?jhBr))2{wlfLwZkqn|Lx*t8ID>qp9U`yBMu zD#GWLBcyegOt|t)^fMSHwmniAr?3;7Uk{cXcWRsa6(j$VnOy%6i>GD9sQ@$aTQVQ{n_~p6VD~T;nFpKboH{3PXlUESs#eflJWAG zOrCKgLvZPjX>ze~4URWqrgG&1F)^;e*=dp3rE(GLE;VRQ-})A(4Kmd00%ngUTmO@< zY&(A*7kIC7?7dY!|8kb^Y3iXhH%V&QDdd`FQzPXr{_%oydO7$qewEZzSHP(-7Xho5 zN`2JDzZRlw z%v717$#+Ur5suxPENZ@i!uhrdE}bZmPOR0x+zG9e39|7&v8W3yhF{KDX;en;pk@j7 zoEeht6h-$-;OYINyf6$#)tFN3Z#`VT^8RcTTZ-$|L&cu=xJlb}%*i_a+_f#aVRr`yS)Z!`Y#y67bO+HlvSN7Ul2C8I2PBrun zQ%m6$F7{o|q5eV!2Av6(T~ANJST`GrS^hHlkidlA7@hrF<#}ZVuCL66s%Vo$9X)^< zae3(N?kSU+@5S_j9Wbn2Bg?tJdh8@WJ>Nx^oXf{=83nARuAmP$2Tc`)%o%c$QJ*rf zc2*Ha-gA_}n$+JiD{*!40!ekCSK<^|;Ysw8G{j=uiek9!m?IAKPfdSc49Cl}WI~<_ zuAJw~eQYIx8OQQh37oU1i3f8?UOJcJ)6X{I7)P$awNkQbr-`+Rj_GT!(gx+P`6I3QTomG46Y>l?AV z0%W6iDIU(wf~L7r43i3R+$b9pzxs(;Yi6V0&Bpb=w#br8SxArD4h@S=ru5kTZ#mR&7`>?by2@}Gi#A?_sn6XA``DZk2kd_a2VX%V|HpU83B=5$1cfQAOgh<)fJs5PC zOfglATq)Xz-TQ;kxKXNj_t=jZ>R4_+&Xyw|_M_LhaLjp|C&4t$dyWJt*rSMen^txNhKJ(BL)>a;$)U-5f*%k!TNd8GNc{P zL;Ce5Bu2aEaMLaSx6cXhT3FD#hsC(@vtv)d0*ghVXSA9gy_d$wRJRUsVEXOtm zvknlC10y!dbiOC1({q(^a=qNyulP-Dm5R-AI(bZL|$%QyZ?cl%f&j|@0 z;`=2ZT3fbZR-T)*spDOhTKym9uaiCR^RSQ_q^-HWa%xTo4PA+Mk~Pe%I}V}AEg7}@QRThDgl{kkx0 z_s$WcZLA?%vPQirLwrjM5D>|CWmS^Q{f&LRlyGdj9xJZ{bD^dV*o0h#bse+mStHY6 zqe>33-|eRkhkna28I_cRd%x4Cb~9M+ZBInv`*0*(4U}p0TE1${y4!Pq*)=u>j(RHA zSd=oQhWs=`6@2WrNoIfw4rG9Y&hV89uH?%)tB_>oEi2ZAVA@#~?o8Y$ZZYKZ_ldy6 z-1Ty;G64OU!5MF}PJZg>kNGzvaF8P-!=j_ijykV>5#!H9i#+ z(nArkH9(T7;~LyA3_UZIq9T)W9$6Cu?rf9S^0u?+Pf}vxrtfuMz4tAZMxlB5i`qr}y+F(t z|AEK0QK zPuxF^e%L=k<@v=-ENL79pYDNDIXDxYOG7Zeky1L3PKW1o=D*+YlPTr&Q#=br&jcS? zVwMCuWf)!-ZWiNT;<1(7)$p4eqGM+a1iUMxmZEHdb3+IrI}$4al z-9L*wuI-3q)@S>#4)Vk`8>i@>>M(T~bE~t^t%O+~eLSSdGYeMCR(zq}Djxl_(36_> zMP7mO?oB4{saT&a2$dLhCVJ6Rkf9$gYqn+LcGDmf?hTb&e6OuP9fb5wLDGW$xZnVK zZCn)c+=w3VQ6bo4=q(jK>D1!UUskYQHW;O0abhU$9q^EYmC3k2iW-{$cbT!2T8mrM zEv$2sbuGEqZU{$~?P~G-mHdHLDj0QlmUnSc&`4Kd=Cc(tdus#^nULdgZkg;qmXFLd?6W{N^jBi!?(f%guev=AYqZW!Gd6_%fMWET4`QoJ&ft>|p<+Yn9e#YF(IkyG=bLAX= zSI#mwbb^_^EQt@sY;wGno#)7N_E>crvuO*@-eY!RaYG3`%NQ*4u@iI7 z^B%JDmVcNf)jgG1OBU9@*K$f6hQqO+W^O2a5>xm&JvmYRpD7{mJ4F1zKTSe=TJ_uMzmEt2`y=!HKLf+NrD zMTZ(Wcdt-H9ki3)e#w|Tko>+}JJI@;Y~e>?XclWH<%RK3k|9?AewNG&r{{OP3g_x) ziuvYf3~1mQR@e$QM`BEH1U6~UkeWy`T6;5R^OtGz`7l{ACz){=H&s;hD34*ivGHCT zSvs3OTFq#z(Y2AbLcQ>wXvCMv8HYi26vx2EF+&%VmT zgXB4NR`r_xI2Zu*EpCX7^kg5vk6Na@fmYHunM|G&te4sR zEYlw+qDep)QX(eGl%fR8{V5z9U?t9nn9=!}dvaSVQ5}gvMk(iZ&_r2sl6@%q2;kFC zGU#{iyPqSFa*EsoEfwD8a19?HFELZYFxi^gNR9C_IiJ0_zoPIlX`GDdzGz5WTB^wmySFK4`%cGC>tk}43v0AF2}#u zbMa;qd1jx9mj%pxFE*5`ovFi|tbn(Lo{ZJzT7Ar{rng<>*uXT53|8XIP6Ju8HWkhL z`J+>)kz~}SU{EdD#jpBEq)iHZnV(`iV4&39NyaJ*=CbuLmu5;u zr2J43i_(=U+&3I47UbBSGKhfvKnsa!5`{c+Hafl^A=c&* zFeRrn?!jl04jMid5_4i{JY=?{=odgO+=WKf6FBrF;ao|$v42I0dbX53C6E;>$u zuxU%i;G5wxpZlWs^;o!_9wFMyrny%{eO~#G61PEtEPhWq*&`&8EdDtizUQ2*{i}<- z=)yP6E_#%jwh`~kY4|u>fdb1G;zr%2?MDR`EpH~?w^NXjO^)u2=3?6^1-&OR3vZ65 zoOVgZ+&}%H)4Q$M-AF={!T>y4-%%QtCP8aOAUXybh&DY4W`n66eP=96W@;>L77X7l zePpFYBCgj5BQL>3swDyG>JX$IHIevX2^h>XDSd^BD5=}*=oJR%>VD$Koadp;0omj< zKyv%V;W^*?ra@*>wu@N@*HqZu!AxGfWadmn1h$+smHE_VEo7d-m4*E!+fRkDPa?5m zaX)e5&#EXr3I!ibq>6d+(Pa1}81<9B4Z-j>q{r!(e$t4URwYl#%*^U94~Fn;InE5- z3R5}qjJ3EF_7vX?5cM9iF*d~`fa}W9kDkJL3C!~yAe%YQPLIEz=d4aGWiqw;iRAY5 ze)v{BD>@asmr^@g(xCq8lLF_q%s75dhAp+1FZlDbnR7?oKrjDKtg-6ftylXrPeOhd zYH9o*tFy?Keoz~LyIF74MNbmo6c-4)(T&B`k9pTigP60UDP`1a_>Kui^=WM}JHop` zj}REUbd)pHVP0eIPoiCC`TJ-bOxTmlKc**_jma9n8ixLVbrl~k@>k2laar3)hL^|S zKcOl#dtoHIc{iSF6M+TCyG!uPNN6;UMED6qxj8k0brH^O+phBRP&j^YBr|iMfwZ!u zcSJv$x)B3;e~EileKgwD8%W&NU__TupWnhz{C^CBZB#54cy^Pf%$IXt$1LwJ-Q_7Y zU2W#a!!X2HT#CrXuu4GN*FB_5m;#4}C8AGsU-9KUf13F{AE_qonfgm|D()TLhCA0U zs8?90V79vglRqC-H>WRn4f#litoEyqk&Q6qk`jKNyVbLnC1Q0Dd$k94sWtKv&}Vc2 zo^0QzKJhu8_XlRCr&Xx8tdB}nF#F?82WdZr z8O0hA*i63bdAleKI~9QrH`>Wu@?R%yh{VA+ZRL@j3OkJ1BYDwU26GKNUSVHqMr&yt z5(?{-XdL>zwJe_y0&}+*WSX`WTW#h5PbGitp|%`rV21CHad50|Cx^}k;HybIek$)E z1Ikzgw!d zw9MUYiSru%?K}NOjdc1pYSgaTw=wU3K3=c)Z7gW~ZJf=|`RCss*Z4M?bp1BQ qcKJ3s|L^nnwD|V%a?Nk!OoMNuLz8bKzubSn&eZ>ne{}!$@&5t4mmO08 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/PENTAX K-50.dcp b/rtdata/dcpprofiles/PENTAX K-50.dcp new file mode 100644 index 0000000000000000000000000000000000000000..3205c757982490b50e1c1835c8d559f432a54a2b GIT binary patch literal 65350 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

E{a-cIZF2hj4*@PF;{a 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/SONY ILCE-7RM4.dcp b/rtdata/dcpprofiles/SONY ILCE-7RM4.dcp new file mode 100644 index 0000000000000000000000000000000000000000..e473fa4968a4bb0cf7bf17e466e162c77cc682df GIT binary patch literal 65358 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 Wzk92EzYh5K=V<+V?Kk}U_x}&TIpX#J literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/SONY ILCE-9.dcp b/rtdata/dcpprofiles/SONY ILCE-9.dcp new file mode 100644 index 0000000000000000000000000000000000000000..c073158120918ae484fc3a38606495d193112e37 GIT binary patch literal 65350 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⪼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 Date: Tue, 10 Mar 2020 14:41:29 +0100 Subject: [PATCH 203/264] camconst.json : added FUJIFILM X-PRO3 --- rtengine/camconst.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index d50e050dd..507c782b3 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1375,7 +1375,7 @@ Camera constants: }, { // Quality C, only raw crop - "make_model": [ "FUJIFILM X-T3", "FUJIFILM X-T30" ], + "make_model": [ "FUJIFILM X-T3", "FUJIFILM X-T30", "FUJIFILM X-PRO3" ], "dcraw_matrix": [ 13426,-6334,-1177,-4244,12136,2371,-580,1303,5980 ], // DNG_v11, standard_v2 d65 "raw_crop": [ 0, 5, 6252, 4176] }, From 5732500e2fd0b4c7c8b8744c511435ad1eacbba3 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 10 Mar 2020 16:42:47 +0100 Subject: [PATCH 204/264] Do not use Standard light A if D65 does not exist --- rtengine/dcraw.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 7f6e2ee31..ac47c67a6 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -6898,7 +6898,7 @@ it under the terms of the one of two licenses as you choose: break; case 50778: case 50779: - if( get2() == 21 ) + if( get2() != 17 ) // 17 is Standard light A cm_D65 = (tag-50778); break; case 50829: /* ActiveArea */ From 6490c7d945bb110fcf000d6571e691d3987b735c Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 10 Mar 2020 20:40:46 +0100 Subject: [PATCH 205/264] camconst.json : added some dcraw_matrices from ART --- rtengine/camconst.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 507c782b3..27066897b 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1242,6 +1242,7 @@ Camera constants: { // Quality C, only raw crop "make_model": "Canon PowerShot SX70 HS", + "dcraw_matrix" : [18285, -8907, -1951, -1845, 10688, 1323, 364, 1101, 5139], // taken from ART "raw_crop": [ 96, 17, 5248, 3932 ] }, @@ -1270,6 +1271,7 @@ Camera constants: { // Quality C "make_model": "FUJIFILM GFX 100", + "dcraw_matrix" : [16212, -8423, -1583, -4336, 12583, 1937, -195, 726, 6199], // taken from ART "raw_crop": [ 0, 2, 11664, 8734 ] }, @@ -1350,6 +1352,7 @@ Camera constants: { // Quality C "make_model": [ "FUJIFILM X-T100" ], + "dcraw_matrix" : [11673, -4760, -1041, -3988, 12058, 2166, -771, 1417, 5568], // taken from ART "ranges": { "white": 16100 } }, @@ -1774,6 +1777,7 @@ Camera constants: { // Quality C, only raw crop "make_model": "OLYMPUS TG-6", + "dcraw_matrix" : [10899, -3832, -1082, -2112, 10736, 1575, -267, 1452, 5269], // taken from ART "raw_crop": [ 0, 0, -24, 0 ] // 24 pixels at right are garbage }, From 1693d66abc1e6ad4ca30925a465b995f143ac0a7 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 10 Mar 2020 21:07:34 +0100 Subject: [PATCH 206/264] camconst.json : added some dcraw_matrices from ART --- rtengine/camconst.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 27066897b..e97d1635c 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1395,6 +1395,11 @@ Camera constants: "ranges": { "white": 4040 } }, + { // Quality B, Matrix from ART + "make_model" : "LEICA D-LUX 7", + "dcraw_matrix" : [11577, -4230, -1106, -3967, 12211, 1957, -758, 1762, 5610] + }, + { // Quality B, Matrix from Adobe's dcp D65 instead of the internal in Leica's DNG "make_model": "LEICA Q (Typ 116)", "dcraw_matrix": [ 10068,-4043,-1068,-5319,14268,1044,-765,1701,6522 ], // DCP D65 @@ -1417,6 +1422,11 @@ Camera constants: "raw_crop": [ 0, 0, 0, -18 ] // 18 rows at bottom are garbage }, + { // Quality B, Matrix from ART + "make_model" : "LEICA V-LUX 5", + "dcraw_matrix" : [9803, -4185, -992, -4066, 12578, 1628, -838, 1824, 5288] + }, + { // Quality C "make_model": "LG mobile LG-H815", "dcraw_matrix": [ 5859,547,-1250,-6484,15547,547,-2422,5625,3906 ], // DNG D65 From a801d768ea6590a3eeb74cf035280f89db9278f7 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 10 Mar 2020 22:13:48 +0100 Subject: [PATCH 207/264] fixed lookup of camera matrices for DNG files always prefer our matrices in camconst.json over the embedded ones if available, patch taken from ART --- rtengine/dcraw.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index ac47c67a6..8085e12b6 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -9077,9 +9077,6 @@ void CLASS adobe_coeff (const char *make, const char *model) if (RT_blacklevel_from_constant == ThreeValBool::X || is_pentax_dng) { RT_blacklevel_from_constant = ThreeValBool::T; } - if (RT_matrix_from_constant == ThreeValBool::X) { - RT_matrix_from_constant = ThreeValBool::T; - } // -- RT -------------------------------------------------------------------- for (i=0; i < sizeof table / sizeof *table; i++) @@ -9097,6 +9094,9 @@ void CLASS adobe_coeff (const char *make, const char *model) black <<= 2; tiff_bps += 2; } + if (RT_matrix_from_constant == ThreeValBool::X) { + RT_matrix_from_constant = ThreeValBool::T; + } { /* Check for RawTherapee table overrides and extensions */ int black_level, white_level; short trans[12]; @@ -10541,7 +10541,7 @@ dng_skip: * files. See #4129 */) { memcpy (rgb_cam, cmatrix, sizeof cmatrix); // raw_color = 0; - RT_matrix_from_constant = ThreeValBool::F; + RT_matrix_from_constant = ThreeValBool::X; } if(!strncmp(make, "Panasonic", 9) && !strncmp(model, "DMC-LX100",9)) adobe_coeff (make, model); From 4e03c3e4b0813c7123d22d0fc572d26d30118a3a Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 11 Mar 2020 13:49:42 +0100 Subject: [PATCH 208/264] raw crop for FUJIFILM X-T4 --- rtengine/camconst.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index e97d1635c..150d5d455 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1383,6 +1383,11 @@ Camera constants: "raw_crop": [ 0, 5, 6252, 4176] }, + { // Quality C, only raw crop + "make_model": [ "FUJIFILM X-T4" ], + "raw_crop": [ 0, 5, 6252, 4140] + }, + { // Quality B "make_model": "FUJIFILM X30", "dcraw_matrix": [ 12328,-5256,-1144,-4469,12927,1675,-87,1291,4351 ], // DNG_v8.7 D65 From 5bf4da1a84c33c85c5a26041315d58568ed8ff6a Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 15 Mar 2020 12:40:35 +0100 Subject: [PATCH 209/264] raw crop for FUJIFILM X100V --- rtengine/camconst.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 150d5d455..44e01ea99 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1295,6 +1295,11 @@ Camera constants: "ranges": { "white": 16100 } }, + { // Quality C + "make_model": [ "FUJIFILM X100V" ], + "raw_crop": [ 0, 5, 6252, 4140 ] + }, + { // Quality C "make_model": "Fujifilm X10", "ranges": { "white": 3788 } From b1901997a794799bda406fea385fd3d9442b16ae Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 15 Mar 2020 17:50:03 +0100 Subject: [PATCH 210/264] Fix wrong white level scaling on 14-bit Panasonic RW2 files --- rtengine/dcraw.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 8085e12b6..b8d5b9895 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -9093,6 +9093,8 @@ void CLASS adobe_coeff (const char *make, const char *model) if (load_raw == &CLASS sony_arw2_load_raw) { // RT: arw2 scale fix black <<= 2; tiff_bps += 2; + } else if (load_raw == &CLASS panasonic_load_raw) { + tiff_bps = RT_pana_info.bpp; } if (RT_matrix_from_constant == ThreeValBool::X) { RT_matrix_from_constant = ThreeValBool::T; From 97b8918d5c2cd4755efbbe09f4b7642f13f417d3 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 16 Mar 2020 15:48:38 +0100 Subject: [PATCH 211/264] =?UTF-8?q?Added=20standard=20observer=2010=C2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rtengine/colortemp.cc | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 4d5cb42f2..0f85feba0 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -69,6 +69,106 @@ static const double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desm {0.000001251141, 0.00000045181, 0.000000} }; + +static const double cie_colour_match_jd10[97][3] = {//350nm to 830nm 5 nm J.Desmis 10° Standard Observer. +{0.000000000000, 0.000000000000, 0.000000000000}, +{0.000000000000, 0.000000000000, 0.000000000000}, +{0.000000122200, 0.000000013398, 0.000000535027}, +{0.000000919270, 0.000000100650, 0.000004028300}, +{0.000005958600, 0.000000651100, 0.000026143700}, +{0.000033266000, 0.000003625000, 0.000146220000}, +{0.000159952000, 0.000017364000, 0.000704776000}, +{0.000662440000, 0.000071560000, 0.002927800000}, +{0.002361600000, 0.000253400000, 0.010482200000}, +{0.007242300000, 0.000768500000, 0.032344000000}, +{0.019109700000, 0.002004400000, 0.086010900000}, +{0.043400000000, 0.004509000000, 0.197120000000}, +{0.084736000000, 0.008756000000, 0.389366000000}, +{0.140638000000, 0.014456000000, 0.656760000000}, +{0.204492000000, 0.021391000000, 0.972542000000}, +{0.264737000000, 0.029497000000, 1.282500000000}, +{0.314679000000, 0.038676000000, 1.553480000000}, +{0.357719000000, 0.049602000000, 1.798500000000}, +{0.383734000000, 0.062077000000, 1.967280000000}, +{0.386726000000, 0.074704000000, 2.027300000000}, +{0.370702000000, 0.089456000000, 1.994800000000}, +{0.342957000000, 0.106256000000, 1.900700000000}, +{0.302273000000, 0.128201000000, 1.745370000000}, +{0.254085000000, 0.152761000000, 1.554900000000}, +{0.195618000000, 0.185190000000, 1.317560000000}, +{0.132349000000, 0.219940000000, 1.030200000000}, +{0.080507000000, 0.253589000000, 0.772125000000}, +{0.041072000000, 0.297665000000, 0.570060000000}, +{0.016172000000, 0.339133000000, 0.415254000000}, +{0.005132000000, 0.395379000000, 0.302356000000}, +{0.003816000000, 0.460777000000, 0.218502000000}, +{0.015444000000, 0.531360000000, 0.159249000000}, +{0.037465000000, 0.606741000000, 0.112044000000}, +{0.071358000000, 0.685660000000, 0.082248000000}, +{0.117749000000, 0.761757000000, 0.060709000000}, +{0.172953000000, 0.823330000000, 0.043050000000}, +{0.236491000000, 0.875211000000, 0.030451000000}, +{0.304213000000, 0.923810000000, 0.020584000000}, +{0.376772000000, 0.961988000000, 0.013676000000}, +{0.451584000000, 0.982200000000, 0.007918000000}, +{0.529826000000, 0.991761000000, 0.003988000000}, +{0.616053000000, 0.999110000000, 0.001091000000}, +{0.793832000000, 0.982380000000, 0.000000000000}, +{0.878655000000, 0.955552000000, 0.000000000000}, +{0.951162000000, 0.915175000000, 0.000000000000}, +{1.014160000000, 0.868934000000, 0.000000000000}, +{1.074300000000, 0.825623000000, 0.000000000000}, +{1.118520000000, 0.777405000000, 0.000000000000}, +{1.134300000000, 0.720353000000, 0.000000000000}, +{1.123990000000, 0.658341000000, 0.000000000000}, +{1.089100000000, 0.593878000000, 0.000000000000}, +{1.030480000000, 0.527963000000, 0.000000000000}, +{0.950740000000, 0.461834000000, 0.000000000000}, +{0.856297000000, 0.398057000000, 0.000000000000}, +{0.754930000000, 0.339554000000, 0.000000000000}, +{0.647467000000, 0.283493000000, 0.000000000000}, +{0.535110000000, 0.228254000000, 0.000000000000}, +{0.431567000000, 0.179828000000, 0.000000000000}, +{0.343690000000, 0.140211000000, 0.000000000000}, +{0.268329000000, 0.107633000000, 0.000000000000}, +{0.204300000000, 0.081187000000, 0.000000000000}, +{0.152568000000, 0.060281000000, 0.000000000000}, +{0.112210000000, 0.044096000000, 0.000000000000}, +{0.081260600000, 0.031800400000, 0.000000000000}, +{0.057930000000, 0.022601700000, 0.000000000000}, +{0.040850800000, 0.015905100000, 0.000000000000}, +{0.028623000000, 0.011130300000, 0.000000000000}, +{0.019941300000, 0.007748800000, 0.000000000000}, +{0.013842000000, 0.005375100000, 0.000000000000}, +{0.009576880000, 0.003717740000, 0.000000000000}, +{0.006605200000, 0.002564560000, 0.000000000000}, +{0.004552630000, 0.001768470000, 0.000000000000}, +{0.003144700000, 0.001222390000, 0.000000000000}, +{0.002174960000, 0.000846190000, 0.000000000000}, +{0.001505700000, 0.000586440000, 0.000000000000}, +{0.001044760000, 0.000407410000, 0.000000000000}, +{0.000727450000, 0.000284041000, 0.000000000000}, +{0.000508258000, 0.000198730000, 0.000000000000}, +{0.000356380000, 0.000139550000, 0.000000000000}, +{0.000250969000, 0.000098428000, 0.000000000000}, +{0.000177730000, 0.000069819000, 0.000000000000}, +{0.000126390000, 0.000049737000, 0.000000000000}, +{0.000090151000, 0.000035540500, 0.000000000000}, +{0.000064525800, 0.000025486000, 0.000000000000}, +{0.000046339000, 0.000018338400, 0.000000000000}, +{0.000033411700, 0.000013249000, 0.000000000000}, +{0.000024209000, 0.000009619600, 0.000000000000}, +{0.000017611500, 0.000007012800, 0.000000000000}, +{0.000012855000, 0.000005129800, 0.000000000000}, +{0.000009413630, 0.000003764730, 0.000000000000}, +{0.000006913000, 0.000002770810, 0.000000000000}, +{0.000005093470, 0.000002046130, 0.000000000000}, +{0.000003767100, 0.000001516770, 0.000000000000}, +{0.000002795310, 0.000001128090, 0.000000000000}, +{0.000002082000, 0.000000842160, 0.000000000000}, +{0.000001553140, 0.000000629700, 0.000000000000} +}; + ColorTemp::ColorTemp (double t, double g, double e, const std::string &m) : temp(t), green(g), equal(e), method(m) { clip (temp, green, equal); From 8a972bef9ef8760e8045ebee95f78ec0706d50c5 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 16 Mar 2020 17:58:35 +0100 Subject: [PATCH 212/264] Itcwb - Use standard observer 10 by default - create option itcwb_stdobserver10 --- rtengine/colortemp.cc | 22 ++++++++++++++++++++-- rtengine/rawimagesource.cc | 3 ++- rtengine/settings.h | 3 ++- rtgui/options.cc | 8 +++++++- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 0f85feba0..5061e9021 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -33,7 +33,7 @@ namespace rtengine { -static const double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desmis 2° Standard Observer. +static const double cie_colour_match_jd2[97][3] = {//350nm to 830nm 5 nm J.Desmis 2° Standard Observer. {0.0000000, 0.000000, 0.000000}, {0.0000000, 0.000000, 0.000000}, {0.0001299, 0.0003917, 0.0006061}, {0.0002321, 0.000006965, 0.001086}, {0.0004149, 0.00001239, 0.001946}, {0.0007416, 0.00002202, 0.003846}, {0.001368, 0.000039, 0.006450001}, {0.002236, 0.000064, 0.01054999}, {0.004243, 0.000120, 0.02005001}, @@ -70,7 +70,7 @@ static const double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desm }; -static const double cie_colour_match_jd10[97][3] = {//350nm to 830nm 5 nm J.Desmis 10° Standard Observer. +static double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desmis 10° Standard Observer. {0.000000000000, 0.000000000000, 0.000000000000}, {0.000000000000, 0.000000000000, 0.000000000000}, {0.000000122200, 0.000000013398, 0.000000535027}, @@ -169,6 +169,8 @@ static const double cie_colour_match_jd10[97][3] = {//350nm to 830nm 5 nm J.De {0.000001553140, 0.000000629700, 0.000000000000} }; + + ColorTemp::ColorTemp (double t, double g, double e, const std::string &m) : temp(t), green(g), equal(e), method(m) { clip (temp, green, equal); @@ -3757,6 +3759,22 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float Refxyz[i].Zref = 0.f; } + if (settings->verbose) { + if (settings->itcwb_stdobserver10 == false) { + printf("Use standard observer 2°\n"); + } else { + printf("Use standard observer 10°\n"); + } + } + + if (settings->itcwb_stdobserver10 == false) { + for (int i = 0; i < 97; i++) { + cie_colour_match_jd[i][0] = cie_colour_match_jd2[i][0]; + cie_colour_match_jd[i][1] = cie_colour_match_jd2[i][1];; + cie_colour_match_jd[i][2] = cie_colour_match_jd2[i][2]; + } + } + if (separated) { const double tempw = Txyz[repref].Tem; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index f08609f5e..392c81de1 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4459,7 +4459,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double You can used it in images :flowers, landscape, portrait, skin, where illuminants are "normal" (daylight, blackbody) You must avoid when illuminant is non standard (fluorescent, LED...) and also, when the subject is lost in the image (some target to generate profiles). - You can change 4 parameters in option.cc + You can change parameters in option.cc Itcwb_thres : 34 by default ==> number of color used in final algorithm - between 10 and max 55 Itcwb_sort : false by default, can improve algorithm if true, ==> sort value in something near chroma order, instead of histogram number Itcwb_greenrange : 0 amplitude of green variation - between 0 to 2 @@ -4467,6 +4467,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Itcwb_forceextra : false - if true force algorithm "extra" ("extra" is used when camera wbsettings are wrong) to all images Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color compare to size of histogram real color itcwb_delta : 1 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good + itcwb_stdobserver10 : true by default - use standard observer 10°, false = standard observer 2° */ // BENCHFUN diff --git a/rtengine/settings.h b/rtengine/settings.h index 38e66c8ac..4d3131695 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -7,8 +7,8 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * * RawTherapee is distributed in the hope that it will be useful, +itcw * * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -88,6 +88,7 @@ public: bool itcwb_forceextra; int itcwb_sizereference; int itcwb_delta; + bool itcwb_stdobserver10; enum class ThumbnailInspectorMode { diff --git a/rtgui/options.cc b/rtgui/options.cc index 3cf0a9497..4a21fd8c0 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -597,7 +597,8 @@ void Options::setDefaults() rtSettings.itcwb_forceextra = true; rtSettings.itcwb_sizereference = 3;//between 1 and 5 rtSettings.itcwb_delta = 1;//between 0 and 5 - + rtSettings.itcwb_stdobserver10 = true; + rtSettings.protectred = 60; rtSettings.protectredh = 0.3; rtSettings.CRI_color = 0; @@ -1513,6 +1514,10 @@ void Options::readFromFile(Glib::ustring fname) rtSettings.itcwb_forceextra = keyFile.get_boolean("Color Management", "Itcwb_forceextra"); } + if (keyFile.has_key("Color Management", "Itcwb_stdobserver10")) { + rtSettings.itcwb_stdobserver10 = keyFile.get_boolean("Color Management", "Itcwb_stdobserver10"); + } + if (keyFile.has_key("Color Management", "Itcwb_greenrange")) { rtSettings.itcwb_greenrange = keyFile.get_integer("Color Management", "Itcwb_greenrange"); } @@ -2201,6 +2206,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_boolean("Color Management", "Itcwb_forceextra", rtSettings.itcwb_forceextra); keyFile.set_integer("Color Management", "Itcwb_sizereference", rtSettings.itcwb_sizereference); keyFile.set_integer("Color Management", "Itcwb_delta", rtSettings.itcwb_delta); + keyFile.set_boolean("Color Management", "Itcwb_stdobserver10", rtSettings.itcwb_stdobserver10); //keyFile.set_double ("Color Management", "Colortoningab", rtSettings.colortoningab); //keyFile.set_double ("Color Management", "Decaction", rtSettings.decaction); From d285dbade50f82bd9123a72e2a419f2ccfabbfe6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 17 Mar 2020 09:24:52 +0100 Subject: [PATCH 213/264] Suppress tabulations in cie_colour_match_jd --- rtengine/colortemp.cc | 192 +++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 5061e9021..585f02d20 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -71,102 +71,102 @@ static const double cie_colour_match_jd2[97][3] = {//350nm to 830nm 5 nm J.Des static double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desmis 10° Standard Observer. -{0.000000000000, 0.000000000000, 0.000000000000}, -{0.000000000000, 0.000000000000, 0.000000000000}, -{0.000000122200, 0.000000013398, 0.000000535027}, -{0.000000919270, 0.000000100650, 0.000004028300}, -{0.000005958600, 0.000000651100, 0.000026143700}, -{0.000033266000, 0.000003625000, 0.000146220000}, -{0.000159952000, 0.000017364000, 0.000704776000}, -{0.000662440000, 0.000071560000, 0.002927800000}, -{0.002361600000, 0.000253400000, 0.010482200000}, -{0.007242300000, 0.000768500000, 0.032344000000}, -{0.019109700000, 0.002004400000, 0.086010900000}, -{0.043400000000, 0.004509000000, 0.197120000000}, -{0.084736000000, 0.008756000000, 0.389366000000}, -{0.140638000000, 0.014456000000, 0.656760000000}, -{0.204492000000, 0.021391000000, 0.972542000000}, -{0.264737000000, 0.029497000000, 1.282500000000}, -{0.314679000000, 0.038676000000, 1.553480000000}, -{0.357719000000, 0.049602000000, 1.798500000000}, -{0.383734000000, 0.062077000000, 1.967280000000}, -{0.386726000000, 0.074704000000, 2.027300000000}, -{0.370702000000, 0.089456000000, 1.994800000000}, -{0.342957000000, 0.106256000000, 1.900700000000}, -{0.302273000000, 0.128201000000, 1.745370000000}, -{0.254085000000, 0.152761000000, 1.554900000000}, -{0.195618000000, 0.185190000000, 1.317560000000}, -{0.132349000000, 0.219940000000, 1.030200000000}, -{0.080507000000, 0.253589000000, 0.772125000000}, -{0.041072000000, 0.297665000000, 0.570060000000}, -{0.016172000000, 0.339133000000, 0.415254000000}, -{0.005132000000, 0.395379000000, 0.302356000000}, -{0.003816000000, 0.460777000000, 0.218502000000}, -{0.015444000000, 0.531360000000, 0.159249000000}, -{0.037465000000, 0.606741000000, 0.112044000000}, -{0.071358000000, 0.685660000000, 0.082248000000}, -{0.117749000000, 0.761757000000, 0.060709000000}, -{0.172953000000, 0.823330000000, 0.043050000000}, -{0.236491000000, 0.875211000000, 0.030451000000}, -{0.304213000000, 0.923810000000, 0.020584000000}, -{0.376772000000, 0.961988000000, 0.013676000000}, -{0.451584000000, 0.982200000000, 0.007918000000}, -{0.529826000000, 0.991761000000, 0.003988000000}, -{0.616053000000, 0.999110000000, 0.001091000000}, -{0.793832000000, 0.982380000000, 0.000000000000}, -{0.878655000000, 0.955552000000, 0.000000000000}, -{0.951162000000, 0.915175000000, 0.000000000000}, -{1.014160000000, 0.868934000000, 0.000000000000}, -{1.074300000000, 0.825623000000, 0.000000000000}, -{1.118520000000, 0.777405000000, 0.000000000000}, -{1.134300000000, 0.720353000000, 0.000000000000}, -{1.123990000000, 0.658341000000, 0.000000000000}, -{1.089100000000, 0.593878000000, 0.000000000000}, -{1.030480000000, 0.527963000000, 0.000000000000}, -{0.950740000000, 0.461834000000, 0.000000000000}, -{0.856297000000, 0.398057000000, 0.000000000000}, -{0.754930000000, 0.339554000000, 0.000000000000}, -{0.647467000000, 0.283493000000, 0.000000000000}, -{0.535110000000, 0.228254000000, 0.000000000000}, -{0.431567000000, 0.179828000000, 0.000000000000}, -{0.343690000000, 0.140211000000, 0.000000000000}, -{0.268329000000, 0.107633000000, 0.000000000000}, -{0.204300000000, 0.081187000000, 0.000000000000}, -{0.152568000000, 0.060281000000, 0.000000000000}, -{0.112210000000, 0.044096000000, 0.000000000000}, -{0.081260600000, 0.031800400000, 0.000000000000}, -{0.057930000000, 0.022601700000, 0.000000000000}, -{0.040850800000, 0.015905100000, 0.000000000000}, -{0.028623000000, 0.011130300000, 0.000000000000}, -{0.019941300000, 0.007748800000, 0.000000000000}, -{0.013842000000, 0.005375100000, 0.000000000000}, -{0.009576880000, 0.003717740000, 0.000000000000}, -{0.006605200000, 0.002564560000, 0.000000000000}, -{0.004552630000, 0.001768470000, 0.000000000000}, -{0.003144700000, 0.001222390000, 0.000000000000}, -{0.002174960000, 0.000846190000, 0.000000000000}, -{0.001505700000, 0.000586440000, 0.000000000000}, -{0.001044760000, 0.000407410000, 0.000000000000}, -{0.000727450000, 0.000284041000, 0.000000000000}, -{0.000508258000, 0.000198730000, 0.000000000000}, -{0.000356380000, 0.000139550000, 0.000000000000}, -{0.000250969000, 0.000098428000, 0.000000000000}, -{0.000177730000, 0.000069819000, 0.000000000000}, -{0.000126390000, 0.000049737000, 0.000000000000}, -{0.000090151000, 0.000035540500, 0.000000000000}, -{0.000064525800, 0.000025486000, 0.000000000000}, -{0.000046339000, 0.000018338400, 0.000000000000}, -{0.000033411700, 0.000013249000, 0.000000000000}, -{0.000024209000, 0.000009619600, 0.000000000000}, -{0.000017611500, 0.000007012800, 0.000000000000}, -{0.000012855000, 0.000005129800, 0.000000000000}, -{0.000009413630, 0.000003764730, 0.000000000000}, -{0.000006913000, 0.000002770810, 0.000000000000}, -{0.000005093470, 0.000002046130, 0.000000000000}, -{0.000003767100, 0.000001516770, 0.000000000000}, -{0.000002795310, 0.000001128090, 0.000000000000}, -{0.000002082000, 0.000000842160, 0.000000000000}, -{0.000001553140, 0.000000629700, 0.000000000000} +{0.000000000000, 0.000000000000, 0.000000000000}, +{0.000000000000, 0.000000000000, 0.000000000000}, +{0.000000122200, 0.000000013398, 0.000000535027}, +{0.000000919270, 0.000000100650, 0.000004028300}, +{0.000005958600, 0.000000651100, 0.000026143700}, +{0.000033266000, 0.000003625000, 0.000146220000}, +{0.000159952000, 0.000017364000, 0.000704776000}, +{0.000662440000, 0.000071560000, 0.002927800000}, +{0.002361600000, 0.000253400000, 0.010482200000}, +{0.007242300000, 0.000768500000, 0.032344000000}, +{0.019109700000, 0.002004400000, 0.086010900000}, +{0.043400000000, 0.004509000000, 0.197120000000}, +{0.084736000000, 0.008756000000, 0.389366000000}, +{0.140638000000, 0.014456000000, 0.656760000000}, +{0.204492000000, 0.021391000000, 0.972542000000}, +{0.264737000000, 0.029497000000, 1.282500000000}, +{0.314679000000, 0.038676000000, 1.553480000000}, +{0.357719000000, 0.049602000000, 1.798500000000}, +{0.383734000000, 0.062077000000, 1.967280000000}, +{0.386726000000, 0.074704000000, 2.027300000000}, +{0.370702000000, 0.089456000000, 1.994800000000}, +{0.342957000000, 0.106256000000, 1.900700000000}, +{0.302273000000, 0.128201000000, 1.745370000000}, +{0.254085000000, 0.152761000000, 1.554900000000}, +{0.195618000000, 0.185190000000, 1.317560000000}, +{0.132349000000, 0.219940000000, 1.030200000000}, +{0.080507000000, 0.253589000000, 0.772125000000}, +{0.041072000000, 0.297665000000, 0.570060000000}, +{0.016172000000, 0.339133000000, 0.415254000000}, +{0.005132000000, 0.395379000000, 0.302356000000}, +{0.003816000000, 0.460777000000, 0.218502000000}, +{0.015444000000, 0.531360000000, 0.159249000000}, +{0.037465000000, 0.606741000000, 0.112044000000}, +{0.071358000000, 0.685660000000, 0.082248000000}, +{0.117749000000, 0.761757000000, 0.060709000000}, +{0.172953000000, 0.823330000000, 0.043050000000}, +{0.236491000000, 0.875211000000, 0.030451000000}, +{0.304213000000, 0.923810000000, 0.020584000000}, +{0.376772000000, 0.961988000000, 0.013676000000}, +{0.451584000000, 0.982200000000, 0.007918000000}, +{0.529826000000, 0.991761000000, 0.003988000000}, +{0.616053000000, 0.999110000000, 0.001091000000}, +{0.793832000000, 0.982380000000, 0.000000000000}, +{0.878655000000, 0.955552000000, 0.000000000000}, +{0.951162000000, 0.915175000000, 0.000000000000}, +{1.014160000000, 0.868934000000, 0.000000000000}, +{1.074300000000, 0.825623000000, 0.000000000000}, +{1.118520000000, 0.777405000000, 0.000000000000}, +{1.134300000000, 0.720353000000, 0.000000000000}, +{1.123990000000, 0.658341000000, 0.000000000000}, +{1.089100000000, 0.593878000000, 0.000000000000}, +{1.030480000000, 0.527963000000, 0.000000000000}, +{0.950740000000, 0.461834000000, 0.000000000000}, +{0.856297000000, 0.398057000000, 0.000000000000}, +{0.754930000000, 0.339554000000, 0.000000000000}, +{0.647467000000, 0.283493000000, 0.000000000000}, +{0.535110000000, 0.228254000000, 0.000000000000}, +{0.431567000000, 0.179828000000, 0.000000000000}, +{0.343690000000, 0.140211000000, 0.000000000000}, +{0.268329000000, 0.107633000000, 0.000000000000}, +{0.204300000000, 0.081187000000, 0.000000000000}, +{0.152568000000, 0.060281000000, 0.000000000000}, +{0.112210000000, 0.044096000000, 0.000000000000}, +{0.081260600000, 0.031800400000, 0.000000000000}, +{0.057930000000, 0.022601700000, 0.000000000000}, +{0.040850800000, 0.015905100000, 0.000000000000}, +{0.028623000000, 0.011130300000, 0.000000000000}, +{0.019941300000, 0.007748800000, 0.000000000000}, +{0.013842000000, 0.005375100000, 0.000000000000}, +{0.009576880000, 0.003717740000, 0.000000000000}, +{0.006605200000, 0.002564560000, 0.000000000000}, +{0.004552630000, 0.001768470000, 0.000000000000}, +{0.003144700000, 0.001222390000, 0.000000000000}, +{0.002174960000, 0.000846190000, 0.000000000000}, +{0.001505700000, 0.000586440000, 0.000000000000}, +{0.001044760000, 0.000407410000, 0.000000000000}, +{0.000727450000, 0.000284041000, 0.000000000000}, +{0.000508258000, 0.000198730000, 0.000000000000}, +{0.000356380000, 0.000139550000, 0.000000000000}, +{0.000250969000, 0.000098428000, 0.000000000000}, +{0.000177730000, 0.000069819000, 0.000000000000}, +{0.000126390000, 0.000049737000, 0.000000000000}, +{0.000090151000, 0.000035540500, 0.000000000000}, +{0.000064525800, 0.000025486000, 0.000000000000}, +{0.000046339000, 0.000018338400, 0.000000000000}, +{0.000033411700, 0.000013249000, 0.000000000000}, +{0.000024209000, 0.000009619600, 0.000000000000}, +{0.000017611500, 0.000007012800, 0.000000000000}, +{0.000012855000, 0.000005129800, 0.000000000000}, +{0.000009413630, 0.000003764730, 0.000000000000}, +{0.000006913000, 0.000002770810, 0.000000000000}, +{0.000005093470, 0.000002046130, 0.000000000000}, +{0.000003767100, 0.000001516770, 0.000000000000}, +{0.000002795310, 0.000001128090, 0.000000000000}, +{0.000002082000, 0.000000842160, 0.000000000000}, +{0.000001553140, 0.000000629700, 0.000000000000} }; From a45823995a62a39761ed1fd280320706cdd06ec8 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 18 Mar 2020 09:00:26 +0100 Subject: [PATCH 214/264] Itcwb increases precision in color sampling 5 instead of 9 - option itcwb_precis --- rtengine/rawimagesource.cc | 30 ++++++++++++++++++++++++------ rtengine/settings.h | 1 + rtgui/options.cc | 7 ++++++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 392c81de1..232747439 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -5322,8 +5322,17 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int { // BENCHFUN //used by auto WB local to calculate red, green, blue in local region - const int bfw = W / 9 + ((W % 9) > 0 ? 1 : 0);//10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfh = H / 9 + ((H % 9) > 0 ? 1 : 0); + int precision = 5; + if (settings->itcwb_precis == 5) { + precision = 5; + } else if (settings->itcwb_precis < 5) { + precision = 3; + } else if (settings->itcwb_precis > 5) { + precision = 9; + } + + const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ; + const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0); if (! greenloc) { greenloc(bfw, bfh); @@ -5373,9 +5382,9 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int #pragma omp parallel for #endif for (int i = 0; i < bfh; ++i) { - const int ii = i * 9; + const int ii = i * precision; if (ii < H) { - for (int j = 0, jj = 0; j < bfw; ++j, jj += 9) { + for (int j = 0, jj = 0; j < bfw; ++j, jj += precision) { redloc[i][j] = red[ii][jj] * multip; greenloc[i][j] = green[ii][jj] * multip; blueloc[i][j] = blue[ii][jj] * multip; @@ -5575,8 +5584,17 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref if (wbpar.method == "autitcgreen") { bool twotimes = false; - const int bfw = W / 9 + ((W % 9) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfh = H / 9 + ((H % 9) > 0 ? 1 : 0); + int precision = 5; + if (settings->itcwb_precis == 5) { + precision = 5; + } else if (settings->itcwb_precis < 5) { + precision = 3; + } else if (settings->itcwb_precis > 5) { + precision = 9; + } + + const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ; + const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0); WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); } diff --git a/rtengine/settings.h b/rtengine/settings.h index 4d3131695..529336cbc 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -89,6 +89,7 @@ public: int itcwb_sizereference; int itcwb_delta; bool itcwb_stdobserver10; + int itcwb_precis; enum class ThumbnailInspectorMode { diff --git a/rtgui/options.cc b/rtgui/options.cc index 4a21fd8c0..7ae6c24aa 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -598,7 +598,8 @@ void Options::setDefaults() rtSettings.itcwb_sizereference = 3;//between 1 and 5 rtSettings.itcwb_delta = 1;//between 0 and 5 rtSettings.itcwb_stdobserver10 = true; - + rtSettings.itcwb_precis = 5;//3 or 5 or 9 + rtSettings.protectred = 60; rtSettings.protectredh = 0.3; rtSettings.CRI_color = 0; @@ -1534,6 +1535,9 @@ void Options::readFromFile(Glib::ustring fname) rtSettings.itcwb_delta = keyFile.get_integer("Color Management", "Itcwb_delta"); } + if (keyFile.has_key("Color Management", "Itcwb_precis")) { + rtSettings.itcwb_precis = keyFile.get_integer("Color Management", "Itcwb_precis"); + } //if (keyFile.has_key ("Color Management", "Colortoningab")) rtSettings.colortoningab = keyFile.get_double("Color Management", "Colortoningab"); //if (keyFile.has_key ("Color Management", "Decaction")) rtSettings.decaction = keyFile.get_double("Color Management", "Decaction"); @@ -2207,6 +2211,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_integer("Color Management", "Itcwb_sizereference", rtSettings.itcwb_sizereference); keyFile.set_integer("Color Management", "Itcwb_delta", rtSettings.itcwb_delta); keyFile.set_boolean("Color Management", "Itcwb_stdobserver10", rtSettings.itcwb_stdobserver10); + keyFile.set_integer("Color Management", "Itcwb_precis", rtSettings.itcwb_precis); //keyFile.set_double ("Color Management", "Colortoningab", rtSettings.colortoningab); //keyFile.set_double ("Color Management", "Decaction", rtSettings.decaction); From fe17a7add2c6ec1c44e8fbbbf6dfa4fc54dfdb65 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 18 Mar 2020 09:37:34 +0100 Subject: [PATCH 215/264] Improve comment code algorithm Itcwb --- rtengine/colortemp.cc | 4 +++- rtengine/rawimagesource.cc | 32 ++++++++++++-------------------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 585f02d20..2780fcc84 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -3391,6 +3391,7 @@ this values are often called xBar yBar zBar and are characteristics of a color / values cie_colour_match[][3] = 2° Standard Observer x2, y2, z2 E.g. for 380nm: x2=0.001368 y2=0.000039 z2=0.006451 round in J.Walker to 0.0014 0.0000 0.0065 above I have increase precision used by J.Walker and pass to 350nm to 830nm +And also add 10° standard observer */ void ColorTemp::spectrum_to_xyz_daylight(double _m1, double _m2, double &x, double &y, double &z) @@ -3449,6 +3450,7 @@ void ColorTemp::spectrum_to_xyz_preset(const double* spec_intens, double &x, dou values cie_colour_match[][3] = 2° Standard Observer x2, y2, z2 E.g. for 380nm: x2=0.001368 y2=0.000039 z2=0.006451 round in J.Walker to 0.0014 0.0000 0.0065 above I have increased the precision used by J.Walker and pass from 350nm to 830nm + And also add standard observer 10° */ for (i = 0, lambda = 350.; lambda < 830.1; i++, lambda += 5.) { double Me = get_spectral_color(lambda, spec_intens); @@ -3623,7 +3625,7 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float double ZZ; } WbTxyz; //probbaly can be "passed" with rawimagesource.cc but I don't know how to do. - constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after + constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values - same table as in Rawimagesource.cc x wb and y wb are calculated after {2001., 1.273842, 0.145295}, {2101., 1.244008, 0.167533}, {2201., 1.217338, 0.190697}, diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 232747439..75088a07c 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4412,12 +4412,13 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com Copyright (c) Ingo Weyrich 3 - 2020 (heckflosse67@gmx.de) - This algorithm try to find temperature correlation between 20 to 201 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. + This algorithm try to find temperature correlation between 20 to 201 color between 201 spectral color and about 20 to 55 color found in the image between 192, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. I have test many many algorithms to find the first one that work :) Probably (sure) there are improvement to do... - I have create a table temperature with temp and white point with 100 values between 2000K and 12000K we can obviously change these values, more...with different steps + I have create a table temperature with temp and white point with 118 values between 2000K and 12000K we can obviously change these values, more...with different steps + I have create a table for tint (green)with 134 values between 0.4 to 4. I have create or recuparate and transformed 201 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. I think this value of 201 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized Of course we can increase this number :) @@ -4425,8 +4426,8 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double 1) for the current raw file we create a table for each temp of RGB multipliers 2) then, I choose the "camera temp" to initialize calculation (why not) 3) for this temp, I calculated XYZ values for the 201 spectral datas - 4) then I create for the image an "histogram", but for xyY (Cie 1931 color space) - 5) for each pixel (in fact to accelerate only 1/10 for and 1/10 for y), I determine for each couple xy, the number of occurences + 4) then I create for the image an "histogram", but for xyY (CIE 1931 color space or CIE 1964 (default)) + 5) for each pixel (in fact to accelerate only 1/5 for and 1/5 for y), I determine for each couple xy, the number of occurences, can be change by Itcwb_precis to 3 or 9 6) I sort this result in ascending order 7) in option we can sort in another manner to take into account chroma : chromax = x - white point x, chromay = y - white point y 8) then I compare this result, with spectral datas found above in 3) with deltaE (limited to chroma) @@ -4445,10 +4446,9 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double 20) between these green limits, we make slightly vary temp (settings in options) and recalculated RGB multipliers 21) with this multipliers for the RGB color find in histogram we recalculate xyY 22) we re-adjust references color for these xyY from 20) - 23) we add if chroma image is very low, k colors to degrad correlation - 24) then find all Student correlation for each couple green / temp - 25) sort these Student values, and choose the minimum - 26) then for the 3 better couple "temp / green" choose the one where green is nearest from 1. + 23) then find all Student correlation for each couple green / temp + 24) sort these Student values, and choose the minimum + 25) then for the 3 better couple "temp / green" choose the one where green is nearest from 1. Some variables or function are not used, keep in case of I have test with cat02 but result are not stable enough ! why ??, therefore cat02 neutralized @@ -4468,6 +4468,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color compare to size of histogram real color itcwb_delta : 1 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good itcwb_stdobserver10 : true by default - use standard observer 10°, false = standard observer 2° + itcwb_precis : 5 by default - can be set to 3 or 9 - 3 best sampling but more time...9 "old" settings - but low differences in times with 3 instead of 9 about twice time 160ms instead of 80ms for a big raw file */ // BENCHFUN @@ -4660,7 +4661,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //I don't know how to pass this structure to Colortemp ! // X and Z values calculate for each temp between 2000K to 12000K, so no result after 12000K ! //of course we can change the step between each temp if need - constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after + constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after, Xwb and Ywb calculated with a spreadsheet {2001., 1.273842, 0.145295}, {2101., 1.244008, 0.167533}, {2201., 1.217338, 0.190697}, @@ -4781,7 +4782,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {12001., 0.960440, 1.601019} }; const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - constexpr int Nc = 201 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values + constexpr int Nc = 201 + 1;//201 number of reference spectral colors, I think it is enough to retrieve good values array2D Tx(N_t, Nc); array2D Ty(N_t, Nc); array2D Tz(N_t, Nc); @@ -5196,15 +5197,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY } - //degrade correllation with color high chroma, but not too much...seems not good, but keep in case of?? - //I suppress this old behavior replace by tint += 0.02 - /* if (estimchrom < 0.025f) {//very smal value of chroma for image - //enable strong values - good_spectral[0] = true;//blue - good_spectral[11] = true;//green - good_spectral[62] = true;//red - } -*/ int kkg = -1; for (int i = 0; i < Nc ; ++i) { if (good_spectral[i]) { @@ -5301,7 +5293,7 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D if (wbpar.method == "autitcgreen") { bool extra = false; - if (greenref > 0.5 && greenref < 1.3) {// 0/77 and 1.3 arbitraties values + if (greenref > 0.5 && greenref < 1.3) {// 0.5 and 1.3 arbitraties values greenitc = greenref; if (settings->itcwb_forceextra) { From d63fb77c8c44113d20075900c6e0bb6d29c565c2 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 19 Mar 2020 10:02:28 +0100 Subject: [PATCH 216/264] Fixed crash wavelet clarity softradius --- rtengine/dcrop.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 243ea1b62..640d78b0e 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1028,7 +1028,7 @@ void Crop::update(int todo) array2D ble(labnCrop->W, labnCrop->H); array2D guid(labnCrop->W, labnCrop->H); Imagefloat *tmpImage = nullptr; - tmpImage = new Imagefloat(labnCrop->W, labnCrop->W); + tmpImage = new Imagefloat(labnCrop->W, labnCrop->H); #ifdef _OPENMP #pragma omp parallel for From b1af4b8e4d4fda61e187f3a1b92c7467ed10d5f9 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 20 Mar 2020 10:01:16 +0100 Subject: [PATCH 217/264] Format rawimagesource --- rtengine/rawimagesource.cc | 332 ++++++++++++++++++------------------- 1 file changed, 159 insertions(+), 173 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 6fd59583d..75088a07c 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -55,9 +55,9 @@ namespace { -void rotateLine(const float* const line, rtengine::PlanarPtr &channel, const int tran, const int i, const int w, const int h) +void rotateLine (const float* const line, rtengine::PlanarPtr &channel, const int tran, const int i, const int w, const int h) { - switch (tran & TR_ROT) { + switch(tran & TR_ROT) { case TR_R180: for (int j = 0; j < w; j++) { channel(h - 1 - i, w - 1 - j) = line[j]; @@ -87,15 +87,15 @@ void rotateLine(const float* const line, rtengine::PlanarPtr &channel, co } } -void transLineStandard(const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight) +void transLineStandard (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight) { // conventional CCD coarse rotation - rotateLine(red, image->r, tran, i, imwidth, imheight); - rotateLine(green, image->g, tran, i, imwidth, imheight); - rotateLine(blue, image->b, tran, i, imwidth, imheight); + rotateLine (red, image->r, tran, i, imwidth, imheight); + rotateLine (green, image->g, tran, i, imwidth, imheight); + rotateLine (blue, image->b, tran, i, imwidth, imheight); } -void transLineFuji(const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imheight, const int fw) +void transLineFuji (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imheight, const int fw) { // Fuji SuperCCD rotation + coarse rotation @@ -104,7 +104,7 @@ void transLineFuji(const float* const red, const float* const green, const float int h = (imheight - fw) * 2 + 1; int end = min(h + fw - i, w - fw + i); - switch (tran & TR_ROT) { + switch(tran & TR_ROT) { case TR_R180: for (int j = start; j < end; j++) { int y = i + j - fw; @@ -169,7 +169,7 @@ void transLineD1x (const float* const red, const float* const green, const float // We have to do vertical interpolation for the 'missing' rows // We do that in combination with coarse rotation - switch (tran & TR_ROT) { + switch(tran & TR_ROT) { case TR_R180: // rotate 180 degree for (int j = 0; j < imwidth; j++) { image->r(2 * (imheight - 1 - i), imwidth - 1 - j) = red[j]; @@ -367,9 +367,9 @@ void transLineD1x (const float* const red, const float* const green, const float case TR_NONE: // no coarse rotation default: - rotateLine(red, image->r, tran, 2 * i, imwidth, imheight); - rotateLine(green, image->g, tran, 2 * i, imwidth, imheight); - rotateLine(blue, image->b, tran, 2 * i, imwidth, imheight); + rotateLine (red, image->r, tran, 2 * i, imwidth, imheight); + rotateLine (green, image->g, tran, 2 * i, imwidth, imheight); + rotateLine (blue, image->b, tran, 2 * i, imwidth, imheight); if (i == 1 || i == 2) { // linear interpolation for (int j = 0; j < imwidth; j++) { @@ -423,7 +423,7 @@ void transLineD1x (const float* const red, const float* const green, const float namespace rtengine { -RawImageSource::RawImageSource() +RawImageSource::RawImageSource () : ImageSource() , W(0), H(0) , plistener(nullptr) @@ -465,7 +465,6 @@ RawImageSource::RawImageSource() { embProfile = nullptr; rgbSourceModified = false; - for (int i = 0; i < 4; ++i) { psRedBrightness[i] = psGreenBrightness[i] = psBlueBrightness[i] = 1.f; } @@ -473,7 +472,7 @@ RawImageSource::RawImageSource() //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -RawImageSource::~RawImageSource() +RawImageSource::~RawImageSource () { delete idata; @@ -490,11 +489,11 @@ RawImageSource::~RawImageSource() } if (camProfile) { - cmsCloseProfile(camProfile); + cmsCloseProfile (camProfile); } if (embProfile) { - cmsCloseProfile(embProfile); + cmsCloseProfile (embProfile); } } @@ -520,7 +519,7 @@ int RawImageSource::getRotateDegree() const //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::transformRect(const PreviewProps &pp, int tran, int &ssx1, int &ssy1, int &width, int &height, int &fw) +void RawImageSource::transformRect (const PreviewProps &pp, int tran, int &ssx1, int &ssy1, int &width, int &height, int &fw) { int pp_x = pp.getX() + border; int pp_y = pp.getY() + border; @@ -641,7 +640,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima { MyMutex::MyLock lock(getImageMutex); - tran = defTransform(tran); + tran = defTransform (tran); // compute channel multipliers double r, g, b; @@ -653,7 +652,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima gm = ri->get_pre_mul(1); bm = ri->get_pre_mul(2); } else { - ctemp.getMultipliers(r, g, b); + ctemp.getMultipliers (r, g, b); rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; @@ -697,7 +696,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima defGain = 0.0; // compute image area to render in order to provide the requested part of the image int sx1, sy1, imwidth, imheight, fw, d1xHeightOdd = 0; - transformRect(pp, tran, sx1, sy1, imwidth, imheight, fw); + transformRect (pp, tran, sx1, sy1, imwidth, imheight, fw); // check possible overflows int maximwidth, maximheight; @@ -839,15 +838,15 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima //process all highlight recovery other than "Color" if (doHr) { - hlRecovery(hrp.method, line_red, line_grn, line_blue, imwidth, hlmax); + hlRecovery (hrp.method, line_red, line_grn, line_blue, imwidth, hlmax); } if (d1x) { transLineD1x (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight, d1xHeightOdd, doClip); } else if (fuji) { - transLineFuji(line_red, line_grn, line_blue, ix, image, tran, imheight, fw); + transLineFuji (line_red, line_grn, line_blue, ix, image, tran, imheight, fw); } else { - transLineStandard(line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight); + transLineStandard (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight); } } @@ -906,22 +905,22 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima // Flip if needed if (tran & TR_HFLIP) { - hflip(image); + hflip (image); } if (tran & TR_VFLIP) { - vflip(image); + vflip (image); } // Colour correction (only when running on full resolution) if (pp.getSkip() == 1) { - switch (ri->getSensorType()) { + switch(ri->getSensorType()) { case ST_BAYER: - processFalseColorCorrection(image, raw.bayersensor.ccSteps); + processFalseColorCorrection (image, raw.bayersensor.ccSteps); break; case ST_FUJI_XTRANS: - processFalseColorCorrection(image, raw.xtranssensor.ccSteps); + processFalseColorCorrection (image, raw.xtranssensor.ccSteps); break; case ST_FOVEON: @@ -945,7 +944,6 @@ DCPProfile *RawImageSource::getDCP(const ColorManagementParams &cmp, DCPProfileA if (settings->verbose) { printf("Can't load DCP profile '%s'!\n", cmp.inputProfile.c_str()); } - return nullptr; } @@ -956,13 +954,13 @@ DCPProfile *RawImageSource::getDCP(const ColorManagementParams &cmp, DCPProfileA void RawImageSource::convertColorSpace(Imagefloat* image, const ColorManagementParams &cmp, const ColorTemp &wb) { double pre_mul[3] = { ri->get_pre_mul(0), ri->get_pre_mul(1), ri->get_pre_mul(2) }; - colorSpaceConversion(image, cmp, wb, pre_mul, embProfile, camProfile, imatrices.xyz_cam, (static_cast(getMetaData()))->getCamera()); + colorSpaceConversion (image, cmp, wb, pre_mul, embProfile, camProfile, imatrices.xyz_cam, (static_cast(getMetaData()))->getCamera()); } -void RawImageSource::getFullSize(int& w, int& h, int tr) +void RawImageSource::getFullSize (int& w, int& h, int tr) { - tr = defTransform(tr); + tr = defTransform (tr); if (fuji) { w = ri->get_FujiWidth() * 2 + 1; @@ -987,7 +985,7 @@ void RawImageSource::getFullSize(int& w, int& h, int tr) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::getSize(const PreviewProps &pp, int& w, int& h) +void RawImageSource::getSize (const PreviewProps &pp, int& w, int& h) { w = pp.getWidth() / pp.getSkip() + (pp.getWidth() % pp.getSkip() > 0); h = pp.getHeight() / pp.getSkip() + (pp.getHeight() % pp.getSkip() > 0); @@ -995,20 +993,21 @@ void RawImageSource::getSize(const PreviewProps &pp, int& w, int& h) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::hflip(Imagefloat* image) +void RawImageSource::hflip (Imagefloat* image) { image->hflip(); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::vflip(Imagefloat* image) +void RawImageSource::vflip (Imagefloat* image) { image->vflip(); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) { @@ -1242,10 +1241,9 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) return 0; // OK! } - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse, bool prepareDenoise) +void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse, bool prepareDenoise) { // BENCHFUN MyTime t1, t2; @@ -1299,7 +1297,6 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if (numFrames == 4) { int bufferNumber = 0; - for (unsigned int i=0; i<4; ++i) { if (i==currFrame) { copyOriginalPixels(raw, ri, rid, rif, rawData); @@ -1308,7 +1305,6 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if (!rawDataBuffer[bufferNumber]) { rawDataBuffer[bufferNumber] = new array2D; } - rawDataFrames[i] = rawDataBuffer[bufferNumber]; ++bufferNumber; copyOriginalPixels(raw, riFrames[i], rid, rif, *rawDataFrames[i]); @@ -1330,7 +1326,6 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens } else { copyOriginalPixels(raw, ri, rid, rif, rawData); } - //FLATFIELD end @@ -1381,7 +1376,6 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens // Correct vignetting of lens profile if (!hasFlatField && lensProf.useVign && lensProf.lcMode != LensProfParams::LcMode::NONE) { std::unique_ptr pmap; - if (lensProf.useLensfun()) { pmap = LFDatabase::getInstance()->findModifier(lensProf, idata, W, H, coarse, -1); } else { @@ -1394,7 +1388,6 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if (pmap) { LensCorrection &map = *pmap; - if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS || ri->get_colors() == 1) { if (numFrames == 4) { for (int i = 0; i < 4; ++i) { @@ -1414,7 +1407,7 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if (ri->getSensorType() == ST_BAYER && (raw.hotPixelFilter > 0 || raw.deadPixelFilter > 0)) { if (plistener) { plistener->setProgressStr ("PROGRESSBAR_HOTDEADPIXELFILTER"); - plistener->setProgress(0.0); + plistener->setProgress (0.0); } if (!bitmapBads) { @@ -1481,7 +1474,7 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if (ri->getSensorType() == ST_BAYER && raw.bayersensor.greenthresh > 0) { if (plistener) { plistener->setProgressStr ("PROGRESSBAR_GREENEQUIL"); - plistener->setProgress(0.0); + plistener->setProgress (0.0); } GreenEqulibrateThreshold thresh(0.01 * raw.bayersensor.greenthresh); @@ -1515,7 +1508,7 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if (ri->getSensorType() == ST_BAYER && raw.bayersensor.linenoise > 0) { if (plistener) { plistener->setProgressStr ("PROGRESSBAR_LINEDENOISE"); - plistener->setProgress(0.0); + plistener->setProgress (0.0); } std::unique_ptr line_denoise_rowblender; @@ -1532,9 +1525,8 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens if ((raw.ca_autocorrect || std::fabs(raw.cared) > 0.001 || std::fabs(raw.cablue) > 0.001) && ri->getSensorType() == ST_BAYER) { // Auto CA correction disabled for X-Trans, for now... if (plistener) { plistener->setProgressStr ("PROGRESSBAR_RAWCACORR"); - plistener->setProgress(0.0); + plistener->setProgress (0.0); } - if (numFrames == 4) { double fitParams[64]; float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false, options.chunkSizeCA, options.measure); @@ -1552,8 +1544,8 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens int aehistcompr; double clip = 0; int brightness, contrast, black, hlcompr, hlcomprthresh; - getAutoExpHistogram(aehist, aehistcompr); - ImProcFunctions::getAutoExp(aehist, aehistcompr, clip, dirpyrdenoiseExpComp, brightness, contrast, black, hlcompr, hlcomprthresh); + getAutoExpHistogram (aehist, aehistcompr); + ImProcFunctions::getAutoExp (aehist, aehistcompr, clip, dirpyrdenoiseExpComp, brightness, contrast, black, hlcompr, hlcomprthresh); } t2.set(); @@ -1574,11 +1566,11 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c if (ri->getSensorType() == ST_BAYER) { if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD)) { - hphd_demosaic(); + hphd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4)) { vng4_demosaic (rawData, red, green, blue); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD)) { - ahd_demosaic(); + ahd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE)) { amaze_demosaic_RT (0, 0, W, H, rawData, red, green, blue, options.chunkSizeAMAZE, options.measure); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) @@ -1595,7 +1587,7 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB)) { dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD)) { - eahd_demosaic(); + eahd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)) { igv_interpolate(W, H); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE)) { @@ -1695,20 +1687,20 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, const RetinexParams &retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) { bool useHsl = (retinexParams.retinexcolorspace == "HSLLOG" || retinexParams.retinexcolorspace == "HSLLIN"); - conversionBuffer[0](W - 2 * border, H - 2 * border); - conversionBuffer[1](W - 2 * border, H - 2 * border); - conversionBuffer[2](W - 2 * border, H - 2 * border); - conversionBuffer[3](W - 2 * border, H - 2 * border); + conversionBuffer[0] (W - 2 * border, H - 2 * border); + conversionBuffer[1] (W - 2 * border, H - 2 * border); + conversionBuffer[2] (W - 2 * border, H - 2 * border); + conversionBuffer[3] (W - 2 * border, H - 2 * border); LUTf *retinexgamtab = nullptr;//gamma before and after Retinex to restore tones LUTf lutTonereti; if (retinexParams.gammaretinex == "low") { - retinexgamtab = & (Color::gammatab_115_2); + retinexgamtab = &(Color::gammatab_115_2); } else if (retinexParams.gammaretinex == "mid") { - retinexgamtab = & (Color::gammatab_13_2); + retinexgamtab = &(Color::gammatab_13_2); } else if (retinexParams.gammaretinex == "hig") { - retinexgamtab = & (Color::gammatab_145_3); + retinexgamtab = &(Color::gammatab_145_3); } else if (retinexParams.gammaretinex == "fre") { GammaValues g_a; double pwr = 1.0 / retinexParams.gam; @@ -1744,12 +1736,12 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con double x; if (gamm2 < 1.) { - x = Color::igammareti(val, gamm, start, ts, mul, add); + x = Color::igammareti (val, gamm, start, ts, mul , add); } else { - x = Color::gammareti(val, gamm, start, ts, mul, add); + x = Color::gammareti (val, gamm, start, ts, mul , add); } - lutTonereti[i] = CLIP(x * 65535.); // CLIP avoid in some case extra values + lutTonereti[i] = CLIP(x * 65535.);// CLIP avoid in some case extra values } retinexgamtab = &lutTonereti; @@ -1951,9 +1943,9 @@ void RawImageSource::retinexPrepareCurves(const RetinexParams &retinexParams, LU useHsl = (retinexParams.retinexcolorspace == "HSLLOG" || retinexParams.retinexcolorspace == "HSLLIN"); if (useHsl) { - CurveFactory::curveDehaContL(retinexcontlutili, retinexParams.cdHcurve, cdcurve, 1, lhist16RETI, histLRETI); + CurveFactory::curveDehaContL (retinexcontlutili, retinexParams.cdHcurve, cdcurve, 1, lhist16RETI, histLRETI); } else { - CurveFactory::curveDehaContL(retinexcontlutili, retinexParams.cdcurve, cdcurve, 1, lhist16RETI, histLRETI); + CurveFactory::curveDehaContL (retinexcontlutili, retinexParams.cdcurve, cdcurve, 1, lhist16RETI, histLRETI); } CurveFactory::mapcurve(mapcontlutili, retinexParams.mapcurve, mapcurve, 1, lhist16RETI, histLRETI); @@ -1967,7 +1959,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara t4.set(); if (settings->verbose) { - printf("Applying Retinex\n"); + printf ("Applying Retinex\n"); } LUTf lutToneireti; @@ -1976,11 +1968,11 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara LUTf *retinexigamtab = nullptr;//gamma before and after Retinex to restore tones if (deh.gammaretinex == "low") { - retinexigamtab = & (Color::igammatab_115_2); + retinexigamtab = &(Color::igammatab_115_2); } else if (deh.gammaretinex == "mid") { - retinexigamtab = & (Color::igammatab_13_2); + retinexigamtab = &(Color::igammatab_13_2); } else if (deh.gammaretinex == "hig") { - retinexigamtab = & (Color::igammatab_145_3); + retinexigamtab = &(Color::igammatab_145_3); } else if (deh.gammaretinex == "fre") { GammaValues g_a; double pwr = 1.0 / deh.gam; @@ -2013,9 +2005,9 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara double x; if (gamm2 < 1.) { - x = Color::gammareti(val, gamm, start, ts, mul, add); + x = Color::gammareti (val, gamm, start, ts, mul , add); } else { - x = Color::igammareti(val, gamm, start, ts, mul, add); + x = Color::igammareti (val, gamm, start, ts, mul , add); } lutToneireti[i] = CLIP(x * 65535.); @@ -2029,7 +2021,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara const int HNew = H - 2 * border; const int WNew = W - 2 * border; - array2D LBuffer(WNew, HNew); + array2D LBuffer (WNew, HNew); float **temp = conversionBuffer[2]; // one less dereference LUTf dLcurve; LUTu hist16RET; @@ -2084,7 +2076,8 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara int pos = LBuffer[i][j]; hist16RETThr[pos]++; //histogram in Curve } - } else + } + else for (int j = 0; j < W - 2 * border; j++) { LBuffer[i][j] = temp[i][j]; } @@ -2255,7 +2248,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #endif if (chutili) { // c=f(H) - float valp = float ((chcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f)); + float valp = float((chcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f)); Chprov1 *= (1.f + 2.f * valp); } @@ -2394,10 +2387,10 @@ void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp) if (hrp.hrenabled && hrp.method == "Color") { if (!rgbSourceModified) { if (settings->verbose) { - printf("Applying Highlight Recovery: Color propagation...\n"); + printf ("Applying Highlight Recovery: Color propagation...\n"); } - HLRecovery_inpaint(red, green, blue); + HLRecovery_inpaint (red, green, blue); rgbSourceModified = true; } } @@ -2541,7 +2534,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R c_white[i] = (ri->get_white(i) - cblacksom[i]) / raw.expos + cblacksom[i]; } - initialGain = calculate_scale_mul(scale_mul, ref_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); // recalculate scale colors with adjusted levels + initialGain = calculate_scale_mul(scale_mul, ref_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); // recalculate scale colors with adjusted levels //fprintf(stderr, "recalc: %f [%f %f %f %f]\n", initialGain, scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]); for (int i = 0; i < 4 ; i++) { @@ -2677,7 +2670,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -int RawImageSource::defTransform(int tran) +int RawImageSource::defTransform (int tran) { int deg = ri->get_rotateDegree(); @@ -2716,7 +2709,7 @@ int RawImageSource::defTransform(int tran) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // Thread called part -void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2D &rbconv_Y, array2D &rbconv_I, array2D &rbconv_Q, array2D &rbout_I, array2D &rbout_Q, const int row_from, const int row_to) +void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D &rbconv_Y, array2D &rbconv_I, array2D &rbconv_Q, array2D &rbout_I, array2D &rbout_Q, const int row_from, const int row_to) { const int W = im->getWidth(); @@ -2738,8 +2731,8 @@ void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2Dr(row_from - 1), im->g(row_from - 1), im->b(row_from - 1), rbconv_Y[px], rbconv_I[px], rbconv_Q[px], W); - convert_row_to_YIQ(im->r(row_from), im->g(row_from), im->b(row_from), rbconv_Y[cx], rbconv_I[cx], rbconv_Q[cx], W); + convert_row_to_YIQ (im->r(row_from - 1), im->g(row_from - 1), im->b(row_from - 1), rbconv_Y[px], rbconv_I[px], rbconv_Q[px], W); + convert_row_to_YIQ (im->r(row_from), im->g(row_from), im->b(row_from), rbconv_Y[cx], rbconv_I[cx], rbconv_Q[cx], W); for (int j = 0; j < W; j++) { rbout_I[px][j] = rbconv_I[px][j]; @@ -2752,11 +2745,11 @@ void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2Dr(i + 1), im->g(i + 1), im->b(i + 1), rbconv_Y[nx], rbconv_I[nx], rbconv_Q[nx], W); + convert_row_to_YIQ (im->r(i + 1), im->g(i + 1), im->b(i + 1), rbconv_Y[nx], rbconv_I[nx], rbconv_Q[nx], W); #ifdef __SSE2__ - pre1[0] = _mm_setr_ps(rbconv_I[px][0], rbconv_Q[px][0], 0, 0), pre1[1] = _mm_setr_ps(rbconv_I[cx][0], rbconv_Q[cx][0], 0, 0), pre1[2] = _mm_setr_ps(rbconv_I[nx][0], rbconv_Q[nx][0], 0, 0); - pre2[0] = _mm_setr_ps(rbconv_I[px][1], rbconv_Q[px][1], 0, 0), pre2[1] = _mm_setr_ps(rbconv_I[cx][1], rbconv_Q[cx][1], 0, 0), pre2[2] = _mm_setr_ps(rbconv_I[nx][1], rbconv_Q[nx][1], 0, 0); + pre1[0] = _mm_setr_ps(rbconv_I[px][0], rbconv_Q[px][0], 0, 0) , pre1[1] = _mm_setr_ps(rbconv_I[cx][0], rbconv_Q[cx][0], 0, 0), pre1[2] = _mm_setr_ps(rbconv_I[nx][0], rbconv_Q[nx][0], 0, 0); + pre2[0] = _mm_setr_ps(rbconv_I[px][1], rbconv_Q[px][1], 0, 0) , pre2[1] = _mm_setr_ps(rbconv_I[cx][1], rbconv_Q[cx][1], 0, 0), pre2[2] = _mm_setr_ps(rbconv_I[nx][1], rbconv_Q[nx][1], 0, 0); // fill first element in rbout_I and rbout_Q rbout_I[cx][0] = rbconv_I[cx][0]; @@ -2829,7 +2822,7 @@ void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2D row_from) { - convert_to_RGB(im->r(i - 1, 0), im->g(i - 1, 0), im->b(i - 1, 0), rbconv_Y[px][0], rbout_I[px][0], rbout_Q[px][0]); + convert_to_RGB (im->r(i - 1, 0), im->g(i - 1, 0), im->b(i - 1, 0), rbconv_Y[px][0], rbout_I[px][0], rbout_Q[px][0]); #ifdef _OPENMP #pragma omp simd @@ -2838,15 +2831,15 @@ void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2Dr(i - 1, j), im->g(i - 1, j), im->b(i - 1, j), rbconv_Y[px][j], I, Q); + convert_to_RGB (im->r(i - 1, j), im->g(i - 1, j), im->b(i - 1, j), rbconv_Y[px][j], I, Q); } - convert_to_RGB(im->r(i - 1, W - 1), im->g(i - 1, W - 1), im->b(i - 1, W - 1), rbconv_Y[px][W - 1], rbout_I[px][W - 1], rbout_Q[px][W - 1]); + convert_to_RGB (im->r(i - 1, W - 1), im->g(i - 1, W - 1), im->b(i - 1, W - 1), rbconv_Y[px][W - 1], rbout_I[px][W - 1], rbout_Q[px][W - 1]); } } // blur last 3 row and finalize H-1th row - convert_to_RGB(im->r(row_to - 1, 0), im->g(row_to - 1, 0), im->b(row_to - 1, 0), rbconv_Y[cx][0], rbout_I[cx][0], rbout_Q[cx][0]); + convert_to_RGB (im->r(row_to - 1, 0), im->g(row_to - 1, 0), im->b(row_to - 1, 0), rbconv_Y[cx][0], rbout_I[cx][0], rbout_Q[cx][0]); #ifdef _OPENMP #pragma omp simd #endif @@ -2854,16 +2847,16 @@ void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2Dr(row_to - 1, j), im->g(row_to - 1, j), im->b(row_to - 1, j), rbconv_Y[cx][j], I, Q); + convert_to_RGB (im->r(row_to - 1, j), im->g(row_to - 1, j), im->b(row_to - 1, j), rbconv_Y[cx][j], I, Q); } - convert_to_RGB(im->r(row_to - 1, W - 1), im->g(row_to - 1, W - 1), im->b(row_to - 1, W - 1), rbconv_Y[cx][W - 1], rbout_I[cx][W - 1], rbout_Q[cx][W - 1]); + convert_to_RGB (im->r(row_to - 1, W - 1), im->g(row_to - 1, W - 1), im->b(row_to - 1, W - 1), rbconv_Y[cx][W - 1], rbout_I[cx][W - 1], rbout_Q[cx][W - 1]); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // correction_YIQ_LQ -void RawImageSource::processFalseColorCorrection(Imagefloat* im, const int steps) +void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int steps) { if (im->getHeight() < 4 || steps < 1) { @@ -2873,7 +2866,7 @@ void RawImageSource::processFalseColorCorrection(Imagefloat* im, const int steps #ifdef _OPENMP #pragma omp parallel { - multi_array2D buffer(W, 3); + multi_array2D buffer (W, 3); int tid = omp_get_thread_num(); int nthreads = omp_get_num_threads(); int blk = (im->getHeight() - 2) / nthreads; @@ -2881,19 +2874,19 @@ void RawImageSource::processFalseColorCorrection(Imagefloat* im, const int steps for (int t = 0; t < steps; t++) { if (tid < nthreads - 1) { - processFalseColorCorrectionThread(im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, 1 + (tid + 1)*blk); + processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, 1 + (tid + 1)*blk); } else { - processFalseColorCorrectionThread(im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, im->getHeight() - 1); + processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, im->getHeight() - 1); } #pragma omp barrier } } #else - multi_array2D buffer(W, 3); + multi_array2D buffer (W, 3); for (int t = 0; t < steps; t++) { - processFalseColorCorrectionThread(im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1, im->getHeight() - 1); + processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 , im->getHeight() - 1); } #endif @@ -2967,7 +2960,7 @@ lab2ProphotoRgbD50(float L, float A, float B, float& r, float& g, float& b) } // Converts raw image including ICC input profile to working space - floating point version -void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagementParams& cmp, const ColorTemp &wb, double pre_mul[3], cmsHPROFILE embedded, cmsHPROFILE camprofile, double camMatrix[3][3], const std::string &camName) +void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagementParams& cmp, const ColorTemp &wb, double pre_mul[3], cmsHPROFILE embedded, cmsHPROFILE camprofile, double camMatrix[3][3], const std::string &camName) { // MyTime t1, t2, t3; @@ -3093,7 +3086,7 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement // Initialize transform cmsHTRANSFORM hTransform; - cmsHPROFILE prophoto = ICCStore::getInstance()->workingSpace("ProPhoto"); // We always use Prophoto to apply the ICC profile to minimize problems with clipping in LUT conversion. + cmsHPROFILE prophoto = ICCStore::getInstance()->workingSpace("ProPhoto"); // We always use Prophoto to apply the ICC profile to minimize problems with clipping in LUT conversion. bool transform_via_pcs_lab = false; bool separate_pcs_lab_highlights = false; @@ -3123,7 +3116,7 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement } } - lcmsMutex->lock(); + lcmsMutex->lock (); switch (camera_icc_type) { case CAMERA_ICC_TYPE_PHASE_ONE: @@ -3154,19 +3147,19 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement break; } - lcmsMutex->unlock(); + lcmsMutex->unlock (); if (hTransform == nullptr) { // Fallback: create transform from camera profile. Should not happen normally. - lcmsMutex->lock(); + lcmsMutex->lock (); hTransform = cmsCreateTransform (camprofile, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); - lcmsMutex->unlock(); + lcmsMutex->unlock (); } TMatrix toxyz = {}, torgb = {}; if (!working_space_is_prophoto) { - toxyz = ICCStore::getInstance()->workingSpaceMatrix("ProPhoto"); + toxyz = ICCStore::getInstance()->workingSpaceMatrix ("ProPhoto"); torgb = ICCStore::getInstance()->workingSpaceInverseMatrix (cmp.workingProfile); //sRGB .. Adobe...Wide... } @@ -3186,9 +3179,9 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement // Apply pre-processing for (int w = 0; w < im->getWidth(); ++w) { - float r = * (pR++); - float g = * (pG++); - float b = * (pB++); + float r = *(pR++); + float g = *(pG++); + float b = *(pB++); // convert to 0-1 range as LCMS expects that r /= 65535.0f; @@ -3250,16 +3243,16 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement break; } - * (p++) = r; - * (p++) = g; - * (p++) = b; + *(p++) = r; + *(p++) = g; + *(p++) = b; } // Run icc transform - cmsDoTransform(hTransform, buffer.data, buffer.data, im->getWidth()); + cmsDoTransform (hTransform, buffer.data, buffer.data, im->getWidth()); if (separate_pcs_lab_highlights) { - cmsDoTransform(hTransform, hl_buffer.data, hl_buffer.data, im->getWidth()); + cmsDoTransform (hTransform, hl_buffer.data, hl_buffer.data, im->getWidth()); } // Apply post-processing @@ -3273,9 +3266,9 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement float r, g, b, hr = 0.f, hg = 0.f, hb = 0.f; if (transform_via_pcs_lab) { - float L = * (p++); - float A = * (p++); - float B = * (p++); + float L = *(p++); + float A = *(p++); + float B = *(p++); // profile connection space CIELAB should have D50 illuminant lab2ProphotoRgbD50(L, A, B, r, g, b); @@ -3283,9 +3276,9 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement lab2ProphotoRgbD50(hl_buffer.data[3 * w + 0], hl_buffer.data[3 * w + 1], hl_buffer.data[3 * w + 2], hr, hg, hb); } } else { - r = * (p++); - g = * (p++); - b = * (p++); + r = *(p++); + g = *(p++); + b = *(p++); } // restore pre-processing and/or add post-processing for the various ICC types @@ -3304,7 +3297,7 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement if (maxc > mix) { float fac = (maxc - mix) / (1.0 - mix); - fac = sqrtf(sqrtf(fac)); // gamma 0.25 to mix in highlight render relatively quick + fac = sqrtf(sqrtf(fac)); // gamma 0.25 to mix in highlight render relatively quick r = (1.0 - fac) * r + fac * hr; g = (1.0 - fac) * g + fac * hg; b = (1.0 - fac) * b + fac * hb; @@ -3349,9 +3342,9 @@ void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagement g *= 65535.0; b *= 65535.0; - * (pR++) = r; - * (pG++) = g; - * (pB++) = b; + *(pR++) = r; + *(pG++) = g; + *(pB++) = b; } } } // End of parallelization @@ -3385,7 +3378,7 @@ bool RawImageSource::findInputProfile(Glib::ustring inProfile, cmsHPROFILE embed } else if (inProfile != "(camera)" && !inProfile.empty()) { Glib::ustring normalName = inProfile; - if (!inProfile.compare(0, 5, "file:")) { + if (!inProfile.compare (0, 5, "file:")) { normalName = inProfile.substr(5); } @@ -3394,7 +3387,7 @@ bool RawImageSource::findInputProfile(Glib::ustring inProfile, cmsHPROFILE embed } if (*dcpProf == nullptr) { - in = ICCStore::getInstance()->getProfile(inProfile); + in = ICCStore::getInstance()->getProfile (inProfile); } } @@ -3535,7 +3528,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi } } -void RawImageSource::HLRecovery_Luminance(float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, int width, float maxval) +void RawImageSource::HLRecovery_Luminance (float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, int width, float maxval) { for (int i = 0; i < width; i++) { @@ -3573,8 +3566,8 @@ void RawImageSource::HLRecovery_Luminance(float* rin, float* gin, float* bin, fl //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::HLRecovery_CIELab(float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, - int width, float maxval, double xyz_cam[3][3], double cam_xyz[3][3]) +void RawImageSource::HLRecovery_CIELab (float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, + int width, float maxval, double xyz_cam[3][3], double cam_xyz[3][3]) { //static bool crTableReady = false; @@ -3634,10 +3627,11 @@ void RawImageSource::hlRecovery (const std::string &method, float* red, float* g { if (method == "Luminance") { - HLRecovery_Luminance(red, green, blue, red, green, blue, width, 65535.0); + HLRecovery_Luminance (red, green, blue, red, green, blue, width, 65535.0); } else if (method == "CIELab blending") { - HLRecovery_CIELab(red, green, blue, red, green, blue, width, 65535.0, imatrices.xyz_cam, imatrices.cam_xyz); - } else if (method == "Blend") { // derived from Dcraw + HLRecovery_CIELab (red, green, blue, red, green, blue, width, 65535.0, imatrices.xyz_cam, imatrices.cam_xyz); + } + else if (method == "Blend") { // derived from Dcraw HLRecovery_blend(red, green, blue, width, 65535.0, hlmax); } @@ -3645,7 +3639,7 @@ void RawImageSource::hlRecovery (const std::string &method, float* red, float* g //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr) +void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) { // BENCHFUN histcompr = 3; @@ -3666,7 +3660,7 @@ void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr) for (int i = border; i < H - border; i++) { int start, end; - getRowStartEnd(i, start, end); + getRowStartEnd (i, start, end); if (ri->getSensorType() == ST_BAYER) { // precalculate factors to avoid expensive per pixel calculations @@ -3727,7 +3721,7 @@ void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr) } // Histogram MUST be 256 in size; gamma is applied, blackpoint and gain also -void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw) +void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw) { // BENCHFUN histRedRaw.clear(); @@ -3794,7 +3788,7 @@ void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUT for (int i = border; i < H - border; i++) { int start, end; - getRowStartEnd(i, start, end); + getRowStartEnd (i, start, end); if (ri->getSensorType() == ST_BAYER) { int j; @@ -3888,7 +3882,7 @@ void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUT //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::getRowStartEnd(int x, int &start, int &end) +void RawImageSource::getRowStartEnd (int x, int &start, int &end) { if (fuji) { int fw = ri->get_FujiWidth(); @@ -5620,7 +5614,7 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref } -void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm) +void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) { // BENCHFUN constexpr double clipHigh = 64000.0; @@ -5761,7 +5755,7 @@ void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm) //determine GRBG coset; (ey,ex) is the offset of the R subarray int ey, ex; - if (ri->ISGREEN(0, 0)) { //first pixel is G + if (ri->ISGREEN(0, 0)) { //first pixel is G if (ri->ISRED(0, 1)) { ey = 0; ex = 1; @@ -5822,7 +5816,7 @@ void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm) } if (settings->verbose) { - printf("AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); + printf ("AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); } // return ColorTemp (pow(avg_r/rn, 1.0/6.0)*img_r, pow(avg_g/gn, 1.0/6.0)*img_g, pow(avg_b/bn, 1.0/6.0)*img_b); @@ -5836,7 +5830,7 @@ void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm) blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; } -ColorTemp RawImageSource::getSpotWB(std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) +ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) { int x; @@ -5849,7 +5843,7 @@ ColorTemp RawImageSource::getSpotWB(std::vector &red, std::vector &red, std::vector= 0 && yv >= 0 && xv < W && yv < H) { - if (ri->ISXTRANSRED(yv, xv)) { //RED + if (ri->ISXTRANSRED(yv, xv)) { //RED rloc += (rawData[yv][xv]); rnbrs++; continue; - } else if (ri->ISXTRANSBLUE(yv, xv)) { //BLUE + } else if (ri->ISXTRANSBLUE(yv, xv)) { //BLUE bloc += (rawData[yv][xv]); bnbrs++; continue; @@ -5892,9 +5886,9 @@ ColorTemp RawImageSource::getSpotWB(std::vector &red, std::vector 52500 || initialGain * (rawData[yg][3 * xg + 1]) > 52500 || @@ -5921,7 +5915,7 @@ ColorTemp RawImageSource::getSpotWB(std::vector &red, std::vector &red, std::vector &red, std::vector &red, std::vector &red, std::vector cForwardPoints; - cForwardPoints.push_back(double (DCT_Spline)); // The first value is the curve type + cForwardPoints.push_back(double(DCT_Spline)); // The first value is the curve type std::vector cInversePoints; - cInversePoints.push_back(double (DCT_Spline)); // The first value is the curve type + cInversePoints.push_back(double(DCT_Spline)); // The first value is the curve type for (unsigned int i = 0; i < sizeof(phase_one_forward) / sizeof(phase_one_forward[0]); i += 2) { cForwardPoints.push_back(phase_one_forward[i + 0]); @@ -6185,15 +6179,14 @@ void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int int ynew = y + border; rotate += ri->get_rotateDegree(); rotate %= 360; - if (rotate == 90) { - std::swap(xnew, ynew); + std::swap(xnew,ynew); ynew = H - 1 - ynew; } else if (rotate == 180) { xnew = W - 1 - xnew; ynew = H - 1 - ynew; } else if (rotate == 270) { - std::swap(xnew, ynew); + std::swap(xnew,ynew); xnew = W - 1 - xnew; } @@ -6201,23 +6194,16 @@ void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int ynew = LIM(ynew, 0, H - 1); int c = ri->getSensorType() == ST_FUJI_XTRANS ? ri->XTRANSFC(ynew,xnew) : ri->FC(ynew,xnew); int val = round(rawData[ynew][xnew] / scale_mul[c]); - if (c == 0) { - R = val; - G = 0; - B = 0; + R = val; G = 0; B = 0; } else if (c == 2) { - R = 0; - G = 0; - B = val; + R = 0; G = 0; B = val; } else { - R = 0; - G = val; - B = 0; + R = 0; G = val; B = 0; } } -void RawImageSource::cleanup() +void RawImageSource::cleanup () { delete phaseOneIccCurve; delete phaseOneIccCurveInv; From 1f4613cd3b3b396e00a93a3a36b7d1bcdae167f8 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 22 Mar 2020 10:37:21 +0100 Subject: [PATCH 218/264] GUI for TM wavelet --- rtdata/languages/default | 10 +++- rtengine/curves.cc | 35 ++++++++++++++ rtengine/curves.h | 24 ++++++++++ rtengine/dcrop.cc | 3 +- rtengine/improccoordinator.cc | 18 ++++++- rtengine/improccoordinator.h | 1 + rtengine/procparams.cc | 28 +++++++++++ rtengine/procparams.h | 6 +++ rtengine/simpleprocess.cc | 3 +- rtgui/paramsedited.cc | 24 ++++++++++ rtgui/paramsedited.h | 4 ++ rtgui/wavelet.cc | 90 +++++++++++++++++++++++++++++++++-- rtgui/wavelet.h | 12 ++++- 13 files changed, 248 insertions(+), 10 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index fe6ddaa7c..e957a5e2a 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -802,6 +802,10 @@ HISTORY_MSG_WAVSIGMA;Sigma HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method +HISTORY_MSG_THRESWAV;Balance threshold +HISTORY_MSG_SOFTWAV;Soft radius +HISTORY_MSG_TMSHAPE;Compression by level +HISTORY_MSG_WAVTM;Tone mapping wavelet HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2267,6 +2271,7 @@ TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are tr TP_WAVELET_SKY;Sky targetting/protection TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. TP_WAVELET_SOFTRAD;Soft Radius +TP_WAVELET_SOFWAV;Soft Radius TP_WAVELET_STREN;Strength TP_WAVELET_STRENGTH;Strength TP_WAVELET_SUPE;Extra @@ -2275,17 +2280,20 @@ TP_WAVELET_THRESHOLD;Highlight levels TP_WAVELET_THRESHOLD2;Shadow levels TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels between 9 and 9 minus the value will be affected by the shadow luminance range. Other levels will be fully treated. The highest level possible is limited by the highlight level value (9 minus highlight level value). TP_WAVELET_THRESHOLD_TOOLTIP;Only levels beyond the chosen value will be affected by the highlight luminance range. Other levels will be fully treated. The chosen value here limits the highest possible value of the shadow levels. +TP_WAVELET_THRESWAV;Balance Threshold TP_WAVELET_THRH;Highlights threshold TP_WAVELET_TILESBIG;Big tiles TP_WAVELET_TILESFULL;Full image TP_WAVELET_TILESIZE;Tiling method TP_WAVELET_TILESLIT;Little tiles TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. +TP_WAVELET_TM;Tone mapping wavelet TP_WAVELET_TMEDGS;Edge stopping TP_WAVELET_TMSCALE;Scale TP_WAVELET_TMSTRENGTH;Compression strength TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. -TP_WAVELET_TMTYPE;Compression method +TP_WAVELET_TMEDGS;Edge stopping +TP_WAVELET_TMURVE;(un)Compression by Level TP_WAVELET_TON;Toning TP_WAVELET_USH;None TP_WAVELET_USHARP;Clarity method diff --git a/rtengine/curves.cc b/rtengine/curves.cc index a2b5d1d2b..a3e327dbf 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -1209,6 +1209,41 @@ void WavCurve::Set(const std::vector &curvePoints) } } +WavtmCurve::WavtmCurve() {} + +void WavtmCurve::Reset() +{ + luttmCurve.reset(); +} + +void WavtmCurve::Set(const Curve &pCurve) +{ + if (pCurve.isIdentity()) { + Reset(); // raise this value if the quality suffers from this number of samples + return; + } + + luttmCurve(501); // raise this value if the quality suffers from this number of samples + + for (int i = 0; i < 501; i++) { + luttmCurve[i] = pCurve.getVal(double(i) / 500.); + } +} + +void WavtmCurve::Set(const std::vector &curvePoints) +{ + if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { + FlatCurve tcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); + tcurve.setIdentityValue(0.); + Set(tcurve); + } else { + Reset(); + } + +} + + + WavOpacityCurveRG::WavOpacityCurveRG() {} diff --git a/rtengine/curves.h b/rtengine/curves.h index c5bb0c18f..380bad9d6 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -627,6 +627,30 @@ public: } }; +class WavtmCurve +{ +private: + LUTf luttmCurve; // 0xffff range + void Set(const Curve &pCurve); +public: + virtual ~WavtmCurve() {}; + WavtmCurve(); + + void Reset(); + // void Set(const std::vector &curvePoints, bool &opautili); + void Set(const std::vector &curvePoints); + float operator[](float index) const + { + return luttmCurve[index]; + } + + operator bool (void) const + { + return luttmCurve; + } +}; + + class WavOpacityCurveRG { private: diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 640d78b0e..c2de5e0c5 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -967,13 +967,14 @@ void Crop::update(int todo) } WavCurve wavCLVCurve; + WavtmCurve wavtmCurve; WavOpacityCurveRG waOpacityCurveRG; WavOpacityCurveBY waOpacityCurveBY; WavOpacityCurveW waOpacityCurveW; WavOpacityCurveWL waOpacityCurveWL; LUTf wavclCurve; - params.wavelet.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); + params.wavelet.getCurves(wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); LabImage *unshar = nullptr; Glib::ustring provis; LabImage *provradius = nullptr; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 9bef5b502..682b26410 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -867,7 +867,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if ((params->wavelet.enabled)) { WaveletParams WaveParams = params->wavelet; - WaveParams.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); + WaveParams.getCurves(wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); int kall = 0; LabImage *unshar = nullptr; Glib::ustring provis; @@ -885,8 +885,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } if (WaveParams.softrad > 0.f) { + printf("s1\n"); provradius = new LabImage(pW, pH); provradius->CopyFrom(nprevl); + printf("s2\n"); } @@ -922,10 +924,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) WaveParams.expnoise = pronois; if (WaveParams.softrad > 0.f) { + printf("s3\n"); + array2D ble(pW, pH); array2D guid(pW, pH); Imagefloat *tmpImage = nullptr; tmpImage = new Imagefloat(pW, pH); + printf("s4\n"); + #ifdef _OPENMP #pragma omp parallel for #endif @@ -948,6 +954,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) tmpImage->b(ir, jr) = Z; ble[ir][jr] = Y / 32768.f; } + printf("s5\n"); + double epsilmax = 0.0001; double epsilmin = 0.00001; double aepsil = (epsilmax - epsilmin) / 90.f; @@ -957,6 +965,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float blur = 10.f / scale * (0.0001f + 0.8f * WaveParams.softrad); // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); + printf("s6\n"); @@ -973,7 +982,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) Color::XYZ2Lab(X, Y, Z, L, a, b); nprevl->L[ir][jr] = L; } + printf("s7\n"); + delete tmpImage; + printf("s8\n"); } @@ -1063,8 +1075,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } */ if (WaveParams.softrad > 0.f) { + printf("s9\n"); + delete provradius; provradius = NULL; + printf("s10\n"); + } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 454294beb..c797986e5 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -139,6 +139,7 @@ protected: NoiseCurve noiseLCurve; NoiseCurve noiseCCurve; WavCurve wavCLVCurve; + WavtmCurve wavtmCurve; WavOpacityCurveRG waOpacityCurveRG; WavOpacityCurveBY waOpacityCurveBY; WavOpacityCurveW waOpacityCurveW; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index e795d9bd9..cf5a693f8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2164,6 +2164,17 @@ WaveletParams::WaveletParams() : 0.35, 0.35 }, + tmcurve{ + static_cast(FCT_MinMaxCPoints), + 0.0, + 0.75, + 0.35, + 0.35, + 1.0, + 0.75, + 0.35, + 0.35 + }, opacityCurveRG{ static_cast(FCT_MinMaxCPoints), 0.0, @@ -2252,6 +2263,7 @@ WaveletParams::WaveletParams() : c{}, ch{}, expedge(false), + exptm(false), expresid(false), expfinal(false), exptoning(false), @@ -2300,6 +2312,8 @@ WaveletParams::WaveletParams() : thrH(70), radius(40), skinprotect(0.0), + threswav(1.4), + softwav(1.0), hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), @@ -2318,6 +2332,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const { return ccwcurve == other.ccwcurve + && tmcurve == other.tmcurve && opacityCurveRG == other.opacityCurveRG && opacityCurveBY == other.opacityCurveBY && opacityCurveW == other.opacityCurveW @@ -2359,6 +2374,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const return true; }() && expedge == other.expedge + && exptm == other.exptm && expresid == other.expresid && expfinal == other.expfinal && expclari == other.expclari @@ -2407,6 +2423,8 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && thrH == other.thrH && radius == other.radius && skinprotect == other.skinprotect + && threswav == other.threswav + && softwav == other.softwav && hueskin == other.hueskin && hueskin2 == other.hueskin2 && hllev == other.hllev @@ -2427,6 +2445,7 @@ bool WaveletParams::operator !=(const WaveletParams& other) const void WaveletParams::getCurves( WavCurve& cCurve, + WavtmCurve& tCurve, WavOpacityCurveRG& opacityCurveLUTRG, WavOpacityCurveBY& opacityCurveLUTBY, WavOpacityCurveW& opacityCurveLUTW, @@ -2434,6 +2453,7 @@ void WaveletParams::getCurves( ) const { cCurve.Set(this->ccwcurve); + tCurve.Set(this->tmcurve); opacityCurveLUTRG.Set(this->opacityCurveRG); opacityCurveLUTBY.Set(this->opacityCurveBY); opacityCurveLUTW.Set(this->opacityCurveW); @@ -3494,6 +3514,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.expcontrast, "Wavelet", "Expcontrast", wavelet.expcontrast, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expchroma, "Wavelet", "Expchroma", wavelet.expchroma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expedge, "Wavelet", "Expedge", wavelet.expedge, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.exptm, "Wavelet", "Exptm", wavelet.exptm, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expresid, "Wavelet", "Expresid", wavelet.expresid, keyFile); saveToKeyfile(!pedited || pedited->wavelet.expfinal, "Wavelet", "Expfinal", wavelet.expfinal, keyFile); saveToKeyfile(!pedited || pedited->wavelet.exptoning, "Wavelet", "Exptoning", wavelet.exptoning, keyFile); @@ -3541,6 +3562,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.TMmethod, "Wavelet", "TMMethod", wavelet.TMmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.chro, "Wavelet", "ChromaLink", wavelet.chro, keyFile); saveToKeyfile(!pedited || pedited->wavelet.ccwcurve, "Wavelet", "ContrastCurve", wavelet.ccwcurve, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.tmcurve, "Wavelet", "TMCurve", wavelet.tmcurve, keyFile); saveToKeyfile(!pedited || pedited->wavelet.pastlev, "Wavelet", "Pastlev", wavelet.pastlev.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.satlev, "Wavelet", "Satlev", wavelet.satlev.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.opacityCurveRG, "Wavelet", "OpacityCurveRG", wavelet.opacityCurveRG, keyFile); @@ -3556,6 +3578,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.cbenab, "Wavelet", "CBenab", wavelet.cbenab, keyFile); saveToKeyfile(!pedited || pedited->wavelet.lipst, "Wavelet", "Lipst", wavelet.lipst, keyFile); saveToKeyfile(!pedited || pedited->wavelet.skinprotect, "Wavelet", "Skinprotect", wavelet.skinprotect, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.threswav, "Wavelet", "Threswav", wavelet.threswav, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.softwav, "Wavelet", "Softwav", wavelet.softwav, keyFile); saveToKeyfile(!pedited || pedited->wavelet.hueskin, "Wavelet", "Hueskin", wavelet.hueskin.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgrad, "Wavelet", "Edgrad", wavelet.edgrad, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgval, "Wavelet", "Edgval", wavelet.edgval, keyFile); @@ -4710,6 +4734,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidHighLight", pedited, wavelet.thrH, pedited->wavelet.thrH); assignFromKeyfile(keyFile, "Wavelet", "Residualradius", pedited, wavelet.radius, pedited->wavelet.radius); assignFromKeyfile(keyFile, "Wavelet", "ContrastCurve", pedited, wavelet.ccwcurve, pedited->wavelet.ccwcurve); + assignFromKeyfile(keyFile, "Wavelet", "TMCurve", pedited, wavelet.tmcurve, pedited->wavelet.tmcurve); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveRG", pedited, wavelet.opacityCurveRG, pedited->wavelet.opacityCurveRG); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveBY", pedited, wavelet.opacityCurveBY, pedited->wavelet.opacityCurveBY); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveW", pedited, wavelet.opacityCurveW, pedited->wavelet.opacityCurveW); @@ -4851,6 +4876,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } assignFromKeyfile(keyFile, "Wavelet", "Skinprotect", pedited, wavelet.skinprotect, pedited->wavelet.skinprotect); + assignFromKeyfile(keyFile, "Wavelet", "Threswav", pedited, wavelet.threswav, pedited->wavelet.threswav); + assignFromKeyfile(keyFile, "Wavelet", "Softwav", pedited, wavelet.softwav, pedited->wavelet.softwav); assignFromKeyfile(keyFile, "Wavelet", "Expcontrast", pedited, wavelet.expcontrast, pedited->wavelet.expcontrast); assignFromKeyfile(keyFile, "Wavelet", "Expchroma", pedited, wavelet.expchroma, pedited->wavelet.expchroma); @@ -4881,6 +4908,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } assignFromKeyfile(keyFile, "Wavelet", "Expedge", pedited, wavelet.expedge, pedited->wavelet.expedge); + assignFromKeyfile(keyFile, "Wavelet", "Exptm", pedited, wavelet.exptm, pedited->wavelet.exptm); assignFromKeyfile(keyFile, "Wavelet", "Expresid", pedited, wavelet.expresid, pedited->wavelet.expresid); assignFromKeyfile(keyFile, "Wavelet", "Expfinal", pedited, wavelet.expfinal, pedited->wavelet.expfinal); assignFromKeyfile(keyFile, "Wavelet", "Exptoning", pedited, wavelet.exptoning, pedited->wavelet.exptoning); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index aabe1e7ae..9bfdaab13 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -40,6 +40,7 @@ class OpacityCurve; class RetinexgaintransmissionCurve; class RetinextransmissionCurve; class WavCurve; +class WavtmCurve; class WavOpacityCurveBY; class WavOpacityCurveRG; class WavOpacityCurveW; @@ -1185,6 +1186,7 @@ private: struct WaveletParams { std::vector ccwcurve; + std::vector tmcurve; std::vector opacityCurveRG; std::vector opacityCurveBY; std::vector opacityCurveW; @@ -1220,6 +1222,7 @@ struct WaveletParams { int c[9]; int ch[9]; bool expedge; + bool exptm; bool expresid; bool expfinal; bool exptoning; @@ -1269,6 +1272,8 @@ struct WaveletParams { int thrH; int radius; double skinprotect; + double threswav; + double softwav; Threshold hueskin; Threshold hueskin2; Threshold hllev; @@ -1288,6 +1293,7 @@ struct WaveletParams { void getCurves( WavCurve& cCurve, + WavtmCurve& tCurve, WavOpacityCurveRG& opacityCurveLUTRG, WavOpacityCurveBY& opacityCurveLUTBY, diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 6b9d86baf..e519d5a56 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1120,6 +1120,7 @@ private: bool wavcontlutili = false; WaveletParams WaveParams = params.wavelet; WavCurve wavCLVCurve; + WavtmCurve wavtmCurve; WavOpacityCurveRG waOpacityCurveRG; WavOpacityCurveBY waOpacityCurveBY; WavOpacityCurveW waOpacityCurveW; @@ -1143,7 +1144,7 @@ private: provradius->CopyFrom(labView); } - params.wavelet.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); + params.wavelet.getCurves(wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL); CurveFactory::curveWavContL(wavcontlutili, params.wavelet.wavclCurve, wavclCurve,/* hist16C, dummy,*/ 1); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 48ba4c341..f954a171a 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -541,11 +541,14 @@ void ParamsEdited::set(bool v) wavelet.hllev = v; wavelet.bllev = v; wavelet.edgcont = v; + wavelet.threswav = v; + wavelet.softwav = v; wavelet.level0noise = v; wavelet.level1noise = v; wavelet.level2noise = v; wavelet.level3noise = v; wavelet.ccwcurve = v; + wavelet.tmcurve = v; wavelet.opacityCurveRG = v; wavelet.opacityCurveBY = v; wavelet.opacityCurveW = v; @@ -565,6 +568,7 @@ void ParamsEdited::set(bool v) wavelet.expcontrast = v; wavelet.expchroma = v; wavelet.expedge = v; + wavelet.exptm = v; wavelet.expresid = v; wavelet.exptoning = v; wavelet.expnoise = v; @@ -1136,6 +1140,8 @@ void ParamsEdited::initFrom(const std::vector& wavelet.hllev = wavelet.hllev && p.wavelet.hllev == other.wavelet.hllev; wavelet.bllev = wavelet.bllev && p.wavelet.bllev == other.wavelet.bllev; wavelet.edgcont = wavelet.edgcont && p.wavelet.edgcont == other.wavelet.edgcont; + wavelet.threswav = wavelet.threswav && p.wavelet.threswav == other.wavelet.threswav; + wavelet.softwav = wavelet.softwav && p.wavelet.softwav == other.wavelet.softwav; wavelet.level0noise = wavelet.level0noise && p.wavelet.level0noise == other.wavelet.level0noise; wavelet.level1noise = wavelet.level1noise && p.wavelet.level1noise == other.wavelet.level1noise; wavelet.level2noise = wavelet.level2noise && p.wavelet.level2noise == other.wavelet.level2noise; @@ -1143,6 +1149,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.pastlev = wavelet.pastlev && p.wavelet.pastlev == other.wavelet.pastlev; wavelet.satlev = wavelet.satlev && p.wavelet.satlev == other.wavelet.satlev; wavelet.ccwcurve = wavelet.ccwcurve && p.wavelet.ccwcurve == other.wavelet.ccwcurve; + wavelet.tmcurve = wavelet.tmcurve && p.wavelet.tmcurve == other.wavelet.tmcurve; wavelet.opacityCurveRG = wavelet.opacityCurveRG && p.wavelet.opacityCurveRG == other.wavelet.opacityCurveRG; wavelet.opacityCurveBY = wavelet.opacityCurveBY && p.wavelet.opacityCurveBY == other.wavelet.opacityCurveBY; wavelet.opacityCurveW = wavelet.opacityCurveW && p.wavelet.opacityCurveW == other.wavelet.opacityCurveW; @@ -1155,6 +1162,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.expcontrast = wavelet.expcontrast && p.wavelet.expcontrast == other.wavelet.expcontrast; wavelet.expchroma = wavelet.expchroma && p.wavelet.expchroma == other.wavelet.expchroma; wavelet.expedge = wavelet.expedge && p.wavelet.expedge == other.wavelet.expedge; + wavelet.exptm = wavelet.exptm && p.wavelet.exptm == other.wavelet.exptm; wavelet.expresid = wavelet.expresid && p.wavelet.expresid == other.wavelet.expresid; wavelet.expfinal = wavelet.expfinal && p.wavelet.expfinal == other.wavelet.expfinal; wavelet.exptoning = wavelet.exptoning && p.wavelet.exptoning == other.wavelet.exptoning; @@ -3037,6 +3045,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.edgcont = mods.wavelet.edgcont; } + if (wavelet.threswav) { + toEdit.wavelet.threswav = mods.wavelet.threswav; + } + + if (wavelet.softwav) { + toEdit.wavelet.softwav = mods.wavelet.softwav; + } + if (wavelet.level0noise) { toEdit.wavelet.level0noise = mods.wavelet.level0noise; } @@ -3065,6 +3081,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.ccwcurve = mods.wavelet.ccwcurve; } + if (wavelet.tmcurve) { + toEdit.wavelet.tmcurve = mods.wavelet.tmcurve; + } + if (wavelet.opacityCurveRG) { toEdit.wavelet.opacityCurveRG = mods.wavelet.opacityCurveRG; } @@ -3106,6 +3126,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.expedge = mods.wavelet.expedge; } + if (wavelet.exptm) { + toEdit.wavelet.exptm = mods.wavelet.exptm; + } + if (wavelet.expresid) { toEdit.wavelet.expresid = mods.wavelet.expresid; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index d2707ec11..619521c05 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -557,11 +557,14 @@ struct WaveletParamsEdited { bool hllev; bool bllev; bool edgcont; + bool threswav; + bool softwav; bool level0noise; bool level1noise; bool level2noise; bool level3noise; bool ccwcurve; + bool tmcurve; bool opacityCurveBY; bool opacityCurveRG; bool opacityCurveW; @@ -584,6 +587,7 @@ struct WaveletParamsEdited { bool expcontrast; bool expchroma; bool expedge; + bool exptm; bool expresid; bool expfinal; bool exptoning; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 7d9a65f2a..a65e3c789 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -63,6 +63,7 @@ Wavelet::Wavelet() : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true), curveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTEDIT"))), CCWcurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CCURVE"))), + curveEditortm(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_TMURVE"))), curveEditorRES(new CurveEditorGroup(options.lastWaveletCurvesDir)), curveEditorGAM(new CurveEditorGroup(options.lastWaveletCurvesDir)), separatorNeutral(Gtk::manage(new Gtk::HSeparator())), @@ -126,6 +127,8 @@ Wavelet::Wavelet() : mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), + threswav(Gtk::manage(new Adjuster(M("TP_WAVELET_THRESWAV"), 0.9, 2., 0.01, 1.4))), + softwav(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFWAV"), -10.0, 1000.0, 0.5, 1.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), @@ -159,6 +162,7 @@ Wavelet::Wavelet() : expsettings(Gtk::manage(new MyExpander(false, M("TP_WAVELET_SETTINGS")))), exptoning(Gtk::manage(new MyExpander(true, M("TP_WAVELET_TON")))), expclari(Gtk::manage(new MyExpander(true, M("TP_WAVELET_CLARI")))), + exptm(Gtk::manage(new MyExpander(true, M("TP_WAVELET_TM")))), neutrHBox(Gtk::manage(new Gtk::HBox())), usharpHBox(Gtk::manage(new Gtk::HBox())) { @@ -175,6 +179,10 @@ Wavelet::Wavelet() : EvWavscale = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSCALE"); EvWavradius = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVRADIUS"); EvWavsigma = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGMA"); + EvWavenatm = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVTM"); + EvWavthreswav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_THRESWAV"); + EvWavsoftwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_SOFTWAV"); + EvWavtmshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_TMSHAPE"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -193,6 +201,9 @@ Wavelet::Wavelet() : expedge->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expedge)); enableEdgeConn = expedge->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), expedge)); + exptm->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), exptm)); + enabletmConn = exptm->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Wavelet::enableToggled), exptm)); + expgamut->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expgamut)); expresid->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expresid)); @@ -623,6 +634,31 @@ Wavelet::Wavelet() : edgBox->pack_start(*ctboxES); +//TM Wavelet + ToolParamBlock* const tmBox = Gtk::manage(new ToolParamBlock()); + + curveEditortm->setCurveListener(this); + + tmshape = static_cast(curveEditortm->addCurve(CT_Flat, "", nullptr, false, false)); + + tmshape->setIdentityValue(0.); + tmshape->setResetCurve(FlatCurveType(default_params.tmcurve.at(0)), default_params.tmcurve); + tmshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_CC_TOOLTIP")); + + curveEditortm->curveListComplete(); + curveEditortm->show(); + + tmBox->pack_start(*curveEditortm, Gtk::PACK_SHRINK, 4); + + + threswav->setAdjusterListener(this); + tmBox->pack_start(*threswav); + + softwav->setLogScale(10, -10); + softwav->setAdjusterListener(this); + tmBox->pack_start(*softwav); + + // Gamut ToolParamBlock* const conBox = Gtk::manage(new ToolParamBlock()); @@ -939,6 +975,10 @@ Wavelet::Wavelet() : expedge->setLevel(2); pack_start(*expedge); + exptm->add(*tmBox, false); + exptm->setLevel(2); + pack_start(*exptm); + expclari->add(*clariBox, false); expclari->setLevel(2); pack_start(*expclari); @@ -959,6 +999,7 @@ Wavelet::~Wavelet() delete opaCurveEditorG; delete opacityCurveEditorG; + delete curveEditortm; delete CCWcurveEditorG; delete curveEditorRES; delete curveEditorGAM; @@ -1177,6 +1218,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) Lmethod->set_active(selectedLevel == -1 ? 4 : selectedLevel); ccshape->setCurve(pp->wavelet.ccwcurve); + tmshape->setCurve(pp->wavelet.tmcurve); opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG); opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY); opacityShape->setCurve(pp->wavelet.opacityCurveW); @@ -1187,6 +1229,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) expcontrast->setEnabled(pp->wavelet.expcontrast); expchroma->setEnabled(pp->wavelet.expchroma); expedge->setEnabled(pp->wavelet.expedge); + exptm->setEnabled(pp->wavelet.exptm); expresid->setEnabled(pp->wavelet.expresid); expfinal->setEnabled(pp->wavelet.expfinal); exptoning->setEnabled(pp->wavelet.exptoning); @@ -1266,6 +1309,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) pastlev->setValue(pp->wavelet.pastlev); satlev->setValue(pp->wavelet.satlev); edgcont->setValue(pp->wavelet.edgcont); + threswav->setValue(pp->wavelet.threswav); + softwav->setValue(pp->wavelet.softwav); greenlow->setValue(pp->wavelet.greenlow); bluelow->setValue(pp->wavelet.bluelow); @@ -1363,9 +1408,11 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) set_inconsistent(multiImage && !pedited->wavelet.enabled); ccshape->setUnChanged(!pedited->wavelet.ccwcurve); + tmshape->setUnChanged(!pedited->wavelet.tmcurve); expcontrast->set_inconsistent(!pedited->wavelet.expcontrast); expchroma->set_inconsistent(!pedited->wavelet.expchroma); expedge->set_inconsistent(!pedited->wavelet.expedge); + exptm->set_inconsistent(!pedited->wavelet.exptm); expresid->set_inconsistent(!pedited->wavelet.expresid); expfinal->set_inconsistent(!pedited->wavelet.expfinal); expclari->set_inconsistent(!pedited->wavelet.expclari); @@ -1437,6 +1484,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) satlev->setEditedState(pedited->wavelet.satlev ? Edited : UnEdited); strength->setEditedState(pedited->wavelet.strength ? Edited : UnEdited); edgcont->setEditedState(pedited->wavelet.edgcont ? Edited : UnEdited); + threswav->setEditedState(pedited->wavelet.threswav ? Edited : UnEdited); + softwav->setEditedState(pedited->wavelet.softwav ? Edited : UnEdited); level0noise->setEditedState(pedited->wavelet.level0noise ? Edited : UnEdited); level1noise->setEditedState(pedited->wavelet.level1noise ? Edited : UnEdited); level2noise->setEditedState(pedited->wavelet.level2noise ? Edited : UnEdited); @@ -1542,6 +1591,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) void Wavelet::setEditProvider(EditDataProvider *provider) { ccshape->setEditProvider(provider); + tmshape->setEditProvider(provider); opacityShapeRG->setEditProvider(provider); opacityShapeBY->setEditProvider(provider); opacityShape->setEditProvider(provider); @@ -1554,6 +1604,7 @@ void Wavelet::setEditProvider(EditDataProvider *provider) void Wavelet::autoOpenCurve() { ccshape->openIfNonlinear(); + tmshape->openIfNonlinear(); //opacityShapeRG->openIfNonlinear(); //opacityShapeBY->openIfNonlinear(); } @@ -1604,11 +1655,14 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.hllev = hllev->getValue (); pp->wavelet.bllev = bllev->getValue (); pp->wavelet.edgcont = edgcont->getValue (); + pp->wavelet.threswav = threswav->getValue(); + pp->wavelet.softwav = softwav->getValue(); pp->wavelet.level0noise = level0noise->getValue (); pp->wavelet.level1noise = level1noise->getValue (); pp->wavelet.level2noise = level2noise->getValue (); pp->wavelet.level3noise = level3noise->getValue (); pp->wavelet.ccwcurve = ccshape->getCurve(); + pp->wavelet.tmcurve = tmshape->getCurve(); pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve(); pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve(); pp->wavelet.opacityCurveW = opacityShape->getCurve(); @@ -1633,6 +1687,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.expcontrast = expcontrast->getEnabled(); pp->wavelet.expchroma = expchroma->getEnabled(); pp->wavelet.expedge = expedge->getEnabled(); + pp->wavelet.exptm = exptm->getEnabled(); pp->wavelet.expresid = expresid->getEnabled(); pp->wavelet.expfinal = expfinal->getEnabled(); pp->wavelet.exptoning = exptoning->getEnabled(); @@ -1707,7 +1762,10 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.skinprotect = skinprotect->getEditedState(); pedited->wavelet.hllev = hllev->getEditedState(); pedited->wavelet.ccwcurve = !ccshape->isUnChanged(); + pedited->wavelet.tmcurve = !tmshape->isUnChanged(); pedited->wavelet.edgcont = edgcont->getEditedState(); + pedited->wavelet.threswav = threswav->getEditedState(); + pedited->wavelet.softwav = softwav->getEditedState(); pedited->wavelet.level0noise = level0noise->getEditedState(); pedited->wavelet.level1noise = level1noise->getEditedState(); pedited->wavelet.level2noise = level2noise->getEditedState(); @@ -1738,6 +1796,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.expcontrast = !expcontrast->get_inconsistent(); pedited->wavelet.expchroma = !expchroma->get_inconsistent(); pedited->wavelet.expedge = !expedge->get_inconsistent(); + pedited->wavelet.exptm = !exptm->get_inconsistent(); pedited->wavelet.expresid = !expresid->get_inconsistent(); pedited->wavelet.expfinal = !expfinal->get_inconsistent(); pedited->wavelet.exptoning = !exptoning->get_inconsistent(); @@ -1879,6 +1938,8 @@ void Wavelet::curveChanged(CurveEditor* ce) if (listener && getEnabled()) { if (ce == ccshape) { listener->panelChanged(EvWavCCCurve, M("HISTORY_CUSTOMCURVE")); + } else if (ce == tmshape) { + listener->panelChanged(EvWavtmshape, M("HISTORY_CUSTOMCURVE")); } else if (ce == opacityShapeRG) { listener->panelChanged(EvWavColor, M("HISTORY_CUSTOMCURVE")); } else if (ce == opacityShapeBY) { @@ -1945,6 +2006,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit pastlev->setDefault (defParams->wavelet.pastlev); satlev->setDefault (defParams->wavelet.satlev); edgcont->setDefault (defParams->wavelet.edgcont); + threswav->setDefault(defParams->wavelet.threswav); + softwav->setDefault(defParams->wavelet.softwav); level0noise->setDefault (defParams->wavelet.level0noise); level1noise->setDefault (defParams->wavelet.level1noise); level2noise->setDefault (defParams->wavelet.level2noise); @@ -2008,6 +2071,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit pastlev->setDefaultEditedState(pedited->wavelet.pastlev ? Edited : UnEdited); satlev->setDefaultEditedState(pedited->wavelet.satlev ? Edited : UnEdited); edgcont->setDefaultEditedState(pedited->wavelet.edgcont ? Edited : UnEdited); + threswav->setDefaultEditedState(pedited->wavelet.threswav ? Edited : UnEdited); + softwav->setDefaultEditedState(pedited->wavelet.softwav ? Edited : UnEdited); strength->setDefaultEditedState(pedited->wavelet.strength ? Edited : UnEdited); balance->setDefaultEditedState(pedited->wavelet.balance ? Edited : UnEdited); iter->setDefaultEditedState(pedited->wavelet.iter ? Edited : UnEdited); @@ -2057,6 +2122,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit hllev->setDefaultEditedState(Irrelevant); bllev->setDefaultEditedState(Irrelevant); edgcont->setDefaultEditedState(Irrelevant); + threswav->setDefaultEditedState(Irrelevant); + softwav->setDefaultEditedState(Irrelevant); level0noise->setDefaultEditedState(Irrelevant); level1noise->setDefaultEditedState(Irrelevant); level2noise->setDefaultEditedState(Irrelevant); @@ -2550,6 +2617,7 @@ void Wavelet::setBatchMode(bool batchMode) opacityCurveEditorG->setBatchMode(batchMode); opacityCurveEditorW->setBatchMode(batchMode); opacityCurveEditorWL->setBatchMode(batchMode); + curveEditortm->setBatchMode(batchMode); curveEditorRES->setBatchMode(batchMode); curveEditorGAM->setBatchMode(batchMode); sigma->showEditedCB(); @@ -2587,6 +2655,8 @@ void Wavelet::setBatchMode(bool batchMode) pastlev->showEditedCB(); satlev->showEditedCB(); edgcont->showEditedCB(); + threswav->showEditedCB(); + softwav->showEditedCB(); strength->showEditedCB(); balance->showEditedCB(); iter->showEditedCB(); @@ -2749,6 +2819,10 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavgreenlow, greenlow->getTextValue()); } else if (a == bluelow) { listener->panelChanged(EvWavbluelow, bluelow->getTextValue()); + } else if (a == threswav) { + listener->panelChanged(EvWavthreswav, threswav->getTextValue()); + } else if (a == softwav) { + listener->panelChanged(EvWavsoftwav, softwav->getTextValue()); } if ((a == correction[0] || a == correction[1] || a == correction[2] || a == correction[3] || a == correction[4] || a == correction[5] || a == correction[6] || a == correction[7] || a == correction[8])) { @@ -3270,6 +3344,7 @@ void Wavelet::foldAllButMe(GdkEventButton* event, MyExpander *expander) exptoning->set_expanded(exptoning == expander); expnoise->set_expanded(expnoise == expander); expedge->set_expanded(expedge == expander); + exptm->set_expanded(exptm == expander); expgamut->set_expanded(expgamut == expander); expresid->set_expanded(expresid == expander); expfinal->set_expanded(expfinal == expander); @@ -3292,6 +3367,8 @@ void Wavelet::enableToggled(MyExpander *expander) event = EvWavenanoise; } else if (expander == expedge) { event = EvWavenaedge; + } else if (expander == exptm) { + event = EvWavenatm; } else if (expander == expresid) { event = EvWavenares; } else if (expander == expfinal) { @@ -3354,6 +3431,7 @@ void Wavelet::writeOptions(std::vector &tpOpen) tpOpen.push_back(exptoning->get_expanded()); tpOpen.push_back(expnoise->get_expanded()); tpOpen.push_back(expedge->get_expanded()); + tpOpen.push_back(exptm->get_expanded()); tpOpen.push_back(expgamut->get_expanded()); tpOpen.push_back(expresid->get_expanded()); tpOpen.push_back(expfinal->get_expanded()); @@ -3369,6 +3447,7 @@ void Wavelet::updateToolState(const std::vector& tpOpen) exptoning->set_expanded(false); expnoise->set_expanded(false); expedge->set_expanded(false); + exptm->set_expanded(false); expgamut->set_expanded(false); expresid->set_expanded(false); expfinal->set_expanded(false); @@ -3376,17 +3455,18 @@ void Wavelet::updateToolState(const std::vector& tpOpen) return; } - if (tpOpen.size() >= 10) { + if (tpOpen.size() >= 11) { expsettings->set_expanded(tpOpen[0]); expcontrast->set_expanded(tpOpen[1]); expchroma->set_expanded(tpOpen[2]); exptoning->set_expanded(tpOpen[3]); expnoise->set_expanded(tpOpen[4]); expedge->set_expanded(tpOpen[5]); - expgamut->set_expanded(tpOpen[6]); - expresid->set_expanded(tpOpen[7]); - expfinal->set_expanded(tpOpen[8]); - expclari->set_expanded(tpOpen.at(9)); + exptm->set_expanded(tpOpen[6]); + expgamut->set_expanded(tpOpen[7]); + expresid->set_expanded(tpOpen[8]); + expfinal->set_expanded(tpOpen[9]); + expclari->set_expanded(tpOpen[10]); } } diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index d3b66657e..356241fa0 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -79,6 +79,10 @@ private: rtengine::ProcEvent EvWavscale; rtengine::ProcEvent EvWavradius; rtengine::ProcEvent EvWavsigma; + rtengine::ProcEvent EvWavenatm; + rtengine::ProcEvent EvWavthreswav; + rtengine::ProcEvent EvWavsoftwav; + rtengine::ProcEvent EvWavtmshape; void foldAllButMe(GdkEventButton* event, MyExpander *expander); @@ -140,6 +144,7 @@ private: CurveEditorGroup* const curveEditorG; CurveEditorGroup* const CCWcurveEditorG; + CurveEditorGroup* const curveEditortm; CurveEditorGroup* const curveEditorRES; CurveEditorGroup* const curveEditorGAM; Gtk::HSeparator* const separatorNeutral; @@ -158,6 +163,7 @@ private: DiagonalCurveEditor* clshape; FlatCurveEditor* ccshape; + FlatCurveEditor* tmshape; Gtk::CheckButton* const median; Gtk::CheckButton* const medianlev; Gtk::CheckButton* const linkedg; @@ -194,6 +200,7 @@ private: Adjuster* const strength; Adjuster* const balance; Adjuster* const iter; + Adjuster* greenlow; Adjuster* bluelow; Adjuster* greenmed; @@ -224,6 +231,8 @@ private: Adjuster* const mergeC; Adjuster* const softrad; Adjuster* const softradend; + Adjuster* const threswav; + Adjuster* const softwav; MyComboBoxText* const Lmethod; sigc::connection Lmethodconn; @@ -275,11 +284,12 @@ private: MyExpander* const expsettings; MyExpander* const exptoning; MyExpander* const expclari; + MyExpander* const exptm; Gtk::HBox* const neutrHBox; Gtk::HBox* const usharpHBox; - sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn, enableclariConn; + sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enabletmConn, enableFinalConn, enableclariConn; sigc::connection enableNoiseConn, enableResidConn, enableToningConn; sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn, showmaskConn; sigc::connection neutralPressedConn; From 0ffa61748d9acb2abdb97605cd0a05a7dd2e2c14 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 22 Mar 2020 15:31:36 +0100 Subject: [PATCH 219/264] Prepare ipwavelet and periph to TM --- rtengine/dcrop.cc | 4 ++-- rtengine/improccoordinator.cc | 4 ++-- rtengine/improcfun.h | 3 ++- rtengine/ipwavelet.cc | 2 +- rtengine/simpleprocess.cc | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index c2de5e0c5..8c3f4f140 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1003,7 +1003,7 @@ void Crop::update(int todo) unshar = new LabImage(labnCrop->W, labnCrop->H); provis = params.wavelet.CLmethod; params.wavelet.CLmethod = "all"; - parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); + parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); unshar->CopyFrom(labnCrop); params.wavelet.CLmethod = provis; @@ -1016,7 +1016,7 @@ void Crop::update(int todo) WaveParams.expnoise = false; } - parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); + parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip); if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = procont; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 682b26410..1ad3a0be1 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -898,7 +898,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) unshar = new LabImage(pW, pH); provis = params->wavelet.CLmethod; params->wavelet.CLmethod = "all"; - ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); + ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); unshar->CopyFrom(nprevl); @@ -912,7 +912,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) WaveParams.expnoise = false; } - ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); + ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index a06670b72..bb7588513 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -53,6 +53,7 @@ class OpacityCurve; class PipetteBuffer; class ToneCurve; class WavCurve; +class WavtmCurve; class WavOpacityCurveBY; class WavOpacityCurveRG; class WavOpacityCurveW; @@ -200,7 +201,7 @@ public: int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/); void Tile_calc(int tilesize, int overlap, int kall, int imwidth, int imheight, int &numtiles_W, int &numtiles_H, int &tilewidth, int &tileheight, int &tileWskip, int &tileHskip); - void ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, const LUTf &wavclCurve, int skip); + void ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavtmCurve & wavtmCurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, const LUTf &wavclCurve, int skip); void WaveletcontAllL(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_L, struct cont_params &cp, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 758a9147b..4207eb6d9 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -133,7 +133,7 @@ struct cont_params { int wavNestedLevels = 1; -void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, const LUTf &wavclCurve, int skip) +void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavtmCurve & wavtmCurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, const LUTf &wavclCurve, int skip) { diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index e519d5a56..f5bfd81df 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1152,7 +1152,7 @@ private: unshar = new LabImage(fw, fh); provis = params.wavelet.CLmethod; params.wavelet.CLmethod = "all"; - ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); + ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); unshar->CopyFrom(labView); params.wavelet.CLmethod = provis; @@ -1164,7 +1164,7 @@ private: WaveParams.expnoise = false; } - ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); + ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, wavtmCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = procont; From 5bba83f5213d9092697cf5fd4655e05471bd0eed Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 23 Mar 2020 10:32:29 +0100 Subject: [PATCH 220/264] Prepare 2 - to TM wavelet --- rtengine/improcfun.h | 2 + rtengine/ipwavelet.cc | 193 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index bb7588513..caad76a4f 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -188,6 +188,7 @@ public: void EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterates, int skip, struct cont_params& cp, int W_L, int H_L, float max0, float min0); void CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost); + void Compresslevels2(float **Source, int W_L, int H_L, float compression, float detailattenuator, float thres, float mean, float maxp, float meanN, float maxN, float madL); void ContrastResid(float * WavCoeffs_L0, struct cont_params &cp, int W_L, int H_L, float max0, float min0); void EPDToneMap(LabImage *lab, unsigned int Iterates = 0, int skip = 1); @@ -225,6 +226,7 @@ public: void Sigma(float * HH_Coeffs, int datalen, float averagePlus, float averageNeg, float &sigmaPlus, float &sigmaNeg); void calckoe(float ** WavCoeffs_LL, const cont_params& cp, float ** koeLi, int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC = nullptr); + void softproc2(const LabImage* bufcolorig, const LabImage* bufcolfin, float rad, int bfh, int bfw, double epsilmax, double epsilmin, float thres, int sk, bool multiThread, int flag); void Median_Denoise(float **src, float **dst, int width, int height, Median medianType, int iterations, int numThreads, float **buffer = nullptr); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 4207eb6d9..ff8efb543 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -32,6 +32,7 @@ #include "EdgePreservingDecomposition.h" #include "iccstore.h" #include "improcfun.h" +#include "imagefloat.h" #include "labimage.h" #include "LUT.h" #include "median.h" @@ -845,6 +846,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } +//here TM wavelet....big memory + + //init for edge and denoise float vari[4]; @@ -3481,4 +3485,193 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f } } } + +void ImProcFunctions::softproc2(const LabImage* bufcolorig, const LabImage* bufcolfin, float rad, int bfh, int bfw, double epsilmax, double epsilmin, float thres, int sk, bool multiThread, int flag) +{ + if (flag == 0) { + if (rad > 0.f) { + array2D ble(bfw, bfh); + array2D guid(bfw, bfh); + Imagefloat *tmpImage = nullptr; + tmpImage = new Imagefloat(bfw, bfh); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + + float X, Y, Z; + float L = bufcolorig->L[ir][jr]; + float a = bufcolorig->a[ir][jr]; + float b = bufcolorig->b[ir][jr]; + Color::Lab2XYZ(L, a, b, X, Y, Z); + + guid[ir][jr] = Y / 32768.f; + float La = bufcolfin->L[ir][jr]; + float aa = bufcolfin->a[ir][jr]; + float ba = bufcolfin->b[ir][jr]; + Color::Lab2XYZ(La, aa, ba, X, Y, Z); + tmpImage->r(ir, jr) = X; + tmpImage->g(ir, jr) = Y; + tmpImage->b(ir, jr) = Z; + + ble[ir][jr] = Y / 32768.f; + } + + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * 0.1 * rad + bepsil; + + float blur = 10.f / sk * (thres + 0.8f * rad); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, multiThread, 4); + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + float X = tmpImage->r(ir, jr); + float Y = 32768.f * ble[ir][jr]; + float Z = tmpImage->b(ir, jr); + float L, a, b; + Color::XYZ2Lab(X, Y, Z, L, a, b); + bufcolfin->L[ir][jr] = L; + } + + delete tmpImage; + } + } else if (flag == 1) { + if (rad > 0.f) { + array2D ble(bfw, bfh); + array2D blechro(bfw, bfh); + array2D hue(bfw, bfh); + array2D guid(bfw, bfh); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { +// hue[ir][jr] = xatan2f(bufcolfin->b[ir][jr], bufcolfin->a[ir][jr]); +// float chromah = sqrt(SQR(bufcolfin->b[ir][jr]) + SQR(bufcolfin->a[ir][jr])); + + ble[ir][jr] = (bufcolfin->L[ir][jr]) / 32768.f; +// blechro[ir][jr] = chromah / 32768.f; + guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; + } + + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * 0.1 * rad + bepsil; + + if (rad != 0.f) { + float blur = rad; + blur = blur < 0.f ? -1.f / blur : 1.f + blur; + // int r1 = max(int(4 / sk * blur + 0.5), 1); + int r2 = max(int(25 / sk * blur + 0.5), 1); + + if (rad < 0.f) { + epsil = 0.0001; + } + + rtengine::guidedFilter(guid, ble, ble, r2, epsil, multiThread); +// rtengine::guidedFilter(guid, blechro, blechro, r1, 0.5 * epsil, multiThread); + } + + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + // float2 sincosval = xsincosf(hue[ir][jr]); + + bufcolfin->L[ir][jr] = 32768.f * ble[ir][jr]; + // bufcolfin->a[ir][jr] = 32768.f * sincosval.y * blechro[ir][jr]; + // bufcolfin->b[ir][jr] = 32768.f * sincosval.x * blechro[ir][jr]; + } + } + + } +} + + +void ImProcFunctions::Compresslevels2(float **Source, int W_L, int H_L, float compression, float detailattenuator, float thres, float mean, float maxp, float meanN, float maxN, float madL) +{ + //J.Desmis 12-2019 + + float exponent; + + // printf("maxp=%f maxn=%f\n", maxp, maxn); + if (detailattenuator > 0.f && detailattenuator < 0.05f) { + float betemp = expf(-(2.f - detailattenuator + 0.693147f)) - 1.f; //0.69315 = log(2) + exponent = 1.2f * xlogf(-betemp); + exponent /= 20.f; + } else if (detailattenuator >= 0.05f && detailattenuator < 0.25f) { + float betemp = expf(-(2.f - detailattenuator + 0.693147f)) - 1.f; + exponent = 1.2f * xlogf(-betemp); + exponent /= (-75.f * detailattenuator + 23.75f); + } else if (detailattenuator >= 0.25f) { + float betemp = expf(-(2.f - detailattenuator + 0.693147f)) - 1.f; + exponent = 1.2f * xlogf(-betemp); + exponent /= (-2.f * detailattenuator + 5.5f); + } else { + exponent = (compression - 1.0f) / 20.f; + } + + exponent += 1.f; + + + float ap = (thres - 1.f) / (maxp - mean); + float bp = 1.f - ap * mean; + + float a0 = (1.33f * thres - 1.f) / (1.f - mean); + float b0 = 1.f - a0 * mean; + + float apn = (thres - 1.f) / (maxN - meanN); + float bpn = 1.f - apn * meanN; + + float a0n = (1.33f * thres - 1.f) / (1.f - meanN); + float b0n = 1.f - a0n * meanN; + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int y = 0; y < H_L; y++) { + for (int x = 0; x < W_L; x++) { + float expone = 1.f; + + if (Source[y][x] >= 0.f) { + + if (Source[y][x] > mean) { + expone = 1.f + (exponent - 1.f) * (ap * Source[y][x] + bp); + } else { + expone = 1.f + (exponent - 1.f) * (a0 * Source[y][x] + b0); + } + + Source[y][x] = xexpf(xlogf(Source[y][x] + 0.05f * madL) * expone); + } else if (Source[y][x] < 0.f) { + if (-Source[y][x] > mean) { + expone = 1.f + (exponent - 1.f) * (apn * -Source[y][x] + bpn); + } else { + expone = 1.f + (exponent - 1.f) * (a0n * -Source[y][x] + b0n); + } + + Source[y][x] = -xexpf(xlogf(-Source[y][x] + 0.05f * madL) * expone); + } + } + } + +} + } From e0d36fb41bd7855cee7f7a4b456ffca710798ea8 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 23 Mar 2020 18:10:59 +0100 Subject: [PATCH 221/264] First algo TM wavelet --- rtengine/ipwavelet.cc | 136 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index ff8efb543..9d5237273 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -124,6 +124,7 @@ struct cont_params { bool finena; bool toningena; bool noiseena; + bool tmena; int maxilev; float edgsens; float edgampl; @@ -204,6 +205,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.finena = params->wavelet.expfinal; cp.toningena = params->wavelet.exptoning; cp.noiseena = params->wavelet.expnoise; + cp.tmena = params->wavelet.exptm; if (params->wavelet.Backmethod == "black") { cp.backm = 0; @@ -846,7 +848,139 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } -//here TM wavelet....big memory + //here TM wavelet + if(cp.tmena ){ + float mean2[10]; + float meanN2[10]; + float sigma2[10]; + float sigmaN2[10]; + float MaxP2[10]; + float MaxN2[10]; + //calculate mean, amx, etc. + Evaluate2(*Ldecomp, mean2, meanN2, sigma2, sigmaN2, MaxP2, MaxN2); + + int leve = levwavL; + int dir = 3; + int WW = labco->W; + int HH = labco->H; + float ****templevel = nullptr; + templevel = new float***[dir]; + + //allocate memory for 3 DIR n levels, HH, WW + for (int d = 0; d < dir; d++) { + templevel[d] = new float**[leve]; + + for (int k = 0; k < leve; k++) { + templevel[d][k] = new float*[HH]; + + for (int i = 0; i < HH; i++) { + templevel[d][k][i] = new float[WW]; + } + } + } + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + //fill templevel with decomp for each level, each dir,X Y + for (int dir = 1; dir < 4; dir++) { + for (int level = 0; level < levwavL; ++level) { + int W_L = Ldecomp->level_W(level); + int H_L = Ldecomp->level_H(level); + float **wav_L = Ldecomp->level_coeffs(level); + madL[level][dir - 1] = Mad(wav_L[dir], W_L * H_L);//evaluate noise by level + + for (int y = 0; y < H_L; y++) { + for (int x = 0; x < W_L; x++) { + float val = wav_L[dir][y * W_L + x]; + templevel[dir - 1][level][y][x] = val; + } + } + } + } + + + float thres = params->wavelet.threswav; + + bool wavcurvecomp = false;//not enable if 0.75 + + if (wavtmCurve) { + for (int i = 0; i < 500; i++) { + if (wavtmCurve[i] != 0.75) { + wavcurvecomp = true; + } + } + } + + //for each level, dir calculate templevel with compression + for (int dir = 1; dir < 4; dir++) { + for (int level = 0; level < levwavL; ++level) { + int W_L = Ldecomp->level_W(level); + int H_L = Ldecomp->level_H(level); + + if (wavtmCurve && wavcurvecomp) { + float klev = (wavtmCurve[level * 55.5f] - 0.75f); + + if (klev < 0.f) { + klev *= 2.6666f;//compression increase contraste + } else { + klev *= 4.f;//dilatation reduce contraste - detailattenuator + } + + float compression = expf(-klev); + float detailattenuator = klev; + + if (klev < 0.0f) { + detailattenuator = 0.0f; + } + Compresslevels2(templevel[dir - 1][level], W_L, H_L, compression, detailattenuator, thres, mean2[level], MaxP2[level], meanN2[level], MaxN2[level], madL[level][dir - 1]); + } + } + } + + //retrieve decomp +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int dir = 1; dir < 4; dir++) { + for (int level = 0; level < levwavL ; ++level) { + int W_L = Ldecomp->level_W(level); + int H_L = Ldecomp->level_H(level); + float **wav_L = Ldecomp->level_coeffs(level); + + for (int y = 0; y < H_L; y++) { + for (int x = 0; x < W_L; x++) { + wav_L[dir][y * W_L + x] = templevel[dir - 1][level][y][x]; + } + } + } + } + + + //free memory + for (int i = 0; i < dir; i++) { + for (int j = 0; j < leve; j++) { + for (int l = 0; l < HH; l++) { + delete [] templevel[i][j][l]; + } + } + } + + for (int i = 0; i < dir; i++) { + for (int j = 0; j < leve; j++) { + delete [] templevel[i][j]; + } + } + + for (int i = 0; i < dir; i++) { + delete [] templevel[i]; + } + + delete [] templevel; + + } + // end TM wavelet //init for edge and denoise From 6d154bcdae6890a77a0374119464ee91ce533325 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 24 Mar 2020 11:29:50 +0100 Subject: [PATCH 222/264] Wavelet - Give possibility to use old algo SH residual image --- rtdata/languages/default | 2 ++ rtengine/ipwavelet.cc | 48 +++++++++++++++++++++++++++++++++++++++- rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtgui/paramsedited.cc | 6 +++++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 42 +++++++++++++++++++++++++++++++++-- rtgui/wavelet.h | 7 ++++-- 8 files changed, 106 insertions(+), 5 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index fe6ddaa7c..3229e1015 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -802,6 +802,7 @@ HISTORY_MSG_WAVSIGMA;Sigma HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method +HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2243,6 +2244,7 @@ TP_WAVELET_NPLOW;Low TP_WAVELET_NPNONE;None TP_WAVELET_NPTYPE;Neighboring pixels TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. +TP_WAVELET_OLDSH;Old algorithm using negatives values TP_WAVELET_OPACITY;Opacity Blue-Yellow TP_WAVELET_OPACITYW;Contrast balance d/v-h curve TP_WAVELET_OPACITYWL;Final local contrast diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 758a9147b..54d103b7b 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -63,6 +63,7 @@ struct cont_params { float conresH; float radius; float chrores; + bool oldsh; float hueres; float sky; float b_l, t_l, b_r, t_r; @@ -387,6 +388,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.conresH = waparams.resconH; cp.radius = waparams.radius; cp.chrores = waparams.reschro; + cp.oldsh = waparams.oldsh; //cp.hueres=waparams.reshue; cp.hueres = 2.f; cp.th = float(waparams.thr); @@ -1689,7 +1691,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } - if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step + if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena && !cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step LabImage *temp = nullptr; temp = new LabImage(W_L, H_L); #ifdef _OPENMP @@ -1721,6 +1723,50 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } + if((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena && cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step +#ifdef _OPENMP + #pragma omp for nowait +#endif + + for (int i = 0; i < W_L * H_L; i++) { + float LL = WavCoeffs_L0[i]; + float LL100 = LL / 327.68f; + float tran = 5.f;//transition + //shadow + float alp = 3.f; //increase contrast sahdow in lowlights between 1 and ?? + + if(cp.th > (100.f - tran)) { + tran = 100.f - cp.th; + } + + if(LL100 < cp.th) { + float aalp = (1.f - alp) / cp.th; //no changes for LL100 = cp.th + float kk = aalp * LL100 + alp; + WavCoeffs_L0[i] *= (1.f + kk * cp.conres / 200.f); + } else if(LL100 < cp.th + tran) { + float ath = -cp.conres / tran; + float bth = cp.conres - ath * cp.th; + WavCoeffs_L0[i] *= (1.f + (LL100 * ath + bth) / 200.f); + } + + //highlight + tran = 5.f; + + if(cp.thH < (tran)) { + tran = cp.thH; + } + + if(LL100 > cp.thH) { + WavCoeffs_L0[i] *= (1.f + cp.conresH / 200.f); + } else if(LL100 > (cp.thH - tran)) { + float athH = cp.conresH / tran; + float bthH = cp.conresH - athH * cp.thH; + WavCoeffs_L0[i] *= (1.f + (LL100 * athH + bthH) / 200.f); + } + } + } + + #ifdef _OPENMP #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index e795d9bd9..879423961 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2243,6 +2243,7 @@ WaveletParams::WaveletParams() : lipst(false), avoid(false), showmask(false), + oldsh(true), tmr(false), strength(100), balance(0), @@ -2343,6 +2344,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && lipst == other.lipst && avoid == other.avoid && showmask == other.showmask + && oldsh == other.oldsh && tmr == other.tmr && strength == other.strength && balance == other.balance @@ -3562,6 +3564,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.edgthresh, "Wavelet", "ThrEdg", wavelet.edgthresh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.avoid, "Wavelet", "AvoidColorShift", wavelet.avoid, keyFile); saveToKeyfile(!pedited || pedited->wavelet.showmask, "Wavelet", "Showmask", wavelet.showmask, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.oldsh, "Wavelet", "Oldsh", wavelet.oldsh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmr, "Wavelet", "TMr", wavelet.tmr, keyFile); saveToKeyfile(!pedited || pedited->wavelet.sigma, "Wavelet", "Sigma", wavelet.sigma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.rescon, "Wavelet", "ResidualcontShadow", wavelet.rescon, keyFile); @@ -4654,6 +4657,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "Lipst", pedited, wavelet.lipst, pedited->wavelet.lipst); assignFromKeyfile(keyFile, "Wavelet", "AvoidColorShift", pedited, wavelet.avoid, pedited->wavelet.avoid); assignFromKeyfile(keyFile, "Wavelet", "Showmask", pedited, wavelet.showmask, pedited->wavelet.showmask); + assignFromKeyfile(keyFile, "Wavelet", "Oldsh", pedited, wavelet.oldsh, pedited->wavelet.oldsh); assignFromKeyfile(keyFile, "Wavelet", "TMr", pedited, wavelet.tmr, pedited->wavelet.tmr); if (ppVersion < 331) { // wavelet.Lmethod was a string before version 331 diff --git a/rtengine/procparams.h b/rtengine/procparams.h index aabe1e7ae..2eb18781d 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1211,6 +1211,7 @@ struct WaveletParams { bool lipst; bool avoid; bool showmask; + bool oldsh; bool tmr; int strength; int balance; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 48ba4c341..66a302f55 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -494,6 +494,7 @@ void ParamsEdited::set(bool v) wavelet.ushamethod = v; wavelet.avoid = v; wavelet.showmask = v; + wavelet.oldsh = v; wavelet.tmr = v; wavelet.Lmethod = v; wavelet.CLmethod = v; @@ -1090,6 +1091,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.ushamethod = wavelet.ushamethod && p.wavelet.ushamethod == other.wavelet.ushamethod; wavelet.avoid = wavelet.avoid && p.wavelet.avoid == other.wavelet.avoid; wavelet.showmask = wavelet.showmask && p.wavelet.showmask == other.wavelet.showmask; + wavelet.oldsh = wavelet.oldsh && p.wavelet.oldsh == other.wavelet.oldsh; wavelet.tmr = wavelet.tmr && p.wavelet.tmr == other.wavelet.tmr; wavelet.Lmethod = wavelet.Lmethod && p.wavelet.Lmethod == other.wavelet.Lmethod; wavelet.CLmethod = wavelet.CLmethod && p.wavelet.CLmethod == other.wavelet.CLmethod; @@ -2945,6 +2947,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.showmask = mods.wavelet.showmask; } + if (wavelet.oldsh) { + toEdit.wavelet.oldsh = mods.wavelet.oldsh; + } + if (wavelet.tmr) { toEdit.wavelet.tmr = mods.wavelet.tmr; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index d2707ec11..9e50031fb 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -508,6 +508,7 @@ struct WaveletParamsEdited { bool ushamethod; bool avoid; bool showmask; + bool oldsh; bool tmr; bool c[9]; bool ch[9]; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 7d9a65f2a..e314ee018 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -79,10 +79,11 @@ Wavelet::Wavelet() : avoid(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_AVOID")))), tmr(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_BALCHRO")))), showmask(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_SHOWMASK")))), + oldsh(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_OLDSH")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.2, 2.5, 0.01, 1.))), - rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), 0, 100, 1, 0))), - resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), 0, 100, 1, 0))), + rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), + resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), @@ -175,6 +176,7 @@ Wavelet::Wavelet() : EvWavscale = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSCALE"); EvWavradius = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVRADIUS"); EvWavsigma = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGMA"); + EvWavoldsh = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOLDSH"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -675,6 +677,9 @@ Wavelet::Wavelet() : // Residual Image ToolParamBlock* const resBox = Gtk::manage(new ToolParamBlock()); + oldsh->set_active(true); + oldshConn = oldsh->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::oldshToggled)); + resBox->pack_start(*oldsh); rescon->setAdjusterListener(this); resBox->pack_start(*rescon, Gtk::PACK_SHRINK); @@ -1200,6 +1205,9 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) showmaskConn.block(true); showmask->set_active(pp->wavelet.showmask); showmaskConn.block(false); + oldshConn.block(true); + oldsh->set_active(pp->wavelet.oldsh); + oldshConn.block(false); tmrConn.block(true); tmr->set_active(pp->wavelet.tmr); tmrConn.block(false); @@ -1230,6 +1238,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) lastlipst = pp->wavelet.lipst; lastavoid = pp->wavelet.avoid; lastshowmask = pp->wavelet.showmask; + lastoldsh = pp->wavelet.oldsh; lasttmr = pp->wavelet.tmr; sigma->setValue(pp->wavelet.sigma); rescon->setValue(pp->wavelet.rescon); @@ -1380,6 +1389,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) clshape->setUnChanged(!pedited->wavelet.wavclCurve); avoid->set_inconsistent(!pedited->wavelet.avoid); showmask->set_inconsistent(!pedited->wavelet.showmask); + oldsh->set_inconsistent(!pedited->wavelet.oldsh); tmr->set_inconsistent(!pedited->wavelet.tmr); edgthresh->setEditedState(pedited->wavelet.edgthresh ? Edited : UnEdited); rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited); @@ -1564,6 +1574,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.enabled = getEnabled(); pp->wavelet.avoid = avoid->get_active(); pp->wavelet.showmask = showmask->get_active(); + pp->wavelet.oldsh = oldsh->get_active(); pp->wavelet.tmr = tmr->get_active(); pp->wavelet.sigma = sigma->getValue(); pp->wavelet.rescon = rescon->getValue(); @@ -1654,6 +1665,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.enabled = !get_inconsistent(); pedited->wavelet.avoid = !avoid->get_inconsistent(); pedited->wavelet.showmask = !showmask->get_inconsistent(); + pedited->wavelet.oldsh = !oldsh->get_inconsistent(); pedited->wavelet.tmr = !tmr->get_inconsistent(); pedited->wavelet.median = !median->get_inconsistent(); pedited->wavelet.medianlev = !medianlev->get_inconsistent(); @@ -3120,6 +3132,32 @@ void Wavelet::showmaskToggled() } } +void Wavelet::oldshToggled() +{ + if (multiImage) { + if (oldsh->get_inconsistent()) { + oldsh->set_inconsistent(false); + oldshConn.block(true); + oldsh->set_active(false); + oldshConn.block(false); + } else if (lastoldsh) { + oldsh->set_inconsistent(true); + } + + lastoldsh = oldsh->get_active(); + } + + if (listener && (multiImage || getEnabled())) { + if (oldsh->get_inconsistent()) { + listener->panelChanged(EvWavoldsh, M("GENERAL_UNCHANGED")); + } else if (oldsh->get_active()) { + listener->panelChanged(EvWavoldsh, M("GENERAL_ENABLED")); + } else { + listener->panelChanged(EvWavoldsh, M("GENERAL_DISABLED")); + } + } +} + void Wavelet::tmrToggled() { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index d3b66657e..7aede083f 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -79,6 +79,7 @@ private: rtengine::ProcEvent EvWavscale; rtengine::ProcEvent EvWavradius; rtengine::ProcEvent EvWavsigma; + rtengine::ProcEvent EvWavoldsh; void foldAllButMe(GdkEventButton* event, MyExpander *expander); @@ -98,6 +99,7 @@ private: void TilesmethodChanged(); void avoidToggled(); void showmaskToggled (); + void oldshToggled (); void cbenabToggled(); void contrastMinusPressed(); void contrastPlusPressed(); @@ -166,6 +168,7 @@ private: Gtk::CheckButton* const avoid; Gtk::CheckButton* const tmr; Gtk::CheckButton* const showmask; + Gtk::CheckButton* const oldsh; Gtk::Button* const neutralchButton; Adjuster* correction[9]; @@ -281,13 +284,13 @@ private: sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn, enableclariConn; sigc::connection enableNoiseConn, enableResidConn, enableToningConn; - sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn, showmaskConn; + sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn, showmaskConn, oldshConn; sigc::connection neutralPressedConn; sigc::connection contrastPlusPressedConn; sigc::connection contrastMinusPressedConn; sigc::connection neutralchPressedConn; - bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab, lastshowmask; + bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab, lastshowmask, lastoldsh; int nextnlevel; IdleRegister idle_register; From 60c341c236b0f20f298d0785eab2fe0b62268521 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 24 Mar 2020 11:30:31 +0100 Subject: [PATCH 223/264] Wavelet - more --- rtengine/ipwavelet.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 54d103b7b..a899f5a9a 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1722,6 +1722,9 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } +#ifdef _OPENMP + #pragma omp barrier +#endif if((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena && cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step #ifdef _OPENMP From 2bb747b55fd7acf320852ef08db8275d3efb10d7 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 24 Mar 2020 13:46:28 +0100 Subject: [PATCH 224/264] Wvalet - hide radius when old algo --- rtgui/wavelet.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index e314ee018..63eb7743e 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -3134,6 +3134,12 @@ void Wavelet::showmaskToggled() void Wavelet::oldshToggled() { + if (oldsh->get_active()) { + radius->hide(); + } else { + radius->show(); + } + if (multiImage) { if (oldsh->get_inconsistent()) { oldsh->set_inconsistent(false); From cdf8d8ec7f3741af1299b9d524a97bb69858404c Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 25 Mar 2020 07:15:27 +0100 Subject: [PATCH 225/264] Wavelet - added offset to contrast levels --- rtdata/languages/default | 2 ++ rtengine/ipwavelet.cc | 21 +++++++++++---------- rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtgui/paramsedited.cc | 8 +++++++- rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 14 ++++++++++++++ rtgui/wavelet.h | 2 ++ 8 files changed, 42 insertions(+), 11 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 3229e1015..f8cf543d6 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -803,6 +803,7 @@ HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_MSG_WAVOLDSH;Old algorithm +HISTORY_MSG_WAVOFFSET;Offset HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2293,6 +2294,7 @@ TP_WAVELET_USH;None TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. +TP_WAVELET_WAVOFFSET;Offset TP_WBALANCE_AUTO;Auto TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_AUTOOLD;Auto RGB grey diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index a899f5a9a..9177db0cc 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1691,7 +1691,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } - if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena && !cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step + if ((cp.conres >= 0.f || cp.conresH >= 0.f) && cp.resena && !cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step LabImage *temp = nullptr; temp = new LabImage(W_L, H_L); #ifdef _OPENMP @@ -2894,13 +2894,14 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz const float skinprot = params->wavelet.skinprotect; const float skinprotneg = -skinprot; const float factorHard = (1.f - skinprotneg / 100.f); + const float offs = params->wavelet.offset; //to adjust increase contrast with local contrast //for each pixel and each level float beta; float mea[9]; - float rap = mean[level] - 2.f * cp.sigm * sigma[level]; + float rap = offs * mean[level] - 2.f * cp.sigm * sigma[level]; if (rap > 0.f) { mea[0] = rap; @@ -2908,7 +2909,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz mea[0] = mean[level] / 6.f; } - rap = mean[level] - cp.sigm * sigma[level]; + rap = offs * mean[level] - cp.sigm * sigma[level]; if (rap > 0.f) { mea[1] = rap; @@ -2916,13 +2917,13 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz mea[1] = mean[level] / 2.f; } - mea[2] = mean[level]; // 50% data - mea[3] = mean[level] + cp.sigm * sigma[level] / 2.f; - mea[4] = mean[level] + cp.sigm * sigma[level]; //66% - mea[5] = mean[level] + cp.sigm * 1.2f * sigma[level]; - mea[6] = mean[level] + cp.sigm * 1.5f * sigma[level]; // - mea[7] = mean[level] + cp.sigm * 2.f * sigma[level]; //95% - mea[8] = mean[level] + cp.sigm * 2.5f * sigma[level]; //99% + mea[2] = offs * mean[level]; // 50% data + mea[3] = offs * mean[level] + cp.sigm * sigma[level] / 2.f; + mea[4] = offs * mean[level] + cp.sigm * sigma[level]; //66% + mea[5] = offs * mean[level] + cp.sigm * 1.2f * sigma[level]; + mea[6] = offs * mean[level] + cp.sigm * 1.5f * sigma[level]; // + mea[7] = offs * mean[level] + cp.sigm * 2.f * sigma[level]; //95% + mea[8] = offs * mean[level] + cp.sigm * 2.5f * sigma[level]; //99% bool useChromAndHue = (skinprot != 0.f || cp.HSmet); float modchro; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 879423961..96d2302c8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2274,6 +2274,7 @@ WaveletParams::WaveletParams() : Dirmethod("all"), HSmethod("with"), sigma(1.0), + offset(1.0), rescon(0), resconH(0), reschro(0), @@ -2382,6 +2383,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && Dirmethod == other.Dirmethod && HSmethod == other.HSmethod && sigma == other.sigma + && offset == other.offset && rescon == other.rescon && resconH == other.resconH && reschro == other.reschro @@ -3567,6 +3569,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.oldsh, "Wavelet", "Oldsh", wavelet.oldsh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmr, "Wavelet", "TMr", wavelet.tmr, keyFile); saveToKeyfile(!pedited || pedited->wavelet.sigma, "Wavelet", "Sigma", wavelet.sigma, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.offset, "Wavelet", "Offset", wavelet.offset, keyFile); saveToKeyfile(!pedited || pedited->wavelet.rescon, "Wavelet", "ResidualcontShadow", wavelet.rescon, keyFile); saveToKeyfile(!pedited || pedited->wavelet.resconH, "Wavelet", "ResidualcontHighlight", wavelet.resconH, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thr, "Wavelet", "ThresholdResidShadow", wavelet.thr, keyFile); @@ -4687,6 +4690,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "HSMethod", pedited, wavelet.HSmethod, pedited->wavelet.HSmethod); assignFromKeyfile(keyFile, "Wavelet", "DirMethod", pedited, wavelet.Dirmethod, pedited->wavelet.Dirmethod); assignFromKeyfile(keyFile, "Wavelet", "Sigma", pedited, wavelet.sigma, pedited->wavelet.sigma); + assignFromKeyfile(keyFile, "Wavelet", "Offset", pedited, wavelet.offset, pedited->wavelet.offset); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontShadow", pedited, wavelet.rescon, pedited->wavelet.rescon); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", pedited, wavelet.resconH, pedited->wavelet.resconH); assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", pedited, wavelet.reschro, pedited->wavelet.reschro); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 2eb18781d..feee0391a 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1243,6 +1243,7 @@ struct WaveletParams { Glib::ustring Dirmethod; Glib::ustring HSmethod; double sigma; + double offset; int rescon; int resconH; int reschro; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 66a302f55..d80d98361 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -510,7 +510,8 @@ void ParamsEdited::set(bool v) wavelet.HSmethod = v; wavelet.Dirmethod = v; wavelet.sigma = v; - wavelet.rescon = v; + wavelet.sigma = v; + wavelet.offset = v; wavelet.resconH = v; wavelet.reschro = v; wavelet.tmrs = v; @@ -1107,6 +1108,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.HSmethod = wavelet.HSmethod && p.wavelet.HSmethod == other.wavelet.HSmethod; wavelet.Dirmethod = wavelet.Dirmethod && p.wavelet.Dirmethod == other.wavelet.Dirmethod; wavelet.sigma = wavelet.sigma && p.wavelet.sigma == other.wavelet.sigma; + wavelet.offset = wavelet.offset && p.wavelet.offset == other.wavelet.offset; wavelet.rescon = wavelet.rescon && p.wavelet.rescon == other.wavelet.rescon; wavelet.resconH = wavelet.resconH && p.wavelet.resconH == other.wavelet.resconH; wavelet.reschro = wavelet.reschro && p.wavelet.reschro == other.wavelet.reschro; @@ -3168,6 +3170,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.sigma = mods.wavelet.sigma; } + if (wavelet.offset) { + toEdit.wavelet.offset = mods.wavelet.offset; + } + if (wavelet.resconH) { toEdit.wavelet.resconH = dontforceSet && options.baBehav[ADDSET_WA_RESCONH] ? toEdit.wavelet.resconH + mods.wavelet.resconH : mods.wavelet.resconH; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 9e50031fb..8cd8e25f0 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -526,6 +526,7 @@ struct WaveletParamsEdited { bool daubcoeffmethod; bool Dirmethod; bool sigma; + bool offset; bool rescon; bool resconH; bool reschro; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 63eb7743e..956c52738 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -82,6 +82,7 @@ Wavelet::Wavelet() : oldsh(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_OLDSH")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.2, 2.5, 0.01, 1.))), + offset(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), @@ -177,6 +178,7 @@ Wavelet::Wavelet() : EvWavradius = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVRADIUS"); EvWavsigma = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGMA"); EvWavoldsh = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOLDSH"); + EvWavoffset = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOFFSET"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -331,6 +333,8 @@ Wavelet::Wavelet() : sigma->setAdjusterListener(this); levBox->pack_start(*sigma, Gtk::PACK_SHRINK); + offset->setAdjusterListener(this); + levBox->pack_start(*offset, Gtk::PACK_SHRINK); levBox->pack_start(*sup); sup->setAdjusterListener(this); @@ -1241,6 +1245,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) lastoldsh = pp->wavelet.oldsh; lasttmr = pp->wavelet.tmr; sigma->setValue(pp->wavelet.sigma); + offset->setValue(pp->wavelet.offset); rescon->setValue(pp->wavelet.rescon); resconH->setValue(pp->wavelet.resconH); reschro->setValue(pp->wavelet.reschro); @@ -1394,6 +1399,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) edgthresh->setEditedState(pedited->wavelet.edgthresh ? Edited : UnEdited); rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited); sigma->setEditedState(pedited->wavelet.sigma ? Edited : UnEdited); + offset->setEditedState(pedited->wavelet.offset ? Edited : UnEdited); resconH->setEditedState(pedited->wavelet.resconH ? Edited : UnEdited); reschro->setEditedState(pedited->wavelet.reschro ? Edited : UnEdited); tmrs->setEditedState(pedited->wavelet.tmrs ? Edited : UnEdited); @@ -1577,6 +1583,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.oldsh = oldsh->get_active(); pp->wavelet.tmr = tmr->get_active(); pp->wavelet.sigma = sigma->getValue(); + pp->wavelet.offset = offset->getValue(); pp->wavelet.rescon = rescon->getValue(); pp->wavelet.resconH = resconH->getValue(); pp->wavelet.reschro = reschro->getValue(); @@ -1689,6 +1696,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.Dirmethod = Dirmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.edgthresh = edgthresh->getEditedState(); pedited->wavelet.sigma = sigma->getEditedState(); + pedited->wavelet.offset = offset->getEditedState(); pedited->wavelet.rescon = rescon->getEditedState(); pedited->wavelet.resconH = resconH->getEditedState(); pedited->wavelet.reschro = reschro->getEditedState(); @@ -1924,6 +1932,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit balance->setDefault(defParams->wavelet.balance); iter->setDefault(defParams->wavelet.iter); sigma->setDefault(defParams->wavelet.sigma); + offset->setDefault(defParams->wavelet.offset); rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); @@ -1986,6 +1995,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit softradend->setDefaultEditedState(pedited->wavelet.softradend ? Edited : UnEdited); sigma->setDefault(defParams->wavelet.sigma); + offset->setDefault(defParams->wavelet.offset); rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); @@ -2037,6 +2047,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit } } else { sigma->setDefaultEditedState(Irrelevant); + offset->setDefaultEditedState(Irrelevant); rescon->setDefaultEditedState(Irrelevant); resconH->setDefaultEditedState(Irrelevant); reschro->setDefaultEditedState(Irrelevant); @@ -2565,6 +2576,7 @@ void Wavelet::setBatchMode(bool batchMode) curveEditorRES->setBatchMode(batchMode); curveEditorGAM->setBatchMode(batchMode); sigma->showEditedCB(); + offset->showEditedCB(); rescon->showEditedCB(); resconH->showEditedCB(); reschro->showEditedCB(); @@ -2648,6 +2660,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavrescon, rescon->getTextValue()); } else if (a == sigma) { listener->panelChanged(EvWavsigma, sigma->getTextValue()); + } else if (a == offset) { + listener->panelChanged(EvWavoffset, offset->getTextValue()); } else if (a == resconH) { listener->panelChanged(EvWavresconH, resconH->getTextValue()); } else if (a == reschro) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 7aede083f..94b88fd5c 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -80,6 +80,7 @@ private: rtengine::ProcEvent EvWavradius; rtengine::ProcEvent EvWavsigma; rtengine::ProcEvent EvWavoldsh; + rtengine::ProcEvent EvWavoffset; void foldAllButMe(GdkEventButton* event, MyExpander *expander); @@ -174,6 +175,7 @@ private: Adjuster* correction[9]; Adjuster* correctionch[9]; Adjuster* const sigma; + Adjuster* const offset; Adjuster* const rescon; Adjuster* const resconH; Adjuster* const reschro; From ea56e57ec2bcb2be47a36fd62e8fb26e33429544 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 26 Mar 2020 07:19:54 +0100 Subject: [PATCH 226/264] First version blur by level --- rtdata/languages/default | 4 ++-- rtengine/improcfun.h | 4 ++-- rtengine/ipwavelet.cc | 51 +++++++++++++++++++++++++++++++++------- rtgui/wavelet.cc | 18 +++++++------- rtgui/wavelet.h | 2 +- 5 files changed, 57 insertions(+), 22 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 313f7055a..bf260961f 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -806,7 +806,7 @@ HISTORY_MSG_THRESWAV;Balance threshold HISTORY_MSG_SOFTWAV;Soft radius HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_MSG_WAVOFFSET;Offset -HISTORY_MSG_TMSHAPE;Compression by level +HISTORY_MSG_BLSHAPE;Blur by level HISTORY_MSG_WAVBL;Blur levels HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s @@ -2141,6 +2141,7 @@ TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider al TP_WAVELET_BANONE;None TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method +TP_WAVELET_BLCURVE;Blur by levels TP_WAVELET_CBENAB;Toning and Color Balance TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CCURVE;Local contrast @@ -2297,7 +2298,6 @@ TP_WAVELET_TMSCALE;Scale TP_WAVELET_TMSTRENGTH;Compression strength TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. TP_WAVELET_TMEDGS;Edge stopping -TP_WAVELET_TMURVE;(un)Compression by Level TP_WAVELET_TON;Toning TP_WAVELET_USH;None TP_WAVELET_USHARP;Clarity method diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index d896342d5..424084b8c 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -207,8 +207,8 @@ public: void WaveletcontAllL(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_L, const Wavblcurve & wavblcurve, struct cont_params &cp, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); void WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); - void WaveletcontAllAB(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_a, const WavOpacityCurveW & waOpacityCurveW, - struct cont_params &cp, const bool useChannelA); + void WaveletcontAllAB(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_a, const Wavblcurve & wavblcurve, const WavOpacityCurveW & waOpacityCurveW, + struct cont_params &cp, const bool useChannelA, int skip); void WaveletAandBAllAB(const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, const cont_params &cp, FlatCurve* hhcurve, bool hhutili); void ContAllL(float **koeLi, float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * lab, float **varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 456a3bd1e..4600f14ec 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -59,6 +59,7 @@ struct cont_params { float sigm; int chrom; int chro; + float chrwav; int contrast; float th; float thH; @@ -209,6 +210,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.toningena = params->wavelet.exptoning; cp.noiseena = params->wavelet.expnoise; cp.blena = params->wavelet.expbl; + cp.chrwav = 0.01f * params->wavelet.chrwav; if (params->wavelet.Backmethod == "black") { cp.backm = 0; @@ -1061,7 +1063,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed) { - WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); + WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip); adecomp->reconstruct(labco->data + datalen, cp.strength); } } @@ -1080,7 +1082,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!bdecomp->memoryAllocationFailed) { - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, waOpacityCurveW, cp, false); + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); } } @@ -1100,8 +1102,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { - WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, waOpacityCurveW, cp, false); + WaveletcontAllAB(labco, varhue, varchro, *adecomp,wavblcurve, waOpacityCurveW, cp, true, skip); + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip); WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); adecomp->reconstruct(labco->data + datalen, cp.strength); @@ -2085,9 +2087,9 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { bef[co] = WavCoeffs_L[dir][co]; } - klev = 0.25f * (wavblcurve[lvl * 55.5f]); + klev = (wavblcurve[lvl * 55.5f]); - klev *= 50.f / skip; + klev *= lvl * 50.f / skip; boxblur(bef, aft, klev, Wlvl_L, Hlvl_L, false); for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { @@ -2173,8 +2175,8 @@ void ImProcFunctions::WaveletAandBAllAB(const wavelet_decomposition &WaveletCoef } -void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_ab, const WavOpacityCurveW & waOpacityCurveW, - struct cont_params &cp, const bool useChannelA) +void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_ab, const Wavblcurve & wavblcurve, const WavOpacityCurveW & waOpacityCurveW, + struct cont_params &cp, const bool useChannelA, int skip) { int maxlvl = WaveletCoeffs_ab.maxlevel(); @@ -2297,6 +2299,16 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float } } + bool wavcurvecomp = false;//not enable if 0.75 + + if (wavblcurve) { + for (int i = 0; i < 500; i++) { + if (wavblcurve[i] != 0.) { + wavcurvecomp = true; + } + } + } + #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) #endif @@ -2309,6 +2321,29 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float ** WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); ContAllAB(labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); + + if(wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f) { + float * bef = new float[Wlvl_ab * Hlvl_ab]; + float * aft = new float[Wlvl_ab * Hlvl_ab]; + float klev; + for (int co = 0; co < Hlvl_ab * Wlvl_ab; co++) { + bef[co] = WavCoeffs_ab[dir][co]; + } + klev = (wavblcurve[lvl * 55.5f]); + + klev *= cp.chrwav * lvl * 100.f / skip; + + boxblur(bef, aft, klev, Wlvl_ab, Hlvl_ab, false); + + for (int co = 0; co < Hlvl_ab * Wlvl_ab; co++) { + WavCoeffs_ab[dir][co] = aft[co]; + } + + delete bef; + delete aft; + } + + } } diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 1bea8a3fa..d5c5e55e8 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -63,7 +63,7 @@ Wavelet::Wavelet() : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true), curveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTEDIT"))), CCWcurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CCURVE"))), - curveEditortm(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_TMURVE"))), + curveEditorbl(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_BLCURVE"))), curveEditorRES(new CurveEditorGroup(options.lastWaveletCurvesDir)), curveEditorGAM(new CurveEditorGroup(options.lastWaveletCurvesDir)), separatorNeutral(Gtk::manage(new Gtk::HSeparator())), @@ -186,7 +186,7 @@ Wavelet::Wavelet() : EvWavoldsh = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOLDSH"); EvWavoffset = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOFFSET"); EvWavsoftwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_SOFTWAV"); - EvWavblshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_blshape"); + EvWavblshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLSHAPE"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -643,18 +643,18 @@ Wavelet::Wavelet() : //Blur Wavelet ToolParamBlock* const blBox = Gtk::manage(new ToolParamBlock()); - curveEditortm->setCurveListener(this); + curveEditorbl->setCurveListener(this); - blshape = static_cast(curveEditortm->addCurve(CT_Flat, "", nullptr, false, false)); + blshape = static_cast(curveEditorbl->addCurve(CT_Flat, "", nullptr, false, false)); blshape->setIdentityValue(0.); blshape->setResetCurve(FlatCurveType(default_params.blcurve.at(0)), default_params.blcurve); blshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_CC_TOOLTIP")); - curveEditortm->curveListComplete(); - curveEditortm->show(); + curveEditorbl->curveListComplete(); + curveEditorbl->show(); - blBox->pack_start(*curveEditortm, Gtk::PACK_SHRINK, 4); + blBox->pack_start(*curveEditorbl, Gtk::PACK_SHRINK, 4); chrwav->setAdjusterListener(this); @@ -1008,7 +1008,7 @@ Wavelet::~Wavelet() delete opaCurveEditorG; delete opacityCurveEditorG; - delete curveEditortm; + delete curveEditorbl; delete CCWcurveEditorG; delete curveEditorRES; delete curveEditorGAM; @@ -2640,7 +2640,7 @@ void Wavelet::setBatchMode(bool batchMode) opacityCurveEditorG->setBatchMode(batchMode); opacityCurveEditorW->setBatchMode(batchMode); opacityCurveEditorWL->setBatchMode(batchMode); - curveEditortm->setBatchMode(batchMode); + curveEditorbl->setBatchMode(batchMode); curveEditorRES->setBatchMode(batchMode); curveEditorGAM->setBatchMode(batchMode); sigma->showEditedCB(); diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 15ad773fc..0d9081660 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -147,7 +147,7 @@ private: CurveEditorGroup* const curveEditorG; CurveEditorGroup* const CCWcurveEditorG; - CurveEditorGroup* const curveEditortm; + CurveEditorGroup* const curveEditorbl; CurveEditorGroup* const curveEditorRES; CurveEditorGroup* const curveEditorGAM; Gtk::HSeparator* const separatorNeutral; From c836376766dd210eafb38584f36bbfc62fa39503 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 26 Mar 2020 09:34:38 +0100 Subject: [PATCH 227/264] Blur residual luma and chroma --- rtdata/languages/default | 6 ++++ rtengine/ipwavelet.cc | 74 +++++++++++++++++++++++++++++++--------- rtengine/procparams.cc | 8 +++++ rtengine/procparams.h | 2 ++ rtgui/paramsedited.cc | 12 +++++++ rtgui/paramsedited.h | 2 ++ rtgui/wavelet.cc | 36 ++++++++++++++++++- rtgui/wavelet.h | 5 +++ 8 files changed, 128 insertions(+), 17 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index bf260961f..282327ba5 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -808,6 +808,8 @@ HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_MSG_WAVOFFSET;Offset HISTORY_MSG_BLSHAPE;Blur by level HISTORY_MSG_WAVBL;Blur levels +HISTORY_MSG_BLURWAV;Blur luminance +HISTORY_MSG_BLURCWAV;Blur chroma HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2142,6 +2144,7 @@ TP_WAVELET_BANONE;None TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method TP_WAVELET_BLCURVE;Blur by levels +TP_WAVELET_BLURFRAME;Blur TP_WAVELET_CBENAB;Toning and Color Balance TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CCURVE;Local contrast @@ -2262,6 +2265,8 @@ TP_WAVELET_RADIUS;Radius Shadows - Highlight TP_WAVELET_RE1;Reinforced TP_WAVELET_RE2;Unchanged TP_WAVELET_RE3;Reduced +TP_WAVELET_RESBLUR;Blur Luminance +TP_WAVELET_RESBLURC;Blur Chroma TP_WAVELET_RESCHRO;Intensity TP_WAVELET_RESCON;Shadows TP_WAVELET_RESCONH;Highlights @@ -2299,6 +2304,7 @@ TP_WAVELET_TMSTRENGTH;Compression strength TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. TP_WAVELET_TMEDGS;Edge stopping TP_WAVELET_TON;Toning +TP_WAVELET_TMTYPE;Compression method TP_WAVELET_USH;None TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 4600f14ec..461bdc7ac 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -65,6 +65,8 @@ struct cont_params { float thH; float conres; float conresH; + float blurres; + float blurcres; float radius; float chrores; bool oldsh; @@ -396,6 +398,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.radius = waparams.radius; cp.chrores = waparams.reschro; cp.oldsh = waparams.oldsh; + cp.blurres = waparams.resblur; + cp.blurcres = waparams.resblurc; //cp.hueres=waparams.reshue; cp.hueres = 2.f; cp.th = float(waparams.thr); @@ -1910,7 +1914,25 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } +//Blur luma + if(cp.blurres != 0.f && cp.resena) { + float rad = cp.blurres / skip; + float * bef = new float[W_L * H_L]; + float * aft = new float[W_L * H_L]; + for (int i = 0; i < H_L * W_L; i++) { + bef[i] = WavCoeffs_L0[i]; + } + boxblur(bef, aft, rad, W_L, H_L, false); + + for (int i = 0; i < H_L * W_L; i++) { + WavCoeffs_L0[i] = aft[i]; + } + + delete bef; + delete aft; + } +// #ifdef _OPENMP #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif @@ -2054,15 +2076,15 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * // end } - bool wavcurvecomp = false;//not enable if 0.75 + bool wavcurvecomp = false;//not enable if 0.75 - if (wavblcurve) { - for (int i = 0; i < 500; i++) { - if (wavblcurve[i] != 0.) { - wavcurvecomp = true; - } - } - } + if (wavblcurve) { + for (int i = 0; i < 500; i++) { + if (wavblcurve[i] != 0.) { + wavcurvecomp = true; + } + } + } #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) @@ -2298,16 +2320,36 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float } } } + +//Blur chroma + if(cp.blurcres != 0.f && cp.resena) { + float rad = cp.blurcres / skip; + float * bef = new float[W_L * H_L]; + float * aft = new float[W_L * H_L]; - bool wavcurvecomp = false;//not enable if 0.75 + for (int i = 0; i < H_L * W_L; i++) { + bef[i] = WavCoeffs_ab0[i]; + } + boxblur(bef, aft, rad, W_L, H_L, false); - if (wavblcurve) { - for (int i = 0; i < 500; i++) { - if (wavblcurve[i] != 0.) { - wavcurvecomp = true; - } - } - } + for (int i = 0; i < H_L * W_L; i++) { + WavCoeffs_ab0[i] = aft[i]; + } + + delete bef; + delete aft; + } + + + bool wavcurvecomp = false;//not enable if 0.75 + + if (wavblcurve) { + for (int i = 0; i < 500; i++) { + if (wavblcurve[i] != 0.) { + wavcurvecomp = true; + } + } + } #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 0c76e3003..574e4f3a2 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2291,6 +2291,8 @@ WaveletParams::WaveletParams() : rescon(0), resconH(0), reschro(0), + resblur(0), + resblurc(0), tmrs(0), edgs(1.4), scale(1.), @@ -2404,6 +2406,8 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && rescon == other.rescon && resconH == other.resconH && reschro == other.reschro + && resblur == other.resblur + && resblurc == other.resblurc && tmrs == other.tmrs && edgs == other.edgs && scale == other.scale @@ -3601,6 +3605,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.thrH, "Wavelet", "ThresholdResidHighLight", wavelet.thrH, keyFile); saveToKeyfile(!pedited || pedited->wavelet.radius, "Wavelet", "Residualradius", wavelet.radius, keyFile); saveToKeyfile(!pedited || pedited->wavelet.reschro, "Wavelet", "Residualchroma", wavelet.reschro, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.resblur, "Wavelet", "Residualblur", wavelet.resblur, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.resblurc, "Wavelet", "Residualblurc", wavelet.resblurc, keyFile); saveToKeyfile(!pedited || pedited->wavelet.tmrs, "Wavelet", "ResidualTM", wavelet.tmrs, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgs, "Wavelet", "ResidualEDGS", wavelet.edgs, keyFile); saveToKeyfile(!pedited || pedited->wavelet.scale, "Wavelet", "ResidualSCALE", wavelet.scale, keyFile); @@ -4719,6 +4725,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "ResidualcontShadow", pedited, wavelet.rescon, pedited->wavelet.rescon); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", pedited, wavelet.resconH, pedited->wavelet.resconH); assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", pedited, wavelet.reschro, pedited->wavelet.reschro); + assignFromKeyfile(keyFile, "Wavelet", "Residualblur", pedited, wavelet.resblur, pedited->wavelet.resblur); + assignFromKeyfile(keyFile, "Wavelet", "Residualblurc", pedited, wavelet.resblurc, pedited->wavelet.resblurc); assignFromKeyfile(keyFile, "Wavelet", "ResidualTM", pedited, wavelet.tmrs, pedited->wavelet.tmrs); assignFromKeyfile(keyFile, "Wavelet", "ResidualEDGS", pedited, wavelet.edgs, pedited->wavelet.edgs); assignFromKeyfile(keyFile, "Wavelet", "ResidualSCALE", pedited, wavelet.scale, pedited->wavelet.scale); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index e78c8fc47..62ca88690 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1250,6 +1250,8 @@ struct WaveletParams { int rescon; int resconH; int reschro; + int resblur; + int resblurc; double tmrs; double edgs; double scale; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index b568d3b52..4dc81fc5f 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -514,6 +514,8 @@ void ParamsEdited::set(bool v) wavelet.offset = v; wavelet.resconH = v; wavelet.reschro = v; + wavelet.resblur = v; + wavelet.resblurc = v; wavelet.tmrs = v; wavelet.edgs = v; wavelet.scale = v; @@ -1116,6 +1118,8 @@ void ParamsEdited::initFrom(const std::vector& wavelet.rescon = wavelet.rescon && p.wavelet.rescon == other.wavelet.rescon; wavelet.resconH = wavelet.resconH && p.wavelet.resconH == other.wavelet.resconH; wavelet.reschro = wavelet.reschro && p.wavelet.reschro == other.wavelet.reschro; + wavelet.resblur = wavelet.resblur && p.wavelet.resblur == other.wavelet.resblur; + wavelet.resblurc = wavelet.resblurc && p.wavelet.resblurc == other.wavelet.resblurc; wavelet.tmrs = wavelet.tmrs && p.wavelet.tmrs == other.wavelet.tmrs; wavelet.edgs = wavelet.edgs && p.wavelet.edgs == other.wavelet.edgs; wavelet.scale = wavelet.scale && p.wavelet.scale == other.wavelet.scale; @@ -3198,6 +3202,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.offset = mods.wavelet.offset; } + if (wavelet.resblur) { + toEdit.wavelet.resblur = mods.wavelet.resblur; + } + + if (wavelet.resblurc) { + toEdit.wavelet.resblurc = mods.wavelet.resblurc; + } + if (wavelet.resconH) { toEdit.wavelet.resconH = dontforceSet && options.baBehav[ADDSET_WA_RESCONH] ? toEdit.wavelet.resconH + mods.wavelet.resconH : mods.wavelet.resconH; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 8e02ba58f..de688d856 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -530,6 +530,8 @@ struct WaveletParamsEdited { bool rescon; bool resconH; bool reschro; + bool resblur; + bool resblurc; bool tmrs; bool edgs; bool scale; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index d5c5e55e8..cc53a45a2 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -87,6 +87,8 @@ Wavelet::Wavelet() : rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), + resblur(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLUR"), 0, 100, 1, 0))), + resblurc(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLURC"), 0, 100, 1, 0))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), scale(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSCALE"), 0.1, 10.0, 0.01, 1.0))), @@ -149,6 +151,7 @@ Wavelet::Wavelet() : chanMixerHLFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_HIGHLIGHT")))), chanMixerMidFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_MIDTONES")))), chanMixerShadowsFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_SHADOWS")))), + blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))), chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))), wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))), labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))), @@ -187,6 +190,8 @@ Wavelet::Wavelet() : EvWavoffset = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOFFSET"); EvWavsoftwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_SOFTWAV"); EvWavblshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLSHAPE"); + EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV"); + EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); @@ -662,7 +667,7 @@ Wavelet::Wavelet() : softwav->setLogScale(10, -10); softwav->setAdjusterListener(this); - blBox->pack_start(*softwav); +// blBox->pack_start(*softwav); // Gamut @@ -741,6 +746,14 @@ Wavelet::Wavelet() : resBox->pack_start(*contrast); //keep the possibility to reinstall reschro->setAdjusterListener(this); + resblur->setAdjusterListener(this); + resblurc->setAdjusterListener(this); + + blurFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const blurBox = Gtk::manage(new ToolParamBlock()); + blurBox->pack_start(*resblur); + blurBox->pack_start(*resblurc); + blurFrame->add(*blurBox); chromaFrame->set_label_align(0.025, 0.5); ToolParamBlock* const chromaBox = Gtk::manage(new ToolParamBlock()); @@ -796,6 +809,7 @@ Wavelet::Wavelet() : const std::vector milestones3 = makeWholeHueRange(); curveEditorRES->setCurveListener(this); + resBox->pack_start(*blurFrame); resBox->pack_start(*chromaFrame); hhshape = static_cast(curveEditorRES->addCurve(CT_Flat, M("TP_WAVELET_CURVEEDITOR_HH"))); @@ -1292,6 +1306,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) rescon->setValue(pp->wavelet.rescon); resconH->setValue(pp->wavelet.resconH); reschro->setValue(pp->wavelet.reschro); + resblur->setValue(pp->wavelet.resblur); + resblurc->setValue(pp->wavelet.resblurc); tmrs->setValue(pp->wavelet.tmrs); edgs->setValue(pp->wavelet.edgs); scale->setValue(pp->wavelet.scale); @@ -1449,6 +1465,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) offset->setEditedState(pedited->wavelet.offset ? Edited : UnEdited); resconH->setEditedState(pedited->wavelet.resconH ? Edited : UnEdited); reschro->setEditedState(pedited->wavelet.reschro ? Edited : UnEdited); + resblur->setEditedState(pedited->wavelet.resblur ? Edited : UnEdited); + resblurc->setEditedState(pedited->wavelet.resblurc ? Edited : UnEdited); tmrs->setEditedState(pedited->wavelet.tmrs ? Edited : UnEdited); edgs->setEditedState(pedited->wavelet.edgs ? Edited : UnEdited); scale->setEditedState(pedited->wavelet.scale ? Edited : UnEdited); @@ -1638,6 +1656,8 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.rescon = rescon->getValue(); pp->wavelet.resconH = resconH->getValue(); pp->wavelet.reschro = reschro->getValue(); + pp->wavelet.resblur = resblur->getValue(); + pp->wavelet.resblurc = resblurc->getValue(); pp->wavelet.tmrs = tmrs->getValue(); pp->wavelet.edgs = edgs->getValue(); pp->wavelet.scale = scale->getValue(); @@ -1755,6 +1775,8 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.rescon = rescon->getEditedState(); pedited->wavelet.resconH = resconH->getEditedState(); pedited->wavelet.reschro = reschro->getEditedState(); + pedited->wavelet.resblur = resblur->getEditedState(); + pedited->wavelet.resblurc = resblurc->getEditedState(); pedited->wavelet.tmrs = tmrs->getEditedState(); pedited->wavelet.edgs = edgs->getEditedState(); pedited->wavelet.scale = scale->getEditedState(); @@ -1997,6 +2019,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); + resblur->setDefault(defParams->wavelet.resblur); + resblurc->setDefault(defParams->wavelet.resblurc); tmrs->setDefault(defParams->wavelet.tmrs); edgs->setDefault(defParams->wavelet.edgs); scale->setDefault(defParams->wavelet.scale); @@ -2062,6 +2086,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); + resblur->setDefault(defParams->wavelet.resblur); + resblurc->setDefault(defParams->wavelet.resblurc); tmrs->setDefault(defParams->wavelet.tmrs); edgs->setDefault(defParams->wavelet.edgs); scale->setDefault(defParams->wavelet.scale); @@ -2116,6 +2142,8 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit rescon->setDefaultEditedState(Irrelevant); resconH->setDefaultEditedState(Irrelevant); reschro->setDefaultEditedState(Irrelevant); + resblur->setDefaultEditedState(Irrelevant); + resblurc->setDefaultEditedState(Irrelevant); tmrs->setDefaultEditedState(Irrelevant); edgs->setDefaultEditedState(Irrelevant); scale->setDefaultEditedState(Irrelevant); @@ -2648,6 +2676,8 @@ void Wavelet::setBatchMode(bool batchMode) rescon->showEditedCB(); resconH->showEditedCB(); reschro->showEditedCB(); + resblur->showEditedCB(); + resblurc->showEditedCB(); tmrs->showEditedCB(); edgs->showEditedCB(); scale->showEditedCB(); @@ -2736,6 +2766,10 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavresconH, resconH->getTextValue()); } else if (a == reschro) { listener->panelChanged(EvWavreschro, reschro->getTextValue()); + } else if (a == resblur) { + listener->panelChanged(EvWavresblur, resblur->getTextValue()); + } else if (a == resblurc) { + listener->panelChanged(EvWavresblurc, resblurc->getTextValue()); } else if (a == tmrs) { adjusterUpdateUI(a); listener->panelChanged(EvWavtmrs, tmrs->getTextValue()); diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 0d9081660..15ac97a84 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -85,6 +85,8 @@ private: rtengine::ProcEvent EvWavoffset; rtengine::ProcEvent EvWavsoftwav; rtengine::ProcEvent EvWavblshape; + rtengine::ProcEvent EvWavresblur; + rtengine::ProcEvent EvWavresblurc; void foldAllButMe(GdkEventButton* event, MyExpander *expander); @@ -185,6 +187,8 @@ private: Adjuster* const rescon; Adjuster* const resconH; Adjuster* const reschro; + Adjuster* const resblur; + Adjuster* const resblurc; Adjuster* const tmrs; Adjuster* const edgs; Adjuster* const scale; @@ -273,6 +277,7 @@ private: Gtk::Frame* const chanMixerHLFrame; Gtk::Frame* const chanMixerMidFrame; Gtk::Frame* const chanMixerShadowsFrame; + Gtk::Frame* const blurFrame; Gtk::Frame* const chromaFrame; Gtk::Label* const wavLabels; From ac83695645396b9e185e9c5a4272c80cb8b7f2ba Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 27 Mar 2020 09:27:43 +0100 Subject: [PATCH 228/264] Suppress warning and add tooltips --- rtdata/languages/default | 2 ++ rtengine/improccoordinator.cc | 10 ---------- rtgui/wavelet.cc | 4 +++- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 282327ba5..cac1f6f12 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2276,6 +2276,7 @@ TP_WAVELET_SETTINGS;Wavelet Settings TP_WAVELET_SHA;Sharp mask TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_SIGMA;Sigma +TP_WAVELET_SIGMA_TOOLTIP;Sigma acts on the relative amplitude of the signal width. The higher it is, the more the effect will be maximum and the more the unsightly effects will appear.\nLow values are recommended for creating tone-mapping in conjonction with usage Shadows/Highlights below TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. TP_WAVELET_SKY;Sky targetting/protection @@ -2310,6 +2311,7 @@ TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. TP_WAVELET_WAVOFFSET;Offset +TP_WAVELET_OFFSET_TOOLTIP;Offset acts on mean of signal.\nHigh values will favor action on the contrast of the highlights.\nLow values will favor action on the contrast of shadows TP_WBALANCE_AUTO;Auto TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_AUTOOLD;Auto RGB grey diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 45f9f2e56..6374cb837 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -885,10 +885,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } if (WaveParams.softrad > 0.f) { - printf("s1\n"); provradius = new LabImage(pW, pH); provradius->CopyFrom(nprevl); - printf("s2\n"); } @@ -924,13 +922,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) WaveParams.expnoise = pronois; if (WaveParams.softrad > 0.f) { - printf("s3\n"); array2D ble(pW, pH); array2D guid(pW, pH); Imagefloat *tmpImage = nullptr; tmpImage = new Imagefloat(pW, pH); - printf("s4\n"); #ifdef _OPENMP #pragma omp parallel for @@ -954,7 +950,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) tmpImage->b(ir, jr) = Z; ble[ir][jr] = Y / 32768.f; } - printf("s5\n"); double epsilmax = 0.0001; double epsilmin = 0.00001; @@ -965,7 +960,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float blur = 10.f / scale * (0.0001f + 0.8f * WaveParams.softrad); // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); - printf("s6\n"); @@ -982,10 +976,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) Color::XYZ2Lab(X, Y, Z, L, a, b); nprevl->L[ir][jr] = L; } - printf("s7\n"); delete tmpImage; - printf("s8\n"); } @@ -1075,11 +1067,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } */ if (WaveParams.softrad > 0.f) { - printf("s9\n"); delete provradius; provradius = NULL; - printf("s10\n"); } diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index cc53a45a2..336aad4d5 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -82,7 +82,7 @@ Wavelet::Wavelet() : showmask(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_SHOWMASK")))), oldsh(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_OLDSH")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), - sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.2, 2.5, 0.01, 1.))), + sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.05, 2.5, 0.01, 1.))), offset(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), @@ -351,6 +351,8 @@ Wavelet::Wavelet() : levBox->pack_start(*sigma, Gtk::PACK_SHRINK); offset->setAdjusterListener(this); levBox->pack_start(*offset, Gtk::PACK_SHRINK); + sigma->set_tooltip_text(M("TP_WAVELET_SIGMA_TOOLTIP")); + offset->set_tooltip_text(M("TP_WAVELET_OFFSET_TOOLTIP")); levBox->pack_start(*sup); sup->setAdjusterListener(this); From 95d40e72192096d90efbfa550e85d87603158b6f Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 27 Mar 2020 13:31:46 +0100 Subject: [PATCH 229/264] Clean code ipwavelet --- rtengine/ipwavelet.cc | 155 +----------------------------------------- 1 file changed, 1 insertion(+), 154 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 461bdc7ac..ede980ee6 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -17,7 +17,7 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// * 2014 - 2019 Jacques Desmis +// * 2014 - 2019 2020 - Jacques Desmis // * 2014 Ingo Weyrich // @@ -369,7 +369,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } -// if(settings->verbose) printf("Wav mul 0=%f 1=%f 2=%f 3=%f 4=%f 5=%f 6=%f 7=%f 8=%f 9=%f\n",cp.mul[0],cp.mul[1],cp.mul[2],cp.mul[3],cp.mul[4],cp.mul[5],cp.mul[6],cp.mul[7],cp.mul[8],cp.mul[9]); for (int sc = 0; sc < 9; sc++) { //reduce strength if zoom < 100% for chroma and tuning if (sc == 0) { if (scaleskip[sc] < 1.f) { @@ -425,13 +424,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.numlevS = params->wavelet.threshold2; int maxlevS = 9 - cp.numlevH; cp.numlevS = rtengine::min(cp.numlevS, maxlevS); - //printf("levHigh=%d levShad=%d\n",cp.numlevH,cp.numlevS); //highlight cp.b_lhl = static_cast(params->wavelet.hllev.getBottomLeft()); cp.t_lhl = static_cast(params->wavelet.hllev.getTopLeft()); cp.b_rhl = static_cast(params->wavelet.hllev.getBottomRight()); cp.t_rhl = static_cast(params->wavelet.hllev.getTopRight()); - //printf("BL=%f TL=%f BR=%f TR=%f\n",cp.b_lhl,cp.t_lhl,cp.b_rhl,cp.t_rhl); //pastel cp.b_lpast = static_cast(params->wavelet.pastlev.getBottomLeft()); cp.t_lpast = static_cast(params->wavelet.pastlev.getTopLeft()); @@ -458,7 +455,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.lev3n = static_cast(params->wavelet.level3noise.getTop()); cp.detectedge = params->wavelet.medianlev; - //printf("low=%f mean=%f sd=%f max=%f\n",cp.edg_low,cp.edg_mean,cp.edg_sd,cp.edg_max); int minwin = rtengine::min(imwidth, imheight); int maxlevelcrop = 9; @@ -487,7 +483,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const maxlevelcrop = 5; } - // printf("minwin=%d maxcrop=%d\n",minwin, maxlevelcrop); int levwav = params->wavelet.thres; @@ -567,7 +562,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const levwav = rtengine::min(maxlev2, levwav); - //printf("levwav = %d\n",levwav); #ifdef _OPENMP int numthreads = 1; int maxnumberofthreadsforwavelet = 0; @@ -594,7 +588,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const maxnumberofthreadsforwavelet = 8; } - //printf("maxNRT=%d\n",maxnumberofthreadsforwavelet); if ((maxnumberofthreadsforwavelet == 6 || maxnumberofthreadsforwavelet == 8) && levwav == 10) { maxnumberofthreadsforwavelet -= 2; } @@ -604,7 +597,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } - //printf("maxthre=%d\n",maxnumberofthreadsforwavelet); // Calculate number of tiles. If less than omp_get_max_threads(), then limit num_threads to number of tiles @@ -857,141 +849,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (cp.val > 0 || ref || contr) { //edge Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } -/* - //here TM wavelet - if(cp.tmena ){ - float mean2[10]; - float meanN2[10]; - float sigma2[10]; - float sigmaN2[10]; - float MaxP2[10]; - float MaxN2[10]; - //calculate mean, amx, etc. - Evaluate2(*Ldecomp, mean2, meanN2, sigma2, sigmaN2, MaxP2, MaxN2); - - int leve = levwavL; - int dir = 3; - int WW = labco->W; - int HH = labco->H; - float ****templevel = nullptr; - templevel = new float***[dir]; - - //allocate memory for 3 DIR n levels, HH, WW - for (int d = 0; d < dir; d++) { - templevel[d] = new float**[leve]; - - for (int k = 0; k < leve; k++) { - templevel[d][k] = new float*[HH]; - - for (int i = 0; i < HH; i++) { - templevel[d][k][i] = new float[WW]; - } - } - } - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - //fill templevel with decomp for each level, each dir,X Y - for (int dir = 1; dir < 4; dir++) { - for (int level = 0; level < levwavL; ++level) { - int W_L = Ldecomp->level_W(level); - int H_L = Ldecomp->level_H(level); - float **wav_L = Ldecomp->level_coeffs(level); - madL[level][dir - 1] = Mad(wav_L[dir], W_L * H_L);//evaluate noise by level - - for (int y = 0; y < H_L; y++) { - for (int x = 0; x < W_L; x++) { - float val = wav_L[dir][y * W_L + x]; - templevel[dir - 1][level][y][x] = val; - } - } - } - } - - - float thres = params->wavelet.threswav; - - bool wavcurvecomp = false;//not enable if 0.75 - - if (wavtmCurve) { - for (int i = 0; i < 500; i++) { - if (wavtmCurve[i] != 0.75) { - wavcurvecomp = true; - } - } - } - - //for each level, dir calculate templevel with compression - for (int dir = 1; dir < 4; dir++) { - for (int level = 0; level < levwavL; ++level) { - int W_L = Ldecomp->level_W(level); - int H_L = Ldecomp->level_H(level); - - if (wavtmCurve && wavcurvecomp) { - float klev = (wavtmCurve[level * 55.5f] - 0.75f); - - if (klev < 0.f) { - klev *= 2.6666f;//compression increase contraste - } else { - klev *= 4.f;//dilatation reduce contraste - detailattenuator - } - - float compression = expf(-klev); - float detailattenuator = klev; - - if (klev < 0.0f) { - detailattenuator = 0.0f; - } - Compresslevels2(templevel[dir - 1][level], W_L, H_L, compression, detailattenuator, thres, mean2[level], MaxP2[level], meanN2[level], MaxN2[level], madL[level][dir - 1]); - } - } - } - - //retrieve decomp -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int dir = 1; dir < 4; dir++) { - for (int level = 0; level < levwavL ; ++level) { - int W_L = Ldecomp->level_W(level); - int H_L = Ldecomp->level_H(level); - float **wav_L = Ldecomp->level_coeffs(level); - - for (int y = 0; y < H_L; y++) { - for (int x = 0; x < W_L; x++) { - wav_L[dir][y * W_L + x] = templevel[dir - 1][level][y][x]; - } - } - } - } - - - //free memory - for (int i = 0; i < dir; i++) { - for (int j = 0; j < leve; j++) { - for (int l = 0; l < HH; l++) { - delete [] templevel[i][j][l]; - } - } - } - - for (int i = 0; i < dir; i++) { - for (int j = 0; j < leve; j++) { - delete [] templevel[i][j]; - } - } - - for (int i = 0; i < dir; i++) { - delete [] templevel[i]; - } - - delete [] templevel; - - } - // end TM wavelet -*/ //init for edge and denoise float vari[4]; @@ -1055,14 +912,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (!hhutili) { //always a or b int levwava = levwav; - // printf("Levwava before: %d\n",levwava); if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels while (levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f)) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { levwava--; } } - //printf("Levwava after: %d\n",levwava); if (levwava > 0) { const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); @@ -1074,14 +929,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwavb = levwav; - //printf("Levwavb before: %d\n",levwavb); if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels while (levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f)) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { levwavb--; } } - // printf("Levwavb after: %d\n",levwavb); if (levwavb > 0) { const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); @@ -1093,14 +946,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } else {// a and b int levwavab = levwav; - // printf("Levwavab before: %d\n",levwavab); if (cp.chrores == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels while (levwavab > 0 && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavab - 1] == 0.f)) || (cp.CHmet != 2 && (levwavab == 10 || (!cp.curv || cp.mulC[levwavab - 1] == 0.f))))) && (!cp.opaRG || levwavab == 10 || (cp.opaRG && cp.mulopaRG[levwavab - 1] == 0.f)) && ((levwavab == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavab - 1] == 0.f)))) { levwavab--; } } - // printf("Levwavab after: %d\n",levwavab); if (levwavab > 0) { const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); @@ -1758,7 +1609,6 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } - // printf("MAXmax0=%f MINmin0=%f\n",max0,min0); //tone mapping if (cp.tonemap && cp.contmet == 2 && cp.resena) { @@ -2400,7 +2250,6 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const cont_params& cp, floa { int borderL = 2; -// printf("cpedth=%f\n",cp.eddetthr); if (cp.eddetthr < 30.f) { borderL = 1; @@ -3571,7 +3420,6 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f } if (cp.bam && cp.diag) { -//printf("OK Chroma\n"); if (cp.opaW && cp.BAmet == 2) { int iteration = cp.ite; int itplus = 7 + iteration; @@ -3901,7 +3749,6 @@ void ImProcFunctions::Compresslevels2(float **Source, int W_L, int H_L, float co float exponent; - // printf("maxp=%f maxn=%f\n", maxp, maxn); if (detailattenuator > 0.f && detailattenuator < 0.05f) { float betemp = expf(-(2.f - detailattenuator + 0.693147f)) - 1.f; //0.69315 = log(2) exponent = 1.2f * xlogf(-betemp); From d10ff9e816f6ad38d3fe7b6712576ca3ef627976 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 27 Mar 2020 16:21:17 +0100 Subject: [PATCH 230/264] Wavelet Improvment to GUI Residual --- rtdata/languages/default | 4 +++- rtgui/wavelet.cc | 48 ++++++++++++++++++++++++++-------------- rtgui/wavelet.h | 2 ++ 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index cac1f6f12..5c29a9bd0 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2168,6 +2168,7 @@ TP_WAVELET_COMPGAMMA;Compression gamma TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. TP_WAVELET_COMPTM;Tone mapping TP_WAVELET_CONTEDIT;'After' contrast curve +TP_WAVELET_CONTFRAME;Contrast - Compression TP_WAVELET_CONTR;Gamut TP_WAVELET_CONTRA;Contrast TP_WAVELET_CONTRAST_MINUS;Contrast - @@ -2254,7 +2255,7 @@ TP_WAVELET_NPLOW;Low TP_WAVELET_NPNONE;None TP_WAVELET_NPTYPE;Neighboring pixels TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. -TP_WAVELET_OLDSH;Old algorithm using negatives values +TP_WAVELET_OLDSH;Algorithm using negatives values TP_WAVELET_OPACITY;Opacity Blue-Yellow TP_WAVELET_OPACITYW;Contrast balance d/v-h curve TP_WAVELET_OPACITYWL;Final local contrast @@ -2274,6 +2275,7 @@ TP_WAVELET_RESID;Residual Image TP_WAVELET_SAT;Saturated chroma TP_WAVELET_SETTINGS;Wavelet Settings TP_WAVELET_SHA;Sharp mask +TP_WAVELET_SHFRAME;Shadows/Highlights TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_SIGMA;Sigma TP_WAVELET_SIGMA_TOOLTIP;Sigma acts on the relative amplitude of the signal width. The higher it is, the more the effect will be maximum and the more the unsightly effects will appear.\nLow values are recommended for creating tone-mapping in conjonction with usage Shadows/Highlights below diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 336aad4d5..5ad6fda55 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -151,6 +151,8 @@ Wavelet::Wavelet() : chanMixerHLFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_HIGHLIGHT")))), chanMixerMidFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_MIDTONES")))), chanMixerShadowsFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_SHADOWS")))), + shFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_SHFRAME")))), + contFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CONTFRAME")))), blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))), chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))), wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))), @@ -726,26 +728,33 @@ Wavelet::Wavelet() : ToolParamBlock* const resBox = Gtk::manage(new ToolParamBlock()); oldsh->set_active(true); oldshConn = oldsh->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::oldshToggled)); - resBox->pack_start(*oldsh); + rescon->setAdjusterListener(this); - resBox->pack_start(*rescon, Gtk::PACK_SHRINK); - resBox->pack_start(*thr); thr->setAdjusterListener(this); resconH->setAdjusterListener(this); - resBox->pack_start(*resconH, Gtk::PACK_SHRINK); thrH->setAdjusterListener(this); - resBox->pack_start(*thrH, Gtk::PACK_SHRINK); radius->setAdjusterListener(this); - resBox->pack_start(*radius, Gtk::PACK_SHRINK); + radius->hide(); + + shFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const shBox = Gtk::manage(new ToolParamBlock()); + shBox->pack_start(*oldsh); + shBox->pack_start(*rescon, Gtk::PACK_SHRINK); + shBox->pack_start(*thr); + shBox->pack_start(*resconH, Gtk::PACK_SHRINK); + shBox->pack_start(*thrH, Gtk::PACK_SHRINK); + shBox->pack_start(*radius, Gtk::PACK_SHRINK); + shFrame->add(*shBox); + resBox->pack_start(*shFrame); + contrast->set_tooltip_text(M("TP_WAVELET_CONTRA_TOOLTIP")); contrast->setAdjusterListener(this); - resBox->pack_start(*contrast); //keep the possibility to reinstall reschro->setAdjusterListener(this); resblur->setAdjusterListener(this); @@ -768,36 +777,42 @@ Wavelet::Wavelet() : Gtk::HBox* const ctboxTM = Gtk::manage(new Gtk::HBox()); ctboxTM->pack_start(*labmTM, Gtk::PACK_SHRINK, 1); - Gtk::HSeparator* const separatorR0 = Gtk::manage(new Gtk::HSeparator()); - resBox->pack_start(*separatorR0, Gtk::PACK_SHRINK, 2); +// Gtk::HSeparator* const separatorR0 = Gtk::manage(new Gtk::HSeparator()); +// resBox->pack_start(*separatorR0, Gtk::PACK_SHRINK, 2); TMmethod->append(M("TP_WAVELET_COMPCONT")); TMmethod->append(M("TP_WAVELET_COMPTM")); TMmethodconn = TMmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::TMmethodChanged)); ctboxTM->pack_start(*TMmethod); - resBox->pack_start(*ctboxTM); tmrs->set_tooltip_text(M("TP_WAVELET_TMSTRENGTH_TOOLTIP")); - resBox->pack_start(*tmrs); tmrs->setAdjusterListener(this); gamma->set_tooltip_text(M("TP_WAVELET_COMPGAMMA_TOOLTIP")); - resBox->pack_start(*gamma); gamma->setAdjusterListener(this); //edgs->set_tooltip_text(M("TP_WAVELET_TMEDGS_TOOLTIP")); - resBox->pack_start(*edgs); edgs->setAdjusterListener(this); //scale->set_tooltip_text(M("TP_WAVELET_TMSCALE_TOOLTIP")); - resBox->pack_start(*scale); scale->setAdjusterListener(this); - Gtk::HSeparator* const separatorR1 = Gtk::manage(new Gtk::HSeparator()); - resBox->pack_start(*separatorR1, Gtk::PACK_SHRINK, 2); + contFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const contBox = Gtk::manage(new ToolParamBlock()); + contBox->pack_start(*contrast); //keep the possibility to reinstall + contBox->pack_start(*ctboxTM); + contBox->pack_start(*tmrs); + contBox->pack_start(*gamma); + contBox->pack_start(*edgs); + contBox->pack_start(*scale); + contFrame->add(*contBox); + resBox->pack_start(*contFrame); + +// Gtk::HSeparator* const separatorR1 = Gtk::manage(new Gtk::HSeparator()); +// resBox->pack_start(*separatorR1, Gtk::PACK_SHRINK, 2); hueskin2->set_tooltip_markup(M("TP_WAVELET_HUESKY_TOOLTIP")); hueskin2->setBgGradient(milestones); @@ -1577,6 +1592,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) //BackmethodUpdateUI(); CLmethodUpdateUI(); lipstUpdateUI(); + oldshToggled(); //TilesmethodUpdateUI(); //daubcoeffmethodUpdateUI(); //DirmethodUpdateUI(); diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 15ac97a84..635d8c7a7 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -277,6 +277,8 @@ private: Gtk::Frame* const chanMixerHLFrame; Gtk::Frame* const chanMixerMidFrame; Gtk::Frame* const chanMixerShadowsFrame; + Gtk::Frame* const shFrame; + Gtk::Frame* const contFrame; Gtk::Frame* const blurFrame; Gtk::Frame* const chromaFrame; From a61463447ab90b6602f89050125030870ef75865 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 28 Mar 2020 08:35:00 +0100 Subject: [PATCH 231/264] Improvment to Blur levels --- rtdata/languages/default | 6 +++--- rtengine/ipwavelet.cc | 16 +++++++++------- rtengine/procparams.cc | 8 ++++---- rtengine/procparams.h | 2 +- rtgui/paramsedited.cc | 8 ++++---- rtgui/paramsedited.h | 2 +- rtgui/wavelet.cc | 29 ++++++++++++++--------------- rtgui/wavelet.h | 4 ++-- 8 files changed, 38 insertions(+), 37 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 5c29a9bd0..a46f09a88 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -803,7 +803,7 @@ HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_MSG_THRESWAV;Balance threshold -HISTORY_MSG_SOFTWAV;Soft radius +HISTORY_MSG_BLUWAV;Maximum blur HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_MSG_WAVOFFSET;Offset HISTORY_MSG_BLSHAPE;Blur by level @@ -2145,6 +2145,7 @@ TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method TP_WAVELET_BLCURVE;Blur by levels TP_WAVELET_BLURFRAME;Blur +TP_WAVELET_BLUWAV;Maximum Blur TP_WAVELET_CBENAB;Toning and Color Balance TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CCURVE;Local contrast @@ -2284,7 +2285,6 @@ TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are tr TP_WAVELET_SKY;Sky targetting/protection TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. TP_WAVELET_SOFTRAD;Soft Radius -TP_WAVELET_SOFWAV;Soft Radius TP_WAVELET_STREN;Strength TP_WAVELET_STRENGTH;Strength TP_WAVELET_SUPE;Extra @@ -2313,7 +2313,7 @@ TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. TP_WAVELET_WAVOFFSET;Offset -TP_WAVELET_OFFSET_TOOLTIP;Offset acts on mean of signal.\nHigh values will favor action on the contrast of the highlights.\nLow values will favor action on the contrast of shadows +TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\n High values will amplify the contrast increase of the highlights, while low values will amplify the contrast increase of the shadows. TP_WBALANCE_AUTO;Auto TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_AUTOOLD;Auto RGB grey diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index ede980ee6..99b915c65 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -67,6 +67,7 @@ struct cont_params { float conresH; float blurres; float blurcres; + float bluwav; float radius; float chrores; bool oldsh; @@ -399,6 +400,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.oldsh = waparams.oldsh; cp.blurres = waparams.resblur; cp.blurcres = waparams.resblurc; + cp.bluwav = 0.01f * waparams.bluwav; //cp.hueres=waparams.reshue; cp.hueres = 2.f; cp.th = float(waparams.thr); @@ -1766,7 +1768,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * //Blur luma if(cp.blurres != 0.f && cp.resena) { - float rad = cp.blurres / skip; + float rad = 0.7f * cp.blurres / skip; float * bef = new float[W_L * H_L]; float * aft = new float[W_L * H_L]; @@ -1951,7 +1953,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * ContAllL(koeLi, maxkoeLi, true, maxlvl, labco, varhue, varchrom, WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); //blur levels float klev = 1.f; - if(wavblcurve && wavcurvecomp && cp.blena) { + if(wavblcurve && wavcurvecomp && cp.blena && cp.bluwav > 0.f) { float * bef = new float[Wlvl_L * Hlvl_L]; float * aft = new float[Wlvl_L * Hlvl_L]; @@ -1961,7 +1963,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } klev = (wavblcurve[lvl * 55.5f]); - klev *= lvl * 50.f / skip; + klev *= cp.bluwav * lvl * 15.f / skip; boxblur(bef, aft, klev, Wlvl_L, Hlvl_L, false); for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { @@ -2173,7 +2175,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float //Blur chroma if(cp.blurcres != 0.f && cp.resena) { - float rad = cp.blurcres / skip; + float rad = 0.7f * cp.blurcres / skip; float * bef = new float[W_L * H_L]; float * aft = new float[W_L * H_L]; @@ -2204,7 +2206,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) #endif - + for (int dir = 1; dir < 4; dir++) { for (int lvl = 0; lvl < maxlvl; lvl++) { @@ -2214,7 +2216,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float ** WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); ContAllAB(labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); - if(wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f) { + if(wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f && cp.bluwav > 0.f) { float * bef = new float[Wlvl_ab * Hlvl_ab]; float * aft = new float[Wlvl_ab * Hlvl_ab]; float klev; @@ -2223,7 +2225,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float } klev = (wavblcurve[lvl * 55.5f]); - klev *= cp.chrwav * lvl * 100.f / skip; + klev *= cp.bluwav * cp.chrwav * lvl * 25.f / skip; boxblur(bef, aft, klev, Wlvl_ab, Hlvl_ab, false); diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 574e4f3a2..20ae540f5 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2318,7 +2318,7 @@ WaveletParams::WaveletParams() : radius(40), skinprotect(0.0), chrwav(0.), - softwav(1.0), + bluwav(50.0), hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), @@ -2433,7 +2433,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && radius == other.radius && skinprotect == other.skinprotect && chrwav == other.chrwav - && softwav == other.softwav + && bluwav == other.bluwav && hueskin == other.hueskin && hueskin2 == other.hueskin2 && hllev == other.hllev @@ -3588,7 +3588,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.lipst, "Wavelet", "Lipst", wavelet.lipst, keyFile); saveToKeyfile(!pedited || pedited->wavelet.skinprotect, "Wavelet", "Skinprotect", wavelet.skinprotect, keyFile); saveToKeyfile(!pedited || pedited->wavelet.chrwav, "Wavelet", "chrwav", wavelet.chrwav, keyFile); - saveToKeyfile(!pedited || pedited->wavelet.softwav, "Wavelet", "Softwav", wavelet.softwav, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.bluwav, "Wavelet", "bluwav", wavelet.bluwav, keyFile); saveToKeyfile(!pedited || pedited->wavelet.hueskin, "Wavelet", "Hueskin", wavelet.hueskin.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgrad, "Wavelet", "Edgrad", wavelet.edgrad, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgval, "Wavelet", "Edgval", wavelet.edgval, keyFile); @@ -4894,7 +4894,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "Skinprotect", pedited, wavelet.skinprotect, pedited->wavelet.skinprotect); assignFromKeyfile(keyFile, "Wavelet", "chrwav", pedited, wavelet.chrwav, pedited->wavelet.chrwav); - assignFromKeyfile(keyFile, "Wavelet", "Softwav", pedited, wavelet.softwav, pedited->wavelet.softwav); + assignFromKeyfile(keyFile, "Wavelet", "bluwav", pedited, wavelet.bluwav, pedited->wavelet.bluwav); assignFromKeyfile(keyFile, "Wavelet", "Expcontrast", pedited, wavelet.expcontrast, pedited->wavelet.expcontrast); assignFromKeyfile(keyFile, "Wavelet", "Expchroma", pedited, wavelet.expchroma, pedited->wavelet.expchroma); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 62ca88690..8ca3e5c29 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1277,7 +1277,7 @@ struct WaveletParams { int radius; double skinprotect; double chrwav; - double softwav; + double bluwav; Threshold hueskin; Threshold hueskin2; Threshold hllev; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 4dc81fc5f..b3c2b64d7 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -546,7 +546,7 @@ void ParamsEdited::set(bool v) wavelet.bllev = v; wavelet.edgcont = v; wavelet.chrwav = v; - wavelet.softwav = v; + wavelet.bluwav = v; wavelet.level0noise = v; wavelet.level1noise = v; wavelet.level2noise = v; @@ -1149,7 +1149,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.bllev = wavelet.bllev && p.wavelet.bllev == other.wavelet.bllev; wavelet.edgcont = wavelet.edgcont && p.wavelet.edgcont == other.wavelet.edgcont; wavelet.chrwav = wavelet.chrwav && p.wavelet.chrwav == other.wavelet.chrwav; - wavelet.softwav = wavelet.softwav && p.wavelet.softwav == other.wavelet.softwav; + wavelet.bluwav = wavelet.bluwav && p.wavelet.bluwav == other.wavelet.bluwav; wavelet.level0noise = wavelet.level0noise && p.wavelet.level0noise == other.wavelet.level0noise; wavelet.level1noise = wavelet.level1noise && p.wavelet.level1noise == other.wavelet.level1noise; wavelet.level2noise = wavelet.level2noise && p.wavelet.level2noise == other.wavelet.level2noise; @@ -3061,8 +3061,8 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.chrwav = mods.wavelet.chrwav; } - if (wavelet.softwav) { - toEdit.wavelet.softwav = mods.wavelet.softwav; + if (wavelet.bluwav) { + toEdit.wavelet.bluwav = mods.wavelet.bluwav; } if (wavelet.level0noise) { diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index de688d856..43254b015 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -562,7 +562,7 @@ struct WaveletParamsEdited { bool bllev; bool edgcont; bool chrwav; - bool softwav; + bool bluwav; bool level0noise; bool level1noise; bool level2noise; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 5ad6fda55..be7c74015 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -89,6 +89,7 @@ Wavelet::Wavelet() : reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), resblur(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLUR"), 0, 100, 1, 0))), resblurc(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLURC"), 0, 100, 1, 0))), + bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.0, 100.0, 0.5, 50.))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), scale(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSCALE"), 0.1, 10.0, 0.01, 1.0))), @@ -132,7 +133,6 @@ Wavelet::Wavelet() : softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), chrwav(Gtk::manage(new Adjuster(M("TP_WAVELET_CHRWAV"), 0., 100., 0., 0.))), - softwav(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFWAV"), -10.0, 1000.0, 0.5, 1.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), @@ -190,7 +190,7 @@ Wavelet::Wavelet() : EvWavchrwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_chrwav"); EvWavoldsh = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOLDSH"); EvWavoffset = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOFFSET"); - EvWavsoftwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_SOFTWAV"); + EvWavbluwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLUWAV"); EvWavblshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLSHAPE"); EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV"); EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV"); @@ -663,15 +663,14 @@ Wavelet::Wavelet() : curveEditorbl->curveListComplete(); curveEditorbl->show(); + blBox->pack_start(*bluwav); + bluwav->setAdjusterListener(this); blBox->pack_start(*curveEditorbl, Gtk::PACK_SHRINK, 4); chrwav->setAdjusterListener(this); blBox->pack_start(*chrwav); - softwav->setLogScale(10, -10); - softwav->setAdjusterListener(this); -// blBox->pack_start(*softwav); // Gamut @@ -1357,7 +1356,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) satlev->setValue(pp->wavelet.satlev); edgcont->setValue(pp->wavelet.edgcont); chrwav->setValue(pp->wavelet.chrwav); - softwav->setValue(pp->wavelet.softwav); + bluwav->setValue(pp->wavelet.bluwav); greenlow->setValue(pp->wavelet.greenlow); bluelow->setValue(pp->wavelet.bluelow); @@ -1536,7 +1535,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) strength->setEditedState(pedited->wavelet.strength ? Edited : UnEdited); edgcont->setEditedState(pedited->wavelet.edgcont ? Edited : UnEdited); chrwav->setEditedState(pedited->wavelet.chrwav ? Edited : UnEdited); - softwav->setEditedState(pedited->wavelet.softwav ? Edited : UnEdited); + bluwav->setEditedState(pedited->wavelet.bluwav ? Edited : UnEdited); level0noise->setEditedState(pedited->wavelet.level0noise ? Edited : UnEdited); level1noise->setEditedState(pedited->wavelet.level1noise ? Edited : UnEdited); level2noise->setEditedState(pedited->wavelet.level2noise ? Edited : UnEdited); @@ -1712,7 +1711,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.bllev = bllev->getValue (); pp->wavelet.edgcont = edgcont->getValue (); pp->wavelet.chrwav = chrwav->getValue(); - pp->wavelet.softwav = softwav->getValue(); + pp->wavelet.bluwav = bluwav->getValue(); pp->wavelet.level0noise = level0noise->getValue (); pp->wavelet.level1noise = level1noise->getValue (); pp->wavelet.level2noise = level2noise->getValue (); @@ -1825,7 +1824,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.blcurve = !blshape->isUnChanged(); pedited->wavelet.edgcont = edgcont->getEditedState(); pedited->wavelet.chrwav = chrwav->getEditedState(); - pedited->wavelet.softwav = softwav->getEditedState(); + pedited->wavelet.bluwav = bluwav->getEditedState(); pedited->wavelet.level0noise = level0noise->getEditedState(); pedited->wavelet.level1noise = level1noise->getEditedState(); pedited->wavelet.level2noise = level2noise->getEditedState(); @@ -2070,7 +2069,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit satlev->setDefault (defParams->wavelet.satlev); edgcont->setDefault (defParams->wavelet.edgcont); chrwav->setDefault(defParams->wavelet.chrwav); - softwav->setDefault(defParams->wavelet.softwav); + bluwav->setDefault(defParams->wavelet.bluwav); level0noise->setDefault (defParams->wavelet.level0noise); level1noise->setDefault (defParams->wavelet.level1noise); level2noise->setDefault (defParams->wavelet.level2noise); @@ -2138,7 +2137,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit satlev->setDefaultEditedState(pedited->wavelet.satlev ? Edited : UnEdited); edgcont->setDefaultEditedState(pedited->wavelet.edgcont ? Edited : UnEdited); chrwav->setDefaultEditedState(pedited->wavelet.chrwav ? Edited : UnEdited); - softwav->setDefaultEditedState(pedited->wavelet.softwav ? Edited : UnEdited); + bluwav->setDefaultEditedState(pedited->wavelet.bluwav ? Edited : UnEdited); strength->setDefaultEditedState(pedited->wavelet.strength ? Edited : UnEdited); balance->setDefaultEditedState(pedited->wavelet.balance ? Edited : UnEdited); iter->setDefaultEditedState(pedited->wavelet.iter ? Edited : UnEdited); @@ -2192,7 +2191,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit bllev->setDefaultEditedState(Irrelevant); edgcont->setDefaultEditedState(Irrelevant); chrwav->setDefaultEditedState(Irrelevant); - softwav->setDefaultEditedState(Irrelevant); + bluwav->setDefaultEditedState(Irrelevant); level0noise->setDefaultEditedState(Irrelevant); level1noise->setDefaultEditedState(Irrelevant); level2noise->setDefaultEditedState(Irrelevant); @@ -2728,7 +2727,7 @@ void Wavelet::setBatchMode(bool batchMode) satlev->showEditedCB(); edgcont->showEditedCB(); chrwav->showEditedCB(); - softwav->showEditedCB(); + bluwav->showEditedCB(); strength->showEditedCB(); balance->showEditedCB(); iter->showEditedCB(); @@ -2899,8 +2898,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavbluelow, bluelow->getTextValue()); } else if (a == chrwav) { listener->panelChanged(EvWavchrwav, chrwav->getTextValue()); - } else if (a == softwav) { - listener->panelChanged(EvWavsoftwav, softwav->getTextValue()); + } else if (a == bluwav) { + listener->panelChanged(EvWavbluwav, bluwav->getTextValue()); } if ((a == correction[0] || a == correction[1] || a == correction[2] || a == correction[3] || a == correction[4] || a == correction[5] || a == correction[6] || a == correction[7] || a == correction[8])) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 635d8c7a7..67a45b5ac 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -83,7 +83,7 @@ private: rtengine::ProcEvent EvWavchrwav; rtengine::ProcEvent EvWavoldsh; rtengine::ProcEvent EvWavoffset; - rtengine::ProcEvent EvWavsoftwav; + rtengine::ProcEvent EvWavbluwav; rtengine::ProcEvent EvWavblshape; rtengine::ProcEvent EvWavresblur; rtengine::ProcEvent EvWavresblurc; @@ -189,6 +189,7 @@ private: Adjuster* const reschro; Adjuster* const resblur; Adjuster* const resblurc; + Adjuster* const bluwav; Adjuster* const tmrs; Adjuster* const edgs; Adjuster* const scale; @@ -241,7 +242,6 @@ private: Adjuster* const softrad; Adjuster* const softradend; Adjuster* const chrwav; - Adjuster* const softwav; MyComboBoxText* const Lmethod; sigc::connection Lmethodconn; From fcc6306f9ea54dfadb5da6309f3b3d4aaf7e5666 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 28 Mar 2020 14:28:08 +0100 Subject: [PATCH 232/264] dcraw_matrix for FUJIFILM X100V --- rtengine/camconst.json | 1 + 1 file changed, 1 insertion(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 44e01ea99..73699b632 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1297,6 +1297,7 @@ Camera constants: { // Quality C "make_model": [ "FUJIFILM X100V" ], + "dcraw_matrix": [ 13426,-6334,-1177,-4244,12136,2371,-580,1303,5980 ], // DNG_v12.2 D65 "raw_crop": [ 0, 5, 6252, 4140 ] }, From 15204fa9bd4cee1a77e1b408245bbb08912f38ac Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 28 Mar 2020 16:34:10 +0100 Subject: [PATCH 233/264] dcraw_matrix for FUJIFILM X-T4 --- rtengine/camconst.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 73699b632..8bed22437 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1296,7 +1296,7 @@ Camera constants: }, { // Quality C - "make_model": [ "FUJIFILM X100V" ], + "make_model": [ "FUJIFILM X100V", "FUJIFILM X-T4" ], "dcraw_matrix": [ 13426,-6334,-1177,-4244,12136,2371,-580,1303,5980 ], // DNG_v12.2 D65 "raw_crop": [ 0, 5, 6252, 4140 ] }, @@ -1389,11 +1389,6 @@ Camera constants: "raw_crop": [ 0, 5, 6252, 4176] }, - { // Quality C, only raw crop - "make_model": [ "FUJIFILM X-T4" ], - "raw_crop": [ 0, 5, 6252, 4140] - }, - { // Quality B "make_model": "FUJIFILM X30", "dcraw_matrix": [ 12328,-5256,-1144,-4469,12927,1675,-87,1291,4351 ], // DNG_v8.7 D65 From 7d333198937102dbf6c7e437ecf9368b9d28eedd Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 29 Mar 2020 08:00:48 +0200 Subject: [PATCH 234/264] small change to blur - change label and tooltip --- rtdata/languages/default | 6 +++--- rtengine/ipwavelet.cc | 15 +++++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index a46f09a88..d4fb356e0 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2278,8 +2278,8 @@ TP_WAVELET_SETTINGS;Wavelet Settings TP_WAVELET_SHA;Sharp mask TP_WAVELET_SHFRAME;Shadows/Highlights TP_WAVELET_SHOWMASK;Show wavelet 'mask' -TP_WAVELET_SIGMA;Sigma -TP_WAVELET_SIGMA_TOOLTIP;Sigma acts on the relative amplitude of the signal width. The higher it is, the more the effect will be maximum and the more the unsightly effects will appear.\nLow values are recommended for creating tone-mapping in conjonction with usage Shadows/Highlights below +TP_WAVELET_SIGMA;Effects +TP_WAVELET_SIGMA_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\n The higher it is, the more contrast values will be strongly modified and the higher the risk to generate artifacts. The lower it is, the more pinpoint will the effect be applied to a certain range of contrast values TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. TP_WAVELET_SKY;Sky targetting/protection @@ -2313,7 +2313,7 @@ TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. TP_WAVELET_WAVOFFSET;Offset -TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\n High values will amplify the contrast increase of the highlights, while low values will amplify the contrast increase of the shadows. +TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\n High values will amplify the contrast enhancement of the highlights, while low values will amplify the contrast enhancement of the shadows. Along with a low Max. effect value will help you selecting the contrasts that will be enhanced TP_WBALANCE_AUTO;Auto TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_AUTOOLD;Auto RGB grey diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 99b915c65..125808336 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1951,7 +1951,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl); ContAllL(koeLi, maxkoeLi, true, maxlvl, labco, varhue, varchrom, WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); - //blur levels + //blur level float klev = 1.f; if(wavblcurve && wavcurvecomp && cp.blena && cp.bluwav > 0.f) { @@ -1962,8 +1962,11 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * bef[co] = WavCoeffs_L[dir][co]; } klev = (wavblcurve[lvl * 55.5f]); - - klev *= cp.bluwav * lvl * 15.f / skip; + float lvr = lvl; + if(lvr == 0) { + lvr = 1; + } + klev *= cp.bluwav * lvr * 10.f / skip; boxblur(bef, aft, klev, Wlvl_L, Hlvl_L, false); for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { @@ -2224,8 +2227,12 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float bef[co] = WavCoeffs_ab[dir][co]; } klev = (wavblcurve[lvl * 55.5f]); + float lvr = lvl; + if(lvr == 0) { + lvr = 1; + } - klev *= cp.bluwav * cp.chrwav * lvl * 25.f / skip; + klev *= cp.bluwav * cp.chrwav * lvr * 20.f / skip; boxblur(bef, aft, klev, Wlvl_ab, Hlvl_ab, false); From 3f6ab0622227249f2c7b030d418a7f766f2dbfd4 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 29 Mar 2020 10:29:40 +0200 Subject: [PATCH 235/264] Change threshold from 5 to 32.7 in aver and sigma --- rtengine/ipwavelet.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 125808336..8c15f51c5 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -851,7 +851,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (cp.val > 0 || ref || contr) { //edge Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } - + //init for edge and denoise float vari[4]; @@ -1234,7 +1234,7 @@ void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &averag int countP = 0, countN = 0; double averaP = 0.0, averaN = 0.0; // use double precision for large summations - constexpr float thres = 5.f;//different fom zero to take into account only data large enough + constexpr float thres = 32.7f;//different fom zero to take into account only data large enough 32.7 = 0.1 in range 0..100 very low value max = 0.f; min = RT_INFINITY_F; #ifdef _OPENMP @@ -1286,7 +1286,7 @@ void ImProcFunctions::Sigma(float * RESTRICT DataList, int datalen, float avera { int countP = 0, countN = 0; double variP = 0.0, variN = 0.0; // use double precision for large summations - float thres = 5.f;//different fom zero to take into account only data large enough + float thres = 32.7f;//different fom zero to take into account only data large enough 32.7 = 0.1 in range 0..100 #ifdef _OPENMP #pragma omp parallel for reduction(+:variP,variN,countP,countN) num_threads(wavNestedLevels) if(wavNestedLevels>1) @@ -2580,6 +2580,10 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz scaleskip[sc] = scales[sc] / skip; } + if (settings->verbose) { + printf("level=%i mean=%f sigma=%f maxp=%f\n", level, mean[level], sigma[level], MaxP[level]); + } + constexpr float t_r = 40.f; constexpr float t_l = 10.f; constexpr float b_r = 75.f; From bdb7409d11a77b164f3a42e7fb18fdb93436094d Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 29 Mar 2020 13:29:37 +0200 Subject: [PATCH 236/264] Change extra slider in GUI --- rtgui/wavelet.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index be7c74015..2e444ff3d 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -348,6 +348,10 @@ Wavelet::Wavelet() : correction[i]->setAdjusterListener(this); levBox->pack_start(*correction[i]); } + levBox->pack_start(*sup); + sup->setAdjusterListener(this); + Gtk::HSeparator* const separatorcont = Gtk::manage(new Gtk::HSeparator()); + levBox->pack_start(*separatorcont); sigma->setAdjusterListener(this); levBox->pack_start(*sigma, Gtk::PACK_SHRINK); @@ -356,8 +360,6 @@ Wavelet::Wavelet() : sigma->set_tooltip_text(M("TP_WAVELET_SIGMA_TOOLTIP")); offset->set_tooltip_text(M("TP_WAVELET_OFFSET_TOOLTIP")); - levBox->pack_start(*sup); - sup->setAdjusterListener(this); wavLabels->show(); levBox->pack_start(*wavLabels); From bae1897b444b805a27be94745ff01fdbfed21014 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 29 Mar 2020 17:42:48 +0200 Subject: [PATCH 237/264] Fix segfault when using Colour Toning/Lab blending on very dark images --- rtengine/improcfun.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 9fe16769c..aa5515e79 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -1989,8 +1989,8 @@ void ImProcFunctions::moyeqt (Imagefloat* working, float &moyS, float &eqty) { BENCHFUN - int tHh = working->getHeight(); - int tWw = working->getWidth(); + const int height = working->getHeight(); + const int width = working->getWidth(); double moy = 0.0; double sqrs = 0.0; @@ -1998,17 +1998,17 @@ void ImProcFunctions::moyeqt (Imagefloat* working, float &moyS, float &eqty) #pragma omp parallel for reduction(+:moy,sqrs) schedule(dynamic,16) #endif - for (int i = 0; i < tHh; i++) { - for (int j = 0; j < tWw; j++) { - double s = Color::rgb2s (CLIP (working->r (i, j)), CLIP (working->g (i, j)), CLIP (working->b (i, j))); + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + const double s = Color::rgb2s(CLIP(working->r (i, j)), CLIP(working->g (i, j)), CLIP(working->b (i, j))); moy += s; sqrs += SQR(s); } } - moy /= (tHh * tWw); - sqrs /= (tHh * tWw); - eqty = sqrt (sqrs - SQR (moy)); + moy /= (height * width); + sqrs /= (height * width); + eqty = std::sqrt(std::max(sqrs - SQR(moy), 0.0)); moyS = moy; } From 0fa2ca79c2c347bd92d47d7174fd824c4f00a8de Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 30 Mar 2020 08:54:26 +0200 Subject: [PATCH 238/264] Improvment contrast to prevent texture and noise --- rtdata/languages/default | 3 ++ rtengine/ipwavelet.cc | 67 ++++++++++++++++++++++++++++------------ rtengine/procparams.cc | 4 +++ rtengine/procparams.h | 1 + rtgui/paramsedited.cc | 6 ++++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 15 +++++++++ rtgui/wavelet.h | 2 ++ 8 files changed, 80 insertions(+), 19 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index d4fb356e0..4a419e736 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -806,6 +806,7 @@ HISTORY_MSG_THRESWAV;Balance threshold HISTORY_MSG_BLUWAV;Maximum blur HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_MSG_WAVOFFSET;Offset +HISTORY_MSG_WAVLOWTHR;Threshold low contrast HISTORY_MSG_BLSHAPE;Blur by level HISTORY_MSG_WAVBL;Blur levels HISTORY_MSG_BLURWAV;Blur luminance @@ -2242,6 +2243,7 @@ TP_WAVELET_LEVZERO;Level 1 TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength TP_WAVELET_LIPST;Enhanced algoritm TP_WAVELET_LOWLIGHT;Shadow luminance range +TP_WAVELET_LOWTHR_TOOLTIP;Prevents amplification of fine textures and noise TP_WAVELET_MEDGREINF;First level TP_WAVELET_MEDI;Reduce artifacts in blue sky TP_WAVELET_MEDILEV;Edge detection @@ -2312,6 +2314,7 @@ TP_WAVELET_USH;None TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. +TP_WAVELET_WAVLOWTHR;Low contrast threshold TP_WAVELET_WAVOFFSET;Offset TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\n High values will amplify the contrast enhancement of the highlights, while low values will amplify the contrast enhancement of the shadows. Along with a low Max. effect value will help you selecting the contrasts that will be enhanced TP_WBALANCE_AUTO;Auto diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 8c15f51c5..d5b642aaa 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -3002,39 +3002,66 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz const float skinprotneg = -skinprot; const float factorHard = (1.f - skinprotneg / 100.f); const float offs = params->wavelet.offset; + const float lowthr = params->wavelet.lowthr; //to adjust increase contrast with local contrast //for each pixel and each level float beta; - float mea[9]; - float rap = offs * mean[level] - 2.f * cp.sigm * sigma[level]; + float mea[10]; + float rap = 0.f; + float sig = 1.f; + if(cp.sigm < 1.f) { + sig = cp.sigm; + } + if(cp.sigm <= 1.f) { + rap = offs * mean[level] - sig * sigma[level]; + } + if (rap > 0.f) { mea[0] = rap; } else { mea[0] = mean[level] / 6.f; } - rap = offs * mean[level] - cp.sigm * sigma[level]; + rap = 0.f; + if(cp.sigm <= 1.f) { + rap = offs * mean[level] - 0.5f * sig * sigma[level]; + } if (rap > 0.f) { mea[1] = rap; } else { - mea[1] = mean[level] / 2.f; + mea[1] = mean[level] / 4.f; + } + + rap = 0.f; + if(cp.sigm <= 1.f) { + rap = offs * mean[level] - 0.2f * sig * sigma[level]; } - mea[2] = offs * mean[level]; // 50% data - mea[3] = offs * mean[level] + cp.sigm * sigma[level] / 2.f; - mea[4] = offs * mean[level] + cp.sigm * sigma[level]; //66% - mea[5] = offs * mean[level] + cp.sigm * 1.2f * sigma[level]; - mea[6] = offs * mean[level] + cp.sigm * 1.5f * sigma[level]; // - mea[7] = offs * mean[level] + cp.sigm * 2.f * sigma[level]; //95% - mea[8] = offs * mean[level] + cp.sigm * 2.5f * sigma[level]; //99% + if (rap > 0.f) { + mea[2] = rap; + } else { + mea[2] = mean[level] / 2.f; + } + + mea[3] = offs * mean[level]; // 50% data + mea[4] = offs * mean[level] + cp.sigm * sigma[level] / 2.f; + mea[5] = offs * mean[level] + cp.sigm * sigma[level]; //66% + mea[6] = offs * mean[level] + cp.sigm * 1.2f * sigma[level]; + mea[7] = offs * mean[level] + cp.sigm * 1.5f * sigma[level]; // + mea[8] = offs * mean[level] + cp.sigm * 2.f * sigma[level]; //95% + mea[9] = offs * mean[level] + cp.sigm * 2.5f * sigma[level]; //99% bool useChromAndHue = (skinprot != 0.f || cp.HSmet); float modchro; + float red0 = 0.005f * (110.f - lowthr); + float red1 = 0.008f * (110.f - lowthr); + float red2 = 0.011f * (110.f - lowthr); + for (int i = 0; i < W_L * H_L; i++) { float kLlev = 1.f; @@ -3046,22 +3073,24 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz //reduction amplification: max action between mean / 2 and mean + sigma // arbitrary coefficient, we can add a slider !! if (WavCL < mea[0]) { - beta = 0.6f; //preserve very low contrast (sky...) + beta = 0.4f * red0;//preserve very low contrast (sky...) } else if (WavCL < mea[1]) { - beta = 0.8f; + beta = 0.5f * red1; } else if (WavCL < mea[2]) { - beta = 1.f; //standard + beta = 0.7f * red2; } else if (WavCL < mea[3]) { - beta = 1.f; + beta = 1.f; //standard } else if (WavCL < mea[4]) { - beta = 0.8f; //+sigma + beta = 1.f; } else if (WavCL < mea[5]) { - beta = 0.6f; + beta = 0.8f; //+sigma } else if (WavCL < mea[6]) { - beta = 0.4f; + beta = 0.6f; } else if (WavCL < mea[7]) { - beta = 0.2f; // + 2 sigma + beta = 0.4f; } else if (WavCL < mea[8]) { + beta = 0.2f; // + 2 sigma + } else if (WavCL < mea[9]) { beta = 0.1f; } else { beta = 0.0f; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 20ae540f5..66f2a4c19 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2288,6 +2288,7 @@ WaveletParams::WaveletParams() : HSmethod("with"), sigma(1.0), offset(1.0), + lowthr(40.0), rescon(0), resconH(0), reschro(0), @@ -2403,6 +2404,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && HSmethod == other.HSmethod && sigma == other.sigma && offset == other.offset + && lowthr == other.lowthr && rescon == other.rescon && resconH == other.resconH && reschro == other.reschro @@ -3599,6 +3601,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.tmr, "Wavelet", "TMr", wavelet.tmr, keyFile); saveToKeyfile(!pedited || pedited->wavelet.sigma, "Wavelet", "Sigma", wavelet.sigma, keyFile); saveToKeyfile(!pedited || pedited->wavelet.offset, "Wavelet", "Offset", wavelet.offset, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.lowthr, "Wavelet", "Lowthr", wavelet.lowthr, keyFile); saveToKeyfile(!pedited || pedited->wavelet.rescon, "Wavelet", "ResidualcontShadow", wavelet.rescon, keyFile); saveToKeyfile(!pedited || pedited->wavelet.resconH, "Wavelet", "ResidualcontHighlight", wavelet.resconH, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thr, "Wavelet", "ThresholdResidShadow", wavelet.thr, keyFile); @@ -4722,6 +4725,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "DirMethod", pedited, wavelet.Dirmethod, pedited->wavelet.Dirmethod); assignFromKeyfile(keyFile, "Wavelet", "Sigma", pedited, wavelet.sigma, pedited->wavelet.sigma); assignFromKeyfile(keyFile, "Wavelet", "Offset", pedited, wavelet.offset, pedited->wavelet.offset); + assignFromKeyfile(keyFile, "Wavelet", "Lowthr", pedited, wavelet.lowthr, pedited->wavelet.lowthr); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontShadow", pedited, wavelet.rescon, pedited->wavelet.rescon); assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", pedited, wavelet.resconH, pedited->wavelet.resconH); assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", pedited, wavelet.reschro, pedited->wavelet.reschro); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 8ca3e5c29..6dd5198ff 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1247,6 +1247,7 @@ struct WaveletParams { Glib::ustring HSmethod; double sigma; double offset; + double lowthr; int rescon; int resconH; int reschro; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index b3c2b64d7..0b06b9d92 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -512,6 +512,7 @@ void ParamsEdited::set(bool v) wavelet.sigma = v; wavelet.sigma = v; wavelet.offset = v; + wavelet.lowthr = v; wavelet.resconH = v; wavelet.reschro = v; wavelet.resblur = v; @@ -1115,6 +1116,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.Dirmethod = wavelet.Dirmethod && p.wavelet.Dirmethod == other.wavelet.Dirmethod; wavelet.sigma = wavelet.sigma && p.wavelet.sigma == other.wavelet.sigma; wavelet.offset = wavelet.offset && p.wavelet.offset == other.wavelet.offset; + wavelet.lowthr = wavelet.lowthr && p.wavelet.lowthr == other.wavelet.lowthr; wavelet.rescon = wavelet.rescon && p.wavelet.rescon == other.wavelet.rescon; wavelet.resconH = wavelet.resconH && p.wavelet.resconH == other.wavelet.resconH; wavelet.reschro = wavelet.reschro && p.wavelet.reschro == other.wavelet.reschro; @@ -3202,6 +3204,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.offset = mods.wavelet.offset; } + if (wavelet.lowthr) { + toEdit.wavelet.lowthr = mods.wavelet.lowthr; + } + if (wavelet.resblur) { toEdit.wavelet.resblur = mods.wavelet.resblur; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 43254b015..0b315583d 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -527,6 +527,7 @@ struct WaveletParamsEdited { bool Dirmethod; bool sigma; bool offset; + bool lowthr; bool rescon; bool resconH; bool reschro; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 2e444ff3d..b23143c6c 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -84,6 +84,7 @@ Wavelet::Wavelet() : neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.05, 2.5, 0.01, 1.))), offset(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + lowthr(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVLOWTHR"), 20., 100., 0.5, 40.))), rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))), reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), @@ -190,6 +191,7 @@ Wavelet::Wavelet() : EvWavchrwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_chrwav"); EvWavoldsh = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOLDSH"); EvWavoffset = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVOFFSET"); + EvWavlowthr = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLOWTHR"); EvWavbluwav = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLUWAV"); EvWavblshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLSHAPE"); EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV"); @@ -359,6 +361,9 @@ Wavelet::Wavelet() : levBox->pack_start(*offset, Gtk::PACK_SHRINK); sigma->set_tooltip_text(M("TP_WAVELET_SIGMA_TOOLTIP")); offset->set_tooltip_text(M("TP_WAVELET_OFFSET_TOOLTIP")); + lowthr->setAdjusterListener(this); + lowthr->set_tooltip_text(M("TP_WAVELET_LOWTHR_TOOLTIP")); + levBox->pack_start(*lowthr, Gtk::PACK_SHRINK); wavLabels->show(); levBox->pack_start(*wavLabels); @@ -1321,6 +1326,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) lasttmr = pp->wavelet.tmr; sigma->setValue(pp->wavelet.sigma); offset->setValue(pp->wavelet.offset); + lowthr->setValue(pp->wavelet.lowthr); rescon->setValue(pp->wavelet.rescon); resconH->setValue(pp->wavelet.resconH); reschro->setValue(pp->wavelet.reschro); @@ -1481,6 +1487,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) rescon->setEditedState(pedited->wavelet.rescon ? Edited : UnEdited); sigma->setEditedState(pedited->wavelet.sigma ? Edited : UnEdited); offset->setEditedState(pedited->wavelet.offset ? Edited : UnEdited); + lowthr->setEditedState(pedited->wavelet.lowthr ? Edited : UnEdited); resconH->setEditedState(pedited->wavelet.resconH ? Edited : UnEdited); reschro->setEditedState(pedited->wavelet.reschro ? Edited : UnEdited); resblur->setEditedState(pedited->wavelet.resblur ? Edited : UnEdited); @@ -1672,6 +1679,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.tmr = tmr->get_active(); pp->wavelet.sigma = sigma->getValue(); pp->wavelet.offset = offset->getValue(); + pp->wavelet.lowthr = lowthr->getValue(); pp->wavelet.rescon = rescon->getValue(); pp->wavelet.resconH = resconH->getValue(); pp->wavelet.reschro = reschro->getValue(); @@ -1791,6 +1799,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.edgthresh = edgthresh->getEditedState(); pedited->wavelet.sigma = sigma->getEditedState(); pedited->wavelet.offset = offset->getEditedState(); + pedited->wavelet.lowthr = lowthr->getEditedState(); pedited->wavelet.rescon = rescon->getEditedState(); pedited->wavelet.resconH = resconH->getEditedState(); pedited->wavelet.reschro = reschro->getEditedState(); @@ -2035,6 +2044,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit iter->setDefault(defParams->wavelet.iter); sigma->setDefault(defParams->wavelet.sigma); offset->setDefault(defParams->wavelet.offset); + lowthr->setDefault(defParams->wavelet.lowthr); rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); @@ -2102,6 +2112,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit sigma->setDefault(defParams->wavelet.sigma); offset->setDefault(defParams->wavelet.offset); + lowthr->setDefault(defParams->wavelet.lowthr); rescon->setDefault(defParams->wavelet.rescon); resconH->setDefault(defParams->wavelet.resconH); reschro->setDefault(defParams->wavelet.reschro); @@ -2158,6 +2169,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit } else { sigma->setDefaultEditedState(Irrelevant); offset->setDefaultEditedState(Irrelevant); + lowthr->setDefaultEditedState(Irrelevant); rescon->setDefaultEditedState(Irrelevant); resconH->setDefaultEditedState(Irrelevant); reschro->setDefaultEditedState(Irrelevant); @@ -2692,6 +2704,7 @@ void Wavelet::setBatchMode(bool batchMode) curveEditorGAM->setBatchMode(batchMode); sigma->showEditedCB(); offset->showEditedCB(); + lowthr->showEditedCB(); rescon->showEditedCB(); resconH->showEditedCB(); reschro->showEditedCB(); @@ -2781,6 +2794,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavsigma, sigma->getTextValue()); } else if (a == offset) { listener->panelChanged(EvWavoffset, offset->getTextValue()); + } else if (a == lowthr) { + listener->panelChanged(EvWavlowthr, lowthr->getTextValue()); } else if (a == resconH) { listener->panelChanged(EvWavresconH, resconH->getTextValue()); } else if (a == reschro) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 67a45b5ac..609d3226c 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -83,6 +83,7 @@ private: rtengine::ProcEvent EvWavchrwav; rtengine::ProcEvent EvWavoldsh; rtengine::ProcEvent EvWavoffset; + rtengine::ProcEvent EvWavlowthr; rtengine::ProcEvent EvWavbluwav; rtengine::ProcEvent EvWavblshape; rtengine::ProcEvent EvWavresblur; @@ -184,6 +185,7 @@ private: Adjuster* correctionch[9]; Adjuster* const sigma; Adjuster* const offset; + Adjuster* const lowthr; Adjuster* const rescon; Adjuster* const resconH; Adjuster* const reschro; From 5102c82c11a5f2d46972602857dc89bff78ca3e3 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 31 Mar 2020 10:04:16 +0200 Subject: [PATCH 239/264] Improve blur with effect --- rtdata/languages/default | 4 +- rtengine/improcfun.h | 4 +- rtengine/ipwavelet.cc | 205 +++++++++++++++++++++++++++------------ rtgui/wavelet.cc | 2 +- 4 files changed, 150 insertions(+), 65 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 4a419e736..ec2e32d95 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -803,7 +803,7 @@ HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_MSG_THRESWAV;Balance threshold -HISTORY_MSG_BLUWAV;Maximum blur +HISTORY_MSG_BLUWAV;Effects HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_MSG_WAVOFFSET;Offset HISTORY_MSG_WAVLOWTHR;Threshold low contrast @@ -2146,7 +2146,7 @@ TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method TP_WAVELET_BLCURVE;Blur by levels TP_WAVELET_BLURFRAME;Blur -TP_WAVELET_BLUWAV;Maximum Blur +TP_WAVELET_BLUWAV;Effects TP_WAVELET_CBENAB;Toning and Color Balance TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CCURVE;Local contrast diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 424084b8c..affa33640 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -208,7 +208,7 @@ public: struct cont_params &cp, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); void WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); void WaveletcontAllAB(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_a, const Wavblcurve & wavblcurve, const WavOpacityCurveW & waOpacityCurveW, - struct cont_params &cp, const bool useChannelA, int skip); + struct cont_params &cp, const bool useChannelA, int skip, float *meanab, float *sigmaab); void WaveletAandBAllAB(const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, const cont_params &cp, FlatCurve* hhcurve, bool hhutili); void ContAllL(float **koeLi, float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * lab, float **varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, @@ -222,6 +222,8 @@ public: void Eval2(float ** WavCoeffs_L, int level, int W_L, int H_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN); + void calceffect(int level, float *mean, float *sigma, float *mea, float effect, float offs); + void Aver(float * HH_Coeffs, int datalen, float &averagePlus, float &averageNeg, float &max, float &min); void Sigma(float * HH_Coeffs, int datalen, float averagePlus, float averageNeg, float &sigmaPlus, float &sigmaNeg); void calckoe(float ** WavCoeffs_LL, const cont_params& cp, float ** koeLi, int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC = nullptr); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index d5b642aaa..e7f6083e6 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -400,7 +400,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.oldsh = waparams.oldsh; cp.blurres = waparams.resblur; cp.blurcres = waparams.resblurc; - cp.bluwav = 0.01f * waparams.bluwav; + cp.bluwav = waparams.bluwav; //cp.hueres=waparams.reshue; cp.hueres = 2.f; cp.th = float(waparams.thr); @@ -643,6 +643,13 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float MaxP[10]; float MaxN[10]; + float meanab[10]; + float meanNab[10]; + float sigmaab[10]; + float sigmaNab[10]; + float MaxPab[10]; + float MaxNab[10]; + array2D varchro(tilewidth, tileheight); float** varhue = new float*[tileheight]; @@ -924,7 +931,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed) { - WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip); + Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); adecomp->reconstruct(labco->data + datalen, cp.strength); } } @@ -941,7 +949,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!bdecomp->memoryAllocationFailed) { - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip); + Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); } } @@ -959,8 +968,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { - WaveletcontAllAB(labco, varhue, varchro, *adecomp,wavblcurve, waOpacityCurveW, cp, true, skip); - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip); + Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *adecomp,wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); + Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); adecomp->reconstruct(labco->data + datalen, cp.strength); @@ -1227,6 +1238,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } + void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &averagePlus, float &averageNeg, float &max, float &min) { @@ -1333,6 +1345,56 @@ void ImProcFunctions::Evaluate2(const wavelet_decomposition &WaveletCoeffs_L, } } + +void ImProcFunctions::calceffect(int level, float *mean, float *sigma, float *mea, float effect, float offs) +{ + float rap = 0.f; + float sig = 1.f; + if(effect < 1.f) { + sig = effect; + } + + if(effect <= 1.f) { + rap = offs * mean[level] - sig * sigma[level]; + } + + if (rap > 0.f) { + mea[0] = rap; + } else { + mea[0] = mean[level] / 6.f; + } + + rap = 0.f; + if(effect <= 1.f) { + rap = offs * mean[level] - 0.5f * sig * sigma[level]; + } + + if (rap > 0.f) { + mea[1] = rap; + } else { + mea[1] = mean[level] / 4.f; + } + + rap = 0.f; + if(effect <= 1.f) { + rap = offs * mean[level] - 0.2f * sig * sigma[level]; + } + + if (rap > 0.f) { + mea[2] = rap; + } else { + mea[2] = mean[level] / 2.f; + } + + mea[3] = offs * mean[level]; // 50% data + mea[4] = offs * mean[level] + effect * sigma[level] / 2.f; + mea[5] = offs * mean[level] + effect * sigma[level]; //66% + mea[6] = offs * mean[level] + effect * 1.2f * sigma[level]; + mea[7] = offs * mean[level] + effect * 1.5f * sigma[level]; // + mea[8] = offs * mean[level] + effect * 2.f * sigma[level]; //95% + mea[9] = offs * mean[level] + effect * 2.5f * sigma[level]; //99% +} + void ImProcFunctions::Eval2(float ** WavCoeffs_L, int level, int W_L, int H_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN) { @@ -1953,20 +2015,53 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * ContAllL(koeLi, maxkoeLi, true, maxlvl, labco, varhue, varchrom, WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); //blur level float klev = 1.f; - if(wavblcurve && wavcurvecomp && cp.blena && cp.bluwav > 0.f) { + if(wavblcurve && wavcurvecomp && cp.blena) { + float mea[10]; + float effect = cp.bluwav; + float beta = 0.f; + float offs = 1.f; + + calceffect(lvl, mean, sigma, mea, effect, offs); float * bef = new float[Wlvl_L * Hlvl_L]; float * aft = new float[Wlvl_L * Hlvl_L]; for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { - bef[co] = WavCoeffs_L[dir][co]; + bef[co] = WavCoeffs_L[dir][co]; + float WavCL = std::fabs(WavCoeffs_L[dir][co]); + + if (WavCL < mea[0]) { + beta = 0.05f; + } else if (WavCL < mea[1]) { + beta = 0.2f; + } else if (WavCL < mea[2]) { + beta = 0.7f; + } else if (WavCL < mea[3]) { + beta = 1.f; //standard + } else if (WavCL < mea[4]) { + beta = 1.f; + } else if (WavCL < mea[5]) { + beta = 0.8f; //+sigma + } else if (WavCL < mea[6]) { + beta = 0.6f; + } else if (WavCL < mea[7]) { + beta = 0.4f; + } else if (WavCL < mea[8]) { + beta = 0.2f; // + 2 sigma + } else if (WavCL < mea[9]) { + beta = 0.1f; + } else { + beta = 0.0f; + } + + } klev = (wavblcurve[lvl * 55.5f]); float lvr = lvl; if(lvr == 0) { lvr = 1; } - klev *= cp.bluwav * lvr * 10.f / skip; + klev *= beta * lvr * 100.f / skip; boxblur(bef, aft, klev, Wlvl_L, Hlvl_L, false); for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { @@ -2053,7 +2148,7 @@ void ImProcFunctions::WaveletAandBAllAB(const wavelet_decomposition &WaveletCoef } void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_ab, const Wavblcurve & wavblcurve, const WavOpacityCurveW & waOpacityCurveW, - struct cont_params &cp, const bool useChannelA, int skip) + struct cont_params &cp, const bool useChannelA, int skip, float *meanab, float *sigmaab) { int maxlvl = WaveletCoeffs_ab.maxlevel(); @@ -2219,20 +2314,54 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float ** WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); ContAllAB(labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); - if(wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f && cp.bluwav > 0.f) { + if(wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f) { + float mea[10]; + float effect = cp.bluwav; + float beta = 0.f; + float offs = 1.f; + + calceffect(lvl, meanab, sigmaab, mea, effect, offs); + float * bef = new float[Wlvl_ab * Hlvl_ab]; float * aft = new float[Wlvl_ab * Hlvl_ab]; float klev; for (int co = 0; co < Hlvl_ab * Wlvl_ab; co++) { bef[co] = WavCoeffs_ab[dir][co]; + float WavCab = std::fabs(WavCoeffs_ab[dir][co]); + + if (WavCab < mea[0]) { + beta = 0.05f; + } else if (WavCab < mea[1]) { + beta = 0.2f; + } else if (WavCab < mea[2]) { + beta = 0.7f; + } else if (WavCab < mea[3]) { + beta = 1.f; //standard + } else if (WavCab < mea[4]) { + beta = 1.f; + } else if (WavCab < mea[5]) { + beta = 0.8f; //+sigma + } else if (WavCab < mea[6]) { + beta = 0.6f; + } else if (WavCab < mea[7]) { + beta = 0.4f; + } else if (WavCab < mea[8]) { + beta = 0.2f; // + 2 sigma + } else if (WavCab < mea[9]) { + beta = 0.1f; + } else { + beta = 0.0f; + } + + } klev = (wavblcurve[lvl * 55.5f]); float lvr = lvl; if(lvr == 0) { lvr = 1; } - - klev *= cp.bluwav * cp.chrwav * lvr * 20.f / skip; + + klev *= beta * cp.chrwav * lvr * 200.f / skip; boxblur(bef, aft, klev, Wlvl_ab, Hlvl_ab, false); @@ -3003,57 +3132,11 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz const float factorHard = (1.f - skinprotneg / 100.f); const float offs = params->wavelet.offset; const float lowthr = params->wavelet.lowthr; - - //to adjust increase contrast with local contrast - - //for each pixel and each level - float beta; float mea[10]; - float rap = 0.f; - float sig = 1.f; - if(cp.sigm < 1.f) { - sig = cp.sigm; - } + float effect = cp.sigm; + float beta; - if(cp.sigm <= 1.f) { - rap = offs * mean[level] - sig * sigma[level]; - } - - if (rap > 0.f) { - mea[0] = rap; - } else { - mea[0] = mean[level] / 6.f; - } - - rap = 0.f; - if(cp.sigm <= 1.f) { - rap = offs * mean[level] - 0.5f * sig * sigma[level]; - } - - if (rap > 0.f) { - mea[1] = rap; - } else { - mea[1] = mean[level] / 4.f; - } - - rap = 0.f; - if(cp.sigm <= 1.f) { - rap = offs * mean[level] - 0.2f * sig * sigma[level]; - } - - if (rap > 0.f) { - mea[2] = rap; - } else { - mea[2] = mean[level] / 2.f; - } - - mea[3] = offs * mean[level]; // 50% data - mea[4] = offs * mean[level] + cp.sigm * sigma[level] / 2.f; - mea[5] = offs * mean[level] + cp.sigm * sigma[level]; //66% - mea[6] = offs * mean[level] + cp.sigm * 1.2f * sigma[level]; - mea[7] = offs * mean[level] + cp.sigm * 1.5f * sigma[level]; // - mea[8] = offs * mean[level] + cp.sigm * 2.f * sigma[level]; //95% - mea[9] = offs * mean[level] + cp.sigm * 2.5f * sigma[level]; //99% + calceffect(level, mean, sigma, mea, effect, offs); bool useChromAndHue = (skinprot != 0.f || cp.HSmet); float modchro; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index b23143c6c..afedf750c 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -90,7 +90,7 @@ Wavelet::Wavelet() : reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), resblur(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLUR"), 0, 100, 1, 0))), resblurc(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLURC"), 0, 100, 1, 0))), - bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.0, 100.0, 0.5, 50.))), + bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.05, 2.5, 0.01, 1.))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), scale(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSCALE"), 0.1, 10.0, 0.01, 1.0))), From b8749f708cfdc4bdb2b177a455b2025f0b3e241c Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 31 Mar 2020 14:24:17 +0200 Subject: [PATCH 240/264] Added effect to edge sharpness --- rtdata/languages/default | 3 +++ rtengine/ipwavelet.cc | 44 +++++++++++++++++++++++++++++++++++++++- rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtgui/paramsedited.cc | 6 ++++++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 19 +++++++++++++++-- rtgui/wavelet.h | 2 ++ 8 files changed, 77 insertions(+), 3 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index ec2e32d95..ad98e3e71 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -811,6 +811,7 @@ HISTORY_MSG_BLSHAPE;Blur by level HISTORY_MSG_WAVBL;Blur levels HISTORY_MSG_BLURWAV;Blur luminance HISTORY_MSG_BLURCWAV;Blur chroma +HISTORY_MSG_EDGEFFECT;Edge Effect HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2205,6 +2206,8 @@ TP_WAVELET_EDGEDETECTTHR;Threshold low (noise) TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection) TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky. TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise. +TP_WAVELET_EDEFFECT;Effect +TP_WAVELET_EDEFFECT_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\nMaximum value (2.5) disabled the tool TP_WAVELET_EDGESENSI;Edge sensitivity TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. TP_WAVELET_EDGTHRESH;Detail diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index e7f6083e6..53f685826 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -82,6 +82,7 @@ struct cont_params { float b_lpast, t_lpast, b_rpast, t_rpast; float b_lsat, t_lsat, b_rsat, t_rsat; int rad; + float eff; int val; int til; int numlevH, numlevS; @@ -392,6 +393,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.rad = waparams.edgrad; cp.val = waparams.edgval; cp.til = waparams.edgthresh; + cp.eff = waparams.edgeffect; cp.conres = waparams.rescon; cp.conresH = waparams.resconH; @@ -2721,7 +2723,47 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz constexpr float aedstr = (eddstrength - 1.f) / 90.f; constexpr float bedstr = 1.f - 10.f * aedstr; + float mea[10]; + float beta = 1.f; + if(cp.eff < 2.5f) { + float effect = cp.eff; + float offs = 1.f; + + calceffect(level, mean, sigma, mea, effect, offs); + for (int co = 0; co < H_L * W_L; co++) { + float WavCL = std::fabs(WavCoeffs_L[dir][co]); + + if (WavCL < mea[0]) { + beta = 0.05f; + } else if (WavCL < mea[1]) { + beta = 0.2f; + } else if (WavCL < mea[2]) { + beta = 0.7f; + } else if (WavCL < mea[3]) { + beta = 1.f; //standard + } else if (WavCL < mea[4]) { + beta = 1.f; + } else if (WavCL < mea[5]) { + beta = 0.8f; //+sigma + } else if (WavCL < mea[6]) { + beta = 0.6f; + } else if (WavCL < mea[7]) { + beta = 0.4f; + } else if (WavCL < mea[8]) { + beta = 0.2f; // + 2 sigma + } else if (WavCL < mea[9]) { + beta = 0.1f; + } else { + beta = 0.0f; + } + + } + } + + if (cp.val > 0 && cp.edgeena) { + + float * koe = nullptr; float maxkoe = 0.f; @@ -2810,7 +2852,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float atten01234 = 0.80f; value *= (atten01234 * scaleskip[1]); //for zoom < 100% reduce strength...I choose level 1...but!! } - + value *= beta; float edge = 1.f; float lim0 = 20.f; //arbitrary limit for low radius and level between 2 or 3 to 30 maxi float lev = float (level); diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 66f2a4c19..ae5b6b465 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2312,6 +2312,7 @@ WaveletParams::WaveletParams() : edgeampli(10), contrast(0), edgrad(15), + edgeffect(1.0), edgval(0), edgthresh(10), thr(30), @@ -2428,6 +2429,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && edgeampli == other.edgeampli && contrast == other.contrast && edgrad == other.edgrad + && edgeffect == other.edgeffect && edgval == other.edgval && edgthresh == other.edgthresh && thr == other.thr @@ -3593,6 +3595,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.bluwav, "Wavelet", "bluwav", wavelet.bluwav, keyFile); saveToKeyfile(!pedited || pedited->wavelet.hueskin, "Wavelet", "Hueskin", wavelet.hueskin.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgrad, "Wavelet", "Edgrad", wavelet.edgrad, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.edgeffect, "Wavelet", "Edgeffect", wavelet.edgeffect, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgval, "Wavelet", "Edgval", wavelet.edgval, keyFile); saveToKeyfile(!pedited || pedited->wavelet.edgthresh, "Wavelet", "ThrEdg", wavelet.edgthresh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.avoid, "Wavelet", "AvoidColorShift", wavelet.avoid, keyFile); @@ -4749,6 +4752,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "ChromaLink", pedited, wavelet.chro, pedited->wavelet.chro); assignFromKeyfile(keyFile, "Wavelet", "Contrast", pedited, wavelet.contrast, pedited->wavelet.contrast); assignFromKeyfile(keyFile, "Wavelet", "Edgrad", pedited, wavelet.edgrad, pedited->wavelet.edgrad); + assignFromKeyfile(keyFile, "Wavelet", "Edgeffect", pedited, wavelet.edgeffect, pedited->wavelet.edgeffect); assignFromKeyfile(keyFile, "Wavelet", "Edgval", pedited, wavelet.edgval, pedited->wavelet.edgval); assignFromKeyfile(keyFile, "Wavelet", "ThrEdg", pedited, wavelet.edgthresh, pedited->wavelet.edgthresh); assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidShadow", pedited, wavelet.thr, pedited->wavelet.thr); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 6dd5198ff..7174dfb3c 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1271,6 +1271,7 @@ struct WaveletParams { int edgeampli; int contrast; int edgrad; + double edgeffect; int edgval; int edgthresh; int thr; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 0b06b9d92..87c405d42 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -535,6 +535,7 @@ void ParamsEdited::set(bool v) wavelet.chro = v; wavelet.contrast = v; wavelet.edgrad = v; + wavelet.edgeffect = v; wavelet.edgval = v; wavelet.edgthresh = v; wavelet.thr = v; @@ -1140,6 +1141,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.chro = wavelet.chro && p.wavelet.chro == other.wavelet.chro; wavelet.contrast = wavelet.contrast && p.wavelet.contrast == other.wavelet.contrast; wavelet.edgrad = wavelet.edgrad && p.wavelet.edgrad == other.wavelet.edgrad; + wavelet.edgeffect = wavelet.edgeffect && p.wavelet.edgeffect == other.wavelet.edgeffect; wavelet.edgval = wavelet.edgval && p.wavelet.edgval == other.wavelet.edgval; wavelet.edgthresh = wavelet.edgthresh && p.wavelet.edgthresh == other.wavelet.edgthresh; wavelet.thr = wavelet.thr && p.wavelet.thr == other.wavelet.thr; @@ -3212,6 +3214,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.resblur = mods.wavelet.resblur; } + if (wavelet.edgeffect) { + toEdit.wavelet.edgeffect = mods.wavelet.edgeffect; + } + if (wavelet.resblurc) { toEdit.wavelet.resblurc = mods.wavelet.resblurc; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 0b315583d..f117163dd 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -551,6 +551,7 @@ struct WaveletParamsEdited { bool chroma; bool contrast; bool edgrad; + bool edgeffect; bool edgval; bool edgthresh; bool thr; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index afedf750c..89e05346a 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -90,7 +90,7 @@ Wavelet::Wavelet() : reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), resblur(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLUR"), 0, 100, 1, 0))), resblurc(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLURC"), 0, 100, 1, 0))), - bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.05, 2.5, 0.01, 1.))), + bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.05, 2.5, 0.5, 50.))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), scale(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSCALE"), 0.1, 10.0, 0.01, 1.0))), @@ -106,6 +106,7 @@ Wavelet::Wavelet() : radius(Gtk::manage(new Adjuster(M("TP_WAVELET_RADIUS"), 0, 100, 1, 40))), skinprotect(Gtk::manage(new Adjuster(M("TP_WAVELET_SKIN"), -100, 100, 1, 0.))), edgrad(Gtk::manage(new Adjuster(M("TP_WAVELET_EDRAD"), 0, 100, 1, 15))), + edgeffect(Gtk::manage(new Adjuster(M("TP_WAVELET_EDEFFECT"), 0.05, 2.5, 0.01, 1.))), edgval(Gtk::manage(new Adjuster(M("TP_WAVELET_EDVAL"), 0, 100, 1, 0))), edgthresh(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGTHRESH"), -50, 100, 1, 10))), strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))), @@ -196,7 +197,7 @@ Wavelet::Wavelet() : EvWavblshape = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLSHAPE"); EvWavresblur = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURWAV"); EvWavresblurc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_BLURCWAV"); - + EvWavedgeffect = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_EDGEFFECT"); expsettings->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings)); expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast)); @@ -546,10 +547,14 @@ Wavelet::Wavelet() : // Edge Sharpness ToolParamBlock* const edgBox = Gtk::manage(new ToolParamBlock()); + edgeffect->setAdjusterListener(this); + edgBox->pack_start(*edgeffect); + edgeffect->set_tooltip_markup(M("TP_WAVELET_EDEFFECT_TOOLTIP")); edgval->setAdjusterListener(this); edgBox->pack_start(*edgval); + edgrad->setAdjusterListener(this); edgBox->pack_start(*edgrad); edgrad->set_tooltip_markup(M("TP_WAVELET_EDRAD_TOOLTIP")); @@ -1343,6 +1348,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) chro->setValue(pp->wavelet.chro); contrast->setValue(pp->wavelet.contrast); edgrad->setValue(pp->wavelet.edgrad); + edgeffect->setValue(pp->wavelet.edgeffect); edgval->setValue(pp->wavelet.edgval); edgthresh->setValue(pp->wavelet.edgthresh); thr->setValue(pp->wavelet.thr); @@ -1530,6 +1536,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) lipst->set_inconsistent(!pedited->wavelet.lipst); contrast->setEditedState(pedited->wavelet.contrast ? Edited : UnEdited); edgrad->setEditedState(pedited->wavelet.edgrad ? Edited : UnEdited); + edgeffect->setEditedState(pedited->wavelet.edgeffect ? Edited : UnEdited); edgval->setEditedState(pedited->wavelet.edgval ? Edited : UnEdited); thr->setEditedState(pedited->wavelet.thr ? Edited : UnEdited); thrH->setEditedState(pedited->wavelet.thrH ? Edited : UnEdited); @@ -1702,6 +1709,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.lipst = lipst->get_active(); pp->wavelet.contrast = contrast->getValue(); pp->wavelet.edgrad = edgrad->getValue(); + pp->wavelet.edgeffect = edgeffect->getValue(); pp->wavelet.edgval = edgval->getValue(); pp->wavelet.edgthresh = edgthresh->getValue(); pp->wavelet.thr = thr->getValue(); @@ -1823,6 +1831,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.chro = chro->getEditedState(); pedited->wavelet.contrast = contrast->getEditedState(); pedited->wavelet.edgrad = edgrad->getEditedState(); + pedited->wavelet.edgeffect = edgeffect->getEditedState(); pedited->wavelet.edgval = edgval->getEditedState(); pedited->wavelet.thr = thr->getEditedState(); pedited->wavelet.thrH = thrH->getEditedState(); @@ -2068,6 +2077,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit chro->setDefault(defParams->wavelet.chro); contrast->setDefault(defParams->wavelet.contrast); edgrad->setDefault(defParams->wavelet.edgrad); + edgeffect->setDefault(defParams->wavelet.edgeffect); edgval->setDefault(defParams->wavelet.edgval); edgthresh->setDefault(defParams->wavelet.edgthresh); thr->setDefault(defParams->wavelet.thr); @@ -2136,6 +2146,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit chro->setDefaultEditedState(pedited->wavelet.chro ? Edited : UnEdited); contrast->setDefaultEditedState(pedited->wavelet.contrast ? Edited : UnEdited); edgrad->setDefaultEditedState(pedited->wavelet.edgrad ? Edited : UnEdited); + edgeffect->setDefaultEditedState(pedited->wavelet.edgeffect ? Edited : UnEdited); edgval->setDefaultEditedState(pedited->wavelet.edgval ? Edited : UnEdited); edgthresh->setDefault(defParams->wavelet.edgthresh); thr->setDefaultEditedState(pedited->wavelet.thr ? Edited : UnEdited); @@ -2193,6 +2204,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit chro->setDefaultEditedState(Irrelevant); contrast->setDefaultEditedState(Irrelevant); edgrad->setDefaultEditedState(Irrelevant); + edgeffect->setDefaultEditedState(Irrelevant); edgval->setDefaultEditedState(Irrelevant); edgthresh->setDefaultEditedState(Irrelevant); thr->setDefaultEditedState(Irrelevant); @@ -2728,6 +2740,7 @@ void Wavelet::setBatchMode(bool batchMode) chro->showEditedCB(); contrast->showEditedCB(); edgrad->showEditedCB(); + edgeffect->showEditedCB(); edgval->showEditedCB(); edgthresh->showEditedCB(); thr->showEditedCB(); @@ -2856,6 +2869,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavedgeampli, edgeampli->getTextValue()); } else if (a == edgrad) { listener->panelChanged(EvWavedgrad, edgrad->getTextValue()); + } else if (a == edgeffect) { + listener->panelChanged(EvWavedgeffect, edgeffect->getTextValue()); } else if (a == edgval) { listener->panelChanged(EvWavedgval, edgval->getTextValue()); } else if (a == thres) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 609d3226c..b73339973 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -88,6 +88,7 @@ private: rtengine::ProcEvent EvWavblshape; rtengine::ProcEvent EvWavresblur; rtengine::ProcEvent EvWavresblurc; + rtengine::ProcEvent EvWavedgeffect; void foldAllButMe(GdkEventButton* event, MyExpander *expander); @@ -207,6 +208,7 @@ private: Adjuster* const radius; Adjuster* const skinprotect; Adjuster* const edgrad; + Adjuster* const edgeffect; Adjuster* const edgval; Adjuster* const edgthresh; Adjuster* const strength; From 29596bb45747f50f54655e5fd42e6c00bb0bde07 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 1 Apr 2020 10:16:24 +0200 Subject: [PATCH 241/264] change reset value slider bluwav to 1 --- rtgui/wavelet.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 89e05346a..5d2de1a02 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -90,7 +90,7 @@ Wavelet::Wavelet() : reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))), resblur(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLUR"), 0, 100, 1, 0))), resblurc(Gtk::manage(new Adjuster(M("TP_WAVELET_RESBLURC"), 0, 100, 1, 0))), - bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.05, 2.5, 0.5, 50.))), + bluwav(Gtk::manage(new Adjuster(M("TP_WAVELET_BLUWAV"), 0.05, 2.5, 0.5, 1.))), tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))), edgs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMEDGS"), 0.1, 4.0, 0.01, 1.4))), scale(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSCALE"), 0.1, 10.0, 0.01, 1.0))), From ed57e3163efb47e6ae9d699640fd7590a93cf853 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 2 Apr 2020 09:10:33 +0200 Subject: [PATCH 242/264] Prepare ftblockdn to chroma denoise --- rtdata/languages/default | 8 +- rtengine/FTblockDN.cc | 285 +++++++++++++++++++++++++++++++-------- rtengine/improcfun.h | 23 +++- rtengine/ipwavelet.cc | 2 +- 4 files changed, 248 insertions(+), 70 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index ad98e3e71..2a90be072 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -803,7 +803,7 @@ HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_MSG_THRESWAV;Balance threshold -HISTORY_MSG_BLUWAV;Effects +HISTORY_MSG_BLUWAV;Damper HISTORY_MSG_WAVOLDSH;Old algorithm HISTORY_MSG_WAVOFFSET;Offset HISTORY_MSG_WAVLOWTHR;Threshold low contrast @@ -2147,7 +2147,7 @@ TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method TP_WAVELET_BLCURVE;Blur by levels TP_WAVELET_BLURFRAME;Blur -TP_WAVELET_BLUWAV;Effects +TP_WAVELET_BLUWAV;Damper TP_WAVELET_CBENAB;Toning and Color Balance TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CCURVE;Local contrast @@ -2206,7 +2206,7 @@ TP_WAVELET_EDGEDETECTTHR;Threshold low (noise) TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection) TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky. TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise. -TP_WAVELET_EDEFFECT;Effect +TP_WAVELET_EDEFFECT;Damper TP_WAVELET_EDEFFECT_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\nMaximum value (2.5) disabled the tool TP_WAVELET_EDGESENSI;Edge sensitivity TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. @@ -2283,7 +2283,7 @@ TP_WAVELET_SETTINGS;Wavelet Settings TP_WAVELET_SHA;Sharp mask TP_WAVELET_SHFRAME;Shadows/Highlights TP_WAVELET_SHOWMASK;Show wavelet 'mask' -TP_WAVELET_SIGMA;Effects +TP_WAVELET_SIGMA;Damper TP_WAVELET_SIGMA_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\n The higher it is, the more contrast values will be strongly modified and the higher the risk to generate artifacts. The lower it is, the more pinpoint will the effect be applied to a certain range of contrast values TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 9120fe0ad..34e7351b8 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -63,8 +63,8 @@ namespace rtengine { -// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /* Structure of the algorithm: @@ -483,7 +483,6 @@ enum nrquality {QUALITY_STANDARD, QUALITY_HIGH}; void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagefloat * dst, Imagefloat * calclum, float * ch_M, float *max_r, float *max_b, bool isRAW, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, const NoiseCurve & noiseLCurve, const NoiseCurve & noiseCCurve, float &nresi, float &highresi) { BENCHFUN - //#ifdef _DEBUG MyTime t1e, t2e; t1e.set(); @@ -1183,6 +1182,7 @@ BENCHFUN } else { madL[lvl][dir - 1] = SQR(MadRgb(WavCoeffs_L[dir], Wlvl_L * Hlvl_L)); } + } } } @@ -1200,16 +1200,16 @@ BENCHFUN if (!memoryAllocationFailed) { if (nrQuality == QUALITY_STANDARD) { - if (!WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, noisevarab_r, useNoiseCCurve, autoch, denoiseMethodRgb)) { //enhance mode + if (!WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, nullptr, 0, noisevarab_r, useNoiseCCurve, autoch, denoiseMethodRgb, denoiseNestedLevels)) { //enhance mode memoryAllocationFailed = true; } } else { /*if (nrQuality==QUALITY_HIGH)*/ - if (!WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, noisevarab_r, useNoiseCCurve, autoch, denoiseMethodRgb)) { //enhance mode + if (!WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, nullptr, 0, noisevarab_r, useNoiseCCurve, autoch, denoiseMethodRgb, denoiseNestedLevels)) { //enhance mode memoryAllocationFailed = true; } if (!memoryAllocationFailed) { - if (!WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, noisevarab_r, useNoiseCCurve, autoch, denoiseMethodRgb)) { + if (!WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, nullptr, 0, noisevarab_r, useNoiseCCurve, autoch, denoiseMethodRgb, denoiseNestedLevels)) { memoryAllocationFailed = true; } } @@ -1237,16 +1237,16 @@ BENCHFUN if (!memoryAllocationFailed) { if (nrQuality == QUALITY_STANDARD) { - if (!WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, noisevarab_b, useNoiseCCurve, autoch, denoiseMethodRgb)) { //enhance mode + if (!WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, nullptr, 0, noisevarab_b, useNoiseCCurve, autoch, denoiseMethodRgb, denoiseNestedLevels)) { //enhance mode memoryAllocationFailed = true; } } else { /*if (nrQuality==QUALITY_HIGH)*/ - if (!WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, noisevarab_b, useNoiseCCurve, autoch, denoiseMethodRgb)) { //enhance mode + if (!WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, nullptr, 0, noisevarab_b, useNoiseCCurve, autoch, denoiseMethodRgb, denoiseNestedLevels)) { //enhance mode memoryAllocationFailed = true; } if (!memoryAllocationFailed) { - if (!WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, noisevarab_b, useNoiseCCurve, autoch, denoiseMethodRgb)) { + if (!WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, nullptr, 0, noisevarab_b, useNoiseCCurve, autoch, denoiseMethodRgb, denoiseNestedLevels)) { memoryAllocationFailed = true; } } @@ -1273,16 +1273,16 @@ BENCHFUN int edge = 0; if (nrQuality == QUALITY_STANDARD) { - if (!WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, nullptr, edge)) { //enhance mode + if (!WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, nullptr, edge, denoiseNestedLevels)) { //enhance mode memoryAllocationFailed = true; } } else { /*if (nrQuality==QUALITY_HIGH)*/ - if (!WaveletDenoiseAll_BiShrinkL(*Ldecomp, noisevarlum, madL)) { //enhance mode + if (!WaveletDenoiseAll_BiShrinkL(*Ldecomp, noisevarlum, madL, nullptr, edge, denoiseNestedLevels)) { //enhance mode memoryAllocationFailed = true; } if (!memoryAllocationFailed) { - if (!WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, nullptr, edge)) { + if (!WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, nullptr, edge, denoiseNestedLevels)) { memoryAllocationFailed = true; } } @@ -1354,9 +1354,11 @@ BENCHFUN #else int subThread = 0; #endif +// float blurbuffer[TS * TS] ALIGNED64; float *Lblox = LbloxArray[subThread]; float *fLblox = fLbloxArray[subThread]; float pBuf[width + TS + 2 * blkrad * offset] ALIGNED16; +// float nbrwt[TS * TS] ALIGNED64; #ifdef _OPENMP #pragma omp for #endif @@ -1432,6 +1434,7 @@ BENCHFUN for (int hblk = 0; hblk < numblox_W; ++hblk) { RGBtile_denoise(fLblox, hblk, noisevar_Ldetail); + // RGBtile_denoise(fLblox, hblk, noisevar_Ldetail, nbrwt, blurbuffer); }//end of horizontal block loop //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1448,8 +1451,14 @@ BENCHFUN //add row of blocks to output image tile RGBoutput_tile_row(Lblox, Ldetail, tilemask_out, height, width, topproc); + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + }//end of vertical block loop + + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + } + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #ifdef _OPENMP #pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) @@ -2036,6 +2045,13 @@ BENCHFUN }//end of main RGB_denoise + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +//void ImProcFunctions::RGBtile_denoise(float * fLblox, int hblproc, float noisevar_Ldetail, float * nbrwt, float * blurbuffer) //for DCT void ImProcFunctions::RGBtile_denoise(float* fLblox, int hblproc, float noisevar_Ldetail) //for DCT { float nbrwt[TS * TS] ALIGNED64; @@ -2062,6 +2078,10 @@ void ImProcFunctions::RGBtile_denoise(float* fLblox, int hblproc, float noisevar } + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + void ImProcFunctions::RGBoutput_tile_row(float *bloxrow_L, float ** Ldetail, float ** tilemask_out, int height, int width, int top) { const int numblox_W = ceil((static_cast(width)) / (offset)); @@ -2189,11 +2209,19 @@ void ImProcFunctions::Noise_residualAB(const wavelet_decomposition &WaveletCoeff chmaxresid = maxresid; } -bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3]) +bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels) { int maxlvl = min(WaveletCoeffs_L.maxlevel(), 5); const float eps = 0.01f; + if (edge == 1 || edge == 3) { + maxlvl = 4; //for refine denoise edge wavelet + } + + if (edge == 2) { + maxlvl = 7; //for locallab denoise + } + int maxWL = 0, maxHL = 0; for (int lvl = 0; lvl < maxlvl; ++lvl) { @@ -2204,6 +2232,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W if (WaveletCoeffs_L.level_H(lvl) > maxHL) { maxHL = WaveletCoeffs_L.level_H(lvl); } + } bool memoryAllocationFailed = false; @@ -2234,14 +2263,52 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl); if (lvl == maxlvl - 1) { - int edge = 0; - ShrinkAllL(WaveletCoeffs_L, buffer, lvl, dir, noisevarlum, madL[lvl], nullptr, edge); - } else { + // int edge = 0; + ShrinkAllL(WaveletCoeffs_L, buffer, lvl, dir, noisevarlum, madL[lvl], vari, edge); + } else { //simple wavelet shrinkage float * sfave = buffer[0] + 32; float * sfaved = buffer[2] + 96; float mad_Lr = madL[lvl][dir - 1]; + /* + if ((edge == 1 || edge == 2 || edge == 3) && vari) { + noisevarlum = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer + + for (int i = 0; i < Wlvl_L * Hlvl_L; ++i) { + noisevarlum[i] = vari[lvl]; + } + } + */ + float *nvl = nullptr; + nvl = new float[Hlvl_L * Wlvl_L]; + + for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) { + nvl[i] = 0.f; + } + if ((edge == 1 || edge == 2 || edge == 3) && vari) { + // nvl = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer + if ((edge == 1 || edge == 3)) { + for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) { + nvl[i] = vari[lvl]; + } + } + + if (edge == 2) { + for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) { + nvl[i] = vari[lvl] * SQR(noisevarlum[i]); + } + } + + } + + else { + for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) { + nvl[i] = noisevarlum[i]; + } + + } + float levelFactor = mad_Lr * 5.f / (lvl + 1); #ifdef __SSE2__ @@ -2253,14 +2320,14 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W int coeffloc_L; for (coeffloc_L = 0; coeffloc_L < Hlvl_L * Wlvl_L - 3; coeffloc_L += 4) { - mad_Lv = LVFU(noisevarlum[coeffloc_L]) * levelFactorv; + mad_Lv = LVFU(nvl[coeffloc_L]) * levelFactorv; mag_Lv = SQRV(LVFU(WavCoeffs_L[dir][coeffloc_L])); STVFU(sfave[coeffloc_L], mag_Lv / (mag_Lv + mad_Lv * xexpf(-mag_Lv / (mad_Lv * ninev)) + epsv)); } for (; coeffloc_L < Hlvl_L * Wlvl_L; ++coeffloc_L) { float mag_L = SQR(WavCoeffs_L[dir][coeffloc_L]); - sfave[coeffloc_L] = mag_L / (mag_L + levelFactor * noisevarlum[coeffloc_L] * xexpf(-mag_L / (9.f * levelFactor * noisevarlum[coeffloc_L])) + eps); + sfave[coeffloc_L] = mag_L / (mag_L + levelFactor * nvl[coeffloc_L] * xexpf(-mag_L / (9.f * levelFactor * nvl[coeffloc_L])) + eps); } #else @@ -2270,12 +2337,13 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W int coeffloc_L = i * Wlvl_L + j; float mag_L = SQR(WavCoeffs_L[dir][coeffloc_L]); - sfave[coeffloc_L] = mag_L / (mag_L + levelFactor * noisevarlum[coeffloc_L] * xexpf(-mag_L / (9.f * levelFactor * noisevarlum[coeffloc_L])) + eps); + sfave[coeffloc_L] = mag_L / (mag_L + levelFactor * nvl[coeffloc_L] * xexpf(-mag_L / (9.f * levelFactor * nvl[coeffloc_L])) + eps); } } #endif boxblur(sfave, sfaved, lvl + 2, Wlvl_L, Hlvl_L, false); //increase smoothness by locally averaging shrinkage + #ifdef __SSE2__ vfloat sfavev; vfloat sf_Lv; @@ -2306,7 +2374,9 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W } #endif + delete [] nvl; } + } } } @@ -2321,11 +2391,20 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W return (!memoryAllocationFailed); } -bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, - float *noisevarchrom, float madL[8][3], float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb) + +bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels) + { int maxlvl = WaveletCoeffs_L.maxlevel(); + if (local == 2) { + maxlvl = 7; //for local denoise + } + + if (local == 3) { + maxlvl = 4; //for shape detection + } + if (autoch && noisevar_ab <= 0.001f) { noisevar_ab = 0.02f; } @@ -2393,14 +2472,36 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition & float ** WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); if (lvl == maxlvl - 1) { - ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl], madab[lvl], true); + ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl], nullptr, 0, madab[lvl], true); } else { //simple wavelet shrinkage + float noisevarfc; float mad_Lr = madL[lvl][dir - 1]; - float mad_abr = useNoiseCCurve ? noisevar_ab * madab[lvl][dir - 1] : SQR(noisevar_ab) * madab[lvl][dir - 1]; + float *nvc = nullptr; + nvc = new float[Hlvl_ab * Wlvl_ab]; - if (noisevar_ab > 0.001f) { + if ((local == 2 || local == 3) && variC && useNoiseCCurve) { + noisevarfc = variC[lvl]; + + for (int p = 0; p < Hlvl_ab * Wlvl_ab; p++) { + nvc[p] = 10.f * sqrt(variC[lvl]) * SQR(1.f + 4.f * noisevarchrom[p]); + } + + } else { + noisevarfc = noisevar_ab; + + for (int p = 0; p < Hlvl_ab * Wlvl_ab; p++) { + nvc[p] = noisevarchrom[p]; + } + + } + + + // float mad_abr = useNoiseCCurve ? noisevar_ab * madab[lvl][dir - 1] : SQR(noisevar_ab) * madab[lvl][dir - 1]; + float mad_abr = useNoiseCCurve ? noisevarfc * madab[lvl][dir - 1] : SQR(noisevarfc) * madab[lvl][dir - 1]; + + if (noisevarfc > 0.001f) { #ifdef __SSE2__ vfloat onev = F2V(1.f); @@ -2412,7 +2513,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition & int coeffloc_ab; for (coeffloc_ab = 0; coeffloc_ab < Hlvl_ab * Wlvl_ab - 3; coeffloc_ab += 4) { - mad_abv = LVFU(noisevarchrom[coeffloc_ab]) * mad_abrv; + mad_abv = LVFU(nvc[coeffloc_ab]) * mad_abrv; tempabv = LVFU(WavCoeffs_ab[dir][coeffloc_ab]); mag_Lv = LVFU(WavCoeffs_L[dir][coeffloc_ab]); @@ -2425,7 +2526,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition & for (; coeffloc_ab < Hlvl_ab * Wlvl_ab; ++coeffloc_ab) { float mag_L = SQR(WavCoeffs_L[dir][coeffloc_ab ]); float mag_ab = SQR(WavCoeffs_ab[dir][coeffloc_ab]); - WavCoeffs_ab[dir][coeffloc_ab] *= SQR(1.f - xexpf(-(mag_ab / (noisevarchrom[coeffloc_ab] * mad_abr)) - (mag_L / (9.f * mad_Lr)))/*satfactor_a*/); + WavCoeffs_ab[dir][coeffloc_ab] *= SQR(1.f - xexpf(-(mag_ab / (nvc[coeffloc_ab] * mad_abr)) - (mag_L / (9.f * mad_Lr)))/*satfactor_a*/); }//now chrominance coefficients are denoised #else @@ -2437,7 +2538,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition & float mag_L = SQR(WavCoeffs_L[dir][coeffloc_ab ]); float mag_ab = SQR(WavCoeffs_ab[dir][coeffloc_ab]); - WavCoeffs_ab[dir][coeffloc_ab] *= SQR(1.f - xexpf(-(mag_ab / (noisevarchrom[coeffloc_ab] * mad_abr)) - (mag_L / (9.f * mad_Lr)))/*satfactor_a*/); + WavCoeffs_ab[dir][coeffloc_ab] *= SQR(1.f - xexpf(-(mag_ab / (nvc[coeffloc_ab] * mad_abr)) - (mag_L / (9.f * mad_Lr)))/*satfactor_a*/); } }//now chrominance coefficients are denoised @@ -2445,9 +2546,12 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition & #endif } + delete [] nvc; + } } } + } for (int i = 2; i >= 0; i--) { @@ -2459,16 +2563,20 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition & } -bool ImProcFunctions::WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge)//mod JD +bool ImProcFunctions::WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels)//mod JD { int maxlvl = min(WaveletCoeffs_L.maxlevel(), 5); - if (edge == 1) { + if (edge == 1 || edge == 3) { maxlvl = 4; //for refine denoise edge wavelet } + if (edge == 2) { + maxlvl = 7; //for locallab denoise + } + int maxWL = 0, maxHL = 0; for (int lvl = 0; lvl < maxlvl; ++lvl) { @@ -2517,11 +2625,20 @@ bool ImProcFunctions::WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoe bool ImProcFunctions::WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, - float *noisevarchrom, float madL[8][3], float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb)//mod JD + float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels)//mod JD { int maxlvl = WaveletCoeffs_L.maxlevel(); + + if (local == 2) { + maxlvl = 7; //for local denoise + } + + if (local == 3) { + maxlvl = 4; //for shape detection + } + int maxWL = 0, maxHL = 0; for (int lvl = 0; lvl < maxlvl; ++lvl) { @@ -2555,7 +2672,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCo for (int lvl = 0; lvl < maxlvl; ++lvl) { for (int dir = 1; dir < 4; ++dir) { - ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl]); + ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl], variC, local, nullptr, 0); } } } @@ -2569,8 +2686,6 @@ bool ImProcFunctions::WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCo return (!memoryAllocationFailed); } -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void ImProcFunctions::ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir, @@ -2582,7 +2697,7 @@ void ImProcFunctions::ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, f float * sfave = buffer[0] + 32; float * sfaved = buffer[1] + 64; - float * blurBuffer = buffer[2] + 96; +// float * blurBuffer = buffer[2] + 96; const int W_L = WaveletCoeffs_L.level_W(level); const int H_L = WaveletCoeffs_L.level_H(level); @@ -2591,30 +2706,54 @@ void ImProcFunctions::ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, f const float mad_L = madL[dir - 1] ; const float levelFactor = mad_L * 5.f / static_cast(level + 1); - if (edge == 1 && vari) { - noisevarlum = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer + float *nvl = nullptr; + nvl = new float[ H_L * W_L]; - for (int i = 0; i < W_L * H_L; ++i) { - noisevarlum[i] = vari[level]; - } + for (int i = 0; i < W_L * H_L; ++i) { + nvl[i] = 0.f; } + if ((edge == 1 || edge == 2 || edge == 3) && vari) { + // nvl = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer + if ((edge == 1 || edge == 3)) { + for (int i = 0; i < W_L * H_L; ++i) { + nvl[i] = vari[level]; //* SQR(1.f + 4.f * noisevarchrom[p]); + } + } + + if (edge == 2) { + for (int i = 0; i < W_L * H_L; ++i) { + nvl[i] = vari[level] * SQR(noisevarlum[i]); + } + } + + } + + else { + for (int i = 0; i < W_L * H_L; ++i) { + nvl[i] = noisevarlum[i]; + } + + } int i = 0; #ifdef __SSE2__ const vfloat levelFactorv = F2V(levelFactor); const vfloat ninev = F2V(9.f); const vfloat epsv = F2V(eps); - for (; i < W_L * H_L - 3; i += 4) { - const vfloat mad_Lv = LVFU(noisevarlum[i]) * levelFactorv; + + for (i = 0; i < W_L * H_L - 3; i += 4) { + // const vfloat mad_Lv = LVFU(noisevarlum[i]) * levelFactorv; + const vfloat mad_Lv = LVFU(nvl[i]) * levelFactorv; const vfloat magv = SQRV(LVFU(WavCoeffs_L[dir][i])); STVFU(sfave[i], magv / (magv + mad_Lv * xexpf(-magv / (ninev * mad_Lv)) + epsv)); } + #endif // few remaining pixels for (; i < W_L * H_L; ++i) { - const float mag = SQR(WavCoeffs_L[dir][i]); - sfave[i] = mag / (mag + levelFactor * noisevarlum[i] * xexpf(-mag / (9 * levelFactor * noisevarlum[i])) + eps); + float mag = SQR(WavCoeffs_L[dir][i]); + sfave[i] = mag / (mag + levelFactor * nvl[i] * xexpf(-mag / (9 * levelFactor * nvl[i])) + eps); } boxblur(sfave, sfaved, level + 2, W_L, H_L, false); //increase smoothness by locally averaging shrinkage @@ -2634,12 +2773,15 @@ void ImProcFunctions::ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, f //use smoothed shrinkage unless local shrinkage is much less WavCoeffs_L[dir][i] *= (SQR(sfaved[i]) + SQR(sf)) / (sfaved[i] + sf + eps); }//now luminance coefficients are denoised + + delete [] nvl; + } -void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float **buffer, int level, int dir, - float *noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, - bool denoiseMethodRgb, float * madL, float * madaab, bool madCalculated) +void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition & WaveletCoeffs_L, const wavelet_decomposition & WaveletCoeffs_ab, float **buffer, int level, int dir, + float * noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, + bool denoiseMethodRgb, float * madL, float * variC, int local, float * madaab, bool madCalculated) { //simple wavelet shrinkage @@ -2651,6 +2793,7 @@ void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, float * sfaveab = buffer[0] + 32; float * sfaveabd = buffer[1] + 64; + // float * blurBuffer = buffer[2] + 96; int W_ab = WaveletCoeffs_ab.level_W(level); int H_ab = WaveletCoeffs_ab.level_H(level); @@ -2670,9 +2813,30 @@ void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, madab = SQR(MadRgb(WavCoeffs_ab[dir], W_ab * H_ab)); } } + float noisevarfc; - if (noisevar_ab > 0.001f) { - madab = useNoiseCCurve ? madab : madab * noisevar_ab; + float *nvc = nullptr; + nvc = new float[ H_ab * W_ab]; + + if ((local == 2 || local == 3) && variC && useNoiseCCurve) { + noisevarfc = variC[level]; + for (int p = 0; p < H_ab * W_ab; p++) { + nvc[p] = 10.f * sqrt(variC[level]) * SQR(1.f + 4.f * noisevarchrom[p]); + } + + } else { + noisevarfc = noisevar_ab; + + for (int p = 0; p < H_ab * W_ab; p++) { + nvc[p] = noisevarchrom[p]; + } + + } + + // printf("varfc=%f nvc0=%f nvc1=%f nvc2=%f\n", noisevarfc, nvc[10], nvc[H_ab * W_ab /3], nvc[H_ab * W_ab /2]); + if (noisevarfc > 0.001f) {//noisevar_ab + //madab = useNoiseCCurve ? madab : madab * noisevar_ab; + madab = useNoiseCCurve ? madab : madab * noisevarfc; #ifdef __SSE2__ vfloat onev = F2V(1.f); vfloat mad_abrv = F2V(madab); @@ -2680,10 +2844,11 @@ void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, vfloat rmadLm9v = onev / F2V(mad_L * 9.f); vfloat mad_abv ; vfloat mag_Lv, mag_abv; + int coeffloc_ab; for (coeffloc_ab = 0; coeffloc_ab < H_ab * W_ab - 3; coeffloc_ab += 4) { - mad_abv = LVFU(noisevarchrom[coeffloc_ab]) * mad_abrv; + mad_abv = LVFU(nvc[coeffloc_ab]) * mad_abrv; mag_Lv = LVFU(WavCoeffs_L[dir][coeffloc_ab]); mag_abv = SQRV(LVFU(WavCoeffs_ab[dir][coeffloc_ab])); @@ -2695,7 +2860,7 @@ void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, for (; coeffloc_ab < H_ab * W_ab; ++coeffloc_ab) { float mag_L = SQR(WavCoeffs_L[dir][coeffloc_ab]); float mag_ab = SQR(WavCoeffs_ab[dir][coeffloc_ab]); - sfaveab[coeffloc_ab] = (1.f - xexpf(-(mag_ab / (noisevarchrom[coeffloc_ab] * madab)) - (mag_L / (9.f * mad_L)))); + sfaveab[coeffloc_ab] = (1.f - xexpf(-(mag_ab / (nvc[coeffloc_ab] * madab)) - (mag_L / (9.f * mad_L)))); }//now chrominance coefficients are denoised #else @@ -2705,13 +2870,14 @@ void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, int coeffloc_ab = i * W_ab + j; float mag_L = SQR(WavCoeffs_L[dir][coeffloc_ab]); float mag_ab = SQR(WavCoeffs_ab[dir][coeffloc_ab]); - sfaveab[coeffloc_ab] = (1.f - xexpf(-(mag_ab / (noisevarchrom[coeffloc_ab] * madab)) - (mag_L / (9.f * mad_L)))); + sfaveab[coeffloc_ab] = (1.f - xexpf(-(mag_ab / (nvc[coeffloc_ab] * madab)) - (mag_L / (9.f * mad_L)))); } }//now chrominance coefficients are denoised #endif - boxblur(sfaveab, sfaveabd, level + 2, W_ab, H_ab, false); //increase smoothness by locally averaging shrinkage + +// boxblur(sfaveab, sfaveabd, blurBuffer, level + 2, level + 2, W_ab, H_ab); //increase smoothness by locally averaging shrinkage #ifdef __SSE2__ vfloat epsv = F2V(eps); vfloat sfabv; @@ -2749,12 +2915,13 @@ void ImProcFunctions::ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, #endif } + delete [] nvc; } void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b, - int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, - float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, - float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb) + int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float & chaut, int &Nb, float & redaut, float & blueaut, + float & maxredaut, float & maxblueaut, float & minredaut, float & minblueaut, int schoice, int lvl, float & chromina, float & sigma, float & lumema, float & sigma_L, float & redyel, float & skinc, float & nsknc, + float & maxchred, float & maxchblue, float & minchred, float & minchblue, int &nb, float & chau, float & chred, float & chblue, bool denoiseMethodRgb) { //simple wavelet shrinkage @@ -2869,9 +3036,9 @@ void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b, } -void ImProcFunctions::WaveletDenoiseAll_info(int levwav, const wavelet_decomposition &WaveletCoeffs_a, - const wavelet_decomposition &WaveletCoeffs_b, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, - float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb) +void ImProcFunctions::WaveletDenoiseAll_info(int levwav, const wavelet_decomposition & WaveletCoeffs_a, + const wavelet_decomposition & WaveletCoeffs_b, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float & chaut, int &Nb, float & redaut, float & blueaut, float & maxredaut, float & maxblueaut, float & minredaut, float & minblueaut, int schoice, + float & chromina, float & sigma, float & lumema, float & sigma_L, float & redyel, float & skinc, float & nsknc, float & maxchred, float & maxchblue, float & minchred, float & minchblue, int &nb, float & chau, float & chred, float & chblue, bool denoiseMethodRgb) { int maxlvl = levwav; @@ -2914,7 +3081,7 @@ void ImProcFunctions::RGB_denoise_infoGamCurve(const procparams::DirPyrDenoisePa } } -void ImProcFunctions::calcautodn_info(float &chaut, float &delta, int Nb, int levaut, float maxmax, float lumema, float chromina, int mode, int lissage, float redyel, float skinc, float nsknc) +void ImProcFunctions::calcautodn_info(float & chaut, float & delta, int Nb, int levaut, float maxmax, float lumema, float chromina, int mode, int lissage, float redyel, float skinc, float nsknc) { float reducdelta = 1.f; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index affa33640..3513efd92 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -238,18 +238,29 @@ public: void RGB_denoise_info(Imagefloat * src, Imagefloat * provicalc, bool isRAW, const LUTf &gamcurve, float gam, float gamthresh, float gamslope, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float & maxblueaut, float &minredaut, float & minblueaut, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, bool multiThread = false); void RGBtile_denoise(float * fLblox, int hblproc, float noisevar_Ldetail); //for DCT void RGBoutput_tile_row(float *bloxrow_L, float ** Ldetail, float ** tilemask_out, int height, int width, int top); - bool WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge); - bool WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb); +// bool WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge); +// bool WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb); void WaveletDenoiseAll_info(int levwav, const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float & minblueaut, int schoice, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb); - bool WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3]); - bool WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float noisevar_ab, - const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb); + bool WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels); + bool WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels); + bool WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels); + + bool WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels); +// bool WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3]); +// bool WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float noisevar_ab, +// const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb); + void ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir, float *noisevarlum, float * madL, float * vari, int edge); void ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float **buffer, int level, int dir, - float *noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, float * madL, float * madaab = nullptr, bool madCalculated = false); + float *noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, float * madL, float * variC, int local, float * madaab = nullptr, bool madCalculated = false); + + +// void ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir, float *noisevarlum, float * madL, float * vari, int edge); +// void ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float **buffer, int level, int dir, +// float *noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, float * madL, float * madaab = nullptr, bool madCalculated = false); void ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b, int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 53f685826..848451090 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -877,7 +877,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const vari[3] = rtengine::max(0.0001f, vari[3]); float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL - WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge); + WaveletDenoiseAllL (*Ldecomp, noisevarlum, madL, vari, edge, 1); } //Flat curve for Contrast=f(H) in levels From 61c6b19533f4a2207371d7ec8169fc0b7405cd21 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 2 Apr 2020 12:32:29 +0200 Subject: [PATCH 243/264] GUI for wavelt denoise chroma --- rtdata/languages/default | 7 ++++++ rtengine/procparams.cc | 12 ++++++++++ rtengine/procparams.h | 3 +++ rtgui/paramsedited.cc | 18 +++++++++++++++ rtgui/paramsedited.h | 3 +++ rtgui/wavelet.cc | 48 ++++++++++++++++++++++++++++++++++++++++ rtgui/wavelet.h | 7 ++++++ 7 files changed, 98 insertions(+) diff --git a/rtdata/languages/default b/rtdata/languages/default index 2a90be072..94f1e691c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -791,6 +791,9 @@ HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength HISTORY_MSG_TEMPOUT;CAM02 automatic temperature HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor HISTORY_MSG_TRANS_Method;Geometry - Method +HISTORY_MSG_WAVBALCHROM;Balance chroma +HISTORY_MSG_WAVCHROMFI;Chroma fine +HISTORY_MSG_WAVCHROMCO;Chroma coarse HISTORY_MSG_WAVCLARI;Clarity HISTORY_MSG_WAVEDGS;Edge stopping HISTORY_MSG_WAVMERGEC;Merge C @@ -2142,6 +2145,7 @@ TP_WAVELET_BALANCE;Contrast balance d/v-h TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. TP_WAVELET_BALCHRO;Chroma balance TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. +TP_WAVELET_BALCHROM;Chroma balance TP_WAVELET_BANONE;None TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method @@ -2157,7 +2161,10 @@ TP_WAVELET_CH3;Link contrast levels TP_WAVELET_CHCU;Curve TP_WAVELET_CHR;Chroma-contrast link strength TP_WAVELET_CHRO;Saturated/pastel threshold +TP_WAVELET_CHROFRAME;Denoise Chroma TP_WAVELET_CHROMAFRAME;Chroma +TP_WAVELET_CHROMCO;Chroma Coarse +TP_WAVELET_CHROMFI;Chroma Fine TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" TP_WAVELET_CHRWAV;Blur chroma diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index ae5b6b465..270e28a6a 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2248,6 +2248,9 @@ WaveletParams::WaveletParams() : bluemed(0), greenhigh(0), bluehigh(0), + balchrom(0.), + chromfi(0.), + chromco(0.), mergeL(40.), mergeC(20.), softrad(0.), @@ -2358,6 +2361,9 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && bluemed == other.bluemed && greenhigh == other.greenhigh && bluehigh == other.bluehigh + && balchrom == other.balchrom + && chromfi == other.chromfi + && chromco == other.chromco && mergeL == other.mergeL && mergeC == other.mergeC && softrad == other.softrad @@ -3520,6 +3526,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.bluehigh, "Wavelet", "CBbluehigh", wavelet.bluehigh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.bluemed, "Wavelet", "CBbluemed", wavelet.bluemed, keyFile); saveToKeyfile(!pedited || pedited->wavelet.bluelow, "Wavelet", "CBbluelow", wavelet.bluelow, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.balchrom, "Wavelet", "Balchrom", wavelet.balchrom, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.chromfi, "Wavelet", "Chromfine", wavelet.chromfi, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.chromco, "Wavelet", "Chromcoarse", wavelet.chromco, keyFile); saveToKeyfile(!pedited || pedited->wavelet.mergeL, "Wavelet", "MergeL", wavelet.mergeL, keyFile); saveToKeyfile(!pedited || pedited->wavelet.mergeC, "Wavelet", "MergeC", wavelet.mergeC, keyFile); saveToKeyfile(!pedited || pedited->wavelet.softrad, "Wavelet", "Softrad", wavelet.softrad, keyFile); @@ -4690,6 +4699,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "CBbluehigh", pedited, wavelet.bluehigh, pedited->wavelet.bluehigh); assignFromKeyfile(keyFile, "Wavelet", "CBbluemed", pedited, wavelet.bluemed, pedited->wavelet.bluemed); assignFromKeyfile(keyFile, "Wavelet", "CBbluelow", pedited, wavelet.bluelow, pedited->wavelet.bluelow); + assignFromKeyfile(keyFile, "Wavelet", "Balchrom", pedited, wavelet.balchrom, pedited->wavelet.balchrom); + assignFromKeyfile(keyFile, "Wavelet", "Chromfine", pedited, wavelet.chromfi, pedited->wavelet.chromfi); + assignFromKeyfile(keyFile, "Wavelet", "Chromcoarse", pedited, wavelet.chromco, pedited->wavelet.chromco); assignFromKeyfile(keyFile, "Wavelet", "MergeL", pedited, wavelet.mergeL, pedited->wavelet.mergeL); assignFromKeyfile(keyFile, "Wavelet", "MergeC", pedited, wavelet.mergeC, pedited->wavelet.mergeC); assignFromKeyfile(keyFile, "Wavelet", "Softrad", pedited, wavelet.softrad, pedited->wavelet.softrad); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 7174dfb3c..a6147ccc5 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1205,6 +1205,9 @@ struct WaveletParams { int bluemed; int greenhigh; int bluehigh; + double balchrom; + double chromfi; + double chromco; double mergeL; double mergeC; double softrad; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 87c405d42..0685e1471 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -486,6 +486,9 @@ void ParamsEdited::set(bool v) wavelet.bluemed = v; wavelet.bluelow = v; wavelet.lipst = v; + wavelet.balchrom = v; + wavelet.chromfi = v; + wavelet.chromco = v; wavelet.mergeL = v; wavelet.mergeC = v; wavelet.softrad = v; @@ -1093,6 +1096,9 @@ void ParamsEdited::initFrom(const std::vector& wavelet.bluelow = wavelet.bluelow && p.wavelet.bluelow == other.wavelet.bluelow; wavelet.lipst = wavelet.lipst && p.wavelet.lipst == other.wavelet.lipst; wavelet.bluehigh = wavelet.bluehigh && p.wavelet.bluehigh == other.wavelet.bluehigh; + wavelet.balchrom = wavelet.balchrom && p.wavelet.balchrom == other.wavelet.balchrom; + wavelet.chromfi = wavelet.chromfi && p.wavelet.chromfi == other.wavelet.chromfi; + wavelet.chromco = wavelet.chromco && p.wavelet.chromco == other.wavelet.chromco; wavelet.mergeL = wavelet.mergeL && p.wavelet.mergeL == other.wavelet.mergeL; wavelet.mergeC = wavelet.mergeC && p.wavelet.mergeC == other.wavelet.mergeC; wavelet.softrad = wavelet.softrad && p.wavelet.softrad == other.wavelet.softrad; @@ -2929,6 +2935,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.bluelow = mods.wavelet.bluelow; } + if (wavelet.balchrom) { + toEdit.wavelet.balchrom = mods.wavelet.balchrom; + } + + if (wavelet.chromfi) { + toEdit.wavelet.chromfi = mods.wavelet.chromfi; + } + + if (wavelet.chromco) { + toEdit.wavelet.chromco = mods.wavelet.chromco; + } + if (wavelet.mergeL) { toEdit.wavelet.mergeL = mods.wavelet.mergeL; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index f117163dd..4465d15b4 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -586,6 +586,9 @@ struct WaveletParamsEdited { bool bluemed; bool greenhigh; bool bluehigh; + bool balchrom; + bool chromfi; + bool chromco; bool mergeL; bool mergeC; bool softrad; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 5d2de1a02..836cdfe1f 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -130,6 +130,9 @@ Wavelet::Wavelet() : edgedetectthr2(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR2"), -10, 100, 1, 0))), edgesensi(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60))), edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), + balchrom(Gtk::manage(new Adjuster(M("TP_WAVELET_BALCHROM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-red-small.png"))))), + chromfi(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMFI"), 0, 100, 1, 0))), + chromco(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMCO"), 0, 100, 1, 0))), mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 40))), mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), @@ -157,6 +160,7 @@ Wavelet::Wavelet() : contFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CONTFRAME")))), blurFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_BLURFRAME")))), chromaFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROMAFRAME")))), + chroFrame(Gtk::manage(new Gtk::Frame(M("TP_WAVELET_CHROFRAME")))), wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))), labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))), labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))), @@ -179,6 +183,9 @@ Wavelet::Wavelet() : auto m = ProcEventMapper::getInstance(); EvWavenaclari = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCLARI"); EvWavushamet = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVUSHAMET"); + EvWavbalchrom = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVBALCHROM"); + EvWavchromfi = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCHROMFI"); + EvWavchromco = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCHROMCO"); EvWavmergeL = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMERGEL"); EvWavmergeC = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMERGEC"); EvWavsoftrad = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSOFTRAD"); @@ -523,6 +530,22 @@ Wavelet::Wavelet() : noiseBox->pack_start(*level2noise, Gtk::PACK_SHRINK, 0); noiseBox->pack_start(*level3noise, Gtk::PACK_SHRINK, 0); + balchrom->setAdjusterListener(this); +// noiseBox->pack_start(*balchrom, Gtk::PACK_SHRINK, 0); + chromfi->setAdjusterListener(this); +// noiseBox->pack_start(*chromfi, Gtk::PACK_SHRINK, 0); + chromco->setAdjusterListener(this); +// noiseBox->pack_start(*chromco, Gtk::PACK_SHRINK, 0); + + chroFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const chroBox = Gtk::manage(new ToolParamBlock()); + chroBox->pack_start(*balchrom); + chroBox->pack_start(*chromfi); + chroBox->pack_start(*chromco); + chroFrame->add(*chroBox); + noiseBox->pack_start(*chroFrame); + + //Clarity mergeL->setAdjusterListener(this); mergeC->setAdjusterListener(this); @@ -1383,6 +1406,9 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) softrad->setValue(pp->wavelet.softrad); softradend->setValue(pp->wavelet.softradend); + balchrom->setValue(pp->wavelet.balchrom); + chromfi->setValue(pp->wavelet.chromfi); + chromco->setValue(pp->wavelet.chromco); level0noise->setValue(pp->wavelet.level0noise); level1noise->setValue(pp->wavelet.level1noise); level2noise->setValue(pp->wavelet.level2noise); @@ -1528,6 +1554,10 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) softrad->setEditedState(pedited->wavelet.softrad ? Edited : UnEdited); softradend->setEditedState(pedited->wavelet.softradend ? Edited : UnEdited); + balchrom->setEditedState(pedited->wavelet.balchrom ? Edited : UnEdited); + chromfi->setEditedState(pedited->wavelet.chromfi ? Edited : UnEdited); + chromco->setEditedState(pedited->wavelet.chromco ? Edited : UnEdited); + median->set_inconsistent(!pedited->wavelet.median); medianlev->set_inconsistent(!pedited->wavelet.medianlev); linkedg->set_inconsistent(!pedited->wavelet.linkedg); @@ -1746,6 +1776,9 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.satlev = satlev->getValue (); pp->wavelet.strength = (int) strength->getValue(); pp->wavelet.balance = (int) balance->getValue(); + pp->wavelet.balchrom = balchrom->getValue(); + pp->wavelet.chromfi = chromfi->getValue(); + pp->wavelet.chromco = chromco->getValue(); pp->wavelet.greenlow = greenlow->getValue(); pp->wavelet.bluelow = bluelow->getValue(); @@ -1865,6 +1898,9 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.bluemed = bluemed->getEditedState(); pedited->wavelet.greenhigh = greenhigh->getEditedState(); pedited->wavelet.bluehigh = bluehigh->getEditedState(); + pedited->wavelet.balchrom = balchrom->getEditedState(); + pedited->wavelet.chromfi = chromfi->getEditedState(); + pedited->wavelet.chromco = chromco->getEditedState(); pedited->wavelet.mergeL = mergeL->getEditedState(); pedited->wavelet.mergeC = mergeC->getEditedState(); pedited->wavelet.softrad = softrad->getEditedState(); @@ -2096,6 +2132,9 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit level1noise->setDefault (defParams->wavelet.level1noise); level2noise->setDefault (defParams->wavelet.level2noise); level3noise->setDefault (defParams->wavelet.level3noise); + balchrom->setDefault(defParams->wavelet.balchrom); + chromfi->setDefault(defParams->wavelet.chromfi); + chromco->setDefault(defParams->wavelet.chromco); greenlow->setDefault(defParams->wavelet.greenlow); bluelow->setDefault(defParams->wavelet.bluelow); @@ -2119,6 +2158,9 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit mergeC->setDefaultEditedState(pedited->wavelet.mergeC ? Edited : UnEdited); softrad->setDefaultEditedState(pedited->wavelet.softrad ? Edited : UnEdited); softradend->setDefaultEditedState(pedited->wavelet.softradend ? Edited : UnEdited); + balchrom->setDefaultEditedState(pedited->wavelet.balchrom ? Edited : UnEdited); + chromfi->setDefaultEditedState(pedited->wavelet.chromfi ? Edited : UnEdited); + chromco->setDefaultEditedState(pedited->wavelet.chromco ? Edited : UnEdited); sigma->setDefault(defParams->wavelet.sigma); offset->setDefault(defParams->wavelet.offset); @@ -2912,6 +2954,12 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue()); } else if (a == bluehigh) { listener->panelChanged(EvWavbluehigh, bluehigh->getTextValue()); + } else if (a == balchrom) { + listener->panelChanged(EvWavbalchrom, balchrom->getTextValue()); + } else if (a == chromfi) { + listener->panelChanged(EvWavchromfi, chromfi->getTextValue()); + } else if (a == chromco) { + listener->panelChanged(EvWavchromco, chromco->getTextValue()); } else if (a == mergeL) { listener->panelChanged(EvWavmergeL, mergeL->getTextValue()); } else if (a == mergeC) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index b73339973..07d2432ac 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -70,6 +70,9 @@ public: private: rtengine::ProcEvent EvWavenaclari; rtengine::ProcEvent EvWavushamet; + rtengine::ProcEvent EvWavbalchrom; + rtengine::ProcEvent EvWavchromfi; + rtengine::ProcEvent EvWavchromco; rtengine::ProcEvent EvWavmergeL; rtengine::ProcEvent EvWavmergeC; rtengine::ProcEvent EvWavsoftrad; @@ -241,6 +244,9 @@ private: Adjuster* const edgedetectthr2; Adjuster* const edgesensi; Adjuster* const edgeampli; + Adjuster* const balchrom; + Adjuster* const chromfi; + Adjuster* const chromco; Adjuster* const mergeL; Adjuster* const mergeC; Adjuster* const softrad; @@ -285,6 +291,7 @@ private: Gtk::Frame* const contFrame; Gtk::Frame* const blurFrame; Gtk::Frame* const chromaFrame; + Gtk::Frame* const chroFrame; Gtk::Label* const wavLabels; Gtk::Label* const labmC; From 8886402e93461cf1ddf1d144298399b1f2eba7f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Thu, 2 Apr 2020 13:23:57 +0200 Subject: [PATCH 244/264] Fix Clang-10 warnings --- rtengine/iccstore.cc | 2 +- rtengine/ipwavelet.cc | 16 ++++++++-------- rtgui/editorpanel.cc | 2 +- rtgui/preferences.cc | 4 ++-- rtgui/profilestorecombobox.cc | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/rtengine/iccstore.cc b/rtengine/iccstore.cc index 9d7024bff..6b2be1713 100644 --- a/rtengine/iccstore.cc +++ b/rtengine/iccstore.cc @@ -635,7 +635,7 @@ public: MyMutex::MyLock lock(mutex); - for (const auto profile : fileProfiles) { + for (const auto& profile : fileProfiles) { if ( ( type == ICCStore::ProfileType::MONITOR diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 53f685826..fa82db28b 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1845,8 +1845,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * WavCoeffs_L0[i] = aft[i]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } // #ifdef _OPENMP @@ -2070,8 +2070,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * WavCoeffs_L[dir][co] = aft[co]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } } } @@ -2288,8 +2288,8 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float WavCoeffs_ab0[i] = aft[i]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } @@ -2371,8 +2371,8 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float WavCoeffs_ab[dir][co] = aft[co]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 6a0d41878..1a82c4a94 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -172,7 +172,7 @@ private: const std::vector profiles = rtengine::ICCStore::getInstance()->getProfiles (rtengine::ICCStore::ProfileType::MONITOR); - for (const auto profile : profiles) { + for (const auto& profile : profiles) { profileBox.append (profile); } diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 083444342..5268948cc 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -778,7 +778,7 @@ Gtk::Widget* Preferences::getColorManPanel () const std::vector profiles = rtengine::ICCStore::getInstance ()->getProfiles (rtengine::ICCStore::ProfileType::MONITOR); - for (const auto profile : profiles) { + for (const auto& profile : profiles) { if (profile.find("file:") != 0) { std::string fileis_RTv4 = profile.substr(0, 4); @@ -847,7 +847,7 @@ Gtk::Widget* Preferences::getColorManPanel () const std::vector prtprofiles = rtengine::ICCStore::getInstance ()->getProfiles (rtengine::ICCStore::ProfileType::PRINTER); - for (const auto prtprofile : prtprofiles) { + for (const auto& prtprofile : prtprofiles) { prtProfile->append (prtprofile); } diff --git a/rtgui/profilestorecombobox.cc b/rtgui/profilestorecombobox.cc index bb294189f..a6085e7a9 100644 --- a/rtgui/profilestorecombobox.cc +++ b/rtgui/profilestorecombobox.cc @@ -182,7 +182,7 @@ Gtk::TreeIter ProfileStoreComboBox::findRowFromEntry (const ProfileStoreEntry *p Gtk::TreeIter ProfileStoreComboBox::findRowFromFullPath_ (Gtk::TreeModel::Children childs, int parentFolderId, const Glib::ustring &name) const { - for (const auto iter : childs) { + for (const auto& iter : childs) { const Gtk::TreeModel::Row row = *iter; // Hombre: is there a smarter way of knowing if this row has childs? const ProfileStoreEntry *pse = row[methodColumns.profileStoreEntry]; @@ -309,7 +309,7 @@ Gtk::TreeIter ProfileStoreComboBox::getRowFromLabel (const Glib::ustring &name) const Gtk::TreeModel::Children childs = refTreeModel->children(); if (!name.empty()) { - for (const auto iter : childs) { + for (const auto& iter : childs) { const Gtk::TreeModel::Row currRow = *iter; const ProfileStoreEntry *pse = currRow[methodColumns.profileStoreEntry]; From ac0d54ef3e79c390211ba7a78bd6f7696959fe32 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 3 Apr 2020 07:37:16 +0200 Subject: [PATCH 245/264] Display pyramid mea[] --- rtengine/ipwavelet.cc | 609 ++++++++++++++++++++++++++++++------------ rtgui/wavelet.cc | 2 +- 2 files changed, 433 insertions(+), 178 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 848451090..2b741a89b 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -138,6 +138,9 @@ struct cont_params { float edgampl; int neigh; bool lipp; + float balchrom; + float chromfi; + float chromco; }; int wavNestedLevels = 1; @@ -196,6 +199,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.BAmethod != "none") { cp.bam = true; + if (params->wavelet.BAmethod == "sli") { cp.BAmet = 1; } else if (params->wavelet.BAmethod == "cur") { @@ -260,7 +264,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const DaubLen = 8; } else if (params->wavelet.daubcoeffmethod == "10_") { DaubLen = 12; - } else /* if (params->wavelet.daubcoeffmethod == "14_") */{ + } else { /* if (params->wavelet.daubcoeffmethod == "14_") */ DaubLen = 16; } @@ -394,6 +398,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.val = waparams.edgval; cp.til = waparams.edgthresh; cp.eff = waparams.edgeffect; + cp.balchrom = waparams.balchrom; + cp.chromfi = waparams.chromfi; + cp.chromco = waparams.chromco; cp.conres = waparams.rescon; cp.conresH = waparams.resconH; @@ -860,7 +867,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (cp.val > 0 || ref || contr) { //edge Evaluate2(*Ldecomp, mean, meanN, sigma, sigmaN, MaxP, MaxN); } - + //init for edge and denoise float vari[4]; @@ -877,7 +884,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const vari[3] = rtengine::max(0.0001f, vari[3]); float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL - WaveletDenoiseAllL (*Ldecomp, noisevarlum, madL, vari, edge, 1); + WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge, 1); } //Flat curve for Contrast=f(H) in levels @@ -906,6 +913,213 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } + + /* + float variC[7]; + float variCb[7]; + + float noisecfr = cp.chromfi; + float noiseccr = cp.chromco; + + if (cp.balchrom > 0.f) { + noisecfr = cp.chromfi * ((100.f + cp.balchrom) / 10.f); + noiseccr = cp.chromco + ((100.f + cp.balchrom) / 10.f); + } + + float noisecfb = cp.chromfi; + float noiseccb = cp.chromco; + + if (cp.balchrom < 0.f) { + noisecfb = cp.chromfi * ((100.f - cp.balchrom) / 10.f); + noiseccb = cp.chromco * ((100.f - cp.balchrom) / 10.f); + } + + + if (noisecfr < 0.f) { + noisecfr = 0.0001f; + } + + if (noiseccr < 0.f) { + noiseccr = 0.0001f; + } + + if (noisecfb < 0.f) { + noisecfb = 0.0001f; + } + + if (noiseccb < 0.f) { + noiseccb = 0.0001f; + } + + int edge = 2; + variC[0] = SQR(noisecfr); + variC[1] = SQR(noisecfr); + variC[2] = SQR(noisecfr); + + variC[3] = SQR(noisecfr); + variC[4] = SQR(noisecfr); + variC[5] = SQR(noiseccr); + variC[6] = SQR(noiseccr); + + variCb[0] = SQR(noisecfb); + variCb[1] = SQR(noisecfb); + variCb[2] = SQR(noisecfb); + + variCb[3] = SQR(noisecfb); + variCb[4] = SQR(noisecfb); + variCb[5] = SQR(noiseccb); + variCb[6] = SQR(noiseccb); + + float k1 = 0.f; + float k2 = 0.f; + float k3 = 0.f; + + if (cp.chromfi) { + k1 = 0.f; + k2 = 0.f; + k3 = 0.f; + } else if (cp.chromfi < 0.3f) { + k1 = 0.1f; + k2 = 0.0f; + k3 = 0.f; + } else if (cp.chromfi < 0.5f) { + k1 = 0.2f; + k2 = 0.1f; + k3 = 0.f; + } else if (cp.chromfi < 0.8f) { + k1 = 0.3f; + k2 = 0.25f; + k3 = 0.f; + } else if (cp.chromfi < 1.f) { + k1 = 0.4f; + k2 = 0.25f; + k3 = 0.1f; + } else if (cp.chromfi < 2.f) { + k1 = 0.5f; + k2 = 0.3f; + k3 = 0.15f; + } else if (cp.chromfi < 3.f) { + k1 = 0.6f; + k2 = 0.45f; + k3 = 0.3f; + } else if (cp.chromfi < 4.f) { + k1 = 0.7f; + k2 = 0.5f; + k3 = 0.4f; + } else if (cp.chromfi < 5.f) { + k1 = 0.8f; + k2 = 0.6f; + k3 = 0.5f; + } else if (cp.chromfi < 10.f) { + k1 = 0.85f; + k2 = 0.7f; + k3 = 0.6f; + } else if (cp.chromfi < 20.f) { + k1 = 0.9f; + k2 = 0.8f; + k3 = 0.7f; + } else if (cp.chromfi < 50.f) { + k1 = 1.f; + k2 = 1.f; + k3 = 0.9f; + + } else { + k1 = 1.f; + k2 = 1.f; + k3 = 1.f; + } + + float minic = 0.0001f; + variC[0] = max(minic, variC[0]); + variC[1] = max(minic, k1 * variC[1]); + variC[2] = max(minic, k2 * variC[2]); + variC[3] = max(minic, k3 * variC[3]); + + variCb[0] = max(minic, variCb[0]); + variCb[1] = max(minic, k1 * variCb[1]); + variCb[2] = max(minic, k2 * variCb[2]); + variCb[3] = max(minic, k3 * variCb[3]); + + float k4 = 0.f; + float k5 = 0.f; + float k6 = 0.f; + + if (cp.chromco == 0.01f) { + k4 = 0.f; + k5 = 0.0f; + } else if (cp.chromco < 0.2f) { + k4 = 0.1f; + k5 = 0.0f; + } else if (cp.chromco < 0.5f) { + k4 = 0.15f; + k5 = 0.0f; + } else if (cp.chromco < 1.f) { + k4 = 0.15f; + k5 = 0.1f; + } else if (cp.chromco < 3.f) { + k4 = 0.3f; + k5 = 0.15f; + } else if (cp.chromco < 4.f) { + k4 = 0.6f; + k5 = 0.4f; + } else if (cp.chromco < 6.f) { + k4 = 0.8f; + k5 = 0.6f; + } else { + k4 = 1.f; + k5 = 1.f; + } + + variC[4] = max(0.0001f, k4 * variC[4]); + variC[5] = max(0.0001f, k5 * variC[5]); + variCb[4] = max(0.0001f, k4 * variCb[4]); + variCb[5] = max(0.0001f, k5 * variCb[5]); + + if (cp.chromco < 4.f) { + k6 = 0.f; + } else if (cp.chromco < 5.f) { + k6 = 0.4f; + } else if (cp.chromco < 6.f) { + k6 = 0.7f; + } else { + k6 = 1.f; + } + + variC[6] = max(0.0001f, k6 * variC[6]); + variCb[6] = max(0.0001f, k6 * variCb[6]); + float nvch = 0.6f;//high value + float nvcl = 0.1f;//low value + + if (cp.chromco > 100.f) { + nvch = 0.8f; + nvcl = 0.4f; + } + + float seuil = 4000.f;//low + float seuil2 = 15000.f;//high + //ac and bc for transition + float ac = (nvch - nvcl) / (seuil - seuil2); + float bc = nvch - seuil * ac; + int GW = labco->W; + int GH = labco->H; + float* noisevarchrom = new float[GH * GW]; + //noisevarchrom in function chroma + int GW2 = (GW + 1) / 2; + float noisevarab_r = 100.f; //SQR(lp.noisecc / 10.0); + for (int ir = 0; ir < GH; ir++) + for (int jr = 0; jr < GW; jr++) { + float cN = sqrt(SQR(labco->a[ir][jr]) + SQR(labco->b[ir][jr])); + + if (cN < seuil) { + noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = nvch; + } else if (cN < seuil2) { + noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = ac * cN + bc; + } else { + noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = nvcl; + } + } + */ + //Flat curve for H=f(H) in residual image FlatCurve* hhCurve = new FlatCurve(params->wavelet.hhcurve); //curve H=f(H) bool hhutili = false; @@ -971,7 +1185,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - WaveletcontAllAB(labco, varhue, varchro, *adecomp,wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); + WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); @@ -983,6 +1197,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } + // delete[] noisevarchrom; + if (hhCurve) { delete hhCurve; } @@ -1248,7 +1464,7 @@ void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &averag int countP = 0, countN = 0; double averaP = 0.0, averaN = 0.0; // use double precision for large summations - constexpr float thres = 32.7f;//different fom zero to take into account only data large enough 32.7 = 0.1 in range 0..100 very low value + constexpr float thres = 32.7f;//different fom zero to take into account only data large enough 32.7 = 0.1 in range 0..100 very low value max = 0.f; min = RT_INFINITY_F; #ifdef _OPENMP @@ -1350,51 +1566,54 @@ void ImProcFunctions::Evaluate2(const wavelet_decomposition &WaveletCoeffs_L, void ImProcFunctions::calceffect(int level, float *mean, float *sigma, float *mea, float effect, float offs) { - float rap = 0.f; - float sig = 1.f; - if(effect < 1.f) { - sig = effect; - } + float rap = 0.f; + float sig = 1.f; - if(effect <= 1.f) { - rap = offs * mean[level] - sig * sigma[level]; - } - - if (rap > 0.f) { - mea[0] = rap; - } else { - mea[0] = mean[level] / 6.f; - } + if (effect < 1.f) { + sig = effect; + } - rap = 0.f; - if(effect <= 1.f) { - rap = offs * mean[level] - 0.5f * sig * sigma[level]; - } + if (effect <= 1.f) { + rap = offs * mean[level] - sig * sigma[level]; + } - if (rap > 0.f) { - mea[1] = rap; - } else { - mea[1] = mean[level] / 4.f; - } + if (rap > 0.f) { + mea[0] = rap; + } else { + mea[0] = mean[level] / 6.f; + } - rap = 0.f; - if(effect <= 1.f) { - rap = offs * mean[level] - 0.2f * sig * sigma[level]; - } - - if (rap > 0.f) { - mea[2] = rap; - } else { - mea[2] = mean[level] / 2.f; - } - - mea[3] = offs * mean[level]; // 50% data - mea[4] = offs * mean[level] + effect * sigma[level] / 2.f; - mea[5] = offs * mean[level] + effect * sigma[level]; //66% - mea[6] = offs * mean[level] + effect * 1.2f * sigma[level]; - mea[7] = offs * mean[level] + effect * 1.5f * sigma[level]; // - mea[8] = offs * mean[level] + effect * 2.f * sigma[level]; //95% - mea[9] = offs * mean[level] + effect * 2.5f * sigma[level]; //99% + rap = 0.f; + + if (effect <= 1.f) { + rap = offs * mean[level] - 0.5f * sig * sigma[level]; + } + + if (rap > 0.f) { + mea[1] = rap; + } else { + mea[1] = mean[level] / 4.f; + } + + rap = 0.f; + + if (effect <= 1.f) { + rap = offs * mean[level] - 0.2f * sig * sigma[level]; + } + + if (rap > 0.f) { + mea[2] = rap; + } else { + mea[2] = mean[level] / 2.f; + } + + mea[3] = offs * mean[level]; // 50% data + mea[4] = offs * mean[level] + effect * sigma[level] / 2.f; + mea[5] = offs * mean[level] + effect * sigma[level]; //66% + mea[6] = offs * mean[level] + effect * 1.2f * sigma[level]; + mea[7] = offs * mean[level] + effect * 1.5f * sigma[level]; // + mea[8] = offs * mean[level] + effect * 2.f * sigma[level]; //95% + mea[9] = offs * mean[level] + effect * 2.5f * sigma[level]; //99% } void ImProcFunctions::Eval2(float ** WavCoeffs_L, int level, @@ -1725,7 +1944,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif { - if(contrast != 0.f && cp.resena && max0 > 0.f) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step + if (contrast != 0.f && cp.resena && max0 > 0.f) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step { #ifdef _OPENMP @@ -1784,71 +2003,76 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } #ifdef _OPENMP - #pragma omp barrier + #pragma omp barrier #endif - if((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena && cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step + if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena && cp.oldsh) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step #ifdef _OPENMP - #pragma omp for nowait + #pragma omp for nowait #endif - for (int i = 0; i < W_L * H_L; i++) { - float LL = WavCoeffs_L0[i]; - float LL100 = LL / 327.68f; - float tran = 5.f;//transition - //shadow - float alp = 3.f; //increase contrast sahdow in lowlights between 1 and ?? + for (int i = 0; i < W_L * H_L; i++) { + float LL = WavCoeffs_L0[i]; + float LL100 = LL / 327.68f; + float tran = 5.f;//transition + //shadow + float alp = 3.f; //increase contrast sahdow in lowlights between 1 and ?? - if(cp.th > (100.f - tran)) { - tran = 100.f - cp.th; - } + if (cp.th > (100.f - tran)) { + tran = 100.f - cp.th; + } - if(LL100 < cp.th) { - float aalp = (1.f - alp) / cp.th; //no changes for LL100 = cp.th - float kk = aalp * LL100 + alp; - WavCoeffs_L0[i] *= (1.f + kk * cp.conres / 200.f); - } else if(LL100 < cp.th + tran) { - float ath = -cp.conres / tran; - float bth = cp.conres - ath * cp.th; - WavCoeffs_L0[i] *= (1.f + (LL100 * ath + bth) / 200.f); - } + if (LL100 < cp.th) { + float aalp = (1.f - alp) / cp.th; //no changes for LL100 = cp.th + float kk = aalp * LL100 + alp; + WavCoeffs_L0[i] *= (1.f + kk * cp.conres / 200.f); + } else if (LL100 < cp.th + tran) { + float ath = -cp.conres / tran; + float bth = cp.conres - ath * cp.th; + WavCoeffs_L0[i] *= (1.f + (LL100 * ath + bth) / 200.f); + } - //highlight - tran = 5.f; + //highlight + tran = 5.f; - if(cp.thH < (tran)) { - tran = cp.thH; - } + if (cp.thH < (tran)) { + tran = cp.thH; + } - if(LL100 > cp.thH) { - WavCoeffs_L0[i] *= (1.f + cp.conresH / 200.f); - } else if(LL100 > (cp.thH - tran)) { - float athH = cp.conresH / tran; - float bthH = cp.conresH - athH * cp.thH; - WavCoeffs_L0[i] *= (1.f + (LL100 * athH + bthH) / 200.f); - } + if (LL100 > cp.thH) { + WavCoeffs_L0[i] *= (1.f + cp.conresH / 200.f); + } else if (LL100 > (cp.thH - tran)) { + float athH = cp.conresH / tran; + float bthH = cp.conresH - athH * cp.thH; + WavCoeffs_L0[i] *= (1.f + (LL100 * athH + bthH) / 200.f); } } + } //Blur luma - if(cp.blurres != 0.f && cp.resena) { + if (cp.blurres != 0.f && cp.resena) { float rad = 0.7f * cp.blurres / skip; float * bef = new float[W_L * H_L]; float * aft = new float[W_L * H_L]; for (int i = 0; i < H_L * W_L; i++) { - bef[i] = WavCoeffs_L0[i]; + bef[i] = WavCoeffs_L0[i]; } + boxblur(bef, aft, rad, W_L, H_L, false); for (int i = 0; i < H_L * W_L; i++) { WavCoeffs_L0[i] = aft[i]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } + // + int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n32; + n0 = n1 = n2 = n3 = n4 = n5 = n6 = n7 = n8 = n9 = n10 = n32 = 0; + #ifdef _OPENMP #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif @@ -1992,6 +2216,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * // end } + bool wavcurvecomp = false;//not enable if 0.75 if (wavblcurve) { @@ -2003,7 +2228,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } #ifdef _OPENMP - #pragma omp for schedule(dynamic) collapse(2) + // #pragma omp for schedule(dynamic) collapse(2) + #pragma omp for reduction(+:n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n32) schedule(dynamic) collapse(2) #endif for (int dir = 1; dir < 4; dir++) { @@ -2017,12 +2243,13 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * ContAllL(koeLi, maxkoeLi, true, maxlvl, labco, varhue, varchrom, WavCoeffs_L, WavCoeffs_L0, lvl, dir, cp, Wlvl_L, Hlvl_L, skip, mean, sigma, MaxP, MaxN, wavCLVCcurve, waOpacityCurveW, ChCurve, Chutili); //blur level float klev = 1.f; - if(wavblcurve && wavcurvecomp && cp.blena) { + + if (wavblcurve && wavcurvecomp && cp.blena) { float mea[10]; float effect = cp.bluwav; float beta = 0.f; float offs = 1.f; - + calceffect(lvl, mean, sigma, mea, effect, offs); float * bef = new float[Wlvl_L * Hlvl_L]; @@ -2032,37 +2259,58 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * bef[co] = WavCoeffs_L[dir][co]; float WavCL = std::fabs(WavCoeffs_L[dir][co]); - if (WavCL < mea[0]) { - beta = 0.05f; - } else if (WavCL < mea[1]) { - beta = 0.2f; - } else if (WavCL < mea[2]) { - beta = 0.7f; - } else if (WavCL < mea[3]) { - beta = 1.f; //standard - } else if (WavCL < mea[4]) { - beta = 1.f; - } else if (WavCL < mea[5]) { - beta = 0.8f; //+sigma - } else if (WavCL < mea[6]) { - beta = 0.6f; - } else if (WavCL < mea[7]) { - beta = 0.4f; - } else if (WavCL < mea[8]) { - beta = 0.2f; // + 2 sigma - } else if (WavCL < mea[9]) { - beta = 0.1f; - } else { - beta = 0.0f; + if (WavCL < mea[0]) { + beta = 0.05f; + n0++; + + if (WavCL < 32.7) { + n32++; } - - + } else if (WavCL < mea[1]) { + beta = 0.2f; + n1++; + } else if (WavCL < mea[2]) { + beta = 0.7f; + n2++; + } else if (WavCL < mea[3]) { + beta = 1.f; //standard + n3++; + } else if (WavCL < mea[4]) { + beta = 1.f; + n4++; + } else if (WavCL < mea[5]) { + beta = 0.8f; //+sigma + n5++; + } else if (WavCL < mea[6]) { + beta = 0.6f; + n6++; + } else if (WavCL < mea[7]) { + beta = 0.4f; + n7++; + } else if (WavCL < mea[8]) { + beta = 0.2f; // + 2 sigma + n8++; + } else if (WavCL < mea[9]) { + beta = 0.1f; + n9++; + } else { + beta = 0.01f; + n10++; + } + + + } + + if (settings->verbose) { + printf("lvl=%i n0=%i n32=%i n1=%i n2=%i n3=%i n4=%i n5=%i n6=%i n7=%i n8=%i n9=%i n10=%i\n", lvl, n0, n0 - n32, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10); } klev = (wavblcurve[lvl * 55.5f]); float lvr = lvl; - if(lvr == 0) { + + if (lvr == 0) { lvr = 1; } + klev *= beta * lvr * 100.f / skip; boxblur(bef, aft, klev, Wlvl_L, Hlvl_L, false); @@ -2070,8 +2318,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * WavCoeffs_L[dir][co] = aft[co]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } } } @@ -2272,41 +2520,42 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float } } } - + //Blur chroma - if(cp.blurcres != 0.f && cp.resena) { - float rad = 0.7f * cp.blurcres / skip; - float * bef = new float[W_L * H_L]; - float * aft = new float[W_L * H_L]; + if (cp.blurcres != 0.f && cp.resena) { + float rad = 0.7f * cp.blurcres / skip; + float * bef = new float[W_L * H_L]; + float * aft = new float[W_L * H_L]; - for (int i = 0; i < H_L * W_L; i++) { - bef[i] = WavCoeffs_ab0[i]; - } - boxblur(bef, aft, rad, W_L, H_L, false); + for (int i = 0; i < H_L * W_L; i++) { + bef[i] = WavCoeffs_ab0[i]; + } - for (int i = 0; i < H_L * W_L; i++) { - WavCoeffs_ab0[i] = aft[i]; + boxblur(bef, aft, rad, W_L, H_L, false); + + for (int i = 0; i < H_L * W_L; i++) { + WavCoeffs_ab0[i] = aft[i]; + } + + delete[] bef; + delete[] aft; } - delete bef; - delete aft; - } + bool wavcurvecomp = false;//not enable if 0.75 - bool wavcurvecomp = false;//not enable if 0.75 - - if (wavblcurve) { - for (int i = 0; i < 500; i++) { - if (wavblcurve[i] != 0.) { - wavcurvecomp = true; + if (wavblcurve) { + for (int i = 0; i < 500; i++) { + if (wavblcurve[i] != 0.) { + wavcurvecomp = true; + } } } - } #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) #endif - + for (int dir = 1; dir < 4; dir++) { for (int lvl = 0; lvl < maxlvl; lvl++) { @@ -2316,63 +2565,66 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float float ** WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); ContAllAB(labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); - if(wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f) { + if (wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f) { float mea[10]; float effect = cp.bluwav; float beta = 0.f; float offs = 1.f; - + calceffect(lvl, meanab, sigmaab, mea, effect, offs); - + float * bef = new float[Wlvl_ab * Hlvl_ab]; float * aft = new float[Wlvl_ab * Hlvl_ab]; float klev; + for (int co = 0; co < Hlvl_ab * Wlvl_ab; co++) { bef[co] = WavCoeffs_ab[dir][co]; - float WavCab = std::fabs(WavCoeffs_ab[dir][co]); + float WavCab = std::fabs(WavCoeffs_ab[dir][co]); + + if (WavCab < mea[0]) { + beta = 0.05f; + } else if (WavCab < mea[1]) { + beta = 0.2f; + } else if (WavCab < mea[2]) { + beta = 0.7f; + } else if (WavCab < mea[3]) { + beta = 1.f; //standard + } else if (WavCab < mea[4]) { + beta = 1.f; + } else if (WavCab < mea[5]) { + beta = 0.8f; //+sigma + } else if (WavCab < mea[6]) { + beta = 0.6f; + } else if (WavCab < mea[7]) { + beta = 0.4f; + } else if (WavCab < mea[8]) { + beta = 0.2f; // + 2 sigma + } else if (WavCab < mea[9]) { + beta = 0.1f; + } else { + beta = 0.0f; + } + - if (WavCab < mea[0]) { - beta = 0.05f; - } else if (WavCab < mea[1]) { - beta = 0.2f; - } else if (WavCab < mea[2]) { - beta = 0.7f; - } else if (WavCab < mea[3]) { - beta = 1.f; //standard - } else if (WavCab < mea[4]) { - beta = 1.f; - } else if (WavCab < mea[5]) { - beta = 0.8f; //+sigma - } else if (WavCab < mea[6]) { - beta = 0.6f; - } else if (WavCab < mea[7]) { - beta = 0.4f; - } else if (WavCab < mea[8]) { - beta = 0.2f; // + 2 sigma - } else if (WavCab < mea[9]) { - beta = 0.1f; - } else { - beta = 0.0f; - } - - } - klev = (wavblcurve[lvl * 55.5f]); + + klev = (wavblcurve[lvl * 55.5f]); float lvr = lvl; - if(lvr == 0) { + + if (lvr == 0) { lvr = 1; } klev *= beta * cp.chrwav * lvr * 200.f / skip; - + boxblur(bef, aft, klev, Wlvl_ab, Hlvl_ab, false); for (int co = 0; co < Hlvl_ab * Wlvl_ab; co++) { WavCoeffs_ab[dir][co] = aft[co]; } - delete bef; - delete aft; + delete[] bef; + delete[] aft; } @@ -2725,11 +2977,13 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float mea[10]; float beta = 1.f; - if(cp.eff < 2.5f) { + + if (cp.eff < 2.5f) { float effect = cp.eff; float offs = 1.f; calceffect(level, mean, sigma, mea, effect, offs); + for (int co = 0; co < H_L * W_L; co++) { float WavCL = std::fabs(WavCoeffs_L[dir][co]); @@ -2756,14 +3010,14 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } else { beta = 0.0f; } - + } } if (cp.val > 0 && cp.edgeena) { - - + + float * koe = nullptr; float maxkoe = 0.f; @@ -2852,6 +3106,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float atten01234 = 0.80f; value *= (atten01234 * scaleskip[1]); //for zoom < 100% reduce strength...I choose level 1...but!! } + value *= beta; float edge = 1.f; float lim0 = 20.f; //arbitrary limit for low radius and level between 2 or 3 to 30 maxi @@ -2862,8 +3117,8 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz if (cp.reinforce != 2) { const float brepart = cp.reinforce == 1 - ? 3.f - : 0.5f; + ? 3.f + : 0.5f; const float arepart = -(brepart - 1.f) / (lim0 / 60.f); if (rad < lim0 / 60.f) { @@ -3186,7 +3441,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float red0 = 0.005f * (110.f - lowthr); float red1 = 0.008f * (110.f - lowthr); float red2 = 0.011f * (110.f - lowthr); - + for (int i = 0; i < W_L * H_L; i++) { float kLlev = 1.f; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 836cdfe1f..21507ce05 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -543,7 +543,7 @@ Wavelet::Wavelet() : chroBox->pack_start(*chromfi); chroBox->pack_start(*chromco); chroFrame->add(*chroBox); - noiseBox->pack_start(*chroFrame); +// noiseBox->pack_start(*chroFrame); //Clarity From d00ec5a1b24683f7f760e53850d99545c75a4686 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 4 Apr 2020 08:32:34 +0200 Subject: [PATCH 246/264] Change tooltip and history msg damper --- rtdata/languages/default | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 94f1e691c..b545b2b7d 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -801,7 +801,7 @@ HISTORY_MSG_WAVMERGEL;Merge L HISTORY_MSG_WAVRADIUS;Radius Shadows-Highlight HISTORY_MSG_WAVSCALE;Scale HISTORY_MSG_WAVSHOWMASK;Show wavelet mask -HISTORY_MSG_WAVSIGMA;Sigma +HISTORY_MSG_WAVSIGMA;Damper HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final HISTORY_MSG_WAVUSHAMET;Clarity method @@ -2291,7 +2291,7 @@ TP_WAVELET_SHA;Sharp mask TP_WAVELET_SHFRAME;Shadows/Highlights TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_SIGMA;Damper -TP_WAVELET_SIGMA_TOOLTIP;This slider controls how wide the range of contrast values are that receive the maximum effect from the tool.\n The higher it is, the more contrast values will be strongly modified and the higher the risk to generate artifacts. The lower it is, the more pinpoint will the effect be applied to a certain range of contrast values +TP_WAVELET_SIGMA_TOOLTIP;The effect of the contrast sliders is stronger in medium contrast details, and weaker in high and low contrast details.\n With this slider you can control how quickly the effect dampens towards the extreme contrasts.\n The higher the slider is set, the wider the range of contrasts which will get a strong change, and the higher the risk to generate artifacts.\n The lower it is, the more pinpoint will the effect be applied to a narrow range of contrast values. TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. TP_WAVELET_SKY;Sky targetting/protection From 7d8e0abd2f733415c35fd165aafd9daa219cca10 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 4 Apr 2020 15:37:22 +0200 Subject: [PATCH 247/264] Clean code and change default values --- rtengine/procparams.cc | 2 +- rtgui/wavelet.cc | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 270e28a6a..b398cc729 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2323,7 +2323,7 @@ WaveletParams::WaveletParams() : radius(40), skinprotect(0.0), chrwav(0.), - bluwav(50.0), + bluwav(1.0), hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 21507ce05..bc99d0d57 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -531,11 +531,8 @@ Wavelet::Wavelet() : noiseBox->pack_start(*level3noise, Gtk::PACK_SHRINK, 0); balchrom->setAdjusterListener(this); -// noiseBox->pack_start(*balchrom, Gtk::PACK_SHRINK, 0); chromfi->setAdjusterListener(this); -// noiseBox->pack_start(*chromfi, Gtk::PACK_SHRINK, 0); chromco->setAdjusterListener(this); -// noiseBox->pack_start(*chromco, Gtk::PACK_SHRINK, 0); chroFrame->set_label_align(0.025, 0.5); ToolParamBlock* const chroBox = Gtk::manage(new ToolParamBlock()); From d0e65ec93c3cf57afe0bfc2860a795fc13592fb4 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 5 Apr 2020 06:59:17 +0200 Subject: [PATCH 248/264] Change history_msg --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index b545b2b7d..515e35b43 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -814,7 +814,7 @@ HISTORY_MSG_BLSHAPE;Blur by level HISTORY_MSG_WAVBL;Blur levels HISTORY_MSG_BLURWAV;Blur luminance HISTORY_MSG_BLURCWAV;Blur chroma -HISTORY_MSG_EDGEFFECT;Edge Effect +HISTORY_MSG_EDGEFFECT;Edge Damper HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot From 2d52fbdcefdb886b60515962d26f013ef9adbe71 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 5 Apr 2020 10:28:45 +0200 Subject: [PATCH 249/264] Improve wavelet levels with denoise chroma --- rtdata/languages/default | 2 +- rtengine/ipwavelet.cc | 641 +++++++++++++++++++++------------------ rtgui/wavelet.cc | 16 +- 3 files changed, 352 insertions(+), 307 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 515e35b43..4a181324d 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2307,7 +2307,7 @@ TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels between 9 and 9 minus the value will b TP_WAVELET_THRESHOLD_TOOLTIP;Only levels beyond the chosen value will be affected by the highlight luminance range. Other levels will be fully treated. The chosen value here limits the highest possible value of the shadow levels. TP_WAVELET_THRESWAV;Balance Threshold TP_WAVELET_THRH;Highlights threshold -TP_WAVELET_TILESBIG;Big tiles +TP_WAVELET_TILESBIG;Tiles TP_WAVELET_TILESFULL;Full image TP_WAVELET_TILESIZE;Tiling method TP_WAVELET_TILESLIT;Little tiles diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index e58ad3733..79302c452 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -399,8 +399,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.til = waparams.edgthresh; cp.eff = waparams.edgeffect; cp.balchrom = waparams.balchrom; - cp.chromfi = waparams.chromfi; - cp.chromco = waparams.chromco; + cp.chromfi = 0.1f * waparams.chromfi; + cp.chromco = 0.1f * waparams.chromco; cp.conres = waparams.rescon; cp.conresH = waparams.resconH; @@ -522,11 +522,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.Tilesmethod == "big") { realtile = 22; } - +/* if (params->wavelet.Tilesmethod == "lit") { realtile = 12; } - +*/ int tilesize = 128 * realtile; int overlap = (int) tilesize * 0.125f; int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip; @@ -667,6 +667,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const varhue[i] = new float[tilewidth]; } + + #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) #endif @@ -825,21 +827,28 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } + if (cp.chromfi > 0.f || cp.chromco > 0.f) { + if (levwavL < 7) { + levwavL = 7; + } + } + if (levwavL < 4) { levwavL = 4; //to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! } if (levwavL > 0) { const std::unique_ptr Ldecomp(new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); + float madL[8][3]; if (!Ldecomp->memoryAllocationFailed) { - float madL[8][3]; + // float madL[8][3]; #ifdef _OPENMP #pragma omp parallel for schedule(dynamic) collapse(2) num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif - for (int lvl = 0; lvl < 4; lvl++) { + for (int lvl = 0; lvl < levwavL; lvl++) { for (int dir = 1; dir < 4; dir++) { int Wlvl_L = Ldecomp->level_W(lvl); int Hlvl_L = Ldecomp->level_H(lvl); @@ -908,301 +917,336 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const WaveletcontAllLfinal(*Ldecomp, cp, mean, sigma, MaxP, waOpacityCurveWL); //Evaluate2(*Ldecomp, cp, ind, mean, meanN, sigma, sigmaN, MaxP, MaxN, madL); + /* + Ldecomp->reconstruct(labco->data, cp.strength); + } + } + */ + + + float variC[7]; + float variCb[7]; + + float noisecfr = cp.chromfi; + float noiseccr = cp.chromco; + + if (cp.balchrom > 0.f) { + noisecfr = cp.chromfi * ((100.f + cp.balchrom) / 10.f); + noiseccr = cp.chromco + ((100.f + cp.balchrom) / 10.f); + } + + float noisecfb = cp.chromfi; + float noiseccb = cp.chromco; + + if (cp.balchrom < 0.f) { + noisecfb = cp.chromfi * ((100.f - cp.balchrom) / 10.f); + noiseccb = cp.chromco * ((100.f - cp.balchrom) / 10.f); + } + + + if (noisecfr < 0.f) { + noisecfr = 0.0001f; + } + + if (noiseccr < 0.f) { + noiseccr = 0.0001f; + } + + if (noisecfb < 0.f) { + noisecfb = 0.0001f; + } + + if (noiseccb < 0.f) { + noiseccb = 0.0001f; + } + + int edge = 2; + variC[0] = SQR(noisecfr); + variC[1] = SQR(noisecfr); + variC[2] = SQR(noisecfr); + + variC[3] = SQR(noisecfr); + variC[4] = SQR(noisecfr); + variC[5] = SQR(noiseccr); + variC[6] = SQR(noiseccr); + + variCb[0] = SQR(noisecfb); + variCb[1] = SQR(noisecfb); + variCb[2] = SQR(noisecfb); + + variCb[3] = SQR(noisecfb); + variCb[4] = SQR(noisecfb); + variCb[5] = SQR(noiseccb); + variCb[6] = SQR(noiseccb); + + float k1 = 0.f; + float k2 = 0.f; + float k3 = 0.f; + + if (cp.chromfi < 0.2f) { + k1 = 0.f; + k2 = 0.f; + k3 = 0.f; + } else if (cp.chromfi < 0.3f) { + k1 = 0.1f; + k2 = 0.0f; + k3 = 0.f; + } else if (cp.chromfi < 0.5f) { + k1 = 0.2f; + k2 = 0.1f; + k3 = 0.f; + } else if (cp.chromfi < 0.8f) { + k1 = 0.3f; + k2 = 0.25f; + k3 = 0.f; + } else if (cp.chromfi < 1.f) { + k1 = 0.4f; + k2 = 0.25f; + k3 = 0.1f; + } else if (cp.chromfi < 2.f) { + k1 = 0.5f; + k2 = 0.3f; + k3 = 0.15f; + } else if (cp.chromfi < 3.f) { + k1 = 0.6f; + k2 = 0.45f; + k3 = 0.3f; + } else if (cp.chromfi < 4.f) { + k1 = 0.7f; + k2 = 0.5f; + k3 = 0.4f; + } else if (cp.chromfi < 5.f) { + k1 = 0.8f; + k2 = 0.6f; + k3 = 0.5f; + } else if (cp.chromfi < 6.f) { + k1 = 0.85f; + k2 = 0.7f; + k3 = 0.6f; + } else if (cp.chromfi < 8.f) { + k1 = 0.9f; + k2 = 0.8f; + k3 = 0.7f; + } else if (cp.chromfi < 10.f) { + k1 = 1.f; + k2 = 1.f; + k3 = 0.9f; + + } else { + k1 = 1.f; + k2 = 1.f; + k3 = 1.f; + } + + float minic = 0.0001f; + variC[0] = max(minic, variC[0]); + variC[1] = max(minic, k1 * variC[1]); + variC[2] = max(minic, k2 * variC[2]); + variC[3] = max(minic, k3 * variC[3]); + + variCb[0] = max(minic, variCb[0]); + variCb[1] = max(minic, k1 * variCb[1]); + variCb[2] = max(minic, k2 * variCb[2]); + variCb[3] = max(minic, k3 * variCb[3]); + + float k4 = 0.f; + float k5 = 0.f; + float k6 = 0.f; + + if (cp.chromco == 0.01f) { + k4 = 0.f; + k5 = 0.0f; + } else if (cp.chromco < 0.2f) { + k4 = 0.1f; + k5 = 0.0f; + } else if (cp.chromco < 0.5f) { + k4 = 0.15f; + k5 = 0.0f; + } else if (cp.chromco < 1.f) { + k4 = 0.15f; + k5 = 0.1f; + } else if (cp.chromco < 3.f) { + k4 = 0.3f; + k5 = 0.15f; + } else if (cp.chromco < 4.f) { + k4 = 0.6f; + k5 = 0.4f; + } else if (cp.chromco < 6.f) { + k4 = 0.8f; + k5 = 0.6f; + } else { + k4 = 1.f; + k5 = 1.f; + } + + variC[4] = max(0.0001f, k4 * variC[4]); + variC[5] = max(0.0001f, k5 * variC[5]); + variCb[4] = max(0.0001f, k4 * variCb[4]); + variCb[5] = max(0.0001f, k5 * variCb[5]); + + if (cp.chromco < 4.f) { + k6 = 0.f; + } else if (cp.chromco < 5.f) { + k6 = 0.4f; + } else if (cp.chromco < 6.f) { + k6 = 0.7f; + } else { + k6 = 1.f; + } + + variC[6] = max(0.0001f, k6 * variC[6]); + variCb[6] = max(0.0001f, k6 * variCb[6]); +/* + for (int y = 0; y < 7; y++) { + printf("y=%i madL=%f varia=%f variab=%f\n", y, madL[y][1], variC[y], variCb[y]); + } +*/ + float nvch = 0.6f;//high value + float nvcl = 0.1f;//low value + + if (cp.chromco > 30.f) { + nvch = 0.8f; + nvcl = 0.4f; + } + + float seuil = 4000.f;//low + float seuil2 = 15000.f;//high + //ac and bc for transition + float ac = (nvch - nvcl) / (seuil - seuil2); + float bc = nvch - seuil * ac; + int GW = labco->W; + int GH = labco->H; + float* noisevarchrom = new float[GH * GW]; + //noisevarchrom in function chroma + int GW2 = (GW + 1) / 2; + float noisevarab_r = 100.f; + + for (int ir = 0; ir < GH; ir++) + for (int jr = 0; jr < GW; jr++) { + float cN = sqrt(SQR(labco->a[ir][jr]) + SQR(labco->b[ir][jr])); + + if (cN < seuil) { + noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = nvch; + } else if (cN < seuil2) { + noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = ac * cN + bc; + } else { + noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = nvcl; + } + } + + + //Flat curve for H=f(H) in residual image + FlatCurve* hhCurve = new FlatCurve(params->wavelet.hhcurve); //curve H=f(H) + bool hhutili = false; + + if (!hhCurve || hhCurve->isIdentity()) { + if (hhCurve) { + delete hhCurve; + hhCurve = nullptr; + } + } else { + hhutili = true; + } + + + if (!hhutili) { //always a or b + int levwava = levwav; + + if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + while (levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f)) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { + levwava--; + } + } + + if (cp.chromfi > 0.f || cp.chromco > 0.f) { + if (levwava < 7) { + levwava = 7; + } + } + + if (levwava > 0) { + const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); + + if (!adecomp->memoryAllocationFailed) { + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); + adecomp->reconstruct(labco->data + datalen, cp.strength); + } + } + + int levwavb = levwav; + + if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + while (levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f)) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { + levwavb--; + } + } + + if (cp.chromfi > 0.f || cp.chromco > 0.f) { + if (levwavb < 7) { + levwavb = 7; + } + } + + if (levwavb > 0) { + const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); + + if (!bdecomp->memoryAllocationFailed) { + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); + bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); + } + } + } else {// a and b + int levwavab = levwav; + + if (cp.chrores == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels + while (levwavab > 0 && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavab - 1] == 0.f)) || (cp.CHmet != 2 && (levwavab == 10 || (!cp.curv || cp.mulC[levwavab - 1] == 0.f))))) && (!cp.opaRG || levwavab == 10 || (cp.opaRG && cp.mulopaRG[levwavab - 1] == 0.f)) && ((levwavab == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavab - 1] == 0.f)))) { + levwavab--; + } + } + if (cp.chromfi > 0.f || cp.chromco > 0.f) { + if (levwavab < 7) { + levwavab = 7; + } + } + + if (levwavab > 0) { + const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); + const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); + + if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); + WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); + + adecomp->reconstruct(labco->data + datalen, cp.strength); + bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); + + } + } + } + + delete[] noisevarchrom; + + if (hhCurve) { + delete hhCurve; + } Ldecomp->reconstruct(labco->data, cp.strength); } } - - /* - float variC[7]; - float variCb[7]; - - float noisecfr = cp.chromfi; - float noiseccr = cp.chromco; - - if (cp.balchrom > 0.f) { - noisecfr = cp.chromfi * ((100.f + cp.balchrom) / 10.f); - noiseccr = cp.chromco + ((100.f + cp.balchrom) / 10.f); - } - - float noisecfb = cp.chromfi; - float noiseccb = cp.chromco; - - if (cp.balchrom < 0.f) { - noisecfb = cp.chromfi * ((100.f - cp.balchrom) / 10.f); - noiseccb = cp.chromco * ((100.f - cp.balchrom) / 10.f); - } - - - if (noisecfr < 0.f) { - noisecfr = 0.0001f; - } - - if (noiseccr < 0.f) { - noiseccr = 0.0001f; - } - - if (noisecfb < 0.f) { - noisecfb = 0.0001f; - } - - if (noiseccb < 0.f) { - noiseccb = 0.0001f; - } - - int edge = 2; - variC[0] = SQR(noisecfr); - variC[1] = SQR(noisecfr); - variC[2] = SQR(noisecfr); - - variC[3] = SQR(noisecfr); - variC[4] = SQR(noisecfr); - variC[5] = SQR(noiseccr); - variC[6] = SQR(noiseccr); - - variCb[0] = SQR(noisecfb); - variCb[1] = SQR(noisecfb); - variCb[2] = SQR(noisecfb); - - variCb[3] = SQR(noisecfb); - variCb[4] = SQR(noisecfb); - variCb[5] = SQR(noiseccb); - variCb[6] = SQR(noiseccb); - - float k1 = 0.f; - float k2 = 0.f; - float k3 = 0.f; - - if (cp.chromfi) { - k1 = 0.f; - k2 = 0.f; - k3 = 0.f; - } else if (cp.chromfi < 0.3f) { - k1 = 0.1f; - k2 = 0.0f; - k3 = 0.f; - } else if (cp.chromfi < 0.5f) { - k1 = 0.2f; - k2 = 0.1f; - k3 = 0.f; - } else if (cp.chromfi < 0.8f) { - k1 = 0.3f; - k2 = 0.25f; - k3 = 0.f; - } else if (cp.chromfi < 1.f) { - k1 = 0.4f; - k2 = 0.25f; - k3 = 0.1f; - } else if (cp.chromfi < 2.f) { - k1 = 0.5f; - k2 = 0.3f; - k3 = 0.15f; - } else if (cp.chromfi < 3.f) { - k1 = 0.6f; - k2 = 0.45f; - k3 = 0.3f; - } else if (cp.chromfi < 4.f) { - k1 = 0.7f; - k2 = 0.5f; - k3 = 0.4f; - } else if (cp.chromfi < 5.f) { - k1 = 0.8f; - k2 = 0.6f; - k3 = 0.5f; - } else if (cp.chromfi < 10.f) { - k1 = 0.85f; - k2 = 0.7f; - k3 = 0.6f; - } else if (cp.chromfi < 20.f) { - k1 = 0.9f; - k2 = 0.8f; - k3 = 0.7f; - } else if (cp.chromfi < 50.f) { - k1 = 1.f; - k2 = 1.f; - k3 = 0.9f; - - } else { - k1 = 1.f; - k2 = 1.f; - k3 = 1.f; - } - - float minic = 0.0001f; - variC[0] = max(minic, variC[0]); - variC[1] = max(minic, k1 * variC[1]); - variC[2] = max(minic, k2 * variC[2]); - variC[3] = max(minic, k3 * variC[3]); - - variCb[0] = max(minic, variCb[0]); - variCb[1] = max(minic, k1 * variCb[1]); - variCb[2] = max(minic, k2 * variCb[2]); - variCb[3] = max(minic, k3 * variCb[3]); - - float k4 = 0.f; - float k5 = 0.f; - float k6 = 0.f; - - if (cp.chromco == 0.01f) { - k4 = 0.f; - k5 = 0.0f; - } else if (cp.chromco < 0.2f) { - k4 = 0.1f; - k5 = 0.0f; - } else if (cp.chromco < 0.5f) { - k4 = 0.15f; - k5 = 0.0f; - } else if (cp.chromco < 1.f) { - k4 = 0.15f; - k5 = 0.1f; - } else if (cp.chromco < 3.f) { - k4 = 0.3f; - k5 = 0.15f; - } else if (cp.chromco < 4.f) { - k4 = 0.6f; - k5 = 0.4f; - } else if (cp.chromco < 6.f) { - k4 = 0.8f; - k5 = 0.6f; - } else { - k4 = 1.f; - k5 = 1.f; - } - - variC[4] = max(0.0001f, k4 * variC[4]); - variC[5] = max(0.0001f, k5 * variC[5]); - variCb[4] = max(0.0001f, k4 * variCb[4]); - variCb[5] = max(0.0001f, k5 * variCb[5]); - - if (cp.chromco < 4.f) { - k6 = 0.f; - } else if (cp.chromco < 5.f) { - k6 = 0.4f; - } else if (cp.chromco < 6.f) { - k6 = 0.7f; - } else { - k6 = 1.f; - } - - variC[6] = max(0.0001f, k6 * variC[6]); - variCb[6] = max(0.0001f, k6 * variCb[6]); - float nvch = 0.6f;//high value - float nvcl = 0.1f;//low value - - if (cp.chromco > 100.f) { - nvch = 0.8f; - nvcl = 0.4f; - } - - float seuil = 4000.f;//low - float seuil2 = 15000.f;//high - //ac and bc for transition - float ac = (nvch - nvcl) / (seuil - seuil2); - float bc = nvch - seuil * ac; - int GW = labco->W; - int GH = labco->H; - float* noisevarchrom = new float[GH * GW]; - //noisevarchrom in function chroma - int GW2 = (GW + 1) / 2; - float noisevarab_r = 100.f; //SQR(lp.noisecc / 10.0); - for (int ir = 0; ir < GH; ir++) - for (int jr = 0; jr < GW; jr++) { - float cN = sqrt(SQR(labco->a[ir][jr]) + SQR(labco->b[ir][jr])); - - if (cN < seuil) { - noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = nvch; - } else if (cN < seuil2) { - noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = ac * cN + bc; - } else { - noisevarchrom[(ir >> 1)*GW2 + (jr >> 1)] = nvcl; - } - } - */ - - //Flat curve for H=f(H) in residual image - FlatCurve* hhCurve = new FlatCurve(params->wavelet.hhcurve); //curve H=f(H) - bool hhutili = false; - - if (!hhCurve || hhCurve->isIdentity()) { - if (hhCurve) { - delete hhCurve; - hhCurve = nullptr; - } - } else { - hhutili = true; - } - - - if (!hhutili) { //always a or b - int levwava = levwav; - - if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels - while (levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f)) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { - levwava--; - } - } - - if (levwava > 0) { - const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); - - if (!adecomp->memoryAllocationFailed) { - Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); - adecomp->reconstruct(labco->data + datalen, cp.strength); - } - } - - int levwavb = levwav; - - if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels - while (levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f)) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { - levwavb--; - } - } - - if (levwavb > 0) { - const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); - - if (!bdecomp->memoryAllocationFailed) { - Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); - bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); - } - } - } else {// a and b - int levwavab = levwav; - - if (cp.chrores == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels - while (levwavab > 0 && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavab - 1] == 0.f)) || (cp.CHmet != 2 && (levwavab == 10 || (!cp.curv || cp.mulC[levwavab - 1] == 0.f))))) && (!cp.opaRG || levwavab == 10 || (cp.opaRG && cp.mulopaRG[levwavab - 1] == 0.f)) && ((levwavab == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavab - 1] == 0.f)))) { - levwavab--; - } - } - - if (levwavab > 0) { - const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); - const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); - - if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { - Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); - Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); - WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); - - adecomp->reconstruct(labco->data + datalen, cp.strength); - bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); - - } - } - } - - // delete[] noisevarchrom; - - if (hhCurve) { - delete hhCurve; - } - if (numtiles > 1 || (numtiles == 1 /*&& cp.avoi*/)) { //in all case since I add contrast curve //calculate mask for feathering output tile overlaps float Vmask[height + overlap] ALIGNED16; @@ -2304,6 +2348,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * if (settings->verbose) { printf("lvl=%i n0=%i n32=%i n1=%i n2=%i n3=%i n4=%i n5=%i n6=%i n7=%i n8=%i n9=%i n10=%i\n", lvl, n0, n0 - n32, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10); } + klev = (wavblcurve[lvl * 55.5f]); float lvr = lvl; @@ -2537,8 +2582,8 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float WavCoeffs_ab0[i] = aft[i]; } - delete[] bef; - delete[] aft; + delete[] bef; + delete[] aft; } diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index bc99d0d57..23e526474 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -131,8 +131,8 @@ Wavelet::Wavelet() : edgesensi(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60))), edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), balchrom(Gtk::manage(new Adjuster(M("TP_WAVELET_BALCHROM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-red-small.png"))))), - chromfi(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMFI"), 0, 100, 1, 0))), - chromco(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMCO"), 0, 100, 1, 0))), + chromfi(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMFI"), 0.0, 150., 0.01, 0.))), + chromco(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMCO"), 0, 100., 0.01, 0.))), mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 40))), mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), @@ -246,7 +246,7 @@ Wavelet::Wavelet() : Tilesmethod->append(M("TP_WAVELET_TILESFULL")); Tilesmethod->append(M("TP_WAVELET_TILESBIG")); - Tilesmethod->append(M("TP_WAVELET_TILESLIT")); +// Tilesmethod->append(M("TP_WAVELET_TILESLIT")); Tilesmethodconn = Tilesmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::TilesmethodChanged)); Tilesmethod->set_tooltip_text(M("TP_WAVELET_TILES_TOOLTIP")); Gtk::HBox* const tilesizeHBox = Gtk::manage(new Gtk::HBox()); @@ -540,7 +540,7 @@ Wavelet::Wavelet() : chroBox->pack_start(*chromfi); chroBox->pack_start(*chromco); chroFrame->add(*chroBox); -// noiseBox->pack_start(*chroFrame); + noiseBox->pack_start(*chroFrame); //Clarity @@ -1257,8 +1257,8 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) Tilesmethod->set_active(0); } else if (pp->wavelet.Tilesmethod == "big") { Tilesmethod->set_active(1); - } else if (pp->wavelet.Tilesmethod == "lit") { - Tilesmethod->set_active(2); +// } else if (pp->wavelet.Tilesmethod == "lit") { +// Tilesmethod->set_active(2); } //daubcoeffmethod->set_active (4); @@ -2015,8 +2015,8 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.Tilesmethod = "full"; } else if (Tilesmethod->get_active_row_number() == 1) { pp->wavelet.Tilesmethod = "big"; - } else if (Tilesmethod->get_active_row_number() == 2) { - pp->wavelet.Tilesmethod = "lit"; +// } else if (Tilesmethod->get_active_row_number() == 2) { +// pp->wavelet.Tilesmethod = "lit"; } if (daubcoeffmethod->get_active_row_number() == 0) { From 05250a24973fcc607c491dd7b334a9882effce66 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 5 Apr 2020 11:04:01 +0200 Subject: [PATCH 250/264] Change labels chroma --- rtdata/languages/default | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 4a181324d..ed9b06b04 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2143,7 +2143,7 @@ TP_WAVELET_BACKGROUND;Background TP_WAVELET_BACUR;Curve TP_WAVELET_BALANCE;Contrast balance d/v-h TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. -TP_WAVELET_BALCHRO;Chroma balance +TP_WAVELET_BALCHRO;Chrominance balance TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. TP_WAVELET_BALCHROM;Chroma balance TP_WAVELET_BANONE;None @@ -2163,8 +2163,8 @@ TP_WAVELET_CHR;Chroma-contrast link strength TP_WAVELET_CHRO;Saturated/pastel threshold TP_WAVELET_CHROFRAME;Denoise Chroma TP_WAVELET_CHROMAFRAME;Chroma -TP_WAVELET_CHROMCO;Chroma Coarse -TP_WAVELET_CHROMFI;Chroma Fine +TP_WAVELET_CHROMCO;Chrominance Coarse +TP_WAVELET_CHROMFI;Chrominance Fine TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" TP_WAVELET_CHRWAV;Blur chroma From ca8399bc9008edd5fe9f970efe6ba64407179a6a Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 5 Apr 2020 11:13:18 +0200 Subject: [PATCH 251/264] change labels --- rtdata/languages/default | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index ed9b06b04..83262a3fc 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2145,7 +2145,7 @@ TP_WAVELET_BALANCE;Contrast balance d/v-h TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. TP_WAVELET_BALCHRO;Chrominance balance TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. -TP_WAVELET_BALCHROM;Chroma balance +TP_WAVELET_BALCHROM;Chrominance balance TP_WAVELET_BANONE;None TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method @@ -2161,7 +2161,7 @@ TP_WAVELET_CH3;Link contrast levels TP_WAVELET_CHCU;Curve TP_WAVELET_CHR;Chroma-contrast link strength TP_WAVELET_CHRO;Saturated/pastel threshold -TP_WAVELET_CHROFRAME;Denoise Chroma +TP_WAVELET_CHROFRAME;Denoise Chrominance TP_WAVELET_CHROMAFRAME;Chroma TP_WAVELET_CHROMCO;Chrominance Coarse TP_WAVELET_CHROMFI;Chrominance Fine From 15db8cdb57161d57af8307bf85aeda02ea69ddde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Sun, 5 Apr 2020 11:26:47 +0200 Subject: [PATCH 252/264] Guard accesses to `Crop::crop_ratios` (#5701) --- rtgui/crop.cc | 125 +++++++++++++++++++++++++++++++++++--------------- rtgui/crop.h | 11 ++--- 2 files changed, 92 insertions(+), 44 deletions(-) diff --git a/rtgui/crop.cc b/rtgui/crop.cc index d9d496523..f092f07a5 100644 --- a/rtgui/crop.cc +++ b/rtgui/crop.cc @@ -16,6 +16,8 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include + #include "crop.h" #include "options.h" @@ -46,39 +48,82 @@ inline void get_custom_ratio(int w, int h, double &rw, double &rh) } // namespace +class Crop::CropRatios final +{ +public: + CropRatios() : + ratios{ + {M("GENERAL_ASIMAGE"), 0.0}, + {M("GENERAL_CURRENT"), -1.0}, + {"3:2", 3.0 / 2.0}, // L1.5, P0.666... + {"4:3", 4.0 / 3.0}, // L1.333..., P0.75 + {"16:9", 16.0 / 9.0}, // L1.777..., P0.5625 + {"16:10", 16.0 / 10.0}, // L1.6, P0.625 + {"1:1", 1.0 / 1.0}, // L1, P1 + {"2:1", 2.0 / 1.0}, // L2, P0.5 + {"3:1", 3.0 / 1.0}, // L3, P0.333... + {"4:1", 4.0 / 1.0}, // L4, P0.25 + {"5:1", 5.0 / 1.0}, // L5, P0.2 + {"6:1", 6.0 / 1.0}, // L6, P0.1666... + {"7:1", 7.0 / 1.0}, // L7, P0.142... + {"4:5", 4.0 / 5.0}, // L1.25, P0.8 + {"5:7", 5.0 / 7.0}, // L1.4, P0.714... + {"6:7", 6.0 / 7.0}, // L1.166..., P0.857... + {"6:17", 6.0 / 17.0}, // L2.833..., P0.352... + {"24:65 - XPAN", 24.0 / 65.0}, // L2.708..., P0.369... + {"1.414 - DIN EN ISO 216", 1.414}, // L1.414, P0.707... + {"3.5:5", 3.5 / 5.0}, // L1.428..., P0.7 + {"8.5:11 - US Letter", 8.5 / 11.0}, // L1.294..., P0.772... + {"9.5:12", 9.5 / 12.0}, // L1.263..., P0.791... + {"10:12", 10.0 / 12.0}, // L1.2, P0.833... + {"11:14", 11.0 / 14.0}, // L1.272..., P0.785... + {"11:17 - Tabloid", 11.0 / 17.0}, // L1.545..., P0.647... + {"13:19", 13.0 / 19.0}, // L1.461..., P0.684... + {"17:22", 17.0 / 22.0}, // L1.294..., P0.772... + {"45:35 - ePassport", 45.0 / 35.0}, // L1.285,... P0.777... + {"64:27", 64.0 / 27.0}, // L2.370..., P0.421... + } + { + } + + std::vector getLabels() const + { + std::vector res; + + res.reserve(ratios.size()); + + for (const auto& ratio : ratios) { + res.push_back(ratio.label); + } + + return res; + } + + double getValue(std::size_t index) const + { + return + index < ratios.size() + ? ratios[index].value + : ratios[0].value; + } + + void updateCurrentRatio(double value) + { + ratios[1].value = value; + } + +private: + struct CropRatio { + Glib::ustring label; + double value; + }; + + std::vector ratios; +}; + Crop::Crop(): FoldableToolPanel(this, "crop", M("TP_CROP_LABEL"), false, true), - crop_ratios{ - {M("GENERAL_ASIMAGE"), 0.0}, - {M("GENERAL_CURRENT"), -1.0}, - {"3:2", 3.0 / 2.0}, // L1.5, P0.666... - {"4:3", 4.0 / 3.0}, // L1.333..., P0.75 - {"16:9", 16.0 / 9.0}, // L1.777..., P0.5625 - {"16:10", 16.0 / 10.0}, // L1.6, P0.625 - {"1:1", 1.0 / 1.0}, // L1, P1 - {"2:1", 2.0 / 1.0}, // L2, P0.5 - {"3:1", 3.0 / 1.0}, // L3, P0.333... - {"4:1", 4.0 / 1.0}, // L4, P0.25 - {"5:1", 5.0 / 1.0}, // L5, P0.2 - {"6:1", 6.0 / 1.0}, // L6, P0.1666... - {"7:1", 7.0 / 1.0}, // L7, P0.142... - {"4:5", 4.0 / 5.0}, // L1.25, P0.8 - {"5:7", 5.0 / 7.0}, // L1.4, P0.714... - {"6:7", 6.0 / 7.0}, // L1.166..., P0.857... - {"6:17", 6.0 / 17.0}, // L2.833..., P0.352... - {"24:65 - XPAN", 24.0 / 65.0}, // L2.708..., P0.369... - {"1.414 - DIN EN ISO 216", 1.414}, // L1.414, P0.707... - {"3.5:5", 3.5 / 5.0}, // L1.428..., P0.7 - {"8.5:11 - US Letter", 8.5 / 11.0}, // L1.294..., P0.772... - {"9.5:12", 9.5 / 12.0}, // L1.263..., P0.791... - {"10:12", 10.0 / 12.0}, // L1.2, P0.833... - {"11:14", 11.0 / 14.0}, // L1.272..., P0.785... - {"11:17 - Tabloid", 11.0 / 17.0}, // L1.545..., P0.647... - {"13:19", 13.0 / 19.0}, // L1.461..., P0.684... - {"17:22", 17.0 / 22.0}, // L1.294..., P0.772... - {"45:35 - ePassport", 45.0 / 35.0}, // L1.285,... P0.777... - {"64:27", 64.0 / 27.0}, // L2.370..., P0.421... - }, + crop_ratios(new CropRatios), opt(0), wDirty(true), hDirty(true), @@ -229,8 +274,8 @@ Crop::Crop(): // ppigrid END // Populate the combobox - for (const auto& crop_ratio : crop_ratios) { - ratio->append (crop_ratio.label); + for (const auto& label : crop_ratios->getLabels()) { + ratio->append (label); } ratio->set_active (0); @@ -354,7 +399,10 @@ void Crop::read (const ProcParams* pp, const ParamsEdited* pedited) setDimensions (pp->crop.x + pp->crop.w, pp->crop.y + pp->crop.h); } - const bool flip_orientation = pp->crop.fixratio && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0; + const bool flip_orientation = + pp->crop.fixratio + && crop_ratios->getValue(ratio->get_active_row_number()) > 0 + && crop_ratios->getValue(ratio->get_active_row_number()) < 1.0; if (pp->crop.orientation == "Landscape") { orientation->set_active (flip_orientation ? 1 : 0); @@ -469,7 +517,10 @@ void Crop::write (ProcParams* pp, ParamsEdited* pedited) } // for historical reasons we store orientation different if ratio is written as 2:3 instead of 3:2, but in GUI 'landscape' is always long side horizontal regardless of the ratio is written short or long side first. - const bool flip_orientation = fixr->get_active() && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0; + const bool flip_orientation = + fixr->get_active() + && crop_ratios->getValue(ratio->get_active_row_number()) > 0 + && crop_ratios->getValue(ratio->get_active_row_number()) < 1.0; if (orientation->get_active_row_number() == 0) { pp->crop.orientation = flip_orientation ? "Portrait" : "Landscape"; @@ -1501,7 +1552,7 @@ double Crop::getRatio () const return r; } - r = crop_ratios[ratio->get_active_row_number()].value; + r = crop_ratios->getValue(ratio->get_active_row_number()); if (!r) { r = maxh <= maxw ? float(maxh)/float(maxw) : float(maxw)/float(maxh); } @@ -1539,5 +1590,5 @@ void Crop::updateCurrentRatio() double rw, rh; get_custom_ratio(w->get_value(), h->get_value(), rw, rh); customRatioLabel->set_text(Glib::ustring::compose("%1:%2", rw, rh)); - crop_ratios[1].value = double(w->get_value())/double(h->get_value()); + crop_ratios->updateCurrentRatio(static_cast(w->get_value()) / static_cast(h->get_value())); } diff --git a/rtgui/crop.h b/rtgui/crop.h index b9221a803..c6636b917 100644 --- a/rtgui/crop.h +++ b/rtgui/crop.h @@ -18,7 +18,7 @@ */ #pragma once -#include +#include #include @@ -91,16 +91,13 @@ public: void rotateCrop (int deg, bool hflip, bool vflip); private: - struct CropRatio { - Glib::ustring label; - double value; - }; - - std::vector crop_ratios; + class CropRatios; void adjustCropToRatio(); void updateCurrentRatio(); + const std::unique_ptr crop_ratios; + Gtk::CheckButton* fixr; MyComboBoxText* ratio; MyComboBoxText* orientation; From f4a28b730a3f629eda8463324fb43e31646838a6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 5 Apr 2020 14:53:55 +0200 Subject: [PATCH 253/264] Disabled denoise chrom when denoise and refine disabled --- rtengine/ipwavelet.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 79302c452..43c5733db 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1168,8 +1168,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed) { - WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); - WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + } Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); adecomp->reconstruct(labco->data + datalen, cp.strength); @@ -1194,8 +1196,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!bdecomp->memoryAllocationFailed) { - WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); - WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); + } Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); @@ -1220,15 +1224,19 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { - WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); - WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); + } Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); - WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); + if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); + WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); + } adecomp->reconstruct(labco->data + datalen, cp.strength); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); From 1e3870d8f71912838aca84389fff34328c85a45f Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 5 Apr 2020 15:53:05 +0200 Subject: [PATCH 254/264] Clean code improcfun.h --- rtengine/improcfun.h | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 3513efd92..d003df644 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -238,29 +238,22 @@ public: void RGB_denoise_info(Imagefloat * src, Imagefloat * provicalc, bool isRAW, const LUTf &gamcurve, float gam, float gamthresh, float gamslope, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float & maxblueaut, float &minredaut, float & minblueaut, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, bool multiThread = false); void RGBtile_denoise(float * fLblox, int hblproc, float noisevar_Ldetail); //for DCT void RGBoutput_tile_row(float *bloxrow_L, float ** Ldetail, float ** tilemask_out, int height, int width, int top); -// bool WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge); -// bool WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb); + void WaveletDenoiseAll_info(int levwav, const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float & minblueaut, int schoice, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb); bool WaveletDenoiseAllL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels); bool WaveletDenoiseAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels); - bool WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels); bool WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels); -// bool WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3]); -// bool WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float noisevar_ab, -// const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb); + bool WaveletDenoiseAll_BiShrinkAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels); void ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir, float *noisevarlum, float * madL, float * vari, int edge); void ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float **buffer, int level, int dir, float *noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, float * madL, float * variC, int local, float * madaab = nullptr, bool madCalculated = false); -// void ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir, float *noisevarlum, float * madL, float * vari, int edge); -// void ShrinkAllAB(const wavelet_decomposition &WaveletCoeffs_L, const wavelet_decomposition &WaveletCoeffs_ab, float **buffer, int level, int dir, -// float *noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, float * madL, float * madaab = nullptr, bool madCalculated = false); void ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b, int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb); From 31355ca70e2585d2b62268cc89f80697ea93aab9 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 6 Apr 2020 09:37:37 +0200 Subject: [PATCH 255/264] Added equalizer denoise luminance --- rtdata/languages/default | 6 +++-- rtengine/FTblockDN.cc | 6 ++--- rtengine/ipwavelet.cc | 56 +++++++++++++++++++++++++++++++++++++--- rtengine/procparams.cc | 4 +++ rtengine/procparams.h | 1 + rtgui/paramsedited.cc | 6 +++++ rtgui/paramsedited.h | 1 + rtgui/wavelet.cc | 12 +++++++++ rtgui/wavelet.h | 2 ++ 9 files changed, 85 insertions(+), 9 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 83262a3fc..c49205767 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -791,7 +791,8 @@ HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength HISTORY_MSG_TEMPOUT;CAM02 automatic temperature HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor HISTORY_MSG_TRANS_Method;Geometry - Method -HISTORY_MSG_WAVBALCHROM;Balance chroma +HISTORY_MSG_WAVBALCHROM;Equalizer chrominance +HISTORY_MSG_WAVBALLUM;Equalizer luminance HISTORY_MSG_WAVCHROMFI;Chroma fine HISTORY_MSG_WAVCHROMCO;Chroma coarse HISTORY_MSG_WAVCLARI;Clarity @@ -2145,7 +2146,8 @@ TP_WAVELET_BALANCE;Contrast balance d/v-h TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. TP_WAVELET_BALCHRO;Chrominance balance TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. -TP_WAVELET_BALCHROM;Chrominance balance +TP_WAVELET_BALCHROM;Denoise Equalizer Blue-Red +TP_WAVELET_BALLUM;Denoise Equalizer White-Black TP_WAVELET_BANONE;None TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 34e7351b8..894c72ce2 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -2214,7 +2214,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W int maxlvl = min(WaveletCoeffs_L.maxlevel(), 5); const float eps = 0.01f; - if (edge == 1 || edge == 3) { + if (edge == 1 || edge == 3 || edge == 4) { maxlvl = 4; //for refine denoise edge wavelet } @@ -2294,7 +2294,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(const wavelet_decomposition &W } } - if (edge == 2) { + if (edge == 2 || edge == 4) { for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) { nvl[i] = vari[lvl] * SQR(noisevarlum[i]); } @@ -2721,7 +2721,7 @@ void ImProcFunctions::ShrinkAllL(const wavelet_decomposition &WaveletCoeffs_L, f } } - if (edge == 2) { + if (edge == 2 || edge == 4) { for (int i = 0; i < W_L * H_L; ++i) { nvl[i] = vari[level] * SQR(noisevarlum[i]); } diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 43c5733db..a5dc1b7c6 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -138,6 +138,7 @@ struct cont_params { float edgampl; int neigh; bool lipp; + float ballum; float balchrom; float chromfi; float chromco; @@ -401,6 +402,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.balchrom = waparams.balchrom; cp.chromfi = 0.1f * waparams.chromfi; cp.chromco = 0.1f * waparams.chromco; + cp.ballum = waparams.ballum; cp.conres = waparams.rescon; cp.conresH = waparams.resconH; @@ -884,16 +886,62 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const vari[1] = 8.f * SQR((cp.lev1n / 125.f) * (1.f + cp.lev1n / 25.f)); vari[2] = 8.f * SQR((cp.lev2n / 125.f) * (1.f + cp.lev2n / 25.f)); vari[3] = 8.f * SQR((cp.lev3n / 125.f) * (1.f + cp.lev3n / 25.f)); + float kr3 = 1.f; + if (cp.lev3n < 10.f) { + kr3 = 0.f; + } else if (cp.lev3n < 30.f) { + kr3 = 0.5f; + } else if (cp.lev3n < 70.f) { + kr3 = 0.7f; + } else { + kr3 = 1.f; + } if ((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) { - int edge = 1; + int edge = 4; vari[0] = rtengine::max(0.0001f, vari[0]); vari[1] = rtengine::max(0.0001f, vari[1]); vari[2] = rtengine::max(0.0001f, vari[2]); - vari[3] = rtengine::max(0.0001f, vari[3]); - float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL + vari[3] = rtengine::max(0.0001f, kr3 * vari[3]); + // float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL + int GWL = labco->W; + int GHL = labco->H; + float* noisevarlum = new float[GHL * GWL]; + int GW2L = (GWL + 1) / 2; - WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge, 1); + float nvlh[13] = {1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 0.7f, 0.5f}; //high value + float nvll[13] = {0.1f, 0.15f, 0.2f, 0.25f, 0.3f, 0.35f, 0.4f, 0.45f, 0.7f, 0.8f, 1.f, 1.f, 1.f}; //low value + + float seuillow = 3000.f;//low + float seuilhigh = 18000.f;//high + int i = 10 - cp.ballum; + float ac = (nvlh[i] - nvll[i]) / (seuillow - seuilhigh); + float bc = nvlh[i] - seuillow * ac; + +#ifdef _OPENMP + #pragma omp parallel for + +#endif + + for (int ir = 0; ir < GHL; ir++) + for (int jr = 0; jr < GWL; jr++) { + float lN = labco->L[ir][jr]; + + if (lN < seuillow) { + noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = nvlh[i]; + } else if (lN < seuilhigh) { + noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = ac * lN + bc; + } else { + noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = nvll[i]; + } + } + if (cp.lev3n < 0.5f) { + WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge, 1); + } else { + WaveletDenoiseAll_BiShrinkL(*Ldecomp, noisevarlum, madL, vari, edge, 1); + + WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge, 1); + } } //Flat curve for Contrast=f(H) in levels diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index b398cc729..b02f1970c 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2248,6 +2248,7 @@ WaveletParams::WaveletParams() : bluemed(0), greenhigh(0), bluehigh(0), + ballum(7.), balchrom(0.), chromfi(0.), chromco(0.), @@ -2361,6 +2362,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && bluemed == other.bluemed && greenhigh == other.greenhigh && bluehigh == other.bluehigh + && ballum == other.ballum && balchrom == other.balchrom && chromfi == other.chromfi && chromco == other.chromco @@ -3526,6 +3528,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wavelet.bluehigh, "Wavelet", "CBbluehigh", wavelet.bluehigh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.bluemed, "Wavelet", "CBbluemed", wavelet.bluemed, keyFile); saveToKeyfile(!pedited || pedited->wavelet.bluelow, "Wavelet", "CBbluelow", wavelet.bluelow, keyFile); + saveToKeyfile(!pedited || pedited->wavelet.ballum, "Wavelet", "Ballum", wavelet.ballum, keyFile); saveToKeyfile(!pedited || pedited->wavelet.balchrom, "Wavelet", "Balchrom", wavelet.balchrom, keyFile); saveToKeyfile(!pedited || pedited->wavelet.chromfi, "Wavelet", "Chromfine", wavelet.chromfi, keyFile); saveToKeyfile(!pedited || pedited->wavelet.chromco, "Wavelet", "Chromcoarse", wavelet.chromco, keyFile); @@ -4699,6 +4702,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Wavelet", "CBbluehigh", pedited, wavelet.bluehigh, pedited->wavelet.bluehigh); assignFromKeyfile(keyFile, "Wavelet", "CBbluemed", pedited, wavelet.bluemed, pedited->wavelet.bluemed); assignFromKeyfile(keyFile, "Wavelet", "CBbluelow", pedited, wavelet.bluelow, pedited->wavelet.bluelow); + assignFromKeyfile(keyFile, "Wavelet", "Ballum", pedited, wavelet.ballum, pedited->wavelet.ballum); assignFromKeyfile(keyFile, "Wavelet", "Balchrom", pedited, wavelet.balchrom, pedited->wavelet.balchrom); assignFromKeyfile(keyFile, "Wavelet", "Chromfine", pedited, wavelet.chromfi, pedited->wavelet.chromfi); assignFromKeyfile(keyFile, "Wavelet", "Chromcoarse", pedited, wavelet.chromco, pedited->wavelet.chromco); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index a6147ccc5..4e2b0c275 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1205,6 +1205,7 @@ struct WaveletParams { int bluemed; int greenhigh; int bluehigh; + double ballum; double balchrom; double chromfi; double chromco; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 0685e1471..0faee0fd3 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -486,6 +486,7 @@ void ParamsEdited::set(bool v) wavelet.bluemed = v; wavelet.bluelow = v; wavelet.lipst = v; + wavelet.ballum = v; wavelet.balchrom = v; wavelet.chromfi = v; wavelet.chromco = v; @@ -1096,6 +1097,7 @@ void ParamsEdited::initFrom(const std::vector& wavelet.bluelow = wavelet.bluelow && p.wavelet.bluelow == other.wavelet.bluelow; wavelet.lipst = wavelet.lipst && p.wavelet.lipst == other.wavelet.lipst; wavelet.bluehigh = wavelet.bluehigh && p.wavelet.bluehigh == other.wavelet.bluehigh; + wavelet.ballum = wavelet.ballum && p.wavelet.ballum == other.wavelet.ballum; wavelet.balchrom = wavelet.balchrom && p.wavelet.balchrom == other.wavelet.balchrom; wavelet.chromfi = wavelet.chromfi && p.wavelet.chromfi == other.wavelet.chromfi; wavelet.chromco = wavelet.chromco && p.wavelet.chromco == other.wavelet.chromco; @@ -2935,6 +2937,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wavelet.bluelow = mods.wavelet.bluelow; } + if (wavelet.ballum) { + toEdit.wavelet.ballum = mods.wavelet.ballum; + } + if (wavelet.balchrom) { toEdit.wavelet.balchrom = mods.wavelet.balchrom; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 4465d15b4..d1be2c57e 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -586,6 +586,7 @@ struct WaveletParamsEdited { bool bluemed; bool greenhigh; bool bluehigh; + bool ballum; bool balchrom; bool chromfi; bool chromco; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 23e526474..652774af4 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -130,6 +130,7 @@ Wavelet::Wavelet() : edgedetectthr2(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR2"), -10, 100, 1, 0))), edgesensi(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60))), edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), + ballum(Gtk::manage(new Adjuster(M("TP_WAVELET_BALLUM"), -2., 10., 0.5, 7., Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))), balchrom(Gtk::manage(new Adjuster(M("TP_WAVELET_BALCHROM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-red-small.png"))))), chromfi(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMFI"), 0.0, 150., 0.01, 0.))), chromco(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMCO"), 0, 100., 0.01, 0.))), @@ -183,6 +184,7 @@ Wavelet::Wavelet() : auto m = ProcEventMapper::getInstance(); EvWavenaclari = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCLARI"); EvWavushamet = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVUSHAMET"); + EvWavballum = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVBALLUM"); EvWavbalchrom = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVBALCHROM"); EvWavchromfi = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCHROMFI"); EvWavchromco = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVCHROMCO"); @@ -524,7 +526,9 @@ Wavelet::Wavelet() : level3noise->setAdjusterListener(this); level3noise->setUpdatePolicy(RTUP_DYNAMIC); + ballum->setAdjusterListener(this); + noiseBox->pack_start(*ballum); noiseBox->pack_start(*level0noise, Gtk::PACK_SHRINK, 0); noiseBox->pack_start(*level1noise, Gtk::PACK_SHRINK, 0); noiseBox->pack_start(*level2noise, Gtk::PACK_SHRINK, 0); @@ -1403,6 +1407,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) softrad->setValue(pp->wavelet.softrad); softradend->setValue(pp->wavelet.softradend); + ballum->setValue(pp->wavelet.ballum); balchrom->setValue(pp->wavelet.balchrom); chromfi->setValue(pp->wavelet.chromfi); chromco->setValue(pp->wavelet.chromco); @@ -1551,6 +1556,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) softrad->setEditedState(pedited->wavelet.softrad ? Edited : UnEdited); softradend->setEditedState(pedited->wavelet.softradend ? Edited : UnEdited); + ballum->setEditedState(pedited->wavelet.ballum ? Edited : UnEdited); balchrom->setEditedState(pedited->wavelet.balchrom ? Edited : UnEdited); chromfi->setEditedState(pedited->wavelet.chromfi ? Edited : UnEdited); chromco->setEditedState(pedited->wavelet.chromco ? Edited : UnEdited); @@ -1774,6 +1780,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pp->wavelet.strength = (int) strength->getValue(); pp->wavelet.balance = (int) balance->getValue(); pp->wavelet.balchrom = balchrom->getValue(); + pp->wavelet.ballum = ballum->getValue(); pp->wavelet.chromfi = chromfi->getValue(); pp->wavelet.chromco = chromco->getValue(); @@ -1895,6 +1902,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited) pedited->wavelet.bluemed = bluemed->getEditedState(); pedited->wavelet.greenhigh = greenhigh->getEditedState(); pedited->wavelet.bluehigh = bluehigh->getEditedState(); + pedited->wavelet.ballum = ballum->getEditedState(); pedited->wavelet.balchrom = balchrom->getEditedState(); pedited->wavelet.chromfi = chromfi->getEditedState(); pedited->wavelet.chromco = chromco->getEditedState(); @@ -2129,6 +2137,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit level1noise->setDefault (defParams->wavelet.level1noise); level2noise->setDefault (defParams->wavelet.level2noise); level3noise->setDefault (defParams->wavelet.level3noise); + ballum->setDefault(defParams->wavelet.ballum); balchrom->setDefault(defParams->wavelet.balchrom); chromfi->setDefault(defParams->wavelet.chromfi); chromco->setDefault(defParams->wavelet.chromco); @@ -2155,6 +2164,7 @@ void Wavelet::setDefaults(const ProcParams* defParams, const ParamsEdited* pedit mergeC->setDefaultEditedState(pedited->wavelet.mergeC ? Edited : UnEdited); softrad->setDefaultEditedState(pedited->wavelet.softrad ? Edited : UnEdited); softradend->setDefaultEditedState(pedited->wavelet.softradend ? Edited : UnEdited); + ballum->setDefaultEditedState(pedited->wavelet.ballum ? Edited : UnEdited); balchrom->setDefaultEditedState(pedited->wavelet.balchrom ? Edited : UnEdited); chromfi->setDefaultEditedState(pedited->wavelet.chromfi ? Edited : UnEdited); chromco->setDefaultEditedState(pedited->wavelet.chromco ? Edited : UnEdited); @@ -2951,6 +2961,8 @@ void Wavelet::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(EvWavgreenhigh, greenhigh->getTextValue()); } else if (a == bluehigh) { listener->panelChanged(EvWavbluehigh, bluehigh->getTextValue()); + } else if (a == ballum) { + listener->panelChanged(EvWavballum, ballum->getTextValue()); } else if (a == balchrom) { listener->panelChanged(EvWavbalchrom, balchrom->getTextValue()); } else if (a == chromfi) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index 07d2432ac..d1b4bb7c3 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -70,6 +70,7 @@ public: private: rtengine::ProcEvent EvWavenaclari; rtengine::ProcEvent EvWavushamet; + rtengine::ProcEvent EvWavballum; rtengine::ProcEvent EvWavbalchrom; rtengine::ProcEvent EvWavchromfi; rtengine::ProcEvent EvWavchromco; @@ -244,6 +245,7 @@ private: Adjuster* const edgedetectthr2; Adjuster* const edgesensi; Adjuster* const edgeampli; + Adjuster* const ballum; Adjuster* const balchrom; Adjuster* const chromfi; Adjuster* const chromco; From 9f5e81b0262e50bf26dfdfc3524382d7b428557f Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 6 Apr 2020 09:42:46 +0200 Subject: [PATCH 256/264] Change tooltip offset --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index c49205767..64af97689 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2328,7 +2328,7 @@ TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\n TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. TP_WAVELET_WAVLOWTHR;Low contrast threshold TP_WAVELET_WAVOFFSET;Offset -TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\n High values will amplify the contrast enhancement of the highlights, while low values will amplify the contrast enhancement of the shadows. Along with a low Max. effect value will help you selecting the contrasts that will be enhanced +TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between shadows and highlights.\nHigh values here will amplify the contrast change of the highlights, whereas low values will amplify the contrast change of the shadows.\nAlong with a low Damper value you will able to select the contrasts that will be enhanced. TP_WBALANCE_AUTO;Auto TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_AUTOOLD;Auto RGB grey From ded866f5afc1e009a51adc74ba604ebcd5f9b9df Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 6 Apr 2020 17:33:01 +0200 Subject: [PATCH 257/264] Optimize memory when denoise chroma is not used --- rtengine/ipwavelet.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index a5dc1b7c6..0d55791d6 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -838,7 +838,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (levwavL < 4) { levwavL = 4; //to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! } - + bool usechrom = cp.chromfi > 0.f || cp.chromco > 0.f; + if (levwavL > 0) { const std::unique_ptr Ldecomp(new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); float madL[8][3]; @@ -970,7 +971,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } */ - + if(!usechrom) { + Ldecomp->reconstruct(labco->data, cp.strength); + } float variC[7]; float variCb[7]; @@ -1298,8 +1301,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (hhCurve) { delete hhCurve; } - - Ldecomp->reconstruct(labco->data, cp.strength); + + if(usechrom) { + Ldecomp->reconstruct(labco->data, cp.strength); + } } } From abba1bf360502b13bd541b68bf4630c0e2835cce Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 7 Apr 2020 10:16:08 +0200 Subject: [PATCH 258/264] Improve enabled blur level and wavelet decomp level --- rtengine/ipwavelet.cc | 105 ++++++++++++++++++++++++++++-------------- rtgui/wavelet.cc | 2 +- 2 files changed, 71 insertions(+), 36 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 0d55791d6..860530be2 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -524,11 +524,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.Tilesmethod == "big") { realtile = 22; } -/* - if (params->wavelet.Tilesmethod == "lit") { - realtile = 12; - } -*/ + + /* + if (params->wavelet.Tilesmethod == "lit") { + realtile = 12; + } + */ int tilesize = 128 * realtile; int overlap = (int) tilesize * 0.125f; int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip; @@ -823,7 +824,25 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const ref0 = true; } - if (cp.contrast == 0.f && !cp.tonemap && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels + bool wavcurvecomp = false;//not enable if 0.75 + + if (wavblcurve) { + for (int i = 0; i < 500; i++) { + if (wavblcurve[i] != 0.) { + wavcurvecomp = true; + } + } + } + + bool exblurL = cp.blena && wavcurvecomp; + + if(exblurL) { + if(cp.mul[0] == 0.f) { + cp.mul[0] = 0.01f;//to enable WaveletcontAllL if no contrast is nead + } + } + + if (!exblurL && cp.contrast == 0.f && cp.blurres == 0.f && !cp.tonemap && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels while (levwavL > 0 && cp.mul[levwavL - 1] == 0.f) { // cp.mul[level] == 0.f means no changes to level levwavL--; } @@ -838,8 +857,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (levwavL < 4) { levwavL = 4; //to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! } + + // printf("wave L=%i\n", levwavL); bool usechrom = cp.chromfi > 0.f || cp.chromco > 0.f; - + if (levwavL > 0) { const std::unique_ptr Ldecomp(new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); float madL[8][3]; @@ -888,6 +909,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const vari[2] = 8.f * SQR((cp.lev2n / 125.f) * (1.f + cp.lev2n / 25.f)); vari[3] = 8.f * SQR((cp.lev3n / 125.f) * (1.f + cp.lev3n / 25.f)); float kr3 = 1.f; + if (cp.lev3n < 10.f) { kr3 = 0.f; } else if (cp.lev3n < 30.f) { @@ -904,7 +926,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const vari[1] = rtengine::max(0.0001f, vari[1]); vari[2] = rtengine::max(0.0001f, vari[2]); vari[3] = rtengine::max(0.0001f, kr3 * vari[3]); - // float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL + // float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL int GWL = labco->W; int GHL = labco->H; float* noisevarlum = new float[GHL * GWL]; @@ -920,22 +942,23 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float bc = nvlh[i] - seuillow * ac; #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for #endif - for (int ir = 0; ir < GHL; ir++) - for (int jr = 0; jr < GWL; jr++) { - float lN = labco->L[ir][jr]; + for (int ir = 0; ir < GHL; ir++) + for (int jr = 0; jr < GWL; jr++) { + float lN = labco->L[ir][jr]; + + if (lN < seuillow) { + noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = nvlh[i]; + } else if (lN < seuilhigh) { + noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = ac * lN + bc; + } else { + noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = nvll[i]; + } + } - if (lN < seuillow) { - noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = nvlh[i]; - } else if (lN < seuilhigh) { - noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = ac * lN + bc; - } else { - noisevarlum[(ir >> 1)*GW2L + (jr >> 1)] = nvll[i]; - } - } if (cp.lev3n < 0.5f) { WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge, 1); } else { @@ -965,13 +988,14 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } WaveletcontAllLfinal(*Ldecomp, cp, mean, sigma, MaxP, waOpacityCurveWL); + //Evaluate2(*Ldecomp, cp, ind, mean, meanN, sigma, sigmaN, MaxP, MaxN, madL); /* Ldecomp->reconstruct(labco->data, cp.strength); } } */ - if(!usechrom) { + if (!usechrom) { Ldecomp->reconstruct(labco->data, cp.strength); } @@ -1147,11 +1171,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const variC[6] = max(0.0001f, k6 * variC[6]); variCb[6] = max(0.0001f, k6 * variCb[6]); -/* - for (int y = 0; y < 7; y++) { - printf("y=%i madL=%f varia=%f variab=%f\n", y, madL[y][1], variC[y], variCb[y]); - } -*/ + /* + for (int y = 0; y < 7; y++) { + printf("y=%i madL=%f varia=%f variab=%f\n", y, madL[y][1], variC[y], variCb[y]); + } + */ float nvch = 0.6f;//high value float nvcl = 0.1f;//low value @@ -1199,11 +1223,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const hhutili = true; } + bool exblurab = cp.chrwav > 0.f && exblurL; if (!hhutili) { //always a or b int levwava = levwav; - if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels while (levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f)) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { levwava--; } @@ -1215,14 +1240,17 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } + // printf("wavea=%i\n", levwava); + if (levwava > 0) { const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed) { - if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + if (cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); } + Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); adecomp->reconstruct(labco->data + datalen, cp.strength); @@ -1231,7 +1259,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwavb = levwav; - if (cp.chrores == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels while (levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f)) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { levwavb--; } @@ -1243,14 +1271,17 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } + // printf("waveb=%i\n", levwavb); + if (levwavb > 0) { const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!bdecomp->memoryAllocationFailed) { - if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + if (cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); } + Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); @@ -1259,11 +1290,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } else {// a and b int levwavab = levwav; - if (cp.chrores == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels + if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && !hhutili && params->wavelet.CLmethod == "all") { // no processing of residual ab => we probably can reduce the number of levels while (levwavab > 0 && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavab - 1] == 0.f)) || (cp.CHmet != 2 && (levwavab == 10 || (!cp.curv || cp.mulC[levwavab - 1] == 0.f))))) && (!cp.opaRG || levwavab == 10 || (cp.opaRG && cp.mulopaRG[levwavab - 1] == 0.f)) && ((levwavab == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavab - 1] == 0.f)))) { levwavab--; } } + if (cp.chromfi > 0.f || cp.chromco > 0.f) { if (levwavab < 7) { levwavab = 7; @@ -1275,16 +1307,18 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { - if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + if (cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); WaveletDenoiseAllAB(*Ldecomp, *adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, 1); } + Evaluate2(*adecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); WaveletcontAllAB(labco, varhue, varchro, *adecomp, wavblcurve, waOpacityCurveW, cp, true, skip, meanab, sigmaab); WaveletDenoiseAll_BiShrinkAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); WaveletDenoiseAllAB(*Ldecomp, *bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, 1); Evaluate2(*bdecomp, meanab, meanNab, sigmaab, sigmaNab, MaxPab, MaxNab); - if(cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { + + if (cp.noiseena && (cp.chromfi > 0.f || cp.chromfi > 0.f)) { WaveletcontAllAB(labco, varhue, varchro, *bdecomp, wavblcurve, waOpacityCurveW, cp, false, skip, meanab, sigmaab); WaveletAandBAllAB(*adecomp, *bdecomp, cp, hhCurve, hhutili); } @@ -1301,8 +1335,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (hhCurve) { delete hhCurve; } - - if(usechrom) { + + if (usechrom) { Ldecomp->reconstruct(labco->data, cp.strength); } } @@ -2350,6 +2384,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float klev = 1.f; if (wavblcurve && wavcurvecomp && cp.blena) { + printf("Blur level L\n"); float mea[10]; float effect = cp.bluwav; float beta = 0.f; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 652774af4..af159d480 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -138,7 +138,7 @@ Wavelet::Wavelet() : mergeC(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEC"), -50, 100, 1, 20))), softrad(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), softradend(Gtk::manage(new Adjuster(M("TP_WAVELET_SOFTRAD"), 0.0, 100., 0.5, 0.))), - chrwav(Gtk::manage(new Adjuster(M("TP_WAVELET_CHRWAV"), 0., 100., 0., 0.))), + chrwav(Gtk::manage(new Adjuster(M("TP_WAVELET_CHRWAV"), 0., 100., 0.5, 0.))), Lmethod(Gtk::manage(new MyComboBoxText())), CHmethod(Gtk::manage(new MyComboBoxText())), CHSLmethod(Gtk::manage(new MyComboBoxText())), From cbac4e06913ecefbc096dd38c3ddb48a1359b4eb Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 7 Apr 2020 10:52:08 +0200 Subject: [PATCH 259/264] Fixed segmentation fault with blur levels --- rtengine/ipwavelet.cc | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 860530be2..703894e2d 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -836,9 +836,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const bool exblurL = cp.blena && wavcurvecomp; - if(exblurL) { - if(cp.mul[0] == 0.f) { - cp.mul[0] = 0.01f;//to enable WaveletcontAllL if no contrast is nead + if (exblurL) { + if (cp.mul[0] == 0.f) { + cp.mul[0] = 0.01f;//to always enable WaveletcontAllL if no contrast is nead } } @@ -858,7 +858,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const levwavL = 4; //to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! } - // printf("wave L=%i\n", levwavL); + if (settings->verbose) { + printf("Level decomp L=%i\n", levwavL); + } + bool usechrom = cp.chromfi > 0.f || cp.chromco > 0.f; if (levwavL > 0) { @@ -1240,7 +1243,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } - // printf("wavea=%i\n", levwava); + if (settings->verbose) { + printf("Leval decomp a=%i\n", levwava); + } if (levwava > 0) { const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); @@ -1271,7 +1276,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } - // printf("waveb=%i\n", levwavb); + if (settings->verbose) { + printf("Leval decomp b=%i\n", levwavb); + } + if (levwavb > 0) { const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); @@ -2384,7 +2392,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float klev = 1.f; if (wavblcurve && wavcurvecomp && cp.blena) { - printf("Blur level L\n"); + // printf("Blur level L\n"); float mea[10]; float effect = cp.bluwav; float beta = 0.f; @@ -2446,13 +2454,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } klev = (wavblcurve[lvl * 55.5f]); - float lvr = lvl; - if (lvr == 0) { - lvr = 1; - } - - klev *= beta * lvr * 100.f / skip; + klev *= beta * 100.f / skip; boxblur(bef, aft, klev, Wlvl_L, Hlvl_L, false); for (int co = 0; co < Hlvl_L * Wlvl_L; co++) { @@ -2707,6 +2710,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float ContAllAB(labco, maxlvl, varhue, varchrom, WavCoeffs_ab, WavCoeffs_ab0, lvl, dir, waOpacityCurveW, cp, Wlvl_ab, Hlvl_ab, useChannelA); if (wavblcurve && wavcurvecomp && cp.blena && cp.chrwav > 0.f) { + float mea[10]; float effect = cp.bluwav; float beta = 0.f; @@ -2750,13 +2754,8 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float } klev = (wavblcurve[lvl * 55.5f]); - float lvr = lvl; - if (lvr == 0) { - lvr = 1; - } - - klev *= beta * cp.chrwav * lvr * 200.f / skip; + klev *= beta * cp.chrwav * 100.f / skip; boxblur(bef, aft, klev, Wlvl_ab, Hlvl_ab, false); From 4c0013b461c060cb83ab2b2602a0644c70dd309a Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 8 Apr 2020 07:42:17 +0200 Subject: [PATCH 260/264] Wavelet final - Change guidefilter parameters --- rtengine/ipwavelet.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 703894e2d..f415c9c8e 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1576,10 +1576,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } } - constexpr double epsilmax = 0.001; - constexpr double epsilmin = 0.0001; - constexpr double aepsil = (epsilmax - epsilmin) / 90.f; - constexpr double bepsil = epsilmax - 100.f * aepsil; + constexpr double epsilmax = 0.002; + constexpr double epsilmin = 0.0005; + constexpr double aepsil = 0.01f * (epsilmax - epsilmin); + constexpr double bepsil = epsilmin; const double epsil = aepsil * waparams.softradend + bepsil; const float blur = 10.f / scale * (0.001f + 0.8f * waparams.softradend); From 9cc744b1f62aec5cc06378b0c4718add6fe9b1a3 Mon Sep 17 00:00:00 2001 From: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com> Date: Mon, 13 Apr 2020 11:40:28 +0200 Subject: [PATCH 261/264] Reset all options in crop. Fixes #5138 and #5045 --- rtgui/crop.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rtgui/crop.cc b/rtgui/crop.cc index f092f07a5..48d1e09af 100644 --- a/rtgui/crop.cc +++ b/rtgui/crop.cc @@ -612,6 +612,11 @@ void Crop::doresetCrop () yDirty = true; wDirty = true; hDirty = true; + + // Reset ratio, ratio lock and orientation as well + ratio->set_active(0); + orientation->set_active(2); + fixr->set_active(true); int X = 0; int Y = 0; From 996ba0a9a30869bd25cbc3db32f5bdf2c992b64d Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 13 Apr 2020 13:31:06 +0200 Subject: [PATCH 262/264] Partial decoding or wrong dimensions of X-T30 files, fixes #5709, code taken from ART --- rtengine/dcraw.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index b8d5b9895..29796ea67 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -10048,6 +10048,9 @@ canon_a5: } else if (!strncmp(model, "X-A3", 4) || !strncmp(model, "X-A5", 4)) { width = raw_width = 6016; height = raw_height = 4014; + } else if (!strcmp(model, "X-Pro3") || !strcmp(model, "X-T3") || !strcmp(model, "X-T30")) { + width = raw_width = 6384; + height = raw_height = 4182; } top_margin = (raw_height - height) >> 2 << 1; left_margin = (raw_width - width ) >> 2 << 1; From 22eee9787e4ea5c34d19407d66e1ecaf6197bd16 Mon Sep 17 00:00:00 2001 From: rom9 <4711834+rom9@users.noreply.github.com> Date: Mon, 13 Apr 2020 17:20:56 +0200 Subject: [PATCH 263/264] Film negative stable multipliers (#5485) * Added new feature to calculate channel multipliers from crop area. This also saves the crop area channel medians to the processing profiles, in order to get a more consistent color balance when batch-applying the same profile to multiple pictures from the same film roll. * Fixed wrong initialization of array, and missing check for the result of `getFilmNegativeMedians()`. Moved `ImProcCoordinator::translateCoord()` from private member to anonymous namespace. Fixed some whitespace and formatting issues. * Fixed some formatting issues * Passed `ipf` parameter as const in `translateCoord`. Narrowed `using namespace` to single class `Coord2D`. * Added `scaleGain` entry to thumbnail metadata file, to make `scale_mul` multipliers available in thumbnail processing phase. This simplifies multiplier calculations, so that "faking" thumbnail multipliers in the main image processing is not necessary anymore. This way, output values are immune to slight variations of multipliers between successive shots taken with in-camera AWB turned on. Shifted multipliers so that the output channel medians are balanced when "Camera WB" is selected. This way, just computing multipliers from crop and setting "Camera WB" (which is the default) gives a pretty well balanced image as a starting point. * New channel scaling method, based on a film base color sample instead of crop area channel medians. Channels are scaled so that the converted film base values are equal to 1/512th of the output range (65k). This giver better black levels in the output, and more consistency when batch-processing multiple negatives. The output is now compensated for a known fixed WB value, so that the film base will appear grey when WB is set to 3500K, Green=1. Added PPVERSION 347 to preserve backwards compatibility: when a processing profile saved by RT 5.7 is loaded (PPVERSION=346), the new fields are initialized to the special value -1, which will instruct the main processing to follow the old channel scaling behaviour. The old channel scaling multipliers will then be converted to the new film base values so that the resulting image is the same, and the fields will be overwritten as soon as the PP is saved again. This will transparently upgrade the processing profile. When the new behaviour is used, but the film base values are still unset, they are estimated based on channel medians, excluding a 20% border around the image. This should give a better result out-of-the-box for pictures containing a large film holder. * Code cleanup from review * Run astyle on film neg source files * Fixed automated build failure caused by incompatible libraries on my dev PC. * Simplified `Thumbnail::processFilmNegative` method signature. There is no need to pass in `rmi`,`gmi`,`bmi` multipliers from the caller, i can do the same with my own internal multipliers. * Added `FilmNegListener` class to pass estimeted film base values to the GUI after first processing. Removed old `filmBaseValues` instance variable from RawImageSource. * Code cleanup * Forgot to set baseValues flag in `PartialPasteDlg::applyPaste` Fixed `filmBaseValuesLabel` not updating when reading zero baseValues. Normally not needed (the label is updated later by the listener), but when the user is browsing through pictures the listener won't fire, so the label must be updated to show values are unset. * Overwritten channel scaling multipliers by calling `get_colorsCoeff` with `forceAutoWB=false`. Initially, in `RawImageSource::load`, channels are auto-balanced by averaging the whole picture when computing multipliers. This can give different multipliers for multiple shots of the same camera, which will lead to inconsistent conversions when batch-processing multiple negatives. This commit re-sets `scale_mul`, `ref_pre_mul`, etc., in order to "undo" the auto-WB and use the normal camera multipliers. * Found an easier way to get stable overall multipliers, removed the (horrible) on-the-fly mutation of scaling instance variables. --- rtdata/languages/default | 4 + rtengine/filmnegativeproc.cc | 345 +++++++++++++++++++++++++--------- rtengine/filmnegativethumb.cc | 211 ++++++++++++++++----- rtengine/imagesource.h | 3 +- rtengine/improccoordinator.cc | 51 +++-- rtengine/improccoordinator.h | 7 + rtengine/procparams.cc | 33 +++- rtengine/procparams.h | 4 + rtengine/rawimagesource.h | 3 +- rtengine/rtengine.h | 10 + rtengine/rtthumbnail.cc | 10 +- rtengine/rtthumbnail.h | 3 +- rtengine/simpleprocess.cc | 7 +- rtgui/filmnegative.cc | 164 +++++++++++++--- rtgui/filmnegative.h | 16 +- rtgui/paramsedited.cc | 12 +- rtgui/paramsedited.h | 1 + rtgui/partialpastedlg.cc | 1 + rtgui/ppversion.h | 4 +- rtgui/toolpanelcoord.cc | 6 + rtgui/toolpanelcoord.h | 1 + 21 files changed, 705 insertions(+), 191 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 64af97689..f33608903 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -752,6 +752,7 @@ HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative +HISTORY_MSG_FILMNEGATIVE_FILMBASE;Film base color HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values HISTORY_MSG_HISTMATCHING;Auto-matched tone curve HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -1693,6 +1694,9 @@ TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Weighted Standard TP_EXPOS_BLACKPOINT_LABEL;Raw Black Points TP_EXPOS_WHITEPOINT_LABEL;Raw White Points TP_FILMNEGATIVE_BLUE;Blue ratio +TP_FILMNEGATIVE_FILMBASE_PICK;Pick film base color +TP_FILMNEGATIVE_FILMBASE_TOOLTIP;Pick a spot of unexposed film (eg. the border between frames), to get the actual film base color values, and save them in the processing profile.\nThis makes it easy to get a more consistent color balance when batch-processing multiple pictures from the same roll.\nAlso use this when the converted image is extremely dark, bright, or color-unbalanced. +TP_FILMNEGATIVE_FILMBASE_VALUES;Film base RGB: TP_FILMNEGATIVE_GREEN;Reference exponent (contrast) TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picking two patches which had a neutral hue (no color) in the original scene. The patches should differ in brightness. Set the white balance afterwards. TP_FILMNEGATIVE_LABEL;Film Negative diff --git a/rtengine/filmnegativeproc.cc b/rtengine/filmnegativeproc.cc index c7de3c483..6d4fe1ad6 100644 --- a/rtengine/filmnegativeproc.cc +++ b/rtengine/filmnegativeproc.cc @@ -35,6 +35,9 @@ namespace { +using rtengine::ST_BAYER; +using rtengine::ST_FUJI_XTRANS; +using rtengine::settings; bool channelsAvg( const rtengine::RawImage* ri, @@ -43,17 +46,16 @@ bool channelsAvg( const float* cblacksom, rtengine::Coord spotPos, int spotSize, - const rtengine::procparams::FilmNegativeParams& params, std::array& avgs ) { avgs = {}; // Channel averages - if (ri->getSensorType() != rtengine::ST_BAYER && ri->getSensorType() != rtengine::ST_FUJI_XTRANS) { + if (ri->getSensorType() != ST_BAYER && ri->getSensorType() != ST_FUJI_XTRANS) { return false; } - if (rtengine::settings->verbose) { + if (settings->verbose) { printf("Spot coord: x=%d y=%d\n", spotPos.x, spotPos.y); } @@ -69,9 +71,10 @@ bool channelsAvg( } std::array pxCount = {}; // Per-channel sample counts + for (int c = x1; c < x2; ++c) { for (int r = y1; r < y2; ++r) { - const int ch = ri->getSensorType() == rtengine::ST_BAYER ? ri->FC(r,c) : ri->XTRANSFC(r,c); + const int ch = ri->getSensorType() == ST_BAYER ? ri->FC(r, c) : ri->XTRANSFC(r, c); ++pxCount[ch]; @@ -88,6 +91,112 @@ bool channelsAvg( return true; } +void calcMedians( + const rtengine::RawImage* ri, + float** data, + int x1, int y1, int x2, int y2, + std::array& meds +) +{ + + MyTime t1, t2, t3; + t1.set(); + + // Channel vectors to calculate medians + std::array, 3> cvs; + + // Sample one every 5 pixels, and push the value in the appropriate channel vector. + // Choose an odd step, not a multiple of the CFA size, to get a chance to visit each channel. + if (ri->getSensorType() == ST_BAYER) { + for (int row = y1; row < y2; row += 5) { + const int c0 = ri->FC(row, x1 + 0); + const int c1 = ri->FC(row, x1 + 5); + int col = x1; + + for (; col < x2 - 5; col += 10) { + cvs[c0].push_back(data[row][col]); + cvs[c1].push_back(data[row][col + 5]); + } + + if (col < x2) { + cvs[c0].push_back(data[row][col]); + } + } + } else if (ri->getSensorType() == ST_FUJI_XTRANS) { + for (int row = y1; row < y2; row += 5) { + const std::array cs = { + ri->XTRANSFC(row, x1 + 0), + ri->XTRANSFC(row, x1 + 5), + ri->XTRANSFC(row, x1 + 10), + ri->XTRANSFC(row, x1 + 15), + ri->XTRANSFC(row, x1 + 20), + ri->XTRANSFC(row, x1 + 25) + }; + int col = x1; + + for (; col < x2 - 25; col += 30) { + for (int c = 0; c < 6; ++c) { + cvs[cs[c]].push_back(data[row][col + c * 5]); + } + } + + for (int c = 0; col < x2; col += 5, ++c) { + cvs[cs[c]].push_back(data[row][col]); + } + } + } + + t2.set(); + + if (settings->verbose) { + printf("Median vector fill loop time us: %d\n", t2.etime(t1)); + } + + t2.set(); + + for (int c = 0; c < 3; ++c) { + // Find median values for each channel + if (!cvs[c].empty()) { + rtengine::findMinMaxPercentile(cvs[c].data(), cvs[c].size(), 0.5f, meds[c], 0.5f, meds[c], true); + } + } + + t3.set(); + + if (settings->verbose) { + printf("Sample count: R=%zu, G=%zu, B=%zu\n", cvs[0].size(), cvs[1].size(), cvs[2].size()); + printf("Median calc time us: %d\n", t3.etime(t2)); + } + +} + +std::array calcWBMults( + const rtengine::ColorTemp& wb, + const rtengine::ImageMatrices& imatrices, + const rtengine::RawImage *ri, + const float ref_pre_mul[4]) +{ + std::array wb_mul; + double r, g, b; + wb.getMultipliers(r, g, b); + wb_mul[0] = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; + wb_mul[1] = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; + wb_mul[2] = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + + for (int c = 0; c < 3; ++c) { + wb_mul[c] = ri->get_pre_mul(c) / wb_mul[c] / ref_pre_mul[c]; + } + + // Normalize max channel gain to 1.0 + float mg = rtengine::max(wb_mul[0], wb_mul[1], wb_mul[2]); + + for (int c = 0; c < 3; ++c) { + wb_mul[c] /= mg; + } + + return wb_mul; +} + } bool rtengine::RawImageSource::getFilmNegativeExponents(Coord2D spotA, Coord2D spotB, int tran, const procparams::FilmNegativeParams ¤tParams, std::array& newExps) @@ -104,21 +213,29 @@ bool rtengine::RawImageSource::getFilmNegativeExponents(Coord2D spotA, Coord2D s std::array clearVals; std::array denseVals; + // Get channel averages in the two spots, sampling from the original ri->data buffer. + // NOTE: rawData values might be affected by CA corection, FlatField, etc, so: + // rawData[y][x] == (ri->data[y][x] - cblacksom[c]) * scale_mul[c] + // is not always true. To calculate exponents on the exact values, we should keep + // a copy of the rawData buffer after preprocessing. Worth the memory waste? + // Sample first spot transformPosition(spotA.x, spotA.y, tran, spot.x, spot.y); - if (!channelsAvg(ri, W, H, cblacksom, spot, spotSize, currentParams, clearVals)) { + + if (!channelsAvg(ri, W, H, cblacksom, spot, spotSize, clearVals)) { return false; } // Sample second spot transformPosition(spotB.x, spotB.y, tran, spot.x, spot.y); - if (!channelsAvg(ri, W, H, cblacksom, spot, spotSize, currentParams, denseVals)) { + + if (!channelsAvg(ri, W, H, cblacksom, spot, spotSize, denseVals)) { return false; } // Detect which one is the dense spot, based on green channel if (clearVals[1] < denseVals[1]) { - std::swap(clearVals, denseVals); + std::swap(clearVals, denseVals); } if (settings->verbose) { @@ -152,7 +269,32 @@ bool rtengine::RawImageSource::getFilmNegativeExponents(Coord2D spotA, Coord2D s return true; } -void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativeParams ¶ms) +bool rtengine::RawImageSource::getRawSpotValues(Coord2D spotCoord, int spotSize, int tran, const procparams::FilmNegativeParams ¶ms, std::array& rawValues) +{ + Coord spot; + transformPosition(spotCoord.x, spotCoord.y, tran, spot.x, spot.y); + + if (settings->verbose) { + printf("Transformed coords: %d,%d\n", spot.x, spot.y); + } + + if (spotSize < 4) { + return false; + } + + // Calculate averages of raw unscaled channels + if (!channelsAvg(ri, W, H, cblacksom, spot, spotSize, rawValues)) { + return false; + } + + if (settings->verbose) { + printf("Raw spot values: R=%g, G=%g, B=%g\n", rawValues[0], rawValues[1], rawValues[2]); + } + + return true; +} + +void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativeParams ¶ms, std::array& filmBaseValues) { // BENCHFUNMICRO @@ -168,92 +310,114 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ static_cast(-params.blueRatio * params.greenExp) }; - MyTime t1, t2, t3,t4, t5; - - t1.set(); - - // Channel vectors to calculate medians - std::array, 3> cvs; - - // Sample one every 5 pixels, and push the value in the appropriate channel vector. - // Choose an odd step, not a multiple of the CFA size, to get a chance to visit each channel. - if (ri->getSensorType() == ST_BAYER) { - for (int row = 0; row < H; row += 5) { - const int c0 = ri->FC(row, 0); - const int c1 = ri->FC(row, 5); - int col = 0; - for (; col < W - 5; col += 10) { - cvs[c0].push_back(rawData[row][col]); - cvs[c1].push_back(rawData[row][col + 5]); - } - if (col < W) { - cvs[c0].push_back(rawData[row][col]); - } - } - } - else if (ri->getSensorType() == ST_FUJI_XTRANS) { - for (int row = 0; row < H; row += 5) { - const std::array cs = { - ri->XTRANSFC(row, 0), - ri->XTRANSFC(row, 5), - ri->XTRANSFC(row, 10), - ri->XTRANSFC(row, 15), - ri->XTRANSFC(row, 20), - ri->XTRANSFC(row, 25) - }; - int col = 0; - for (; col < W - 25; col += 30) { - for (int c = 0; c < 6; ++c) { - cvs[cs[c]].push_back(rawData[row][col + c * 5]); - } - } - for (int c = 0; col < W; col += 5, ++c) { - cvs[cs[c]].push_back(rawData[row][col]); - } - } - } - constexpr float MAX_OUT_VALUE = 65000.f; - t2.set(); + // Get multipliers for a known, fixed WB setting, that will be the starting point + // for balancing the converted image. + const std::array wb_mul = calcWBMults( + ColorTemp(3500., 1., 1., "Custom"), imatrices, ri, ref_pre_mul); - if (settings->verbose) { - printf("Median vector fill loop time us: %d\n", t2.etime(t1)); + + if (rtengine::settings->verbose) { + printf("Fixed WB mults: %g %g %g\n", wb_mul[0], wb_mul[1], wb_mul[2]); } - t2.set(); + // Compensation factor to restore the non-autoWB initialGain (see RawImageSource::load) + const float autoGainComp = camInitialGain / initialGain; - std::array medians; // Channel median values - std::array mults = { - 1.f, - 1.f, - 1.f - }; // Channel normalization multipliers + std::array mults; // Channel normalization multipliers + + // If film base values are set in params, use those + if (filmBaseValues[0] <= 0.f) { + // ...otherwise, the film negative tool might have just been enabled on this image, + // whithout any previous setting. So, estimate film base values from channel medians + + std::array medians; + + // Special value for backwards compatibility with profiles saved by RT 5.7 + const bool oldChannelScaling = filmBaseValues[0] == -1.f; + + // If using the old channel scaling method, get medians from the whole current image, + // reading values from the already-scaled rawData buffer. + if (oldChannelScaling) { + calcMedians(ri, rawData, 0, 0, W, H, medians); + } else { + // Cut 20% border from medians calculation. It will probably contain outlier values + // from the film holder, which will bias the median result. + const int bW = W * 20 / 100; + const int bH = H * 20 / 100; + calcMedians(ri, rawData, bW, bH, W - bW, H - bH, medians); + } + + // Un-scale rawData medians + for (int c = 0; c < 3; ++c) { + medians[c] /= scale_mul[c]; + } + + if (settings->verbose) { + printf("Channel medians: R=%g, G=%g, B=%g\n", medians[0], medians[1], medians[2]); + } + + for (int c = 0; c < 3; ++c) { + + // Estimate film base values, so that in the output data, each channel + // median will correspond to 1/24th of MAX. + filmBaseValues[c] = pow_F(24.f / 512.f, 1.f / exps[c]) * medians[c]; + + if (oldChannelScaling) { + // If using the old channel scaling method, apply WB multipliers here to undo their + // effect later, since fixed wb compensation was not used in previous version. + // Also, undo the effect of the autoGainComp factor (see below). + filmBaseValues[c] /= pow_F((wb_mul[c] / autoGainComp), 1.f / exps[c]);// / autoGainComp; + } - for (int c = 0; c < 3; ++c) { - // Find median values for each channel - if (!cvs[c].empty()) { - findMinMaxPercentile(cvs[c].data(), cvs[c].size(), 0.5f, medians[c], 0.5f, medians[c], true); - medians[c] = pow_F(rtengine::max(medians[c], 1.f), exps[c]); - // Determine the channel multiplier so that N times the median becomes 65k. This clips away - // the values in the dark border surrounding the negative (due to the film holder, for example), - // the reciprocal of which have blown up to stellar values. - mults[c] = MAX_OUT_VALUE / (medians[c] * 24.f); } } - t3.set(); + + // Calculate multipliers based on previously obtained film base input values. + + // Apply current scaling coefficients to raw, unscaled base values. + std::array fb = { + filmBaseValues[0] * scale_mul[0], + filmBaseValues[1] * scale_mul[1], + filmBaseValues[2] * scale_mul[2] + }; if (settings->verbose) { - printf("Sample count: %zu, %zu, %zu\n", cvs[0].size(), cvs[1].size(), cvs[2].size()); - printf("Medians: %g %g %g\n", static_cast(medians[0]), static_cast(medians[1]), static_cast(medians[2])); - printf("Computed multipliers: %g %g %g\n", static_cast(mults[0]), static_cast(mults[1]), static_cast(mults[2])); - printf("Median calc time us: %d\n", t3.etime(t2)); + printf("Input film base values: %g %g %g\n", fb[0], fb[1], fb[2]); } + for (int c = 0; c < 3; ++c) { + // Apply channel exponents, to obtain the corresponding base values in the output data + fb[c] = pow_F(rtengine::max(fb[c], 1.f), exps[c]); + + // Determine the channel multiplier so that the film base value is 1/512th of max. + mults[c] = (MAX_OUT_VALUE / 512.f) / fb[c]; + + // Un-apply the fixed WB multipliers, to reverse their effect later in the WB tool. + // This way, the output image will be adapted to this fixed WB setting + mults[c] /= wb_mul[c]; + + // Also compensate for the initialGain difference between the default scaling (forceAutoWB=true) + // and the non-autoWB scaling (see camInitialGain). + // This effectively restores camera scaling multipliers, and gives us stable multipliers + // (not depending on image content). + mults[c] *= autoGainComp; + + } + + if (settings->verbose) { + printf("Output film base values: %g %g %g\n", static_cast(fb[0]), static_cast(fb[1]), static_cast(fb[2])); + printf("Computed multipliers: %g %g %g\n", static_cast(mults[0]), static_cast(mults[1]), static_cast(mults[2])); + } + + constexpr float CLIP_VAL = 65535.f; - t3.set(); + MyTime t1, t2, t3; + + t1.set(); if (ri->getSensorType() == ST_BAYER) { #ifdef __SSE2__ @@ -264,6 +428,7 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ #ifdef _OPENMP #pragma omp parallel for schedule(dynamic, 16) #endif + for (int row = 0; row < H; ++row) { int col = 0; // Avoid trouble with zeroes, minimum pixel value is 1. @@ -274,14 +439,18 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ #ifdef __SSE2__ const vfloat expsv = _mm_setr_ps(exps0, exps1, exps0, exps1); const vfloat multsv = _mm_setr_ps(mult0, mult1, mult0, mult1); + for (; col < W - 3; col += 4) { STVFU(rawData[row][col], vminf(multsv * pow_F(vmaxf(LVFU(rawData[row][col]), onev), expsv), clipv)); } + #endif // __SSE2__ + for (; col < W - 1; col += 2) { rawData[row][col] = rtengine::min(mult0 * pow_F(rtengine::max(rawData[row][col], 1.f), exps0), CLIP_VAL); rawData[row][col + 1] = rtengine::min(mult1 * pow_F(rtengine::max(rawData[row][col + 1], 1.f), exps1), CLIP_VAL); } + if (col < W) { rawData[row][col] = rtengine::min(mult0 * pow_F(rtengine::max(rawData[row][col], 1.f), exps0), CLIP_VAL); } @@ -295,6 +464,7 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ #ifdef _OPENMP #pragma omp parallel for schedule(dynamic, 16) #endif + for (int row = 0; row < H; row ++) { int col = 0; // Avoid trouble with zeroes, minimum pixel value is 1. @@ -321,30 +491,34 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ const vfloat multsv0 = _mm_setr_ps(multsc[0], multsc[1], multsc[2], multsc[3]); const vfloat multsv1 = _mm_setr_ps(multsc[4], multsc[5], multsc[0], multsc[1]); const vfloat multsv2 = _mm_setr_ps(multsc[2], multsc[3], multsc[4], multsc[5]); + for (; col < W - 11; col += 12) { STVFU(rawData[row][col], vminf(multsv0 * pow_F(vmaxf(LVFU(rawData[row][col]), onev), expsv0), clipv)); STVFU(rawData[row][col + 4], vminf(multsv1 * pow_F(vmaxf(LVFU(rawData[row][col + 4]), onev), expsv1), clipv)); STVFU(rawData[row][col + 8], vminf(multsv2 * pow_F(vmaxf(LVFU(rawData[row][col + 8]), onev), expsv2), clipv)); } + #endif // __SSE2__ + for (; col < W - 5; col += 6) { for (int c = 0; c < 6; ++c) { rawData[row][col + c] = rtengine::min(multsc[c] * pow_F(rtengine::max(rawData[row][col + c], 1.f), expsc[c]), CLIP_VAL); } } + for (int c = 0; col < W; col++, c++) { rawData[row][col + c] = rtengine::min(multsc[c] * pow_F(rtengine::max(rawData[row][col + c], 1.f), expsc[c]), CLIP_VAL); } } } - t4.set(); + t2.set(); if (settings->verbose) { - printf("Pow loop time us: %d\n", t4.etime(t3)); + printf("Pow loop time us: %d\n", t2.etime(t1)); } - t4.set(); + t2.set(); PixelsMap bitmapBads(W, H); @@ -354,6 +528,7 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ #ifdef _OPENMP #pragma omp parallel for reduction(+:totBP) schedule(dynamic,16) #endif + for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { if (rawData[i][j] >= MAX_OUT_VALUE) { @@ -367,11 +542,11 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ interpolateBadPixelsBayer(bitmapBads, rawData); } - } - else if (ri->getSensorType() == ST_FUJI_XTRANS) { + } else if (ri->getSensorType() == ST_FUJI_XTRANS) { #ifdef _OPENMP #pragma omp parallel for reduction(+:totBP) schedule(dynamic,16) #endif + for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { if (rawData[i][j] >= MAX_OUT_VALUE) { @@ -386,10 +561,10 @@ void rtengine::RawImageSource::filmNegativeProcess(const procparams::FilmNegativ } } - t5.set(); + t3.set(); if (settings->verbose) { printf("Bad pixels count: %d\n", totBP); - printf("Bad pixels interpolation time us: %d\n", t5.etime(t4)); + printf("Bad pixels interpolation time us: %d\n", t3.etime(t2)); } } diff --git a/rtengine/filmnegativethumb.cc b/rtengine/filmnegativethumb.cc index 003fab8e0..57f2601f9 100644 --- a/rtengine/filmnegativethumb.cc +++ b/rtengine/filmnegativethumb.cc @@ -18,6 +18,7 @@ */ #include +#include "colortemp.h" #include "LUT.h" #include "rtengine.h" #include "rtthumbnail.h" @@ -29,70 +30,179 @@ #define BENCHMARK #include "StopWatch.h" +namespace +{ + +using rtengine::Imagefloat; +using rtengine::findMinMaxPercentile; + + +void calcMedians( + const Imagefloat* baseImg, + const int x1, const int y1, + const int x2, const int y2, + float &rmed, float &gmed, float &bmed +) +{ + // Channel vectors to calculate medians + std::vector rv, gv, bv; + + const int sz = std::max(0, (y2 - y1) * (x2 - x1)); + rv.reserve(sz); + gv.reserve(sz); + bv.reserve(sz); + + for (int i = y1; i < y2; i++) { + for (int j = x1; j < x2; j++) { + rv.push_back(baseImg->r(i, j)); + gv.push_back(baseImg->g(i, j)); + bv.push_back(baseImg->b(i, j)); + } + } + + // Calculate channel medians from whole image + findMinMaxPercentile(rv.data(), rv.size(), 0.5f, rmed, 0.5f, rmed, true); + findMinMaxPercentile(gv.data(), gv.size(), 0.5f, gmed, 0.5f, gmed, true); + findMinMaxPercentile(bv.data(), bv.size(), 0.5f, bmed, 0.5f, bmed, true); +} + +} + void rtengine::Thumbnail::processFilmNegative( const procparams::ProcParams ¶ms, const Imagefloat* baseImg, - const int rwidth, const int rheight, - float &rmi, float &gmi, float &bmi -) { + const int rwidth, const int rheight +) +{ // Channel exponents const float rexp = -params.filmNegative.redRatio * params.filmNegative.greenExp; const float gexp = -params.filmNegative.greenExp; const float bexp = -params.filmNegative.blueRatio * params.filmNegative.greenExp; - // Need to calculate channel averages, to fake the same conditions - // found in rawimagesource, where get_ColorsCoeff is called with - // forceAutoWB=true. - float rsum = 0.f, gsum = 0.f, bsum = 0.f; - - // Channel vectors to calculate medians - std::vector rv, gv, bv; - - for (int i = 0; i < rheight; i++) { - for (int j = 0; j < rwidth; j++) { - const float r = baseImg->r(i, j); - const float g = baseImg->g(i, j); - const float b = baseImg->b(i, j); - - rsum += r; - gsum += g; - bsum += b; - - rv.push_back(r); - gv.push_back(g); - bv.push_back(b); - } - } - - const float ravg = rsum / (rheight*rwidth); - const float gavg = gsum / (rheight*rwidth); - const float bavg = bsum / (rheight*rwidth); - - // Shifting current WB multipliers, based on channel averages. - rmi /= (gavg/ravg); - // gmi /= (gAvg/gAvg); green chosen as reference channel - bmi /= (gavg/bavg); - - float rmed, gmed, bmed; - findMinMaxPercentile(rv.data(), rv.size(), 0.5f, rmed, 0.5f, rmed, true); - findMinMaxPercentile(gv.data(), gv.size(), 0.5f, gmed, 0.5f, gmed, true); - findMinMaxPercentile(bv.data(), bv.size(), 0.5f, bmed, 0.5f, bmed, true); - - rmed = powf(rmed, rexp); - gmed = powf(gmed, gexp); - bmed = powf(bmed, bexp); + // Calculate output multipliers + float rmult, gmult, bmult; const float MAX_OUT_VALUE = 65000.f; - const float rmult = (MAX_OUT_VALUE / (rmed * 24)) ; - const float gmult = (MAX_OUT_VALUE / (gmed * 24)) ; - const float bmult = (MAX_OUT_VALUE / (bmed * 24)) ; + + // For backwards compatibility with profiles saved by RT 5.7 + const bool oldChannelScaling = params.filmNegative.redBase == -1.f; + + // If the film base values are not set in params, estimate multipliers from each channel's median value. + if (params.filmNegative.redBase <= 0.f) { + + // Channel medians + float rmed, gmed, bmed; + + if (oldChannelScaling) { + // If using the old method, calculate nedians on the whole image + calcMedians(baseImg, 0, 0, rwidth, rheight, rmed, gmed, bmed); + } else { + // The new method cuts out a 20% border from medians calculation. + const int bW = rwidth * 20 / 100; + const int bH = rheight * 20 / 100; + calcMedians(baseImg, bW, bH, rwidth - bW, rheight - bH, rmed, gmed, bmed); + } + + if (settings->verbose) { + printf("Thumbnail input channel medians: %g %g %g\n", rmed, gmed, bmed); + } + + // Calculate output medians + rmed = powf(rmed, rexp); + gmed = powf(gmed, gexp); + bmed = powf(bmed, bexp); + + // Calculate output multipliers so that the median value is 1/24 of the output range. + rmult = (MAX_OUT_VALUE / 24.f) / rmed; + gmult = (MAX_OUT_VALUE / 24.f) / gmed; + bmult = (MAX_OUT_VALUE / 24.f) / bmed; + + } else { + + // Read film-base values from params + float rbase = params.filmNegative.redBase; + float gbase = params.filmNegative.greenBase; + float bbase = params.filmNegative.blueBase; + + // Reconstruct scale_mul coefficients from thumbnail metadata: + // redMultiplier / camwbRed is pre_mul[0] + // pre_mul[0] * scaleGain is scale_mul[0] + // Apply channel scaling to raw (unscaled) input base values, to + // match with actual (scaled) data in baseImg + rbase *= (redMultiplier / camwbRed) * scaleGain; + gbase *= (greenMultiplier / camwbGreen) * scaleGain; + bbase *= (blueMultiplier / camwbBlue) * scaleGain; + + if (settings->verbose) { + printf("Thumbnail input film base values: %g %g %g\n", rbase, gbase, bbase); + } + + // Apply exponents to get output film base values + rbase = powf(rbase, rexp); + gbase = powf(gbase, gexp); + bbase = powf(bbase, bexp); + + if (settings->verbose) { + printf("Thumbnail output film base values: %g %g %g\n", rbase, gbase, bbase); + } + + // Calculate multipliers so that film base value is 1/512th of the output range. + rmult = (MAX_OUT_VALUE / 512.f) / rbase; + gmult = (MAX_OUT_VALUE / 512.f) / gbase; + bmult = (MAX_OUT_VALUE / 512.f) / bbase; + + } + + + if (oldChannelScaling) { + // Need to calculate channel averages, to fake the same conditions + // found in rawimagesource, where get_ColorsCoeff is called with + // forceAutoWB=true. + float rsum = 0.f, gsum = 0.f, bsum = 0.f; + + for (int i = 0; i < rheight; i++) { + for (int j = 0; j < rwidth; j++) { + rsum += baseImg->r(i, j); + gsum += baseImg->g(i, j); + bsum += baseImg->b(i, j); + } + } + + const float ravg = rsum / (rheight * rwidth); + const float gavg = gsum / (rheight * rwidth); + const float bavg = bsum / (rheight * rwidth); + + // Shifting current WB multipliers, based on channel averages. + rmult /= gavg / ravg; + // gmult /= gAvg / gAvg; green chosen as reference channel + bmult /= gavg / bavg; + + } else { + + // Get and un-apply multipliers to adapt the thumbnail to a known fixed WB setting, + // as in the main image processing. + + double r, g, b; + ColorTemp(3500., 1., 1., "Custom").getMultipliers(r, g, b); + //iColorMatrix is cam_rgb + const double rm = camwbRed / (iColorMatrix[0][0] * r + iColorMatrix[0][1] * g + iColorMatrix[0][2] * b); + const double gm = camwbGreen / (iColorMatrix[1][0] * r + iColorMatrix[1][1] * g + iColorMatrix[1][2] * b); + const double bm = camwbBlue / (iColorMatrix[2][0] * r + iColorMatrix[2][1] * g + iColorMatrix[2][2] * b); + + // Normalize max WB multiplier to 1.f + const double m = max(rm, gm, bm); + rmult /= rm / m; + gmult /= gm / m; + bmult /= bm / m; + } + if (settings->verbose) { - printf("Thumbnail channel medians: %g %g %g\n", static_cast(rmed), static_cast(gmed), static_cast(bmed)); printf("Thumbnail computed multipliers: %g %g %g\n", static_cast(rmult), static_cast(gmult), static_cast(bmult)); } + #ifdef __SSE2__ const vfloat clipv = F2V(MAXVALF); const vfloat rexpv = F2V(rexp); @@ -109,12 +219,15 @@ void rtengine::Thumbnail::processFilmNegative( float *bline = baseImg->b(i); int j = 0; #ifdef __SSE2__ - for (; j < rwidth - 3; j +=4) { + + for (; j < rwidth - 3; j += 4) { STVFU(rline[j], vminf(rmultv * pow_F(LVFU(rline[j]), rexpv), clipv)); STVFU(gline[j], vminf(gmultv * pow_F(LVFU(gline[j]), gexpv), clipv)); STVFU(bline[j], vminf(bmultv * pow_F(LVFU(bline[j]), bexpv), clipv)); } + #endif + for (; j < rwidth; ++j) { rline[j] = CLIP(rmult * pow_F(rline[j], rexp)); gline[j] = CLIP(gmult * pow_F(gline[j], gexp)); diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index d1008837d..ea049d37c 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -92,8 +92,9 @@ public: ~ImageSource () override {} virtual int load (const Glib::ustring &fname) = 0; virtual void preprocess (const procparams::RAWParams &raw, const procparams::LensProfParams &lensProf, const procparams::CoarseTransformParams& coarse, bool prepareDenoise = true) {}; - virtual void filmNegativeProcess (const procparams::FilmNegativeParams ¶ms) {}; + virtual void filmNegativeProcess (const procparams::FilmNegativeParams ¶ms, std::array& filmBaseValues) {}; virtual bool getFilmNegativeExponents (Coord2D spotA, Coord2D spotB, int tran, const procparams::FilmNegativeParams& currentParams, std::array& newExps) { return false; }; + virtual bool getRawSpotValues (Coord2D spot, int spotSize, int tran, const procparams::FilmNegativeParams ¶ms, std::array& rawValues) { return false; }; virtual void demosaic (const procparams::RAWParams &raw, bool autoContrast, double &contrastThreshold, bool cache = false) {}; virtual void retinex (const procparams::ColorManagementParams& cmp, const procparams::RetinexParams &deh, const procparams::ToneCurveParams& Tc, LUTf & cdcurve, LUTf & mapcurve, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool mapcontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) {}; virtual void retinexPrepareCurves (const procparams::RetinexParams &retinexParams, LUTf &cdcurve, LUTf &mapcurve, RetinextransmissionCurve &retinextransmissionCurve, RetinexgaintransmissionCurve &retinexgaintransmissionCurve, bool &retinexcontlutili, bool &mapcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) {}; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 6374cb837..f68616b96 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -44,6 +44,22 @@ #include #endif +namespace +{ +using rtengine::Coord2D; +Coord2D translateCoord(const rtengine::ImProcFunctions& ipf, int fw, int fh, int x, int y) { + + const std::vector points = {Coord2D(x, y)}; + + std::vector red; + std::vector green; + std::vector blue; + ipf.transCoord(fw, fh, points, red, green, blue); + + return green[0]; +} + +} namespace rtengine { @@ -300,7 +316,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ) && params->filmNegative.enabled ) { - imgsrc->filmNegativeProcess(params->filmNegative); + std::array filmBaseValues = { + static_cast(params->filmNegative.redBase), + static_cast(params->filmNegative.greenBase), + static_cast(params->filmNegative.blueBase) + }; + imgsrc->filmNegativeProcess(params->filmNegative, filmBaseValues); + if (filmNegListener && params->filmNegative.redBase <= 0.f) { + filmNegListener->filmBaseValuesChanged(filmBaseValues); + } } } @@ -1481,27 +1505,22 @@ bool ImProcCoordinator::getFilmNegativeExponents(int xA, int yA, int xB, int yB, { MyMutex::MyLock lock(mProcessing); - const auto xlate = - [this](int x, int y) -> Coord2D - { - const std::vector points = {Coord2D(x, y)}; - - std::vector red; - std::vector green; - std::vector blue; - ipf.transCoord(fw, fh, points, red, green, blue); - - return green[0]; - }; - const int tr = getCoarseBitMask(params->coarse); - const Coord2D p1 = xlate(xA, yA); - const Coord2D p2 = xlate(xB, yB); + const Coord2D p1 = translateCoord(ipf, fw, fh, xA, yA); + const Coord2D p2 = translateCoord(ipf, fw, fh, xB, yB); return imgsrc->getFilmNegativeExponents(p1, p2, tr, params->filmNegative, newExps); } +bool ImProcCoordinator::getRawSpotValues(int x, int y, int spotSize, std::array& rawValues) +{ + MyMutex::MyLock lock(mProcessing); + + return imgsrc->getRawSpotValues(translateCoord(ipf, fw, fh, x, y), spotSize, + getCoarseBitMask(params->coarse), params->filmNegative, rawValues); +} + void ImProcCoordinator::getAutoCrop(double ratio, int &x, int &y, int &w, int &h) { diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index d7d6052e9..e17d88183 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -175,6 +175,7 @@ protected: AutoRadiusListener *pdSharpenAutoRadiusListener; FrameCountListener *frameCountListener; ImageTypeListener *imageTypeListener; + FilmNegListener *filmNegListener; AutoColorTonListener* actListener; AutoChromaListener* adnListener; @@ -281,6 +282,7 @@ public: void getCamWB (double& temp, double& green) override; void getSpotWB (int x, int y, int rectSize, double& temp, double& green) override; bool getFilmNegativeExponents(int xA, int yA, int xB, int yB, std::array& newExps) override; + bool getRawSpotValues(int x, int y, int spotSize, std::array& rawValues) override; void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) override; bool getHighQualComputed() override; void setHighQualComputed() override; @@ -389,6 +391,11 @@ public: imageTypeListener = itl; } + void setFilmNegListener (FilmNegListener* fnl) override + { + filmNegListener = fnl; + } + void saveInputICCReference (const Glib::ustring& fname, bool apply_wb) override; InitialImage* getInitialImage () override diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index b02f1970c..a198a6813 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2890,7 +2890,10 @@ FilmNegativeParams::FilmNegativeParams() : enabled(false), redRatio(1.36), greenExp(1.5), - blueRatio(0.86) + blueRatio(0.86), + redBase(0), + greenBase(0), + blueBase(0) { } @@ -2898,9 +2901,12 @@ bool FilmNegativeParams::operator ==(const FilmNegativeParams& other) const { return enabled == other.enabled - && redRatio == other.redRatio + && redRatio == other.redRatio && greenExp == other.greenExp - && blueRatio == other.blueRatio; + && blueRatio == other.blueRatio + && redBase == other.redBase + && greenBase == other.greenBase + && blueBase == other.blueBase; } bool FilmNegativeParams::operator !=(const FilmNegativeParams& other) const @@ -3789,6 +3795,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->filmNegative.redRatio, "Film Negative", "RedRatio", filmNegative.redRatio, keyFile); saveToKeyfile(!pedited || pedited->filmNegative.greenExp, "Film Negative", "GreenExponent", filmNegative.greenExp, keyFile); saveToKeyfile(!pedited || pedited->filmNegative.blueRatio, "Film Negative", "BlueRatio", filmNegative.blueRatio, keyFile); + saveToKeyfile(!pedited || pedited->filmNegative.baseValues, "Film Negative", "RedBase", filmNegative.redBase, keyFile); + saveToKeyfile(!pedited || pedited->filmNegative.baseValues, "Film Negative", "GreenBase", filmNegative.greenBase, keyFile); + saveToKeyfile(!pedited || pedited->filmNegative.baseValues, "Film Negative", "BlueBase", filmNegative.blueBase, keyFile); // EXIF change list if (!pedited || pedited->exif) { @@ -5386,6 +5395,24 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Film Negative", "RedRatio", pedited, filmNegative.redRatio, pedited->filmNegative.redRatio); assignFromKeyfile(keyFile, "Film Negative", "GreenExponent", pedited, filmNegative.greenExp, pedited->filmNegative.greenExp); assignFromKeyfile(keyFile, "Film Negative", "BlueRatio", pedited, filmNegative.blueRatio, pedited->filmNegative.blueRatio); + if (ppVersion >= 347) { + bool r, g, b; + assignFromKeyfile(keyFile, "Film Negative", "RedBase", pedited, filmNegative.redBase, r); + assignFromKeyfile(keyFile, "Film Negative", "GreenBase", pedited, filmNegative.greenBase, g); + assignFromKeyfile(keyFile, "Film Negative", "BlueBase", pedited, filmNegative.blueBase, b); + if (pedited) { + pedited->filmNegative.baseValues = r || g || b; + } + } else { + // Backwards compatibility with film negative in RT 5.7: use special film base value -1, + // to signal that the old channel scaling method should be used. + filmNegative.redBase = -1.f; + filmNegative.greenBase = -1.f; + filmNegative.blueBase = -1.f; + if (pedited) { + pedited->filmNegative.baseValues = true; + } + } } if (keyFile.has_group("MetaData")) { diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 4e2b0c275..f9710b01d 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1559,6 +1559,10 @@ struct FilmNegativeParams { double greenExp; double blueRatio; + double redBase; + double greenBase; + double blueBase; + FilmNegativeParams(); bool operator ==(const FilmNegativeParams& other) const; diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 71478fbed..770c18ae3 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -124,8 +124,9 @@ public: int load(const Glib::ustring &fname) override { return load(fname, false); } int load(const Glib::ustring &fname, bool firstFrameOnly); void preprocess (const procparams::RAWParams &raw, const procparams::LensProfParams &lensProf, const procparams::CoarseTransformParams& coarse, bool prepareDenoise = true) override; - void filmNegativeProcess (const procparams::FilmNegativeParams ¶ms) override; + void filmNegativeProcess (const procparams::FilmNegativeParams ¶ms, std::array& filmBaseValues) override; bool getFilmNegativeExponents (Coord2D spotA, Coord2D spotB, int tran, const procparams::FilmNegativeParams ¤tParams, std::array& newExps) override; + bool getRawSpotValues(Coord2D spot, int spotSize, int tran, const procparams::FilmNegativeParams ¶ms, std::array& rawValues) override; void demosaic (const procparams::RAWParams &raw, bool autoContrast, double &contrastThreshold, bool cache = false) override; void retinex (const procparams::ColorManagementParams& cmp, const procparams::RetinexParams &deh, const procparams::ToneCurveParams& Tc, LUTf & cdcurve, LUTf & mapcurve, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool mapcontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) override; void retinexPrepareCurves (const procparams::RetinexParams &retinexParams, LUTf &cdcurve, LUTf &mapcurve, RetinextransmissionCurve &retinextransmissionCurve, RetinexgaintransmissionCurve &retinexgaintransmissionCurve, bool &retinexcontlutili, bool &mapcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) override; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index e6074d50b..028cedec9 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -439,6 +439,13 @@ public: }; +class FilmNegListener +{ +public: + virtual ~FilmNegListener() = default; + virtual void filmBaseValuesChanged(std::array rgb) = 0; +}; + /** This class represents a detailed part of the image (looking through a kind of window). * It can be created and destroyed with the appropriate members of StagedImageProcessor. * Several crops can be assigned to the same image. */ @@ -524,6 +531,8 @@ public: virtual void getCamWB (double& temp, double& green) = 0; virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) = 0; virtual bool getFilmNegativeExponents(int xA, int yA, int xB, int yB, std::array& newExps) = 0; + virtual bool getRawSpotValues (int x, int y, int spotSize, std::array& rawValues) = 0; + virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) = 0; virtual void saveInputICCReference (const Glib::ustring& fname, bool apply_wb) = 0; @@ -548,6 +557,7 @@ public: virtual void setRetinexListener (RetinexListener* l) = 0; virtual void setWaveletListener (WaveletListener* l) = 0; virtual void setImageTypeListener (ImageTypeListener* l) = 0; + virtual void setFilmNegListener (FilmNegListener* l) = 0; virtual void setMonitorProfile (const Glib::ustring& monitorProfile, RenderingIntent intent) = 0; virtual void getMonitorProfile (Glib::ustring& monitorProfile, RenderingIntent& intent) const = 0; diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index a063d965b..e8126be36 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -594,6 +594,8 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati tpp->defGain = max (scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]) / min (scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]); tpp->defGain *= std::pow(2, ri->getBaselineExposure()); + tpp->scaleGain = scale_mul[0] / pre_mul[0]; // used to reconstruct scale_mul from filmnegativethumb.cc + tpp->gammaCorrected = true; unsigned filter = ri->get_filters(); @@ -1042,6 +1044,7 @@ Thumbnail::Thumbnail () : scaleForSave (8192), gammaCorrected (false), colorMatrix{}, + scaleGain (1.0), isRaw (true) { } @@ -1179,7 +1182,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT Imagefloat* baseImg = resizeTo (rwidth, rheight, interp, thumbImg); if (isRaw && params.filmNegative.enabled) { - processFilmNegative(params, baseImg, rwidth, rheight, rmi, gmi, bmi); + processFilmNegative(params, baseImg, rwidth, rheight); } if (params.coarse.rotate) { @@ -2122,6 +2125,10 @@ bool Thumbnail::readData (const Glib::ustring& fname) colorMatrix[i][j] = cm[ix++]; } } + + if (keyFile.has_key ("LiveThumbData", "ScaleGain")) { + scaleGain = keyFile.get_double ("LiveThumbData", "ScaleGain"); + } } return true; @@ -2173,6 +2180,7 @@ bool Thumbnail::writeData (const Glib::ustring& fname) keyFile.set_boolean ("LiveThumbData", "GammaCorrected", gammaCorrected); Glib::ArrayHandle cm ((double*)colorMatrix, 9, Glib::OWNERSHIP_NONE); keyFile.set_double_list ("LiveThumbData", "ColorMatrix", cm); + keyFile.set_double ("LiveThumbData", "ScaleGain", scaleGain); keyData = keyFile.to_data (); diff --git a/rtengine/rtthumbnail.h b/rtengine/rtthumbnail.h index ccca1c582..a0033d35f 100644 --- a/rtengine/rtthumbnail.h +++ b/rtengine/rtthumbnail.h @@ -75,8 +75,9 @@ class Thumbnail int scaleForSave; bool gammaCorrected; double colorMatrix[3][3]; + double scaleGain; - void processFilmNegative(const procparams::ProcParams& params, const Imagefloat* baseImg, int rwidth, int rheight, float &rmi, float &gmi, float &bmi); + void processFilmNegative(const procparams::ProcParams& params, const Imagefloat* baseImg, int rwidth, int rheight); public: diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 14df16550..14a594ac2 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -221,7 +221,12 @@ private: // After preprocess, run film negative processing if enabled if ((imgsrc->getSensorType() == ST_BAYER || (imgsrc->getSensorType() == ST_FUJI_XTRANS)) && params.filmNegative.enabled) { - imgsrc->filmNegativeProcess (params.filmNegative); + std::array filmBaseValues = { + static_cast(params.filmNegative.redBase), + static_cast(params.filmNegative.greenBase), + static_cast(params.filmNegative.blueBase) + }; + imgsrc->filmNegativeProcess (params.filmNegative, filmBaseValues); } if (pl) { diff --git a/rtgui/filmnegative.cc b/rtgui/filmnegative.cc index 90cedf148..1b105a3ec 100644 --- a/rtgui/filmnegative.cc +++ b/rtgui/filmnegative.cc @@ -44,6 +44,17 @@ Adjuster* createExponentAdjuster(AdjusterListener* listener, const Glib::ustring return adj; } +Glib::ustring formatBaseValues(const std::array& rgb) +{ + if (rgb[0] <= 0.f && rgb[1] <= 0.f && rgb[2] <= 0.f) { + return "- - -"; + } else { + return Glib::ustring::format(std::fixed, std::setprecision(1), rgb[0]) + " " + + Glib::ustring::format(std::fixed, std::setprecision(1), rgb[1]) + " " + + Glib::ustring::format(std::fixed, std::setprecision(1), rgb[2]); + } +} + } FilmNegative::FilmNegative() : @@ -51,12 +62,17 @@ FilmNegative::FilmNegative() : EditSubscriber(ET_OBJECTS), evFilmNegativeExponents(ProcEventMapper::getInstance()->newEvent(FIRST, "HISTORY_MSG_FILMNEGATIVE_VALUES")), evFilmNegativeEnabled(ProcEventMapper::getInstance()->newEvent(FIRST, "HISTORY_MSG_FILMNEGATIVE_ENABLED")), + evFilmBaseValues(ProcEventMapper::getInstance()->newEvent(FIRST, "HISTORY_MSG_FILMNEGATIVE_FILMBASE")), + filmBaseValues({0.f, 0.f, 0.f}), fnp(nullptr), greenExp(createExponentAdjuster(this, M("TP_FILMNEGATIVE_GREEN"), 0.3, 4, 1.5)), // master exponent (green channel) redRatio(createExponentAdjuster(this, M("TP_FILMNEGATIVE_RED"), 0.3, 3, (2.04 / 1.5))), // ratio of red exponent to master exponent blueRatio(createExponentAdjuster(this, M("TP_FILMNEGATIVE_BLUE"), 0.3, 3, (1.29 / 1.5))), // ratio of blue exponent to master exponent spotgrid(Gtk::manage(new Gtk::Grid())), - spotbutton(Gtk::manage(new Gtk::ToggleButton(M("TP_FILMNEGATIVE_PICK")))) + spotbutton(Gtk::manage(new Gtk::ToggleButton(M("TP_FILMNEGATIVE_PICK")))), + filmBaseLabel(Gtk::manage(new Gtk::Label(M("TP_FILMNEGATIVE_FILMBASE_VALUES"), Gtk::ALIGN_START))), + filmBaseValuesLabel(Gtk::manage(new Gtk::Label("- - -"))), + filmBaseSpotButton(Gtk::manage(new Gtk::ToggleButton(M("TP_FILMNEGATIVE_FILMBASE_PICK")))) { spotgrid->get_style_context()->add_class("grid-spacing"); setExpandAlignProperties(spotgrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); @@ -64,7 +80,10 @@ FilmNegative::FilmNegative() : setExpandAlignProperties(spotbutton, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); spotbutton->get_style_context()->add_class("independent"); spotbutton->set_tooltip_text(M("TP_FILMNEGATIVE_GUESS_TOOLTIP")); - spotbutton->set_image (*Gtk::manage (new RTImage ("color-picker-small.png"))); + spotbutton->set_image(*Gtk::manage(new RTImage("color-picker-small.png"))); + + filmBaseSpotButton->set_tooltip_text(M("TP_FILMNEGATIVE_FILMBASE_TOOLTIP")); + setExpandAlignProperties(filmBaseValuesLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); // TODO make spot size configurable ? @@ -81,7 +100,7 @@ FilmNegative::FilmNegative() : // spotsize->set_active(0); // spotsize->append ("4"); - spotgrid->attach (*spotbutton, 0, 1, 1, 1); + spotgrid->attach(*spotbutton, 0, 1, 1, 1); // spotgrid->attach (*slab, 1, 0, 1, 1); // spotgrid->attach (*wbsizehelper, 2, 0, 1, 1); @@ -90,13 +109,26 @@ FilmNegative::FilmNegative() : pack_start(*blueRatio, Gtk::PACK_SHRINK, 0); pack_start(*spotgrid, Gtk::PACK_SHRINK, 0); + Gtk::HSeparator* const sep = Gtk::manage(new Gtk::HSeparator()); + sep->get_style_context()->add_class("grid-row-separator"); + pack_start(*sep, Gtk::PACK_SHRINK, 0); + + Gtk::Grid* const fbGrid = Gtk::manage(new Gtk::Grid()); + fbGrid->attach(*filmBaseLabel, 0, 0, 1, 1); + fbGrid->attach(*filmBaseValuesLabel, 1, 0, 1, 1); + pack_start(*fbGrid, Gtk::PACK_SHRINK, 0); + + pack_start(*filmBaseSpotButton, Gtk::PACK_SHRINK, 0); + spotbutton->signal_toggled().connect(sigc::mem_fun(*this, &FilmNegative::editToggled)); // spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) ); + filmBaseSpotButton->signal_toggled().connect(sigc::mem_fun(*this, &FilmNegative::baseSpotToggled)); + // Editing geometry; create the spot rectangle Rectangle* const spotRect = new Rectangle(); spotRect->filled = false; - + visibleGeometry.push_back(spotRect); // Stick a dummy rectangle over the whole image in mouseOverGeometry. @@ -134,6 +166,14 @@ void FilmNegative::read(const rtengine::procparams::ProcParams* pp, const Params greenExp->setValue(pp->filmNegative.greenExp); blueRatio->setValue(pp->filmNegative.blueRatio); + filmBaseValues[0] = pp->filmNegative.redBase; + filmBaseValues[1] = pp->filmNegative.greenBase; + filmBaseValues[2] = pp->filmNegative.blueBase; + + // If base values are not set in params, estimated values will be passed in later + // (after processing) via FilmNegListener + filmBaseValuesLabel->set_text(formatBaseValues(filmBaseValues)); + enableListener(); } @@ -142,14 +182,23 @@ void FilmNegative::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped pp->filmNegative.redRatio = redRatio->getValue(); pp->filmNegative.greenExp = greenExp->getValue(); pp->filmNegative.blueRatio = blueRatio->getValue(); + pp->filmNegative.enabled = getEnabled(); if (pedited) { pedited->filmNegative.redRatio = redRatio->getEditedState(); pedited->filmNegative.greenExp = greenExp->getEditedState(); pedited->filmNegative.blueRatio = blueRatio->getEditedState(); + pedited->filmNegative.baseValues = filmBaseValues[0] != pp->filmNegative.redBase + || filmBaseValues[1] != pp->filmNegative.greenBase + || filmBaseValues[2] != pp->filmNegative.blueBase; pedited->filmNegative.enabled = !get_inconsistent(); } + + pp->filmNegative.redBase = filmBaseValues[0]; + pp->filmNegative.greenBase = filmBaseValues[1]; + pp->filmNegative.blueBase = filmBaseValues[2]; + } void FilmNegative::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited) @@ -172,8 +221,8 @@ void FilmNegative::setDefaults(const rtengine::procparams::ProcParams* defParams void FilmNegative::setBatchMode(bool batchMode) { if (batchMode) { - spotConn.disconnect(); removeIfThere(this, spotgrid, false); + removeIfThere(this, filmBaseSpotButton, false); ToolPanel::setBatchMode(batchMode); redRatio->showEditedCB(); greenExp->showEditedCB(); @@ -205,16 +254,20 @@ void FilmNegative::enabledChanged() if (listener) { if (get_inconsistent()) { listener->panelChanged(evFilmNegativeEnabled, M("GENERAL_UNCHANGED")); - } - else if (getEnabled()) { + } else if (getEnabled()) { listener->panelChanged(evFilmNegativeEnabled, M("GENERAL_ENABLED")); - } - else { + } else { listener->panelChanged(evFilmNegativeEnabled, M("GENERAL_DISABLED")); } } } +void FilmNegative::filmBaseValuesChanged(std::array rgb) +{ + filmBaseValues = rgb; + filmBaseValuesLabel->set_text(formatBaseValues(filmBaseValues)); +} + void FilmNegative::setFilmNegProvider(FilmNegProvider* provider) { fnp = provider; @@ -227,7 +280,7 @@ void FilmNegative::setEditProvider(EditDataProvider* provider) CursorShape FilmNegative::getCursor(int objectID) const { - return CSSpotWB; + return CSSpotWB; } bool FilmNegative::mouseOver(int modifierKey) @@ -246,31 +299,57 @@ bool FilmNegative::button1Pressed(int modifierKey) EditSubscriber::action = EditSubscriber::Action::NONE; if (listener) { - refSpotCoords.push_back(provider->posImage); + if (spotbutton->get_active()) { - if (refSpotCoords.size() == 2) { - // User has selected 2 reference gray spots. Calculating new exponents - // from channel values and updating parameters. + refSpotCoords.push_back(provider->posImage); - std::array newExps; - if (fnp->getFilmNegativeExponents(refSpotCoords[0], refSpotCoords[1], newExps)) { + if (refSpotCoords.size() == 2) { + // User has selected 2 reference gray spots. Calculating new exponents + // from channel values and updating parameters. + + std::array newExps; + + if (fnp->getFilmNegativeExponents(refSpotCoords[0], refSpotCoords[1], newExps)) { + disableListener(); + // Leaving green exponent unchanged, setting red and blue exponents based on + // the ratios between newly calculated exponents. + redRatio->setValue(newExps[0] / newExps[1]); + blueRatio->setValue(newExps[2] / newExps[1]); + enableListener(); + + if (listener && getEnabled()) { + listener->panelChanged( + evFilmNegativeExponents, + Glib::ustring::compose( + "Ref=%1\nR=%2\nB=%3", + greenExp->getValue(), + redRatio->getValue(), + blueRatio->getValue() + ) + ); + } + } + + switchOffEditMode(); + } + + } else if (filmBaseSpotButton->get_active()) { + + std::array newBaseLev; + + if (fnp->getRawSpotValues(provider->posImage, 32, newBaseLev)) { disableListener(); - // Leaving green exponent unchanged, setting red and blue exponents based on - // the ratios between newly calculated exponents. - redRatio->setValue(newExps[0] / newExps[1]); - blueRatio->setValue(newExps[2] / newExps[1]); + + filmBaseValues = newBaseLev; + enableListener(); + const Glib::ustring vs = formatBaseValues(filmBaseValues); + + filmBaseValuesLabel->set_text(vs); + if (listener && getEnabled()) { - listener->panelChanged( - evFilmNegativeExponents, - Glib::ustring::compose( - "Ref=%1\nR=%2\nB=%3", - greenExp->getValue(), - redRatio->getValue(), - blueRatio->getValue() - ) - ); + listener->panelChanged(evFilmBaseValues, vs); } } @@ -292,11 +371,38 @@ void FilmNegative::switchOffEditMode() refSpotCoords.clear(); unsubscribe(); spotbutton->set_active(false); + filmBaseSpotButton->set_active(false); } void FilmNegative::editToggled() { if (spotbutton->get_active()) { + + filmBaseSpotButton->set_active(false); + refSpotCoords.clear(); + + subscribe(); + + int w, h; + getEditProvider()->getImageSize(w, h); + + // Stick a dummy rectangle over the whole image in mouseOverGeometry. + // This is to make sure the getCursor() call is fired everywhere. + Rectangle* const imgRect = static_cast(mouseOverGeometry.at(0)); + imgRect->setXYWH(0, 0, w, h); + } else { + refSpotCoords.clear(); + unsubscribe(); + } +} + +void FilmNegative::baseSpotToggled() +{ + if (filmBaseSpotButton->get_active()) { + + spotbutton->set_active(false); + refSpotCoords.clear(); + subscribe(); int w, h; diff --git a/rtgui/filmnegative.h b/rtgui/filmnegative.h index bca155ceb..0810a8c57 100644 --- a/rtgui/filmnegative.h +++ b/rtgui/filmnegative.h @@ -33,13 +33,15 @@ public: virtual ~FilmNegProvider() = default; virtual bool getFilmNegativeExponents(rtengine::Coord spotA, rtengine::Coord spotB, std::array& newExps) = 0; + virtual bool getRawSpotValues(rtengine::Coord spot, int spotSize, std::array& rawValues) = 0; }; class FilmNegative final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, - public EditSubscriber + public EditSubscriber, + public rtengine::FilmNegListener { public: FilmNegative(); @@ -53,6 +55,8 @@ public: void adjusterChanged(Adjuster* a, double newval) override; void enabledChanged() override; + void filmBaseValuesChanged(std::array rgb) override; + void setFilmNegProvider(FilmNegProvider* provider); void setEditProvider(EditDataProvider* provider) override; @@ -66,12 +70,16 @@ public: private: void editToggled(); + void baseSpotToggled(); const rtengine::ProcEvent evFilmNegativeExponents; const rtengine::ProcEvent evFilmNegativeEnabled; + const rtengine::ProcEvent evFilmBaseValues; std::vector refSpotCoords; + std::array filmBaseValues; + FilmNegProvider* fnp; Adjuster* const greenExp; @@ -80,5 +88,9 @@ private: Gtk::Grid* const spotgrid; Gtk::ToggleButton* const spotbutton; - sigc::connection spotConn; + + Gtk::Label* const filmBaseLabel; + Gtk::Label* const filmBaseValuesLabel; + Gtk::ToggleButton* const filmBaseSpotButton; + }; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 0faee0fd3..6a25a9d64 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -623,6 +623,7 @@ void ParamsEdited::set(bool v) filmNegative.redRatio = v; filmNegative.greenExp = v; filmNegative.blueRatio = v; + filmNegative.baseValues = v; exif = v; iptc = v; @@ -1225,6 +1226,9 @@ void ParamsEdited::initFrom(const std::vector& filmNegative.redRatio = filmNegative.redRatio && p.filmNegative.redRatio == other.filmNegative.redRatio; filmNegative.greenExp = filmNegative.greenExp && p.filmNegative.greenExp == other.filmNegative.greenExp; filmNegative.blueRatio = filmNegative.blueRatio && p.filmNegative.blueRatio == other.filmNegative.blueRatio; + filmNegative.baseValues = filmNegative.baseValues && p.filmNegative.redBase == other.filmNegative.redBase + && p.filmNegative.greenBase == other.filmNegative.greenBase + && p.filmNegative.blueBase == other.filmNegative.blueBase; // How the hell can we handle that??? // exif = exif && p.exif==other.exif @@ -3430,6 +3434,12 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.filmNegative.blueRatio = mods.filmNegative.blueRatio; } + if (filmNegative.baseValues) { + toEdit.filmNegative.redBase = mods.filmNegative.redBase; + toEdit.filmNegative.greenBase = mods.filmNegative.greenBase; + toEdit.filmNegative.blueBase = mods.filmNegative.blueBase; + } + // Exif changes are added to the existing ones if (exif) { for (procparams::ExifPairs::const_iterator i = mods.exif.begin(); i != mods.exif.end(); ++i) { @@ -3476,7 +3486,7 @@ bool RetinexParamsEdited::isUnchanged() const bool FilmNegativeParamsEdited::isUnchanged() const { - return enabled && redRatio && greenExp && blueRatio; + return enabled && redRatio && greenExp && blueRatio && baseValues; } bool CaptureSharpeningParamsEdited::isUnchanged() const diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index d1be2c57e..1feedd774 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -727,6 +727,7 @@ struct FilmNegativeParamsEdited { bool redRatio; bool greenExp; bool blueRatio; + bool baseValues; bool isUnchanged() const; }; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index 22f608ae4..b31852af2 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -986,6 +986,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param filterPE.filmNegative.redRatio = falsePE.filmNegative.redRatio; filterPE.filmNegative.greenExp = falsePE.filmNegative.greenExp; filterPE.filmNegative.blueRatio = falsePE.filmNegative.blueRatio; + filterPE.filmNegative.baseValues = falsePE.filmNegative.baseValues; } if (!captureSharpening->get_active ()) { diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index 89f93ed44..6a670733b 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 346 +#define PPVERSION 347 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 347 2019-11-17 + added special values in filmNegative for backwards compatibility with previous channel scaling method 346 2019-01-01 changed microcontrast uniformity 345 2018-10-21 diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 00ad96328..a9c3231d4 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -609,6 +609,7 @@ void ToolPanelCoordinator::initImage (rtengine::StagedImageProcessor* ipc_, bool ipc->setSizeListener (crop); ipc->setSizeListener (resize); ipc->setImageTypeListener (this); + ipc->setFilmNegListener (filmNegative); flatfield->setShortcutPath (Glib::path_get_dirname (ipc->getInitialImage()->getFileName())); icm->setRawMeta (raw, (const rtengine::FramesData*)pMetaData); @@ -1073,3 +1074,8 @@ bool ToolPanelCoordinator::getFilmNegativeExponents(rtengine::Coord spotA, rteng { return ipc && ipc->getFilmNegativeExponents(spotA.x, spotA.y, spotB.x, spotB.y, newExps); } + +bool ToolPanelCoordinator::getRawSpotValues(rtengine::Coord spot, int spotSize, std::array& rawValues) +{ + return ipc && ipc->getRawSpotValues(spot.x, spot.y, spotSize, rawValues); +} \ No newline at end of file diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index 0fc1a9070..1b51bca31 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -297,6 +297,7 @@ public: // FilmNegProvider interface bool getFilmNegativeExponents(rtengine::Coord spotA, rtengine::Coord spotB, std::array& newExps) override; + bool getRawSpotValues(rtengine::Coord spot, int spotSize, std::array& rawValues) override; // rotatelistener interface void straightenRequested () override; From 2b8ee075a7d7151ffd63b80625b8e947bd060412 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 18 Apr 2020 07:49:18 +0200 Subject: [PATCH 264/264] chnage ppversion --- rtgui/ppversion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index f762823f8..5aef01806 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,7 +1,7 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 347 +#define PPVERSION 348 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /*

c@E 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 }(0BW}0r8nG1dv#JWTS3?K9HLuuw!oB(o2pn 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 literal 0 HcmV?d00001 From f719c2840e4bc67ca7b5da73410edc2c0924e26f Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sat, 22 Feb 2020 19:16:09 -0800 Subject: [PATCH 115/264] mac:make a dir --- tools/osx/macosx_bundle.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index e68d2659c..ced5821b0 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -136,7 +136,7 @@ msg "Copying binary executable files." ditto "${CMAKE_BUILD_TYPE}/MacOS" "${MACOS}" msg "Copying Resources directory." -mv AboutThisBuild.txt "${RESOURCES}" +cp AboutThisBuild.txt "${RESOURCES}" ditto "${CMAKE_BUILD_TYPE}/Resources" "${RESOURCES}" echo "\n--------\n" >> "${RESOURCES}/AboutThisBuild.txt" @@ -337,10 +337,11 @@ fi msg "Creating disk image:" if [ ! -z ${FANCY_DMG} ] ; then echo "Building Fancy .dmg" +mkdir "${srcDir}/.background" cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png" SetFile -c incC "${srcDir}/.VolumeIcon.icns" -create-dmg ${dmg_name}.dmg "${srcDir}" \ +create-dmg "${dmg_name}.dmg" "${srcDir}" \ --volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ --volicon "${srcDir}/.VolumeIcon.icns" \ --sandbox-safe \ From 8329e28bb09992acbd5c05b60dc405d036a1912d Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 23 Feb 2020 12:13:46 -0800 Subject: [PATCH 116/264] Complete reverting UpdateInfo.cmake --- UpdateInfo.cmake | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index ce194bfe9..287acff01 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -65,13 +65,13 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) endif() message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") @@ -107,8 +107,4 @@ endif(WIN32) # build version.h from template configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") # build AboutThisBuild.txt from template -if(APPLE) - configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") -else() - configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") -endif() +configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") From f32602b550c806d306ea5a360eb13bc95f01706f Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 23 Feb 2020 12:15:49 -0800 Subject: [PATCH 117/264] mac:remove obsolete libiconv patches 1.14 and 1.15 keeping 1.16 --- tools/osx/libiconv_1.14_rt.patch | 30 ------------------------------ tools/osx/libiconv_1.15_rt.patch | 30 ------------------------------ 2 files changed, 60 deletions(-) delete mode 100644 tools/osx/libiconv_1.14_rt.patch delete mode 100644 tools/osx/libiconv_1.15_rt.patch diff --git a/tools/osx/libiconv_1.14_rt.patch b/tools/osx/libiconv_1.14_rt.patch deleted file mode 100644 index 7a01b1373..000000000 --- a/tools/osx/libiconv_1.14_rt.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/lib/iconv.c b/lib/iconv.c -index 3785296..24a0f07 100644 ---- a/lib/iconv.c -+++ b/lib/iconv.c -@@ -607,4 +607,25 @@ strong_alias (libiconv, iconv) - strong_alias (libiconv_close, iconv_close) - #endif - -+#undef iconv_open -+#undef iconv -+#undef iconv_close -+ -+LIBICONV_DLL_EXPORTED iconv_t iconv_open (const char* tocode, const char* fromcode) -+{ -+ return libiconv_open(tocode, fromcode); -+} -+ -+LIBICONV_DLL_EXPORTED size_t iconv (iconv_t icd, -+ ICONV_CONST char * * inbuf, size_t *inbytesleft, -+ char * * outbuf, size_t *outbytesleft) -+{ -+ return libiconv(icd, inbuf, inbytesleft, outbuf, outbytesleft); -+} -+ -+LIBICONV_DLL_EXPORTED int iconv_close (iconv_t icd) -+{ -+ return libiconv_close(icd); -+} -+ - #endif diff --git a/tools/osx/libiconv_1.15_rt.patch b/tools/osx/libiconv_1.15_rt.patch deleted file mode 100644 index ca434154b..000000000 --- a/tools/osx/libiconv_1.15_rt.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/lib/iconv.c b/lib/iconv.c -index 31853a7..630a498 100644 ---- a/lib/iconv.c -+++ b/lib/iconv.c -@@ -611,4 +611,25 @@ strong_alias (libiconv, iconv) - strong_alias (libiconv_close, iconv_close) - #endif - -+#undef iconv_open -+#undef iconv -+#undef iconv_close -+ -+LIBICONV_DLL_EXPORTED iconv_t iconv_open (const char* tocode, const char* fromcode) -+{ -+ return libiconv_open(tocode, fromcode); -+} -+ -+LIBICONV_DLL_EXPORTED size_t iconv (iconv_t icd, -+ ICONV_CONST char * * inbuf, size_t *inbytesleft, -+ char * * outbuf, size_t *outbytesleft) -+{ -+ return libiconv(icd, inbuf, inbytesleft, outbuf, outbytesleft); -+} -+ -+LIBICONV_DLL_EXPORTED int iconv_close (iconv_t icd) -+{ -+ return libiconv_close(icd); -+} -+ - #endif From 1066546483626dc1fbe44f724921941ee1962a74 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 23 Feb 2020 12:30:01 -0800 Subject: [PATCH 118/264] revert a change. --- UpdateInfo.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 287acff01..d1f532506 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -65,13 +65,13 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) endif() message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") From 4bd6383c0776f28624ef2cd0b327b0b5fe1eca1d Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 23 Feb 2020 20:35:45 -0800 Subject: [PATCH 119/264] re-indent some scripts w/cmake_format and beautify_bash --- CMakeLists.txt | 345 +++++++++++++++++++++++++------------ UpdateInfo.cmake | 105 +++++++---- tools/osx/macosx_bundle.sh | 332 +++++++++++++++++------------------ 3 files changed, 476 insertions(+), 306 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 00604052e..5998ccb50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,17 +7,22 @@ endif() # Must stay before the project() command: if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4") - set(CMAKE_CXX_COMPILER_ARG1 "-std=c++11" CACHE STRING "C++ version for eclipse" FORCE) + set(CMAKE_CXX_COMPILER_ARG1 + "-std=c++11" + CACHE STRING "C++ version for eclipse" FORCE) # Users building with Eclipse should set CMAKE_ECLIPSE_VERSION through the # command line to their current version of Eclipse: - #set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE) + # set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE) endif() project(RawTherapee) # The default target is Debug: if(CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE Debug CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel" FORCE) + set(CMAKE_BUILD_TYPE + Debug + CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel" + FORCE) endif() string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) @@ -26,11 +31,15 @@ string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9") - message(FATAL_ERROR "Building RawTherapee requires using GCC version 4.9 or higher!") +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION + VERSION_LESS "4.9") + message( + FATAL_ERROR + "Building RawTherapee requires using GCC version 4.9 or higher!") endif() -# We might want to build using the old C++ ABI, even when using a new GCC version: +# We might want to build using the old C++ ABI, even when using a new GCC +# version: if(USE_OLD_CXX_ABI) add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) endif() @@ -46,30 +55,50 @@ message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") -# Cache name suffix examples: "" = ~/.config/RawTherapee, "5" = ~/.config/RawTherapee-5, "_testing" = ~/.config/RawTherapee_testing -# Use "" for stable releases and "5-dev" for anything else. -set(CACHE_NAME_SUFFIX "" CACHE STRING "RawTherapee's cache folder suffix") +# Cache name suffix examples: "" = ~/.config/RawTherapee, "5" = +# ~/.config/RawTherapee-5, "_testing" = ~/.config/RawTherapee_testing Use "" for +# stable releases and "5-dev" for anything else. +set(CACHE_NAME_SUFFIX + "" + CACHE STRING "RawTherapee's cache folder suffix") -# By default we don't use a specific processor target, so PROC_TARGET_NUMBER is set to 0. -# Specify other values to optimize for specific processor architecture as listed in ProcessorTargets.cmake: -set(PROC_TARGET_NUMBER 0 CACHE STRING "Selected target processor from the list above (taken from ProcessorTargets.cmake)") +# By default we don't use a specific processor target, so PROC_TARGET_NUMBER is +# set to 0. Specify other values to optimize for specific processor architecture +# as listed in ProcessorTargets.cmake: +set(PROC_TARGET_NUMBER + 0 + CACHE + STRING + "Selected target processor from the list above (taken from ProcessorTargets.cmake)" +) # Set special compilation flags for rtengine which get added to CMAKE_CXX_FLAGS: -# Some Linux distros build with -O2 instead of -O3. We explicitly enable auto vectorization by using -ftree-vectorize -set(RTENGINE_CXX_FLAGS "-ftree-vectorize" CACHE STRING "Special compilation flags for RTEngine") +# Some Linux distros build with -O2 instead of -O3. We explicitly enable auto +# vectorization by using -ftree-vectorize +set(RTENGINE_CXX_FLAGS + "-ftree-vectorize" + CACHE STRING "Special compilation flags for RTEngine") # Loads the ProcessorTargets list: include(ProcessorTargets.cmake) -set(PROC_LABEL "undefined" CACHE STRING "Target processor label, unused if PROC_TARGET_NUMBER = 0 or 2") -set(PROC_FLAGS "" CACHE STRING "Target processor related build/link flags") +set(PROC_LABEL + "undefined" + CACHE STRING + "Target processor label, unused if PROC_TARGET_NUMBER = 0 or 2") +set(PROC_FLAGS + "" + CACHE STRING "Target processor related build/link flags") if((NOT (PROC_TARGET_NUMBER EQUAL 0)) AND (NOT (PROC_TARGET_NUMBER EQUAL 2))) set(PROC_LABEL ${PROC_TARGET_${PROC_TARGET_NUMBER}_LABEL}) endif() -if(NOT(PROC_TARGET_NUMBER EQUAL 0)) +if(NOT (PROC_TARGET_NUMBER EQUAL 0)) set(PROC_FLAGS ${PROC_TARGET_${PROC_TARGET_NUMBER}_FLAGS}) endif() if(UNIX AND PROC_LABEL STREQUAL "undefined") - execute_process(COMMAND uname -p OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE cpu) + execute_process( + COMMAND uname -p + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE cpu) if("${cpu}" STREQUAL "unknown") set(PROC_LABEL "${CMAKE_SYSTEM_PROCESSOR}") else() @@ -77,7 +106,8 @@ if(UNIX AND PROC_LABEL STREQUAL "undefined") endif() endif() -# If PROC_FORCED_LABEL exists, its value is loaded in PROC_LABEL to override the one from ProcessorTargets: +# If PROC_FORCED_LABEL exists, its value is loaded in PROC_LABEL to override the +# one from ProcessorTargets: if(DEFINED PROC_FORCED_LABEL) set(PROC_LABEL ${PROC_FORCED_LABEL}) endif() @@ -87,7 +117,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROC_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROC_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PROC_FLAGS}") -# Stop compilation on typos such as std:swap (missing colon will be detected as unused label): +# Stop compilation on typos such as std:swap (missing colon will be detected as +# unused label): set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-label") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=delete-incomplete") @@ -106,21 +137,35 @@ endif() include(FindUnalignedMalloc) if(WIN32) - # Add additional paths. Look in the MinGW path first, then in the Gtkmm path. - # If you wish to build some dependent libraries, you have to install them in MinGW to use them: - set(CMAKE_PREFIX_PATH $ENV{MINGW_BASEPATH} $ENV{GTKMM_BASEPATH} CACHE STRING "Additional search paths") + # Add additional paths. Look in the MinGW path first, then in the Gtkmm + # path. If you wish to build some dependent libraries, you have to install + # them in MinGW to use them: + set(CMAKE_PREFIX_PATH + $ENV{MINGW_BASEPATH} $ENV{GTKMM_BASEPATH} + CACHE STRING "Additional search paths") endif() if(APPLE) - if(CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib -Wl,-headerpad_max_install_names -mtune=generic") - message(STATUS "CMAKE_CXX_COMPILER is MacPorts GCC.\n CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") + if(CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]" + OR CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]") + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib -Wl,-headerpad_max_install_names -mtune=generic" + ) + message( + STATUS + "CMAKE_CXX_COMPILER is MacPorts GCC.\n CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}" + ) endif() # Set minimum system version - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names -mtune=generic") + set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}" + ) + set(CMAKE_C_FLAGS + "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names -mtune=generic" + ) endif() option(USE_EXPERIMENTAL_LANG_VERSIONS "Build with -std=c++0x" OFF) @@ -132,18 +177,33 @@ option(WITH_SAN "Build with run-time sanitizer" OFF) option(WITH_PROF "Build with profiling instrumentation" OFF) option(WITH_SYSTEM_KLT "Build using system KLT library." OFF) option(OPTION_OMP "Build with OpenMP support" ON) -option(STRICT_MUTEX "True (recommended): MyMutex will behave like POSIX Mutex; False: MyMutex will behave like POSIX RecMutex; Note: forced to ON for Debug builds" ON) -option(TRACE_MYRWMUTEX "Trace custom R/W Mutex (Debug builds only); redirecting std::out to a file is strongly recommended!" OFF) -option(AUTO_GDK_FLUSH "Use gdk_flush on all gdk_thread_leave other than the GUI thread; set it ON if you experience X Server warning/errors" OFF) -#option(TARGET32BIT "Build for 32-bit architecture when ON, otherwise 64-bit. Default is OFF" OFF) +option( + STRICT_MUTEX + "True (recommended): MyMutex will behave like POSIX Mutex; False: MyMutex will behave like POSIX RecMutex; Note: forced to ON for Debug builds" + ON) +option( + TRACE_MYRWMUTEX + "Trace custom R/W Mutex (Debug builds only); redirecting std::out to a file is strongly recommended!" + OFF) +option( + AUTO_GDK_FLUSH + "Use gdk_flush on all gdk_thread_leave other than the GUI thread; set it ON if you experience X Server warning/errors" + OFF) +# option(TARGET32BIT "Build for 32-bit architecture when ON, otherwise 64-bit. +# Default is OFF" OFF) option(ENABLE_TCMALLOC "Use the tcmalloc library if available" OFF) -set(TCMALLOC_LIB_DIR "" CACHE PATH "Custom path for the tcmalloc library") +set(TCMALLOC_LIB_DIR + "" + CACHE PATH "Custom path for the tcmalloc library") # Set installation directories: if(WIN32 OR APPLE) if(BUILD_BUNDLE) - message(STATUS "You have set BUILD_BUNDLE=ON but this is not necessary - the option is forced to ON for Windows and macOS.") + message( + STATUS + "You have set BUILD_BUNDLE=ON but this is not necessary - the option is forced to ON for Windows and macOS." + ) endif() set(BUILD_BUNDLE ON FORCE) endif() @@ -281,26 +341,35 @@ if(NOT DEFINED APPDATADIR) endif() endif() -if (NOT APPLE) - if(DEFINED LENSFUNDBDIR AND NOT IS_ABSOLUTE "${LENSFUNDBDIR}") - set(LENSFUNDBDIR "${DATADIR}/${LENSFUNDBDIR}") +if(NOT APPLE) + if(DEFINED LENSFUNDBDIR AND NOT IS_ABSOLUTE "${LENSFUNDBDIR}") + set(LENSFUNDBDIR "${DATADIR}/${LENSFUNDBDIR}") endif() endif() if(APPLE) if("${CODESIGNID}") - set(CODESIGNID "${CODESIGNID}" CACHE STRING "Codesigning Identity") + set(CODESIGNID + "${CODESIGNID}" + CACHE STRING "Codesigning Identity") endif() if("${NOTARY}") - set(NOTARY "${NOTARY}" CACHE STRING "Notarization Identity") + set(NOTARY + "${NOTARY}" + CACHE STRING "Notarization Identity") endif() if("${LOCAL_PREFIX}") - set(LOCAL_PREFIX "${LOCAL_PREFIX}" CACHE STRING "macos/gtk parent directory ie /usr or /opt") + set(LOCAL_PREFIX + "${LOCAL_PREFIX}" + CACHE STRING "macos/gtk parent directory ie /usr or /opt") elseif(NOT DEFINED LOCAL_PREFIX) set(LOCAL_PREFIX "/usr") endif() if("${FANCY_DMG}") - set(FANCY_DMG ON CACHE BOOL "Use the andreyvit/create-dmg script to make a fancy .dmg") + set(FANCY_DMG + ON + CACHE BOOL + "Use the andreyvit/create-dmg script to make a fancy .dmg") endif() endif() @@ -308,7 +377,10 @@ endif() if(NOT BUILD_BUNDLE) foreach(path BINDIR DATADIR LIBDIR DOCDIR CREDITSDIR LICENCEDIR) if(NOT (IS_ABSOLUTE "${${path}}")) - message(FATAL_ERROR "The ${path} path has to be absolute when using -DBUILD_BUNDLE=OFF") + message( + FATAL_ERROR + "The ${path} path has to be absolute when using -DBUILD_BUNDLE=OFF" + ) endif() endforeach() endif() @@ -337,11 +409,11 @@ endif() find_package(PkgConfig) if(WIN32) - pkg_check_modules (GTK REQUIRED gtk+-3.0>=3.22.24) - pkg_check_modules (GTKMM REQUIRED gtkmm-3.0>=3.22) + pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.22.24) + pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.22) else() - pkg_check_modules (GTK REQUIRED gtk+-3.0>=3.16) - pkg_check_modules (GTKMM REQUIRED gtkmm-3.0>=3.16) + pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.16) + pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.16) endif() if(GTK_VERSION VERSION_GREATER "3.24.1" AND GTK_VERSION VERSION_LESS "3.24.7") @@ -350,19 +422,26 @@ if(GTK_VERSION VERSION_GREATER "3.24.1" AND GTK_VERSION VERSION_LESS "3.24.7") else() set(CERTAINTY "likely to") endif() - message(WARNING "\nWarning! You are using GTK+ version " ${GTK_VERSION} " which is " ${CERTAINTY} " have an issue where combobox menu scroll-arrows are missing when a Gtk::ComboBox list does not fit vertically on the screen. As a result, users of your build will not be able to select items in the following comboboxes: Processing Profiles, Film Simulation, and the camera and lens profiles in Profiled Lens Correction.\nIt is recommended that you either downgrade GTK+ to <= 3.24.1 or upgrade to >= 3.24.7.") + message( + WARNING + "\nWarning! You are using GTK+ version " + ${GTK_VERSION} + " which is " + ${CERTAINTY} + " have an issue where combobox menu scroll-arrows are missing when a Gtk::ComboBox list does not fit vertically on the screen. As a result, users of your build will not be able to select items in the following comboboxes: Processing Profiles, Film Simulation, and the camera and lens profiles in Profiled Lens Correction.\nIt is recommended that you either downgrade GTK+ to <= 3.24.1 or upgrade to >= 3.24.7." + ) endif() -pkg_check_modules (GLIB2 REQUIRED glib-2.0>=2.44) -pkg_check_modules (GLIBMM REQUIRED glibmm-2.4>=2.44) -pkg_check_modules (CAIROMM REQUIRED cairomm-1.0) -pkg_check_modules (GIO REQUIRED gio-2.0>=2.44) -pkg_check_modules (GIOMM REQUIRED giomm-2.4>=2.44) -pkg_check_modules (GTHREAD REQUIRED gthread-2.0>=2.44) -pkg_check_modules (GOBJECT REQUIRED gobject-2.0>=2.44) -pkg_check_modules (SIGC REQUIRED sigc++-2.0>=2.3.1) -pkg_check_modules (LENSFUN REQUIRED lensfun>=0.2) -pkg_check_modules (RSVG REQUIRED librsvg-2.0>=2.40) +pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.44) +pkg_check_modules(GLIBMM REQUIRED glibmm-2.4>=2.44) +pkg_check_modules(CAIROMM REQUIRED cairomm-1.0) +pkg_check_modules(GIO REQUIRED gio-2.0>=2.44) +pkg_check_modules(GIOMM REQUIRED giomm-2.4>=2.44) +pkg_check_modules(GTHREAD REQUIRED gthread-2.0>=2.44) +pkg_check_modules(GOBJECT REQUIRED gobject-2.0>=2.44) +pkg_check_modules(SIGC REQUIRED sigc++-2.0>=2.3.1) +pkg_check_modules(LENSFUN REQUIRED lensfun>=0.2) +pkg_check_modules(RSVG REQUIRED librsvg-2.0>=2.40) if(WIN32) add_definitions(-DWIN32) @@ -389,7 +468,7 @@ if(WITH_SYSTEM_KLT) endif() # Check for libcanberra-gtk3 (sound events on Linux): -if(UNIX AND(NOT APPLE)) +if(UNIX AND (NOT APPLE)) pkg_check_modules(CANBERRA-GTK REQUIRED libcanberra-gtk3) endif() @@ -400,9 +479,12 @@ endif() if(WITH_LTO) # Using LTO with older versions of binutils requires setting extra flags set(BINUTILS_VERSION_MININUM "2.29") - execute_process(COMMAND ar --version OUTPUT_VARIABLE BINUTILS_VERSION_DETECTED) - string(REGEX REPLACE ".* ([0-9.]+)\n.*" "\\1" BINUTILS_VERSION_DETECTED "${BINUTILS_VERSION_DETECTED}") - if("${BINUTILS_VERSION_DETECTED}" VERSION_LESS "${BINUTILS_VERSION_MININUM}") + execute_process(COMMAND ar --version + OUTPUT_VARIABLE BINUTILS_VERSION_DETECTED) + string(REGEX REPLACE ".* ([0-9.]+)\n.*" "\\1" BINUTILS_VERSION_DETECTED + "${BINUTILS_VERSION_DETECTED}") + if("${BINUTILS_VERSION_DETECTED}" VERSION_LESS + "${BINUTILS_VERSION_MININUM}") if(APPLE) if(!CMAKE_AR) set(CMAKE_AR "/opt/local/bin/ar") @@ -414,7 +496,15 @@ if(WITH_LTO) set(CMAKE_AR "/usr/bin/gcc-ar") set(CMAKE_RANLIB "/usr/bin/gcc-ranlib") endif() - message(STATUS "Binutils version detected as less than " ${BINUTILS_VERSION_MININUM} " - setting CMake parameters to enable LTO linking:\n CMAKE_AR=\"" ${CMAKE_AR} "\"\n CMAKE_RANLIB=\"" ${CMAKE_RANLIB} "\"") + message( + STATUS + "Binutils version detected as less than " + ${BINUTILS_VERSION_MININUM} + " - setting CMake parameters to enable LTO linking:\n CMAKE_AR=\"" + ${CMAKE_AR} + "\"\n CMAKE_RANLIB=\"" + ${CMAKE_RANLIB} + "\"") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto") @@ -425,7 +515,8 @@ endif() if(WITH_SAN) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${WITH_SAN}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${WITH_SAN}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${WITH_SAN}") + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${WITH_SAN}") endif() if(WITH_PROF) @@ -434,11 +525,14 @@ if(WITH_PROF) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wuninitialized -Wcast-qual -Wno-deprecated-declarations -Wno-unused-result -Wunused-macros") +set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -Wall -Wuninitialized -Wcast-qual -Wno-deprecated-declarations -Wno-unused-result -Wunused-macros" +) if(OPTION_OMP) find_package(OpenMP) if(OPENMP_FOUND) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas") + set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas") endif() endif() @@ -452,13 +546,14 @@ if(OPENMP_FOUND) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${_f}) endforeach() check_c_source_compiles( -"#include + "#include int main() { fftwf_init_threads(); fftwf_plan_with_nthreads(1); return 0; -}" _fftw3f_multithread) +}" + _fftw3f_multithread) if(_fftw3f_multithread) add_definitions(-DRT_FFTW3F_OMP) else() @@ -476,63 +571,83 @@ get_filename_component(ABS_BINARY_DIR "${CMAKE_BINARY_DIR}" ABSOLUTE) set(OUT_OF_SOURCE_BUILD TRUE) if(ABS_SOURCE_DIR STREQUAL ABS_BINARY_DIR) set(OUT_OF_SOURCE_BUILD FALSE) - message(WARNING "You are performing an in-source build. This is discouraged. For an explanation and the advantages of out-of-source builds, please refer to http://www.cmake.org/Wiki/CMake_FAQ#What_is_an_.22out-of-source.22_build.3F") + message( + WARNING + "You are performing an in-source build. This is discouraged. For an explanation and the advantages of out-of-source builds, please refer to http://www.cmake.org/Wiki/CMake_FAQ#What_is_an_.22out-of-source.22_build.3F" + ) endif() -# Remove files which could require manual work. -# We will remove this after some time to have a clean build system without file modifications in the source tree again. (?) -set(OOSB_FILES "${PROJECT_SOURCE_DIR}/rtdata/rawtherapee.desktop" "${PROJECT_SOURCE_DIR}/rtgui/version.h" "${PROJECT_SOURCE_DIR}/rtgui/config.h" "${PROJECT_SOURCE_DIR}/AboutThisBuild.txt") +# Remove files which could require manual work. We will remove this after some +# time to have a clean build system without file modifications in the source +# tree again. (?) +set(OOSB_FILES + "${PROJECT_SOURCE_DIR}/rtdata/rawtherapee.desktop" + "${PROJECT_SOURCE_DIR}/rtgui/version.h" + "${PROJECT_SOURCE_DIR}/rtgui/config.h" + "${PROJECT_SOURCE_DIR}/AboutThisBuild.txt") if(OUT_OF_SOURCE_BUILD) foreach(f ${OOSB_FILES}) file(REMOVE "${f}") endforeach() endif() -# Check for generated files in the source tree which should not be there when doing an out-of-source build. -# Without checking for this it might happen that old versions are used for the compilation: +# Check for generated files in the source tree which should not be there when +# doing an out-of-source build. Without checking for this it might happen that +# old versions are used for the compilation: if(OUT_OF_SOURCE_BUILD) foreach(f ${OOSB_FILES}) if(EXISTS "${f}") - message(SEND_ERROR "Generated \"${f}\" found inside the source tree. Please remove it as it is a relic of the old build system and prevents valid compilation now.") + message( + SEND_ERROR + "Generated \"${f}\" found inside the source tree. Please remove it as it is a relic of the old build system and prevents valid compilation now." + ) endif() endforeach() endif() -### Start generating AboutThisBuild.txt -# Set the platform bit-depth: +# Start generating AboutThisBuild.txt Set the platform bit-depth: if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(PROC_BIT_DEPTH 32 bits) else() set(PROC_BIT_DEPTH 64 bits) endif() -# Get compiler name and version. -# Only CMake > 2.8.7 knows CMAKE_*_COMPILER_VERSION +# Get compiler name and version. Only CMake > 2.8.7 knows +# CMAKE_*_COMPILER_VERSION if(CMAKE_VERSION VERSION_GREATER 2.8.7) get_filename_component(COMPILER_INFO ${CMAKE_C_COMPILER} NAME_WE) set(COMPILER_INFO "${COMPILER_INFO} ${CMAKE_C_COMPILER_VERSION}") else() - execute_process(COMMAND gcc -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND gcc -dumpversion + OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) set(COMPILER_INFO "gcc ${GCC_VERSION}") endif() -# Get C++ and linker flags for rtengine (the GUI's C++ flags may have fewer flags): -set(CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} ${RTENGINE_CXX_FLAGS}") -set(LFLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}") +# Get C++ and linker flags for rtengine (the GUI's C++ flags may have fewer +# flags): +set(CXX_FLAGS + "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} ${RTENGINE_CXX_FLAGS}" +) +set(LFLAGS + "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}" +) -set(ABOUT_COMMAND_WITH_ARGS ${CMAKE_COMMAND} - -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} +set(ABOUT_COMMAND_WITH_ARGS + ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} -DPROC_LABEL:STRING="${PROC_LABEL}" -DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}" -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DGTKMM_VERSION:STRING=${GTKMM_VERSION} - -DOPTION_OMP:STRING=${OPTION_OMP} + -DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DOPTION_OMP:STRING=${OPTION_OMP} -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} -DLENSFUN_VERSION:STRING=${LENSFUN_VERSION}) if(WIN32) - list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Windows + list( + APPEND + ABOUT_COMMAND_WITH_ARGS + -DSYSTEM:STRING=Windows -DCXX_FLAGS:STRING="${CXX_FLAGS}" -DLFLAGS:STRING="${LFLAGS}" -DCOMPILER_INFO:STRING="${COMPILER_INFO}" @@ -540,39 +655,45 @@ if(WIN32) -DBIT_DEPTH:STRING="${CMAKE_SIZEOF_VOID_P}") elseif(APPLE) list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple - -DCXX_FLAGS:STRING=${CXX_FLAGS} - -DLFLAGS:STRING=${LFLAGS} - -DCOMPILER_INFO:STRING=${COMPILER_INFO}) + -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS} + -DCOMPILER_INFO:STRING=${COMPILER_INFO}) else() list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux - -DCXX_FLAGS:STRING=${CXX_FLAGS} - -DLFLAGS:STRING=${LFLAGS} - -DCOMPILER_INFO:STRING=${COMPILER_INFO}) + -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS} + -DCOMPILER_INFO:STRING=${COMPILER_INFO}) endif() list(APPEND ABOUT_COMMAND_WITH_ARGS -P "${PROJECT_SOURCE_DIR}/UpdateInfo.cmake") -add_custom_target(UpdateInfo ALL +add_custom_target( + UpdateInfo ALL COMMAND ${ABOUT_COMMAND_WITH_ARGS} COMMENT "Creating AboutThisBuild.txt and other version-dependent files") -### End generating AboutThisBuild.txt +# End generating AboutThisBuild.txt install(FILES AUTHORS.txt DESTINATION "${CREDITSDIR}") install(FILES LICENSE.txt DESTINATION "${LICENCEDIR}") -install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt" DESTINATION "${CREDITSDIR}") -install(FILES RELEASE_NOTES.txt DESTINATION "${CREDITSDIR}" OPTIONAL) +install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt" + DESTINATION "${CREDITSDIR}") +install( + FILES RELEASE_NOTES.txt + DESTINATION "${CREDITSDIR}" + OPTIONAL) -# The standard location for man pages in Linux is /usr/share/man -# Use "manpath" to see the search paths for man pages on your system. +# The standard location for man pages in Linux is /usr/share/man Use "manpath" +# to see the search paths for man pages on your system. if(BUILD_BUNDLE) if(APPLE) - install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/man/man1") + install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" + DESTINATION "${DATADIR}/man/man1") else() - install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/share/man/man1") + install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" + DESTINATION "${DATADIR}/share/man/man1") endif() else() - install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1") + install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" + DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1") endif() if(WIN32) @@ -580,7 +701,8 @@ if(WIN32) endif() if(UNIX) - install(FILES com.rawtherapee.RawTherapee.appdata.xml DESTINATION "${APPDATADIR}") + install(FILES com.rawtherapee.RawTherapee.appdata.xml + DESTINATION "${APPDATADIR}") endif() # check whether the used version of lensfun has lfDatabase::LoadDirectory @@ -608,26 +730,31 @@ int main() lfDatabase *db = 0; bool b = db->LoadDirectory(0); return 0; -}" LENSFUN_HAS_LOAD_DIRECTORY) +}" + LENSFUN_HAS_LOAD_DIRECTORY) set(TCMALLOC_LIB_DIR) if(ENABLE_TCMALLOC) if(TCMALLOC_LIB_DIR) - find_library(TCMALLOC_LIBRARIES tcmalloc PATHS ${TCMALLOC_LIB_DIR} NO_DEFAULT_PATH) + find_library(TCMALLOC_LIBRARIES tcmalloc PATHS ${TCMALLOC_LIB_DIR} + NO_DEFAULT_PATH) else() find_library(TCMALLOC_LIBRARIES tcmalloc) endif() if(TCMALLOC_LIBRARIES) message(STATUS "using tcmalloc library in ${TCMALLOC_LIBRARIES}") else() - set(TCMALLOC_LIBRARIES "" CACHE INTERNAL "" FORCE) + set(TCMALLOC_LIBRARIES + "" + CACHE INTERNAL "" FORCE) message(STATUS "tcmalloc not found") endif() else() - set(TCMALLOC_LIBRARIES "" CACHE INTERNAL "" FORCE) + set(TCMALLOC_LIBRARIES + "" + CACHE INTERNAL "" FORCE) endif() - add_subdirectory(rtexif) add_subdirectory(rtengine) add_subdirectory(rtgui) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 287acff01..b809fb2e5 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -1,13 +1,21 @@ # cmakefile executed within a makefile target -# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed -find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH) +# If we find ReleaseInfo.cmake we use the info from there and don't need Git to +# be installed +find_file( + REL_INFO_FILE ReleaseInfo.cmake + PATHS "${PROJECT_SOURCE_DIR}" + NO_DEFAULT_PATH) if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) # we look for the git command in this paths by order of preference if(WIN32) - find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../) + find_program( + GIT_CMD git.exe + HINTS ENV Path + PATH_SUFFIXES ../) elseif(APPLE) - find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") + find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" + "/usr/bin") find_program(GIT_CMD git) set(SHELL "/bin/bash") else(WIN32) # Linux @@ -22,46 +30,72 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) message(STATUS "git command found: ${GIT_CMD}") endif() - # Get version description. - # Depending on whether you checked out a branch (dev) or a tag (release), - # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. - execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Get version description. Depending on whether you checked out a branch + # (dev) or a tag (release), "git describe" will return + # "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. + execute_process( + COMMAND ${GIT_CMD} describe --tags --always + OUTPUT_VARIABLE GIT_DESCRIBE + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # Get branch name. - # Will return empty if you checked out a commit or tag. Empty string handled later. - execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Get branch name. Will return empty if you checked out a commit or tag. + # Empty string handled later. + execute_process( + COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD + OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Get commit hash. - execute_process(COMMAND ${GIT_CMD} rev-parse --short --verify HEAD OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + execute_process( + COMMAND ${GIT_CMD} rev-parse --short --verify HEAD + OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Get commit date, YYYY-MM-DD. - execute_process(COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + execute_process( + COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d + OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Get number of commits since tagging. This is what "GIT_DESCRIBE" uses. - # Works when checking out branch, tag or commit. - # Get a list of all tags in repo: - execute_process(COMMAND ${GIT_CMD} tag --merged HEAD OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Works when checking out branch, tag or commit. Get a list of all tags in + # repo: + execute_process( + COMMAND ${GIT_CMD} tag --merged HEAD + OUTPUT_VARIABLE GIT_TAG + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Replace newlines with semicolons so that it can be split: string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}") - execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + execute_process( + COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} + OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # Get number of commits since branching. - # Works when checking out branch, tag or commit. - execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Get number of commits since branching. Works when checking out branch, tag + # or commit. + execute_process( + COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags + OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # If user checked-out something which is not a branch, use the description as branch name. + # If user checked-out something which is not a branch, use the description + # as branch name. if(GIT_BRANCH STREQUAL "") set(GIT_BRANCH "${GIT_DESCRIBE}") endif() - # Create numeric version. - # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. - # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). + # Create numeric version. This version is nonsense, either don't use it at + # all or use it only where you have no other choice, e.g. Inno Setup's + # VersionInfoVersion. Strip everything after hyphen, e.g. "5.0-gtk2" -> + # "5.0", "5.1-rc1" -> "5.1" (ergo BS). if(GIT_COMMITS_SINCE_TAG STREQUAL "") set(GIT_NUMERIC_VERSION_BS "0.0.0") else() string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) - set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") + set(GIT_NUMERIC_VERSION_BS + "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() message(STATUS "Git checkout information:") @@ -75,7 +109,10 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") - message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"") + message( + STATUS + "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"" + ) else() message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"") endif() @@ -87,7 +124,8 @@ endif(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) if(WIN32) if(BIT_DEPTH EQUAL 4) set(BUILD_BIT_DEPTH 32) - # 32 bits builds has to be installable on 64 bits system, to support WinXP/64. + # 32 bits builds has to be installable on 64 bits system, to support + # WinXP/64. set(ARCHITECTURE_ALLOWED "x86 x64 ia64") # installing in 32 bits mode even on 64 bits OS and architecture set(INSTALL_MODE "") @@ -95,16 +133,21 @@ if(WIN32) set(BUILD_BIT_DEPTH 64) # Restricting the 64 bits builds to 64 bits systems only set(ARCHITECTURE_ALLOWED "x64 ia64") - # installing in 64 bits mode for all 64 bits processors, even for itanium architecture + # installing in 64 bits mode for all 64 bits processors, even for + # itanium architecture set(INSTALL_MODE "x64 ia64") endif(BIT_DEPTH EQUAL 4) # set part of the output archive name set(SYSTEM_NAME "WinVista") - configure_file("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") + configure_file( + "${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" + "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") endif(WIN32) # build version.h from template -configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") +configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" + "${CMAKE_BINARY_DIR}/rtgui/version.h") # build AboutThisBuild.txt from template -configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") +configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" + "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index ced5821b0..64738d283 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -16,79 +16,79 @@ fMagenta="$(tput setaf 5)" fRed="$(tput setaf 1)" function msg { -printf "\\n${fBold}-- %s${fNormal}\\n" "${@}" + printf "\\n${fBold}-- %s${fNormal}\\n" "${@}" } function msgError { -printf "\\n${fBold}Error:${fNormal}\\n%s\\n" "${@}" + printf "\\n${fBold}Error:${fNormal}\\n%s\\n" "${@}" } function GetDependencies { -otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' + otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' } function CheckLink { -GetDependencies "$1" | while read -r; do -local dest="${LIB}/$(basename "${REPLY}")" -test -f "${dest}" || { ditto --arch "${arch}" "${REPLY}" "${dest}"; CheckLink "${dest}"; } -done + GetDependencies "$1" | while read -r; do + local dest="${LIB}/$(basename "${REPLY}")" + test -f "${dest}" || { ditto --arch "${arch}" "${REPLY}" "${dest}"; CheckLink "${dest}"; } + done } function ModifyInstallNames { -find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do -msg "Modifying install names: ${x}" -{ -# id -if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then -install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} -fi -GetDependencies "${x}" | while read -r y -do -install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x} -done -} | bash -v -done + find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do + msg "Modifying install names: ${x}" + { + # id + if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then + install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} + fi + GetDependencies "${x}" | while read -r y + do + install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x} + done + } | bash -v + done } # Source check if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then -msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." -exit 1 + msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." + exit 1 fi # Update project version if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then -### This section is copied from tools/generateReleaseInfo -# Get version description. -# Depending on whether you checked out a branch (dev) or a tag (release), -# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. -gitDescribe="$(git describe --tags --always)" - -# Apple requires a numeric version of the form n.n.n -# https://goo.gl/eWDQv6 - -# Get number of commits since tagging. This is what gitDescribe uses. -# Works when checking out branch, tag or commit. -gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))" - -# Create numeric version. -# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. -# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). -if [[ -z $gitCommitsSinceTag ]]; then -gitVersionNumericBS="0.0.0" -else -gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen. -gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0 -fi -### Copy end. - -PROJECT_FULL_VERSION="$gitDescribe" -PROJECT_VERSION="$gitVersionNumericBS" + ### This section is copied from tools/generateReleaseInfo + # Get version description. + # Depending on whether you checked out a branch (dev) or a tag (release), + # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. + gitDescribe="$(git describe --tags --always)" + + # Apple requires a numeric version of the form n.n.n + # https://goo.gl/eWDQv6 + + # Get number of commits since tagging. This is what gitDescribe uses. + # Works when checking out branch, tag or commit. + gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))" + + # Create numeric version. + # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. + # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). + if [[ -z $gitCommitsSinceTag ]]; then + gitVersionNumericBS="0.0.0" + else + gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen. + gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0 + fi + ### Copy end. + + PROJECT_FULL_VERSION="$gitDescribe" + PROJECT_VERSION="$gitVersionNumericBS" fi MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')" if [[ -z "${MINIMUM_SYSTEM_VERSION}" ]]; then -MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" + MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" fi arch=x86_64 @@ -111,7 +111,7 @@ CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" if [[ -n ${FANCY_DMG} ]] ; then -echo "Fancy .dmg build is ON." + echo "Fancy .dmg build is ON." fi APP="${PROJECT_NAME}.app" @@ -212,8 +212,8 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/themes/Default/gtk-3.0/gtk- msg "Copy Adwaita icons" iconfolders=("16x16/actions" "16x16/devices" "16x16/mimetypes" "16x16/places" "16x16/status" "48x48/devices") for f in "${iconfolders[@]}"; do -mkdir -p ${RESOURCES}/share/icons/Adwaita/${f} -ditto ${LOCAL_PREFIX}/local/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f} + mkdir -p ${RESOURCES}/share/icons/Adwaita/${f} + ditto ${LOCAL_PREFIX}/local/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f} done ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/icons/Adwaita/index.theme "${LOCAL_PREFIX}/local/bin/gtk-update-icon-cache" "${RESOURCES}/share/icons/Adwaita" @@ -263,133 +263,133 @@ ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder." for frameworklibs in "${LIB}"/*{dylib,so} ; do -install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib "${frameworklibs}" -install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" + install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib "${frameworklibs}" + install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" done install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli # Codesign the app if [ -n "${CODESIGNID}" ] ; then -msg "Codesigning Application." -install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements -plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements -mv "${EXECUTABLE}"-cli "${LIB}" -for frameworklibs in "${LIB}"/* ; do -codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}" -done -codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" -spctl -a -vvvv "${APP}" + msg "Codesigning Application." + install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements + plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements + mv "${EXECUTABLE}"-cli "${LIB}" + for frameworklibs in "${LIB}"/* ; do + codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}" + done + codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" + spctl -a -vvvv "${APP}" fi # Notarize the app if [ -n "$NOTARY" ] ; then -msg "Notarizing the application:" -ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" -uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` -echo "Result= $uuid" # Display identifier string -sleep 15 -while : -do -fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status -status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` -if [ "$status1" = "success" ]; then -xcrun stapler staple *app # staple the ticket -xcrun stapler validate -v *app -echo "Notarization success" -break -elif [ "$status1" = "in" ]; then -echo "Notarization still in progress, sleeping for 15 seconds and trying again" -sleep 15 -else -echo "Notarization failed fullstatus below" -echo "$fullstatus" -exit 1 -fi -done + msg "Notarizing the application:" + ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" + uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` + echo "Result= $uuid" # Display identifier string + sleep 15 + while : + do + fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status + status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` + if [ "$status1" = "success" ]; then + xcrun stapler staple *app # staple the ticket + xcrun stapler validate -v *app + echo "Notarization success" + break + elif [ "$status1" = "in" ]; then + echo "Notarization still in progress, sleeping for 15 seconds and trying again" + sleep 15 + else + echo "Notarization failed fullstatus below" + echo "$fullstatus" + exit 1 + fi + done fi function CreateDmg { -local srcDir="$(mktemp -dt $$)" - -msg "Preparing disk image sources at ${srcDir}:" -cp -R "${APP}" "${srcDir}" -cp "${RESOURCES}"/share/LICENSE.txt "${srcDir}" -ln -s /Applications "${srcDir}" - -# Web bookmarks -function CreateWebloc { -defaults write "${srcDir}/$1" URL "$2" -mv "${srcDir}/$1".{plist,webloc} -} -CreateWebloc 'Website' 'https://www.rawtherapee.com/' -CreateWebloc 'Documentation' 'https://rawpedia.rawtherapee.com/' -CreateWebloc 'Forum' 'https://discuss.pixls.us/c/software/rawtherapee' -CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new' - -# Disk image name -dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" -lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" -if [[ ${lower_build_type} != release ]]; then -dmg_name="${dmg_name}_${lower_build_type}" -fi - -msg "Creating disk image:" -if [ ! -z ${FANCY_DMG} ] ; then -echo "Building Fancy .dmg" -mkdir "${srcDir}/.background" -cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" -cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png" -SetFile -c incC "${srcDir}/.VolumeIcon.icns" -create-dmg "${dmg_name}.dmg" "${srcDir}" \ ---volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ ---volicon "${srcDir}/.VolumeIcon.icns" \ ---sandbox-safe \ ---no-internet-enable \ ---eula LICENSE.txt \ ---hdiutil-verbose \ ---rez /Library/Developer/CommandLineTools/usr/bin/Rez -else -hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" -fi - -# Sign disk image -if [ -n "$CODESIGNID" ] ; then -codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" -fi - -# Notarize the dmg -if ! test -z "$NOTARY" ; then -msg "Notarizing the dmg:" -zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" -uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` -echo "dmg Result= $uuid" # Display identifier string -sleep 15 -while : -do -fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status -status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` -if [ "$status1" = "success" ]; then -xcrun stapler staple "${dmg_name}.dmg" # staple the ticket -xcrun stapler validate -v "${dmg_name}.dmg" -echo "dmg Notarization success" -break -elif [ "$status1" = "in" ]; then -echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again" -sleep 15 -else -echo "dmg Notarization failed fullstatus below" -echo "$fullstatus" -exit 1 -fi -done -fi - -# Zip disk image for redistribution -msg "Zipping disk image for redistribution:" -rm "${dmg_name}.dmg" -msg "Removing disk image caches:" -rm -rf "${srcDir}" + local srcDir="$(mktemp -dt $$)" + + msg "Preparing disk image sources at ${srcDir}:" + cp -R "${APP}" "${srcDir}" + cp "${RESOURCES}"/share/LICENSE.txt "${srcDir}" + ln -s /Applications "${srcDir}" + + # Web bookmarks + function CreateWebloc { + defaults write "${srcDir}/$1" URL "$2" + mv "${srcDir}/$1".{plist,webloc} + } + CreateWebloc 'Website' 'https://www.rawtherapee.com/' + CreateWebloc 'Documentation' 'https://rawpedia.rawtherapee.com/' + CreateWebloc 'Forum' 'https://discuss.pixls.us/c/software/rawtherapee' + CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new' + + # Disk image name + dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" + lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" + if [[ ${lower_build_type} != release ]]; then + dmg_name="${dmg_name}_${lower_build_type}" + fi + + msg "Creating disk image:" + if [ ! -z ${FANCY_DMG} ] ; then + echo "Building Fancy .dmg" + mkdir "${srcDir}/.background" + cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" + cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png" + SetFile -c incC "${srcDir}/.VolumeIcon.icns" + create-dmg "${dmg_name}.dmg" "${srcDir}" \ + --volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ + --volicon "${srcDir}/.VolumeIcon.icns" \ + --sandbox-safe \ + --no-internet-enable \ + --eula LICENSE.txt \ + --hdiutil-verbose \ + --rez /Library/Developer/CommandLineTools/usr/bin/Rez + else + hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" + fi + + # Sign disk image + if [ -n "$CODESIGNID" ] ; then + codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" + fi + + # Notarize the dmg + if ! test -z "$NOTARY" ; then + msg "Notarizing the dmg:" + zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" + uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` + echo "dmg Result= $uuid" # Display identifier string + sleep 15 + while : + do + fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status + status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` + if [ "$status1" = "success" ]; then + xcrun stapler staple "${dmg_name}.dmg" # staple the ticket + xcrun stapler validate -v "${dmg_name}.dmg" + echo "dmg Notarization success" + break + elif [ "$status1" = "in" ]; then + echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again" + sleep 15 + else + echo "dmg Notarization failed fullstatus below" + echo "$fullstatus" + exit 1 + fi + done + fi + + # Zip disk image for redistribution + msg "Zipping disk image for redistribution:" + rm "${dmg_name}.dmg" + msg "Removing disk image caches:" + rm -rf "${srcDir}" } CreateDmg msg "Finishing build:" From 7ddf243693d7a8789c01e3a7a31fd195330d3690 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Sun, 23 Feb 2020 20:40:15 -0800 Subject: [PATCH 120/264] don't reformat UpdateInfo.cmake --- UpdateInfo.cmake | 119 +++++++++++++++-------------------------------- 1 file changed, 38 insertions(+), 81 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 99235c736..287acff01 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -1,21 +1,13 @@ # cmakefile executed within a makefile target -# If we find ReleaseInfo.cmake we use the info from there and don't need Git to -# be installed -find_file( - REL_INFO_FILE ReleaseInfo.cmake - PATHS "${PROJECT_SOURCE_DIR}" - NO_DEFAULT_PATH) +# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed +find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH) if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) # we look for the git command in this paths by order of preference if(WIN32) - find_program( - GIT_CMD git.exe - HINTS ENV Path - PATH_SUFFIXES ../) + find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../) elseif(APPLE) - find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" - "/usr/bin") + find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") find_program(GIT_CMD git) set(SHELL "/bin/bash") else(WIN32) # Linux @@ -30,89 +22,60 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) message(STATUS "git command found: ${GIT_CMD}") endif() - # Get version description. Depending on whether you checked out a branch - # (dev) or a tag (release), "git describe" will return - # "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. - execute_process( - COMMAND ${GIT_CMD} describe --tags --always - OUTPUT_VARIABLE GIT_DESCRIBE - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Get version description. + # Depending on whether you checked out a branch (dev) or a tag (release), + # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. + execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # Get branch name. Will return empty if you checked out a commit or tag. - # Empty string handled later. - execute_process( - COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD - OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Get branch name. + # Will return empty if you checked out a commit or tag. Empty string handled later. + execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Get commit hash. - execute_process( - COMMAND ${GIT_CMD} rev-parse --short --verify HEAD - OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + execute_process(COMMAND ${GIT_CMD} rev-parse --short --verify HEAD OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Get commit date, YYYY-MM-DD. - execute_process( - COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d - OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + execute_process(COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Get number of commits since tagging. This is what "GIT_DESCRIBE" uses. - # Works when checking out branch, tag or commit. Get a list of all tags in - # repo: - execute_process( - COMMAND ${GIT_CMD} tag --merged HEAD - OUTPUT_VARIABLE GIT_TAG - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Works when checking out branch, tag or commit. + # Get a list of all tags in repo: + execute_process(COMMAND ${GIT_CMD} tag --merged HEAD OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") # Replace newlines with semicolons so that it can be split: string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}") - execute_process( - COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} - OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # Get number of commits since branching. Works when checking out branch, tag - # or commit. - execute_process( - COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags - OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Get number of commits since branching. + # Works when checking out branch, tag or commit. + execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # If user checked-out something which is not a branch, use the description - # as branch name. + # If user checked-out something which is not a branch, use the description as branch name. if(GIT_BRANCH STREQUAL "") set(GIT_BRANCH "${GIT_DESCRIBE}") endif() - # Create numeric version. This version is nonsense, either don't use it at - # all or use it only where you have no other choice, e.g. Inno Setup's - # VersionInfoVersion. Strip everything after hyphen, e.g. "5.0-gtk2" -> - # "5.0", "5.1-rc1" -> "5.1" (ergo BS). + # Create numeric version. + # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. + # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). if(GIT_COMMITS_SINCE_TAG STREQUAL "") set(GIT_NUMERIC_VERSION_BS "0.0.0") else() string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) - set(GIT_NUMERIC_VERSION_BS - "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") + set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") endif() message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") - message( - STATUS - "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"" - ) + message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"") else() message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"") endif() @@ -124,8 +87,7 @@ endif(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) if(WIN32) if(BIT_DEPTH EQUAL 4) set(BUILD_BIT_DEPTH 32) - # 32 bits builds has to be installable on 64 bits system, to support - # WinXP/64. + # 32 bits builds has to be installable on 64 bits system, to support WinXP/64. set(ARCHITECTURE_ALLOWED "x86 x64 ia64") # installing in 32 bits mode even on 64 bits OS and architecture set(INSTALL_MODE "") @@ -133,21 +95,16 @@ if(WIN32) set(BUILD_BIT_DEPTH 64) # Restricting the 64 bits builds to 64 bits systems only set(ARCHITECTURE_ALLOWED "x64 ia64") - # installing in 64 bits mode for all 64 bits processors, even for - # itanium architecture + # installing in 64 bits mode for all 64 bits processors, even for itanium architecture set(INSTALL_MODE "x64 ia64") endif(BIT_DEPTH EQUAL 4) # set part of the output archive name set(SYSTEM_NAME "WinVista") - configure_file( - "${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" - "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") + configure_file("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") endif(WIN32) # build version.h from template -configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" - "${CMAKE_BINARY_DIR}/rtgui/version.h") +configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") # build AboutThisBuild.txt from template -configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" - "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") +configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") From a0b5cffff55629f4b6a369ea44aee8fa44122d7d Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 23 Feb 2020 20:42:11 -0800 Subject: [PATCH 121/264] re-re-reverting UpdateInfo.cmake --- UpdateInfo.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 287acff01..d1f532506 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -65,13 +65,13 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) endif() message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") From 6ccaf4aa5b299d4328364bf7d38bd212e0ae7dbf Mon Sep 17 00:00:00 2001 From: Benitoite Date: Sun, 23 Feb 2020 21:29:00 -0800 Subject: [PATCH 122/264] Tabs to spaces. --- UpdateInfo.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index d1f532506..c6f9d6ee3 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -65,13 +65,13 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) endif() message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") From e5ad02dd7b8eb864572316d12467e998d6852f91 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 24 Feb 2020 06:17:43 -0800 Subject: [PATCH 123/264] mac:xml-beautify plists --- tools/osx/Info.plist.in | 9 ++++----- tools/osx/rt.entitlements | 33 ++++++++++++++++----------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index ee11ba6d7..6970ed4da 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -1,5 +1,4 @@ - LSEnvironment @@ -38,7 +37,7 @@ ATSApplicationFontsPath etc/fonts LSMultipleInstancesProhibited - + LSMinimumSystemVersion @minimum_macos_version@ CFBundleDevelopmentRegion @@ -60,7 +59,7 @@ CFBundleTypeRole Editor LSIsAppleDefaultForType - + LSItemContentTypes com.rawtherapee.pp3 @@ -172,7 +171,7 @@ @arch@ NSHighResolutionCapable - + NSHumanReadableCopyright Copyright © 2004-2010 Gábor Horváth, 2010-2017 RawTherapee Development Team UTExportedTypeDeclarations @@ -203,4 +202,4 @@ - + \ No newline at end of file diff --git a/tools/osx/rt.entitlements b/tools/osx/rt.entitlements index 61422fae7..c571f1f41 100644 --- a/tools/osx/rt.entitlements +++ b/tools/osx/rt.entitlements @@ -1,20 +1,19 @@ - - - application-identifier - com.rawtherapee.RawTherapee - com.apple.security.temporary-exception.files.absolute-path.read-write - - / - - com.apple.security.cs.allow-dyld-environment-variables - - com.apple.security.files.user-selected.read-write - - com.apple.security.app-sandbox - - com.apple.security.files.downloads.read-write - - + + application-identifier + com.rawtherapee.RawTherapee + com.apple.security.temporary-exception.files.absolute-path.read-write + + / + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.files.user-selected.read-write + + com.apple.security.app-sandbox + + com.apple.security.files.downloads.read-write + + \ No newline at end of file From c7b4f6fc679c17c9ed897ccae9ff6c1c7c8d13ad Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 24 Feb 2020 10:31:47 -0800 Subject: [PATCH 124/264] mac:use of bash [[ instead of bsd [ --- tools/osx/macosx_bundle.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 64738d283..063dde984 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -39,7 +39,7 @@ function ModifyInstallNames { msg "Modifying install names: ${x}" { # id - if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then + if [[ ${x:(-6)} == ".dylib" ]] || [[ f${x:(-3)} == ".so" ]]; then install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} fi GetDependencies "${x}" | while read -r y @@ -51,13 +51,13 @@ function ModifyInstallNames { } # Source check -if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then +if [[ ! -d ${CMAKE_BUILD_TYPE} ]]; then msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." exit 1 fi # Update project version -if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then +if [[ -x $(which git) && -d ${PROJECT_SOURCE_DIR}/.git ]]; then ### This section is copied from tools/generateReleaseInfo # Get version description. # Depending on whether you checked out a branch (dev) or a tag (release), @@ -87,7 +87,7 @@ if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then fi MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')" -if [[ -z "${MINIMUM_SYSTEM_VERSION}" ]]; then +if [[ -z ${MINIMUM_SYSTEM_VERSION} ]]; then MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" fi @@ -110,7 +110,7 @@ EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" -if [[ -n ${FANCY_DMG} ]] ; then +if [[ -n ${FANCY_DMG} ]]; then echo "Fancy .dmg build is ON." fi @@ -262,7 +262,7 @@ ModifyInstallNames # fix @rpath in Frameworks msg "Registering @rpath in Frameworks folder." -for frameworklibs in "${LIB}"/*{dylib,so} ; do +for frameworklibs in "${LIB}"/*{dylib,so}; do install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib "${frameworklibs}" install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" done @@ -270,12 +270,12 @@ install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABL install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli # Codesign the app -if [ -n "${CODESIGNID}" ] ; then +if [[ -n ${CODESIGNID} ]]; then msg "Codesigning Application." install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements mv "${EXECUTABLE}"-cli "${LIB}" - for frameworklibs in "${LIB}"/* ; do + for frameworklibs in "${LIB}"/*; do codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}" done codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" @@ -283,7 +283,7 @@ if [ -n "${CODESIGNID}" ] ; then fi # Notarize the app -if [ -n "$NOTARY" ] ; then +if [[ -n $NOTARY ]]; then msg "Notarizing the application:" ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` @@ -293,12 +293,12 @@ if [ -n "$NOTARY" ] ; then do fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` - if [ "$status1" = "success" ]; then + if [[ $status1 = "success" ]]; then xcrun stapler staple *app # staple the ticket xcrun stapler validate -v *app echo "Notarization success" break - elif [ "$status1" = "in" ]; then + elif [[ $status1 = "in" ]]; then echo "Notarization still in progress, sleeping for 15 seconds and trying again" sleep 15 else @@ -335,7 +335,7 @@ function CreateDmg { fi msg "Creating disk image:" - if [ ! -z ${FANCY_DMG} ] ; then + if [[ ! -z ${FANCY_DMG} ]]; then echo "Building Fancy .dmg" mkdir "${srcDir}/.background" cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" @@ -354,12 +354,12 @@ function CreateDmg { fi # Sign disk image - if [ -n "$CODESIGNID" ] ; then + if [[ -n $CODESIGNID ]]; then codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" fi # Notarize the dmg - if ! test -z "$NOTARY" ; then + if ! test -z "$NOTARY"; then msg "Notarizing the dmg:" zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` @@ -369,12 +369,12 @@ function CreateDmg { do fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` - if [ "$status1" = "success" ]; then + if [[ $status1 = "success" ]]; then xcrun stapler staple "${dmg_name}.dmg" # staple the ticket xcrun stapler validate -v "${dmg_name}.dmg" echo "dmg Notarization success" break - elif [ "$status1" = "in" ]; then + elif [[ $status1 = "in" ]]; then echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again" sleep 15 else From 7ccf6304792fd80ea9249a948046267ce2dfce50 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 24 Feb 2020 11:17:48 -0800 Subject: [PATCH 125/264] mac:use of Bash substring removal --- tools/osx/macosx_bundle.sh | 41 +++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 063dde984..2352133a9 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -51,13 +51,13 @@ function ModifyInstallNames { } # Source check -if [[ ! -d ${CMAKE_BUILD_TYPE} ]]; then +if [[ ! -d $CMAKE_BUILD_TYPE ]]; then msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." exit 1 fi # Update project version -if [[ -x $(which git) && -d ${PROJECT_SOURCE_DIR}/.git ]]; then +if [[ -x $(which git) && -d $PROJECT_SOURCE_DIR/.git ]]; then ### This section is copied from tools/generateReleaseInfo # Get version description. # Depending on whether you checked out a branch (dev) or a tag (release), @@ -87,7 +87,7 @@ if [[ -x $(which git) && -d ${PROJECT_SOURCE_DIR}/.git ]]; then fi MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')" -if [[ -z ${MINIMUM_SYSTEM_VERSION} ]]; then +if [[ -z $MINIMUM_SYSTEM_VERSION ]]; then MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" fi @@ -105,12 +105,29 @@ PWD: ${PWD} __EOS__ minimum_macos_version=${MINIMUM_SYSTEM_VERSION} -LOCAL_PREFIX="$(cmake .. -LA -N | grep "LOCAL_PREFIX" | cut -d "=" -f2)" -EXPATLIB="$(cmake .. -LA -N | grep "pkgcfg_lib_EXPAT_expat" | cut -d "=" -f2)" -CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)" -NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" -FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" -if [[ -n ${FANCY_DMG} ]]; then + +# Retreive cached values from cmake + +#In: LOCAL_PREFIX:STRING=/opt +#Out: /opt +LOCAL_PREFIX="$(cmake .. -L -N | grep LOCAL_PREFIX)"; LOCAL_PREFIX="${LOCAL_PREFIX#*=}" + +#In: pkgcfg_lib_EXPAT_expat:FILEPATH=/opt/local/lib/libexpat.dylib +#Out: /opt/local/lib/libexpat.dylib +EXPATLIB="$(cmake .. -LA -N | grep pkgcfg_lib_EXPAT_expat)"; pkgcfg_lib_EXPAT_expat="${pkgcfg_lib_EXPAT_expat#*=}" + +#In: CODESIGNID:STRING=Developer ID Application: Doctor Who (1234567890) +#Out: Developer ID Application: Doctor Who (1234567890) +CODESIGNID="$(cmake .. -L -N | grep CODESIGNID)"; CODESIGNID="${CODESIGNID#*=}" + +#In: NOTARY:STRING=--username drwho@bbc.com --password abcd-efgh-hijk-lmno +#Out: --username drwho@bbc.com --password abcd-efgh-hijk-lmno +NOTARY="$(cmake .. -L -N | grep NOTARY)"; NOTARY="${NOTARY#*=}" + +# In: FANCY_DMG:BOOL=ON +# Out: ON +FANCY_DMG="$(cmake .. -L -N | grep FANCY_DMG)"; FANCY_DMG="${FANCY_DMG#*=}" +if [[ -n $FANCY_DMG ]]; then echo "Fancy .dmg build is ON." fi @@ -270,7 +287,7 @@ install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABL install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli # Codesign the app -if [[ -n ${CODESIGNID} ]]; then +if [[ -n $CODESIGNID ]]; then msg "Codesigning Application." install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements @@ -330,12 +347,12 @@ function CreateDmg { # Disk image name dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" - if [[ ${lower_build_type} != release ]]; then + if [[ $lower_build_type != release ]]; then dmg_name="${dmg_name}_${lower_build_type}" fi msg "Creating disk image:" - if [[ ! -z ${FANCY_DMG} ]]; then + if [[ ! -z $FANCY_DMG ]]; then echo "Building Fancy .dmg" mkdir "${srcDir}/.background" cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" From 87136185ec985adbc3450ad54b670fdcf4bc2540 Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 24 Feb 2020 11:31:46 -0800 Subject: [PATCH 126/264] try git rm on UpdateInfo.cmake --- UpdateInfo.cmake | 110 ----------------------------------------------- 1 file changed, 110 deletions(-) delete mode 100644 UpdateInfo.cmake diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake deleted file mode 100644 index c6f9d6ee3..000000000 --- a/UpdateInfo.cmake +++ /dev/null @@ -1,110 +0,0 @@ -# cmakefile executed within a makefile target - -# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed -find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH) -if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) - # we look for the git command in this paths by order of preference - if(WIN32) - find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../) - elseif(APPLE) - find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") - find_program(GIT_CMD git) - set(SHELL "/bin/bash") - else(WIN32) # Linux - find_program(GIT_CMD git) - set(SHELL "/bin/bash") - endif(WIN32) - - # Fail if Git is not installed - if(GIT_CMD STREQUAL GIT_CMD-NOTFOUND) - message(FATAL_ERROR "git command not found!") - else() - message(STATUS "git command found: ${GIT_CMD}") - endif() - - # Get version description. - # Depending on whether you checked out a branch (dev) or a tag (release), - # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. - execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - - # Get branch name. - # Will return empty if you checked out a commit or tag. Empty string handled later. - execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - - # Get commit hash. - execute_process(COMMAND ${GIT_CMD} rev-parse --short --verify HEAD OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - - # Get commit date, YYYY-MM-DD. - execute_process(COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - - # Get number of commits since tagging. This is what "GIT_DESCRIBE" uses. - # Works when checking out branch, tag or commit. - # Get a list of all tags in repo: - execute_process(COMMAND ${GIT_CMD} tag --merged HEAD OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - # Replace newlines with semicolons so that it can be split: - string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}") - execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - - # Get number of commits since branching. - # Works when checking out branch, tag or commit. - execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") - - # If user checked-out something which is not a branch, use the description as branch name. - if(GIT_BRANCH STREQUAL "") - set(GIT_BRANCH "${GIT_DESCRIBE}") - endif() - - # Create numeric version. - # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. - # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). - if(GIT_COMMITS_SINCE_TAG STREQUAL "") - set(GIT_NUMERIC_VERSION_BS "0.0.0") - else() - string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) - set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") - endif() - - message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") - - if(NOT DEFINED CACHE_NAME_SUFFIX) - set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") - message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"") - else() - message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"") - endif() - -else(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) - include("${PROJECT_SOURCE_DIR}/ReleaseInfo.cmake") -endif(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) - -if(WIN32) - if(BIT_DEPTH EQUAL 4) - set(BUILD_BIT_DEPTH 32) - # 32 bits builds has to be installable on 64 bits system, to support WinXP/64. - set(ARCHITECTURE_ALLOWED "x86 x64 ia64") - # installing in 32 bits mode even on 64 bits OS and architecture - set(INSTALL_MODE "") - elseif(BIT_DEPTH EQUAL 8) - set(BUILD_BIT_DEPTH 64) - # Restricting the 64 bits builds to 64 bits systems only - set(ARCHITECTURE_ALLOWED "x64 ia64") - # installing in 64 bits mode for all 64 bits processors, even for itanium architecture - set(INSTALL_MODE "x64 ia64") - endif(BIT_DEPTH EQUAL 4) - # set part of the output archive name - set(SYSTEM_NAME "WinVista") - - configure_file("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") -endif(WIN32) - -# build version.h from template -configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") -# build AboutThisBuild.txt from template -configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") From 52172a1b6a7150e5145efb8b4308799b54eb15ef Mon Sep 17 00:00:00 2001 From: Richard Barber Date: Mon, 24 Feb 2020 11:34:11 -0800 Subject: [PATCH 127/264] copy UpdateInfo.cmake from fresh clone --- UpdateInfo.cmake | 110 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 UpdateInfo.cmake diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake new file mode 100644 index 000000000..d1f532506 --- /dev/null +++ b/UpdateInfo.cmake @@ -0,0 +1,110 @@ +# cmakefile executed within a makefile target + +# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed +find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH) +if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) + # we look for the git command in this paths by order of preference + if(WIN32) + find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../) + elseif(APPLE) + find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") + find_program(GIT_CMD git) + set(SHELL "/bin/bash") + else(WIN32) # Linux + find_program(GIT_CMD git) + set(SHELL "/bin/bash") + endif(WIN32) + + # Fail if Git is not installed + if(GIT_CMD STREQUAL GIT_CMD-NOTFOUND) + message(FATAL_ERROR "git command not found!") + else() + message(STATUS "git command found: ${GIT_CMD}") + endif() + + # Get version description. + # Depending on whether you checked out a branch (dev) or a tag (release), + # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. + execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + + # Get branch name. + # Will return empty if you checked out a commit or tag. Empty string handled later. + execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + + # Get commit hash. + execute_process(COMMAND ${GIT_CMD} rev-parse --short --verify HEAD OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + + # Get commit date, YYYY-MM-DD. + execute_process(COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + + # Get number of commits since tagging. This is what "GIT_DESCRIBE" uses. + # Works when checking out branch, tag or commit. + # Get a list of all tags in repo: + execute_process(COMMAND ${GIT_CMD} tag --merged HEAD OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + # Replace newlines with semicolons so that it can be split: + string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}") + execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + + # Get number of commits since branching. + # Works when checking out branch, tag or commit. + execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") + + # If user checked-out something which is not a branch, use the description as branch name. + if(GIT_BRANCH STREQUAL "") + set(GIT_BRANCH "${GIT_DESCRIBE}") + endif() + + # Create numeric version. + # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. + # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). + if(GIT_COMMITS_SINCE_TAG STREQUAL "") + set(GIT_NUMERIC_VERSION_BS "0.0.0") + else() + string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) + set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") + endif() + + message(STATUS "Git checkout information:") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + + if(NOT DEFINED CACHE_NAME_SUFFIX) + set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") + message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"") + else() + message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"") + endif() + +else(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) + include("${PROJECT_SOURCE_DIR}/ReleaseInfo.cmake") +endif(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) + +if(WIN32) + if(BIT_DEPTH EQUAL 4) + set(BUILD_BIT_DEPTH 32) + # 32 bits builds has to be installable on 64 bits system, to support WinXP/64. + set(ARCHITECTURE_ALLOWED "x86 x64 ia64") + # installing in 32 bits mode even on 64 bits OS and architecture + set(INSTALL_MODE "") + elseif(BIT_DEPTH EQUAL 8) + set(BUILD_BIT_DEPTH 64) + # Restricting the 64 bits builds to 64 bits systems only + set(ARCHITECTURE_ALLOWED "x64 ia64") + # installing in 64 bits mode for all 64 bits processors, even for itanium architecture + set(INSTALL_MODE "x64 ia64") + endif(BIT_DEPTH EQUAL 4) + # set part of the output archive name + set(SYSTEM_NAME "WinVista") + + configure_file("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") +endif(WIN32) + +# build version.h from template +configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") +# build AboutThisBuild.txt from template +configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") From e80426bb2fbfb01453fad7f7fb942d2fca6db40d Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Feb 2020 08:14:51 +0100 Subject: [PATCH 128/264] supress warning in colortemp.cc --- rtengine/colortemp.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 896beafbe..0edd7aeb2 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -29,10 +29,6 @@ #include "settings.h" #include "iccstore.h" -#undef CLIPD -#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0) -#define CLIPQQ(a) ((a)>0?((a)<250?(a):250):0) -#define MAXR(a,b) ((a) > (b) ? (a) : (b)) namespace rtengine { From 10b85f14cdd83a3b0098527702fda1ec1dbf0666 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 25 Feb 2020 09:04:18 +0100 Subject: [PATCH 129/264] generateTranslationDiffs on default only --- rtdata/languages/default | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index c4a771e0d..a807ba9ea 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -789,16 +789,16 @@ HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor HISTORY_MSG_TRANS_Method;Geometry - Method HISTORY_MSG_WAVCLARI;Clarity -HISTORY_MSG_WAVUSHAMET;Clarity method -HISTORY_MSG_WAVMERGEL;Merge L +HISTORY_MSG_WAVEDGS;Edge stopping HISTORY_MSG_WAVMERGEC;Merge C +HISTORY_MSG_WAVMERGEL;Merge L +HISTORY_MSG_WAVRADIUS;Radius Shadows-Highlight +HISTORY_MSG_WAVSCALE;Scale +HISTORY_MSG_WAVSHOWMASK;Show wavelet mask HISTORY_MSG_WAVSIGMA;Sigma HISTORY_MSG_WAVSOFTRAD;Soft radius clarity HISTORY_MSG_WAVSOFTRADEND;Soft radius final -HISTORY_MSG_WAVSHOWMASK;Show wavelet mask -HISTORY_MSG_WAVEDGS;Edge stopping -HISTORY_MSG_WAVSCALE;Scale -HISTORY_MSG_WAVRADIUS;Radius Shadows-Highlight +HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -2132,6 +2132,7 @@ TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold betwe TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" TP_WAVELET_CHSL;Sliders TP_WAVELET_CHTYPE;Chrominance method +TP_WAVELET_CLA;Clarity TP_WAVELET_CLARI;Sharp-mask and Clarity TP_WAVELET_COLORT;Opacity Red-Green TP_WAVELET_COMPCONT;Contrast @@ -2215,8 +2216,8 @@ TP_WAVELET_MEDGREINF;First level TP_WAVELET_MEDI;Reduce artifacts in blue sky TP_WAVELET_MEDILEV;Edge detection TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. -TP_WAVELET_MERGEL;Merge Luma TP_WAVELET_MERGEC;Merge Chroma +TP_WAVELET_MERGEL;Merge Luma TP_WAVELET_NEUTRAL;Neutral TP_WAVELET_NOIS;Denoise TP_WAVELET_NOISE;Denoise and Refine @@ -2241,6 +2242,8 @@ TP_WAVELET_RESCONH;Highlights TP_WAVELET_RESID;Residual Image TP_WAVELET_SAT;Saturated chroma TP_WAVELET_SETTINGS;Wavelet Settings +TP_WAVELET_SHA;Sharp mask +TP_WAVELET_SHOWMASK;Show wavelet 'mask' TP_WAVELET_SIGMA;Sigma TP_WAVELET_SKIN;Skin targetting/protection TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. @@ -2261,23 +2264,20 @@ TP_WAVELET_TILESFULL;Full image TP_WAVELET_TILESIZE;Tiling method TP_WAVELET_TILESLIT;Little tiles TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. +TP_WAVELET_TMEDGS;Edge stopping +TP_WAVELET_TMSCALE;Scale TP_WAVELET_TMSTRENGTH;Compression strength TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. TP_WAVELET_TMTYPE;Compression method -TP_WAVELET_TMEDGS;Edge stopping -TP_WAVELET_TMSCALE;Scale TP_WAVELET_TON;Toning -TP_WAVELET_USHARP;Clarity method TP_WAVELET_USH;None -TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. -TP_WAVELET_SHA;Sharp mask -TP_WAVELET_SHOWMASK;Show wavelet 'mask' -TP_WAVELET_CLA;Clarity -TP_WAVELET_USHARP;Sharp method +TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment +TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, wavelet settings will be automatically positioned :\nBackground=black, Process=below, level=3...you can change level between 1 and 4.\n\nIf you select Clarity, wavelet settings will be automatically positioned :\nBackground=residual, Process=above, level=7..you can change level between 5 and 10 and wavelet levels. TP_WBALANCE_AUTO;Auto -TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic. -TP_WBALANCE_STUDLABEL;Student Itcwb: %1 +TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation +TP_WBALANCE_AUTOOLD;Auto RGB grey +TP_WBALANCE_AUTO_HEADER;Autos TP_WBALANCE_CAMERA;Camera TP_WBALANCE_CLOUDY;Cloudy TP_WBALANCE_CUSTOM;Custom @@ -2287,9 +2287,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of "whi TP_WBALANCE_FLASH55;Leica TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta -TP_WBALANCE_AUTO_HEADER;Autos -TP_WBALANCE_AUTOOLD;Auto RGB grey -TP_WBALANCE_AUTOITCGREEN;Auto iterate temperature correlation TP_WBALANCE_FLASH_HEADER;Flash TP_WBALANCE_FLUO1;F1 - Daylight TP_WBALANCE_FLUO2;F2 - Cool White @@ -2322,6 +2319,8 @@ TP_WBALANCE_SOLUX41;Solux 4100K TP_WBALANCE_SOLUX47;Solux 4700K (vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. +TP_WBALANCE_STUDLABEL;Student Itcwb: %1 +TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic. TP_WBALANCE_TEMPBIAS;AWB temperature bias TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". TP_WBALANCE_TEMPERATURE;Temperature From 0055d0705d04b014e25b0465cb9be8a60f59295b Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 25 Feb 2020 09:16:11 +0100 Subject: [PATCH 130/264] Removed unnecessary test in rtengine/CMakeLists.txt --- rtengine/CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 8d13f0d6e..5f59da371 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -195,8 +195,4 @@ target_link_libraries(rtengine rtexif ${KLT_LIBRARIES} ) -if(APPLE) - install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) -else() - install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) -endif() +install(FILES ${CAMCONSTSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) From 326153859a7fa956d59ea00fc8a2b18389540858 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 25 Feb 2020 10:06:35 +0100 Subject: [PATCH 131/264] Removed unnecessarily repeated test expressions --- UpdateInfo.cmake | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index d1f532506..60e3c16b3 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -10,10 +10,10 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") find_program(GIT_CMD git) set(SHELL "/bin/bash") - else(WIN32) # Linux + else() # Linux find_program(GIT_CMD git) set(SHELL "/bin/bash") - endif(WIN32) + endif() # Fail if Git is not installed if(GIT_CMD STREQUAL GIT_CMD-NOTFOUND) @@ -79,10 +79,9 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) else() message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"") endif() - -else(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) +else() include("${PROJECT_SOURCE_DIR}/ReleaseInfo.cmake") -endif(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) +endif() if(WIN32) if(BIT_DEPTH EQUAL 4) @@ -97,12 +96,12 @@ if(WIN32) set(ARCHITECTURE_ALLOWED "x64 ia64") # installing in 64 bits mode for all 64 bits processors, even for itanium architecture set(INSTALL_MODE "x64 ia64") - endif(BIT_DEPTH EQUAL 4) + endif() # set part of the output archive name set(SYSTEM_NAME "WinVista") configure_file("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") -endif(WIN32) +endif() # build version.h from template configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") From 0206b578218c72daf777a3abc346130d28f6ad6d Mon Sep 17 00:00:00 2001 From: Beep6581 Date: Tue, 25 Feb 2020 11:53:20 +0100 Subject: [PATCH 132/264] Update main.yml formatting --- .github/workflows/main.yml | 138 ++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 65 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 45c877559..a129f1118 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,70 +1,78 @@ name: macOS build - -on: - push - +on: push jobs: build: - runs-on: macos-latest - steps: - - uses: actions/checkout@v1 - - name: Install dependencies - run: brew install gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme libsigc++ little-cms2 libiptcdata fftw lensfun llvm expat pkgconfig libomp shared-mime-info - - name: patch libiconv - run: | - mkdir libiconv && cd libiconv - wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz - tar xf libiconv-1.16.tar.gz - cd libiconv-1.16 - patch -p1 < "${GITHUB_WORKSPACE}/tools/osx/libiconv_1.16_rt.patch" - mkdir build && cd build - destDir="$(pwd)" - ../configure --prefix=/opt/local --disable-static 'CFLAGS=-arch x86_64 -mmacosx-version-min=10.9' 'LDFLAGS=-arch x86_64 -mmacosx-version-min=10.9' CXXFLAGS="-arch x86_64 -mmacosx-version-min=10.9" - make --jobs - make DESTDIR="${destDir}" install - sudo mv opt/local /usr/local/opt/libiconv - - name: cmake - env: - CMAKE_CXX_STANDARD: 11 - PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig - RAW_THERAPEE_MAJOR: '5' - RAW_THERAPEE_MINOR: '8' - C_FLAGS: -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include -I/usr/local/opt/expat/include -I/usr/local/opt/llvm/include - run: | - # GITHUB_REF is the ref that triggered the build, like refs/heads/new-feature - the next line parses that to REF: the branch name only (new-feature) - REF=${GITHUB_REF##*/} - mkdir build && cd build - cmake \ - -DCMAKE_BUILD_TYPE="release" \ - -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ - -DCMAKE_EXE_LINKER_FLAGS="-L/usr/local/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -L/usr/local/opt/gdk-pixbuf/lib -L/usr/local/opt/libiconv/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libxml2/lib -L/usr/local/opt/expat/lib" \ - -DCACHE_NAME_SUFFIX="${RAW_THERAPEE_MAJOR}.${RAW_THERAPEE_MINOR}-${REF}" \ - -DPROC_TARGET_NUMBER="2" \ - -DPROC_LABEL="generic processor" \ - -DWITH_LTO="OFF" \ - -DLENSFUNDBDIR="./share/lensfun" \ - -DOpenMP_C_FLAGS=-fopenmp=libomp \ - -DOpenMP_CXX_FLAGS=-fopenmp=libomp \ - -DOpenMP_C_LIB_NAMES="libomp" \ - -DOpenMP_CXX_LIB_NAMES="libomp" \ - -DOpenMP_libomp_LIBRARY="/usr/local/lib/libomp.dylib" \ - -DOpenMP_C_FLAGS="${C_FLAGS}" \ - -DOpenMP_CXX_FLAGS="${C_FLAGS}" \ - -DCMAKE_AR="/usr/local/opt/llvm/bin/llvm-ar" \ - -DCMAKE_RANLIB="/usr/local/opt/llvm/bin/llvm-ranlib" \ - -DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" - .. - make --jobs - make install - sudo make macosx_bundle - ARTIFACT=(RawTherapee*.zip) - echo "=== artifact: ${ARTIFACT}" - # defining environment variables for next step as per https://github.com/actions/starter-workflows/issues/68 - echo "::set-env name=ARTIFACT_PATH::${GITHUB_WORKSPACE}/build/${ARTIFACT}" - echo "::set-env name=ARTIFACT_FILE::${ARTIFACT}" - - uses: actions/upload-artifact@v1 - with: - name: ${{env.ARTIFACT_FILE}} - path: ${{env.ARTIFACT_PATH}} + - uses: actions/checkout@v1 + - name: Install dependencies + run: > + brew install gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme + libsigc++ little-cms2 libiptcdata fftw lensfun llvm expat pkgconfig + libomp shared-mime-info + - name: patch libiconv + run: | + mkdir libiconv && cd libiconv + wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz + tar xf libiconv-1.16.tar.gz + cd libiconv-1.16 + patch -p1 < "${GITHUB_WORKSPACE}/tools/osx/libiconv_1.16_rt.patch" + mkdir build && cd build + destDir="$(pwd)" + ../configure --prefix=/opt/local --disable-static \ + CFLAGS='-arch x86_64 -mmacosx-version-min=10.9' \ + LDFLAGS='-arch x86_64 -mmacosx-version-min=10.9' \ + CXXFLAGS='-arch x86_64 -mmacosx-version-min=10.9' + make --jobs + make DESTDIR="${destDir}" install + sudo mv opt/local /usr/local/opt/libiconv + - name: cmake + env: + CMAKE_CXX_STANDARD: 11 + PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig + RAW_THERAPEE_MAJOR: '5' + RAW_THERAPEE_MINOR: '8' + C_FLAGS: > + -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib + -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include + -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include + -I/usr/local/opt/expat/include -I/usr/local/opt/llvm/include + run: | + # GITHUB_REF is the ref that triggered the build, like + # refs/heads/new-feature - the next line parses that to REF: the branch + # name only (new-feature) + REF=${GITHUB_REF##*/} + mkdir build && cd build + cmake \ + -DCMAKE_BUILD_TYPE="release" \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ + -DCMAKE_EXE_LINKER_FLAGS="-L/usr/local/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -L/usr/local/opt/gdk-pixbuf/lib -L/usr/local/opt/libiconv/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libxml2/lib -L/usr/local/opt/expat/lib" \ + -DCACHE_NAME_SUFFIX="${RAW_THERAPEE_MAJOR}.${RAW_THERAPEE_MINOR}-${REF}" \ + -DPROC_TARGET_NUMBER="2" \ + -DPROC_LABEL="generic processor" \ + -DWITH_LTO="OFF" \ + -DLENSFUNDBDIR="./share/lensfun" \ + -DOpenMP_C_FLAGS=-fopenmp=libomp \ + -DOpenMP_CXX_FLAGS=-fopenmp=libomp \ + -DOpenMP_C_LIB_NAMES="libomp" \ + -DOpenMP_CXX_LIB_NAMES="libomp" \ + -DOpenMP_libomp_LIBRARY="/usr/local/lib/libomp.dylib" \ + -DOpenMP_C_FLAGS="${C_FLAGS}" \ + -DOpenMP_CXX_FLAGS="${C_FLAGS}" \ + -DCMAKE_AR="/usr/local/opt/llvm/bin/llvm-ar" \ + -DCMAKE_RANLIB="/usr/local/opt/llvm/bin/llvm-ranlib" \ + -DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" + .. + make --jobs + make install + sudo make macosx_bundle + ARTIFACT=(RawTherapee*.zip) + echo "=== artifact: ${ARTIFACT}" + # defining environment variables for next step as per + # https://github.com/actions/starter-workflows/issues/68 + echo "::set-env name=ARTIFACT_PATH::${GITHUB_WORKSPACE}/build/${ARTIFACT}" + echo "::set-env name=ARTIFACT_FILE::${ARTIFACT}" + - uses: actions/upload-artifact@v1 + with: + name: ${{env.ARTIFACT_FILE}} + path: ${{env.ARTIFACT_PATH}} From cdf4e6329dc4bfa25bc6b84b5c55c343b25df308 Mon Sep 17 00:00:00 2001 From: Beep6581 Date: Tue, 25 Feb 2020 11:53:49 +0100 Subject: [PATCH 133/264] Update main.yml fixes possible bug - missing continuation character --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a129f1118..46808ae40 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -61,7 +61,7 @@ jobs: -DOpenMP_CXX_FLAGS="${C_FLAGS}" \ -DCMAKE_AR="/usr/local/opt/llvm/bin/llvm-ar" \ -DCMAKE_RANLIB="/usr/local/opt/llvm/bin/llvm-ranlib" \ - -DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" + -DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" \ .. make --jobs make install From eeb24af8f0d9c76b107d4758412aec6a7427cae7 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Feb 2020 12:48:23 +0100 Subject: [PATCH 134/264] Suppress message in console except verbose --- rtengine/improccoordinator.cc | 12 +++++++++--- rtengine/rawimagesource.cc | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index d8d38e14a..f5bdbbc5d 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -255,7 +255,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) RAWParams rp = params->raw; ColorManagementParams cmp = params->icm; LCurveParams lcur = params->labCurve; - printf("metwb2=%s \n", params->wb.method.c_str()); + if (settings->verbose) { + printf("metwb2=%s \n", params->wb.method.c_str()); + } if (!highDetailNeeded) { // if below 100% magnification, take a fast path @@ -419,7 +421,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bool autowb = false; autowb = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - printf("automethod=%s \n", params->wb.method.c_str()); + if (settings->verbose) { + printf("automethod=%s \n", params->wb.method.c_str()); + } if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window @@ -447,7 +451,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) currWBitc = imgsrc->getWB(); double tempref = currWBitc.getTemp() * (1. + params->wb.tempBias); double greenref = currWBitc.getGreen(); - printf("tempref=%f greref=%f\n", tempref, greenref); + if (settings->verbose) { + printf("tempref=%f greref=%f\n", tempref, greenref); + } imgsrc->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 03992a648..9f7c08a8d 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -7034,7 +7034,9 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } - printf("ITCWB tempitc=%f gritc=%f stud=%f \n", tempitc, greenitc, studgood); + if (settings->verbose) { + printf("ITCWB tempitc=%f gritc=%f stud=%f \n", tempitc, greenitc, studgood); + } xc(0, 0); From 352873ea30d0c85c77f25c65b2a8a1818e71cec3 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Feb 2020 13:19:52 +0100 Subject: [PATCH 135/264] Suppress dispaly Student itcwb in Pick --- rtengine/improccoordinator.cc | 4 ++-- rtgui/whitebalance.cc | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index f5bdbbc5d..0ed8b1f97 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -494,9 +494,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } // if (params->wb.method == "Auto" && awbListener && params->wb.enabled) { - if (autowb && awbListener) { + if (autowb && awbListener && params->wb.method == "autitcgreen") { awbListener->WBChanged(params->wb.temperature, params->wb.green, studgood); - } + } /* GammaValues g_a; diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 5c57ca6a0..9a5f1a398 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -461,6 +461,7 @@ void WhiteBalance::optChanged () methconn.block(prevState); return; } + StudLabel->hide(); if (opt != row[methodColumns.colId]) { @@ -566,6 +567,8 @@ void WhiteBalance::optChanged () void WhiteBalance::spotPressed () { + StudLabel->hide(); + if (wblistener) { wblistener->spotWBRequested (getSize()); } From ad271a87eb448b1990a40181b42f8dce44069da7 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 25 Feb 2020 17:02:00 +0100 Subject: [PATCH 136/264] clang errors: variable-sized object initialization, fixes #5667 --- rtengine/rawimagesource.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 9f7c08a8d..3cabaf5b2 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -6394,22 +6394,25 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } ; - int histxy[siza] = {};//number of values for each pair xy + int histxy[siza];//number of values for each pair xy - float area[siza] = {};//multiplier for compensation differences area ==> big areas are rare near limit prophotos or more + float area[siza];//multiplier for compensation differences area ==> big areas are rare near limit prophotos or more - int inter[siza] = {}; //interest for photographie 1 = small (limit gamut) 2 = normal 3 = major (skin, sky, neutral) + int inter[siza]; //interest for photographie 1 = small (limit gamut) 2 = normal 3 = major (skin, sky, neutral) - float xxx[siza] = {};//for color references calculated ==> max in images "like histogram" + float xxx[siza];//for color references calculated ==> max in images "like histogram" - float yyy[siza] = {}; + float yyy[siza]; - float YYY[siza] = {};//not used directly, but necessary to keep good range + float YYY[siza];//not used directly, but necessary to keep good range for (int p = 0; p < siza; p++) { histxy[p] = 0; area[p] = 20.f; inter[p] = 1; + xxx[p] = 0.f; + yyy[p] = 0.f; + YYY[p] = 0.f; } float estimchrom = 0.f; From 278f9d019ee6505a1c89bcdf0ae78265be3647fe Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 25 Feb 2020 17:09:27 +0100 Subject: [PATCH 137/264] Fix clang warnings --- rtengine/rawimagesource.h | 6 +++--- rtengine/stdimagesource.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 51c369a79..1b80804e9 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -143,9 +143,9 @@ public: void processFlatField(const procparams::RAWParams &raw, const RawImage *riFlatFile, const float black[4]); void copyOriginalPixels(const procparams::RAWParams &raw, RawImage *ri, RawImage *riDark, RawImage *riFlatFile, array2D &rawData ); void scaleColors (int winx, int winy, int winw, int winh, const procparams::RAWParams &raw, array2D &rawData); // raw for cblack - void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw); - void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw); - void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w); + void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; + void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; + void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; eSensorType getSensorType () const override; diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 5b83ba42e..b88db42c4 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -58,15 +58,15 @@ public: int load (const Glib::ustring &fname) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; - void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w); + void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) override; ColorTemp getWB () const override { return wb; } void getAutoWBMultipliers (double &rm, double &gm, double &bm) override; ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) override; - void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw); - void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw); + void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; + void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; eSensorType getSensorType() const override {return ST_NONE;} bool isMono() const override {return false;} From 603b55e69093626b4ca4ae8fa99198ad96a9ff2b Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 25 Feb 2020 17:28:19 +0100 Subject: [PATCH 138/264] Preset cat02 automatic --- rtdata/languages/default | 3 + rtengine/improccoordinator.cc | 6 +- rtengine/procparams.cc | 8 +- rtengine/procparams.h | 1 + rtgui/colorappearance.cc | 156 +++++++++++++++++++++++++++++++++- rtgui/colorappearance.h | 10 ++- rtgui/paramsedited.cc | 6 ++ rtgui/paramsedited.h | 1 + 8 files changed, 184 insertions(+), 7 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index a807ba9ea..59de4bb40 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -728,6 +728,7 @@ HISTORY_MSG_491;White Balance HISTORY_MSG_492;RGB Curves HISTORY_MSG_493;L*a*b* Adjustments HISTORY_MSG_494;Capture Sharpening +HISTORY_MSG_CAT02PRESET;Cat02 automatic preset HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -1447,6 +1448,8 @@ TP_COLORAPP_MODEL;WP Model TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. TP_COLORAPP_NEUTRAL;Reset TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values +TP_COLORAPP_PRESETCAT02;Preset cat02 automatic +TP_COLORAPP_PRESETCAT02_TIP;Set combobox, sliders, temp, green so that Cat02 automatic is preset.\nYou must change Cat02 adaptation Viewing conditions if need, and other settings if need. TP_COLORAPP_RSTPRO;Red & skin-tones protection TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves. TP_COLORAPP_SURROUND;Surround diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 0ed8b1f97..2a5d7cf8f 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1160,15 +1160,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ipf.ciecam_02float(ncie, float (adap), pW, 2, nprevl, params.get(), customColCurve1, customColCurve2, customColCurve3, histLCAM, histCCAM, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 0 , scale, execsharp, d, dj, yb, 1); - if ((params->colorappearance.autodegree || params->colorappearance.autodegreeout) && acListener && params->colorappearance.enabled) { + if ((params->colorappearance.autodegree || params->colorappearance.autodegreeout) && acListener && params->colorappearance.enabled && !params->colorappearance.presetcat02) { acListener->autoCamChanged(100.* (double)d, 100.* (double)dj); } - if (params->colorappearance.autoadapscen && acListener && params->colorappearance.enabled) { + if (params->colorappearance.autoadapscen && acListener && params->colorappearance.enabled && !params->colorappearance.presetcat02) { acListener->adapCamChanged(adap); //real value of adapt scene } - if (params->colorappearance.autoybscen && acListener && params->colorappearance.enabled) { + if (params->colorappearance.autoybscen && acListener && params->colorappearance.enabled && !params->colorappearance.presetcat02) { acListener->ybCamChanged((int) yb); //real value Yb scene } } else { diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 7d83b50d2..a4502b470 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1398,7 +1398,8 @@ ColorAppearanceParams::ColorAppearanceParams() : ybout(18), greenout(1.0), tempsc(5000), - greensc(1.0) + greensc(1.0), + presetcat02(false) { } @@ -1443,7 +1444,8 @@ bool ColorAppearanceParams::operator ==(const ColorAppearanceParams& other) cons && ybout == other.ybout && greenout == other.greenout && tempsc == other.tempsc - && greensc == other.greensc; + && greensc == other.greensc + && presetcat02 == other.presetcat02; } bool ColorAppearanceParams::operator !=(const ColorAppearanceParams& other) const @@ -3239,6 +3241,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->colorappearance.ybout, "Color appearance", "Ybout", colorappearance.ybout, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.datacie, "Color appearance", "Datacie", colorappearance.datacie, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.tonecie, "Color appearance", "Tonecie", colorappearance.tonecie, keyFile); + saveToKeyfile(!pedited || pedited->colorappearance.presetcat02, "Color appearance", "Presetcat02", colorappearance.presetcat02, keyFile); const std::map ca_mapping = { {ColorAppearanceParams::TcMode::LIGHT, "Lightness"}, @@ -4229,6 +4232,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Color appearance", "Ybout", pedited, colorappearance.ybout, pedited->colorappearance.ybout); assignFromKeyfile(keyFile, "Color appearance", "Datacie", pedited, colorappearance.datacie, pedited->colorappearance.datacie); assignFromKeyfile(keyFile, "Color appearance", "Tonecie", pedited, colorappearance.tonecie, pedited->colorappearance.tonecie); + assignFromKeyfile(keyFile, "Color appearance", "Presetcat02", pedited, colorappearance.presetcat02, pedited->colorappearance.presetcat02); const std::map tc_mapping = { {"Lightness", ColorAppearanceParams::TcMode::LIGHT}, diff --git a/rtengine/procparams.h b/rtengine/procparams.h index e6828f570..034577cb6 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -680,6 +680,7 @@ struct ColorAppearanceParams { double greenout; int tempsc; double greensc; + bool presetcat02; ColorAppearanceParams(); diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 9468770fc..eed1c074b 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -25,6 +25,7 @@ #include "guiutils.h" #include "options.h" #include "rtimage.h" +#include "eventmapper.h" #include "../rtengine/color.h" #include "../rtengine/procparams.h" @@ -217,8 +218,16 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" milestones.push_back ( GradientMilestone (0., 0., 0., 0.) ); milestones.push_back ( GradientMilestone (1., 1., 1., 1.) ); + auto m = ProcEventMapper::getInstance(); + Evcatpreset = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_CAT02PRESET"); - // ------------------------ Process #1: Converting to CIECAM + //preset button cat02 + presetcat02 = Gtk::manage (new Gtk::CheckButton (M ("TP_COLORAPP_PRESETCAT02"))); + presetcat02->set_tooltip_markup (M("TP_COLORAPP_PRESETCAT02_TIP")); + presetcat02conn = presetcat02->signal_toggled().connect( sigc::mem_fun(*this, &ColorAppearance::presetcat02pressed)); + pack_start (*presetcat02, Gtk::PACK_SHRINK); + + // ----------------------- Process #1: Converting to CIECAM // Process 1 frame @@ -801,6 +810,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) tcmodeconn.block (true); tcmode2conn.block (true); tcmode3conn.block (true); + presetcat02conn.block (true); shape->setCurve (pp->colorappearance.curve); shape2->setCurve (pp->colorappearance.curve2); shape3->setCurve (pp->colorappearance.curve3); @@ -808,7 +818,12 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) toneCurveMode2->set_active (toUnderlying(pp->colorappearance.curveMode2)); toneCurveMode3->set_active (toUnderlying(pp->colorappearance.curveMode3)); curveMode3Changed(); // This will set the correct sensitive state of depending Adjusters + presetcat02->set_active(pp->colorappearance.presetcat02); + nexttemp = pp->wb.temperature; + nextgreen = pp->wb.green; + + printf("temp=%f green=%f\n", nexttemp, nextgreen); if (pedited) { degree->setEditedState (pedited->colorappearance.degree ? Edited : UnEdited); degreeout->setEditedState (pedited->colorappearance.degreeout ? Edited : UnEdited); @@ -858,6 +873,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) if (!pedited->colorappearance.curveMode3) { toneCurveMode3->set_active (3); } + presetcat02->set_inconsistent(!pedited->colorappearance.presetcat02); } @@ -993,6 +1009,10 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) ybout->setValue (pp->colorappearance.ybout); tempsc->setValue (pp->colorappearance.tempsc); greensc->setValue (pp->colorappearance.greensc); + presetcat02conn.block (true); + presetcat02->set_active (pp->colorappearance.presetcat02); + presetcat02conn.block (false); + lastpresetcat02 = pp->colorappearance.presetcat02; tcmode3conn.block (false); tcmode2conn.block (false); @@ -1045,6 +1065,7 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) pp->colorappearance.ybout = ybout->getValue (); pp->colorappearance.tempsc = tempsc->getValue (); pp->colorappearance.greensc = greensc->getValue (); + pp->colorappearance.presetcat02 = presetcat02->get_active(); int tcMode = toneCurveMode->get_active_row_number(); @@ -1114,6 +1135,7 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) pedited->colorappearance.ybout = ybout->getEditedState (); pedited->colorappearance.tempsc = tempsc->getEditedState (); pedited->colorappearance.greensc = greensc->getEditedState (); + pedited->colorappearance.presetcat02 = presetcat02->get_inconsistent (); } @@ -1309,6 +1331,130 @@ void ColorAppearance::badpix_toggled () { } */ +void ColorAppearance::presetcat02pressed () +{ + if (presetcat02->get_active ()) { + disableListener(); + jlight->resetValue (false); + qbright->resetValue (false); + chroma->resetValue (false); + schroma->resetValue (false); + mchroma->resetValue (false); + rstprotection->resetValue (false); + contrast->resetValue (false); + qcontrast->resetValue (false); + colorh->resetValue (false); + tempout->resetValue (false); + greenout->resetValue (false); + ybout->resetValue (false); + tempsc->resetValue (false); + greensc->resetValue (false); + badpixsl->resetValue (false); + wbmodel->set_active (0); + toneCurveMode->set_active (0); + toneCurveMode2->set_active (0); + toneCurveMode3->set_active (0); + shape->reset(); + shape2->reset(); + shape3->reset(); + gamutconn.block (true); + gamut->set_active (true); + gamutconn.block (false); + degree->setAutoValue (true); + degree->resetValue (false); + adapscen->resetValue (false); + adapscen->setAutoValue (true); + degreeout->resetValue (false); + degreeout->setAutoValue (true); + ybscen->resetValue (false); + ybscen->setAutoValue (true); + surrsrc->set_active (0); + wbmodel->set_active (2); + tempsc->resetValue (false); + greensc->resetValue (false); + adapscen->setValue(400.); + ybscen->setValue(18); + surround->set_active (0); + adaplum->setValue(400.); + degreeout->setValue(70); + ybout->setValue(18); + tempout->setValue (nexttemp); + greenout->setValue (nextgreen); + enableListener(); + } else { + disableListener(); +/* jlight->resetValue (false); + qbright->resetValue (false); + chroma->resetValue (false); + schroma->resetValue (false); + mchroma->resetValue (false); + rstprotection->resetValue (false); + contrast->resetValue (false); + qcontrast->resetValue (false); + colorh->resetValue (false); + tempout->resetValue (false); + greenout->resetValue (false); + ybout->resetValue (false); + tempsc->resetValue (false); + greensc->resetValue (false); + badpixsl->resetValue (false); + wbmodel->set_active (0); + toneCurveMode->set_active (0); + toneCurveMode2->set_active (0); + toneCurveMode3->set_active (0); + shape->reset(); + shape2->reset(); + shape3->reset(); + gamutconn.block (true); + gamut->set_active (true); + gamutconn.block (false); +*/ + degree->setAutoValue (true); + degree->resetValue (false); + adapscen->resetValue (false); + adapscen->setAutoValue (true); + degreeout->resetValue (false); + degreeout->setAutoValue (true); + ybscen->resetValue (false); + ybscen->setAutoValue (true); + surrsrc->set_active (0); + wbmodel->set_active (0); + tempsc->resetValue (false); + greensc->resetValue (false); + adapscen->resetValue (false); + ybscen->resetValue (false); + surround->set_active (0); + adaplum->resetValue (false); + degreeout->resetValue (false); + ybout->resetValue (false); + tempout->resetValue (false); + greenout->resetValue (false); + enableListener(); + + } + if (batchMode) { + if (presetcat02->get_inconsistent()) { + presetcat02->set_inconsistent (false); + presetcat02conn.block (true); + presetcat02->set_active (false); + presetcat02conn.block (false); + } else if (lastpresetcat02) { + presetcat02->set_inconsistent (true); + } + + lastpresetcat02 = presetcat02->get_active (); + } + + if (listener) { + if (presetcat02->get_active ()) { + listener->panelChanged (Evcatpreset, M ("GENERAL_ENABLED")); + } else { + listener->panelChanged (Evcatpreset, M ("GENERAL_DISABLED")); + } + } + +} + void ColorAppearance::datacie_toggled () { @@ -1470,6 +1616,10 @@ void ColorAppearance::autoCamChanged (double ccam, double ccamout) void ColorAppearance::adapCamChanged (double cadap) { + if(presetcat02->get_active()){ + return; + } + idle_register.add( [this, cadap]() -> bool { @@ -1483,6 +1633,10 @@ void ColorAppearance::adapCamChanged (double cadap) void ColorAppearance::ybCamChanged (int ybsc) { + if(presetcat02->get_active()){ + return; + } + idle_register.add( [this, ybsc]() -> bool { diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h index c42bca774..7379eb9b0 100644 --- a/rtgui/colorappearance.h +++ b/rtgui/colorappearance.h @@ -66,7 +66,7 @@ public: bool adapCamComputed_ (); void ybCamChanged (int yb) override; bool ybCamComputed_ (); - + void presetcat02pressed (); void curveChanged (CurveEditor* ce) override; void curveMode1Changed (); bool curveMode1Changed_ (); @@ -99,6 +99,8 @@ public: void writeOptions (std::vector &tpOpen); private: + rtengine::ProcEvent Evcatpreset; + bool bgTTipQuery (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); bool srTTipQuery (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -143,6 +145,9 @@ private: Gtk::CheckButton* tonecie; // Gtk::CheckButton* sharpcie; Gtk::Button* neutral; + Gtk::CheckButton* presetcat02; + sigc::connection presetcat02conn; + MyComboBoxText* surrsrc; sigc::connection surrsrcconn; @@ -172,6 +177,9 @@ private: bool lastgamut; bool lastdatacie; bool lasttonecie; + bool lastpresetcat02; + double nexttemp; + double nextgreen; IdleRegister idle_register; }; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index f39c73e03..448b1316c 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -247,6 +247,7 @@ void ParamsEdited::set(bool v) colorappearance.ybout = v; colorappearance.tempsc = v; colorappearance.greensc = v; + colorappearance.presetcat02 = v; //colorBoost.amount = v; //colorBoost.avoidclip = v; @@ -837,6 +838,7 @@ void ParamsEdited::initFrom(const std::vector& colorappearance.ybout = colorappearance.ybout && p.colorappearance.ybout == other.colorappearance.ybout; colorappearance.tempsc = colorappearance.tempsc && p.colorappearance.tempsc == other.colorappearance.tempsc; colorappearance.greensc = colorappearance.greensc && p.colorappearance.greensc == other.colorappearance.greensc; + colorappearance.presetcat02 = colorappearance.presetcat02 && p.colorappearance.presetcat02 == other.colorappearance.presetcat02; //colorBoost.amount = colorBoost.amount && p.colorBoost.amount == other.colorBoost.amount; //colorBoost.avoidclip = colorBoost.avoidclip && p.colorBoost.avoidclip == other.colorBoost.avoidclip; @@ -2083,6 +2085,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.colorappearance.tonecie = mods.colorappearance.tonecie; } + if (colorappearance.presetcat02) { + toEdit.colorappearance.presetcat02 = mods.colorappearance.presetcat02; + } + // if (colorappearance.sharpcie) toEdit.colorappearance.sharpcie = mods.colorappearance.sharpcie; if (impulseDenoise.enabled) { toEdit.impulseDenoise.enabled = mods.impulseDenoise.enabled; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 23e90635e..47985400e 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -294,6 +294,7 @@ struct ColorAppearanceParamsEdited { bool ybout; bool tempsc; bool greensc; + bool presetcat02; }; struct DirPyrDenoiseParamsEdited { From e2bbc30bf2df9d356caaaf9ed551f5c6030a1747 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 25 Feb 2020 19:32:58 +0100 Subject: [PATCH 139/264] ip_wavelet.cc : be almost cppcheck clean --- rtengine/improcfun.h | 16 ++-- rtengine/ipwavelet.cc | 186 +++++++++++++++++++----------------------- 2 files changed, 90 insertions(+), 112 deletions(-) diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 39a229c7e..ebafa3d71 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -200,22 +200,22 @@ public: int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/); void Tile_calc(int tilesize, int overlap, int kall, int imwidth, int imheight, int &numtiles_W, int &numtiles_H, int &tilewidth, int &tileheight, int &tileWskip, int &tileHskip); - void ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, LUTf &wavclCurve, int skip); + void ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, const LUTf &wavclCurve, int skip); - void WaveletcontAllL(LabImage * lab, float **varhue, float **varchrom, wavelet_decomposition &WaveletCoeffs_L, + void WaveletcontAllL(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_L, struct cont_params &cp, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); - void WaveletcontAllLfinal(wavelet_decomposition &WaveletCoeffs_L, struct cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); - void WaveletcontAllAB(LabImage * lab, float **varhue, float **varchrom, wavelet_decomposition &WaveletCoeffs_a, const WavOpacityCurveW & waOpacityCurveW, + void WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const struct cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); + void WaveletcontAllAB(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_a, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, const bool useChannelA); - void WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a, wavelet_decomposition &WaveletCoeffs_b, - struct cont_params &cp, FlatCurve* hhcurve, bool hhutili); + void WaveletAandBAllAB(const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, + const struct cont_params &cp, FlatCurve* hhcurve, bool hhutili); void ContAllL(float **koeLi, float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * lab, float **varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, int W_L, int H_L, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); - void finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, + void finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const struct cont_params &cp, int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); void ContAllAB(LabImage * lab, int maxlvl, float **varhue, float **varchrom, float ** WavCoeffs_a, float * WavCoeffs_a0, int level, int dir, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, int W_ab, int H_ab, const bool useChannelA); - void Evaluate2(wavelet_decomposition &WaveletCoeffs_L, + void Evaluate2(const wavelet_decomposition &WaveletCoeffs_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN); void Eval2(float ** WavCoeffs_L, int level, int W_L, int H_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index b9a8132e4..2a5a332aa 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -136,7 +136,7 @@ struct cont_params { int wavNestedLevels = 1; -void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, LUTf &wavclCurve, int skip) +void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, const LUTf &wavclCurve, int skip) { @@ -151,12 +151,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const {wiprof[2][0], wiprof[2][1], wiprof[2][2]} }; const short int imheight = lab->H, imwidth = lab->W; - LabImage *provradius = nullptr; - - if (waparams.softradend > 0.f && params->wavelet.expfinal) { - provradius = new LabImage(lab->W, lab->H); - provradius->CopyFrom(lab); - } struct cont_params cp; @@ -192,15 +186,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.diag = params->wavelet.tmr; cp.balan = (float)params->wavelet.balance; cp.ite = params->wavelet.iter; - cp.tonemap = false; + cp.tonemap = params->wavelet.tmrs != 0; cp.bam = false; - if (params->wavelet.tmrs == 0) { - cp.tonemap = false; - } else { - cp.tonemap = true; - } - if (params->wavelet.TMmethod == "cont") { cp.contmet = 1; } else if (params->wavelet.TMmethod == "tm") { @@ -1122,12 +1110,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } for (; col < rowWidth; col++) { - float a = labco->a[i1][col]; - float b = labco->b[i1][col]; - atan2Buffer[col] = xatan2f(b, a); - float Chprov1 = sqrtf(SQR(a) + SQR(b)); - yBuffer[col] = (Chprov1 == 0.f) ? 1.f : a / Chprov1; - xBuffer[col] = (Chprov1 == 0.f) ? 0.f : b / Chprov1; + float la = labco->a[i1][col]; + float lb = labco->b[i1][col]; + atan2Buffer[col] = xatan2f(lb, la); + float Chprov1 = sqrtf(SQR(la) + SQR(lb)); + yBuffer[col] = (Chprov1 == 0.f) ? 1.f : la / Chprov1; + xBuffer[col] = (Chprov1 == 0.f) ? 0.f : lb / Chprov1; chprovBuffer[col] = Chprov1 / 327.68f; } } @@ -1154,7 +1142,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const sincosv.x = (Chprov1 == 0.0f) ? 0.f : b / (Chprov1); Chprov1 /= 327.68f; #endif - L = labco->L[i1][j1]; const float Lin = labco->L[i1][j1]; if (wavclCurve && cp.finena) { @@ -1261,6 +1248,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } if (waparams.softradend > 0.f && cp.finena) { + LabImage *provradius = new LabImage(lab->W, lab->H); + provradius->CopyFrom(lab); + array2D ble(lab->W, lab->H); array2D guid(lab->W, lab->H); Imagefloat *tmpImage = nullptr; @@ -1328,11 +1318,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } delete tmpImage; - } - - if (waparams.softradend > 0.f && cp.finena) { delete provradius; - provradius = NULL; } #ifdef _DEBUG @@ -1443,7 +1429,7 @@ void ImProcFunctions::Sigma(float * RESTRICT DataList, int datalen, float avera } -void ImProcFunctions::Evaluate2(wavelet_decomposition &WaveletCoeffs_L, +void ImProcFunctions::Evaluate2(const wavelet_decomposition &WaveletCoeffs_L, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN) { //StopWatch Stop1("Evaluate2"); @@ -1661,7 +1647,7 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat } } -void ImProcFunctions::WaveletcontAllLfinal(wavelet_decomposition &WaveletCoeffs_L, struct cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) +void ImProcFunctions::WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const struct cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) { int maxlvl = WaveletCoeffs_L.maxlevel(); float * WavCoeffs_L0 = WaveletCoeffs_L.coeff0; @@ -1677,12 +1663,12 @@ void ImProcFunctions::WaveletcontAllLfinal(wavelet_decomposition &WaveletCoeffs_ } -void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float **varchrom, wavelet_decomposition &WaveletCoeffs_L, +void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_L, struct cont_params &cp, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili) { - int maxlvl = WaveletCoeffs_L.maxlevel(); - int W_L = WaveletCoeffs_L.level_W(0); - int H_L = WaveletCoeffs_L.level_H(0); + const int maxlvl = WaveletCoeffs_L.maxlevel(); + const int W_L = WaveletCoeffs_L.level_W(0); + const int H_L = WaveletCoeffs_L.level_H(0); float * WavCoeffs_L0 = WaveletCoeffs_L.coeff0; float contrast = cp.contrast; @@ -1858,8 +1844,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * // I adapted the principle but have profoundly changed the algorithm // One can 1) change all parameters and found good parameters; //one can also change in calckoe - float edd = 3.f; - float eddlow = 15.f; + constexpr float edd = 3.f; + constexpr float eddlow = 15.f; float eddlipinfl = 0.005f * cp.edgsens + 0.4f; float eddlipampl = 1.f + cp.edgampl / 50.f; @@ -1878,11 +1864,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * for (int lvl = 0; lvl < 4; lvl++) { for (int dir = 1; dir < 4; dir++) { - int W_L = WaveletCoeffs_L.level_W(lvl); - int H_L = WaveletCoeffs_L.level_H(lvl); - float ** WavCoeffs_LL = WaveletCoeffs_L.level_coeffs(lvl); - calckoe(WavCoeffs_LL, cp, koeLi, lvl, dir, W_L, H_L, edd, maxkoeLi, tmC); + calckoe(WavCoeffs_LL, cp, koeLi, lvl, dir, WaveletCoeffs_L.level_W(lvl), WaveletCoeffs_L.level_H(lvl), edd, maxkoeLi, tmC); // return convolution KoeLi and maxkoeLi of level 0 1 2 3 and Dir Horiz, Vert, Diag } } @@ -2020,8 +2003,8 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } } -void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a, wavelet_decomposition &WaveletCoeffs_b, - struct cont_params &cp, FlatCurve* hhCurve, bool hhutili) +void ImProcFunctions::WaveletAandBAllAB(const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, + const struct cont_params &cp, FlatCurve* hhCurve, bool hhutili) { // StopWatch Stop1("WaveletAandBAllAB"); if (hhutili && cp.resena) { // H=f(H) @@ -2088,7 +2071,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a, } -void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float **varchrom, wavelet_decomposition &WaveletCoeffs_ab, const WavOpacityCurveW & waOpacityCurveW, +void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_ab, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, const bool useChannelA) { @@ -2393,7 +2376,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c } -void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, +void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const struct cont_params &cp, int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) { if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve @@ -2481,18 +2464,18 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, if (choiceDir == 0) { // All directions if (level != choicelevel) { // zero all for the levels != choicelevel - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_L * H_L; i++) { - WavCoeffs_L[dir][i] = 0.f; + WavCoeffs_L[d][i] = 0.f; } } } } else { // zero the unwanted directions for level == choicelevel if (choicelevel >= cp.maxilev) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_L * H_L; i++) { - WavCoeffs_L[dir][i] = 0.f; + WavCoeffs_L[d][i] = 0.f; } } } else if (level != choicelevel) { // zero all for the levels != choicelevel @@ -2504,9 +2487,9 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, } else if (choiceClevel == 1) { // Only below level if (choiceDir == 0) { // All directions if (level > choicelevel) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_L * H_L; i++) { - WavCoeffs_L[dir][i] = 0.f; + WavCoeffs_L[d][i] = 0.f; } } } @@ -2520,17 +2503,17 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, } else if (choiceClevel == 2) { // Only above level if (choiceDir == 0) { // All directions if (level <= choicelevel) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_L * H_L; i++) { - WavCoeffs_L[dir][i] = 0.f; + WavCoeffs_L[d][i] = 0.f; } } } } else { // zero the unwanted directions for level >= choicelevel if (choicelevel >= cp.maxilev) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_L * H_L; i++) { - WavCoeffs_L[dir][i] = 0.f; + WavCoeffs_L[d][i] = 0.f; } } } @@ -2560,13 +2543,13 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz scaleskip[sc] = scales[sc] / skip; } - float t_r = 40.f; - float t_l = 10.f; - float b_r = 75.f; - float edd = 3.f; - float eddstrength = 1.3f; - float aedstr = (eddstrength - 1.f) / 90.f; - float bedstr = 1.f - 10.f * aedstr; + constexpr float t_r = 40.f; + constexpr float t_l = 10.f; + constexpr float b_r = 75.f; + constexpr float edd = 3.f; + constexpr float eddstrength = 1.3f; + constexpr float aedstr = (eddstrength - 1.f) / 90.f; + constexpr float bedstr = 1.f - 10.f * aedstr; if (cp.val > 0 && cp.edgeena) { float * koe = nullptr; @@ -2664,19 +2647,18 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float lim0 = 20.f; //arbitrary limit for low radius and level between 2 or 3 to 30 maxi float lev = float (level); float repart = (float)cp.til; - float brepart; - if (cp.reinforce == 1) { - brepart = 3.f; - } - - if (cp.reinforce == 3) { - brepart = 0.5f; //arbitrary value to increase / decrease repart, between 1 and 0 - } - - float arepart = -(brepart - 1.f) / (lim0 / 60.f); if (cp.reinforce != 2) { + float brepart; + + if (cp.reinforce == 1) { + brepart = 3.f; + } else /*if (cp.reinforce == 3) */{ + brepart = 0.5f; //arbitrary value to increase / decrease repart, between 1 and 0 + } + float arepart = -(brepart - 1.f) / (lim0 / 60.f); + if (rad < lim0 / 60.f) { repart *= (arepart * rad + brepart); //linear repartition of repart } @@ -2787,32 +2769,31 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz // kmul about max ==> 9 // we can change these values // result is different not best or bad than threshold slider...but similar - float abssd = 4.f; //amplification reference - float bbssd = 2.f; //mini ampli - float maxamp = 2.5f; //maxi ampli at end - float maxampd = 10.f; //maxi ampli at end - float a_abssd = (maxamp - abssd) / 0.333f; - float b_abssd = maxamp - a_abssd; - float da_abssd = (maxampd - abssd) / 0.333f; - float db_abssd = maxampd - da_abssd; - float am = (abssd - bbssd) / 0.666f; + constexpr float abssd = 4.f; //amplification reference + constexpr float bbssd = 2.f; //mini ampli float kmuld = 0.f; if (absciss > 0.666f && absciss < 1.f) { + constexpr float maxamp = 2.5f; //maxi ampli at end + constexpr float maxampd = 10.f; //maxi ampli at end + constexpr float a_abssd = (maxamp - abssd) / 0.333f; + constexpr float b_abssd = maxamp - a_abssd; + constexpr float da_abssd = (maxampd - abssd) / 0.333f; + constexpr float db_abssd = maxampd - da_abssd; kmul = a_abssd * absciss + b_abssd; //about max ==> kinterm kmuld = da_abssd * absciss + db_abssd; } else { + constexpr float am = (abssd - bbssd) / 0.666f; kmul = kmuld = absciss * am + bbssd; } - kinterm = 1.f; - float kc = kmul * (wavCLVCcurve[absciss * 500.f] - 0.5f); - float kcd = kmuld * (wavCLVCcurve[absciss * 500.f] - 0.5f); + const float kc = kmul * (wavCLVCcurve[absciss * 500.f] - 0.5f); if (kc >= 0.f) { float reduceeffect = 0.6f; kinterm = 1.f + reduceeffect * kmul * (wavCLVCcurve[absciss * 500.f] - 0.5f); //about 1 to 3 general and big amplification for max (under 0) } else { + const float kcd = kmuld * (wavCLVCcurve[absciss * 500.f] - 0.5f); kinterm = 1.f - (SQR(kcd)) / 10.f; } @@ -2821,10 +2802,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } edge *= kinterm; - - if (edge < 1.f) { - edge = 1.f; - } + edge = rtengine::max(edge, 1.f); } WavCoeffs_L[dir][k] *= edge; @@ -3226,10 +3204,10 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float k1 = 600.f; float k2 = 300.f; float LL100 = labco->L[ii * 2][jj * 2] / 327.68f; - float aa = 4970.f; - float bb = -397000.f; - float b0 = 100000.f; - float a0 = -4970.f; + constexpr float aa = 4970.f; + constexpr float bb = -397000.f; + constexpr float b0 = 100000.f; + constexpr float a0 = -4970.f; if (LL100 > 80.f) { k1 = aa * LL100 + bb; @@ -3261,8 +3239,8 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } // to see each level of wavelet ...level from 0 to 8 - int choicelevel = params->wavelet.Lmethod - 1; - choicelevel = choicelevel == -1 ? 4 : choicelevel; +// int choicelevel = params->wavelet.Lmethod - 1; +// choicelevel = choicelevel == -1 ? 4 : choicelevel; } void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, float **varchrom, float ** WavCoeffs_ab, float * WavCoeffs_ab0, int level, int dir, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, @@ -3486,10 +3464,10 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f float k1 = 600.f; float k2 = 300.f; float LL100 = labco->L[ii * 2][jj * 2] / 327.68f; - float aa = 4970.f; - float bb = -397000.f; - float b0 = 100000.f; - float a0 = -4970.f; + constexpr float aa = 4970.f; + constexpr float bb = -397000.f; + constexpr float b0 = 100000.f; + constexpr float a0 = -4970.f; if (LL100 > 80.f) { k1 = aa * LL100 + bb; @@ -3563,17 +3541,17 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f if (choiceClevel == 0) { // Only one level if (choiceDir == 0) { // All directions if (level != choicelevel) { // zero all for the levels != choicelevel - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_ab * H_ab; i++) { - WavCoeffs_ab[dir][i] = 0.f; + WavCoeffs_ab[d][i] = 0.f; } } } } else { // zero the unwanted directions for level == choicelevel if (choicelevel >= cp.maxilev) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_ab * H_ab; i++) { - WavCoeffs_ab[dir][i] = 0.f; + WavCoeffs_ab[d][i] = 0.f; } } } else if (level != choicelevel) { // zero all for the levels != choicelevel @@ -3585,9 +3563,9 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f } else if (choiceClevel == 1) { // Only below level if (choiceDir == 0) { // All directions if (level > choicelevel) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_ab * H_ab; i++) { - WavCoeffs_ab[dir][i] = 0.f; + WavCoeffs_ab[d][i] = 0.f; } } } @@ -3601,17 +3579,17 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f } else if (choiceClevel == 2) { // Only above level if (choiceDir == 0) { // All directions if (level <= choicelevel) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_ab * H_ab; i++) { - WavCoeffs_ab[dir][i] = 0.f; + WavCoeffs_ab[d][i] = 0.f; } } } } else { // zero the unwanted directions for level >= choicelevel if (choicelevel >= cp.maxilev) { - for (int dir = 1; dir < 4; dir++) { + for (int d = 1; d < 4; d++) { for (int i = 0; i < W_ab * H_ab; i++) { - WavCoeffs_ab[dir][i] = 0.f; + WavCoeffs_ab[d][i] = 0.f; } } } else if (level <= choicelevel) { From b4084b2c86599495c2e234660a9a79d32b8a3c7a Mon Sep 17 00:00:00 2001 From: Beep6581 Date: Tue, 25 Feb 2020 21:27:11 +0100 Subject: [PATCH 140/264] Disable macOS GitHub action until fixed --- .github/workflows/main.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 46808ae40..13aa6677a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,8 @@ name: macOS build -on: push +on: + push: + branches-ignore: + - '**' jobs: build: runs-on: macos-latest From cb0f81d0a0749eacd02747ad34d4d2af70941336 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 25 Feb 2020 21:41:12 +0100 Subject: [PATCH 141/264] Use tabs for consistency and better formatting --- UpdateInfo.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index dfac6c07c..6fa8e289c 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -78,10 +78,10 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") message(STATUS "Build information:") - message(STATUS " Build OS: ${BUILDINFO_OS}") - message(STATUS " Build date: ${BUILDINFO_DATE}") - message(STATUS " Epoch: ${BUILDINFO_EPOCH}") - message(STATUS " UUID: ${BUILDINFO_UUID}") + message(STATUS " Build OS: ${BUILDINFO_OS}") + message(STATUS " Build date: ${BUILDINFO_DATE}") + message(STATUS " Epoch: ${BUILDINFO_EPOCH}") + message(STATUS " UUID: ${BUILDINFO_UUID}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") From 224659f47383b39cef8d06130b0e9169a2b915ac Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 26 Feb 2020 08:48:07 +0100 Subject: [PATCH 142/264] Change limit for b_r --- rtengine/ipwavelet.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 2a5a332aa..be26f431f 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -2865,7 +2865,8 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz // If we move sliders to the left, local contrast is reduced // if we move sliders to the right local contrast is increased // MaxP, MaxN, mean, sigma are calculated if necessary (val > 0) by evaluate2(), eval2(), aver() , sigma() - if (b_r < 100.f && cp.edg_max / b_r > 1.f) { //in case of b_r < 100 and slider move to right +// if (b_r < 100.f && cp.edg_max / b_r > 1.f) { //in case of b_r < 100 and slider move to right + if (cp.edg_max / b_r > 1.f) { //in case of b_r < 100 and slider move to right if (WavCoeffs_L[dir][k] > MaxPCompare * cp.edg_max / b_r) { edge *= edgMaxFsup; From f05c10ce55a1cf7c710962994837a0e13749158b Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 26 Feb 2020 14:16:52 +0100 Subject: [PATCH 143/264] ipwavelet.cc : cleanup, speedup, reduced memory usage --- rtengine/color.cc | 20 +-- rtengine/color.h | 12 +- rtengine/improcfun.h | 8 +- rtengine/ipwavelet.cc | 372 +++++++++++++++--------------------------- 4 files changed, 156 insertions(+), 256 deletions(-) diff --git a/rtengine/color.cc b/rtengine/color.cc index cda92ef45..ed617057f 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -1725,6 +1725,13 @@ void Color::Lab2XYZ(float L, float a, float b, float &x, float &y, float &z) y = (LL > epskap) ? 65535.0f * fy * fy * fy : 65535.0f * LL / kappa; } +float Color::L2Y(float L) +{ + const float LL = L / 327.68f; + const float fy = (c1By116 * LL) + c16By116; // (L+16)/116 + return (LL > epskapf) ? 65535.f * fy * fy * fy : 65535.f * LL / kappaf; +} + void Color::L2XYZ(float L, float &x, float &y, float &z) // for black & white { float LL = L / 327.68f; @@ -1767,19 +1774,6 @@ inline float Color::computeXYZ2Lab(float f) } } - -inline float Color::computeXYZ2LabY(float f) -{ - if (f < 0.f) { - return 327.68 * (kappa * f / MAXVALF); - } else if (f > 65535.f) { - return 327.68f * (116.f * xcbrtf(f / MAXVALF) - 16.f); - } else { - return cachefy[f]; - } -} - - void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b, const float wp[3][3], int width) { diff --git a/rtengine/color.h b/rtengine/color.h index 78198bc66..79250819b 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -101,7 +101,6 @@ private: #endif static float computeXYZ2Lab(float f); - static float computeXYZ2LabY(float f); public: @@ -185,6 +184,16 @@ public: static void init (); static void cleanup (); + static inline float computeXYZ2LabY(float f) + { + if (f < 0.f) { + return 327.68 * (kappa * f / MAXVALF); + } else if (f > 65535.f) { + return 327.68f * (116.f * xcbrtf(f / MAXVALF) - 16.f); + } else { + return cachefy[f]; + } + } /** * @brief Extract luminance "sRGB" from red/green/blue values @@ -610,6 +619,7 @@ public: */ static void Lab2XYZ(float L, float a, float b, float &x, float &y, float &z); static void L2XYZ(float L, float &x, float &y, float &z); + static float L2Y(float L); #ifdef __SSE2__ static void Lab2XYZ(vfloat L, vfloat a, vfloat b, vfloat &x, vfloat &y, vfloat &z); diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index ebafa3d71..a06670b72 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -204,14 +204,14 @@ public: void WaveletcontAllL(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_L, struct cont_params &cp, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); - void WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const struct cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); + void WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); void WaveletcontAllAB(LabImage * lab, float **varhue, float **varchrom, const wavelet_decomposition &WaveletCoeffs_a, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, const bool useChannelA); void WaveletAandBAllAB(const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, - const struct cont_params &cp, FlatCurve* hhcurve, bool hhutili); + const cont_params &cp, FlatCurve* hhcurve, bool hhutili); void ContAllL(float **koeLi, float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * lab, float **varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params &cp, int W_L, int H_L, int skip, float *mean, float *sigma, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili); - void finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const struct cont_params &cp, + void finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const cont_params &cp, int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL); void ContAllAB(LabImage * lab, int maxlvl, float **varhue, float **varchrom, float ** WavCoeffs_a, float * WavCoeffs_a0, int level, int dir, const WavOpacityCurveW & waOpacityCurveW, struct cont_params &cp, int W_ab, int H_ab, const bool useChannelA); @@ -222,7 +222,7 @@ public: void Aver(float * HH_Coeffs, int datalen, float &averagePlus, float &averageNeg, float &max, float &min); void Sigma(float * HH_Coeffs, int datalen, float averagePlus, float averageNeg, float &sigmaPlus, float &sigmaNeg); - void calckoe(float ** WavCoeffs_LL, const struct cont_params& cp, float ** koeLi, int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC = nullptr); + void calckoe(float ** WavCoeffs_LL, const cont_params& cp, float ** koeLi, int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC = nullptr); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index be26f431f..8da9eb50f 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -26,8 +26,6 @@ #include #include -#include "../rtgui/threadutils.h" - #include "array2D.h" #include "color.h" #include "curves.h" @@ -44,7 +42,6 @@ #include "sleef.h" #include "../rtgui/options.h" #include "guidedfilter.h" -#include "imagefloat.h" #ifdef _OPENMP #include #endif @@ -150,7 +147,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, {wiprof[2][0], wiprof[2][1], wiprof[2][2]} }; - const short int imheight = lab->H, imwidth = lab->W; + const int imheight = lab->H, imwidth = lab->W; struct cont_params cp; @@ -158,26 +155,18 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.Medgreinf == "more") { cp.reinforce = 1; - } - - if (params->wavelet.Medgreinf == "none") { + } else if (params->wavelet.Medgreinf == "none") { cp.reinforce = 2; - } - - if (params->wavelet.Medgreinf == "less") { + } else if (params->wavelet.Medgreinf == "less") { cp.reinforce = 3; } if (params->wavelet.NPmethod == "none") { cp.lip3 = false; - } - - if (params->wavelet.NPmethod == "low") { + } else if (params->wavelet.NPmethod == "low") { cp.lip3 = true; cp.neigh = 0; - } - - if (params->wavelet.NPmethod == "high") { + } else if (params->wavelet.NPmethod == "high") { cp.lip3 = true; cp.neigh = 1; } @@ -197,19 +186,16 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.BAmethod != "none") { cp.bam = true; + if (params->wavelet.BAmethod == "sli") { + cp.BAmet = 1; + } else if (params->wavelet.BAmethod == "cur") { + cp.BAmet = 2; + } } - if (params->wavelet.BAmethod == "sli") { - cp.BAmet = 1; - } - - if (params->wavelet.BAmethod == "cur") { - cp.BAmet = 2; - } cp.sigm = params->wavelet.sigma; cp.tmstrength = params->wavelet.tmrs; - //cp.tonemap = params->wavelet.tmr; cp.contena = params->wavelet.expcontrast; cp.chromena = params->wavelet.expchroma; cp.edgeena = params->wavelet.expedge; @@ -220,13 +206,9 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.Backmethod == "black") { cp.backm = 0; - } - - if (params->wavelet.Backmethod == "grey") { + } else if (params->wavelet.Backmethod == "grey") { cp.backm = 1; - } - - if (params->wavelet.Backmethod == "resid") { + } else if (params->wavelet.Backmethod == "resid") { cp.backm = 2; } @@ -243,8 +225,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.edgampl = (float) params->wavelet.edgeampli; } - //int N = imheight * imwidth; - int maxmul = params->wavelet.thres; + const int maxmul = params->wavelet.thres; cp.maxilev = maxmul; static const float scales[10] = {1.f, 2.f, 4.f, 8.f, 16.f, 32.f, 64.f, 128.f, 256.f, 512.f}; float scaleskip[10]; @@ -253,42 +234,30 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const scaleskip[sc] = scales[sc] / skip; } - float atten0 = 0.40f; - float atten123 = 0.90f; + constexpr float atten0 = 0.40f; + constexpr float atten123 = 0.90f; //int DaubLen = settings->daubech ? 8 : 6; int DaubLen; if (params->wavelet.daubcoeffmethod == "2_") { DaubLen = 4; - } - - if (params->wavelet.daubcoeffmethod == "4_") { + } else if (params->wavelet.daubcoeffmethod == "4_") { DaubLen = 6; - } - - if (params->wavelet.daubcoeffmethod == "6_") { + } else if (params->wavelet.daubcoeffmethod == "6_") { DaubLen = 8; - } - - if (params->wavelet.daubcoeffmethod == "10_") { + } else if (params->wavelet.daubcoeffmethod == "10_") { DaubLen = 12; - } - - if (params->wavelet.daubcoeffmethod == "14_") { + } else /* if (params->wavelet.daubcoeffmethod == "14_") */{ DaubLen = 16; } cp.CHSLmet = 1; -// if(params->wavelet.CHSLmethod=="SL") cp.CHSLmet=1; -// if(params->wavelet.CHSLmethod=="CU") cp.CHSLmet=2; cp.EDmet = 1; if (params->wavelet.EDmethod == "SL") { cp.EDmet = 1; - } - - if (params->wavelet.EDmethod == "CU") { + } else if (params->wavelet.EDmethod == "CU") { cp.EDmet = 2; } @@ -310,9 +279,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (params->wavelet.CHmethod == "with") { cp.CHmet = 1; - } - - if (params->wavelet.CHmethod == "link") { + } else if (params->wavelet.CHmethod == "link") { cp.CHmet = 2; } @@ -320,7 +287,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.HSmet = true; } - cp.strength = min(1.f, max(0.f, ((float)params->wavelet.strength / 100.f))); + cp.strength = rtengine::min(1.f, rtengine::max(0.f, ((float)params->wavelet.strength / 100.f))); for (int m = 0; m < maxmul; m++) { cp.mulC[m] = waparams.ch[m]; @@ -444,7 +411,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.t_rsl = static_cast(params->wavelet.bllev.getTopRight()); cp.numlevS = params->wavelet.threshold2; int maxlevS = 9 - cp.numlevH; - cp.numlevS = MIN(cp.numlevS, maxlevS); + cp.numlevS = rtengine::min(cp.numlevS, maxlevS); //printf("levHigh=%d levShad=%d\n",cp.numlevH,cp.numlevS); //highlight cp.b_lhl = static_cast(params->wavelet.hllev.getBottomLeft()); @@ -479,7 +446,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const cp.detectedge = params->wavelet.medianlev; //printf("low=%f mean=%f sd=%f max=%f\n",cp.edg_low,cp.edg_mean,cp.edg_sd,cp.edg_max); - int minwin = min(imwidth, imheight); + int minwin = rtengine::min(imwidth, imheight); int maxlevelcrop = 9; if (cp.mul[9] != 0) { @@ -515,10 +482,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const levwav = 10; } - levwav = min(maxlevelcrop, levwav); + levwav = rtengine::min(maxlevelcrop, levwav); // determine number of levels to process. - // for(levwav=min(maxlevelcrop,levwav);levwav>0;levwav--) + // for(levwav=rtengine::min(maxlevelcrop,levwav);levwav>0;levwav--) // if(cp.mul[levwav-1]!=0.f || cp.curv) // if(cp.mul[levwav-1]!=0.f) // break; @@ -566,7 +533,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //now we have tile dimensions, overlaps //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - int minsizetile = min(tilewidth, tileheight); + int minsizetile = rtengine::min(tilewidth, tileheight); int maxlev2 = 10; if (minsizetile < 1024 && levwav == 10) { @@ -585,7 +552,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const maxlev2 = 6; } - levwav = min(maxlev2, levwav); + levwav = rtengine::min(maxlev2, levwav); //printf("levwav = %d\n",levwav); #ifdef _OPENMP @@ -629,13 +596,13 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // Calculate number of tiles. If less than omp_get_max_threads(), then limit num_threads to number of tiles if (options.rgbDenoiseThreadLimit > 0) { - maxnumberofthreadsforwavelet = min(max(options.rgbDenoiseThreadLimit / 2, 1), maxnumberofthreadsforwavelet); + maxnumberofthreadsforwavelet = rtengine::min(rtengine::max(options.rgbDenoiseThreadLimit / 2, 1), maxnumberofthreadsforwavelet); } - numthreads = MIN(numtiles, omp_get_max_threads()); + numthreads = rtengine::min(numtiles, omp_get_max_threads()); if (maxnumberofthreadsforwavelet > 0) { - numthreads = MIN(numthreads, maxnumberofthreadsforwavelet); + numthreads = rtengine::min(numthreads, maxnumberofthreadsforwavelet); } #ifdef _OPENMP @@ -669,26 +636,22 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float MaxP[10]; float MaxN[10]; + array2D varchro(tilewidth, tileheight); + float** varhue = new float*[tileheight]; for (int i = 0; i < tileheight; i++) { varhue[i] = new float[tilewidth]; } - float** varchro = new float*[tileheight]; - - for (int i = 0; i < tileheight; i++) { - varchro[i] = new float[tilewidth]; - } - #ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) #endif for (int tiletop = 0; tiletop < imheight; tiletop += tileHskip) { for (int tileleft = 0; tileleft < imwidth ; tileleft += tileWskip) { - int tileright = MIN(imwidth, tileleft + tilewidth); - int tilebottom = MIN(imheight, tiletop + tileheight); + int tileright = rtengine::min(imwidth, tileleft + tilewidth); + int tilebottom = rtengine::min(imheight, tiletop + tileheight); int width = tileright - tileleft; int height = tilebottom - tiletop; LabImage * labco; @@ -718,36 +681,31 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const #endif for (int i = tiletop; i < tilebottom; i++) { - int i1 = i - tiletop; - int j; + const int i1 = i - tiletop; + int j = tileleft; #ifdef __SSE2__ - __m128 c327d68v = _mm_set1_ps(327.68f); - __m128 av, bv, huev, chrov; + const vfloat c327d68v = F2V(327.68f); - for (j = tileleft; j < tileright - 3; j += 4) { - int j1 = j - tileleft; - av = LVFU(lab->a[i][j]); - bv = LVFU(lab->b[i][j]); - huev = xatan2f(bv, av); - chrov = vsqrtf(SQRV(av) + SQRV(bv)) / c327d68v; - _mm_storeu_ps(&varhue[i1][j1], huev); - _mm_storeu_ps(&varchro[i1][j1], chrov); + for (; j < tileright - 3; j += 4) { + const int j1 = j - tileleft; + const vfloat av = LVFU(lab->a[i][j]); + const vfloat bv = LVFU(lab->b[i][j]); + STVFU(varhue[i1][j1], xatan2f(bv, av)); + STVFU(varchro[i1][j1], vsqrtf(SQRV(av) + SQRV(bv)) / c327d68v); if (labco != lab) { - _mm_storeu_ps(&(labco->L[i1][j1]), LVFU(lab->L[i][j])); - _mm_storeu_ps(&(labco->a[i1][j1]), av); - _mm_storeu_ps(&(labco->b[i1][j1]), bv); + STVFU((labco->L[i1][j1]), LVFU(lab->L[i][j])); + STVFU((labco->a[i1][j1]), av); + STVFU((labco->b[i1][j1]), bv); } } -#else - j = tileleft; #endif for (; j < tileright; j++) { - int j1 = j - tileleft; - float a = lab->a[i][j]; - float b = lab->b[i][j]; + const int j1 = j - tileleft; + const float a = lab->a[i][j]; + const float b = lab->b[i][j]; varhue[i1][j1] = xatan2f(b, a); varchro[i1][j1] = (sqrtf(a * a + b * b)) / 327.68f; @@ -856,7 +814,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // if(levwavL < 3) levwavL=3;//to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! // } if (levwavL > 0) { - wavelet_decomposition* Ldecomp = new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, max(1, wavNestedLevels), DaubLen); + wavelet_decomposition* Ldecomp = new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); if (!Ldecomp->memoryAllocationFailed) { @@ -904,10 +862,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if ((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) { int edge = 1; - vari[0] = max(0.0001f, vari[0]); - vari[1] = max(0.0001f, vari[1]); - vari[2] = max(0.0001f, vari[2]); - vari[3] = max(0.0001f, vari[3]); + vari[0] = rtengine::max(0.0001f, vari[0]); + vari[1] = rtengine::max(0.0001f, vari[1]); + vari[2] = rtengine::max(0.0001f, vari[2]); + vari[3] = rtengine::max(0.0001f, vari[3]); float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge); @@ -968,7 +926,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //printf("Levwava after: %d\n",levwava); if (levwava > 0) { - wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, max(1, wavNestedLevels), DaubLen); + wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); if (!adecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); @@ -989,7 +947,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // printf("Levwavb after: %d\n",levwavb); if (levwavb > 0) { - wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, max(1, wavNestedLevels), DaubLen); + wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); if (!bdecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *bdecomp, waOpacityCurveW, cp, false); @@ -1010,8 +968,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // printf("Levwavab after: %d\n",levwavab); if (levwavab > 0) { - wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, max(1, wavNestedLevels), DaubLen); - wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, max(1, wavNestedLevels), DaubLen); + wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); + wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); @@ -1074,35 +1032,31 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const #endif for (int i = tiletop; i < tilebottom; i++) { - int i1 = i - tiletop; + const int i1 = i - tiletop; float L, a, b; #ifdef __SSE2__ - int rowWidth = tileright - tileleft; + const int rowWidth = tileright - tileleft; float atan2Buffer[rowWidth] ALIGNED64; float chprovBuffer[rowWidth] ALIGNED64; float xBuffer[rowWidth] ALIGNED64; float yBuffer[rowWidth] ALIGNED64; if (cp.avoi) { - int col; - __m128 av, bv; - __m128 cv, yv, xv; - __m128 zerov = _mm_setzero_ps(); - __m128 onev = _mm_set1_ps(1.f); - __m128 c327d68v = _mm_set1_ps(327.68f); - vmask xyMask; + int col = 0; + const vfloat onev = F2V(1.f); + const vfloat c327d68v = F2V(327.68f); - for (col = 0; col < rowWidth - 3; col += 4) { - av = LVFU(labco->a[i1][col]); - bv = LVFU(labco->b[i1][col]); + for (; col < rowWidth - 3; col += 4) { + const vfloat av = LVFU(labco->a[i1][col]); + const vfloat bv = LVFU(labco->b[i1][col]); STVF(atan2Buffer[col], xatan2f(bv, av)); - cv = vsqrtf(SQRV(av) + SQRV(bv)); - yv = av / cv; - xv = bv / cv; - xyMask = vmaskf_eq(zerov, cv); + const vfloat cv = vsqrtf(SQRV(av) + SQRV(bv)); + vfloat yv = av / cv; + vfloat xv = bv / cv; + const vmask xyMask = vmaskf_eq(ZEROV, cv); yv = vself(xyMask, onev, yv); - xv = vself(xyMask, zerov, xv); + xv = vselfnotzero(xyMask, xv); STVF(yBuffer[col], yv); STVF(xBuffer[col], xv); STVF(chprovBuffer[col], cv / c327d68v); @@ -1110,10 +1064,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } for (; col < rowWidth; col++) { - float la = labco->a[i1][col]; - float lb = labco->b[i1][col]; + const float la = labco->a[i1][col]; + const float lb = labco->b[i1][col]; atan2Buffer[col] = xatan2f(lb, la); - float Chprov1 = sqrtf(SQR(la) + SQR(lb)); + const float Chprov1 = sqrtf(SQR(la) + SQR(lb)); yBuffer[col] = (Chprov1 == 0.f) ? 1.f : la / Chprov1; xBuffer[col] = (Chprov1 == 0.f) ? 0.f : lb / Chprov1; chprovBuffer[col] = Chprov1 / 327.68f; @@ -1123,7 +1077,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const #endif for (int j = tileleft; j < tileright; j++) { - int j1 = j - tileleft; + const int j1 = j - tileleft; if (cp.avoi) { //Gamut and Munsell #ifdef __SSE2__ @@ -1168,7 +1122,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float correctionHue = 0.0f; // Munsell's correction float correctlum = 0.0f; Lprov1 = L / 327.68f; - float Chprov = sqrtf(SQR(a) + SQR(b)) / 327.68f; + const float Chprov = sqrtf(SQR(a) + SQR(b)) / 327.68f; #ifdef _DEBUG Color::AllMunsellLch(true, Lprov1, Lprov2, HH, Chprov, memChprov, correctionHue, correctlum, MunsDebugInfo); #else @@ -1176,7 +1130,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const #endif if (correctionHue != 0.f || correctlum != 0.f) { // only calculate sin and cos if HH changed - if (fabs(correctionHue) < 0.015f) { + if (std::fabs(correctionHue) < 0.015f) { HH += correctlum; // correct only if correct Munsell chroma very little. } @@ -1230,13 +1184,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } delete [] varhue; - - for (int i = 0; i < tileheight; i++) { - delete [] varchro[i]; - } - - delete [] varchro; - } #ifdef _OPENMP omp_set_nested(oldNested); @@ -1248,13 +1195,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } if (waparams.softradend > 0.f && cp.finena) { - LabImage *provradius = new LabImage(lab->W, lab->H); - provradius->CopyFrom(lab); - array2D ble(lab->W, lab->H); array2D guid(lab->W, lab->H); - Imagefloat *tmpImage = nullptr; - tmpImage = new Imagefloat(lab->W, lab->H); bool multiTh = false; @@ -1264,61 +1206,35 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const multiTh = true; } -#endif - -#ifdef _OPENMP #pragma omp parallel for #endif - for (int ir = 0; ir < lab->H; ir++) + for (int ir = 0; ir < lab->H; ir++) { for (int jr = 0; jr < lab->W; jr++) { - float X, Y, Z; - float L = provradius->L[ir][jr]; - float a = provradius->a[ir][jr]; - float b = provradius->b[ir][jr]; - Color::Lab2XYZ(L, a, b, X, Y, Z); - - guid[ir][jr] = Y / 32768.f; - float La = dst->L[ir][jr]; - float aa = dst->a[ir][jr]; - float ba = dst->b[ir][jr]; - Color::Lab2XYZ(La, aa, ba, X, Y, Z); - tmpImage->r(ir, jr) = X; - tmpImage->g(ir, jr) = Y; - tmpImage->b(ir, jr) = Z; - ble[ir][jr] = Y / 32768.f; - + guid[ir][jr] = Color::L2Y(lab->L[ir][jr]) / 32768.f; + ble[ir][jr] = Color::L2Y(dst->L[ir][jr]) / 32768.f; } + } - double epsilmax = 0.001; - double epsilmin = 0.0001; - double aepsil = (epsilmax - epsilmin) / 90.f; - double bepsil = epsilmax - 100.f * aepsil; - double epsil = aepsil * waparams.softradend + bepsil; + constexpr double epsilmax = 0.001; + constexpr double epsilmin = 0.0001; + constexpr double aepsil = (epsilmax - epsilmin) / 90.f; + constexpr double bepsil = epsilmax - 100.f * aepsil; + const double epsil = aepsil * waparams.softradend + bepsil; - float blur = 10.f / scale * (0.001f + 0.8f * waparams.softradend); + const float blur = 10.f / scale * (0.001f + 0.8f * waparams.softradend); rtengine::guidedFilter(guid, ble, ble, blur, epsil, multiTh); - - #ifdef _OPENMP #pragma omp parallel for #endif - for (int ir = 0; ir < lab->H; ir++) + for (int ir = 0; ir < lab->H; ir++) { for (int jr = 0; jr < lab->W; jr++) { - float X = tmpImage->r(ir, jr); - float Y = 32768.f * ble[ir][jr]; - float Z = tmpImage->b(ir, jr); - float L, a, b; - Color::XYZ2Lab(X, Y, Z, L, a, b); - - dst->L[ir][jr] = L; + dst->L[ir][jr] = Color::computeXYZ2LabY(32768.f * ble[ir][jr]); } - - delete tmpImage; - delete provradius; + } } #ifdef _DEBUG @@ -1327,21 +1243,16 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } -#undef TS -#undef fTS -#undef offset -#undef epsilon - -void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &averagePlus, float &averageNeg, float &max, float &min) +void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &averagePlus, float &averageNeg, float &max, float &min) { //find absolute mean int countP = 0, countN = 0; double averaP = 0.0, averaN = 0.0; // use double precision for large summations - float thres = 5.f;//different fom zero to take into account only data large enough + constexpr float thres = 5.f;//different fom zero to take into account only data large enough max = 0.f; - min = 0.f; + min = RT_INFINITY_F; #ifdef _OPENMP #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #endif @@ -1354,19 +1265,11 @@ void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &avera for (int i = 0; i < datalen; i++) { if (DataList[i] >= thres) { averaP += static_cast(DataList[i]); - - if (DataList[i] > lmax) { - lmax = DataList[i]; - } - + lmax = rtengine::max(lmax, DataList[i]); countP++; } else if (DataList[i] < -thres) { averaN += static_cast(DataList[i]); - - if (DataList[i] < lmin) { - lmin = DataList[i]; - } - + lmin = rtengine::min(lmin, DataList[i]); countN++; } } @@ -1375,8 +1278,8 @@ void ImProcFunctions::Aver(float * RESTRICT DataList, int datalen, float &avera #pragma omp critical #endif { - max = max > lmax ? max : lmax; - min = min < lmin ? min : lmin; + max = rtengine::max(max, lmax); + min = rtengine::min(min, lmin); } } @@ -1521,7 +1424,7 @@ void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compress #pragma omp parallel #endif { - vfloat exponentv = F2V(exponent); + const vfloat exponentv = F2V(exponent); #ifdef _OPENMP #pragma omp for #endif @@ -1647,7 +1550,7 @@ void ImProcFunctions::EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterat } } -void ImProcFunctions::WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const struct cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) +void ImProcFunctions::WaveletcontAllLfinal(const wavelet_decomposition &WaveletCoeffs_L, const cont_params &cp, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) { int maxlvl = WaveletCoeffs_L.maxlevel(); float * WavCoeffs_L0 = WaveletCoeffs_L.coeff0; @@ -2004,7 +1907,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * } void ImProcFunctions::WaveletAandBAllAB(const wavelet_decomposition &WaveletCoeffs_a, const wavelet_decomposition &WaveletCoeffs_b, - const struct cont_params &cp, FlatCurve* hhCurve, bool hhutili) + const cont_params &cp, FlatCurve* hhCurve, bool hhutili) { // StopWatch Stop1("WaveletAandBAllAB"); if (hhutili && cp.resena) { // H=f(H) @@ -2031,12 +1934,10 @@ void ImProcFunctions::WaveletAandBAllAB(const wavelet_decomposition &WaveletCoef int k; for (k = 0; k < W_L - 3; k += 4) { - __m128 av = LVFU(WavCoeffs_a0[i * W_L + k]); - __m128 bv = LVFU(WavCoeffs_b0[i * W_L + k]); - __m128 huev = xatan2f(bv, av); - __m128 chrv = vsqrtf(SQRV(av) + SQRV(bv)); - STVF(huebuffer[k], huev); - STVF(chrbuffer[k], chrv); + const vfloat av = LVFU(WavCoeffs_a0[i * W_L + k]); + const vfloat bv = LVFU(WavCoeffs_b0[i * W_L + k]); + STVF(huebuffer[k], xatan2f(bv, av)); + STVF(chrbuffer[k], vsqrtf(SQRV(av) + SQRV(bv))); } for (; k < W_L; k++) { @@ -2217,7 +2118,7 @@ void ImProcFunctions::WaveletcontAllAB(LabImage * labco, float ** varhue, float //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& cp, float *koeLi[12], int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC) +void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const cont_params& cp, float *koeLi[12], int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC) { int borderL = 2; @@ -2360,8 +2261,8 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c // float temp = WavCoeffs_LL[dir][i*W_L + j]; // if(temp>=0.f && temp < thr) temp = thr; // if(temp < 0.f && temp > -thr) temp = -thr; - float temp = max(fabsf(WavCoeffs_LL[dir][i * W_L + j]), thr); - koeLi[level * 3 + dir - 1][i * W_L + j] = min(thr2, fabs(tmC[i][j] / temp)); // limit maxi + float temp = rtengine::max(std::fabs(WavCoeffs_LL[dir][i * W_L + j]), thr); + koeLi[level * 3 + dir - 1][i * W_L + j] = rtengine::min(thr2, std::fabs(tmC[i][j] / temp)); // limit maxi //it will be more complicated to calculate both Wh and Wv, but we have also Wd==> pseudo Lipschitz if (koeLi[level * 3 + dir - 1][i * W_L + j] > maxkoeLi[level * 3 + dir - 1]) { @@ -2376,7 +2277,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, const struct cont_params& c } -void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const struct cont_params &cp, +void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, const cont_params &cp, int W_L, int H_L, float *mean, float *sigma, float *MaxP, const WavOpacityCurveWL & waOpacityCurveWL) { if (cp.diagcurv && cp.finena && MaxP[level] > 0.f && mean[level] != 0.f && sigma[level] != 0.f) { //curve @@ -2397,15 +2298,15 @@ void ImProcFunctions::finalContAllL(float ** WavCoeffs_L, float * WavCoeffs_L0, for (int i = 0; i < W_L * H_L; i++) { float absciss; - if (fabsf(WavCoeffs_L[dir][i]) >= (mean[level] + sigma[level])) { //for max - float valcour = xlogf(fabsf(WavCoeffs_L[dir][i])); + if (std::fabs(WavCoeffs_L[dir][i]) >= (mean[level] + sigma[level])) { //for max + float valcour = xlogf(std::fabs(WavCoeffs_L[dir][i])); float valc = valcour - logmax; float vald = valc * rap; absciss = xexpf(vald); - } else if (fabsf(WavCoeffs_L[dir][i]) >= mean[level]) { - absciss = asig * fabsf(WavCoeffs_L[dir][i]) + bsig; + } else if (std::fabs(WavCoeffs_L[dir][i]) >= mean[level]) { + absciss = asig * std::fabs(WavCoeffs_L[dir][i]) + bsig; } else { - absciss = amean * fabsf(WavCoeffs_L[dir][i]); + absciss = amean * std::fabs(WavCoeffs_L[dir][i]); } float kc = waOpacityCurveWL[absciss * 500.f] - 0.5f; @@ -2606,11 +2507,9 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz temp = -thr; } - koe[i * W_L + j] = min(thr2, fabs(tmC[i][j] / temp)); + koe[i * W_L + j] = rtengine::min(thr2, std::fabs(tmC[i][j] / temp)); - if (koe[i * W_L + j] > maxkoe) { - maxkoe = koe[i * W_L + j]; - } + maxkoe = rtengine::max(maxkoe, koe[i * W_L + j]); float diff = maxkoe - koe[i * W_L + j]; diff *= (cp.eddet / 100.f); @@ -2650,14 +2549,11 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz if (cp.reinforce != 2) { - float brepart; - - if (cp.reinforce == 1) { - brepart = 3.f; - } else /*if (cp.reinforce == 3) */{ - brepart = 0.5f; //arbitrary value to increase / decrease repart, between 1 and 0 - } - float arepart = -(brepart - 1.f) / (lim0 / 60.f); + const float brepart = + cp.reinforce == 1 + ? 3.f + : 0.5f; + const float arepart = -(brepart - 1.f) / (lim0 / 60.f); if (rad < lim0 / 60.f) { repart *= (arepart * rad + brepart); //linear repartition of repart @@ -2670,7 +2566,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float ak = -(al0 - al10) / 10.f; //10 = maximum levels float bk = al0; float koef = ak * level + bk; //modulate for levels : more levels high, more koef low ==> concentrated action on low levels, without or near for high levels - float expkoef = -pow(fabs(rad - lev), koef); //reduce effect for high levels + float expkoef = -std::pow(std::fabs(rad - lev), koef); //reduce effect for high levels if (cp.reinforce == 3) { if (rad < lim0 / 60.f && level == 0) { @@ -2750,16 +2646,16 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } if (cp.edgcurv) { - if (fabs(WavCoeffs_L[dir][k]) >= (mean[level] + sigma[level])) { //for max - float valcour = log(fabs(WavCoeffs_L[dir][k])); + if (std::fabs(WavCoeffs_L[dir][k]) >= (mean[level] + sigma[level])) { //for max + float valcour = xlogf(std::fabs(WavCoeffs_L[dir][k])); float valc = valcour - logmax; float vald = valc * rap; absciss = exp(vald); - } else if (fabs(WavCoeffs_L[dir][k]) >= mean[level] && fabs(WavCoeffs_L[dir][k]) < (mean[level] + sigma[level])) { - absciss = asig * fabs(WavCoeffs_L[dir][k]) + bsig; - } else if (fabs(WavCoeffs_L[dir][k]) < mean[level]) { - absciss = amean * fabs(WavCoeffs_L[dir][k]); + } else if (std::fabs(WavCoeffs_L[dir][k]) >= mean[level] && std::fabs(WavCoeffs_L[dir][k]) < (mean[level] + sigma[level])) { + absciss = asig * std::fabs(WavCoeffs_L[dir][k]) + bsig; + } else if (std::fabs(WavCoeffs_L[dir][k]) < mean[level]) { + absciss = amean * std::fabs(WavCoeffs_L[dir][k]); } // Threshold adjuster settings==> approximative for curve @@ -2897,8 +2793,8 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } } - if (fabs(WavCoeffs_L[dir][k]) >= edgeMeanCompare && fabs(WavCoeffs_L[dir][k]) < edgeSdCompare) { - //if (fabs(WavCoeffs_L[dir][i]) > edgeSdCompare) { + if (std::fabs(WavCoeffs_L[dir][k]) >= edgeMeanCompare && std::fabs(WavCoeffs_L[dir][k]) < edgeSdCompare) { + //if (std::fabs(WavCoeffs_L[dir][i]) > edgeSdCompare) { edge *= edgeSdFactor; if (edge < 1.f) { @@ -2906,7 +2802,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } }//modify effect if sd change - if (fabs(WavCoeffs_L[dir][k]) < edgeMeanCompare) { + if (std::fabs(WavCoeffs_L[dir][k]) < edgeMeanCompare) { edge *= edgeMeanFactor; if (edge < 1.f) { @@ -2914,7 +2810,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz } } // modify effect if mean change - if (fabs(WavCoeffs_L[dir][k]) < edgeLowCompare) { + if (std::fabs(WavCoeffs_L[dir][k]) < edgeLowCompare) { edge *= edgeLowFactor; if (edge < 1.f) { @@ -3004,7 +2900,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz if (cpMul < 0.f) { beta = 1.f; // disabled for negatives values "less contrast" } else { - float WavCL = fabsf(WavCoeffs_L[dir][i]); + float WavCL = std::fabs(WavCoeffs_L[dir][i]); //reduction amplification: max action between mean / 2 and mean + sigma // arbitrary coefficient, we can add a slider !! @@ -3041,7 +2937,7 @@ void ImProcFunctions::ContAllL(float *koeLi[12], float *maxkoeLi, bool lipschitz float LL = labco->L[ii * 2][jj * 2]; LL100 = LL100init = LL / 327.68f; LL100res = WavCoeffs_L0[i] / 327.68f; - float delta = fabs(LL100init - LL100res) / (maxlvl / 2); + float delta = std::fabs(LL100init - LL100res) / (maxlvl / 2); for (int ml = 0; ml < maxlvl; ml++) { if (ml < maxlvl / 2) { From 8cfc4e33af5b4720f50865a8270ecd904829a954 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 26 Feb 2020 15:22:28 +0100 Subject: [PATCH 144/264] partial fixed wrong old WB auto --- rtengine/improccoordinator.cc | 9 +++------ rtengine/procparams.cc | 23 ++++++++++++++++++++--- rtgui/ppversion.h | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 0ed8b1f97..108dac114 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -37,6 +37,7 @@ #include "procparams.h" #include "refreshmap.h" #include "guidedfilter.h" +#include "../rtgui/version.h" #include "../rtgui/options.h" @@ -238,7 +239,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // Check if any detail crops need high detail. If not, take a fast path short cut if (!highDetailNeeded) { for (size_t i = 0; i < crops.size(); i++) { - if (crops[i]->get_skip() == 1) { // skip=1 -> full resolution + if (crops[i]->get_skip() == 1) { // skip=1 -> full resolution highDetailNeeded = true; break; } @@ -255,10 +256,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) RAWParams rp = params->raw; ColorManagementParams cmp = params->icm; LCurveParams lcur = params->labCurve; - if (settings->verbose) { - printf("metwb2=%s \n", params->wb.method.c_str()); - } - + if (!highDetailNeeded) { // if below 100% magnification, take a fast path if (rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::NONE) && rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)) { @@ -424,7 +422,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (settings->verbose) { printf("automethod=%s \n", params->wb.method.c_str()); } - if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 7d83b50d2..fe3766287 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1305,6 +1305,8 @@ bool WBParams::operator !=(const WBParams& other) const const std::vector& WBParams::getWbEntries() { + + static const std::vector wb_entries = { {"Camera", WBEntry::Type::CAMERA, M("TP_WBALANCE_CAMERA"), 0, 1.f, 1.f, 0.f}, // {"Auto", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f, 0.f}, @@ -1349,7 +1351,6 @@ const std::vector& WBParams::getWbEntries() // Should remain the last one {"Custom", WBEntry::Type::CUSTOM, M("TP_WBALANCE_CUSTOM"), 0, 1.f, 1.f, 0.f} }; - return wb_entries; } @@ -4164,10 +4165,26 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Vibrance", "PastSatTog", pedited, vibrance.pastsattog, pedited->vibrance.pastsattog); assignFromKeyfile(keyFile, "Vibrance", "SkinTonesCurve", pedited, vibrance.skintonescurve, pedited->vibrance.skintonescurve); } - if (keyFile.has_group("White Balance")) { assignFromKeyfile(keyFile, "White Balance", "Enabled", pedited, wb.enabled, pedited->wb.enabled); - assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); + if (keyFile.has_key("White Balance", "Setting")) { +// if(ppVersion < 349) { + Glib::ustring prov = keyFile.get_string("White Balance", "Setting"); +// printf("Prov=%s\n", prov.c_str()); + if(prov == "Auto") { + printf("OK Auto\n"); + prov = "autold"; + wb.method = prov; + keyFile.set_string("White Balance", "Setting",wb.method ); + if (pedited) { + pedited->wb.method = true; + } + assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); + + } else { + assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); + } + } assignFromKeyfile(keyFile, "White Balance", "Temperature", pedited, wb.temperature, pedited->wb.temperature); assignFromKeyfile(keyFile, "White Balance", "Green", pedited, wb.green, pedited->wb.green); assignFromKeyfile(keyFile, "White Balance", "Equal", pedited, wb.equal, pedited->wb.equal); diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index 89f93ed44..3a4019b36 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,7 +1,7 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 346 +#define PPVERSION 349 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* From 4863c7a372ee8acb006d62addb28e902176c7e2f Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 26 Feb 2020 15:37:49 +0100 Subject: [PATCH 145/264] clean unused changes --- rtengine/improccoordinator.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 108dac114..1115fa4fc 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -37,7 +37,6 @@ #include "procparams.h" #include "refreshmap.h" #include "guidedfilter.h" -#include "../rtgui/version.h" #include "../rtgui/options.h" From 5960899c048f0de0f36d6302e03b8791decc0d8b Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 26 Feb 2020 16:36:00 +0100 Subject: [PATCH 146/264] Minor cleanup --- rtengine/color.h | 2 +- rtengine/ipwavelet.cc | 28 ++++++---------------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/rtengine/color.h b/rtengine/color.h index 79250819b..3f63ad312 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -187,7 +187,7 @@ public: static inline float computeXYZ2LabY(float f) { if (f < 0.f) { - return 327.68 * (kappa * f / MAXVALF); + return 327.68f * (kappa * f / MAXVALF); } else if (f > 65535.f) { return 327.68f * (116.f * xcbrtf(f / MAXVALF) - 16.f); } else { diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 8da9eb50f..758a9147b 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -596,7 +596,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // Calculate number of tiles. If less than omp_get_max_threads(), then limit num_threads to number of tiles if (options.rgbDenoiseThreadLimit > 0) { - maxnumberofthreadsforwavelet = rtengine::min(rtengine::max(options.rgbDenoiseThreadLimit / 2, 1), maxnumberofthreadsforwavelet); + maxnumberofthreadsforwavelet = rtengine::LIM(options.rgbDenoiseThreadLimit / 2, 1, maxnumberofthreadsforwavelet); } numthreads = rtengine::min(numtiles, omp_get_max_threads()); @@ -796,25 +796,18 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const ref0 = true; } - // printf("LevwavL before: %d\n",levwavL); if (cp.contrast == 0.f && !cp.tonemap && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels while (levwavL > 0 && cp.mul[levwavL - 1] == 0.f) { // cp.mul[level] == 0.f means no changes to level levwavL--; } } - // printf("LevwavL after: %d\n",levwavL); - // if(cp.noiseena){ if (levwavL < 4) { levwavL = 4; //to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! } - // } - // else { - // if(levwavL < 3) levwavL=3;//to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !! - // } if (levwavL > 0) { - wavelet_decomposition* Ldecomp = new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); + const std::unique_ptr Ldecomp(new wavelet_decomposition(labco->data, labco->W, labco->H, levwavL, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!Ldecomp->memoryAllocationFailed) { @@ -896,8 +889,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const Ldecomp->reconstruct(labco->data, cp.strength); } - - delete Ldecomp; } //Flat curve for H=f(H) in residual image @@ -926,14 +917,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //printf("Levwava after: %d\n",levwava); if (levwava > 0) { - wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); + const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwava, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); adecomp->reconstruct(labco->data + datalen, cp.strength); } - - delete adecomp; } int levwavb = levwav; @@ -947,14 +936,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // printf("Levwavb after: %d\n",levwavb); if (levwavb > 0) { - wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); + const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavb, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!bdecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *bdecomp, waOpacityCurveW, cp, false); bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); } - - delete bdecomp; } } else {// a and b int levwavab = levwav; @@ -968,8 +955,8 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const // printf("Levwavab after: %d\n",levwavab); if (levwavab > 0) { - wavelet_decomposition* adecomp = new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); - wavelet_decomposition* bdecomp = new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen); + const std::unique_ptr adecomp(new wavelet_decomposition(labco->data + datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); + const std::unique_ptr bdecomp(new wavelet_decomposition(labco->data + 2 * datalen, labco->W, labco->H, levwavab, 1, skip, rtengine::max(1, wavNestedLevels), DaubLen)); if (!adecomp->memoryAllocationFailed && !bdecomp->memoryAllocationFailed) { WaveletcontAllAB(labco, varhue, varchro, *adecomp, waOpacityCurveW, cp, true); @@ -980,9 +967,6 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const bdecomp->reconstruct(labco->data + 2 * datalen, cp.strength); } - - delete adecomp; - delete bdecomp; } } From 13e2bc41521f18c3bfbb425e431b7d855b18c4e8 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Wed, 26 Feb 2020 18:32:32 +0100 Subject: [PATCH 147/264] White balance shows wrong method when opening a file which was set to Auto in 5.8, #5668 --- rtengine/procparams.cc | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index fe3766287..88178d0e0 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -4167,23 +4167,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("White Balance")) { assignFromKeyfile(keyFile, "White Balance", "Enabled", pedited, wb.enabled, pedited->wb.enabled); - if (keyFile.has_key("White Balance", "Setting")) { -// if(ppVersion < 349) { - Glib::ustring prov = keyFile.get_string("White Balance", "Setting"); -// printf("Prov=%s\n", prov.c_str()); - if(prov == "Auto") { - printf("OK Auto\n"); - prov = "autold"; - wb.method = prov; - keyFile.set_string("White Balance", "Setting",wb.method ); - if (pedited) { - pedited->wb.method = true; - } - assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); - - } else { - assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); - } + assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); + if (wb.method == "Auto") { + wb.method = "autold"; } assignFromKeyfile(keyFile, "White Balance", "Temperature", pedited, wb.temperature, pedited->wb.temperature); assignFromKeyfile(keyFile, "White Balance", "Green", pedited, wb.green, pedited->wb.green); From d7234c5aacbbf3e68665b0e5b3a51d1e1e5e204b Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 27 Feb 2020 08:08:33 +0100 Subject: [PATCH 148/264] reinitialize ppversion --- rtgui/ppversion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index 3a4019b36..89f93ed44 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,7 +1,7 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 349 +#define PPVERSION 346 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* From 32f3273a2a070db7e97f61f9c4fd95308d5b1b46 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 27 Feb 2020 08:50:08 +0100 Subject: [PATCH 149/264] Change some tooltips --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 59de4bb40..be3594a84 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1449,7 +1449,7 @@ TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's TP_COLORAPP_NEUTRAL;Reset TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values TP_COLORAPP_PRESETCAT02;Preset cat02 automatic -TP_COLORAPP_PRESETCAT02_TIP;Set combobox, sliders, temp, green so that Cat02 automatic is preset.\nYou must change Cat02 adaptation Viewing conditions if need, and other settings if need. +TP_COLORAPP_PRESETCAT02_TIP;Set combobox, sliders, temp, green so that Cat02 automatic is preset.\nYou must change Cat02 adaptation Viewing conditions if need.\nYou can change Temperature and Tint Viewing conditions if need, and other settings if need. TP_COLORAPP_RSTPRO;Red & skin-tones protection TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves. TP_COLORAPP_SURROUND;Surround From 5a9f4309336fc392bc98c438cf350c8ef11f6f15 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 27 Feb 2020 10:43:21 +0100 Subject: [PATCH 150/264] Update rtexif using ExifTool 11.89 --- rtexif/canonattribs.cc | 2 +- rtexif/olympusattribs.cc | 1 + rtexif/pentaxattribs.cc | 2 ++ rtexif/sonyminoltaattribs.cc | 2 ++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/rtexif/canonattribs.cc b/rtexif/canonattribs.cc index 636bf4328..a91b7266c 100644 --- a/rtexif/canonattribs.cc +++ b/rtexif/canonattribs.cc @@ -845,7 +845,7 @@ public: {195, "Canon EF 35-105mm f/4.5-5.6 USM"}, {196, "Canon EF 75-300mm f/4-5.6 USM"}, {197, "Canon EF 75-300mm f/4-5.6 IS USM or Sigma Lens"}, - {197, "Sigma 18-300mm f/3.5-6.3 DC Macro OS HS"}, + {197, "Sigma 18-300mm f/3.5-6.3 DC Macro OS HSM"}, {198, "Canon EF 50mm f/1.4 USM or Other Lens"}, {198, "Zeiss Otus 55mm f/1.4 ZE"}, {198, "Zeiss Otus 85mm f/1.4 ZE"}, diff --git a/rtexif/olympusattribs.cc b/rtexif/olympusattribs.cc index ec7ab98c7..52fbec55d 100644 --- a/rtexif/olympusattribs.cc +++ b/rtexif/olympusattribs.cc @@ -131,6 +131,7 @@ public: lenses["00 32 10"] = "Olympus M.Zuiko Digital ED 12-200mm f/3.5-6.3"; lenses["00 33 00"] = "Olympus Zuiko Digital 25mm f/2.8"; lenses["00 34 00"] = "Olympus Zuiko Digital ED 9-18mm f/4.0-5.6"; + lenses["00 34 10"] = "Olympus M.Zuiko Digital ED 12-45mm f/4.0 Pro"; lenses["00 35 00"] = "Olympus Zuiko Digital 14-54mm f/2.8-3.5 II"; lenses["01 01 00"] = "Sigma 18-50mm f/3.5-5.6 DC"; lenses["01 01 10"] = "Sigma 30mm f/2.8 EX DN"; diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc index da940f5cb..d6b9a9c84 100644 --- a/rtexif/pentaxattribs.cc +++ b/rtexif/pentaxattribs.cc @@ -782,6 +782,7 @@ public: choices.insert (p_t (256 * 4 + 2, "smc PENTAX-FA 80-320mm f/4.5-5.6")); choices.insert (p_t (256 * 4 + 3, "smc PENTAX-FA 43mm f/1.9 Limited")); choices.insert (p_t (256 * 4 + 6, "smc PENTAX-FA 35-80mm f/4-5.6")); + choices.insert (p_t (256 * 4 + 8, "Irix 150mm f/2.8 Macro")); choices.insert (p_t (256 * 4 + 9, "Irix 11mm f/4 Firefly")); choices.insert (p_t (256 * 4 + 10, "Irix 15mm f/2.4")); choices.insert (p_t (256 * 4 + 12, "smc PENTAX-FA 50mm f/1.4")); @@ -938,6 +939,7 @@ public: choices.insert (p_t (256 * 8 + 62, "HD PENTAX-D FA 24-70mm f/2.8 ED SDM WR")); choices.insert (p_t (256 * 8 + 63, "HD PENTAX-D FA 15-30mm f/2.8 ED SDM WR")); choices.insert (p_t (256 * 8 + 64, "HD PENTAX-D FA* 50mm f/1.4 SDM AW")); + choices.insert (p_t (256 * 8 + 65, "HD PENTAX-D FA 70-210mm f/4 ED SDM WR")); choices.insert (p_t (256 * 8 + 196, "HD PENTAX-DA* 11-18mm f/2.8 ED DC AW")); choices.insert (p_t (256 * 8 + 197, "HD PENTAX-DA 55-300mm f/4.5-6.3 ED PLM WR RE")); choices.insert (p_t (256 * 8 + 198, "smc PENTAX-DA L 18-50mm f/4-5.6 DC WR RE")); diff --git a/rtexif/sonyminoltaattribs.cc b/rtexif/sonyminoltaattribs.cc index 88251b131..4c901b8c0 100644 --- a/rtexif/sonyminoltaattribs.cc +++ b/rtexif/sonyminoltaattribs.cc @@ -1126,6 +1126,7 @@ public: choices.insert (p_t (49458, "Tamron 17-28mm f/2.8 Di III RXD")); choices.insert (p_t (49459, "Tamron 35mm f/2.8 Di III OSD M1:2")); choices.insert (p_t (49460, "Tamron 24mm f/2.8 Di III OSD M1:2")); + choices.insert (p_t (49461, "Tamron 20mm f/2.8 Di III OSD M1:2")); choices.insert (p_t (49712, "Tokina FiRIN 20mm f/2 FE AF")); choices.insert (p_t (49713, "Tokina FiRIN 100mm f/2.8 FE MACRO")); choices.insert (p_t (50480, "Sigma 30mm f/1.4 DC DN | C")); @@ -1152,6 +1153,7 @@ public: choices.insert (p_t (50514, "Sigma 45mm f/2.8 DG DN | C")); choices.insert (p_t (50515, "Sigma 35mm f/1.2 DG DN | A")); choices.insert (p_t (50516, "Sigma 14-24mm f/2.8 DG DN | A")); + choices.insert (p_t (50517, "Sigma 24-70mm f/2.8 DG DN | A")); choices.insert (p_t (50992, "Voigtlander SUPER WIDE-HELIAR 15mm f/4.5 III")); choices.insert (p_t (50993, "Voigtlander HELIAR-HYPER WIDE 10mm f/5.6")); choices.insert (p_t (50994, "Voigtlander ULTRA WIDE-HELIAR 12mm f/5.6 III")); From 2bc9396569c574f1e5c41768dea947b8775ee9e5 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 27 Feb 2020 13:33:51 +0100 Subject: [PATCH 151/264] Fixed show wavelet levels --- rtengine/dcrop.cc | 4 ++-- rtengine/improccoordinator.cc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index b9594a709..3e9e2a6a8 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1008,12 +1008,12 @@ void Crop::update(int todo) params.wavelet.CLmethod = provis; } - +/* if (!WaveParams.expclari && WaveParams.CLmethod != "all") { params.wavelet.CLmethod = "all"; params.wavelet.Backmethod = "grey"; } - +*/ if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = false; WaveParams.expchroma = false; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 1115fa4fc..35834a976 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -906,12 +906,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) params->wavelet.CLmethod = provis; } - +/* if (!WaveParams.expclari && WaveParams.CLmethod != "all") { params->wavelet.CLmethod = "all"; params->wavelet.Backmethod = "grey"; } - +*/ if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = false; WaveParams.expchroma = false; From d2f78efd3266ba32a9c516a32ca1043392d53702 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 27 Feb 2020 14:20:28 +0100 Subject: [PATCH 152/264] improccoordinator.cc : be cppcheck clean --- rtengine/improccoordinator.cc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 35834a976..6c9105036 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -351,7 +351,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bayerAutoContrastListener->autoContrastChanged(contrastThreshold); } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS && xtransAutoContrastListener && autoContrast) { - xtransAutoContrastListener->autoContrastChanged(autoContrast ? contrastThreshold : -1.0); + xtransAutoContrastListener->autoContrastChanged(contrastThreshold); } // if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag todo |= (M_INIT | M_CSHARP); @@ -905,14 +905,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) params->wavelet.CLmethod = provis; - } -/* - if (!WaveParams.expclari && WaveParams.CLmethod != "all") { - params->wavelet.CLmethod = "all"; - params->wavelet.Backmethod = "grey"; - } -*/ - if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = false; WaveParams.expchroma = false; WaveParams.expedge = false; From 19b6e4ca68c440874411989e0a0a6f942d56827b Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 27 Feb 2020 14:30:59 +0100 Subject: [PATCH 153/264] dcrop.cc : be cppcheck clean --- rtengine/dcrop.cc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 3e9e2a6a8..243ea1b62 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1007,14 +1007,6 @@ void Crop::update(int todo) params.wavelet.CLmethod = provis; - } -/* - if (!WaveParams.expclari && WaveParams.CLmethod != "all") { - params.wavelet.CLmethod = "all"; - params.wavelet.Backmethod = "grey"; - } -*/ - if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = false; WaveParams.expchroma = false; WaveParams.expedge = false; From 4590607ea58013b5c20f40c0a2c4702ddc23ed7e Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 27 Feb 2020 14:54:17 +0100 Subject: [PATCH 154/264] simpleprocess.cc : be cppcheck clean --- rtengine/simpleprocess.cc | 77 ++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 28188b0f6..779f2b33d 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -68,7 +68,7 @@ public: pl(pl), flush(flush), // internal state - ii(nullptr), + initialImage(nullptr), imgsrc(nullptr), fw(0), fh(0), @@ -97,6 +97,7 @@ public: hlcomprthresh(0), baseImg(nullptr), labView(nullptr), + ctColorCurve(), autili(false), butili(false) { @@ -150,10 +151,10 @@ private: pl->setProgress(0.0); } - ii = job->initialImage; + initialImage = job->initialImage; - if (!ii) { - ii = InitialImage::load(job->fname, job->isRaw, &errorCode); + if (!initialImage) { + initialImage = InitialImage::load(job->fname, job->isRaw, &errorCode); if (errorCode) { delete job; @@ -164,7 +165,7 @@ private: procparams::ProcParams& params = job->pparams; // acquire image from imagesource - imgsrc = ii->getImageSource(); + imgsrc = initialImage->getImageSource(); tr = getCoarseBitMask(params.coarse); @@ -245,7 +246,6 @@ private: if (params.retinex.enabled) { //enabled Retinex LUTf cdcurve(65536, 0); LUTf mapcurve(65536, 0); - LUTu dummy; RetinextransmissionCurve dehatransmissionCurve; RetinexgaintransmissionCurve dehagaintransmissionCurve; bool dehacontlutili = false; @@ -921,11 +921,11 @@ private: if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") { const int cw = baseImg->getWidth(); const int ch = baseImg->getHeight(); - cmsHTRANSFORM dummy = nullptr; + cmsHTRANSFORM dummyTransForm = nullptr; // put gamma TRC to 1 - ipf.workingtrc(baseImg, baseImg, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, dummy, true, false, false); + ipf.workingtrc(baseImg, baseImg, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, dummyTransForm, true, false, false); //adjust TRC - ipf.workingtrc(baseImg, baseImg, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, dummy, false, true, false); + ipf.workingtrc(baseImg, baseImg, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, dummyTransForm, false, true, false); } } @@ -1155,9 +1155,7 @@ private: ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); unshar->CopyFrom(labView); params.wavelet.CLmethod = provis; - } - if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { WaveParams.expcontrast = false; WaveParams.expchroma = false; WaveParams.expedge = false; @@ -1402,9 +1400,6 @@ private: } } - cmsHPROFILE jprof = nullptr; - constexpr bool customGamma = false; - constexpr bool useLCMS = false; bool bwonly = params.blackwhite.enabled && !params.colorToning.enabled && !autili && !butili && !params.colorappearance.enabled; ///////////// Custom output gamma has been removed, the user now has to create @@ -1453,12 +1448,12 @@ private: case MetaDataParams::TUNNEL: // Sending back the whole first root, which won't necessarily be the selected frame number // and may contain subframe depending on initial raw's hierarchy - readyImg->setMetadata(ii->getMetaData()->getRootExifData()); + readyImg->setMetadata(initialImage->getMetaData()->getRootExifData()); break; case MetaDataParams::EDIT: // ask for the correct frame number, but may contain subframe depending on initial raw's hierarchy - readyImg->setMetadata(ii->getMetaData()->getBestExifData(imgsrc, ¶ms.raw), params.exif, params.iptc); + readyImg->setMetadata(initialImage->getMetaData()->getBestExifData(imgsrc, ¶ms.raw), params.exif, params.iptc); break; default: // case MetaDataParams::STRIP @@ -1468,36 +1463,28 @@ private: // Setting the output curve to readyImg - if (customGamma) { - if (!useLCMS) { - // use corrected sRGB profile in order to apply a good TRC if present, otherwise use LCMS2 profile generated by lab2rgb16 w/ gamma - ProfileContent pc(jprof); + // use the selected output profile if present, otherwise use LCMS2 profile generate by lab2rgb16 w/ gamma + + if (!params.icm.outputProfile.empty() && params.icm.outputProfile != ColorManagementParams::NoICMString) { + + // if ICCStore::getInstance()->getProfile send back an object, then ICCStore::getInstance()->getContent will do too + cmsHPROFILE jprof = ICCStore::getInstance()->getProfile(params.icm.outputProfile); //get outProfile + + if (jprof == nullptr) { + if (settings->verbose) { + printf("\"%s\" ICC output profile not found!\n - use LCMS2 substitution\n", params.icm.outputProfile.c_str()); + } + } else { + if (settings->verbose) { + printf("Using \"%s\" output profile\n", params.icm.outputProfile.c_str()); + } + + ProfileContent pc = ICCStore::getInstance()->getContent(params.icm.outputProfile); readyImg->setOutputProfile(pc.getData().c_str(), pc.getData().size()); } } else { - // use the selected output profile if present, otherwise use LCMS2 profile generate by lab2rgb16 w/ gamma - - if (!params.icm.outputProfile.empty() && params.icm.outputProfile != ColorManagementParams::NoICMString) { - - // if ICCStore::getInstance()->getProfile send back an object, then ICCStore::getInstance()->getContent will do too - cmsHPROFILE jprof = ICCStore::getInstance()->getProfile(params.icm.outputProfile); //get outProfile - - if (jprof == nullptr) { - if (settings->verbose) { - printf("\"%s\" ICC output profile not found!\n - use LCMS2 substitution\n", params.icm.outputProfile.c_str()); - } - } else { - if (settings->verbose) { - printf("Using \"%s\" output profile\n", params.icm.outputProfile.c_str()); - } - - ProfileContent pc = ICCStore::getInstance()->getContent(params.icm.outputProfile); - readyImg->setOutputProfile(pc.getData().c_str(), pc.getData().size()); - } - } else { - // No ICM - readyImg->setOutputProfile(nullptr, 0); - } + // No ICM + readyImg->setOutputProfile(nullptr, 0); } // t2.set(); @@ -1505,7 +1492,7 @@ private: // printf("Total:- %d usec\n", t2.etime(t1)); if (!job->initialImage) { - ii->decreaseRef(); + initialImage->decreaseRef(); } delete job; @@ -1669,7 +1656,7 @@ private: // internal state std::unique_ptr ipf_p; - InitialImage *ii; + InitialImage *initialImage; ImageSource *imgsrc; int fw; int fh; From d56c53b1ae9c69e8ddbbcb4f3c1962578393824c Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 27 Feb 2020 18:06:30 +0100 Subject: [PATCH 155/264] Change tooltip --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index a807ba9ea..7069d44ed 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2320,7 +2320,7 @@ TP_WBALANCE_SOLUX47;Solux 4700K (vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. TP_WBALANCE_STUDLABEL;Student Itcwb: %1 -TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic. +TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic.\nStudent=1000 meeans the calculations were not restarted but results are probably goods TP_WBALANCE_TEMPBIAS;AWB temperature bias TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". TP_WBALANCE_TEMPERATURE;Temperature From 10af444786e6b5dc4baa3e35756525674872458a Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 27 Feb 2020 18:08:02 +0100 Subject: [PATCH 156/264] Change tooltip orthographe --- rtdata/languages/default | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 7069d44ed..5af093b6b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2320,7 +2320,7 @@ TP_WBALANCE_SOLUX47;Solux 4700K (vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. TP_WBALANCE_STUDLABEL;Student Itcwb: %1 -TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic.\nStudent=1000 meeans the calculations were not restarted but results are probably goods +TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic.\nStudent=1000 means the calculations were not restarted but results are probably goods TP_WBALANCE_TEMPBIAS;AWB temperature bias TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". TP_WBALANCE_TEMPERATURE;Temperature From a3c2264cde6af6296c62c526ecce8a64febbea04 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 27 Feb 2020 19:56:42 +0100 Subject: [PATCH 157/264] eahd_demosaic.cc : be cppcheck clean --- rtengine/eahd_demosaic.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtengine/eahd_demosaic.cc b/rtengine/eahd_demosaic.cc index ad4bda3cd..009be0714 100644 --- a/rtengine/eahd_demosaic.cc +++ b/rtengine/eahd_demosaic.cc @@ -360,8 +360,8 @@ void RawImageSource::eahd_demosaic () int wh = 0; - for (int dmi = 0; dmi < 9; dmi++) { - wh += (dLmaph[dmi] <= eL) * (dCamaph[dmi] <= eCa) * (dCbmaph[dmi] <= eCb); + for (int d = 0; d < 9; ++d) { + wh += (dLmaph[d] <= eL) * (dCamaph[d] <= eCa) * (dCbmaph[d] <= eCb); } homh[imx][j - 1] += wh; @@ -376,8 +376,8 @@ void RawImageSource::eahd_demosaic () int wv = 0; - for (int dmi = 0; dmi < 9; dmi++) { - wv += (dLmapv[dmi] <= eL) * (dCamapv[dmi] <= eCa) * (dCbmapv[dmi] <= eCb); + for (int d = 0; d < 9; ++d) { + wv += (dLmapv[d] <= eL) * (dCamapv[d] <= eCa) * (dCbmapv[d] <= eCb); } homv[imx][j - 1] += wv; From f7792aa936143ff56f270fa22b4a934eed62392c Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Thu, 27 Feb 2020 21:22:34 +0100 Subject: [PATCH 158/264] some cleanups --- rtengine/imagesource.h | 3 +- rtengine/procparams.cc | 7 - rtengine/rawimagesource.cc | 836 ++++++++++++------------------------- rtengine/rawimagesource.h | 3 +- rtengine/simpleprocess.cc | 3 +- rtengine/stdimagesource.cc | 2 +- rtengine/stdimagesource.h | 2 +- 7 files changed, 282 insertions(+), 574 deletions(-) diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index f01d52059..22b8cdc08 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -98,8 +98,7 @@ public: virtual void retinex (const procparams::ColorManagementParams& cmp, const procparams::RetinexParams &deh, const procparams::ToneCurveParams& Tc, LUTf & cdcurve, LUTf & mapcurve, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool mapcontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) {}; virtual void retinexPrepareCurves (const procparams::RetinexParams &retinexParams, LUTf &cdcurve, LUTf &mapcurve, RetinextransmissionCurve &retinextransmissionCurve, RetinexgaintransmissionCurve &retinexgaintransmissionCurve, bool &retinexcontlutili, bool &mapcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) {}; virtual void retinexPrepareBuffers (const procparams::ColorManagementParams& cmp, const procparams::RetinexParams &retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) {}; - virtual void flushRawData () {}; - virtual void flushRGB () {}; + virtual void flush () = 0; virtual void HLRecovery_Global (const procparams::ToneCurveParams &hrp) {}; virtual void HLRecovery_inpaint (float** red, float** green, float** blue) {}; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 88178d0e0..40a5ae68a 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1309,15 +1309,8 @@ const std::vector& WBParams::getWbEntries() static const std::vector wb_entries = { {"Camera", WBEntry::Type::CAMERA, M("TP_WBALANCE_CAMERA"), 0, 1.f, 1.f, 0.f}, - // {"Auto", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f, 0.f}, {"autitcgreen", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOITCGREEN"), 0, 1.f, 1.f, 0.f}, {"autold", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOOLD"), 0, 1.f, 1.f, 0.f}, - // {"aut", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTODEM"), 0, 1.f, 1.f, 0.f}, - // {"autedg", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGE"), 0, 1.f, 1.f, 0.f}, - // {"autorobust", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOROB"), 0, 1.f, 1.f, 0.f}, - // {"autosdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOSDW"), 0, 1.f, 1.f, 0.f}, - // {"autedgsdw", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGESW"), 0, 1.f, 1.f, 0.f}, - // {"autedgrob", WBEntry::Type::AUTO, M("TP_WBALANCE_AUTOEDGEROB"), 0, 1.f, 1.f, 0.f}, {"Daylight", WBEntry::Type::DAYLIGHT, M("TP_WBALANCE_DAYLIGHT"), 5300, 1.f, 1.f, 0.f}, {"Cloudy", WBEntry::Type::CLOUDY, M("TP_WBALANCE_CLOUDY"), 6200, 1.f, 1.f, 0.f}, {"Shade", WBEntry::Type::SHADE, M("TP_WBALANCE_SHADE"), 7600, 1.f, 1.f, 0.f}, diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 3cabaf5b2..b55ec4bf1 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -196,7 +196,7 @@ void transLineD1x (const float* const red, const float* const green, const float } if(i == 2 && oddHeight) { - int row = 2 * imheight; + row = 2 * imheight; for (int j = 0; j < imwidth; j++) { int col = imwidth - 1 - j; @@ -448,6 +448,7 @@ RawImageSource::RawImageSource () , initialGain(0.0) , camInitialGain(0.0) , defGain(0.0) + , camProfile(nullptr) , ri(nullptr) , rawData(0, 0) , green(0, 0) @@ -462,7 +463,6 @@ RawImageSource::RawImageSource () , rawDirty(true) , histMatchingParams(new procparams::ColorManagementParams) { - camProfile = nullptr; embProfile = nullptr; rgbSourceModified = false; for(int i = 0; i < 4; ++i) { @@ -488,9 +488,6 @@ RawImageSource::~RawImageSource () delete rawDataBuffer[i]; } - flushRGB(); - flushRawData(); - if (camProfile) { cmsCloseProfile (camProfile); } @@ -897,9 +894,9 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima } // last row - int b = (a == 1 && image->getHeight() % 2) || (a == 0 && image->getHeight() % 2 == 0); + int offset = (a == 1 && image->getHeight() % 2) || (a == 0 && image->getHeight() % 2 == 0); - for (int j = 1 + b; j < image->getWidth() - 1; j += 2) { + for (int j = 1 + offset; j < image->getWidth() - 1; j += 2) { image->r(image->getHeight() - 1, j) = (image->r(image->getHeight() - 2, j) + image->r(image->getHeight() - 1, j + 1) + image->r(image->getHeight() - 1, j - 1)) / 3; image->g(image->getHeight() - 1, j) = (image->g(image->getHeight() - 2, j) + image->g(image->getHeight() - 1, j + 1) + image->g(image->getHeight() - 1, j - 1)) / 3; image->b(image->getHeight() - 1, j) = (image->b(image->getHeight() - 2, j) + image->b(image->getHeight() - 1, j + 1) + image->b(image->getHeight() - 1, j - 1)) / 3; @@ -2208,7 +2205,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara { float aa = conversionBuffer[0][i - border][j - border]; float bb = conversionBuffer[1][i - border][j - border]; - float Chprov1 = sqrt(SQR(aa) + SQR(bb)) / 327.68f; + float Chprov1 = std::sqrt(SQR(aa) + SQR(bb)) / 327.68f; sqrtBuffer[j - border] = Chprov1; float HH = xatan2f(bb, aa); atan2Buffer[j - border] = HH; @@ -2236,7 +2233,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #else float aa = conversionBuffer[0][i - border][j - border]; float bb = conversionBuffer[1][i - border][j - border]; - float Chprov1 = sqrt(SQR(aa) + SQR(bb)) / 327.68f; + float Chprov1 = std::sqrt(SQR(aa) + SQR(bb)) / 327.68f; float HH = xatan2f(bb, aa); float2 sincosval;// = xsincosf(HH); @@ -2350,15 +2347,16 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara } -void RawImageSource::flushRawData() +void RawImageSource::flush() { + for(size_t i = 0; i + 1 < numFrames; ++i) { + delete rawDataBuffer[i]; + rawDataBuffer[i] = nullptr; + } + if (rawData) { rawData(0, 0); } -} - -void RawImageSource::flushRGB() -{ if (green) { green(0, 0); } @@ -2382,7 +2380,6 @@ void RawImageSource::flushRGB() if (blueloc) { blueloc(0, 0); } - } void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp) @@ -2435,6 +2432,7 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw } } } else { + #ifdef _OPENMP #pragma omp parallel for #endif @@ -3409,8 +3407,6 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi constexpr float trans[ColorCount][ColorCount] = { { 1, 1, 1 }, { 1.7320508, -1.7320508, 0 }, { -1, -1, 2 } }; constexpr float itrans[ColorCount][ColorCount] = { { 1, 0.8660254, -0.5 }, { 1, -0.8660254, -0.5 }, { 1, 0, 1 } }; -#define FOREACHCOLOR for (int c=0; c < ColorCount; c++) - float minpt = min(hlmax[0], hlmax[1], hlmax[2]); //min of the raw clip points //float maxpt=max(hlmax[0],hlmax[1],hlmax[2]);//max of the raw clip points //float medpt=hlmax[0]+hlmax[1]+hlmax[2]-minpt-maxpt;//median of the raw clip points @@ -3421,7 +3417,9 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi const float satthresh = 0.5; float clip[3]; - FOREACHCOLOR clip[c] = min(maxave, hlmax[c]); + for (int c = 0; c < ColorCount; ++c) { + clip[c] = min(maxave, hlmax[c]); + } // Determine the maximum level (clip) of all channels const float clippt = clipthresh * maxval; @@ -3438,20 +3436,20 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi rgb[2] = bin[col]; // If no channel is clipped, do nothing on pixel - int c; + int cc; - for (c = 0; c < ColorCount; c++) { - if (rgb[c] > clippt) { + for (cc = 0; cc < ColorCount; ++cc) { + if (rgb[cc] > clippt) { break; } } - if (c == ColorCount) { + if (cc == ColorCount) { continue; } // Initialize cam with raw input [0] and potentially clipped input [1] - FOREACHCOLOR { + for (int c = 0; c < ColorCount; ++c) { lratio += min(rgb[c], clip[c]); cam[0][c] = rgb[c]; cam[1][c] = min(cam[0][c], maxval); @@ -3459,7 +3457,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi // Calculate the lightness correction ratio (chratio) for (int i = 0; i < 2; i++) { - FOREACHCOLOR { + for (int c = 0; c < ColorCount; ++c) { lab[i][c] = 0; for (int j = 0; j < ColorCount; j++) @@ -3475,7 +3473,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi } } - chratio = (sqrt(sum[1] / sum[0])); + chratio = (std::sqrt(sum[1] / sum[0])); // Apply ratio to lightness in LCH space for (int c = 1; c < ColorCount; c++) { @@ -3483,7 +3481,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi } // Transform back from LCH to RGB - FOREACHCOLOR { + for (int c = 0; c < ColorCount; ++c) { cam[0][c] = 0; for (int j = 0; j < ColorCount; j++) @@ -3491,7 +3489,9 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi cam[0][c] += itrans[c][j] * lab[0][j]; } } - FOREACHCOLOR rgb[c] = cam[0][c] / ColorCount; + for (int c = 0; c < ColorCount; ++c) { + rgb[c] = cam[0][c] / ColorCount; + } // Copy converted pixel back if (rin[col] > fixpt) { @@ -3545,7 +3545,7 @@ void RawImageSource::HLRecovery_Luminance (float* rin, float* gin, float* bin, f double Ho = 2 * bo - ro - go; if (r != g && g != b) { - double ratio = sqrt ((Co * Co + Ho * Ho) / (C * C + H * H)); + double ratio = std::sqrt ((Co * Co + Ho * Ho) / (C * C + H * H)); C *= ratio; H *= ratio; } @@ -3759,7 +3759,7 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU #ifdef _OPENMP int numThreads; // reduce the number of threads under certain conditions to avoid overhead of too many critical regions - numThreads = sqrt((((H - 2 * border) * (W - 2 * border)) / 262144.f)); + numThreads = std::sqrt((((H - 2 * border) * (W - 2 * border)) / 262144.f)); numThreads = std::min(std::max(numThreads, 1), omp_get_max_threads()); #pragma omp parallel num_threads(numThreads) @@ -3895,12 +3895,10 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) } -static void histoxyY(int bfhitc, int bfwitc, array2D & xc, array2D & yc, array2D & Yc, float *xxx, float * yyy, float * YYY, int * histxy, float * area, int * inter) +static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, float *xxx, float * yyy, float * YYY, int * histxy, float * area, int * inter) { - int nh = 0; -// int nc = 0; - // int nc2 = 0; + int nh; for (int y = 0; y < bfhitc ; y++) { for (int x = 0; x < bfwitc ; x++) { @@ -5407,7 +5405,7 @@ static void histoxyY(int bfhitc, int bfwitc, array2D & xc, array2D -void static studentXY(array2D & YYcurr, array2D & reffYY, int sizcurr, int Nc, int tt, float & student) +void static studentXY(const array2D & YYcurr, const array2D & reffYY, int sizcurr, int Nc, int tt, float & student) { //calculate Student coeff YY float somcurrY = 0.f; @@ -5448,7 +5446,7 @@ void static studentXY(array2D & YYcurr, array2D & reffYY, int siz somsquecreffY = somreff2Y - (SQR(somreffY)) / sizestureffY; //sum sqr differences second - float diviY = sqrt(((somsqueccurrY + somsquecreffY) * (1.f / (float)sizestucurrY + 1.f / (float)sizestureffY)) / (sizestucurrY + sizestureffY - 2)); + float diviY = std::sqrt(((somsqueccurrY + somsquecreffY) * (1.f / (float)sizestucurrY + 1.f / (float)sizestureffY)) / (sizestucurrY + sizestureffY - 2)); //divisor student float numerY = ((float)somcurrY / (float)sizestucurrY) - ((float)somreffY / (float)sizestureffY); //numerator student @@ -5567,15 +5565,15 @@ static void SdwWB(const array2D &redloc, const array2D &greenloc, SigmaB[i] = sigmab; if (ng > 0) { - SigmaG[i] = sqrt(SigmaG[i] / ng); + SigmaG[i] = std::sqrt(SigmaG[i] / ng); } if (nr > 0) { - SigmaR[i] = sqrt(SigmaR[i] / nr); + SigmaR[i] = std::sqrt(SigmaR[i] / nr); } if (nb > 0) { - SigmaB[i] = sqrt(SigmaB[i] / nb); + SigmaB[i] = std::sqrt(SigmaB[i] / nb); } #ifdef _OPENMP @@ -5830,9 +5828,9 @@ static void SobelWB(array2D &redsobel, array2D &greensobel, array2 //Edge strength //we can add if need teta = atan2 (sumYr, sumXr) - redsobel[y][x] = CLIP(sqrt(SQR(sumXr) + SQR(sumYr))); - greensobel[y][x] = CLIP(sqrt(SQR(sumXg) + SQR(sumYg))); - bluesobel[y][x] = CLIP(sqrt(SQR(sumXb) + SQR(sumYb))); + redsobel[y][x] = CLIP(std::sqrt(SQR(sumXr) + SQR(sumYr))); + greensobel[y][x] = CLIP(std::sqrt(SQR(sumXg) + SQR(sumYg))); + bluesobel[y][x] = CLIP(std::sqrt(SQR(sumXb) + SQR(sumYb))); } } } @@ -5964,7 +5962,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double float snedecor;//1. actually but put in case of confiance interval } WbGreen; - WbGreen gree[118] = {//symetric coefficient between 0.717 and 1.40 + constexpr WbGreen gree[118] = {//symetric coefficient between 0.717 and 1.40 {0.400, 1.f}, {0.500, 1.f}, {0.550, 1.f}, @@ -6130,7 +6128,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } WbTxyz; //we can change step to increase precision if need - also in Colortemp.cc with same changes //I don't know how to pass this structure to Colortemp ! - WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after + constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after {2001., 1.273842, 0.145295}, {2101., 1.244008, 0.167533}, {2201., 1.217338, 0.190697}, @@ -6325,7 +6323,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double bmm = new float [N_t]; int siza = 167;//size of histogram - int maxval = 25; //tempref and greenref are camera wb values. // I used them by default to select good spectral values !! @@ -6363,7 +6360,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double gm = new_scale_mul[1] / scale_mul[1] * gain; bm = new_scale_mul[2] / scale_mul[2] * gain; rmm[tt] = rm / gm; - gmm[tt] = gm / gm; + gmm[tt] = 1.f; bmm[tt] = bm / gm; } @@ -6431,270 +6428,261 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //here we select the good spectral color inside the 113 values //call tempxy to calculate for 114 color references Temp and XYZ with cat02 - if (separated) { - ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants + ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants - //find the good spectral values - //calculate xy reference spectral for tempref - for (int j = 0; j < Nc ; j++) { - reff_spect_xx_camera[j][repref] = TX[j] / (TX[j] + TY[j] + TZ[j]); // x from xyY - reff_spect_yy_camera[j][repref] = TY[j] / (TX[j] + TY[j] + TZ[j]); // y from xyY + //find the good spectral values + //calculate xy reference spectral for tempref + for (int j = 0; j < Nc ; j++) { + reff_spect_xx_camera[j][repref] = TX[j] / (TX[j] + TY[j] + TZ[j]); // x from xyY + reff_spect_yy_camera[j][repref] = TY[j] / (TX[j] + TY[j] + TZ[j]); // y from xyY + } + + int deltarepref = settings->itcwb_delta; + + for (int nn = 0; nn <= 2; nn++) { + //three loop to refine color if temp camera is probably not very good + int drep = 0; + + if (nn == 0) { + drep = -deltarepref; } - int deltarepref = settings->itcwb_delta; - - for (int nn = 0; nn <= 2; nn++) { - //three loop to refine color if temp camera is probably not very good - int drep = 0; - - if (nn == 0) { - drep = -deltarepref; - } - - if (nn == 2) { - drep = +deltarepref; - } - - int rep = repref + drep; - - if (rep > N_t) { - rep = N_t; - } - - if (rep < 0) { - rep = 0; - } - - //initialize calculation of xy current for tempref - for (int y = 0; y < bfh ; y += 10) { - for (int x = 0; x < bfw ; x += 10) { - int yy = y / 10; - int xx = x / 10 ; - float x_c = 0.f, y_c = 0.f, Y_c = 0.f; - float x_x = 0.f, y_y = 0.f, z_z = 0.f; - float RR = rmm[rep] * redloc[y][x]; - float GG = gmm[rep] * greenloc[y][x]; - float BB = bmm[rep] * blueloc[y][x]; - Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); - xc[yy][xx] = x_c; - yc[yy][xx] = y_c; - Yc[yy][xx] = Y_c; - } - - } - - //histogram xy depend of temp...but in most cases D45 ..D65.. - //calculate for this image the mean values for each family of color, near histogram x y (number) - //xy vary from x 0..0.77 y 0..0.82 - //neutral values are near x=0.34 0.33 0.315 0.37 y =0.35 0.36 0.34 - //skin are about x 0.45 0.49 y 0.4 0.47 - //blue sky x=0.25 y=0.28 and x=0.29 y=0.32 - // step about 0.02 x 0.32 0.34 y= 0.34 0.36 skin -- sky x 0.24 0.30 y 0.28 0.32 - //big step about 0.2 - - histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy, area, inter); + if (nn == 2) { + drep = +deltarepref; } - //calculate x y Y - int sizcurrref = siza;//choice of number of correlate colors in image - histcurrref(N_t, sizcurrref); - xx_curref(N_t, sizcurrref); - yy_curref(N_t, sizcurrref); - YY_curref(N_t, sizcurrref); - xx_curref_reduc(N_t, sizcurrref); - yy_curref_reduc(N_t, sizcurrref); - YY_curref_reduc(N_t, sizcurrref); - R_curref_reduc(N_t, sizcurrref); - G_curref_reduc(N_t, sizcurrref); - B_curref_reduc(N_t, sizcurrref); + int rep = repref + drep; - - hiss Wbhis [siza]; - int n1 = 0; - int n4 = 0; - int n15 = 0; - int n30 = 0; - int ntr = 0; - - for (int nh = 0; nh < siza; nh++) { - Wbhis[nh].histnum = histxy[nh]; - Wbhis[nh].index = nh; - Wbhis[nh].interest = inter[nh]; + if (rep > N_t) { + rep = N_t; } - //sort in ascending order - std::sort(Wbhis, Wbhis + siza, Wbhis[0]); + if (rep < 0) { + rep = 0; + } - for (int nh = 0; nh < siza; nh++) { + //initialize calculation of xy current for tempref + for (int y = 0; y < bfh ; y += 10) { + for (int x = 0; x < bfw ; x += 10) { + int yy = y / 10; + int xx = x / 10 ; + float x_c = 0.f, y_c = 0.f, Y_c = 0.f; + float x_x = 0.f, y_y = 0.f, z_z = 0.f; + float RR = rmm[rep] * redloc[y][x]; + float GG = gmm[rep] * greenloc[y][x]; + float BB = bmm[rep] * blueloc[y][x]; + Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); + xc[yy][xx] = x_c; + yc[yy][xx] = y_c; + Yc[yy][xx] = Y_c; + } + + } + + //histogram xy depend of temp...but in most cases D45 ..D65.. + //calculate for this image the mean values for each family of color, near histogram x y (number) + //xy vary from x 0..0.77 y 0..0.82 + //neutral values are near x=0.34 0.33 0.315 0.37 y =0.35 0.36 0.34 + //skin are about x 0.45 0.49 y 0.4 0.47 + //blue sky x=0.25 y=0.28 and x=0.29 y=0.32 + // step about 0.02 x 0.32 0.34 y= 0.34 0.36 skin -- sky x 0.24 0.30 y 0.28 0.32 + //big step about 0.2 + + histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy, area, inter); + } + + //calculate x y Y + int sizcurrref = siza;//choice of number of correlate colors in image + histcurrref(N_t, sizcurrref); + xx_curref(N_t, sizcurrref); + yy_curref(N_t, sizcurrref); + YY_curref(N_t, sizcurrref); + xx_curref_reduc(N_t, sizcurrref); + yy_curref_reduc(N_t, sizcurrref); + YY_curref_reduc(N_t, sizcurrref); + R_curref_reduc(N_t, sizcurrref); + G_curref_reduc(N_t, sizcurrref); + B_curref_reduc(N_t, sizcurrref); + + + hiss Wbhis [siza]; + int n1 = 0; + int n4 = 0; + int n15 = 0; + int n30 = 0; + int ntr = 0; + + for (int nh = 0; nh < siza; nh++) { + Wbhis[nh].histnum = histxy[nh]; + Wbhis[nh].index = nh; + Wbhis[nh].interest = inter[nh]; + } + + //sort in ascending order + std::sort(Wbhis, Wbhis + siza, Wbhis[0]); + + for (int nh = 0; nh < siza; nh++) { // printf("nh=%i", Wbhis[nh].index); + } + + //part to improve + for (int nh = 0; nh < siza; nh++) { + if (Wbhis[nh].histnum < 1) { + n1++; //keep only existing color but avoid to small } - //part to improve - for (int nh = 0; nh < siza; nh++) { - if (Wbhis[nh].histnum < 1) { - n1++; //keep only existing color but avoid to small - } - - if (Wbhis[nh].histnum < 4) { - n4++; //keep only existing color but avoid to small - } - - if (Wbhis[nh].histnum < 15) { - n15++; //keep only existing color but avoid to small - } - - if (Wbhis[nh].histnum < 30) { - n30++; //keep only existing color but avoid to small - } + if (Wbhis[nh].histnum < 4) { + n4++; //keep only existing color but avoid to small + } + if (Wbhis[nh].histnum < 15) { + n15++; //keep only existing color but avoid to small + } + if (Wbhis[nh].histnum < 30) { + n30++; //keep only existing color but avoid to small } - ntr = n30; - - if (ntr > (siza - 25)) { - ntr = n15; //if to less elements 25 elements mini - } - - if (ntr > (siza - 23)) { - ntr = n4; //if to less elements 25 elements mini - } - - if (ntr > (siza - 20)) { - ntr = n1; //if to less elements 20 elements mini - normally never be used ! - } - - int sizcurr2ref = sizcurrref - ntr; - int sizcu30 = sizcurrref - n30; - int sizcu4 = sizcurrref - n4; - -// printf("sizcurr2ref=%i sizcur_30=%i siecur_4=%i \n", sizcurr2ref, sizcu30, sizcu4); - sizcu4 = sizcu30;//arbitrary mini size if 30 result, ==> in full image 3000 pixels - - if (sizcu4 > 55) { - sizcu4 = 55; - } - - chrom wbchro[sizcu4]; - double swpr = (Txyz[repref].XX + Txyz[repref].ZZ + 1.); - double xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes - double ywpr = 1. / swpr; + } - for (int i = 0; i < sizcu4; i++) { //take the max values - int j = i; - histcurrref[j][repref] = (float) Wbhis[siza - (j + 1)].histnum; - xx_curref[j][repref] = xxx[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; - yy_curref[j][repref] = yyy[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; - YY_curref[j][repref] = YYY[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; + ntr = n30; + + if (ntr > (siza - 25)) { + ntr = n15; //if to less elements 25 elements mini + } + + if (ntr > (siza - 23)) { + ntr = n4; //if to less elements 25 elements mini + } + + if (ntr > (siza - 20)) { + ntr = n1; //if to less elements 20 elements mini - normally never be used ! + } + + int sizcurr2ref = sizcurrref - ntr; + const int sizcu30 = sizcurrref - n30; + const int sizcu4 = rtengine::min(sizcu30, 55); + + + chrom wbchro[sizcu4]; + double swpr = (Txyz[repref].XX + Txyz[repref].ZZ + 1.); + double xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes + double ywpr = 1. / swpr; + + + for (int i = 0; i < sizcu4; i++) { //take the max values + int j = i; + histcurrref[j][repref] = (float) Wbhis[siza - (j + 1)].histnum; + xx_curref[j][repref] = xxx[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; + yy_curref[j][repref] = yyy[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; + YY_curref[j][repref] = YYY[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; // printf("xx=%f yy=%f\n", xx_curref[j][repref], yy_curref[j][repref]); - } + } - estimchrom = 0.f; + estimchrom = 0.f; - for (int nh = 0; nh < sizcu4; nh++) { - float chxy = sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); - wbchro[nh].chroxy_number = chxy * sqrt(histcurrref[nh][repref]); - wbchro[nh].chroxy = sqrt(chxy); - wbchro[nh].chrox = xx_curref[nh][repref]; - wbchro[nh].chroy = yy_curref[nh][repref]; - wbchro[nh].Y = YY_curref[nh][repref]; - wbchro[nh].index = nh; - estimchrom += chxy; - } + for (int nh = 0; nh < sizcu4; nh++) { + float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); + wbchro[nh].chroxy_number = chxy * std::sqrt(histcurrref[nh][repref]); + wbchro[nh].chroxy = std::sqrt(chxy); + wbchro[nh].chrox = xx_curref[nh][repref]; + wbchro[nh].chroy = yy_curref[nh][repref]; + wbchro[nh].Y = YY_curref[nh][repref]; + wbchro[nh].index = nh; + estimchrom += chxy; + } - estimchrom /= sizcu4; - //printf("estimchrom=%f \n", estimchrom); + estimchrom /= sizcu4; + //printf("estimchrom=%f \n", estimchrom); - if (settings->itcwb_sort) { //sort in ascending with chroma values + if (settings->itcwb_sort) { //sort in ascending with chroma values - std::sort(wbchro, wbchro + sizcu4, wbchro[0]); - } + std::sort(wbchro, wbchro + sizcu4, wbchro[0]); + } - /* - for (int nh = 0; nh < sizcu4; nh++) { - printf("nh=%i chroma_xy=%f chrox=%f chroy=%f\n", nh, wbchro[nh].chroxy, wbchro[nh].chrox, wbchro[nh].chroy); - } - */ - maxval = settings->itcwb_thres;//max values of color to find correllation - - if (maxval < 10) { - maxval = 10; - } - - if (maxval > 55) { - maxval = 55; - } - - if (sizcurr2ref > maxval) { - sizcurr2ref = maxval; //keep about the biggest values, - } - - - for (int i = 0; i < sizcurr2ref; i++) { - //is condition chroxy necessary ? - if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral - w++; - xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; - yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; - YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; - // printf("xx_cu=%f yy_cu=%f Y=%f chro=%f\n", xx_curref_reduc[w][repref], yy_curref_reduc[w][repref], YY_curref_reduc[w][repref],sqrt(wbchro[sizcu4 - (i + 1)].chroxy)); + /* + for (int nh = 0; nh < sizcu4; nh++) { + printf("nh=%i chroma_xy=%f chrox=%f chroy=%f\n", nh, wbchro[nh].chroxy, wbchro[nh].chrox, wbchro[nh].chroy); } + */ + int maxval = settings->itcwb_thres;//max values of color to find correllation + + if (maxval < 10) { + maxval = 10; + } + + if (maxval > 55) { + maxval = 55; + } + + if (sizcurr2ref > maxval) { + sizcurr2ref = maxval; //keep about the biggest values, + } + + + for (int i = 0; i < sizcurr2ref; i++) { + //is condition chroxy necessary ? + if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral + w++; + xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; + yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; + YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; + // printf("xx_cu=%f yy_cu=%f Y=%f chro=%f\n", xx_curref_reduc[w][repref], yy_curref_reduc[w][repref], YY_curref_reduc[w][repref],std::sqrt(wbchro[sizcu4 - (i + 1)].chroxy)); } + } - //calculate deltaE xx to find best values of spectrals datas - int maxnb = settings->itcwb_sizereference; + //calculate deltaE xx to find best values of spectrals datas + int maxnb = settings->itcwb_sizereference; - if (maxnb > 5) { - maxnb = 5; - } + if (maxnb > 5) { + maxnb = 5; + } - if (maxnb < 1) { - maxnb = 1; - } + if (maxnb < 1) { + maxnb = 1; + } - if (settings->itcwb_thres > 39) { - maxnb = 200 / settings->itcwb_thres; - } + if (settings->itcwb_thres > 39) { + maxnb = 200 / settings->itcwb_thres; + } - for (int nb = 1; nb <= maxnb; nb ++) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 - for (int i = 0; i < w; i++) { - float mindeltaE = 100000.f; - int kN = 0; + for (int nb = 1; nb <= maxnb; nb ++) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 + for (int i = 0; i < w; i++) { + float mindeltaE = 100000.f; + int kN = 0; - for (int j = 0; j < Nc ; j++) { - if (good_spectral[j] == 0) { - float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); + for (int j = 0; j < Nc ; j++) { + if (good_spectral[j] == 0) { + float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); - if (deltaE < mindeltaE) { - mindeltaE = deltaE; - kN = j; - } + if (deltaE < mindeltaE) { + mindeltaE = deltaE; + kN = j; } } - - good_spectral[kN] = 1;//good spectral are spectral color that match color histogram xy - //printf("k=%i ", kN); } + + good_spectral[kN] = 1;//good spectral are spectral color that match color histogram xy + //printf("k=%i ", kN); } + } //reconvert to RGB for "reduction" - for (int i = 0; i < w; i++) { - float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; - float Y = 65535.f * YY_curref_reduc[i][repref]; - float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; - float r, g, b; - Color::xyz2rgb(X, Y, Z, r, g, b, wip); - r /= rmm[repref]; - g /= gmm[repref]; - b /= bmm[repref]; - R_curref_reduc[i][repref] = r; - G_curref_reduc[i][repref] = g; - B_curref_reduc[i][repref] = b; - - } + for (int i = 0; i < w; i++) { + float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + float Y = 65535.f * YY_curref_reduc[i][repref]; + float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + float r, g, b; + Color::xyz2rgb(X, Y, Z, r, g, b, wip); + r /= rmm[repref]; + g /= gmm[repref]; + b /= bmm[repref]; + R_curref_reduc[i][repref] = r; + G_curref_reduc[i][repref] = g; + B_curref_reduc[i][repref] = b; } @@ -6706,8 +6694,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double separated = false; ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants - int kk = -1; - //calculate x y Y int sizcurr = siza;//choice of number of correlate colors in image histcurr(N_t, sizcurr); @@ -6720,7 +6706,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double YYcurr_reduc(N_t, sizcurr); //calculate x y z for each pixel with multiplier rmm gmm bmm - kk = -1; for (int tt = 0; tt < N_t; tt++) {//N_t // double swp = (Txyz[tt].XX + Txyz[tt].ZZ + 1.); @@ -6752,7 +6737,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } - kk = -1; + int kk = -1; for (int i = 0; i < Nc ; i++) { if (good_spectral[i] == 1) { @@ -6767,34 +6752,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - - /* - //cat02 not need and does not work well - float nnx, nny, nnz; - - if(wbpar.wbcat02Method == "cam") {//code no update... - for(int k=0;k < sizcurr3; k++) { - float nnx = xxyycurr[2 * k][tt]*YYcurr[k][tt] / xxyycurr[2 * k + 1][tt]; - float nny = YYcurr[k][tt]; - float nnz = (1.f -xxyycurr[2 * k][tt] - xxyycurr[2 * k + 1][tt] )*YYcurr[k][tt]/xxyycurr[2 * k + 1][tt]; - float CAM02BB00 = 1.0f, CAM02BB01=1.0f, CAM02BB02=1.0f, CAM02BB10=1.0f, CAM02BB11=1.0f, CAM02BB12=1.0f, CAM02BB20=1.0f, CAM02BB21=1.0f, CAM02BB22=1.0f; //for CIECAT02 - float Xwb = Txyz[20].XX; - float Ywb = 1.; - float Zwb = Txyz[20].ZZ; - float xn, yn, zn; - ColorTemp::icieCAT02float(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, 1.0f); - - xn = CAM02BB00 * nnx + CAM02BB01 * nny + CAM02BB02 * nnz ; - yn = CAM02BB10 * nnx + CAM02BB11 * nny + CAM02BB12 * nnz ; - zn = CAM02BB20 * nnx + CAM02BB21 * nny + CAM02BB22 * nnz; - float som = xn + yn + zn; - xxyycurr[2 * k][tt] = xn / som; - xxyycurr[2 * k + 1][tt] = yn / som; - YYcurr[k][tt] = yn; - } - } - */ - float student = 0.f; @@ -6846,8 +6803,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double scantempend = N_t - 1; } - int kkg = -1; - for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; gr++) { float minstudgr = 100000.f; int goodrefgr = 1; @@ -6871,7 +6826,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double gm = new_scale_mul[1] / scale_mul[1] * gain; bm = new_scale_mul[2] / scale_mul[2] * gain; rmm[tt] = rm / gm; - gmm[tt] = gm / gm; + gmm[tt] = 1.f; bmm[tt] = bm / gm; } @@ -6904,8 +6859,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } - kkg = -1; - //degrade correllation with color high chroma, but not too much...seems not good, but keep in case of?? if (estimchrom < 0.025f) {//very smal value of chroma for image @@ -6924,6 +6877,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } + int kkg = -1; for (int i = 0; i < Nc ; i++) { if (good_spectral[i] == 1) { kkg++; @@ -7083,43 +7037,6 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D { // BENCHFUN //auto white balance -// printf ("AUtoWB OK\n"); -/* - array2D redsobel; - array2D greensobel; - array2D bluesobel; - - redsobel(bfw, bfh); - greensobel(bfw, bfh); - bluesobel(bfw, bfh); -*/ - double avg_r = 0.; - double avg_g = 0.; - double avg_b = 0.; - int rn = 0, gn = 0, bn = 0; -// constexpr double clipHigh = 65500.0; -// constexpr double clipLow = 0; //1500.0; - bool edg = false; - bool greyn = false; - bool robust = false; - bool itc = false; - - if (wbpar.method == "autorobust") { - // printf("autorob\n"); - // RobustWB(redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm); - - } - - if (wbpar.method == "autedg") { - // printf("autoedge\n"); - // edg = true; - } - - if (wbpar.method == "aut") { -// greyn = true; - } - - if (wbpar.method == "autitcgreen") { bool extra = false; @@ -7135,134 +7052,16 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D extra = true; } - // greenref = wbpar.green; -// printf("gree=%f\n", greenref); tempitc = 5000.; -// greenitc = greenref; - itc = true; - if (itc) { - ItcWB(extra, tempref, greenref, tempitc, greenitc, studgood, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar); - } + ItcWB(extra, tempref, greenref, tempitc, greenitc, studgood, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar); } - - if (wbpar.method == "autedgsdw") { - // SobelWB(redsobel, greensobel, bluesobel, redloc, greenloc, blueloc, bfw, bfh); - // SdwWB(redsobel, greensobel, bluesobel, bfw, bfh, avg_rm, avg_gm, avg_bm); - - } - - if (wbpar.method == "autedgrob") { - // SobelWB(redsobel, greensobel, bluesobel, redloc, greenloc, blueloc, bfw, bfh); - // RobustWB(redsobel, greensobel, bluesobel, bfw, bfh, avg_rm, avg_gm, avg_bm); - - } - - if (wbpar.method == "autosdw") { - // SdwWB(redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm); - - - // printf("bfw=%i bfh=%i begx=%i begy=%i xEn=%i yEn=%i cx=%i\n", bfw, bfh, begx, begy, xEn, yEn, cx); - } - -/* - if (edg) { - SobelWB(redsobel, greensobel, bluesobel, redloc, greenloc, blueloc, bfw, bfh); - -#ifdef _OPENMP - #pragma omp parallel for reduction(+:avg_r, avg_g, avg_b, rn, gn, bn) -#endif - - for (int y = 0; y < bfh ; y++) { - for (int x = 0; x < bfw ; x++) { - if (redsobel[y][x] < clipHigh && redsobel[y][x] > clipLow) { - avg_r += redsobel[y][x]; - rn++; - } - - if (greensobel[y][x] < clipHigh && greensobel[y][x] > clipLow) { - avg_g += greensobel[y][x]; - gn++; - } - - if (bluesobel[y][x] < clipHigh && bluesobel[y][x] > clipLow) { - avg_b += bluesobel[y][x]; - bn++; - } - } - } - } -*/ -/* - if (greyn) { -#ifdef _OPENMP - #pragma omp parallel for reduction(+:avg_r, avg_g, avg_b, rn, gn, bn) -#endif - - for (int y = 0; y < bfh ; y++) { - for (int x = 0; x < bfw ; x++) { - if (redloc[y][x] < clipHigh && redloc[y][x] > clipLow) { - avg_r += redloc[y][x]; - rn++; - } - - if (greenloc[y][x] < clipHigh && greenloc[y][x] > clipLow) { - avg_g += greenloc[y][x]; - gn++; - } - - if (blueloc[y][x] < clipHigh && blueloc[y][x] > clipLow) { - avg_b += blueloc[y][x]; - bn++; - } - } - } - } -*/ -// float varir = localr.equal; -// float varib = 1.f - (varir - 1.f); - - - -//CAT02 inverse - -// - if (greyn || edg) { - avg_rm = avg_r / rn; - avg_gm = avg_g / gn; - avg_bm = avg_b / bn; - } - - /* - //inverse cat02 - if (localr.wbcamMethod == "cat" || localr.wbcamMethod == "gamcat") { - //printf("Inverse CAT02\n"); - float x, y, z; - // cat02_to_xyzfloatraw ( x, y, z, avg_rm, avg_gm, avg_bm); - Color::xyz2rgbraw (x, y, z, avg_rm, avg_gm, avg_bm, wip); - } - */ - if (edg) { - // printf("Local sobel avgr = % f avgg = % f avgb = % f \n", avg_rm, avg_gm, avg_bm); - } - - if (greyn || robust) { - // printf("Local rgb avgr = % f avgg = % f avgb = % f \n", avg_rm, avg_gm, avg_bm); - } - -/* - redsobel(0, 0); - greensobel(0, 0); - bluesobel(0, 0); -*/ } void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) { //used by auto WB local to calculate red, green, blue in local region - // printf("OK RGBLOC\n"); - // int bfh = bf_h + 3, bfw = bf_w + 3; int bfh = H, bfw = W; if (local) { @@ -7270,36 +7069,6 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in bfw = bf_w + 3; } - // printf ("bfh=%i bfw=%i H=%i W=%i \n", bf_h, bf_w, H, W); - ColorManagementParams cmp; - - //TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(cmp.working); - // TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix (cmp.working); - /* - float toxyz[3][3] = { - { - static_cast ( wprof[0][0] / Color::D50x), - static_cast ( wprof[0][1] / Color::D50x), - static_cast ( wprof[0][2] / Color::D50x) - }, { - static_cast ( wprof[1][0]), - static_cast ( wprof[1][1]), - static_cast ( wprof[1][2]) - }, { - static_cast ( wprof[2][0] / Color::D50z), - static_cast ( wprof[2][1] / Color::D50z), - static_cast ( wprof[2][2] / Color::D50z) - } - }; - */ - /* - double wp[3][3] = { - {wprof[0][0], wprof[0][1], wprof[0][2]}, - {wprof[1][0], wprof[1][1], wprof[1][2]}, - {wprof[2][0], wprof[2][1], wprof[2][2]} - }; - */ -// printf("wp00=%f wp02=%f\n", wp[0][0], wp[0][2]); if (! greenloc) { greenloc(bfw, bfh); } @@ -7312,8 +7081,7 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in blueloc(bfw, bfh); } - float avgL = 0.f; - float redmm = 0.f, greenmm = 0.f, bluemm = 0.f; + double avgL = 0.0; //center data on normal values int nn = 0; @@ -7324,20 +7092,19 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in int loy = cy + i; if (!local) { - redmm = redloc[i][j] = red[i][j]; - greenmm = greenloc[i][j] = green[i][j]; - bluemm = blueloc[i][j] = blue[i][j]; - float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); - avgL += LL; + const float redmm = redloc[i][j] = red[i][j]; + const float greenmm = greenloc[i][j] = green[i][j]; + const float bluemm = blueloc[i][j] = blue[i][j]; + const float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); + avgL += static_cast(LL); nn++; } else { - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - redmm = redloc[loy - begy][lox - begx] = red[i][j]; - greenmm = greenloc[loy - begy][lox - begx] = green[i][j]; - bluemm = blueloc[loy - begy][lox - begx] = blue[i][j]; - float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); - avgL += LL; + const float redmm = redloc[loy - begy][lox - begx] = red[i][j]; + const float greenmm = greenloc[loy - begy][lox - begx] = green[i][j]; + const float bluemm = blueloc[loy - begy][lox - begx] = blue[i][j]; + const float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); + avgL += static_cast(LL); nn++; } } @@ -7345,7 +7112,6 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in avgL /= nn; - float sig = 0.f; float vari = 0.f; int mm = 0; @@ -7356,10 +7122,9 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in mm++; } - sig = sqrt(vari / mm); - float multip = 60000.f / (avgL + 2.f * sig); + const float sig = std::sqrt(vari / mm); + const float multip = 60000.f / (avgL + 2.f * sig); - // printf("multip=%f \n", multip); for (int i = 0; i < bfh; i++) for (int j = 0; j < bfw; j++) { redloc[i][j] *= multip; @@ -7368,8 +7133,6 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in } if (gamma) { - // printf("gamma loc\n"); - for (int i = 0; i < bfh; i++) for (int j = 0; j < bfw; j++) { redloc[i][j] = Color::gammatab_srgb[redloc[i][j]]; @@ -7401,7 +7164,6 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in } -//void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref, double & tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw) { // BENCHFUN @@ -7411,30 +7173,14 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref rm = gm = bm = 1; return; } -/* - if (redAWBMul != -1.) { - rm = redAWBMul; - gm = greenAWBMul; - bm = blueAWBMul; - return; - } - if (!isWBProviderReady()) { - rm = -1.0; - gm = -1.0; - bm = -1.0; - return; - } -*/ double avg_r = 0; double avg_g = 0; double avg_b = 0; int rn = 0, gn = 0, bn = 0; double avg_rm, avg_gm, avg_bm; - // int bfh = bf_h + 3, bfw = bf_w + 3; int bfh = H, bfw = W; if (wbpar.method == "autold") { - // printf("OK auto OLD\n"); if (fuji) { for (int i = 32; i < H - 32; i++) { int fw = ri->get_FujiWidth(); @@ -7608,44 +7354,28 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref } } - if (wbpar.method == "aut" || wbpar.method == "autosdw" || wbpar.method == "autedgsdw" || wbpar.method == "autitcgreen" || wbpar.method == "autedgrob" || wbpar.method == "autedg" || wbpar.method == "autorobust") { + if (wbpar.method == "autitcgreen") { bool twotimes = false; - // printf("OK avant auto\n"); WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); - // printf("OK apres auto\n"); - } redloc(0, 0); greenloc(0, 0); blueloc(0, 0); - if( settings->verbose ) { + if (settings->verbose) { printf ("AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); } - // return ColorTemp (pow(avg_r/rn, 1.0/6.0)*img_r, pow(avg_g/gn, 1.0/6.0)*img_g, pow(avg_b/bn, 1.0/6.0)*img_b); - double reds = 0., greens = 0., blues = 0.; - - if (wbpar.method == "aut" || wbpar.method == "autosdw" || wbpar.method == "autedgsdw" || wbpar.method == "autedgrob" || wbpar.method == "autedg" || wbpar.method == "autorobust") { - //twotimes = true; - reds = avg_rm * refwb_red; - greens = avg_gm * refwb_green; - blues = avg_bm * refwb_blue; - } - - if (wbpar.method == "autold") { - reds = avg_r / std::max(1, rn) * refwb_red; - greens = avg_g / std::max(1, gn) * refwb_green; - blues = avg_b / std::max(1, bn) * refwb_blue; - } - if (wbpar.method == "autitcgreen") { //not used redAWBMul = rm = avg_rm * refwb_red; greenAWBMul = gm = avg_gm * refwb_green; blueAWBMul = bm = avg_bm * refwb_blue; } else { + const double reds = avg_r / std::max(1, rn) * refwb_red; + const double greens = avg_g / std::max(1, gn) * refwb_green; + const double blues = avg_b / std::max(1, bn) * refwb_blue; redAWBMul = rm = imatrices.rgb_cam[0][0] * reds + imatrices.rgb_cam[0][1] * greens + imatrices.rgb_cam[0][2] * blues; greenAWBMul = gm = imatrices.rgb_cam[1][0] * reds + imatrices.rgb_cam[1][1] * greens + imatrices.rgb_cam[1][2] * blues; blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; @@ -7653,12 +7383,6 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref } - - - - - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) { // BENCHFUN @@ -7875,9 +7599,6 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; } -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) { @@ -8090,9 +7811,6 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &conversionBuffer, bool dehacontlutili, bool mapcontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) override; void retinexPrepareCurves (const procparams::RetinexParams &retinexParams, LUTf &cdcurve, LUTf &mapcurve, RetinextransmissionCurve &retinextransmissionCurve, RetinexgaintransmissionCurve &retinexgaintransmissionCurve, bool &retinexcontlutili, bool &mapcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) override; void retinexPrepareBuffers (const procparams::ColorManagementParams& cmp, const procparams::RetinexParams &retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) override; - void flushRawData () override; - void flushRGB () override; + void flush () override; void HLRecovery_Global (const procparams::ToneCurveParams &hrp) override; void refinement(int PassCount); void setBorder(unsigned int rawBorder) override {border = rawBorder;} diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 779f2b33d..d097ead72 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -801,8 +801,7 @@ private: // commented out because it makes the application crash when batch processing... // TODO: find a better place to flush rawData and rawRGB if (flush) { - imgsrc->flushRawData(); - imgsrc->flushRGB(); + imgsrc->flush(); } return true; diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index 9da4417e2..763621171 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -366,7 +366,7 @@ ColorTemp StdImageSource::getSpotWB (std::vector &red, std::vectorallocate(0, 0); }; diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index b88db42c4..9f4fbdfbe 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -118,7 +118,7 @@ public: void getRawValues(int x, int y, int rotate, int &R, int &G, int &B) override { R = G = B = 0;} - void flushRGB () override; + void flush () override; void captureSharpening(const procparams::CaptureSharpeningParams &sharpeningParams, bool showMask, double &conrastThreshold, double &radius) override {}; }; From ae0586719ae39a0c6e3f8b2cc229848ceef77e1a Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 28 Feb 2020 08:33:12 +0100 Subject: [PATCH 159/264] Enabled bencfun for Itcwb --- rtdata/languages/default | 2 +- rtengine/rawimagesource.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 5af093b6b..7e5830ec5 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2320,7 +2320,7 @@ TP_WBALANCE_SOLUX47;Solux 4700K (vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. TP_WBALANCE_STUDLABEL;Student Itcwb: %1 -TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic.\nStudent=1000 means the calculations were not restarted but results are probably goods +TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation\nThe lower the student value, the better the correlation\nValues below 0.002 are excellent\nValues below 0.005 are very good\nValues below 0.01 are good\nValues below 0.05 are good enough\nValues above 0.5 are poor\nVery good Student test results does not mean that the WB is good, if the illuminant is non-standard the results are erratic.\nStudent=1000 means the calculations were not restarted but results are probably goods, use previous results TP_WBALANCE_TEMPBIAS;AWB temperature bias TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". TP_WBALANCE_TEMPERATURE;Temperature diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 3cabaf5b2..63a75cee6 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -43,7 +43,7 @@ #include "rtlensfun.h" #include "../rtgui/options.h" -//#define BENCHMARK +#define BENCHMARK #include "StopWatch.h" #ifdef _OPENMP @@ -5902,7 +5902,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double itcwb_delta : 1 by defaut can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good */ // BENCHFUN - // BENCHFUN + BENCHFUN TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB"); From a9e2bde610dfcbbc641677445b88e9c99866f3dd Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 28 Feb 2020 11:44:25 +0100 Subject: [PATCH 160/264] use autold instead of auto, #5676 --- rtengine/improccoordinator.cc | 2 +- rtengine/rtthumbnail.cc | 2 +- rtgui/thumbnail.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 6c9105036..795bcaabb 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1584,7 +1584,7 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a if (params->wb.method == "Camera") { currWB = imgsrc->getWB(); - } else if (params->wb.method == "Auto") { + } else if (params->wb.method == "autold") { if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias) { double rm, gm, bm; imgsrc->getAutoWBMultipliers(rm, gm, bm); diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 4507f2b40..a063d965b 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -1130,7 +1130,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT double cam_g = colorMatrix[1][0] * camwbRed + colorMatrix[1][1] * camwbGreen + colorMatrix[1][2] * camwbBlue; double cam_b = colorMatrix[2][0] * camwbRed + colorMatrix[2][1] * camwbGreen + colorMatrix[2][2] * camwbBlue; currWB = ColorTemp (cam_r, cam_g, cam_b, params.wb.equal); - } else if (params.wb.method == "Auto") { + } else if (params.wb.method == "autold") { currWB = ColorTemp (autoWBTemp, autoWBGreen, wbEqual, "Custom"); } diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index 87bc730eb..7452c9d72 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -216,7 +216,7 @@ const ProcParams& Thumbnail::getProcParamsU () double ct; getCamWB (ct, pparams->wb.green); pparams->wb.temperature = ct; - } else if (pparams->wb.method == "Auto") { + } else if (pparams->wb.method == "autold") { double ct; getAutoWB (ct, pparams->wb.green, pparams->wb.equal, pparams->wb.tempBias); pparams->wb.temperature = ct; From 77be7605d80ffd85aea48fb3191e4fa28ffbb87f Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 28 Feb 2020 12:02:38 +0100 Subject: [PATCH 161/264] "Auto" => "autold", #5676 --- rtengine/simpleprocess.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 779f2b33d..8fdfefdd7 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -276,7 +276,7 @@ private: currWB = ColorTemp(); } else if (params.wb.method == "Camera") { currWB = imgsrc->getWB(); - } else if (params.wb.method == "Auto") { + } else if (params.wb.method == "autold") { double rm, gm, bm; imgsrc->getAutoWBMultipliers(rm, gm, bm); currWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias); From c7c1dec9cbe63016ceb54b1d181fc467b4201d85 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 28 Feb 2020 13:19:10 +0100 Subject: [PATCH 162/264] whitebalance : fix bug in changing method, #5676 --- rtgui/whitebalance.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 9a5f1a398..5d1c907df 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -897,7 +897,7 @@ int WhiteBalance::_setActiveMethod(Glib::ustring &label, Gtk::TreeModel::Childre if (row[methodColumns.colLabel] == label) { method->set_active(iter); - found = method->get_active_row_number(); + found = row[methodColumns.colId]; } if (found != -1) { From fbe718b64f0fac722ec665b74c7b1434abae8818 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Fri, 28 Feb 2020 10:20:40 -0800 Subject: [PATCH 163/264] fixes macOS autobuild (#5674) * update macOS autobuild yaml * updates */CMakeLists* for macOS autobuild compatibility * "" a dir for cmake * Un empty an empty EXTRA_INCDIR * use a cmake operator * Use the . dir to un-empty a string * fix minutes timer in macos yaml * test & skip instead of load & include * disregard fractional part of minutes in mac yaml * add another cmake test * fix typo in mac yaml * fix other part of same typo * correct a filename in mac yaml * test all include dirs * fix of mac yaml * mac:fix a path in yaml * mac:and its antecedent * options.h include a dir * test __has_include (gcc 5.* & up & clang) * remove a printf() in mac yaml * mac:change a "" and an elseif() to else() * fix a whitespace error * fix 2 whitespace errors * ZULU>UTC * add a "UTC * on the other side of the " * mac:properly set default LOCAL_PREFIX in CACHE * use of zsh subshells in macos yaml * mac:remove some && * mac:remove some " * mac:floating point divisors * mac:use double paren (()) * mac:add a dir * mac:floatize with decimal point * mac:zsh -c certain lines * remove a marker --- .github/workflows/main.yml | 107 +++++++++++++++++++++---------------- AboutThisBuild.txt.in | 2 +- CMakeLists.txt | 64 +++++++++++++--------- UpdateInfo.cmake | 27 +++++----- rtdata/CMakeLists.txt | 18 +++---- rtengine/CMakeLists.txt | 81 ++++++++++++++++++---------- rtexif/CMakeLists.txt | 6 +-- rtgui/CMakeLists.txt | 18 +++---- rtgui/options.h | 5 ++ tools/osx/macosx_bundle.sh | 1 + 10 files changed, 193 insertions(+), 136 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 13aa6677a..e483ace01 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,81 +1,96 @@ name: macOS build on: push: - branches-ignore: - - '**' + branches: + - dev + - patch** + - newlocallab + pull_request: + branches: + - dev + - newlocallab + release: + types: + - created jobs: build: - runs-on: macos-latest + runs-on: macos-10.15 steps: - uses: actions/checkout@v1 - name: Install dependencies - run: > - brew install gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme - libsigc++ little-cms2 libiptcdata fftw lensfun llvm expat pkgconfig - libomp shared-mime-info - - name: patch libiconv run: | - mkdir libiconv && cd libiconv - wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz - tar xf libiconv-1.16.tar.gz - cd libiconv-1.16 - patch -p1 < "${GITHUB_WORKSPACE}/tools/osx/libiconv_1.16_rt.patch" - mkdir build && cd build - destDir="$(pwd)" - ../configure --prefix=/opt/local --disable-static \ - CFLAGS='-arch x86_64 -mmacosx-version-min=10.9' \ - LDFLAGS='-arch x86_64 -mmacosx-version-min=10.9' \ - CXXFLAGS='-arch x86_64 -mmacosx-version-min=10.9' - make --jobs - make DESTDIR="${destDir}" install - sudo mv opt/local /usr/local/opt/libiconv - - name: cmake + date -u + mkdir build + date +%s > build/stamp + brew uninstall --ignore-dependencies libtiff + brew install libtiff gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme libsigc++ little-cms2 libiptcdata fftw lensfun expat pkgconfig libomp shared-mime-info | tee -a depslog + date -u + echo "----====Pourage====----" + cat depslog | grep Pouring + zsh -c 'echo "Completed installation of dependencies in $(printf "%0.2f" $(($[$(date +%s)-$(cat build/stamp)]/$((60.))))) minutes"' + - name: Configure build system env: CMAKE_CXX_STANDARD: 11 - PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig + PKG_CONFIG_PATH: /usr/local/opt/libtiff/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig RAW_THERAPEE_MAJOR: '5' RAW_THERAPEE_MINOR: '8' C_FLAGS: > - -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib - -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include - -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include - -I/usr/local/opt/expat/include -I/usr/local/opt/llvm/include + -arch x86_64 -mtune=generic -Xpreprocessor -fopenmp /usr/local/lib/libomp.dylib -I/usr/local/include -I/usr/local/opt/gdk-pixbuf/include -I/usr/local/opt/libiconv/include -I/usr/local/opt/libxml2/include -I/usr/local/opt/expat/include -I/usr/local/opt/libtiff/include run: | # GITHUB_REF is the ref that triggered the build, like # refs/heads/new-feature - the next line parses that to REF: the branch # name only (new-feature) - REF=${GITHUB_REF##*/} - mkdir build && cd build + export REF=${GITHUB_REF##*/} + export C_FLAGS=$(echo -e $C_FLAGS | tr -d '\n') + cd build && date -u && date +%s > configstamp cmake \ - -DCMAKE_BUILD_TYPE="release" \ + -DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ - -DCMAKE_EXE_LINKER_FLAGS="-L/usr/local/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -L/usr/local/opt/gdk-pixbuf/lib -L/usr/local/opt/libiconv/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libxml2/lib -L/usr/local/opt/expat/lib" \ + -DCMAKE_EXE_LINKER_FLAGS="-L. -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/opt/gdk-pixbuf/lib -L/usr/local/opt/libiconv/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/libxml2/lib -L/usr/local/opt/expat/lib" \ -DCACHE_NAME_SUFFIX="${RAW_THERAPEE_MAJOR}.${RAW_THERAPEE_MINOR}-${REF}" \ - -DPROC_TARGET_NUMBER="2" \ + -DPROC_TARGET_NUMBER="1" \ -DPROC_LABEL="generic processor" \ -DWITH_LTO="OFF" \ - -DLENSFUNDBDIR="./share/lensfun" \ - -DOpenMP_C_FLAGS=-fopenmp=libomp \ - -DOpenMP_CXX_FLAGS=-fopenmp=libomp \ - -DOpenMP_C_LIB_NAMES="libomp" \ - -DOpenMP_CXX_LIB_NAMES="libomp" \ - -DOpenMP_libomp_LIBRARY="/usr/local/lib/libomp.dylib" \ + -DLENSFUNDBDIR="/Applications/RawTherapee.app/Contents/Resources/share/lensfun" \ + -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang \ + -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ \ + -DCMAKE_C_FLAGS="-arch x86_64 -Wno-pass-failed -Wno-deprecated-register -Wno-unused-command-line-argument" \ + -DCMAKE_CXX_FLAGS="-arch x86_64 -Wno-pass-failed -Wno-deprecated-register -Wno-unused-command-line-argument" \ -DOpenMP_C_FLAGS="${C_FLAGS}" \ -DOpenMP_CXX_FLAGS="${C_FLAGS}" \ - -DCMAKE_AR="/usr/local/opt/llvm/bin/llvm-ar" \ - -DCMAKE_RANLIB="/usr/local/opt/llvm/bin/llvm-ranlib" \ - -DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" \ + -DOpenMP_C_LIB_NAMES=libomp \ + -DOpenMP_CXX_LIB_NAMES=libomp \ + -DOpenMP_libomp_LIBRARY=/usr/local/lib/libomp.dylib \ + -DCMAKE_AR=/usr/bin/ar \ + -DCMAKE_RANLIB=/usr/bin/ranlib \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 \ .. - make --jobs - make install - sudo make macosx_bundle - ARTIFACT=(RawTherapee*.zip) + zsh -c 'echo "Configured in $(printf "%0.2f" $(($[$(date +%s)-$(cat configstamp)]/$((60.))))) minutes"' + - name: Compile RawTherapee + run: | + date -u && date +%s > build/compilestamp + cd build + export REF=${GITHUB_REF##*/} + make -j$(sysctl -a | grep machdep.cpu.thread_count | tail -c 2) install + zsh -c 'echo "Compiled in $(printf "%0.2f" $(($[$(date +%s)-$(cat compilestamp)]/$((60.))))) minutes"' + - name: Create application bundle + run: | + zsh + date +%s > build/bundlestamp && date -u && cd build + export REF=${GITHUB_REF##*/} && export LOCAL_PREFIX=/usr && sudo make macosx_bundle + export ARTIFACT=(RawTherapee*.zip) echo "=== artifact: ${ARTIFACT}" # defining environment variables for next step as per # https://github.com/actions/starter-workflows/issues/68 echo "::set-env name=ARTIFACT_PATH::${GITHUB_WORKSPACE}/build/${ARTIFACT}" echo "::set-env name=ARTIFACT_FILE::${ARTIFACT}" + zsh -c 'echo "Bundled in $(printf "%0.2f" $(($[$(date +%s)-$(cat bundlestamp)]/$((60.))))) minutes"' + exit - uses: actions/upload-artifact@v1 with: name: ${{env.ARTIFACT_FILE}} path: ${{env.ARTIFACT_PATH}} + - name: Finish build + run: | + date -u + zsh -c 'echo "Build completed in $(printf "%0.2f" $(($[$(date +%s)-$(cat build/stamp)]/$((60.))))) minutes"' diff --git a/AboutThisBuild.txt.in b/AboutThisBuild.txt.in index 06f628187..4d8f4f3fe 100644 --- a/AboutThisBuild.txt.in +++ b/AboutThisBuild.txt.in @@ -14,6 +14,6 @@ Link flags: ${LFLAGS} OpenMP support: ${OPTION_OMP} MMAP support: ${WITH_MYFILE_MMAP} Build OS: ${BUILDINFO_OS} -Build date: ${BUILDINFO_DATE} ZULU +Build date: ${BUILDINFO_DATE} UTC Build epoch: ${BUILDINFO_EPOCH} Build UUID: ${BUILDINFO_UUID} diff --git a/CMakeLists.txt b/CMakeLists.txt index 5998ccb50..e3ae3b7ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,14 @@ -cmake_minimum_required(VERSION 3.5) +# Use of SOURCE_DIR target property begins at cmake 3.7 +if(APPLE) + cmake_minimum_required(VERSION 3.7) +else() + cmake_minimum_required(VERSION 3.5) +endif() # Compiler id for Apple Clang if(APPLE) cmake_policy(SET CMP0025 NEW) + cmake_policy(SET CMP0037 NEW) endif() # Must stay before the project() command: @@ -145,7 +151,7 @@ if(WIN32) CACHE STRING "Additional search paths") endif() -if(APPLE) +if(APPLE) # TODO make -mtune generic conditional and/or specifiable. if(CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]") set(CMAKE_EXE_LINKER_FLAGS @@ -210,7 +216,7 @@ endif() if(NOT DEFINED BUNDLE_BASE_INSTALL_DIR) if(APPLE) - set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BUILD_TYPE}/MacOS") + set(BUNDLE_BASE_INSTALL_DIR "${PROJECT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/MacOS") else() set(BUNDLE_BASE_INSTALL_DIR "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}") endif() @@ -219,7 +225,7 @@ endif() if(BUILD_BUNDLE) if(APPLE) set(BINDIR "${BUNDLE_BASE_INSTALL_DIR}") - set(CMAKE_INSTALL_PREFIX ".") + set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/build") else() set(BINDIR .) set(CMAKE_INSTALL_PREFIX "${BUNDLE_BASE_INSTALL_DIR}") @@ -233,7 +239,7 @@ endif() if(NOT DEFINED DATADIR) if(BUILD_BUNDLE) if(APPLE) - set(DATADIR "${CMAKE_BUILD_TYPE}/Resources/share") + set(DATADIR "${PROJECT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/Resources/share") else() set(DATADIR .) endif() @@ -245,7 +251,7 @@ endif() if(NOT DEFINED LIBDIR) if(BUILD_BUNDLE) if(APPLE) - set(LIBDIR "${CMAKE_BUILD_TYPE}/Frameworks") + set(LIBDIR "${PROJECT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/Frameworks") else() set(LIBDIR .) endif() @@ -362,8 +368,10 @@ if(APPLE) set(LOCAL_PREFIX "${LOCAL_PREFIX}" CACHE STRING "macos/gtk parent directory ie /usr or /opt") - elseif(NOT DEFINED LOCAL_PREFIX) - set(LOCAL_PREFIX "/usr") + else() + set(LOCAL_PREFIX + /usr + CACHE STRING "macos/gtk parent directory ie /usr or /opt") endif() if("${FANCY_DMG}") set(FANCY_DMG @@ -612,12 +620,10 @@ else() set(PROC_BIT_DEPTH 64 bits) endif() -# Get compiler name and version. Only CMake > 2.8.7 knows -# CMAKE_*_COMPILER_VERSION -if(CMAKE_VERSION VERSION_GREATER 2.8.7) +# Get compiler name and version. get_filename_component(COMPILER_INFO ${CMAKE_C_COMPILER} NAME_WE) set(COMPILER_INFO "${COMPILER_INFO} ${CMAKE_C_COMPILER_VERSION}") -else() +if(NOT APPLE) execute_process( COMMAND gcc -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -633,15 +639,18 @@ set(LFLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}" ) -set(ABOUT_COMMAND_WITH_ARGS - ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} - -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} - -DPROC_LABEL:STRING="${PROC_LABEL}" - -DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}" - -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DOPTION_OMP:STRING=${OPTION_OMP} - -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} - -DLENSFUN_VERSION:STRING=${LENSFUN_VERSION}) +if(NOT APPLE) + set(ABOUT_COMMAND_WITH_ARGS + ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} + -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} + -DPROC_LABEL:STRING="${PROC_LABEL}" + -DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}" + -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DGTKMM_VERSION:STRING=${GTKMM_VERSION} + -DOPTION_OMP:STRING=${OPTION_OMP} + -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} + -DLENSFUN_VERSION:STRING=${LENSFUN_VERSION}) +endif() if(WIN32) list( @@ -654,16 +663,19 @@ if(WIN32) -DCMAKE_INSTALL_PREFIX:STRING="${CMAKE_INSTALL_PREFIX}" -DBIT_DEPTH:STRING="${CMAKE_SIZEOF_VOID_P}") elseif(APPLE) - list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple - -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS} - -DCOMPILER_INFO:STRING=${COMPILER_INFO}) + set( + ABOUT_COMMAND_WITH_ARGS + cmake -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} -P ${PROJECT_SOURCE_DIR}/UpdateInfo.cmake -DSYSTEM:STRING=Apple -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS} -DCOMPILER_INFO:STRING=${COMPILER_INFO} -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX}) else() list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS} -DCOMPILER_INFO:STRING=${COMPILER_INFO}) endif() - -list(APPEND ABOUT_COMMAND_WITH_ARGS -P "${PROJECT_SOURCE_DIR}/UpdateInfo.cmake") +if(NOT APPLE) + list(APPEND + ABOUT_COMMAND_WITH_ARGS + -P "${PROJECT_SOURCE_DIR}/UpdateInfo.cmake") +endif() add_custom_target( UpdateInfo ALL diff --git a/UpdateInfo.cmake b/UpdateInfo.cmake index 6fa8e289c..473c68364 100644 --- a/UpdateInfo.cmake +++ b/UpdateInfo.cmake @@ -1,5 +1,9 @@ # cmakefile executed within a makefile target +if(APPLE) + set(PROJECT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") +endif() + # If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH) if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) @@ -68,20 +72,19 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) execute_process(COMMAND date -Ru OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND date +%s OUTPUT_VARIABLE BUILDINFO_EPOCH OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND uuidgen COMMAND tr "A-Z" "a-z" OUTPUT_VARIABLE BUILDINFO_UUID OUTPUT_STRIP_TRAILING_WHITESPACE) - message(STATUS "Git checkout information:") - message(STATUS " Commit description: ${GIT_DESCRIBE}") - message(STATUS " Branch: ${GIT_BRANCH}") - message(STATUS " Commit: ${GIT_COMMIT}") - message(STATUS " Commit date: ${GIT_COMMIT_DATE}") - message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") - message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") - message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") + message(STATUS " Commit description: ${GIT_DESCRIBE}") + message(STATUS " Branch: ${GIT_BRANCH}") + message(STATUS " Commit: ${GIT_COMMIT}") + message(STATUS " Commit date: ${GIT_COMMIT_DATE}") + message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}") + message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}") + message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}") message(STATUS "Build information:") - message(STATUS " Build OS: ${BUILDINFO_OS}") - message(STATUS " Build date: ${BUILDINFO_DATE}") - message(STATUS " Epoch: ${BUILDINFO_EPOCH}") - message(STATUS " UUID: ${BUILDINFO_UUID}") + message(STATUS " Build OS: ${BUILDINFO_OS}") + message(STATUS " Build date: ${BUILDINFO_DATE} UTC") + message(STATUS " Epoch: ${BUILDINFO_EPOCH}") + message(STATUS " UUID: ${BUILDINFO_UUID}") if(NOT DEFINED CACHE_NAME_SUFFIX) set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") diff --git a/rtdata/CMakeLists.txt b/rtdata/CMakeLists.txt index 76804c0f0..00a32c0cc 100644 --- a/rtdata/CMakeLists.txt +++ b/rtdata/CMakeLists.txt @@ -47,8 +47,8 @@ if(WIN32) install(FILES ${FONTS} DESTINATION "${DATADIR}/fonts") endif() -install(DIRECTORY ${PROFILESDIR} DESTINATION "${DATADIR}" FILES_MATCHING PATTERN "*.pp3") -install(DIRECTORY ${THEMEDIR} DESTINATION "${DATADIR}") +install(DIRECTORY "${PROFILESDIR}" DESTINATION "${DATADIR}" FILES_MATCHING PATTERN "*.pp3") +install(DIRECTORY "${THEMEDIR}" DESTINATION "${DATADIR}") install(FILES ${IMG_SVG} DESTINATION "${DATADIR}/images") install(FILES ${IMG_PNG} DESTINATION "${DATADIR}/images") @@ -57,19 +57,15 @@ install(FILES ${IMG_ICO} DESTINATION "${DATADIR}/images") if(APPLE) # CMake escapes first item quote character. Do not remove 'DUMMY_VARIABLE=' set(MACOSX_BUNDLE_COMMAND DUMMY_VARIABLE= - PROJECT_NAME="${PROJECT_NAME}" + PROJECT_NAME=${PROJECT_NAME} PROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}" - CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" + CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} GTK_PREFIX="${GTK_PREFIX}") - if(PROC_BIT_DEPTH MATCHES 32) - list(APPEND MACOSX_BUNDLE_COMMAND PROC_BIT_DEPTH=32) - else() - list(APPEND MACOSX_BUNDLE_COMMAND PROC_BIT_DEPTH=64) - endif() - list(APPEND MACOSX_BUNDLE_COMMAND sh "${PROJECT_SOURCE_DIR}/tools/osx/macosx_bundle.sh") + list(APPEND MACOSX_BUNDLE_COMMAND PROC_BIT_DEPTH=64) + list(APPEND MACOSX_BUNDLE_COMMAND sh ${PROJECT_SOURCE_DIR}/tools/osx/macosx_bundle.sh) add_custom_target(macosx_bundle COMMAND ${MACOSX_BUNDLE_COMMAND} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/build COMMENT "Creating macOS bundle") endif() diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 5f59da371..3813c5708 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -1,35 +1,60 @@ -include_directories(${EXTRA_INCDIR} - ${EXPAT_INCLUDE_DIRS} - ${FFTW3F_INCLUDE_DIRS} - ${GLIB2_INCLUDE_DIRS} - ${GLIBMM_INCLUDE_DIRS} - ${GOBJECT_INCLUDE_DIRS} - ${GTHREAD_INCLUDE_DIRS} - ${GTKMM_INCLUDE_DIRS} - ${GTK_INCLUDE_DIRS} - ${IPTCDATA_INCLUDE_DIRS} - ${LCMS_INCLUDE_DIRS} - ${LENSFUN_INCLUDE_DIRS} - ${RSVG_INCLUDE_DIRS} -) +if(EXTRA_INCDIR) + include_directories("${EXTRA_INCDIR}") +endif() +if(EXPAT_INCLUDE_DIRS) + include_directories("${EXPAT_INCLUDE_DIRS}") +endif() +if(FFTW3F_INCLUDE_DIRS) + include_directories("${FFTW3F_INCLUDE_DIRS}") +endif() +if(GLIB2_INCLUDE_DIRS) + include_directories("${GLIB2_INCLUDE_DIRS}") +endif() +if(GLIBMM_INCLUDE_DIRS) + include_directories("${GLIBMM_INCLUDE_DIRS}") +endif() +if(GOBJECT_INCLUDE_DIRS) + include_directories("${GOBJECT_INCLUDE_DIRS}") +endif() +if(GTHREAD_INCLUDE_DIRS) + include_directories("${GTHREAD_INCLUDE_DIRS}") +endif() +if(GTKMM_INCLUDE_DIRS) + include_directories("${GTKMM_INCLUDE_DIRS}") +endif() +if(GTK_INCLUDE_DIRS) + include_directories("${GTK_INCLUDE_DIRS}") +endif() +if(IPTCDATA_INCLUDE_DIRS) + include_directories("${IPTCDATA_INCLUDE_DIRS}") +endif() +if(LCMS_INCLUDE_DIRS) + include_directories("${LCMS_INCLUDE_DIRS}") +endif() +if(LENSFUN_INCLUDE_DIRS) + include_directories("${LENSFUN_INCLUDE_DIRS}") +endif() +if(RSVG_INCLUDE_DIRS) + include_directories("${RSVG_INCLUDE_DIRS}") +endif() if(NOT WITH_SYSTEM_KLT) include_directories("${CMAKE_SOURCE_DIR}/rtengine/klt") else() - include_directories(${KLT_INCLUDE_DIRS}) + include_directories("${KLT_INCLUDE_DIRS}") endif() link_directories("${PROJECT_SOURCE_DIR}/rtexif" - ${EXPAT_LIBRARY_DIRS} - ${EXTRA_LIBDIR} - ${FFTW3F_LIBRARY_DIRS} - ${GLIB2_LIBRARY_DIRS} - ${GLIBMM_LIBRARY_DIRS} - ${GOBJECT_LIBRARY_DIRS} - ${GTHREAD_LIBRARY_DIRS} - ${IPTCDATA_LIBRARY_DIRS} - ${LCMS_LIBRARY_DIRS} - ${LENSFUN_LIBRARY_DIRS} - ${RSVG_LIBRARY_DIRS} + "${EXPAT_LIBRARY_DIRS}" + "${EXTRA_LIBDIR}" + "${FFTW3F_LIBRARY_DIRS}" + "${GLIB2_LIBRARY_DIRS}" + "${GLIBMM_LIBRARY_DIRS}" + "${GOBJECT_LIBRARY_DIRS}" + "${GTHREAD_LIBRARY_DIRS}" + "${IPTCDATA_LIBRARY_DIRS}" + "${LCMS_LIBRARY_DIRS}" + "${LENSFUN_LIBRARY_DIRS}" + "${RSVG_LIBRARY_DIRS}" ) set(CAMCONSTSFILE "camconst.json") @@ -165,13 +190,13 @@ endif() include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}") -add_library(rtengine STATIC ${RTENGINESOURCEFILES}) +add_library(rtengine STATIC "${RTENGINESOURCEFILES}") add_dependencies(rtengine UpdateInfo) # It may be nice to store library version too if(BUILD_SHARED_LIBS) - install(TARGETS rtengine DESTINATION ${LIBDIR}) + install(TARGETS rtengine DESTINATION "${LIBDIR}") endif() set_target_properties(rtengine PROPERTIES COMPILE_FLAGS "${RTENGINE_CXX_FLAGS}") diff --git a/rtexif/CMakeLists.txt b/rtexif/CMakeLists.txt index 5a3831455..836f832e2 100644 --- a/rtexif/CMakeLists.txt +++ b/rtexif/CMakeLists.txt @@ -18,12 +18,12 @@ if(WIN32) link_directories(. "${PROJECT_SOURCE_DIR}/rtexif" ${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS} ${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${LENSFUN_LIBRARY_DIRS}) else() set_target_properties(rtexif PROPERTIES COMPILE_FLAGS " -fPIC") - include_directories(${EXTRA_INCDIR} ${GLIB2_INCLUDE_DIRS} ${GLIBMM_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS} ${GTKMM_INCLUDE_DIRS}) - link_directories(${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS} ${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${LENSFUN_LIBRARY_DIRS}) + include_directories("${EXTRA_INCDIR} ${GLIB2_INCLUDE_DIRS} ${GLIBMM_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS} ${GTKMM_INCLUDE_DIRS}") + link_directories("${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS} ${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${LENSFUN_LIBRARY_DIRS}") endif() include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}") if(BUILD_SHARED_LIBS) - install(TARGETS rtexif DESTINATION ${LIBDIR}) + install(TARGETS rtexif DESTINATION "${LIBDIR}") endif() diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index 4b21ce421..828151338 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -164,13 +164,13 @@ set(NONCLISOURCEFILES zoompanel.cc ) -include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}") +include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) if(APPLE) find_package(MacIntegration REQUIRED) # At the time of writing CMake has no module finder for gtkmacintegration so here we have it hard-coded, if installed via macports it should be in /opt/local/... - set(EXTRA_LIB_RTGUI ${MacIntegration_LIBRARIES}) - set(EXTRA_INCDIR ${EXTRA_INCDIR} ${MacIntegration_INCLUDE_DIRS}) + set(EXTRA_LIB_RTGUI "${MacIntegration_LIBRARIES}") + set(EXTRA_INCDIR "${EXTRA_INCDIR}" "${MacIntegration_INCLUDE_DIRS}") endif() if(WIN32) @@ -236,16 +236,16 @@ else() endif() # Excluding libatomic needed by Clang/FreeBSD, #3636 -if(OPENMP_FOUND AND NOT APPLE AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") - set(EXTRA_LIB_RTGUI ${EXTRA_LIB_RTGUI} "atomic") +if(OPENMP_FOUND AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + set(EXTRA_LIB_RTGUI "${EXTRA_LIB_RTGUI}" "atomic") endif() # Create config.h which defines where data are stored configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h") # Create new executables targets -add_executable(rth ${EXTRA_SRC_NONCLI} ${NONCLISOURCEFILES}) -add_executable(rth-cli ${EXTRA_SRC_CLI} ${CLISOURCEFILES}) +add_executable(rth "${EXTRA_SRC_NONCLI}" "${NONCLISOURCEFILES}") +add_executable(rth-cli "${EXTRA_SRC_CLI}" "${CLISOURCEFILES}") # Add dependencies to executables targets add_dependencies(rth UpdateInfo) @@ -311,5 +311,5 @@ target_link_libraries(rth-cli rtengine ) # Install executables -install(TARGETS rth DESTINATION ${BINDIR}) -install(TARGETS rth-cli DESTINATION ${BINDIR}) +install(TARGETS rth DESTINATION "${BINDIR}") +install(TARGETS rth-cli DESTINATION "${BINDIR}") diff --git a/rtgui/options.h b/rtgui/options.h index c0ed2138b..0bc421300 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -20,7 +20,12 @@ #include #include +#if __has_include() #include +#else +#include +#endif + #include "../rtengine/settings.h" #include diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index 2352133a9..9258810c0 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -404,6 +404,7 @@ function CreateDmg { # Zip disk image for redistribution msg "Zipping disk image for redistribution:" + zip "${dmg_name}.zip" "${dmg_name}.dmg" rm "${dmg_name}.dmg" msg "Removing disk image caches:" rm -rf "${srcDir}" From 28cff72eb0bd2f18db20c1935614c878034a966e Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 28 Feb 2020 20:18:45 +0100 Subject: [PATCH 164/264] rawimagesource.cc : cleanup, also speedup and bugfix for ItcWB, #5676, #5675 --- rtengine/LUT.h | 1 - rtengine/color.cc | 10 +- rtengine/color.h | 2 +- rtengine/rawimagesource.cc | 3322 +++++++++--------------------------- 4 files changed, 783 insertions(+), 2552 deletions(-) diff --git a/rtengine/LUT.h b/rtengine/LUT.h index a80e5996d..6ba7d570f 100644 --- a/rtengine/LUT.h +++ b/rtengine/LUT.h @@ -254,7 +254,6 @@ public: } // handy to sum up per thread histograms. #pragma omp simd speeds up the loop by about factor 3 for LUTu (uint32_t). - template::value>::type> LUT & operator+=(const LUT& rhs) { if (rhs.size == this->size) { diff --git a/rtengine/color.cc b/rtengine/color.cc index ed617057f..89be69e9d 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -941,12 +941,12 @@ void Color::rgbxyz (float r, float g, float b, float &x, float &y, float &z, con z = ((xyz_rgb[2][0] * r + xyz_rgb[2][1] * g + xyz_rgb[2][2] * b)) ; } -void Color::rgbxyY(float r, float g, float b, float &x, float &y, float &Y, float &xx, float &yy, float &zz, const double xyz_rgb[3][3]) +void Color::rgbxyY(float r, float g, float b, float &x, float &y, float &Y, const float xyz_rgb[3][3]) { - xx = ((xyz_rgb[0][0] * r + xyz_rgb[0][1] * g + xyz_rgb[0][2] * b)) ; - yy = ((xyz_rgb[1][0] * r + xyz_rgb[1][1] * g + xyz_rgb[1][2] * b)) ; - zz = ((xyz_rgb[2][0] * r + xyz_rgb[2][1] * g + xyz_rgb[2][2] * b)) ; - float som = xx + yy + zz; + const float xx = xyz_rgb[0][0] * r + xyz_rgb[0][1] * g + xyz_rgb[0][2] * b; + const float yy = xyz_rgb[1][0] * r + xyz_rgb[1][1] * g + xyz_rgb[1][2] * b; + const float zz = xyz_rgb[2][0] * r + xyz_rgb[2][1] * g + xyz_rgb[2][2] * b; + const float som = xx + yy + zz; x = xx / som; y = yy / som; Y = yy / 65535.f; diff --git a/rtengine/color.h b/rtengine/color.h index 3f63ad312..045e062ad 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -602,7 +602,7 @@ public: * @param xyz_rgb[3][3] transformation matrix to use for the conversion */ static void rgbxyz (float r, float g, float b, float &x, float &y, float &z, const double xyz_rgb[3][3]); - static void rgbxyY(float r, float g, float b, float &x, float &y, float &Y, float &xx, float &yy, float &zz, const double xyz_rgb[3][3]); + static void rgbxyY(float r, float g, float b, float &x, float &y, float &Y, const float xyz_rgb[3][3]); static void rgbxyz (float r, float g, float b, float &x, float &y, float &z, const float xyz_rgb[3][3]); #ifdef __SSE2__ static void rgbxyz (vfloat r, vfloat g, vfloat b, vfloat &x, vfloat &y, vfloat &z, const vfloat xyz_rgb[3][3]); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index b55ec4bf1..765d0c0ac 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -195,7 +195,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->b(row, col) = (blue[j] + image->b(row + 1, col)) / 2; } - if(i == 2 && oddHeight) { + if (i == 2 && oddHeight) { row = 2 * imheight; for (int j = 0; j < imwidth; j++) { @@ -232,7 +232,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(row, col) = MAX(0.f, -0.0625f * (green[j] + image->g(row + 3, col)) + 0.5625f * (image->g(row - 1, col) + image->g(row + 1, col))); image->b(row, col) = MAX(0.f, -0.0625f * (blue[j] + image->b(row + 3, col)) + 0.5625f * (image->b(row - 1, col) + image->b(row + 1, col))); - if(clip) { + if (clip) { image->r(row, col) = MIN(image->r(row, col), rtengine::MAXVALF); image->g(row, col) = MIN(image->g(row, col), rtengine::MAXVALF); image->b(row, col) = MIN(image->b(row, col), rtengine::MAXVALF); @@ -243,7 +243,7 @@ void transLineD1x (const float* const red, const float* const green, const float break; case TR_R90: // rotate right - if( i == 0) { + if (i == 0) { for (int j = 0; j < imwidth; j++) { image->r(j, 2 * imheight - 1) = red[j]; image->g(j, 2 * imheight - 1) = green[j]; @@ -265,7 +265,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(j, col) = (green[j] + image->g(j, col + 1)) / 2; image->b(j, col) = (blue[j] + image->b(j, col + 1)) / 2; - if(oddHeight && i == 2) { + if (oddHeight && i == 2) { image->r(j, 2 * imheight) = (red[j] + image->r(j, 2 * imheight - 2)) / 2; image->g(j, 2 * imheight) = (green[j] + image->g(j, 2 * imheight - 2)) / 2; image->b(j, 2 * imheight) = (blue[j] + image->b(j, 2 * imheight - 2)) / 2; @@ -295,7 +295,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(j, col) = MAX(0.f, -0.0625f * (green[j] + image->g(j, col + 3)) + 0.5625f * (image->g(j, col - 1) + image->g(j, col + 1))); image->b(j, col) = MAX(0.f, -0.0625f * (blue[j] + image->b(j, col + 3)) + 0.5625f * (image->b(j, col - 1) + image->b(j, col + 1))); - if(clip) { + if (clip) { image->r(j, col) = MIN(image->r(j, col), rtengine::MAXVALF); image->g(j, col) = MIN(image->g(j, col), rtengine::MAXVALF); image->b(j, col) = MIN(image->b(j, col), rtengine::MAXVALF); @@ -327,7 +327,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(row, 2 * i - 3) = MAX(0.f, -0.0625f * (green[j] + image->g(row, 2 * i - 6)) + 0.5625f * (image->g(row, 2 * i - 2) + image->g(row, 2 * i - 4))); image->b(row, 2 * i - 3) = MAX(0.f, -0.0625f * (blue[j] + image->b(row, 2 * i - 6)) + 0.5625f * (image->b(row, 2 * i - 2) + image->b(row, 2 * i - 4))); - if(clip) { + if (clip) { image->r(row, 2 * i - 3) = MIN(image->r(row, 2 * i - 3), rtengine::MAXVALF); image->g(row, 2 * i - 3) = MIN(image->g(row, 2 * i - 3), rtengine::MAXVALF); image->b(row, 2 * i - 3) = MIN(image->b(row, 2 * i - 3), rtengine::MAXVALF); @@ -345,7 +345,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(row, 2 * i - 1) = MAX(0.f, -0.0625f * (green[j] + image->g(row, 2 * i - 4)) + 0.5625f * (image->g(row, 2 * i) + image->g(row, 2 * i - 2))); image->b(row, 2 * i - 1) = MAX(0.f, -0.0625f * (blue[j] + image->b(row, 2 * i - 4)) + 0.5625f * (image->b(row, 2 * i) + image->b(row, 2 * i - 2))); - if(clip) { + if (clip) { image->r(j, 2 * i - 1) = MIN(image->r(j, 2 * i - 1), rtengine::MAXVALF); image->g(j, 2 * i - 1) = MIN(image->g(j, 2 * i - 1), rtengine::MAXVALF); image->b(j, 2 * i - 1) = MIN(image->b(j, 2 * i - 1), rtengine::MAXVALF); @@ -383,7 +383,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(2 * i - 3, j) = MAX(0.f, -0.0625f * (green[j] + image->g(2 * i - 6, j)) + 0.5625f * (image->g(2 * i - 2, j) + image->g(2 * i - 4, j))); image->b(2 * i - 3, j) = MAX(0.f, -0.0625f * (blue[j] + image->b(2 * i - 6, j)) + 0.5625f * (image->b(2 * i - 2, j) + image->b(2 * i - 4, j))); - if(clip) { + if (clip) { image->r(2 * i - 3, j) = MIN(image->r(2 * i - 3, j), rtengine::MAXVALF); image->g(2 * i - 3, j) = MIN(image->g(2 * i - 3, j), rtengine::MAXVALF); image->b(2 * i - 3, j) = MIN(image->b(2 * i - 3, j), rtengine::MAXVALF); @@ -397,7 +397,7 @@ void transLineD1x (const float* const red, const float* const green, const float image->g(2 * i - 1, j) = MAX(0.f, -0.0625f * (green[j] + image->g(2 * i - 4, j)) + 0.5625f * (image->g(2 * i, j) + image->g(2 * i - 2, j))); image->b(2 * i - 1, j) = MAX(0.f, -0.0625f * (blue[j] + image->b(2 * i - 4, j)) + 0.5625f * (image->b(2 * i, j) + image->b(2 * i - 2, j))); - if(clip) { + if (clip) { image->r(2 * i - 1, j) = MIN(image->r(2 * i - 1, j), rtengine::MAXVALF); image->g(2 * i - 1, j) = MIN(image->g(2 * i - 1, j), rtengine::MAXVALF); image->b(2 * i - 1, j) = MIN(image->b(2 * i - 1, j), rtengine::MAXVALF); @@ -465,7 +465,7 @@ RawImageSource::RawImageSource () { embProfile = nullptr; rgbSourceModified = false; - for(int i = 0; i < 4; ++i) { + for (int i = 0; i < 4; ++i) { psRedBrightness[i] = psGreenBrightness[i] = psBlueBrightness[i] = 1.f; } } @@ -480,11 +480,11 @@ RawImageSource::~RawImageSource () delete greenCache; delete blueCache; - for(size_t i = 0; i < numFrames; ++i) { + for (size_t i = 0; i < numFrames; ++i) { delete riFrames[i]; } - for(size_t i = 0; i + 1 < numFrames; ++i) { + for (size_t i = 0; i + 1 < numFrames; ++i) { delete rawDataBuffer[i]; } @@ -550,11 +550,11 @@ void RawImageSource::transformRect (const PreviewProps &pp, int tran, int &ssx1, sh = w; } - if( pp_width > sw - 2 * border) { + if (pp_width > sw - 2 * border) { pp_width = sw - 2 * border; } - if( pp_height > sh - 2 * border) { + if (pp_height > sh - 2 * border) { pp_height = sh - 2 * border; } @@ -594,16 +594,16 @@ void RawImageSource::transformRect (const PreviewProps &pp, int tran, int &ssx1, // atszamoljuk a koordinatakat fuji-ra: // recalculate the coordinates fuji-ra: ssx1 = (sx1 + sy1) / 2; - ssy1 = (sy1 - sx2 ) / 2 + ri->get_FujiWidth(); + ssy1 = (sy1 - sx2) / 2 + ri->get_FujiWidth(); int ssx2 = (sx2 + sy2) / 2 + 1; int ssy2 = (sy2 - sx1) / 2 + ri->get_FujiWidth(); - fw = (sx2 - sx1) / 2 / pp.getSkip(); - width = (ssx2 - ssx1) / pp.getSkip() + ((ssx2 - ssx1) % pp.getSkip() > 0); + fw = (sx2 - sx1) / 2 / pp.getSkip(); + width = (ssx2 - ssx1) / pp.getSkip() + ((ssx2 - ssx1) % pp.getSkip() > 0); height = (ssy2 - ssy1) / pp.getSkip() + ((ssy2 - ssy1) % pp.getSkip() > 0); } else { ssx1 = sx1; ssy1 = sy1; - width = (sx2 + 1 - sx1) / pp.getSkip() + ((sx2 + 1 - sx1) % pp.getSkip() > 0); + width = (sx2 + 1 - sx1) / pp.getSkip() + ((sx2 + 1 - sx1) % pp.getSkip() > 0); height = (sy2 + 1 - sy1) / pp.getSkip() + ((sy2 + 1 - sy1) % pp.getSkip() > 0); } } @@ -636,7 +636,7 @@ float calculate_scale_mul(float scale_mul[4], const float pre_mul_[4], const flo return gain; } -void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw ) +void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw) { MyMutex::MyLock lock(getImageMutex); @@ -841,9 +841,9 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima hlRecovery (hrp.method, line_red, line_grn, line_blue, imwidth, hlmax); } - if(d1x) { + if (d1x) { transLineD1x (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight, d1xHeightOdd, doClip); - } else if(fuji) { + } else if (fuji) { transLineFuji (line_red, line_grn, line_blue, ix, image, tran, imheight, fw); } else { transLineStandard (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight); @@ -913,7 +913,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima } // Colour correction (only when running on full resolution) - if(pp.getSkip() == 1) { + if (pp.getSkip() == 1) { switch(ri->getSensorType()) { case ST_BAYER: processFalseColorCorrection (image, raw.bayersensor.ccSteps); @@ -1029,7 +1029,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) errCode = 0; - if(numFrames >= 7) { + if (numFrames >= 7) { // special case to avoid crash when loading Hasselblad H6D-100cMS pixelshift files // limit to 6 frames and skip first frame, as first frame is not bayer if (firstFrameOnly) { @@ -1045,8 +1045,8 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) #ifdef _OPENMP #pragma omp for nowait #endif - for(unsigned int i = 0; i < numFrames; ++i) { - if(i == 0) { + for (unsigned int i = 0; i < numFrames; ++i) { + if (i == 0) { riFrames[i] = ri; errCodeThr = riFrames[i]->loadRaw (true, i + 1, true, plistener, 0.8); } else { @@ -1061,7 +1061,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) errCode = errCodeThr ? errCodeThr : errCode; } } - } else if(numFrames > 1) { + } else if (numFrames > 1) { #ifdef _OPENMP #pragma omp parallel #endif @@ -1070,8 +1070,8 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) #ifdef _OPENMP #pragma omp for nowait #endif - for(unsigned int i = 0; i < numFrames; ++i) { - if(i == 0) { + for (unsigned int i = 0; i < numFrames; ++i) { + if (i == 0) { riFrames[i] = ri; errCodeThr = riFrames[i]->loadRaw (true, i, true, plistener, 0.8); } else { @@ -1091,16 +1091,16 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) errCode = riFrames[0]->loadRaw (true, 0, true, plistener, 0.8); } - if(!errCode) { - for(unsigned int i = 0; i < numFrames; ++i) { + if (!errCode) { + for (unsigned int i = 0; i < numFrames; ++i) { riFrames[i]->compress_image(i); } } else { return errCode; } - if(numFrames > 1 ) { // this disables multi frame support for Fuji S5 until I found a solution to handle different dimensions - if(riFrames[0]->get_width() != riFrames[1]->get_width() || riFrames[0]->get_height() != riFrames[1]->get_height()) { + if (numFrames > 1) { // this disables multi frame support for Fuji S5 until I found a solution to handle different dimensions + if (riFrames[0]->get_width() != riFrames[1]->get_width() || riFrames[0]->get_height() != riFrames[1]->get_height()) { numFrames = 1; } } @@ -1123,15 +1123,15 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) // first arg is matrix, second arg is inverse inverse33 (imatrices.rgb_cam, imatrices.cam_rgb); - d1x = ! ri->get_model().compare("D1X"); + d1x = ! ri->get_model().compare("D1X"); - if(ri->getSensorType() == ST_FUJI_XTRANS) { + if (ri->getSensorType() == ST_FUJI_XTRANS) { border = 7; - } else if(ri->getSensorType() == ST_FOVEON) { + } else if (ri->getSensorType() == ST_FOVEON) { border = 0; } - if ( ri->get_profile() ) { + if (ri->get_profile()) { embProfile = cmsOpenProfileFromMem (ri->get_profile(), ri->get_profileLen()); } @@ -1150,7 +1150,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) // First we get the "as shot" ("Camera") white balance and store it float pre_mul[4]; // FIXME: get_colorsCoeff not so much used nowadays, when we have calculate_scale_mul() function here - ri->get_colorsCoeff( pre_mul, scale_mul, c_black, false);//modify for black level + ri->get_colorsCoeff(pre_mul, scale_mul, c_black, false);//modify for black level camInitialGain = max(scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]) / min(scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]); double camwb_red = ri->get_pre_mul(0) / pre_mul[0]; @@ -1166,7 +1166,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) { // ...then we re-get the constants but now with auto which gives us better demosaicing and CA auto-correct // performance for strange white balance settings (such as UniWB) - ri->get_colorsCoeff( ref_pre_mul, scale_mul, c_black, true); + ri->get_colorsCoeff(ref_pre_mul, scale_mul, c_black, true); refwb_red = ri->get_pre_mul(0) / ref_pre_mul[0]; refwb_green = ri->get_pre_mul(1) / ref_pre_mul[1]; refwb_blue = ri->get_pre_mul(2) / ref_pre_mul[2]; @@ -1187,9 +1187,9 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) ColorTemp d50wb = ColorTemp(5000.0, 1.0, 1.0, "Custom"); double rm,gm,bm,r,g,b; d50wb.getMultipliers(r, g, b); - camwb_red = imatrices.cam_rgb[0][0]*r + imatrices.cam_rgb[0][1]*g + imatrices.cam_rgb[0][2]*b; + camwb_red = imatrices.cam_rgb[0][0]*r + imatrices.cam_rgb[0][1]*g + imatrices.cam_rgb[0][2]*b; camwb_green = imatrices.cam_rgb[1][0]*r + imatrices.cam_rgb[1][1]*g + imatrices.cam_rgb[1][2]*b; - camwb_blue = imatrices.cam_rgb[2][0]*r + imatrices.cam_rgb[2][1]*g + imatrices.cam_rgb[2][2]*b; + camwb_blue = imatrices.cam_rgb[2][0]*r + imatrices.cam_rgb[2][1]*g + imatrices.cam_rgb[2][2]*b; double pre_mul[3], dmax = 0; pre_mul[0] = ri->get_pre_mul(0) / camwb_red; pre_mul[1] = ri->get_pre_mul(1) / camwb_green; @@ -1212,7 +1212,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) initialGain = 1.0 / min(pre_mul[0], pre_mul[1], pre_mul[2]); }*/ - for(unsigned int i = 0;i < numFrames; ++i) { + for (unsigned int i = 0;i < numFrames; ++i) { riFrames[i]->set_prefilters(); } @@ -1234,7 +1234,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) plistener = nullptr; // This must be reset, because only load() is called through progressConnector t2.set(); - if( settings->verbose ) { + if (settings->verbose) { printf("Load %s: %d usec\n", fname.c_str(), t2.etime(t1)); } @@ -1253,27 +1253,27 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le RawImage *rid = nullptr; if (!raw.df_autoselect) { - if( !raw.dark_frame.empty()) { - rid = dfm.searchDarkFrame( raw.dark_frame ); + if (!raw.dark_frame.empty()) { + rid = dfm.searchDarkFrame(raw.dark_frame); } } else { rid = dfm.searchDarkFrame(idata->getMake(), idata->getModel(), idata->getISOSpeed(), idata->getShutterSpeed(), idata->getDateTimeAsTS()); } - if( rid && settings->verbose) { - printf( "Subtracting Darkframe:%s\n", rid->get_filename().c_str()); + if (rid && settings->verbose) { + printf("Subtracting Darkframe:%s\n", rid->get_filename().c_str()); } std::unique_ptr bitmapBads; int totBP = 0; // Hold count of bad pixels to correct - if(ri->zeroIsBad()) { // mark all pixels with value zero as bad, has to be called before FF and DF. dcraw sets this flag only for some cameras (mainly Panasonic and Leica) + if (ri->zeroIsBad()) { // mark all pixels with value zero as bad, has to be called before FF and DF. dcraw sets this flag only for some cameras (mainly Panasonic and Leica) bitmapBads.reset(new PixelsMap(W, H)); totBP = findZeroPixels(*(bitmapBads.get())); - if( settings->verbose) { - printf( "%d pixels with value zero marked as bad pixels\n", totBP); + if (settings->verbose) { + printf("%d pixels with value zero marked as bad pixels\n", totBP); } } @@ -1281,28 +1281,28 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le RawImage *rif = nullptr; if (!raw.ff_AutoSelect) { - if( !raw.ff_file.empty()) { - rif = ffm.searchFlatField( raw.ff_file ); + if (!raw.ff_file.empty()) { + rif = ffm.searchFlatField(raw.ff_file); } } else { - rif = ffm.searchFlatField( idata->getMake(), idata->getModel(), idata->getLens(), idata->getFocalLen(), idata->getFNumber(), idata->getDateTimeAsTS()); + rif = ffm.searchFlatField(idata->getMake(), idata->getModel(), idata->getLens(), idata->getFocalLen(), idata->getFNumber(), idata->getDateTimeAsTS()); } bool hasFlatField = (rif != nullptr); - if( hasFlatField && settings->verbose) { - printf( "Flat Field Correction:%s\n", rif->get_filename().c_str()); + if (hasFlatField && settings->verbose) { + printf("Flat Field Correction:%s\n", rif->get_filename().c_str()); } - if(numFrames == 4) { + if (numFrames == 4) { int bufferNumber = 0; - for(unsigned int i=0; i<4; ++i) { - if(i==currFrame) { + for (unsigned int i=0; i<4; ++i) { + if (i==currFrame) { copyOriginalPixels(raw, ri, rid, rif, rawData); rawDataFrames[i] = &rawData; } else { - if(!rawDataBuffer[bufferNumber]) { + if (!rawDataBuffer[bufferNumber]) { rawDataBuffer[bufferNumber] = new array2D; } rawDataFrames[i] = rawDataBuffer[bufferNumber]; @@ -1311,7 +1311,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } } } else if (numFrames == 2 && currFrame == 2) { // average the frames - if(!rawDataBuffer[0]) { + if (!rawDataBuffer[0]) { rawDataBuffer[0] = new array2D; } rawDataFrames[1] = rawDataBuffer[0]; @@ -1330,16 +1330,16 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le // Always correct camera badpixels from .badpixels file - std::vector *bp = dfm.getBadPixels( ri->get_maker(), ri->get_model(), idata->getSerialNumber() ); + std::vector *bp = dfm.getBadPixels(ri->get_maker(), ri->get_model(), idata->getSerialNumber()); - if( bp ) { - if(!bitmapBads) { + if (bp) { + if (!bitmapBads) { bitmapBads.reset(new PixelsMap(W, H)); } totBP += bitmapBads->set(*bp); - if( settings->verbose ) { + if (settings->verbose) { std::cout << "Correcting " << bp->size() << " pixels from .badpixels" << std::endl; } } @@ -1347,30 +1347,30 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le // If darkframe selected, correct hotpixels found on darkframe bp = nullptr; - if( raw.df_autoselect ) { + if (raw.df_autoselect) { bp = dfm.getHotPixels(idata->getMake(), idata->getModel(), idata->getISOSpeed(), idata->getShutterSpeed(), idata->getDateTimeAsTS()); - } else if( !raw.dark_frame.empty() ) { - bp = dfm.getHotPixels( raw.dark_frame ); + } else if (!raw.dark_frame.empty()) { + bp = dfm.getHotPixels(raw.dark_frame); } - if(bp) { - if(!bitmapBads) { + if (bp) { + if (!bitmapBads) { bitmapBads.reset(new PixelsMap(W, H)); } totBP += bitmapBads->set(*bp); - if( settings->verbose && !bp->empty()) { + if (settings->verbose && !bp->empty()) { std::cout << "Correcting " << bp->size() << " hotpixels from darkframe" << std::endl; } } - if(numFrames == 4) { - for(int i=0; i<4; ++i) { - scaleColors( 0, 0, W, H, raw, *rawDataFrames[i]); + if (numFrames == 4) { + for (int i=0; i<4; ++i) { + scaleColors(0, 0, W, H, raw, *rawDataFrames[i]); } } else { - scaleColors( 0, 0, W, H, raw, rawData); //+ + raw parameters for black level(raw.blackxx) + scaleColors(0, 0, W, H, raw, rawData); //+ + raw parameters for black level(raw.blackxx) } // Correct vignetting of lens profile @@ -1389,14 +1389,14 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (pmap) { LensCorrection &map = *pmap; if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS || ri->get_colors() == 1) { - if(numFrames == 4) { - for(int i = 0; i < 4; ++i) { + if (numFrames == 4) { + for (int i = 0; i < 4; ++i) { map.processVignette(W, H, *rawDataFrames[i]); } } else { map.processVignette(W, H, rawData); } - } else if(ri->get_colors() == 3) { + } else if (ri->get_colors() == 3) { map.processVignette3Channels(W, H, rawData); } } @@ -1404,21 +1404,21 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le defGain = 0.0;//log(initialGain) / log(2.0); - if ( ri->getSensorType() == ST_BAYER && (raw.hotPixelFilter > 0 || raw.deadPixelFilter > 0)) { + if (ri->getSensorType() == ST_BAYER && (raw.hotPixelFilter > 0 || raw.deadPixelFilter > 0)) { if (plistener) { plistener->setProgressStr ("PROGRESSBAR_HOTDEADPIXELFILTER"); plistener->setProgress (0.0); } - if(!bitmapBads) { + if (!bitmapBads) { bitmapBads.reset(new PixelsMap(W, H)); } - int nFound = findHotDeadPixels(*(bitmapBads.get()), raw.hotdeadpix_thresh, raw.hotPixelFilter, raw.deadPixelFilter ); + int nFound = findHotDeadPixels(*(bitmapBads.get()), raw.hotdeadpix_thresh, raw.hotPixelFilter, raw.deadPixelFilter); totBP += nFound; - if( settings->verbose && nFound > 0) { - printf( "Correcting %d hot/dead pixels found inside image\n", nFound ); + if (settings->verbose && nFound > 0) { + printf("Correcting %d hot/dead pixels found inside image\n", nFound); } } @@ -1457,13 +1457,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le return cc && cc->get_globalGreenEquilibration(); }; - if ( ri->getSensorType() == ST_BAYER && (raw.bayersensor.greenthresh || (globalGreenEq() && raw.bayersensor.method != RAWParams::BayerSensor::getMethodString( RAWParams::BayerSensor::Method::VNG4))) ) { + if (ri->getSensorType() == ST_BAYER && (raw.bayersensor.greenthresh || (globalGreenEq() && raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4)))) { if (settings->verbose) { printf("Performing global green equilibration...\n"); } // global correction - if(numFrames == 4) { - for(int i = 0; i < 4; ++i) { + if (numFrames == 4) { + for (int i = 0; i < 4; ++i) { green_equilibrate_global(*rawDataFrames[i]); } } else { @@ -1471,7 +1471,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } } - if ( ri->getSensorType() == ST_BAYER && raw.bayersensor.greenthresh > 0) { + if (ri->getSensorType() == ST_BAYER && raw.bayersensor.greenthresh > 0) { if (plistener) { plistener->setProgressStr ("PROGRESSBAR_GREENEQUIL"); plistener->setProgress (0.0); @@ -1479,8 +1479,8 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le GreenEqulibrateThreshold thresh(0.01 * raw.bayersensor.greenthresh); - if(numFrames == 4) { - for(int i = 0; i < 4; ++i) { + if (numFrames == 4) { + for (int i = 0; i < 4; ++i) { green_equilibrate(thresh, *rawDataFrames[i]); } } else { @@ -1489,23 +1489,23 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } - if( totBP ) { - if ( ri->getSensorType() == ST_BAYER ) { - if(numFrames == 4) { - for(int i = 0; i < 4; ++i) { + if (totBP) { + if (ri->getSensorType() == ST_BAYER) { + if (numFrames == 4) { + for (int i = 0; i < 4; ++i) { interpolateBadPixelsBayer(*(bitmapBads.get()), *rawDataFrames[i]); } } else { interpolateBadPixelsBayer(*(bitmapBads.get()), rawData); } - } else if ( ri->getSensorType() == ST_FUJI_XTRANS ) { + } else if (ri->getSensorType() == ST_FUJI_XTRANS) { interpolateBadPixelsXtrans(*(bitmapBads.get())); } else { interpolateBadPixelsNColours(*(bitmapBads.get()), ri->get_colors()); } } - if ( ri->getSensorType() == ST_BAYER && raw.bayersensor.linenoise > 0 ) { + if (ri->getSensorType() == ST_BAYER && raw.bayersensor.linenoise > 0) { if (plistener) { plistener->setProgressStr ("PROGRESSBAR_LINEDENOISE"); plistener->setProgress (0.0); @@ -1522,15 +1522,15 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le cfa_linedn(0.00002 * (raw.bayersensor.linenoise), int(raw.bayersensor.linenoiseDirection) & int(RAWParams::BayerSensor::LineNoiseDirection::VERTICAL), int(raw.bayersensor.linenoiseDirection) & int(RAWParams::BayerSensor::LineNoiseDirection::HORIZONTAL), *line_denoise_rowblender); } - if ( (raw.ca_autocorrect || fabs(raw.cared) > 0.001 || fabs(raw.cablue) > 0.001) && ri->getSensorType() == ST_BAYER ) { // Auto CA correction disabled for X-Trans, for now... + if ((raw.ca_autocorrect || std::fabs(raw.cared) > 0.001 || std::fabs(raw.cablue) > 0.001) && ri->getSensorType() == ST_BAYER) { // Auto CA correction disabled for X-Trans, for now... if (plistener) { plistener->setProgressStr ("PROGRESSBAR_RAWCACORR"); plistener->setProgress (0.0); } - if(numFrames == 4) { + if (numFrames == 4) { double fitParams[64]; float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false, options.chunkSizeCA, options.measure); - for(int i = 1; i < 3; ++i) { + for (int i = 1; i < 3; ++i) { CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false, options.chunkSizeCA, options.measure); } CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true, options.chunkSizeCA, options.measure); @@ -1539,7 +1539,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } } - if(prepareDenoise && dirpyrdenoiseExpComp == RT_INFINITY) { + if (prepareDenoise && dirpyrdenoiseExpComp == RT_INFINITY) { LUTu aehist; int aehistcompr; double clip = 0; @@ -1550,7 +1550,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le t2.set(); - if( settings->verbose ) { + if (settings->verbose) { printf("Preprocessing: %d usec\n", t2.etime(t1)); } @@ -1565,13 +1565,13 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c t1.set(); if (ri->getSensorType() == ST_BAYER) { - if ( raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD) ) { + if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD)) { hphd_demosaic (); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4)) { vng4_demosaic (rawData, red, green, blue); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD)) { ahd_demosaic (); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE)) { amaze_demosaic_RT (0, 0, W, H, rawData, red, green, blue, options.chunkSizeAMAZE, options.measure); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) || raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCBVNG4) @@ -1582,9 +1582,9 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c } else { dual_demosaic_RT (true, raw, W, H, rawData, red, green, blue, contrastThreshold, true); } - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) { pixelshift(0, 0, W, H, raw, currFrame, ri->get_maker(), ri->get_model(), raw.expos); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB)) { dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD)) { eahd_demosaic (); @@ -1592,21 +1592,21 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c igv_interpolate(W, H); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE)) { lmmse_interpolate_omp(W, H, rawData, red, green, blue, raw.bayersensor.lmmse_iterations); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST)) { fast_demosaic(); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)) { nodemosaic(true); - } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::RCD) ) { + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::RCD)) { rcd_demosaic(options.chunkSizeRCD, options.measure); } else { nodemosaic(false); } } else if (ri->getSensorType() == ST_FUJI_XTRANS) { - if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST) ) { + if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST)) { fast_xtrans_interpolate(rawData, red, green, blue); } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::ONE_PASS)) { xtrans_interpolate(1, false, options.chunkSizeXT, options.measure); - } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::THREE_PASS) ) { + } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::THREE_PASS)) { xtrans_interpolate(3, true, options.chunkSizeXT, options.measure); } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) || raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::TWO_PASS)) { if (!autoContrast) { @@ -1615,7 +1615,7 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c } else { dual_demosaic_RT (false, raw, W, H, rawData, red, green, blue, contrastThreshold, true); } - } else if(raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO) ) { + } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) { nodemosaic(true); } else { nodemosaic(false); @@ -1673,7 +1673,7 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c delete blueCache; blueCache = nullptr; } - if( settings->verbose ) { + if (settings->verbose) { if (getSensorType() == ST_BAYER) { printf("Demosaicing Bayer data: %s - %d usec\n", raw.bayersensor.method.c_str(), t2.etime(t1)); } else if (getSensorType() == ST_FUJI_XTRANS) { @@ -1695,20 +1695,20 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con LUTf *retinexgamtab = nullptr;//gamma before and after Retinex to restore tones LUTf lutTonereti; - if(retinexParams.gammaretinex == "low") { + if (retinexParams.gammaretinex == "low") { retinexgamtab = &(Color::gammatab_115_2); - } else if(retinexParams.gammaretinex == "mid") { + } else if (retinexParams.gammaretinex == "mid") { retinexgamtab = &(Color::gammatab_13_2); - } else if(retinexParams.gammaretinex == "hig") { + } else if (retinexParams.gammaretinex == "hig") { retinexgamtab = &(Color::gammatab_145_3); - } else if(retinexParams.gammaretinex == "fre") { + } else if (retinexParams.gammaretinex == "fre") { GammaValues g_a; double pwr = 1.0 / retinexParams.gam; double gamm = retinexParams.gam; double ts = retinexParams.slope; double gamm2 = retinexParams.gam; - if(gamm2 < 1.) { + if (gamm2 < 1.) { std::swap(pwr, gamm); } @@ -1719,7 +1719,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con double start; double add; - if(gamm2 < 1.) { + if (gamm2 < 1.) { start = g_a[2]; add = g_a[4]; } else { @@ -1735,7 +1735,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con double val = (i) / 65535.; double x; - if(gamm2 < 1.) { + if (gamm2 < 1.) { x = Color::igammareti (val, gamm, start, ts, mul , add); } else { x = Color::gammareti (val, gamm, start, ts, mul , add); @@ -1764,15 +1764,15 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con printf("rr2=%f gg2=%f bb2=%f \n",rr,gg,bb); */ /* - if(retinexParams.highlig < 100 && retinexParams.retinexMethod == "highliplus") {//try to recover magenta...very difficult ! + if (retinexParams.highlig < 100 && retinexParams.retinexMethod == "highliplus") {//try to recover magenta...very difficult ! float hig = ((float)retinexParams.highlig)/100.f; float higgb = ((float)retinexParams.grbl)/100.f; #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = border; i < H - border; i++ ) { - for (int j = border; j < W - border; j++ ) { + for (int i = border; i < H - border; i++) { + for (int j = border; j < W - border; j++) { float R_,G_,B_; R_=red[i][j]; G_=green[i][j]; @@ -1780,20 +1780,20 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con //empirical method to find highlight magenta with no conversion RGB and no white balance //red = master Gr and Bl default higgb=0.5 - // if(R_>65535.f*hig && G_ > 65535.f*higgb && B_ > 65535.f*higgb) conversionBuffer[3][i - border][j - border] = R_; + // if (R_>65535.f*hig && G_ > 65535.f*higgb && B_ > 65535.f*higgb) conversionBuffer[3][i - border][j - border] = R_; // else conversionBuffer[3][i - border][j - border] = 0.f; } } } */ - if(retinexParams.gammaretinex != "none" && retinexParams.str != 0 && retinexgamtab) {//gamma + if (retinexParams.gammaretinex != "none" && retinexParams.str != 0 && retinexgamtab) {//gamma #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = border; i < H - border; i++ ) { - for (int j = border; j < W - border; j++ ) { + for (int i = border; i < H - border; i++) { + for (int j = border; j < W - border; j++) { float R_, G_, B_; R_ = red[i][j]; G_ = green[i][j]; @@ -1806,7 +1806,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con } } - if(useHsl) { + if (useHsl) { #ifdef _OPENMP #pragma omp parallel #endif @@ -1814,7 +1814,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con // one LUT per thread LUTu lhist16RETIThr; - if(lhist16RETI) + if (lhist16RETI) { lhist16RETIThr(lhist16RETI.getSize()); lhist16RETIThr.clear(); @@ -1827,7 +1827,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con #pragma omp for #endif - for (int i = border; i < H - border; i++ ) + for (int i = border; i < H - border; i++) { int j = border; #ifdef __SSE2__ @@ -1841,9 +1841,9 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con STVFU(conversionBuffer[2][i - border][j - border], L); STVFU(conversionBuffer[3][i - border][j - border], H); - if(lhist16RETI) { - for(int p = 0; p < 4; p++) { - int pos = ( conversionBuffer[2][i - border][j - border + p]);//histogram in curve HSL + if (lhist16RETI) { + for (int p = 0; p < 4; p++) { + int pos = (conversionBuffer[2][i - border][j - border + p]);//histogram in curve HSL lhist16RETIThr[pos]++; } } @@ -1858,7 +1858,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con L *= 32768.f; conversionBuffer[2][i - border][j - border] = L; - if(lhist16RETI) { + if (lhist16RETI) { int pos = L; lhist16RETIThr[pos]++; } @@ -1868,7 +1868,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con #ifdef _OPENMP #pragma omp critical { - if(lhist16RETI) + if (lhist16RETI) { lhist16RETI += lhist16RETIThr; // Add per Thread LUT to global LUT } @@ -1893,7 +1893,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con // one LUT per thread LUTu lhist16RETIThr; - if(lhist16RETI) { + if (lhist16RETI) { lhist16RETIThr(lhist16RETI.getSize()); lhist16RETIThr.clear(); } @@ -1902,7 +1902,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con #pragma omp for schedule(dynamic,16) #endif - for (int i = border; i < H - border; i++ ) + for (int i = border; i < H - border; i++) for (int j = border; j < W - border; j++) { float X, Y, Z, L, aa, bb; //rgb=>lab @@ -1914,9 +1914,9 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con conversionBuffer[2][i - border][j - border] = L; conversionBuffer[3][i - border][j - border] = xatan2f(bb, aa); -// if(R_>40000.f && G_ > 30000.f && B_ > 30000.f) conversionBuffer[3][i - border][j - border] = R_; +// if (R_>40000.f && G_ > 30000.f && B_ > 30000.f) conversionBuffer[3][i - border][j - border] = R_; // else conversionBuffer[3][i - border][j - border] = 0.f; - if(lhist16RETI) { + if (lhist16RETI) { int pos = L; lhist16RETIThr[pos]++;//histogram in Curve Lab } @@ -1925,7 +1925,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con #ifdef _OPENMP #pragma omp critical { - if(lhist16RETI) { + if (lhist16RETI) { lhist16RETI += lhist16RETIThr; // Add per Thread LUT to global LUT } } @@ -1942,7 +1942,7 @@ void RawImageSource::retinexPrepareCurves(const RetinexParams &retinexParams, LU { useHsl = (retinexParams.retinexcolorspace == "HSLLOG" || retinexParams.retinexcolorspace == "HSLLIN"); - if(useHsl) { + if (useHsl) { CurveFactory::curveDehaContL (retinexcontlutili, retinexParams.cdHcurve, cdcurve, 1, lhist16RETI, histLRETI); } else { CurveFactory::curveDehaContL (retinexcontlutili, retinexParams.cdcurve, cdcurve, 1, lhist16RETI, histLRETI); @@ -1967,13 +1967,13 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara LUTf *retinexigamtab = nullptr;//gamma before and after Retinex to restore tones - if(deh.gammaretinex == "low") { + if (deh.gammaretinex == "low") { retinexigamtab = &(Color::igammatab_115_2); - } else if(deh.gammaretinex == "mid") { + } else if (deh.gammaretinex == "mid") { retinexigamtab = &(Color::igammatab_13_2); - } else if(deh.gammaretinex == "hig") { + } else if (deh.gammaretinex == "hig") { retinexigamtab = &(Color::igammatab_145_3); - } else if(deh.gammaretinex == "fre") { + } else if (deh.gammaretinex == "fre") { GammaValues g_a; double pwr = 1.0 / deh.gam; double gamm = deh.gam; @@ -1981,7 +1981,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara double ts = deh.slope; int mode = 0; - if(gamm2 < 1.) { + if (gamm2 < 1.) { std::swap(pwr, gamm); } @@ -1991,7 +1991,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara double add; double start; - if(gamm2 < 1.) { + if (gamm2 < 1.) { start = g_a[3]; add = g_a[3]; } else { @@ -2004,7 +2004,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara double val = (i) / 65535.; double x; - if(gamm2 < 1.) { + if (gamm2 < 1.) { x = Color::gammareti (val, gamm, start, ts, mul , add); } else { x = Color::igammareti (val, gamm, start, ts, mul , add); @@ -2026,7 +2026,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara LUTf dLcurve; LUTu hist16RET; - if(dehacontlutili && histLRETI) { + if (dehacontlutili && histLRETI) { hist16RET(32768); hist16RET.clear(); histLRETI.clear(); @@ -2058,7 +2058,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara // one LUT per thread LUTu hist16RETThr; - if(hist16RET) { + if (hist16RET) { hist16RETThr(hist16RET.getSize()); hist16RETThr.clear(); } @@ -2067,12 +2067,12 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #pragma omp for #endif - for (int i = 0; i < H - 2 * border; i++ ) - if(dehacontlutili) + for (int i = 0; i < H - 2 * border; i++) + if (dehacontlutili) for (int j = 0; j < W - 2 * border; j++) { LBuffer[i][j] = cdcurve[2.f * temp[i][j]] / 2.f; - if(histLRETI) { + if (histLRETI) { int pos = LBuffer[i][j]; hist16RETThr[pos]++; //histogram in Curve } @@ -2086,13 +2086,13 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #pragma omp critical #endif { - if(hist16RET) { + if (hist16RET) { hist16RET += hist16RETThr; // Add per Thread LUT to global LUT } } } - if(hist16RET) {//update histogram + if (hist16RET) {//update histogram // TODO : When rgbcurvesspeedup branch is merged into master, replace this by the following 1-liner // hist16RET.compressTo(histLRETI); // also remove declaration and init of dLcurve some lines above then and finally remove this comment :) @@ -2110,13 +2110,13 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara MSR(LBuffer, conversionBuffer[2], conversionBuffer[3], mapcurve, mapcontlutili, WNew, HNew, deh, dehatransmissionCurve, dehagaintransmissionCurve, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); - if(useHsl) { - if(chutili) { + if (useHsl) { + if (chutili) { #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = border; i < H - border; i++ ) { + for (int i = border; i < H - border; i++) { int j = border; for (; j < W - border; j++) { @@ -2132,7 +2132,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #pragma omp parallel for #endif - for (int i = border; i < H - border; i++ ) { + for (int i = border; i < H - border; i++) { int j = border; #ifdef __SSE2__ vfloat c32768 = F2V(32768.f); @@ -2180,7 +2180,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #pragma omp for #endif - for (int i = border; i < H - border; i++ ) { + for (int i = border; i < H - border; i++) { #ifdef __SSE2__ // vectorized precalculation { @@ -2210,7 +2210,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara float HH = xatan2f(bb, aa); atan2Buffer[j - border] = HH; - if(Chprov1 == 0.0f) { + if (Chprov1 == 0.0f) { sincosyBuffer[j - border] = 1.f; sincosxBuffer[j - border] = 0.0f; } else { @@ -2237,7 +2237,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara float HH = xatan2f(bb, aa); float2 sincosval;// = xsincosf(HH); - if(Chprov1 == 0.0f) { + if (Chprov1 == 0.0f) { sincosval.y = 1.f; sincosval.x = 0.0f; } else { @@ -2247,7 +2247,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #endif - if(chutili) { // c=f(H) + if (chutili) { // c=f(H) float valp = float((chcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f)); Chprov1 *= (1.f + 2.f * valp); } @@ -2275,8 +2275,8 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #ifdef __SSE2__ vfloat wipv[3][3]; - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) { wipv[i][j] = F2V(wiprof[i][j]); } @@ -2285,7 +2285,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara #pragma omp parallel for #endif - for (int i = border; i < H - border; i++ ) { + for (int i = border; i < H - border; i++) { int j = border; #ifdef __SSE2__ @@ -2319,13 +2319,13 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara delete chcurve; } - if(deh.gammaretinex != "none" && deh.str != 0) { //inverse gamma + if (deh.gammaretinex != "none" && deh.str != 0) { //inverse gamma #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = border; i < H - border; i++ ) { - for (int j = border; j < W - border; j++ ) { + for (int i = border; i < H - border; i++) { + for (int j = border; j < W - border; j++) { float R_, G_, B_; R_ = red[i][j]; G_ = green[i][j]; @@ -2341,7 +2341,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara t5.set(); - if( settings->verbose ) { + if (settings->verbose) { printf("Retinex=%d usec\n", t5.etime(t4)); } @@ -2349,7 +2349,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara void RawImageSource::flush() { - for(size_t i = 0; i + 1 < numFrames; ++i) { + for (size_t i = 0; i + 1 < numFrames; ++i) { delete rawDataBuffer[i]; rawDataBuffer[i] = nullptr; } @@ -2385,7 +2385,7 @@ void RawImageSource::flush() void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp) { if (hrp.hrenabled && hrp.method == "Color") { - if(!rgbSourceModified) { + if (!rgbSourceModified) { if (settings->verbose) { printf ("Applying Highlight Recovery: Color propagation...\n"); } @@ -2400,7 +2400,7 @@ void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp) /* Copy original pixel data and * subtract dark frame (if present) from current image and apply flat field correction (if present) */ -void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, RawImage *riDark, RawImage *riFlatFile, array2D &rawData ) +void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, RawImage *riDark, RawImage *riFlatFile, array2D &rawData) { const float black[4] = { static_cast(ri->get_cblack(0)), static_cast(ri->get_cblack(1)), @@ -2419,9 +2419,9 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw #endif for (int row = 0; row < H; row++) { const int c0 = FC(row, 0); - const float black0 = black[(c0 == 1 && !(row & 1) ) ? 3 : c0]; + const float black0 = black[(c0 == 1 && !(row & 1)) ? 3 : c0]; const int c1 = FC(row, 1); - const float black1 = black[(c1 == 1 && !(row & 1) ) ? 3 : c1]; + const float black1 = black[(c1 == 1 && !(row & 1)) ? 3 : c1]; int col; for (col = 0; col < W - 1; col += 2) { rawData[row][col] = max(src->data[row][col] + black0 - riDark->data[row][col], 0.0f); @@ -2480,8 +2480,8 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw if (riDark && W == riDark->get_width() && H == riDark->get_height()) { for (int row = 0; row < H; row++) { for (int col = 0; col < W; col++) { - int c = FC(row, col); - int c4 = ( c == 1 && !(row & 1) ) ? 3 : c; + int c = FC(row, col); + int c4 = (c == 1 && !(row & 1)) ? 3 : c; rawData[row][3 * col + 0] = max(src->data[row][3 * col + 0] + black[c4] - riDark->data[row][3 * col + 0], 0.0f); rawData[row][3 * col + 1] = max(src->data[row][3 * col + 1] + black[c4] - riDark->data[row][3 * col + 1], 0.0f); rawData[row][3 * col + 2] = max(src->data[row][3 * col + 2] + black[c4] - riDark->data[row][3 * col + 2], 0.0f); @@ -2508,7 +2508,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R //adjust black level (eg Canon) bool isMono = false; - if (getSensorType() == ST_BAYER || getSensorType() == ST_FOVEON ) { + if (getSensorType() == ST_BAYER || getSensorType() == ST_FOVEON) { black_lev[0] = raw.bayersensor.black1; //R black_lev[1] = raw.bayersensor.black0; //G1 @@ -2526,8 +2526,8 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R isMono = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO) == raw.xtranssensor.method; } - for(int i = 0; i < 4 ; i++) { - cblacksom[i] = max( c_black[i] + black_lev[i], 0.0f ); // adjust black level + for (int i = 0; i < 4 ; i++) { + cblacksom[i] = max(c_black[i] + black_lev[i], 0.0f); // adjust black level } for (int i = 0; i < 4; ++i) { @@ -2537,7 +2537,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R initialGain = calculate_scale_mul(scale_mul, ref_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); // recalculate scale colors with adjusted levels //fprintf(stderr, "recalc: %f [%f %f %f %f]\n", initialGain, scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]); - for(int i = 0; i < 4 ; i++) { + for (int i = 0; i < 4 ; i++) { clmax[i] = (c_white[i] - cblacksom[i]) * scale_mul[i]; // raw clip level } @@ -2545,7 +2545,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R // scale image colors - if( ri->getSensorType() == ST_BAYER) { + if (ri->getSensorType() == ST_BAYER) { #ifdef _OPENMP #pragma omp parallel #endif @@ -2559,8 +2559,8 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R for (int row = winy; row < winy + winh; row ++) { for (int col = winx; col < winx + winw; col++) { - const int c = FC(row, col); // three colors, 0=R, 1=G, 2=B - const int c4 = ( c == 1 && !(row & 1) ) ? 3 : c; // four colors, 0=R, 1=G1, 2=B, 3=G2 + const int c = FC(row, col); // three colors, 0=R, 1=G, 2=B + const int c4 = (c == 1 && !(row & 1)) ? 3 : c; // four colors, 0=R, 1=G1, 2=B, 3=G2 const float val = max(0.f, rawData[row][col] - cblacksom[c4]) * scale_mul[c4]; rawData[row][col] = val; tmpchmax[c] = max(tmpchmax[c], val); @@ -2576,7 +2576,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R chmax[2] = max(tmpchmax[2], chmax[2]); } } - } else if ( ri->get_colors() == 1 ) { + } else if (ri->get_colors() == 1) { #ifdef _OPENMP #pragma omp parallel #endif @@ -2602,7 +2602,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R chmax[0] = chmax[1] = chmax[2] = chmax[3] = max(tmpchmax, chmax[0]); } } - } else if(ri->getSensorType() == ST_FUJI_XTRANS) { + } else if (ri->getSensorType() == ST_FUJI_XTRANS) { #ifdef _OPENMP #pragma omp parallel #endif @@ -3125,7 +3125,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen transform_via_pcs_lab = true; separate_pcs_lab_highlights = true; // We transform to Lab because we can and that we avoid getting an unnecessary unmatched gamma conversion which we would need to revert. - hTransform = cmsCreateTransform (in, TYPE_RGB_FLT, nullptr, TYPE_Lab_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); + hTransform = cmsCreateTransform (in, TYPE_RGB_FLT, nullptr, TYPE_Lab_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { @@ -3143,7 +3143,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen case CAMERA_ICC_TYPE_NIKON: case CAMERA_ICC_TYPE_GENERIC: default: - hTransform = cmsCreateTransform (in, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); // NOCACHE is important for thread safety + hTransform = cmsCreateTransform (in, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); // NOCACHE is important for thread safety break; } @@ -3152,7 +3152,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen if (hTransform == nullptr) { // Fallback: create transform from camera profile. Should not happen normally. lcmsMutex->lock (); - hTransform = cmsCreateTransform (camprofile, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); + hTransform = cmsCreateTransform (camprofile, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); lcmsMutex->unlock (); } @@ -3174,11 +3174,11 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen #pragma omp for schedule(static) #endif - for ( int h = 0; h < im->getHeight(); ++h ) { + for (int h = 0; h < im->getHeight(); ++h) { float *p = buffer.data, *pR = im->r(h), *pG = im->g(h), *pB = im->b(h); // Apply pre-processing - for ( int w = 0; w < im->getWidth(); ++w ) { + for (int w = 0; w < im->getWidth(); ++w) { float r = *(pR++); float g = *(pG++); float b = *(pB++); @@ -3261,7 +3261,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen pG = im->g(h); pB = im->b(h); - for ( int w = 0; w < im->getWidth(); ++w ) { + for (int w = 0; w < im->getWidth(); ++w) { float r, g, b, hr = 0.f, hg = 0.f, hb = 0.f; @@ -3328,9 +3328,9 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen // to a small space such as sRGB we may end up with negative values and values larger than max. if (!working_space_is_prophoto) { //convert from Prophoto to XYZ - float x = (toxyz[0][0] * r + toxyz[0][1] * g + toxyz[0][2] * b ) ; - float y = (toxyz[1][0] * r + toxyz[1][1] * g + toxyz[1][2] * b ) ; - float z = (toxyz[2][0] * r + toxyz[2][1] * g + toxyz[2][2] * b ) ; + float x = (toxyz[0][0] * r + toxyz[0][1] * g + toxyz[0][2] * b) ; + float y = (toxyz[1][0] * r + toxyz[1][1] * g + toxyz[1][2] * b) ; + float z = (toxyz[2][0] * r + toxyz[2][1] * g + toxyz[2][2] * b) ; //convert from XYZ to cmp.working (sRGB...Adobe...Wide..) r = ((torgb[0][0] * x + torgb[0][1] * y + torgb[0][2] * z)) ; g = ((torgb[1][0] * x + torgb[1][1] * y + torgb[1][2] * z)) ; @@ -3623,7 +3623,7 @@ void RawImageSource::HLRecovery_CIELab (float* rin, float* gin, float* bin, floa //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::hlRecovery (const std::string &method, float* red, float* green, float* blue, int width, float* hlmax ) +void RawImageSource::hlRecovery (const std::string &method, float* red, float* green, float* blue, int width, float* hlmax) { if (method == "Luminance") { @@ -3673,7 +3673,7 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) tmphistogram[(int)(refwb1 * rawData[i][j + 1])] += 4; } - if(j < end) { + if (j < end) { tmphistogram[(int)(refwb0 * rawData[i][j])] += 4; } } else if (ri->getSensorType() == ST_FUJI_XTRANS) { @@ -3793,23 +3793,23 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU if (ri->getSensorType() == ST_BAYER) { int j; int c1 = FC(i, start); - c1 = ( fourColours && c1 == 1 && !(i & 1) ) ? 3 : c1; + c1 = (fourColours && c1 == 1 && !(i & 1)) ? 3 : c1; int c2 = FC(i, start + 1); - c2 = ( fourColours && c2 == 1 && !(i & 1) ) ? 3 : c2; + c2 = (fourColours && c2 == 1 && !(i & 1)) ? 3 : c2; for (j = start; j < end - 1; j += 2) { tmphist[c1][(int)(ri->data[i][j] * scale)]++; tmphist[c2][(int)(ri->data[i][j + 1] * scale)]++; } - if(j < end) { // last pixel of row if width is odd + if (j < end) { // last pixel of row if width is odd tmphist[c1][(int)(ri->data[i][j] * scale)]++; } } else if (ri->get_colors() == 1) { for (int j = start; j < end; j++) { tmphist[0][(int)(ri->data[i][j] * scale)]++; } - } else if(ri->getSensorType() == ST_FUJI_XTRANS) { + } else if (ri->getSensorType() == ST_FUJI_XTRANS) { for (int j = start; j < end - 1; j += 2) { int c = ri->XTRANSFC(i, j); tmphist[c][(int)(ri->data[i][j] * scale)]++; @@ -3847,7 +3847,7 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU return f > 0.f ? (f < 1.f ? 1 : std::min(int(f), 255)) : 0; }; - for(int i = 0; i < histoSize; i++) { + for (int i = 0; i < histoSize; i++) { int idx = getidx(0, i); histRedRaw[idx] += hist[0][i]; @@ -3869,11 +3869,11 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU for (int i = 0; i < 256; i++) { histGreenRaw[i] >>= 1; } - else if(ri->getSensorType() == ST_FUJI_XTRANS) // since Xtrans has 2.5 as many greens, correct for it + else if (ri->getSensorType() == ST_FUJI_XTRANS) // since Xtrans has 2.5 as many greens, correct for it for (int i = 0; i < 256; i++) { histGreenRaw[i] = (histGreenRaw[i] * 2) / 5; } - else if(ri->get_colors() == 1) { // monochrome sensor => set all histograms equal + else if (ri->get_colors() == 1) { // monochrome sensor => set all histograms equal histGreenRaw += histRedRaw; histBlueRaw += histRedRaw; } @@ -3895,1516 +3895,403 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) } -static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, float *xxx, float * yyy, float * YYY, int * histxy, float * area, int * inter) +static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy) { - int nh; - - for (int y = 0; y < bfhitc ; y++) { - for (int x = 0; x < bfwitc ; x++) { - - if (xc[y][x] < 0.12f && xc[y][x] > 0.03f) { // near Prophoto - - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 0; - histxy[nh]++; - area[nh] = 50.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - - YYY[nh] += Yc[y][x]; - - // nc = 0; - //blue hard - } else if (yc[y][x] < 0.3f) { - nh = 1; - histxy[nh]++; - area[nh] = 60.f; - inter[nh] = 1; - YYY[nh] += Yc[y][x]; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - - // nc = 1; - - //blue - } else if (yc[y][x] < 0.4f) { - nh = 2; - histxy[nh]++; - area[nh] = 80.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - // nc = 1; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - //blue green - nh = 3; - histxy[nh]++; - area[nh] = 100.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 1; - - } else if (yc[y][x] < 0.6f) { - nh = 4; - histxy[nh]++; - area[nh] = 120.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 1; - - } else if (yc[y][x] < 0.82f) { - //green - nh = 5; - histxy[nh]++; - area[nh] = 240.f; - inter[nh] = 1; - // nc = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - +#ifdef _OPENMP + #pragma omp parallel +#endif + { + LUTu histxythr(histxy.getSize()); + histxythr.clear(); + LUTf xxxthr(xxx.getSize()); + xxxthr.clear(); + LUTf yyythr(yyy.getSize()); + yyythr.clear(); + LUTf YYYthr(YYY.getSize()); + YYYthr.clear(); +#ifdef _OPENMP + #pragma omp for schedule(dynamic, 4) nowait +#endif + for (int y = 0; y < bfhitc ; y++) { + for (int x = 0; x < bfwitc ; x++) { + int nh = -1; + if (xc[y][x] < 0.12f && xc[y][x] > 0.03f && yc[y][x] > 0.1f) { // near Prophoto + if (yc[y][x] < 0.2f) { + nh = 0; + //blue hard + } else if (yc[y][x] < 0.3f) { + nh = 1; + //blue + } else if (yc[y][x] < 0.4f) { + nh = 2; + } else if (yc[y][x] < 0.5f) { + //blue green + nh = 3; + } else if (yc[y][x] < 0.6f) { + nh = 4; + } else if (yc[y][x] < 0.82f) { + //green + nh = 5; + } + } else if (xc[y][x] < 0.24f && yc[y][x] > 0.05f) { + if (yc[y][x] < 0.2f) { + nh = 6; + } else if (yc[y][x] < 0.3f) { + nh = 7; + } else if (yc[y][x] < 0.4f) { + nh = 8; + } else if (yc[y][x] < 0.5f) { + nh = 9; + } else if (yc[y][x] < 0.6f) { + nh = 10; + } else if (yc[y][x] < 0.75f) { + nh = 11; + } + } else if (xc[y][x] < 0.28f && yc[y][x] > 0.1f) {//blue sky and other + if (yc[y][x] < 0.2f) { + nh = 12; + } else if (yc[y][x] < 0.25f) { + nh = 13; + } else if (yc[y][x] < 0.29f) { + nh = 14; + } else if (yc[y][x] < 0.33f) { + nh = 15; + } else if (yc[y][x] < 0.37f) { + nh = 16; + } else if (yc[y][x] < 0.4f) { + nh = 17; + } else if (yc[y][x] < 0.45f) { + nh = 18; + } else if (yc[y][x] < 0.5f) { + nh = 19; + } else if (yc[y][x] < 0.6f) { + nh = 20; + } else if (yc[y][x] < 0.75f) { + nh = 21; + } + } else if (xc[y][x] < 0.31f && yc[y][x] > 0.1f) {//near neutral others + if (yc[y][x] < 0.2f) { + nh = 22; + } else if (yc[y][x] < 0.24f) { + nh = 23; + } else if (yc[y][x] < 0.29f) { + nh = 24; + } else if (yc[y][x] < 0.32f) { + nh = 25; + } else if (yc[y][x] < 0.36f) { + nh = 26; + } else if (yc[y][x] < 0.4f) { + nh = 27; + } else if (yc[y][x] < 0.5f) { + nh = 28; + } else if (yc[y][x] < 0.7f) { + nh = 29; + } + } else if (xc[y][x] < 0.325f && yc[y][x] > 0.1f) {//neutral 34 + if (yc[y][x] < 0.2f) { + nh = 30; + } else if (yc[y][x] < 0.24f) { + nh = 31; + } else if (yc[y][x] < 0.29f) { + nh = 32; + } else if (yc[y][x] < 0.32f) { + nh = 33; + } else if (yc[y][x] < 0.34f) { + nh = 34; + } else if (yc[y][x] < 0.37f) { + nh = 35; + } else if (yc[y][x] < 0.4f) { + nh = 36; + } else if (yc[y][x] < 0.45f) { + nh = 37; + } else if (yc[y][x] < 0.5f) { + nh = 38; + } else if (yc[y][x] < 0.55f) { + nh = 39; + } else if (yc[y][x] < 0.7f) { + nh = 40; + } + } else if (xc[y][x] < 0.335f && yc[y][x] > 0.1f) {//neutral + if (yc[y][x] < 0.2f) { + nh = 41; + } else if (yc[y][x] < 0.24f) { + nh = 42; + } else if (yc[y][x] < 0.29f) { + nh = 43; + } else if (yc[y][x] < 0.32f) { + nh = 44; + } else if (yc[y][x] < 0.33f) { + nh = 45; + } else if (yc[y][x] < 0.34f) { + nh = 46; + } else if (yc[y][x] < 0.35f) { + nh = 47; + } else if (yc[y][x] < 0.36f) { + nh = 48; + } else if (yc[y][x] < 0.37f) { + nh = 47; + } else if (yc[y][x] < 0.38f) { + nh = 48; + } else if (yc[y][x] < 0.4f) { + nh = 49; + } else if (yc[y][x] < 0.45f) { + nh = 50; + } else if (yc[y][x] < 0.5f) { + nh = 51; + } else if (yc[y][x] < 0.55f) { + nh = 52; + } else if (yc[y][x] < 0.7f) { + nh = 53; + } + } else if (xc[y][x] < 0.345f && yc[y][x] > 0.1f) {//neutral 37 + if (yc[y][x] < 0.2f) { + nh = 54; + } else if (yc[y][x] < 0.24f) { + nh = 55; + } else if (yc[y][x] < 0.29f) { + nh = 56; + } else if (yc[y][x] < 0.32f) { + nh = 57; + } else if (yc[y][x] < 0.33f) {//34 + nh = 58; + } else if (yc[y][x] < 0.34f) { + nh = 59; + } else if (yc[y][x] < 0.35f) {//34 + nh = 60; + } else if (yc[y][x] < 0.36f) {//34 + nh = 61; + } else if (yc[y][x] < 0.37f) { + nh = 62; + } else if (yc[y][x] < 0.38f) { + nh = 63; + } else if (yc[y][x] < 0.39f) { + nh = 64; + } else if (yc[y][x] < 0.4f) { + nh = 65; + } else if (yc[y][x] < 0.42f) { + nh = 66; + } else if (yc[y][x] < 0.45f) { + nh = 67; + } else if (yc[y][x] < 0.48f) { + nh = 68; + } else if (yc[y][x] < 0.5f) { + nh = 69; + } else if (yc[y][x] < 0.55f) { + nh = 70; + } else if (yc[y][x] < 0.65f) { + nh = 71; + } + } else if (xc[y][x] < 0.355f && yc[y][x] > 0.1f) {//neutral 37 + if (yc[y][x] < 0.2f) { + nh = 72; + } else if (yc[y][x] < 0.24f) { + nh = 73; + } else if (yc[y][x] < 0.29f) { + nh = 74; + } else if (yc[y][x] < 0.32f) { + nh = 75; + } else if (yc[y][x] < 0.33f) {//34 + nh = 76; + } else if (yc[y][x] < 0.34f) { + nh = 77; + } else if (yc[y][x] < 0.35f) {//34 + nh = 78; + } else if (yc[y][x] < 0.36f) {//34 + nh = 79; + } else if (yc[y][x] < 0.37f) { + nh = 80; + } else if (yc[y][x] < 0.38f) { + nh = 81; + } else if (yc[y][x] < 0.39f) { + nh = 82; + } else if (yc[y][x] < 0.4f) { + nh = 83; + } else if (yc[y][x] < 0.42f) { + nh = 84; + } else if (yc[y][x] < 0.45f) { + nh = 85; + } else if (yc[y][x] < 0.48f) { + nh = 86; + } else if (yc[y][x] < 0.5f) { + nh = 87; + } else if (yc[y][x] < 0.55f) { + nh = 88; + } else if (yc[y][x] < 0.65f) { + nh = 89; + } + } else if (xc[y][x] < 0.365f && yc[y][x] > 0.15f) { //0.4 + if (yc[y][x] < 0.2f) { + nh = 90; + } else if (yc[y][x] < 0.24f) { + nh = 91; + } else if (yc[y][x] < 0.29f) { + nh = 92; + } else if (yc[y][x] < 0.32f) { + nh = 93; + } else if (yc[y][x] < 0.33f) { + nh = 94; + } else if (yc[y][x] < 0.34f) { + nh = 95; + } else if (yc[y][x] < 0.36f) { + nh = 96; + } else if (yc[y][x] < 0.37f) { + nh = 97; + } else if (yc[y][x] < 0.38f) { + nh = 98; + } else if (yc[y][x] < 0.39f) { + nh = 99; + } else if (yc[y][x] < 0.4f) { + nh = 100; + } else if (yc[y][x] < 0.42f) { + nh = 101; + } else if (yc[y][x] < 0.45f) { + nh = 102; + } else if (yc[y][x] < 0.5f) { + nh = 103; + } else if (yc[y][x] < 0.55f) { + nh = 104; + } else if (yc[y][x] < 0.63f) { + nh = 105; + } + } else if (xc[y][x] < 0.405f && yc[y][x] > 0.15f) {//45 + if (yc[y][x] < 0.2f) { + nh = 106; + } else if (yc[y][x] < 0.24f) { + nh = 107; + } else if (yc[y][x] < 0.29f) { + nh = 108; + } else if (yc[y][x] < 0.32f) { + nh = 109; + } else if (yc[y][x] < 0.34f) { + nh = 110; + } else if (yc[y][x] < 0.37f) { + nh = 111; + } else if (yc[y][x] < 0.4f) { + nh = 112; + } else if (yc[y][x] < 0.45f) { + nh = 113; + } else if (yc[y][x] < 0.5f) { + nh = 114; + } else if (yc[y][x] < 0.55f) { + nh = 115; + } else if (yc[y][x] < 0.6f) { + nh = 116; + } + } else if (xc[y][x] < 0.445f && yc[y][x] > 0.15f) {//45 + if (yc[y][x] < 0.2f) { + nh = 117; + } else if (yc[y][x] < 0.24f) { + nh = 118; + } else if (yc[y][x] < 0.29f) { + nh = 119; + } else if (yc[y][x] < 0.32f) { + nh = 120; + } else if (yc[y][x] < 0.34f) { + nh = 121; + } else if (yc[y][x] < 0.37f) { + nh = 122; + } else if (yc[y][x] < 0.4f) { + nh = 123; + } else if (yc[y][x] < 0.45f) { + nh = 124; + } else if (yc[y][x] < 0.5f) { + nh = 125; + } else if (yc[y][x] < 0.55f) { + nh = 126; + } else if (yc[y][x] < 0.58f) { + nh = 127; + } + } else if (xc[y][x] < 0.495f && yc[y][x] > 0.15f) { + if (yc[y][x] < 0.2f) { + nh = 128; + } else if (yc[y][x] < 0.24f) { + nh = 129; + } else if (yc[y][x] < 0.29f) { + nh = 130; + } else if (yc[y][x] < 0.32f) { + nh = 131; + } else if (yc[y][x] < 0.34f) { + nh = 132; + } else if (yc[y][x] < 0.37f) { + nh = 133; + } else if (yc[y][x] < 0.4f) { + nh = 134; + } else if (yc[y][x] < 0.45f) { + nh = 135; + } else if (yc[y][x] < 0.5f) { + nh = 136; + } else if (yc[y][x] < 0.55f) { + nh = 137; + } + } else if (xc[y][x] < 0.545f && yc[y][x] > 0.15f) { + if (yc[y][x] < 0.2f) { + nh = 138; + } else if (yc[y][x] < 0.24f) { + nh = 139; + } else if (yc[y][x] < 0.29f) { + nh = 140; + } else if (yc[y][x] < 0.32f) { + nh = 141; + } else if (yc[y][x] < 0.34f) { + nh = 142; + } else if (yc[y][x] < 0.37f) { + nh = 143; + } else if (yc[y][x] < 0.4f) { + nh = 144; + } else if (yc[y][x] < 0.45f) { + nh = 145; + } else if (yc[y][x] < 0.5f) { + nh = 146; + } + } else if (xc[y][x] < 0.595f && yc[y][x] > 0.15f) { + if (yc[y][x] < 0.22f) { + nh = 147; + } else if (yc[y][x] < 0.25f) { + nh = 148; + } else if (yc[y][x] < 0.3f) { + nh = 149; + } else if (yc[y][x] < 0.35f) { + nh = 150; + } else if (yc[y][x] < 0.4f) { + nh = 151; + } else if (yc[y][x] < 0.45f) { + nh = 152; + } + } else if (xc[y][x] < 0.65f && yc[y][x] > 0.12f) { + if (yc[y][x] < 0.25f) { + nh = 153; + } else if (yc[y][x] < 0.3f) { + nh = 154; + } else if (yc[y][x] < 0.35f) { + nh = 155; + } else if (yc[y][x] < 0.45f) { + nh = 156; + } + } else if (xc[y][x] < 0.75f && yc[y][x] > 0.1f) { + nh = 157; } - } else if (xc[y][x] < 0.24f) { - if (yc[y][x] < 0.2f && yc[y][x] > 0.05f) { - nh = 6; - histxy[nh]++; - area[nh] = 230.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 2; - - } else if (yc[y][x] < 0.3f) { - nh = 7; - histxy[nh]++; - area[nh] = 240.f; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 2; - - } else if (yc[y][x] < 0.4f) { - nh = 8; - histxy[nh]++; - area[nh] = 240.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 2; - - } else if (yc[y][x] < 0.5f) { - nh = 9; - histxy[nh]++; - area[nh] = 240.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 2; - // nc2 = 3; - - } else if (yc[y][x] < 0.6f) { - nh = 10; - histxy[nh]++; - area[nh] = 240.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - // nc = 3; - - } else if (yc[y][x] < 0.75f) { - nh = 11; - histxy[nh]++; - area[nh] = 400.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - // nc = 3; - + if (nh >= 0) { + histxythr[nh]++; + xxxthr[nh] += xc[y][x]; + yyythr[nh] += yc[y][x]; + YYYthr[nh] += Yc[y][x]; } - - } else if (xc[y][x] < 0.28f) {//blue sky and other - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 12; - histxy[nh]++; - area[nh] = 80.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.25f) { - nh = 13; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 14; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.33f) { - nh = 15; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 16; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 17; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 18; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.5f) { - nh = 19; - histxy[nh]++; - area[nh] = 25.f; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.6f) { - nh = 20; - histxy[nh]++; - area[nh] = 50.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.75f) { - nh = 21; - histxy[nh]++; - area[nh] = 60.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - } else if (xc[y][x] < 0.31f) {//near neutral others - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 22; - histxy[nh]++; - area[nh] = 50.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 23; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 24; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.32f) { - nh = 25; - histxy[nh]++; - area[nh] = 9.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.36f) { - nh = 26; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 27; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.5f) { - nh = 28; - histxy[nh]++; - area[nh] = 30.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.7f) { - nh = 29; - histxy[nh]++; - area[nh] = 45.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - } else if (xc[y][x] < 0.325f) {//neutral 34 - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 30; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 31; - histxy[nh]++; - area[nh] = 6.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 32; - histxy[nh]++; - area[nh] = 7.5f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 33; - histxy[nh]++; - area[nh] = 4.5f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.34f) { - nh = 34; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 35; - histxy[nh]++; - area[nh] = 4.5f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 36; - histxy[nh]++; - area[nh] = 4.5f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 37; - histxy[nh]++; - area[nh] = 7.5f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 38; - histxy[nh]++; - area[nh] = 7.5f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 39; - histxy[nh]++; - area[nh] = 7.5f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.7f) { - nh = 40; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.335f) {//neutral - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 41; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 42; - histxy[nh]++; - area[nh] = 4.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 43; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 44; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.33f) { - nh = 45; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.34f) { - nh = 46; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.35f) { - nh = 47; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.36f) { - nh = 48; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 47; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.38f) { - nh = 48; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 49; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 50; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 51; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 52; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.7f) { - nh = 53; - histxy[nh]++; - area[nh] = 10.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.345f) {//neutral 37 - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 54; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 55; - histxy[nh]++; - area[nh] = 4.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 56; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 57; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.33f) {//34 - nh = 58; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.34f) { - nh = 59; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.35f) {//34 - nh = 60; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.36f) {//34 - nh = 61; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 62; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.38f) { - nh = 63; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.39f) { - nh = 64; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 65; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.42f) { - nh = 66; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 67; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.48f) { - nh = 68; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 69; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 70; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.65f) { - nh = 71; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.355f) {//neutral 37 - if (yc[y][x] < 0.2f && yc[y][x] > 0.1f) { - nh = 72; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 73; - histxy[nh]++; - area[nh] = 4.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 74; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 75; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.33f) {//34 - nh = 76; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.34f) { - nh = 77; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.35f) {//34 - nh = 78; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.36f) {//34 - nh = 79; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 80; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.38f) { - nh = 81; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.39f) { - nh = 82; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 83; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.42f) { - nh = 84; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 85; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.48f) { - nh = 68; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 86; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 87; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.65f) { - nh = 88; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.365f) { //0.4 - if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { - nh = 89; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.24f) { - nh = 90; - histxy[nh]++; - area[nh] = 4.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 91; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 92; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.33f) { - nh = 93; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.34f) { - nh = 94; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.36f) { - nh = 95; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 5; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 96; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.38f) { - nh = 97; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.39f) { - nh = 98; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 99; - histxy[nh]++; - area[nh] = 1.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - } else if (yc[y][x] < 0.42f) { - nh = 100; - histxy[nh]++; - area[nh] = 2.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 101; - histxy[nh]++; - area[nh] = 3.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 102; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 103; - histxy[nh]++; - area[nh] = 5.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.63f) { - nh = 104; - histxy[nh]++; - area[nh] = 10.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.405f) {//45 - if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { - nh = 105; - histxy[nh]++; - area[nh] = 40.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 106; - histxy[nh]++; - area[nh] = 16.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 107; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 108; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.34f) { - nh = 109; - histxy[nh]++; - area[nh] = 8.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 110; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 111; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 112; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 113; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 114; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.6f) { - nh = 115; - histxy[nh]++; - area[nh] = 16.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.445f) {//45 - if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { - nh = 116; - histxy[nh]++; - area[nh] = 40.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 117; - histxy[nh]++; - area[nh] = 16.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 118; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 119; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.34f) { - nh = 120; - histxy[nh]++; - area[nh] = 8.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 121; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 122; - histxy[nh]++; - area[nh] = 12.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 123; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 124; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 125; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.58f) { - nh = 126; - histxy[nh]++; - area[nh] = 16.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.495f) { - if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { - nh = 127; - histxy[nh]++; - area[nh] = 40.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 128; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 129; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 130; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.34f) { - nh = 131; - histxy[nh]++; - area[nh] = 10.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 132; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 133; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 3; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 134; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 135; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.55f) { - nh = 136; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - } else if (xc[y][x] < 0.545f) { - if (yc[y][x] < 0.2f && yc[y][x] > 0.15f) { - nh = 137; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.24f) { - nh = 138; - histxy[nh]++; - area[nh] = 20.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.29f) { - nh = 139; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.32f) { - nh = 140; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.34f) { - nh = 141; - histxy[nh]++; - area[nh] = 10.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.37f) { - nh = 142; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 143; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.45f) { - nh = 144; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.5f) { - nh = 145; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - - } - - } else if (xc[y][x] < 0.595f) { - if (yc[y][x] < 0.22f && yc[y][x] > 0.15f) { - nh = 146; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.25f) { - nh = 147; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.3f) { - nh = 148; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.35f) { - nh = 149; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.4f) { - nh = 160; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.45f) { - nh = 161; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.65f) { - if (yc[y][x] < 0.25f && yc[y][x] > 0.12f) { - nh = 162; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.3f) { - nh = 163; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } else if (yc[y][x] < 0.35f) { - nh = 164; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 2; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - - } else if (yc[y][x] < 0.45f) { - nh = 165; - histxy[nh]++; - area[nh] = 15.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - - } else if (xc[y][x] < 0.75f && yc[y][x] > 0.1f) { - nh = 166; - histxy[nh]++; - area[nh] = 25.f; - inter[nh] = 1; - xxx[nh] += xc[y][x]; - yyy[nh] += yc[y][x]; - YYY[nh] += Yc[y][x]; - - } - + } +#ifdef _OPENMP + #pragma omp critical +#endif + { + histxy += histxythr; + xxx += xxxthr; + yyy += yyythr; + YYY += YYYthr; } } } - - - void static studentXY(const array2D & YYcurr, const array2D & reffYY, int sizcurr, int Nc, int tt, float & student) { //calculate Student coeff YY @@ -5456,388 +4343,6 @@ void static studentXY(const array2D & YYcurr, const array2D & reff //student coeeficient } -/* -static void SdwWB(const array2D &redloc, const array2D &greenloc, const array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm) -{ - //Standard deviation weighted Gary World - from Lan rt al. - constexpr float clipHigh = 64000.f; - constexpr float clipLow = 1500.f; - - float MeanG[12] = { }; - float SigmaG[12] = { }; - - float MeanR[12] = { }; - float SigmaR[12] = { }; - - float MeanB[12] = { }; - float SigmaB[12] = { }; - - //divide in 12 areas - int partw, parth; - int yh, xw; - - if (bfw > bfh) { - partw = bfw / 4; - parth = bfh / 3; - xw = 4; - yh = 3; - } else { - partw = bfw / 3; - parth = bfh / 4; - xw = 3; - yh = 4; - } - - float SigmaGG = 0.f, SigmaRR = 0.f, SigmaBB = 0.f; - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic) collapse(2) -#endif - - for (int w = 0; w < xw ; ++w) { - for (int h = 0; h < yh ; ++h) { - float meanr = 0.f; - float meang = 0.f; - float meanb = 0.f; - int nr = 0; - int ng = 0; - int nb = 0; - - for (int y = h * parth; y < (h + 1) * parth; ++y) { - for (int x = w * partw; x < (w + 1) * partw; ++x) { - if (greenloc[y][x] > clipLow && greenloc[y][x] < clipHigh) { - meang += greenloc[y][x]; - ng++; - } - - if (redloc[y][x] > clipLow && redloc[y][x] < clipHigh) { - meanr += redloc[y][x]; - nr++; - } - - if (blueloc[y][x] > clipLow && blueloc[y][x] < clipHigh) { - meanb += blueloc[y][x]; - nb++; - } - } - } - - int i = w + h * xw; - - if (ng > 0) { - meang /= ng; - } - - if (nr > 0) { - meanr /= nr; - } - - if (nb > 0) { - meanb /= nb; - } - - MeanG[i] = meang; - MeanR[i] = meanr; - MeanB[i] = meanb; - - float sigmar = 0.f; - float sigmag = 0.f; - float sigmab = 0.f; - - for (int y = h * parth; y < (h + 1) * parth; ++y) { - for (int x = w * partw; x < (w + 1) * partw; ++x) { - if (greenloc[y][x] > clipLow && greenloc[y][x] < clipHigh) { - sigmag += SQR(meang - greenloc[y][x]) ; - } - - if (redloc[y][x] > clipLow && redloc[y][x] < clipHigh) { - sigmar += SQR(meanr - redloc[y][x]); - } - - if (blueloc[y][x] > clipLow && blueloc[y][x] < clipHigh) { - sigmab += SQR(meanb - blueloc[y][x]); - } - } - } - - SigmaG[i] = sigmag; - SigmaR[i] = sigmar; - SigmaB[i] = sigmab; - - if (ng > 0) { - SigmaG[i] = std::sqrt(SigmaG[i] / ng); - } - - if (nr > 0) { - SigmaR[i] = std::sqrt(SigmaR[i] / nr); - } - - if (nb > 0) { - SigmaB[i] = std::sqrt(SigmaB[i] / nb); - } - -#ifdef _OPENMP - #pragma omp critical -#endif - { - SigmaGG += SigmaG[i]; - SigmaRR += SigmaR[i]; - SigmaBB += SigmaB[i]; - } - } - } - - float StdavgG = 0.f, StdavgR = 0.f, StdavgB = 0.f; - constexpr float epsilo = 0.01f; - - for (int k = 0; k < 12 ; k++) { - StdavgG += (SigmaG[k] * MeanG[k]) / (SigmaGG + epsilo); - StdavgR += (SigmaR[k] * MeanR[k]) / (SigmaRR + epsilo); - StdavgB += (SigmaB[k] * MeanB[k]) / (SigmaBB + epsilo); - - } - - avg_gm = (StdavgG + StdavgB + StdavgR) / (3 * StdavgG); - avg_rm = (StdavgG + StdavgB + StdavgR) / (3 * StdavgR); - avg_bm = (StdavgG + StdavgB + StdavgR) / (3 * StdavgB); - - avg_gm *= 10000.f; - avg_rm *= 10000.f; - avg_bm *= 10000.f; - -} -*/ - -/* -static void RobustWB(array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm) -{ - BENCHFUN - // inspired by "Robust automatic WB algorithm using grey colour points in Images" - // Jy Huo, Yl Chang, J.Wang Xx Wei - // robust = true; -// printf("Robust WB\n"); - const int bfwr = bfw / 4 + 1 ;//5 middle value to keep good result and reduce time - const int bfhr = bfh / 4 + 1; - - array2D rl(bfwr, bfhr); - array2D gl(bfwr, bfhr); - array2D bl(bfwr, bfhr); - - // copy data to smaller arrays to reduce memory pressure in do-while loop -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int y = 0; y < bfh ; y += 4) { - int yy = y / 4; - - for (int x = 0; x < bfw ; x += 4) { - int xx = x / 4; - rl[yy][xx] = redloc[y][x]; - gl[yy][xx] = greenloc[y][x]; - bl[yy][xx] = blueloc[y][x]; - } - } - - float *Uba = new float [204]; - float *Vba = new float [204]; - - constexpr float Th = 0.1321f; //Threshold 0.1321f 0.097f 0.2753f if necessary - //wr, wb, wg multipliers for each channel RGB - float wr = 1.f; - float wg = 1.f; - float wb = 1.f; - constexpr float mu = 0.002f;//std variation - constexpr float mu2 = 0.0012f;//first reduce variation - constexpr float mu3 = 0.0007f;//second variation - int itera = 0; - int minim = 1; - int realitera = 1; - - int Kx = 0; - - do {//iterative WB - float Ubarohm = 0.f, Vbarohm = 0.f; - itera++; - int Nf = 0; -#ifdef _OPENMP - #pragma omp parallel for reduction(+:Ubarohm, Vbarohm, Nf) schedule(dynamic,16) -#endif - - for (int y = 0; y < bfhr ; ++y) { - for (int x = 0; x < bfwr ; ++x) { - - //calculate YUV from RGB and wr, wg, wb - float Y0 = 0.299f * wr * rl[y][x] + 0.587f * wg * gl[y][x] + 0.114f * wb * bl[y][x]; - float U0 = -0.14713f * wr * rl[y][x] - 0.28886f * wg * gl[y][x] + 0.436f * wb * bl[y][x]; - float V0 = 0.615f * wr * rl[y][x] - 0.51498f * wg * gl[y][x] - 0.10001f * wb * bl[y][x]; - - //FYUX function to detect grey points - if (fabs(U0) + fabs(V0) < Th * Y0) {//grey values - Nf++; - Ubarohm += U0; - Vbarohm += V0; - } - - - } - } - - Ubarohm /= Nf; - Uba[itera] = Ubarohm;//stock value Ubarohm - Vba[itera] = Vbarohm;//stock value Vbarohm - - if (itera > 5 && minim < 2) { - if ((fabs(Uba[itera] - Uba[itera - 2]) < 0.001f) && (fabs(Vba[itera] - Vba[itera - 2]) < 0.001f)) { - //printf("DUba=%f Dvba=%f\n", Uba[itera] - Uba[itera - 2], Vba[itera] - Vba[itera - 2]); - realitera = itera; - minim = 2; //accelerate convergence - not in original algorithm - } - } - - if (itera > 10 && minim == 2 && itera > realitera + 3) { - if ((fabs(Uba[itera] - Uba[itera - 2]) < 0.001f) && (fabs(Vba[itera] - Vba[itera - 2]) < 0.001f)) { - minim = 3; //accelerate second time if necessary convergence, - not in original algorithm - } - - } - - Vbarohm /= Nf; // QUESTION INGO: why is this not done before the value is saved to Vba[itera]? Bug or intentional? - // printf ("Nf=%i max=%i U=%f V=%f\n", Nf, bfh*bfw, Ubarohm, Vbarohm); - Kx = 0; - constexpr float aa = 0.8f;//superior limit if epsil > aa increase variation - constexpr float bb = 0.15f;//inferior limit if epsil < bb exit - int ind = 1; - - float phi = 0.f; - - if ((fabs(Ubarohm) > fabs(Vbarohm)) || (Ubarohm != 0.f && fabs(Ubarohm) == fabs(Vbarohm))) { - phi = Ubarohm; - ind = 1; - } else if (fabs(Ubarohm) < fabs(Vbarohm)) { - phi = Vbarohm; - ind = 2; - } else if (Ubarohm == 0.f && Vbarohm == 0.f) { - phi = 0.f; - ind = 3; - } - - int sign = SGN(-phi); - - if (fabs(phi) >= aa) { - Kx = 2 * sign; - } - - if (fabs(phi) < aa && fabs(phi) >= bb) { - Kx = sign; - } - - if (fabs(phi) < bb) { - Kx = 0; - } - - // - float mur = mu; - - if (minim == 2) { - mur = mu2; - } else if (minim == 3) { - mur = mu3; - } - - if (ind == 1) { - wb += mur * Kx; - } else if (ind == 2) { - wr += mur * Kx; - } - - //printf ("epsil=%f iter=%i wb=%f wr=%f U=%f V=%f mu=%f\n", fabs (epsil), itera, wb, wr, Ubarohm, Vbarohm, mur); - } while (Kx != 0 && itera <= 200); //stop iterations in normal case Kx =0, or if WB iteration do not converge - - delete Uba; - delete Vba; -// printf("epsil=%f iter=%i wb=%f wr=%f mu=%f\n", fabs(epsil), itera, wb, wr, mur); - - avg_rm = 10000.* wr; - avg_gm = 10000.* wg; - avg_bm = 10000.* wb; - // printf("Robust ar%f ag=%f ab=%f\n", avg_rm, avg_gm, avg_bm); - -} -*/ -/* -static void SobelWB(array2D &redsobel, array2D &greensobel, array2D &bluesobel, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh) -{ - BENCHFUN - int GX[3][3]; - int GY[3][3]; - - //Sobel Horizontal - GX[0][0] = 1; - GX[0][1] = 0; - GX[0][2] = -1; - GX[1][0] = 2; - GX[1][1] = 0; - GX[1][2] = -2; - GX[2][0] = 1; - GX[2][1] = 0; - GX[2][2] = -1; - - //Sobel Vertical - GY[0][0] = 1; - GY[0][1] = 2; - GY[0][2] = 1; - GY[1][0] = 0; - GY[1][1] = 0; - GY[1][2] = 0; - GY[2][0] = -1; - GY[2][1] = -2; - GY[2][2] = -1; - // inspired from Chen Guanghua Zhang Xiaolong - // edge detection to improve auto WB - - { -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int y = 0; y < bfh ; y++) { - for (int x = 0; x < bfw ; x++) { - if (y == 0 || y == bfh - 1 || x == 0 || x == bfw - 1) { - redsobel[y][x] = 0.f; - greensobel[y][x] = 0.f; - bluesobel[y][x] = 0.f; - } else { - float sumXr = 0.f; - float sumYr = 0.f; - float sumXg = 0.f; - float sumYg = 0.f; - float sumXb = 0.f; - float sumYb = 0.f; - - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - sumXr += GX[j + 1][i + 1] * redloc[y + i][x + j]; - sumXg += GX[j + 1][i + 1] * greenloc[y + i][x + j]; - sumXb += GX[j + 1][i + 1] * blueloc[y + i][x + j]; - sumYr += GY[j + 1][i + 1] * redloc[y + i][x + j]; - sumYg += GY[j + 1][i + 1] * greenloc[y + i][x + j]; - sumYb += GY[j + 1][i + 1] * blueloc[y + i][x + j]; - } - } - - //Edge strength - //we can add if need teta = atan2 (sumYr, sumXr) - redsobel[y][x] = CLIP(std::sqrt(SQR(sumXr) + SQR(sumYr))); - greensobel[y][x] = CLIP(std::sqrt(SQR(sumXg) + SQR(sumYg))); - bluesobel[y][x] = CLIP(std::sqrt(SQR(sumXb) + SQR(sumYb))); - } - } - } - } -} -*/ - void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const ColorManagementParams &cmp, const RAWParams &raw, const WBParams & wbpar) { /* @@ -5845,41 +4350,41 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double This algorithm try to find temperature correlation between 20 to 200 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. - I have test many many algo to find the first one that work :) - Probably (sure) there are improvment to do... + I have test many many algorithms to find the first one that work :) + Probably (sure) there are improvement to do... I have create a table temperature with temp and white point with 100 values between 2000K and 12000K we can obviously change these values, more...with different steps - I have create or recuparate and transformed 200 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is largey enough. + I have create or recuparate and transformed 200 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. I think this value of 200 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized Of course we can increase this number :) - 1) for the cuurent raw file we create a table for each temp of RGB multipliers + 1) for the current raw file we create a table for each temp of RGB multipliers 2) then, I choose the "camera temp" to initialize calculation (why not) - 3) for this temp, I calculated XYZ values for the 200 spectrals datas + 3) for this temp, I calculated XYZ values for the 200 spectral datas 4) then I create for the image an "histogram", but for xyY (Cie 1931 color space) 5) for each pixel (in fact to accelerate only 1/10 for and 1/10 for y), I determine for each couple xy, the number of occurences 6) I sort this result in ascending order - 7) in option we can sort in another maner to take into account chroma : chromax = x - white point x, chromay = y - white point y + 7) in option we can sort in another manner to take into account chroma : chromax = x - white point x, chromay = y - white point y 8) then I compare this result, with spectral datas found above in 3) with deltaE (limited to chroma) 9) at this point we have xyY values that match Camera temp, and spectral datas associated 10) then I recalculate RGB values from xyY histogram 11) after, I vary temp, between 2000K to 12000K - 12) RGB values are recalcualted from 10) with RGB multipliers, and then xyY are calcualted for each temp - 13) spectral datas choose are recalculated with temp betwen 2000K to 12000K with matrix spectral calculation, that leeds to xyY values + 12) RGB values are recalculated from 10) with RGB multipliers, and then xyY are calculated for each temp + 13) spectral datas choose are recalculated with temp between 2000K to 12000K with matrix spectral calculation, that leads to xyY values 14) I calculated for each couple xy, Student correlation (without Snedecor test) 15) the good result, is the best correlation - 16) we have found the best temperature where color image and color refences are correlate + 16) we have found the best temperature where color image and color references are correlate 17) after we pass this value to improccoordinator 18) in a second part if camera green is out, I used an "extra" algorithm 19) we make vary green between 2 limits (settings in option) - 20) betwen these green limits, we make slightly vary temp (settings in options) and recalculated RGB multipliers + 20) between these green limits, we make slightly vary temp (settings in options) and recalculated RGB multipliers 21) with this multipliers for the RGB color find in histogram we recalculate xyY 22) we re-adjust references color for these xyY from 20) 23) we add if chroma image is very low, k colors to degrad correlation 24) then find all Student correlation for each couple green / temp 25) sort these Student values, and choose the minimum - 26) then for the 3 better couple "temp / green" choose the one wher grren is neraest from 1. + 26) then for the 3 better couple "temp / green" choose the one where green is nearest from 1. Some variables or function are not used, keep in case of I have test with cat02 but result are not stable enough ! why ??, therefore cat02 neutralized @@ -5892,22 +4397,22 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double You can change 4 parameters in option.cc Itcwb_thres : 34 by default ==> number of color used in final algorithm - between 10 and max 55 - Itcwb_sort : false by default, can improve algo if true, ==> sort value in something near chroma order, instead of histogram number + Itcwb_sort : false by default, can improve algorithm if true, ==> sort value in something near chroma order, instead of histogram number Itcwb_greenrange : 0 amplitude of green variation - between 0 to 2 Itcwb_greendeltatemp : 1 - delta temp in green iterate loop for "extra" - between 0 to 4 - Itcwb_forceextra : false - if true force algorithm "extra" ("extra" is used when cmaera wbsettings are wrong) to all images - Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color comapre to size of histogram real color - itcwb_delta : 1 by defaut can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good + Itcwb_forceextra : false - if true force algorithm "extra" ("extra" is used when camera wbsettings are wrong) to all images + Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color compare to size of histogram real color + itcwb_delta : 1 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good */ // BENCHFUN // BENCHFUN TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB"); - double wp[3][3] = { - {wprof[0][0], wprof[0][1], wprof[0][2]}, - {wprof[1][0], wprof[1][1], wprof[1][2]}, - {wprof[2][0], wprof[2][1], wprof[2][2]} + const float wp[3][3] = { + {static_cast(wprof[0][0]), static_cast(wprof[0][1]), static_cast(wprof[0][2])}, + {static_cast(wprof[1][0]), static_cast(wprof[1][1]), static_cast(wprof[1][2])}, + {static_cast(wprof[2][0]), static_cast(wprof[2][1]), static_cast(wprof[2][2])} }; TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix("sRGB"); @@ -5922,8 +4427,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double array2D yc; array2D Yc; - - array2D histcurr; array2D histcurrref; @@ -6248,87 +4751,28 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {11001., 0.957747, 1.541281}, {12001., 0.960440, 1.601019} }; - int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - int nbt = N_t; - float **Tx = nullptr; - float **Ty = nullptr; - float **Tz = nullptr; - float **Ta = nullptr; - float **Tb = nullptr; - float **TL = nullptr; - double *TX = nullptr; - double *TY = nullptr; - double *TZ = nullptr; - int *good_spectral = nullptr; - // float studgood = 1000.f; + const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point + constexpr int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values + array2D Tx(Nc, N_t); + array2D Ty(Nc, N_t); + array2D Tz(Nc, N_t); + array2D Ta(Nc, N_t); + array2D Tb(Nc, N_t); + array2D TL(Nc, N_t); + double TX[Nc]; + double TY[Nc]; + double TZ[Nc]; + std::vector good_spectral(Nc, false); - int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values - Tx = new float*[Nc]; + float rmm[N_t]; + float gmm[N_t]; + float bmm[N_t]; - for (int i = 0; i < Nc; i++) { - Tx[i] = new float[nbt]; - } - - Ty = new float*[Nc]; - - for (int i = 0; i < Nc; i++) { - Ty[i] = new float[nbt]; - } - - Tz = new float*[Nc]; - - for (int i = 0; i < Nc; i++) { - Tz[i] = new float[nbt]; - } - - Ta = new float*[Nc]; - - for (int i = 0; i < Nc; i++) { - Ta[i] = new float[nbt]; - } - - Tb = new float*[Nc]; - - for (int i = 0; i < Nc; i++) { - Tb[i] = new float[nbt]; - } - - TL = new float*[Nc]; - - for (int i = 0; i < Nc; i++) { - TL[i] = new float[nbt]; - } - - TX = new double [Nc]; - - - TY = new double [Nc]; - - - TZ = new double [Nc]; - - good_spectral = new int [Nc]; - - for (int i = 0; i < Nc; i++) { - good_spectral[i] = 0; - } - - float *rmm = nullptr; - rmm = new float [N_t]; - - float *gmm = nullptr; - gmm = new float [N_t]; - - float *bmm = nullptr; - bmm = new float [N_t]; - - int siza = 167;//size of histogram + constexpr int siza = 158;//size of histogram //tempref and greenref are camera wb values. // I used them by default to select good spectral values !! - if (tempref > 12000.f) { - tempref = 12000.f; - } + tempref = rtengine::min(tempref, 12000.0); int repref = 0; @@ -6339,8 +4783,9 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - //calculate R G B multiplier in function illuminant and temperature + const bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); for (int tt = 0; tt < N_t; tt++) { double r, g, b; float rm, gm, bm; @@ -6352,9 +4797,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; float new_scale_mul[4]; - bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) - || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); - float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); + const float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); rm = new_scale_mul[0] / scale_mul[0] * gain; gm = new_scale_mul[1] / scale_mul[1] * gain; @@ -6367,7 +4810,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double struct hiss { int histnum; int index; - int interest; bool operator()(const hiss& lhis, const hiss& rhis) { return lhis.histnum < rhis.histnum; @@ -6391,28 +4833,15 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } ; - int histxy[siza];//number of values for each pair xy + LUTu histxy(siza); //number of values for each pair xy + histxy.clear(); - float area[siza];//multiplier for compensation differences area ==> big areas are rare near limit prophotos or more - - int inter[siza]; //interest for photographie 1 = small (limit gamut) 2 = normal 3 = major (skin, sky, neutral) - - float xxx[siza];//for color references calculated ==> max in images "like histogram" - - float yyy[siza]; - - float YYY[siza];//not used directly, but necessary to keep good range - - for (int p = 0; p < siza; p++) { - histxy[p] = 0; - area[p] = 20.f; - inter[p] = 1; - xxx[p] = 0.f; - yyy[p] = 0.f; - YYY[p] = 0.f; - } - - float estimchrom = 0.f; + LUTf xxx(siza);//for color references calculated ==> max in images "like histogram" + xxx.clear(); + LUTf yyy(siza); + yyy.clear(); + LUTf YYY(siza);//not used directly, but necessary to keep good range + YYY.clear(); bool separated = true; int w = -1; @@ -6422,9 +4851,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double reff_spect_yy_camera(N_t, 2 * Nc + 2); reff_spect_xx_camera(N_t, 2 * Nc + 2); - // reffYY(N_t, 2 * Nc);//in case of - //reffYY_prov(N_t, 2 * Nc); - //here we select the good spectral color inside the 113 values //call tempxy to calculate for 114 color references Temp and XYZ with cat02 @@ -6437,48 +4863,28 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double reff_spect_yy_camera[j][repref] = TY[j] / (TX[j] + TY[j] + TZ[j]); // y from xyY } - int deltarepref = settings->itcwb_delta; + const int deltarepref = settings->itcwb_delta; - for (int nn = 0; nn <= 2; nn++) { + StopWatch Stop1("Loop 1"); + for (int nn = 0, drep = -deltarepref; nn <= 2; ++nn, drep += deltarepref) { //three loop to refine color if temp camera is probably not very good - int drep = 0; - - if (nn == 0) { - drep = -deltarepref; - } - - if (nn == 2) { - drep = +deltarepref; - } - - int rep = repref + drep; - - if (rep > N_t) { - rep = N_t; - } - - if (rep < 0) { - rep = 0; - } + const int rep = rtengine::LIM(repref + drep, 0, N_t); + StopWatch Stop2("Loop 2"); //initialize calculation of xy current for tempref +#ifdef _OPENMP + #pragma omp parallel for +#endif for (int y = 0; y < bfh ; y += 10) { - for (int x = 0; x < bfw ; x += 10) { - int yy = y / 10; - int xx = x / 10 ; - float x_c = 0.f, y_c = 0.f, Y_c = 0.f; - float x_x = 0.f, y_y = 0.f, z_z = 0.f; - float RR = rmm[rep] * redloc[y][x]; - float GG = gmm[rep] * greenloc[y][x]; - float BB = bmm[rep] * blueloc[y][x]; - Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); - xc[yy][xx] = x_c; - yc[yy][xx] = y_c; - Yc[yy][xx] = Y_c; + int yy = y / 10; + for (int x = 0, xx = 0; x < bfw ; x += 10, ++xx) { + const float RR = rmm[rep] * redloc[y][x]; + const float GG = gmm[rep] * greenloc[y][x]; + const float BB = bmm[rep] * blueloc[y][x]; + Color::rgbxyY(RR, GG, BB, xc[yy][xx], yc[yy][xx], Yc[yy][xx], wp); } - } - + Stop2.stop(); //histogram xy depend of temp...but in most cases D45 ..D65.. //calculate for this image the mean values for each family of color, near histogram x y (number) //xy vary from x 0..0.77 y 0..0.82 @@ -6488,11 +4894,12 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double // step about 0.02 x 0.32 0.34 y= 0.34 0.36 skin -- sky x 0.24 0.30 y 0.28 0.32 //big step about 0.2 - histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy, area, inter); + histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy); } + Stop1.stop(); //calculate x y Y - int sizcurrref = siza;//choice of number of correlate colors in image + const int sizcurrref = siza;//choice of number of correlate colors in image histcurrref(N_t, sizcurrref); xx_curref(N_t, sizcurrref); yy_curref(N_t, sizcurrref); @@ -6506,48 +4913,36 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double hiss Wbhis [siza]; - int n1 = 0; - int n4 = 0; - int n15 = 0; - int n30 = 0; - int ntr = 0; for (int nh = 0; nh < siza; nh++) { Wbhis[nh].histnum = histxy[nh]; Wbhis[nh].index = nh; - Wbhis[nh].interest = inter[nh]; } //sort in ascending order std::sort(Wbhis, Wbhis + siza, Wbhis[0]); - for (int nh = 0; nh < siza; nh++) { -// printf("nh=%i", Wbhis[nh].index); - } - + int n1 = 0; + int n4 = 0; + int n15 = 0; + int n30 = 0; //part to improve for (int nh = 0; nh < siza; nh++) { - if (Wbhis[nh].histnum < 1) { - n1++; //keep only existing color but avoid to small - } - - if (Wbhis[nh].histnum < 4) { - n4++; //keep only existing color but avoid to small - } - - if (Wbhis[nh].histnum < 15) { - n15++; //keep only existing color but avoid to small - } - if (Wbhis[nh].histnum < 30) { n30++; //keep only existing color but avoid to small + if (Wbhis[nh].histnum < 15) { + n15++; //keep only existing color but avoid to small + if (Wbhis[nh].histnum < 4) { + n4++; //keep only existing color but avoid to small + if (Wbhis[nh].histnum < 1) { + n1++; //keep only existing color but avoid to small + } + } + } } - - } - - ntr = n30; + int ntr = n30; if (ntr > (siza - 25)) { ntr = n15; //if to less elements 25 elements mini @@ -6567,24 +4962,22 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double chrom wbchro[sizcu4]; - double swpr = (Txyz[repref].XX + Txyz[repref].ZZ + 1.); - double xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes - double ywpr = 1. / swpr; + const double swpr = (Txyz[repref].XX + Txyz[repref].ZZ + 1.); + const double xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes + const double ywpr = 1. / swpr; - for (int i = 0; i < sizcu4; i++) { //take the max values - int j = i; - histcurrref[j][repref] = (float) Wbhis[siza - (j + 1)].histnum; - xx_curref[j][repref] = xxx[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; - yy_curref[j][repref] = yyy[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; - YY_curref[j][repref] = YYY[Wbhis[siza - (j + 1)].index] / histcurrref[j][repref]; -// printf("xx=%f yy=%f\n", xx_curref[j][repref], yy_curref[j][repref]); + for (int i = 0; i < sizcu4; ++i) { //take the max values + histcurrref[i][repref] = (float) Wbhis[siza - (i + 1)].histnum; + xx_curref[i][repref] = xxx[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + yy_curref[i][repref] = yyy[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + YY_curref[i][repref] = YYY[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; } - estimchrom = 0.f; + float estimchrom = 0.f; - for (int nh = 0; nh < sizcu4; nh++) { - float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); + for (int nh = 0; nh < sizcu4; ++nh) { + const float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); wbchro[nh].chroxy_number = chxy * std::sqrt(histcurrref[nh][repref]); wbchro[nh].chroxy = std::sqrt(chxy); wbchro[nh].chrox = xx_curref[nh][repref]; @@ -6595,68 +4988,40 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } estimchrom /= sizcu4; - //printf("estimchrom=%f \n", estimchrom); if (settings->itcwb_sort) { //sort in ascending with chroma values - std::sort(wbchro, wbchro + sizcu4, wbchro[0]); } - /* - for (int nh = 0; nh < sizcu4; nh++) { - printf("nh=%i chroma_xy=%f chrox=%f chroy=%f\n", nh, wbchro[nh].chroxy, wbchro[nh].chrox, wbchro[nh].chroy); - } - */ - int maxval = settings->itcwb_thres;//max values of color to find correllation + const int maxval = rtengine::LIM(settings->itcwb_thres, 10, 55);//max values of color to find correllation - if (maxval < 10) { - maxval = 10; - } + sizcurr2ref = rtengine::min(sizcurr2ref, maxval); //keep about the biggest values, - if (maxval > 55) { - maxval = 55; - } - - if (sizcurr2ref > maxval) { - sizcurr2ref = maxval; //keep about the biggest values, - } - - - for (int i = 0; i < sizcurr2ref; i++) { + for (int i = 0; i < sizcurr2ref; ++i) { //is condition chroxy necessary ? if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral w++; xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; - // printf("xx_cu=%f yy_cu=%f Y=%f chro=%f\n", xx_curref_reduc[w][repref], yy_curref_reduc[w][repref], YY_curref_reduc[w][repref],std::sqrt(wbchro[sizcu4 - (i + 1)].chroxy)); } } //calculate deltaE xx to find best values of spectrals datas - int maxnb = settings->itcwb_sizereference; - - if (maxnb > 5) { - maxnb = 5; - } - - if (maxnb < 1) { - maxnb = 1; - } - + int maxnb = rtengine::LIM(settings->itcwb_sizereference, 1, 5); if (settings->itcwb_thres > 39) { maxnb = 200 / settings->itcwb_thres; } - for (int nb = 1; nb <= maxnb; nb ++) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 - for (int i = 0; i < w; i++) { + for (int nb = 1; nb <= maxnb; ++nb) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 + for (int i = 0; i < w; ++i) { float mindeltaE = 100000.f; int kN = 0; for (int j = 0; j < Nc ; j++) { - if (good_spectral[j] == 0) { - float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); + if (!good_spectral[j]) { + const float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); if (deltaE < mindeltaE) { mindeltaE = deltaE; @@ -6665,31 +5030,26 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - good_spectral[kN] = 1;//good spectral are spectral color that match color histogram xy - //printf("k=%i ", kN); + good_spectral[kN] = true;//good spectral are spectral color that match color histogram xy } } //reconvert to RGB for "reduction" for (int i = 0; i < w; i++) { - float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; - float Y = 65535.f * YY_curref_reduc[i][repref]; - float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + const float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + const float Y = 65535.f * YY_curref_reduc[i][repref]; + const float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; float r, g, b; Color::xyz2rgb(X, Y, Z, r, g, b, wip); - r /= rmm[repref]; - g /= gmm[repref]; - b /= bmm[repref]; - R_curref_reduc[i][repref] = r; - G_curref_reduc[i][repref] = g; - B_curref_reduc[i][repref] = b; + R_curref_reduc[i][repref] = r / rmm[repref]; + G_curref_reduc[i][repref] = g / gmm[repref]; + B_curref_reduc[i][repref] = b / bmm[repref]; } //end first part - //Now begin real calculations separated = false; ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants @@ -6707,57 +5067,37 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //calculate x y z for each pixel with multiplier rmm gmm bmm - for (int tt = 0; tt < N_t; tt++) {//N_t - // double swp = (Txyz[tt].XX + Txyz[tt].ZZ + 1.); - // double xwp = Txyz[tt].XX / swp; - // double ywp = 1. / swp; - - - for (int i = 0; i < w; i++) { - float x_c = 0.f, y_c = 0.f, Y_c = 0.f; - float x_x = 0.f, y_y = 0.f, z_z = 0.f; - - float RR = rmm[tt] * R_curref_reduc[i][repref]; - float GG = gmm[tt] * G_curref_reduc[i][repref]; - float BB = bmm[tt] * B_curref_reduc[i][repref]; - Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); - // xxyycurr_reduc[2 * i][tt] = fabs(x_c - xwp); - // xxyycurr_reduc[2 * i + 1][tt] = fabs(y_c - ywp); - xxyycurr_reduc[2 * i][tt] = x_c; - xxyycurr_reduc[2 * i + 1][tt] = y_c; - // printf("w=%i tt=%i xx=%f yy=%f\n",i, tt, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i +1][tt]); + for (int tt = 0; tt < N_t; ++tt) {//N_t + for (int i = 0; i < w; ++i) { + float unused; + const float RR = rmm[tt] * R_curref_reduc[i][repref]; + const float GG = gmm[tt] * G_curref_reduc[i][repref]; + const float BB = bmm[tt] * B_curref_reduc[i][repref]; + Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wp); } - for (int j = 0; j < Nc ; j++) { + for (int j = 0; j < Nc ; ++j) { reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY - //reffYY_prov[j][tt] = Ty[j][tt];//Y - // printf("w=%i tt=%i xx=%f yy=%f\n",j, tt,reffxxyy_prov[2 * kk][tt] ,reffxxyy_prov[2 * kk + 1][tt]); - } int kk = -1; - for (int i = 0; i < Nc ; i++) { - if (good_spectral[i] == 1) { + for (int i = 0; i < Nc ; ++i) { + if (good_spectral[i]) { kk++; //we calculate now absolute chroma for each spectral color - // reffxxyy[2 * kk][tt] = fabs(reffxxyy_prov[2 * i][tt] - xwp); - // reffxxyy[2 * kk + 1][tt] = fabs(reffxxyy_prov[2 * i + 1][tt] - ywp); - reff_spect_xxyy[2 * kk][tt] = reff_spect_xxyy_prov[2 * i][tt]; + reff_spect_xxyy[2 * kk][tt] = reff_spect_xxyy_prov[2 * i][tt]; reff_spect_xxyy[2 * kk + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; - //printf("w=%i tt=%i xx=%f yy=%f\n",i, tt,reffxxyy[2 * kk][tt] ,reffxxyy[2 * kk + 1][tt]); - // reffYY[kk][tt] = reffYY_prov[i][tt]; } } float student = 0.f; - studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kk, tt, student); //for xy - //printf("tt=%i st=%f\n", tt, student); - float abstud = fabs(student); + + const float abstud = std::fabs(student); if (abstud < minstud) { // find the minimum Student minstud = abstud; @@ -6778,49 +5118,34 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double }; Tempgreen Tgstud[N_g]; - for (int i = 0; i < N_g; i++) {//init variables with + for (int i = 0; i < N_g; ++i) {//init variables with Tgstud[i].student = 1000.f;//max value to initialize Tgstud[i].tempref = 57; Tgstud[i].greenref = 39; } - int dgoodref = settings->itcwb_greendeltatemp; + const int dgoodref = rtengine::min(settings->itcwb_greendeltatemp, 4); + const int scantempbeg = rtengine::max(goodref - (dgoodref + 1), 1); + const int scantempend = rtengine::min(goodref + dgoodref, N_t - 1); - if (dgoodref > 4) { - dgoodref = 4; - } - - int scantempbeg = goodref - (dgoodref + 1); - - if (scantempbeg < 1) { - scantempbeg = 1; - } - - int scantempend = goodref + dgoodref; - - if (scantempend > N_t - 1) { - scantempend = N_t - 1; - } - - for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; gr++) { + const bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; ++gr) { float minstudgr = 100000.f; int goodrefgr = 1; - for (int tt = scantempbeg; tt < scantempend; tt++) { + for (int tt = scantempbeg; tt < scantempend; ++tt) { double r, g, b; - float rm, gm, bm; - ColorTemp WBiter = ColorTemp(Txyz[tt].Tem, gree[gr].green, 1.f, "Custom"); + ColorTemp WBiter(Txyz[tt].Tem, gree[gr].green, 1.f, "Custom"); WBiter.getMultipliers(r, g, b); - rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; - gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; - bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + float rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; + float gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; + float bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; float new_scale_mul[4]; - bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) - || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); - float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); + const float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); rm = new_scale_mul[0] / scale_mul[0] * gain; gm = new_scale_mul[1] / scale_mul[1] * gain; @@ -6831,66 +5156,42 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } - for (int tt = scantempbeg; tt < scantempend; tt++) {//N_t - // double swp = (Txyz[tt].XX + Txyz[tt].ZZ + 1.); - // double xwp = Txyz[tt].XX / swp; - // double ywp = 1. / swp; - - - for (int i = 0; i < w; i++) { - float x_c = 0.f, y_c = 0.f, Y_c = 0.f; - float x_x = 0.f, y_y = 0.f, z_z = 0.f; - - float RR = rmm[tt] * R_curref_reduc[i][repref]; - float GG = gmm[tt] * G_curref_reduc[i][repref]; - float BB = bmm[tt] * B_curref_reduc[i][repref]; - Color::rgbxyY(RR, GG, BB, x_c, y_c, Y_c, x_x, y_y, z_z, wp); - xxyycurr_reduc[2 * i][tt] = x_c; - xxyycurr_reduc[2 * i + 1][tt] = y_c; - // printf("w=%i tt=%i xx=%f yy=%f\n",i, tt, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i +1][tt]); + for (int tt = scantempbeg; tt < scantempend; ++tt) {//N_t + for (int i = 0; i < w; ++i) { + float unused; + const float RR = rmm[tt] * R_curref_reduc[i][repref]; + const float GG = gmm[tt] * G_curref_reduc[i][repref]; + const float BB = bmm[tt] * B_curref_reduc[i][repref]; + Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wp); } - for (int j = 0; j < Nc ; j++) { + for (int j = 0; j < Nc ; ++j) { reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY - // reffYY_prov[j][tt] = Ty[j][tt];//Y - // printf("w=%i tt=%i xx=%f yy=%f\n",j, tt,reffxxyy_prov[2 * kk][tt] ,reffxxyy_prov[2 * kk + 1][tt]); - } //degrade correllation with color high chroma, but not too much...seems not good, but keep in case of?? if (estimchrom < 0.025f) {//very smal value of chroma for image - good_spectral[0] = 1;//blue - //good_spectral[1] = 1;//blue - // good_spectral[97] = 1;//blue - // good_spectral[93] = 1;//purple - // good_spectral[7] = 1;//green - good_spectral[11] = 1;//green - //good_spectral[42] = 1;//green - // good_spectral[75] = 1;//green - // good_spectral[46] = 1;//red - good_spectral[62] = 1;//red - // good_spectral[63] = 1;//red - // good_spectral[91] = 1;//ora - + good_spectral[0] = true;//blue + good_spectral[11] = true;//green + good_spectral[62] = true;//red } int kkg = -1; - for (int i = 0; i < Nc ; i++) { - if (good_spectral[i] == 1) { + for (int i = 0; i < Nc ; ++i) { + if (good_spectral[i]) { kkg++; - reff_spect_xxyy[2 * kkg][tt] = reff_spect_xxyy_prov[2 * i][tt]; + reff_spect_xxyy[2 * kkg][tt] = reff_spect_xxyy_prov[2 * i][tt]; reff_spect_xxyy[2 * kkg + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; - // reffYY[kkg][tt] = reffYY_prov[i][tt]; } } float studentgr = 0.f; studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kkg, tt, studentgr); //for xy - float abstudgr = fabs(studentgr); + const float abstudgr = std::fabs(studentgr); if (abstudgr < minstudgr) { // find the minimum Student minstudgr = abstudgr; @@ -6902,15 +5203,10 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Tgstud[gr].student = minstudgr; } - } std::sort(Tgstud, Tgstud + N_g, Tgstud[0]); - for (int j = 0; j < 20; j++) { - // printf("reftemp=%i refgreen=%i stud=%f \n", Tgstud[j].tempref, Tgstud[j].greenref, Tgstud[j].student); - } - //now search the value of green the nearest of 1 with a good student value // I take the 3 first values //I admit a symetrie in green coefiicient for rgb multiplier...probably not excatly true @@ -6919,17 +5215,17 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int greengoodprov; int goodrefprov; float studprov; - int goodref0 = Tgstud[0].tempref; - int greengood0 = Tgstud[0].greenref - 39;//39 green = 1 - float stud0 = Tgstud[0].student; - int goodref1 = Tgstud[1].tempref; - float stud1 = Tgstud[1].student; - int greengood1 = Tgstud[1].greenref - 39; - int goodref2 = Tgstud[2].tempref; - int greengood2 = Tgstud[2].greenref - 39; - float stud2 = Tgstud[2].student; + const int goodref0 = Tgstud[0].tempref; + const int greengood0 = Tgstud[0].greenref - 39;//39 green = 1 + const float stud0 = Tgstud[0].student; + const int goodref1 = Tgstud[1].tempref; + const float stud1 = Tgstud[1].student; + const int greengood1 = Tgstud[1].greenref - 39; + const int goodref2 = Tgstud[2].tempref; + const int greengood2 = Tgstud[2].greenref - 39; + const float stud2 = Tgstud[2].student; - if (fabs(greengood2) < fabs(greengood1)) { + if (std::fabs(greengood2) < std::fabs(greengood1)) { greengoodprov = greengood2; goodrefprov = goodref2; studprov = stud2; @@ -6940,7 +5236,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } - if (fabs(greengoodprov) < fabs(greengood0)) { + if (std::fabs(greengoodprov) < std::fabs(greengood0)) { goodref = goodrefprov; greengood = greengoodprov + 39; studgood = studprov; @@ -6956,32 +5252,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } - histcurr(0, 0); - histcurrref(0, 0); - xxyycurr(0, 0); - xxyycurr_reduc(0, 0); - xx_curref(0, 0); - yy_curref(0, 0); - YY_curref(0, 0); - - reff_spect_xxyy(0, 0); - YYcurr(0, 0); - YYcurr_reduc(0, 0); - reff_spect_yy_camera(0, 0); - reff_spect_xx_camera(0, 0); - xx_curref_reduc(0, 0); - yy_curref_reduc(0, 0); - YY_curref_reduc(0, 0); - - R_curref_reduc(0, 0); - G_curref_reduc(0, 0); - B_curref_reduc(0, 0); - - reff_spect_xxyy_prov(0, 0); - -// reffYY(0, 0); -// reffYY_prov(0, 0); - avg_rm = 10000.f * rmm[goodref]; avg_gm = 10000.* gmm[goodref]; avg_bm = 10000.f * bmm[goodref]; @@ -6990,47 +5260,9 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double tempitc = Txyz[goodref].Tem; } - if (settings->verbose) { printf("ITCWB tempitc=%f gritc=%f stud=%f \n", tempitc, greenitc, studgood); } - - - xc(0, 0); - yc(0, 0); - Yc(0, 0); - - - - for (int i = 0; i < Nc; i++) { - delete [] Tx[i]; - delete [] Ty[i]; - delete [] Tz[i]; - delete [] Ta[i]; - delete [] Tb[i]; - delete [] TL[i]; - - } - - delete [] Tx; - delete [] Ty; - delete [] Tz; - delete [] Ta; - delete [] Tb; - delete [] TL; - delete [] TX; - delete [] TY; - delete [] TZ; - delete [] good_spectral; - - - delete [] rmm; - delete [] gmm; - delete [] bmm; - - - - } void RawImageSource::WBauto(double & tempref, double & greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double & avg_rm, double & avg_gm, double & avg_bm, double & tempitc, double & greenitc, float & studgood, bool & twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams & cmp, const RAWParams & raw) @@ -7153,7 +5385,7 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in double Yr = Y / 65535.; double Zr = Z / 65535.; - Ciecam02::xyz_to_cat02float ( redloc[i][j], greenloc[i][j], blueloc[i][j], Xr, Yr, Zr, 1); + Ciecam02::xyz_to_cat02float (redloc[i][j], greenloc[i][j], blueloc[i][j], Xr, Yr, Zr, 1); redloc[i][j] *= 65535.f; greenloc[i][j] *= 65535.f; blueloc[i][j] *= 65535.f; @@ -7189,7 +5421,7 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref for (int j = start; j < end; j++) { if (ri->getSensorType() != ST_BAYER) { - double dr = CLIP(initialGain * (rawData[i][3 * j] )); + double dr = CLIP(initialGain * (rawData[i][3 * j] )); double dg = CLIP(initialGain * (rawData[i][3 * j + 1])); double db = CLIP(initialGain * (rawData[i][3 * j + 2])); @@ -7202,7 +5434,7 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref avg_b += db; rn = gn = ++bn; } else { - int c = FC( i, j); + int c = FC(i, j); double d = CLIP(initialGain * (rawData[i][j])); if (d > clipHigh) { @@ -7225,7 +5457,7 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref } } else { if (ri->getSensorType() != ST_BAYER) { - if(ri->getSensorType() == ST_FUJI_XTRANS) { + if (ri->getSensorType() == ST_FUJI_XTRANS) { const double compval = clipHigh / initialGain; #ifdef _OPENMP #pragma omp parallel @@ -7272,7 +5504,7 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref for (int j = 32; j < W - 32; j++) { // each loop read 1 rgb triplet value - double dr = CLIP(initialGain * (rawData[i][3 * j] )); + double dr = CLIP(initialGain * (rawData[i][3 * j] )); double dg = CLIP(initialGain * (rawData[i][3 * j + 1])); double db = CLIP(initialGain * (rawData[i][3 * j + 2])); @@ -7369,16 +5601,16 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref if (wbpar.method == "autitcgreen") { //not used - redAWBMul = rm = avg_rm * refwb_red; + redAWBMul = rm = avg_rm * refwb_red; greenAWBMul = gm = avg_gm * refwb_green; - blueAWBMul = bm = avg_bm * refwb_blue; + blueAWBMul = bm = avg_bm * refwb_blue; } else { - const double reds = avg_r / std::max(1, rn) * refwb_red; + const double reds = avg_r / std::max(1, rn) * refwb_red; const double greens = avg_g / std::max(1, gn) * refwb_green; - const double blues = avg_b / std::max(1, bn) * refwb_blue; - redAWBMul = rm = imatrices.rgb_cam[0][0] * reds + imatrices.rgb_cam[0][1] * greens + imatrices.rgb_cam[0][2] * blues; + const double blues = avg_b / std::max(1, bn) * refwb_blue; + redAWBMul = rm = imatrices.rgb_cam[0][0] * reds + imatrices.rgb_cam[0][1] * greens + imatrices.rgb_cam[0][2] * blues; greenAWBMul = gm = imatrices.rgb_cam[1][0] * reds + imatrices.rgb_cam[1][1] * greens + imatrices.rgb_cam[1][2] * blues; - blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; + blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; } } @@ -7420,7 +5652,7 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) for (int j = start; j < end; j++) { if (ri->getSensorType() != ST_BAYER) { - double dr = CLIP(initialGain * (rawData[i][3 * j] )); + double dr = CLIP(initialGain * (rawData[i][3 * j] )); double dg = CLIP(initialGain * (rawData[i][3 * j + 1])); double db = CLIP(initialGain * (rawData[i][3 * j + 2])); @@ -7433,7 +5665,7 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) avg_b += db; rn = gn = ++bn; } else { - int c = FC( i, j); + int c = FC(i, j); double d = CLIP(initialGain * (rawData[i][j])); if (d > clipHigh) { @@ -7456,7 +5688,7 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) } } else { if (ri->getSensorType() != ST_BAYER) { - if(ri->getSensorType() == ST_FUJI_XTRANS) { + if (ri->getSensorType() == ST_FUJI_XTRANS) { const double compval = clipHigh / initialGain; #ifdef _OPENMP #pragma omp parallel @@ -7503,7 +5735,7 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) for (int j = 32; j < W - 32; j++) { // each loop read 1 rgb triplet value - double dr = CLIP(initialGain * (rawData[i][3 * j] )); + double dr = CLIP(initialGain * (rawData[i][3 * j] )); double dg = CLIP(initialGain * (rawData[i][3 * j + 1])); double db = CLIP(initialGain * (rawData[i][3 * j + 2])); @@ -7584,19 +5816,19 @@ void RawImageSource::getAutoWBMultipliers (double &rm, double &gm, double &bm) } } - if( settings->verbose ) { + if (settings->verbose) { printf ("AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); } // return ColorTemp (pow(avg_r/rn, 1.0/6.0)*img_r, pow(avg_g/gn, 1.0/6.0)*img_g, pow(avg_b/bn, 1.0/6.0)*img_b); - double reds = avg_r / std::max(1, rn) * refwb_red; + double reds = avg_r / std::max(1, rn) * refwb_red; double greens = avg_g / std::max(1, gn) * refwb_green; - double blues = avg_b / std::max(1, bn) * refwb_blue; + double blues = avg_b / std::max(1, bn) * refwb_blue; - redAWBMul = rm = imatrices.rgb_cam[0][0] * reds + imatrices.rgb_cam[0][1] * greens + imatrices.rgb_cam[0][2] * blues; + redAWBMul = rm = imatrices.rgb_cam[0][0] * reds + imatrices.rgb_cam[0][1] * greens + imatrices.rgb_cam[0][2] * blues; greenAWBMul = gm = imatrices.rgb_cam[1][0] * reds + imatrices.rgb_cam[1][1] * greens + imatrices.rgb_cam[1][2] * blues; - blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; + blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; } ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) @@ -7608,7 +5840,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vectorgetSensorType() != ST_BAYER) { - if(ri->getSensorType() == ST_FUJI_XTRANS) { + if (ri->getSensorType() == ST_FUJI_XTRANS) { int d[9][2] = {{0, 0}, { -1, -1}, { -1, 0}, { -1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}; for (size_t i = 0; i < red.size(); i++) { @@ -7621,7 +5853,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector= 0 && yv >= 0 && xv < W && yv < H) { + if (xv >= 0 && yv >= 0 && xv < W && yv < H) { if (ri->ISXTRANSRED(yv, xv)) { //RED rloc += (rawData[yv][xv]); rnbrs++; @@ -7659,7 +5891,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector 52500 || + if (initialGain * (rawData[yr][3 * xr] ) > 52500 || initialGain * (rawData[yg][3 * xg + 1]) > 52500 || initialGain * (rawData[yb][3 * xb + 2]) > 52500) { continue; @@ -7671,7 +5903,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector= 0 && ymin >= 0 && xmax < W && ymax < H) { - reds += (rawData[yr][3 * xr] ); + reds += (rawData[yr][3 * xr] ); greens += (rawData[yg][3 * xg + 1]); blues += (rawData[yb][3 * xb + 2]); rn++; @@ -7694,7 +5926,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector= 0 && yv >= 0 && xv < W && yv < H) { + if (xv >= 0 && yv >= 0 && xv < W && yv < H) { if (c == 0) { //RED rloc += (rawData[yv][xv]); rnbrs++; @@ -7730,7 +5962,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector= 0 && yv >= 0 && xv < W && yv < H) { + if (xv >= 0 && yv >= 0 && xv < W && yv < H) { if (c == 0) { //RED rloc += (rawData[yv][xv]); rnbrs++; @@ -7766,7 +5998,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector= 0 && yv >= 0 && xv < W && yv < H) { + if (xv >= 0 && yv >= 0 && xv < W && yv < H) { if (c == 0) { //RED rloc += (rawData[yv][xv]); rnbrs++; @@ -7880,7 +6112,7 @@ void RawImageSource::inverse33 (const double (*rgb_cam)[3], double (*cam_rgb)[3] { double nom = (rgb_cam[0][2] * rgb_cam[1][1] * rgb_cam[2][0] - rgb_cam[0][1] * rgb_cam[1][2] * rgb_cam[2][0] - rgb_cam[0][2] * rgb_cam[1][0] * rgb_cam[2][1] + rgb_cam[0][0] * rgb_cam[1][2] * rgb_cam[2][1] + - rgb_cam[0][1] * rgb_cam[1][0] * rgb_cam[2][2] - rgb_cam[0][0] * rgb_cam[1][1] * rgb_cam[2][2] ); + rgb_cam[0][1] * rgb_cam[1][0] * rgb_cam[2][2] - rgb_cam[0][0] * rgb_cam[1][1] * rgb_cam[2][2]); cam_rgb[0][0] = (rgb_cam[1][2] * rgb_cam[2][1] - rgb_cam[1][1] * rgb_cam[2][2]) / nom; cam_rgb[0][1] = -(rgb_cam[0][2] * rgb_cam[2][1] - rgb_cam[0][1] * rgb_cam[2][2]) / nom; cam_rgb[0][2] = (rgb_cam[0][2] * rgb_cam[1][1] - rgb_cam[0][1] * rgb_cam[1][2]) / nom; @@ -7940,7 +6172,7 @@ void RawImageSource::init () void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int &B) { - if(d1x) { // Nikon D1x has special sensor. We just skip it + if (d1x) { // Nikon D1x has special sensor. We just skip it R = G = B = 0; return; } @@ -7963,9 +6195,9 @@ void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int ynew = LIM(ynew, 0, H - 1); int c = ri->getSensorType() == ST_FUJI_XTRANS ? ri->XTRANSFC(ynew,xnew) : ri->FC(ynew,xnew); int val = round(rawData[ynew][xnew] / scale_mul[c]); - if(c == 0) { + if (c == 0) { R = val; G = 0; B = 0; - } else if(c == 2) { + } else if (c == 2) { R = 0; G = 0; B = val; } else { R = 0; G = val; B = 0; From 96ab9863ddfcb85bdd3f44e977971694fe9309b4 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 10:37:32 +0100 Subject: [PATCH 165/264] fix segfault in ItcWB. #5676 --- rtengine/rawimagesource.cc | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index fdc122569..daba0be2a 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4753,12 +4753,12 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double }; const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point constexpr int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values - array2D Tx(Nc, N_t); - array2D Ty(Nc, N_t); - array2D Tz(Nc, N_t); - array2D Ta(Nc, N_t); - array2D Tb(Nc, N_t); - array2D TL(Nc, N_t); + array2D Tx(N_t, Nc); + array2D Ty(N_t, Nc); + array2D Tz(N_t, Nc); + array2D Ta(N_t, Nc); + array2D Tb(N_t, Nc); + array2D TL(N_t, Nc); double TX[Nc]; double TY[Nc]; double TZ[Nc]; @@ -4865,12 +4865,10 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double const int deltarepref = settings->itcwb_delta; - StopWatch Stop1("Loop 1"); for (int nn = 0, drep = -deltarepref; nn <= 2; ++nn, drep += deltarepref) { //three loop to refine color if temp camera is probably not very good const int rep = rtengine::LIM(repref + drep, 0, N_t); - StopWatch Stop2("Loop 2"); //initialize calculation of xy current for tempref #ifdef _OPENMP #pragma omp parallel for @@ -4884,7 +4882,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Color::rgbxyY(RR, GG, BB, xc[yy][xx], yc[yy][xx], Yc[yy][xx], wp); } } - Stop2.stop(); //histogram xy depend of temp...but in most cases D45 ..D65.. //calculate for this image the mean values for each family of color, near histogram x y (number) //xy vary from x 0..0.77 y 0..0.82 @@ -4896,7 +4893,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy); } - Stop1.stop(); //calculate x y Y const int sizcurrref = siza;//choice of number of correlate colors in image From aa389dbcae57d5245912cef11a5166c86e29c5fd Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 29 Feb 2020 12:51:17 +0100 Subject: [PATCH 166/264] Ciecam02 fixed bad temp and tint cat02preset --- rtengine/improccoordinator.cc | 5 +++++ rtengine/rtengine.h | 2 ++ rtgui/colorappearance.cc | 16 ++++++++++++++++ rtgui/colorappearance.h | 1 + 4 files changed, 24 insertions(+) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index fc3b29b9f..1f3c91922 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1159,6 +1159,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (params->colorappearance.autoybscen && acListener && params->colorappearance.enabled && !params->colorappearance.presetcat02) { acListener->ybCamChanged((int) yb); //real value Yb scene } + + if (params->colorappearance.enabled && params->colorappearance.presetcat02) { + acListener->wbCamChanged(params->wb.temperature, params->wb.green); //real temp and tint + } + } else { // CIECAM is disabled, we free up its image buffer to save some space if (ncie) { diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 2d98c4ac2..e6074d50b 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -355,6 +355,8 @@ public : virtual void autoCamChanged(double ccam, double ccamout) = 0; virtual void adapCamChanged(double cadap) = 0; virtual void ybCamChanged(int yb) = 0; + virtual void wbCamChanged(double tem, double tin) = 0; + }; class AutoChromaListener diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index eed1c074b..262045d12 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -1631,6 +1631,22 @@ void ColorAppearance::adapCamChanged (double cadap) ); } + +void ColorAppearance::wbCamChanged (double temp, double tin) +{ + + idle_register.add( + [this, temp, tin]() -> bool + { + disableListener(); + tempout->setValue(temp); + greenout->setValue(tin); + enableListener(); + return false; + } + ); +} + void ColorAppearance::ybCamChanged (int ybsc) { if(presetcat02->get_active()){ diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h index 7379eb9b0..2f060edea 100644 --- a/rtgui/colorappearance.h +++ b/rtgui/colorappearance.h @@ -63,6 +63,7 @@ public: void autoCamChanged (double ccam, double ccamout) override; bool autoCamComputed_ (); void adapCamChanged (double cadap) override; + void wbCamChanged(double tem, double tin) override; bool adapCamComputed_ (); void ybCamChanged (int yb) override; bool ybCamComputed_ (); From be5e447f53b3b0614552d8d0e618d9bc7435845d Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 13:16:42 +0100 Subject: [PATCH 167/264] Itcwb : cleanup and speedup, #5676 --- rtengine/colortemp.cc | 252 ++++--------------------------------- rtengine/rawimagesource.cc | 174 ++++++++----------------- rtgui/colorappearance.cc | 1 - 3 files changed, 79 insertions(+), 348 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 0edd7aeb2..75efa7979 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -3210,8 +3210,8 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, //calculate spectral data for blackbody at temp! double ColorTemp::blackbody_spect(double wavelength, double temperature) { - double wlm = wavelength * 1e-9; /* Wavelength in meters */ - return (3.7417715247e-16 / pow(wlm, 5)) / //3.7417..= c1 = 2*Pi*h*c2 where h=Planck constant, c=velocity of light + const double wlm = wavelength * 1e-9; /* Wavelength in meters */ + return (3.7417715247e-16 / (wlm * rtengine::pow4(wlm))) / //3.7417..= c1 = 2*Pi*h*c2 where h=Planck constant, c=velocity of light (xexp(1.438786e-2 / (wlm * temperature)) - 1.0); //1.4387..= c2 = h*c/k where k=Boltzmann constant } @@ -3337,62 +3337,38 @@ void ColorTemp::spectrum_to_color_xyz_preset(const double* spec_color, const dou void ColorTemp::spectrum_to_color_xyz_daylight(const double* spec_color, double _m1, double _m2, double &xx, double &yy, double &zz) { int i; - double lambda, X = 0, Y = 0, Z = 0, Yo = 0; + double lambda, X = 0, Y = 0, Z = 0; for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { - - double Me; - double Mc; - - Me = get_spectral_color(lambda, spec_color); - Mc = daylight_spect(lambda, _m1, _m2); + const double Me = spec_color[i]; + const double Mc = daylight_spect(lambda, _m1, _m2); X += Mc * cie_colour_match_jd[i][0] * Me; Y += Mc * cie_colour_match_jd[i][1] * Me; Z += Mc * cie_colour_match_jd[i][2] * Me; } - for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { - - double Ms; - - Ms = daylight_spect(lambda, _m1, _m2); - Yo += cie_colour_match_jd[i][1] * Ms; - } - - xx = X / Yo; - yy = Y / Yo; - zz = Z / Yo; + xx = X / Y; + yy = 1.0; + zz = Z / Y; } //calculate XYZ from spectrum data (color) and illuminant : J.Desmis december 2011 void ColorTemp::spectrum_to_color_xyz_blackbody(const double* spec_color, double _temp, double &xx, double &yy, double &zz) { int i; - double lambda, X = 0, Y = 0, Z = 0, Yo = 0; + double lambda, X = 0, Y = 0, Z = 0; for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { - - double Me; - double Mc; - - Me = get_spectral_color(lambda, spec_color); - Mc = blackbody_spect(lambda, _temp); + const double Me = spec_color[i]; + const double Mc = blackbody_spect(lambda, _temp); X += Mc * cie_colour_match_jd[i][0] * Me; Y += Mc * cie_colour_match_jd[i][1] * Me; Z += Mc * cie_colour_match_jd[i][2] * Me; } - for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { - - double Ms; - - Ms = blackbody_spect(lambda, _temp); - Yo += cie_colour_match_jd[i][1] * Ms; - } - - xx = X / Yo; - yy = Y / Yo; - zz = Z / Yo; + xx = X / Y; + yy = 1.0; + zz = Z / Y; } double ColorTemp::daylight_spect(double wavelength, double m1, double m2) @@ -3483,7 +3459,7 @@ void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, floa double ZZ; } WbTxyz; //probbaly can be "passed" with rawimagesource.cc but I don't know how to do. - WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after + constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after {2001., 1.273842, 0.145295}, {2101., 1.244008, 0.167533}, {2201., 1.217338, 0.190697}, @@ -3612,68 +3588,22 @@ void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, floa double Zref; } XYZref; XYZref Refxyz[N_c + 1]; - typedef struct XYZrefcat02 { - double Xrefcat; - double Yrefcat; - double Zrefcat; - } XYZrefcat02; - XYZrefcat02 Refxyzcat02[N_c + 1]; for (int i = 0; i < N_c; i++) { Refxyz[i].Xref = 0.f; Refxyz[i].Yref = 0.f; Refxyz[i].Zref = 0.f; - Refxyzcat02[i].Xrefcat = 0.f; - Refxyzcat02[i].Yrefcat = 0.f; - Refxyzcat02[i].Zrefcat = 0.f; } - - struct chrom { - float chroab; - float chroa; - float chrob; - int nn; - float L; - bool operator()(const chrom& lchro, const chrom& rchro) - { - return lchro.chroab < rchro.chroab; - } - - } ; - - // chrom wbchro[N_c + 1]; - double tempw = 5000.; if (separated) { tempw = Txyz[repref].Tem; - // tempw = 5004.; if (tempw <= INITIALBLACKBODY) { - // float aa = 0.f; - // float bb = 0.f; - for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, TX[i], TY[i], TZ[i]); - /* float XX = TX[i] * 65535.f; - float YY = TY[i] * 65535.f; - float ZZ = TZ[i] * 65535.f; - float L, a, b; - Color::XYZ2Lab(XX, YY, ZZ, L, a, b);//only to see Lab values in console - printf("N=%i L=%f a=%f b=%f\n", i, L / 327.68f, a / 327.68f, b / 327.68f); - aa += (a / 327.68f); - bb += (b / 327.68f); - */ } - - /* - aa /= N_c; - bb /= N_c; - printf("aa=%f bb=%f\n", aa, bb); - */ - // } - } else { double m11, m22, x_DD, y_DD, interm2; @@ -3689,97 +3619,21 @@ void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, floa interm2 = (0.0241 + 0.2562 * x_DD - 0.734 * y_DD); m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; - // float aa = 0.f; - // float bb = 0.f; for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, TX[i], TY[i], TZ[i]); - -/* float XX = TX[i] * 65535.f; - float YY = TY[i] * 65535.f; - float ZZ = TZ[i] * 65535.f; - float L, a, b; - Color::XYZ2Lab(XX, YY, ZZ, L, a, b);//only to see Lab values in console - // printf("N=%i L=%f a=%f b=%f\n", i, L / 327.68f, a / 327.6 8f, b / 327.68f); - aa += (a / 327.68f); - bb += (b / 327.68f); - wbchro[i].chroab = (sqrt(SQR(a) + SQR(b))) / 327.68f; - wbchro[i].chroa = a / 327.68f; - wbchro[i].chrob = b / 327.68f; - wbchro[i].nn = i; -*/ - - } -/* - std::sort(wbchro, wbchro + N_c + 1, wbchro[0]); - float ab5 = 0.f; - int n5 = 0; - float ab15 = 0.f; - int n15 = 0; - float ab30 = 0.f; - int n30 = 0; - float ab50 = 0.f; - int n50 = 0; - float ab70 = 0.f; - int n70 = 0; - float ab120 = 0.f; - int n120 = 0; - - for (int i = 0; i < N_c; i++) { - if (wbchro[i].chroab < 5.f) { - ab5 += (wbchro[i].chroa + wbchro[i].chrob); - n5++; - } else if (wbchro[i].chroab < 15.f) { - ab15 += (wbchro[i].chroa + wbchro[i].chrob); - n15++; - } else if (wbchro[i].chroab < 30.f) { - ab30 += (wbchro[i].chroa + wbchro[i].chrob); - n30++; - } else if (wbchro[i].chroab < 50.f) { - ab50 += (wbchro[i].chroa + wbchro[i].chrob); - n50++; - } else if (wbchro[i].chroab < 70.f) { - ab70 += (wbchro[i].chroa + wbchro[i].chrob); - n70++; - } else if (wbchro[i].chroab < 120.f) { - ab120 += (wbchro[i].chroa + wbchro[i].chrob); - n120++; - } - - printf("N=%i nn=%i chr=%f cha=%f chb=%f\n", i, wbchro[i].nn, wbchro[i].chroab, wbchro[i].chroa, wbchro[i].chrob); - } - - printf("ab5=%f n5=%i\n", ab5 / n5, n5); - printf("ab15=%f n15=%i\n", ab15 / n15, n15); - printf("ab30=%f n30=%i\n", ab30 / n30, n30); - printf("ab50=%f n50=%i\n", ab50 / n50, n50); - printf("ab70=%f n70=%i\n", ab70 / n70, n70); - printf("ab120=%f n120=%i\n", ab120 / n120, n120); - aa /= N_c; - bb /= N_c; - printf("aa=%f bb=%f\n", aa, bb); - //very low 15 --, 16 -+, 17 + -, 18 +-, 20 ++, 22 -+, 73 ++, 98 ++, 99 -+, 101 -+, 129 ++, 130 -+, 131 --, - //low 8 +-, 9 --, 10 --, 12 --, 19 -+, 21 -+, 24 -+, 25 ++, 27 ++, 30 ++, 33++, 34 ++, 36 ++, 37++,38 +-, - */ } - } - - if (!separated) { - // std::string wbcat02Method = wbpar.wbcat02Method; - std::string wbcat02Method = "none"; - + } else { for (int tt = 0; tt < N_t; tt++) { tempw = Txyz[tt].Tem; if (tempw <= INITIALBLACKBODY) { - for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref); } - } else { - double m11, m22, x_DD, y_DD, interm2; + double x_DD; if (tempw <= 7000) { x_DD = -4.6070e9 / (tempw * tempw * tempw) + 2.9678e6 / (tempw * tempw) + 0.09911e3 / tempw + 0.244063; @@ -3787,80 +3641,22 @@ void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, floa x_DD = -2.0064e9 / (tempw * tempw * tempw) + 1.9018e6 / (tempw * tempw) + 0.24748e3 / tempw + 0.237040; } - y_DD = -3.0 * x_DD * x_DD + 2.87 * x_DD - 0.275; + const double y_DD = -3.0 * x_DD * x_DD + 2.87 * x_DD - 0.275; //calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D //S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda) - interm2 = (0.0241 + 0.2562 * x_DD - 0.734 * y_DD); - m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; - m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; + const double interm2 = (0.0241 + 0.2562 * x_DD - 0.734 * y_DD); + const double m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; + const double m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref); } } -//CAT02 - - float CAM02BB00 = 1.0, CAM02BB01 = 1.0, CAM02BB02 = 1.0, CAM02BB10 = 1.0, CAM02BB11 = 1.0, CAM02BB12 = 1.0, CAM02BB20 = 1.0, CAM02BB21 = 1.0, CAM02BB22 = 1.0; //for CIECAT02 - float Xwb = Txyz[tt].XX; - float Ywb = 1.; - float Zwb = Txyz[tt].ZZ; - - if (wbcat02Method == "icam") {//not used - icieCAT02float(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, 1.0); - } - - if (wbcat02Method == "cam") { - - cieCAT02float(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, 1.0); - } - - if (wbcat02Method == "none") { - - for (int i = 0; i < N_c; i++) { - Refxyzcat02[i].Xrefcat = CAM02BB00 * Refxyz[i].Xref + CAM02BB01 * Refxyz[i].Yref + CAM02BB02 * Refxyz[i].Zref ; - Refxyzcat02[i].Yrefcat = CAM02BB10 * Refxyz[i].Xref + CAM02BB11 * Refxyz[i].Yref + CAM02BB12 * Refxyz[i].Zref ; - Refxyzcat02[i].Zrefcat = CAM02BB20 * Refxyz[i].Xref + CAM02BB21 * Refxyz[i].Yref + CAM02BB22 * Refxyz[i].Zref; - } - } - -//end CAT02 - for (int i = 0; i < N_c; i++) { - /* float X = 65535.f * Refxyzcat02[i].Xrefcat; - float Y = 65535.f * Refxyzcat02[i].Yrefcat; - float Z = 65535.f * Refxyzcat02[i].Zrefcat; - float L, a, b; - Color::XYZ2Lab(X, Y, Z, L, a, b); - - double som = (Refxyzcat02[i].Xrefcat + Refxyzcat02[i].Yrefcat + Refxyzcat02[i].Zrefcat); - L /= 327.68f; - a /= 327.68f; - b /= 327.68f; - Ta[i][tt] = a; - Tb[i][tt] = b; - TL[i][tt] = L; - TX[i][tt] = X; - TY[i][tt] = Y; - TZ[i][tt] = Z; - */ - //som = 1.; -// Tx[i][tt] = (float) Refxyz[i].Xref; -// Ty[i][tt] = (float) Refxyz[i].Yref; -// Tz[i][tt] = (float) Refxyz[i].Zref; - -// if (wbpar.wbcat02Method == "none") { - if (wbcat02Method == "none") { - - Tx[i][tt] = (float) Refxyz[i].Xref; - Ty[i][tt] = (float) Refxyz[i].Yref; - Tz[i][tt] = (float) Refxyz[i].Zref; - } else { - Tx[i][tt] = (float) Refxyzcat02[i].Xrefcat; - Ty[i][tt] = (float) Refxyzcat02[i].Yrefcat; - Tz[i][tt] = (float) Refxyzcat02[i].Zrefcat; - } - + Tx[i][tt] = Refxyz[i].Xref; + Ty[i][tt] = Refxyz[i].Yref; + Tz[i][tt] = Refxyz[i].Zref; } } } diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index daba0be2a..9f7b9a850 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4292,54 +4292,49 @@ static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const ar } } -void static studentXY(const array2D & YYcurr, const array2D & reffYY, int sizcurr, int Nc, int tt, float & student) +float static studentXY(const array2D & YYcurr, const array2D & reffYY, int sizcurr, int Nc, int tt) { //calculate Student coeff YY float somcurrY = 0.f; float somreffY = 0.f; float somcurr2Y = 0.f; float somreff2Y = 0.f; - float somsqueccurrY = 0.f; - float somsquecreffY = 0.f; - int sizestucurrY = sizcurr; - int sizestureffY = Nc; - for (int i = 0; i < sizestucurrY; i++) { - somcurrY += 100.f * YYcurr[i][tt]; + for (int i = 0; i < sizcurr; i++) { + somcurrY += YYcurr[i][tt]; //sum observations first group } + somcurrY *= 100.f; - for (int i = 0; i < sizestureffY; i++) { - somreffY += 100.f * reffYY[i][tt]; + for (int i = 0; i < Nc; i++) { + somreffY += reffYY[i][tt]; //sum observations second group - } + somreffY *= 100.f; - - for (int i = 0; i < sizestucurrY; i++) { - somcurr2Y += SQR(100.f * YYcurr[i][tt]); + for (int i = 0; i < sizcurr; i++) { + somcurr2Y += SQR(YYcurr[i][tt]); //sum sqr observations first group - } + somreffY *= SQR(100.f); - for (int i = 0; i < sizestureffY; i++) { - somreff2Y += SQR(100.f * reffYY[i][tt]); + for (int i = 0; i < Nc; i++) { + somreff2Y += SQR(reffYY[i][tt]); //sum sqr observations second group - } + somreff2Y *= SQR(100.f); - somsqueccurrY = somcurr2Y - (SQR(somcurrY)) / sizestucurrY; + const float somsqueccurrY = somcurr2Y - (SQR(somcurrY)) / sizcurr; //sum sqr differences first - somsquecreffY = somreff2Y - (SQR(somreffY)) / sizestureffY; + const float somsquecreffY = somreff2Y - (SQR(somreffY)) / Nc; //sum sqr differences second - float diviY = std::sqrt(((somsqueccurrY + somsquecreffY) * (1.f / (float)sizestucurrY + 1.f / (float)sizestureffY)) / (sizestucurrY + sizestureffY - 2)); + const float diviY = std::sqrt(((somsqueccurrY + somsquecreffY) * (1.f / sizcurr + 1.f / Nc)) / (sizcurr + Nc - 2)); //divisor student - float numerY = ((float)somcurrY / (float)sizestucurrY) - ((float)somreffY / (float)sizestureffY); + const float numerY = somcurrY / sizcurr - somreffY / Nc; //numerator student -// printf("num=%f divY=%f \n", numerY, diviY); - student = numerY / diviY ; + return numerY / diviY ; //student coeeficient } @@ -4404,9 +4399,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color compare to size of histogram real color itcwb_delta : 1 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good */ - // BENCHFUN BENCHFUN - TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB"); const float wp[3][3] = { @@ -4423,49 +4416,19 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {wiprof[2][0], wiprof[2][1], wiprof[2][2]} }; - array2D xc; - array2D yc; - array2D Yc; + const int bfwitc = bfw / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfhitc = bfh / 10 + 1; - array2D histcurr; - array2D histcurrref; - - array2D xxyycurr; - array2D xxyycurr_reduc; - array2D xx_curref; - array2D yy_curref; - array2D YY_curref; - array2D xx_curref_reduc; - array2D yy_curref_reduc; - array2D R_curref_reduc; - array2D G_curref_reduc; - array2D B_curref_reduc; - - array2D reff_spect_xxyy; - array2D reff_spect_xxyy_prov; - array2D YYcurr; - array2D YY_curref_reduc; - array2D YYcurr_reduc; - // array2D reffYY; - // array2D reffYY_prov; - - array2D reff_spect_yy_camera; - array2D reff_spect_xx_camera; - - - int bfwitc = bfw / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 - int bfhitc = bfh / 10 + 1; - - xc(bfwitc, bfhitc); - yc(bfwitc, bfhitc); - Yc(bfwitc, bfhitc); + array2D xc(bfwitc, bfhitc); + array2D yc(bfwitc, bfhitc); + array2D Yc(bfwitc, bfhitc); typedef struct WbGreen { double green; float snedecor;//1. actually but put in case of confiance interval } WbGreen; - constexpr WbGreen gree[118] = {//symetric coefficient between 0.717 and 1.40 + constexpr WbGreen gree[118] = {//symmetric coefficient between 0.717 and 1.40 {0.400, 1.f}, {0.500, 1.f}, {0.550, 1.f}, @@ -4585,7 +4548,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {3.800, 1.f}, {4.000, 1.f} }; - int N_g = sizeof(gree) / sizeof(gree[0]); //number of green + const int N_g = sizeof(gree) / sizeof(gree[0]); //number of green typedef struct RangeGreen { int begin; @@ -4593,37 +4556,20 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int ng; } RangeGreen; - RangeGreen Rangestandard; - Rangestandard.begin = 8; - Rangestandard.end = 70; - Rangestandard.ng = 62; - - RangeGreen Rangeextand; - Rangeextand.begin = 4; - Rangeextand.end = 77; - Rangeextand.ng = 73; - - RangeGreen Rangemax; - Rangemax.begin = 0; - Rangemax.end = N_g; - Rangemax.ng = N_g; + constexpr RangeGreen Rangestandard = {8, 70, 62}; + constexpr RangeGreen Rangeextand = {4, 77, 73}; + const RangeGreen Rangemax = {0, N_g, N_g}; RangeGreen Rangegreenused; if (settings->itcwb_greenrange == 0) { Rangegreenused = Rangestandard; - } - - else if (settings->itcwb_greenrange == 1) { + } else if (settings->itcwb_greenrange == 1) { Rangegreenused = Rangeextand; } else { Rangegreenused = Rangemax; } - // printf("rangemin=%i rangmax=%i\n", Rangegreenused.begin, Rangegreenused.end); - - - typedef struct WbTxyz { double Tem; double XX; @@ -4785,8 +4731,8 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //calculate R G B multiplier in function illuminant and temperature const bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) - || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); - for (int tt = 0; tt < N_t; tt++) { + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + for (int tt = 0; tt < N_t; ++tt) { double r, g, b; float rm, gm, bm; ColorTemp WBiter = ColorTemp(Txyz[tt].Tem, greenitc, 1.f, "Custom"); @@ -4845,11 +4791,11 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double bool separated = true; int w = -1; - //printf("greenrefraw=%f\n", greenref); - reff_spect_xxyy(N_t, 2 * Nc + 2); - reff_spect_xxyy_prov(N_t, 2 * Nc + 2); - reff_spect_yy_camera(N_t, 2 * Nc + 2); - reff_spect_xx_camera(N_t, 2 * Nc + 2); + + array2D reff_spect_xxyy(N_t, 2 * Nc + 2); + array2D reff_spect_xxyy_prov(N_t, 2 * Nc + 2); + array2D reff_spect_yy_camera(N_t, 2 * Nc + 2); + array2D reff_spect_xx_camera(N_t, 2 * Nc + 2); //here we select the good spectral color inside the 113 values //call tempxy to calculate for 114 color references Temp and XYZ with cat02 @@ -4896,19 +4842,18 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //calculate x y Y const int sizcurrref = siza;//choice of number of correlate colors in image - histcurrref(N_t, sizcurrref); - xx_curref(N_t, sizcurrref); - yy_curref(N_t, sizcurrref); - YY_curref(N_t, sizcurrref); - xx_curref_reduc(N_t, sizcurrref); - yy_curref_reduc(N_t, sizcurrref); - YY_curref_reduc(N_t, sizcurrref); - R_curref_reduc(N_t, sizcurrref); - G_curref_reduc(N_t, sizcurrref); - B_curref_reduc(N_t, sizcurrref); + array2D histcurrref(N_t, sizcurrref); + array2D xx_curref(N_t, sizcurrref); + array2D yy_curref(N_t, sizcurrref); + array2D YY_curref(N_t, sizcurrref); + array2D xx_curref_reduc(N_t, sizcurrref); + array2D yy_curref_reduc(N_t, sizcurrref); + array2D YY_curref_reduc(N_t, sizcurrref); + array2D R_curref_reduc(N_t, sizcurrref); + array2D G_curref_reduc(N_t, sizcurrref); + array2D B_curref_reduc(N_t, sizcurrref); - - hiss Wbhis [siza]; + hiss Wbhis[siza]; for (int nh = 0; nh < siza; nh++) { Wbhis[nh].histnum = histxy[nh]; @@ -4995,7 +4940,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int i = 0; i < sizcurr2ref; ++i) { //is condition chroxy necessary ? - if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral + if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral w++; xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; @@ -5045,21 +4990,20 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //end first part - //Now begin real calculations separated = false; ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants //calculate x y Y int sizcurr = siza;//choice of number of correlate colors in image - histcurr(N_t, sizcurr); - xxyycurr(N_t, 2 * sizcurr); - xxyycurr_reduc(N_t, 2 * sizcurr); + array2D histcurr(N_t, sizcurr); + array2D xxyycurr(N_t, 2 * sizcurr); + array2D xxyycurr_reduc(N_t, 2 * sizcurr); float minstud = 100000.f; int goodref = 1; - YYcurr(N_t, sizcurr); - YYcurr_reduc(N_t, sizcurr); + array2D YYcurr(N_t, sizcurr); + array2D YYcurr_reduc(N_t, sizcurr); //calculate x y z for each pixel with multiplier rmm gmm bmm @@ -5089,17 +5033,12 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - float student = 0.f; - - studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kk, tt, student); //for xy - - const float abstud = std::fabs(student); + const float abstud = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kk, tt)); if (abstud < minstud) { // find the minimum Student minstud = abstud; goodref = tt; } - } if (extra) { @@ -5184,10 +5123,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - float studentgr = 0.f; - - studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kkg, tt, studentgr); //for xy - const float abstudgr = std::fabs(studentgr); + const float abstudgr = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kkg, tt)); if (abstudgr < minstudgr) { // find the minimum Student minstudgr = abstudgr; diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index eed1c074b..1e7f76b44 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -823,7 +823,6 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) nexttemp = pp->wb.temperature; nextgreen = pp->wb.green; - printf("temp=%f green=%f\n", nexttemp, nextgreen); if (pedited) { degree->setEditedState (pedited->colorappearance.degree ? Edited : UnEdited); degreeout->setEditedState (pedited->colorappearance.degreeout ? Edited : UnEdited); From 8e1bb5ba90bcbdef43073cda8b691111da60a32d Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 14:07:27 +0100 Subject: [PATCH 168/264] Fix broken cppcheck --- rtgui/options.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rtgui/options.h b/rtgui/options.h index 0bc421300..b8a71c9cb 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -20,12 +20,15 @@ #include #include +#if defined __has_include #if __has_include() #include #else #include #endif - +#else +#include +#endif #include "../rtengine/settings.h" #include From be765768ffe5a863d33a6ceaf989c3c0485d4114 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 14:19:06 +0100 Subject: [PATCH 169/264] further cleanups --- rtengine/colortemp.cc | 10 ++++------ rtengine/colortemp.h | 2 +- rtengine/rawimagesource.cc | 35 ++++------------------------------- rtengine/rt_math.h | 6 ++++++ 4 files changed, 15 insertions(+), 38 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 75efa7979..ec8641fc0 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -3211,7 +3211,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, double ColorTemp::blackbody_spect(double wavelength, double temperature) { const double wlm = wavelength * 1e-9; /* Wavelength in meters */ - return (3.7417715247e-16 / (wlm * rtengine::pow4(wlm))) / //3.7417..= c1 = 2*Pi*h*c2 where h=Planck constant, c=velocity of light + return (3.7417715247e-16 / rtengine::pow5(wlm)) / //3.7417..= c1 = 2*Pi*h*c2 where h=Planck constant, c=velocity of light (xexp(1.438786e-2 / (wlm * temperature)) - 1.0); //1.4387..= c2 = h*c/k where k=Boltzmann constant } @@ -3400,7 +3400,7 @@ double ColorTemp::daylight_spect(double wavelength, double m1, double m2) // we can change step for temperature and increase number for T > 7500K if necessary //these values Temp, x, y are references for all calculations and very precise. //copyright J.Desmis august 2017 and june 2018 -void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar) +void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar) { const double* spec_colorforxcyc[] = {//color references JDC468_BluH10_spect, JDC468_BluD6_spect, ColorchechCyaF3_spect, JDC468_BluM5_spect, // 0 3 @@ -3595,10 +3595,8 @@ void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, floa Refxyz[i].Zref = 0.f; } - double tempw = 5000.; - if (separated) { - tempw = Txyz[repref].Tem; + const double tempw = Txyz[repref].Tem; if (tempw <= INITIALBLACKBODY) { for (int i = 0; i < N_c; i++) { @@ -3626,7 +3624,7 @@ void ColorTemp::tempxy(bool separated, int &repref, float **Tx, float **Ty, floa } } else { for (int tt = 0; tt < N_t; tt++) { - tempw = Txyz[tt].Tem; + const double tempw = Txyz[tt].Tem; if (tempw <= INITIALBLACKBODY) { for (int i = 0; i < N_c; i++) { diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index fd2796552..5feed9d26 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -54,7 +54,7 @@ public: explicit ColorTemp (double e) : temp(-1.), green(-1.), equal (e), method("Custom") {} ColorTemp (double t, double g, double e, const std::string &m); ColorTemp (double mulr, double mulg, double mulb, double e); - static void tempxy(bool separated, int &repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar); + static void tempxy(bool separated, int repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar); void update (const double rmul, const double gmul, const double bmul, const double equal, const double tempBias=0.0) { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 9f7b9a850..1cbdf1140 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4553,12 +4553,11 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double typedef struct RangeGreen { int begin; int end; - int ng; } RangeGreen; - constexpr RangeGreen Rangestandard = {8, 70, 62}; - constexpr RangeGreen Rangeextand = {4, 77, 73}; - const RangeGreen Rangemax = {0, N_g, N_g}; + constexpr RangeGreen Rangestandard = {8, 70}; + constexpr RangeGreen Rangeextand = {4, 77}; + const RangeGreen Rangemax = {0, N_g}; RangeGreen Rangegreenused; @@ -5064,8 +5063,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double const int scantempbeg = rtengine::max(goodref - (dgoodref + 1), 1); const int scantempend = rtengine::min(goodref + dgoodref, N_t - 1); - const bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) - || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; ++gr) { float minstudgr = 100000.f; int goodrefgr = 1; @@ -5185,7 +5182,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } avg_rm = 10000.f * rmm[goodref]; - avg_gm = 10000.* gmm[goodref]; + avg_gm = 10000.f * gmm[goodref]; avg_bm = 10000.f * bmm[goodref]; if (!extra) { @@ -5206,7 +5203,6 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D if (greenref > 0.77 && greenref < 1.3) { greenitc = greenref; - extra = false; if (settings->itcwb_forceextra) { extra = true; @@ -5222,7 +5218,6 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D } } - void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) { //used by auto WB local to calculate red, green, blue in local region @@ -5304,28 +5299,6 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in blueloc[i][j] = Color::gammatab_srgb[blueloc[i][j]]; } } - - if (cat02) {//CAT02 - /* - //not good threatment, I must wait merge branch cat02wb - for (int i = 0; i < bfh; i++) - for (int j = 0; j < bfw; j++) { - float X = 0.f, Y = 0.f, Z = 0.f; - Color::rgbxyz(redloc[i][j], greenloc[i][j], blueloc[i][j], X, Y, Z, wp); - double temp; - double Xr = X / 65535.; - double Yr = Y / 65535.; - double Zr = Z / 65535.; - - Ciecam02::xyz_to_cat02float (redloc[i][j], greenloc[i][j], blueloc[i][j], Xr, Yr, Zr, 1); - redloc[i][j] *= 65535.f; - greenloc[i][j] *= 65535.f; - blueloc[i][j] *= 65535.f; - //to do ciecam adaptation - } - */ - } - } void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref, double & tempitc, double & greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw) diff --git a/rtengine/rt_math.h b/rtengine/rt_math.h index 9342f5430..6d4799254 100644 --- a/rtengine/rt_math.h +++ b/rtengine/rt_math.h @@ -44,6 +44,12 @@ constexpr T pow4(T x) return SQR(SQR(x)); } +template +constexpr T pow5(T x) +{ + return x * pow4(x); +} + template constexpr const T& min(const T& a) { From 6029b29d89ba7e4bafc2d2a7ed2ff0bbd39efbac Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 14:59:26 +0100 Subject: [PATCH 170/264] fix copy/paste bug --- rtengine/rawimagesource.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1cbdf1140..bf88b2955 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4316,7 +4316,7 @@ float static studentXY(const array2D & YYcurr, const array2D & ref somcurr2Y += SQR(YYcurr[i][tt]); //sum sqr observations first group } - somreffY *= SQR(100.f); + somcurr2Y *= SQR(100.f); for (int i = 0; i < Nc; i++) { somreff2Y += SQR(reffYY[i][tt]); @@ -4324,9 +4324,9 @@ float static studentXY(const array2D & YYcurr, const array2D & ref } somreff2Y *= SQR(100.f); - const float somsqueccurrY = somcurr2Y - (SQR(somcurrY)) / sizcurr; + const float somsqueccurrY = somcurr2Y - SQR(somcurrY) / sizcurr; //sum sqr differences first - const float somsquecreffY = somreff2Y - (SQR(somreffY)) / Nc; + const float somsquecreffY = somreff2Y - SQR(somreffY) / Nc; //sum sqr differences second const float diviY = std::sqrt(((somsqueccurrY + somsquecreffY) * (1.f / sizcurr + 1.f / Nc)) / (sizcurr + Nc - 2)); From 0a23e85868e19db1e4cbb5a6db4a00416c5d07e9 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 19:44:20 +0100 Subject: [PATCH 171/264] Further cleanups --- rtengine/rawimagesource.cc | 56 ++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index bf88b2955..55e31eeda 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3896,7 +3896,6 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy) - { #ifdef _OPENMP #pragma omp parallel @@ -4410,19 +4409,15 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix("sRGB"); //inverse matrix user select - double wip[3][3] = { - {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, - {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, - {wiprof[2][0], wiprof[2][1], wiprof[2][2]} + const float wip[3][3] = { + {static_cast(wiprof[0][0]), static_cast(wiprof[0][1]), static_cast(wiprof[0][2])}, + {static_cast(wiprof[1][0]), static_cast(wiprof[1][1]), static_cast(wiprof[1][2])}, + {static_cast(wiprof[2][0]), static_cast(wiprof[2][1]), static_cast(wiprof[2][2])} }; const int bfwitc = bfw / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 const int bfhitc = bfh / 10 + 1; - array2D xc(bfwitc, bfhitc); - array2D yc(bfwitc, bfhitc); - array2D Yc(bfwitc, bfhitc); - typedef struct WbGreen { double green; float snedecor;//1. actually but put in case of confiance interval @@ -4791,8 +4786,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double bool separated = true; int w = -1; - array2D reff_spect_xxyy(N_t, 2 * Nc + 2); - array2D reff_spect_xxyy_prov(N_t, 2 * Nc + 2); array2D reff_spect_yy_camera(N_t, 2 * Nc + 2); array2D reff_spect_xx_camera(N_t, 2 * Nc + 2); @@ -4808,6 +4801,10 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double reff_spect_yy_camera[j][repref] = TY[j] / (TX[j] + TY[j] + TZ[j]); // y from xyY } + array2D xc(bfwitc, bfhitc); + array2D yc(bfwitc, bfhitc); + array2D Yc(bfwitc, bfhitc); + const int deltarepref = settings->itcwb_delta; for (int nn = 0, drep = -deltarepref; nn <= 2; ++nn, drep += deltarepref) { @@ -4839,6 +4836,10 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy); } + // free some memory + xc.free(); + yc.free(); + Yc.free(); //calculate x y Y const int sizcurrref = siza;//choice of number of correlate colors in image array2D histcurrref(N_t, sizcurrref); @@ -4848,9 +4849,6 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double array2D xx_curref_reduc(N_t, sizcurrref); array2D yy_curref_reduc(N_t, sizcurrref); array2D YY_curref_reduc(N_t, sizcurrref); - array2D R_curref_reduc(N_t, sizcurrref); - array2D G_curref_reduc(N_t, sizcurrref); - array2D B_curref_reduc(N_t, sizcurrref); hiss Wbhis[siza]; @@ -4900,15 +4898,13 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double const int sizcu30 = sizcurrref - n30; const int sizcu4 = rtengine::min(sizcu30, 55); - chrom wbchro[sizcu4]; - const double swpr = (Txyz[repref].XX + Txyz[repref].ZZ + 1.); - const double xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes - const double ywpr = 1. / swpr; - + const float swpr = Txyz[repref].XX + Txyz[repref].ZZ + 1.f; + const float xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordiantes + const float ywpr = 1.f / swpr; for (int i = 0; i < sizcu4; ++i) { //take the max values - histcurrref[i][repref] = (float) Wbhis[siza - (i + 1)].histnum; + histcurrref[i][repref] = Wbhis[siza - (i + 1)].histnum; xx_curref[i][repref] = xxx[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; yy_curref[i][repref] = yyy[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; YY_curref[i][repref] = YYY[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; @@ -4939,7 +4935,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int i = 0; i < sizcurr2ref; ++i) { //is condition chroxy necessary ? - if (((wbchro[sizcu4 - (i + 1)].chrox > 0.1f) && (wbchro[sizcu4 - (i + 1)].chroy > 0.1f)) && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral + if (wbchro[sizcu4 - (i + 1)].chrox > 0.1f && wbchro[sizcu4 - (i + 1)].chroy > 0.1f && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral w++; xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; @@ -4961,7 +4957,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int j = 0; j < Nc ; j++) { if (!good_spectral[j]) { - const float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); + const float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); if (deltaE < mindeltaE) { mindeltaE = deltaE; @@ -4974,7 +4970,12 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } -//reconvert to RGB for "reduction" + // reuse some buffers + array2D& R_curref_reduc = xx_curref_reduc; + array2D& G_curref_reduc = yy_curref_reduc; + array2D& B_curref_reduc = YY_curref_reduc; + + //reconvert to RGB for "reduction" for (int i = 0; i < w; i++) { const float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; const float Y = 65535.f * YY_curref_reduc[i][repref]; @@ -4992,18 +4993,15 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //Now begin real calculations separated = false; ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants - //calculate x y Y int sizcurr = siza;//choice of number of correlate colors in image - array2D histcurr(N_t, sizcurr); - array2D xxyycurr(N_t, 2 * sizcurr); array2D xxyycurr_reduc(N_t, 2 * sizcurr); + array2D reff_spect_xxyy(N_t, 2 * Nc + 2); + array2D reff_spect_xxyy_prov(N_t, 2 * Nc + 2); + float minstud = 100000.f; int goodref = 1; - array2D YYcurr(N_t, sizcurr); - array2D YYcurr_reduc(N_t, sizcurr); - //calculate x y z for each pixel with multiplier rmm gmm bmm for (int tt = 0; tt < N_t; ++tt) {//N_t From cee41b97861923e1a2299b2d9a10ac90a0bd28a8 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 29 Feb 2020 21:04:09 +0100 Subject: [PATCH 172/264] restore speed when not using auto itc wb and improve speed when using it --- rtengine/improccoordinator.cc | 13 ++--- rtengine/rawimagesource.cc | 96 ++++++++++++++++++++++++++--------- 2 files changed, 77 insertions(+), 32 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index fc3b29b9f..e18c6177a 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -389,16 +389,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } - // bool autowb0 = false; - // autowb0 = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); - // autowb0 = (params->wb.method == "autold" || params->wb.method == "autitcgreen");//in some cases autowb0 does not work ....params->wb.method still at "camera" instead of auto !!! - // printf("autowb0=%s \n", params->wb.method.c_str()); - - - - // if (autowb0) { + if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { + if (params->wb.method == "autitcgreen") { imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); - // } + } + } if ((todo & (M_RETINEX | M_INIT)) && params->retinex.enabled) { bool dehacontlutili = false; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 55e31eeda..c052b41f7 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3664,8 +3664,8 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) if (ri->getSensorType() == ST_BAYER) { // precalculate factors to avoid expensive per pixel calculations - float refwb0 = refwb[ri->FC(i, start)]; - float refwb1 = refwb[ri->FC(i, start + 1)]; + float refwb0 = refwb[ri->FC(i, start)]; + float refwb1 = refwb[ri->FC(i, start + 1)]; int j; for (j = start; j < end - 1; j += 2) { @@ -3678,12 +3678,12 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) } } else if (ri->getSensorType() == ST_FUJI_XTRANS) { // precalculate factors to avoid expensive per pixel calculations - float refwb0 = refwb[ri->XTRANSFC(i, start)]; - float refwb1 = refwb[ri->XTRANSFC(i, start + 1)]; - float refwb2 = refwb[ri->XTRANSFC(i, start + 2)]; - float refwb3 = refwb[ri->XTRANSFC(i, start + 3)]; - float refwb4 = refwb[ri->XTRANSFC(i, start + 4)]; - float refwb5 = refwb[ri->XTRANSFC(i, start + 5)]; + float refwb0 = refwb[ri->XTRANSFC(i, start)]; + float refwb1 = refwb[ri->XTRANSFC(i, start + 1)]; + float refwb2 = refwb[ri->XTRANSFC(i, start + 2)]; + float refwb3 = refwb[ri->XTRANSFC(i, start + 3)]; + float refwb4 = refwb[ri->XTRANSFC(i, start + 4)]; + float refwb5 = refwb[ri->XTRANSFC(i, start + 5)]; int j; for (j = start; j < end - 5; j += 6) { @@ -4853,7 +4853,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double hiss Wbhis[siza]; for (int nh = 0; nh < siza; nh++) { - Wbhis[nh].histnum = histxy[nh]; + Wbhis[nh].histnum = histxy[nh]; Wbhis[nh].index = nh; } @@ -5016,7 +5016,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int j = 0; j < Nc ; ++j) { reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY - reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY + reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY } int kk = -1; @@ -5098,7 +5098,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int j = 0; j < Nc ; ++j) { reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY - reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY + reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY } //degrade correllation with color high chroma, but not too much...seems not good, but keep in case of?? @@ -5142,13 +5142,13 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int greengoodprov; int goodrefprov; float studprov; - const int goodref0 = Tgstud[0].tempref; + const int goodref0 = Tgstud[0].tempref; const int greengood0 = Tgstud[0].greenref - 39;//39 green = 1 const float stud0 = Tgstud[0].student; - const int goodref1 = Tgstud[1].tempref; + const int goodref1 = Tgstud[1].tempref; const float stud1 = Tgstud[1].student; const int greengood1 = Tgstud[1].greenref - 39; - const int goodref2 = Tgstud[2].tempref; + const int goodref2 = Tgstud[2].tempref; const int greengood2 = Tgstud[2].greenref - 39; const float stud2 = Tgstud[2].student; @@ -5243,16 +5243,57 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in //center data on normal values int nn = 0; - for (int i = 0; i < H; i ++) + if (!local) { +#ifdef _OPENMP + #pragma omp parallel sections +#endif + { +#ifdef _OPENMP + #pragma omp section +#endif + { + for (int i = 0; i < H; i ++) { + for (int j = 0; j < W; j++) { + redloc[i][j] = red[i][j]; + } + } + } +#ifdef _OPENMP + #pragma omp section +#endif + { + for (int i = 0; i < H; i ++) { + for (int j = 0; j < W; j++) { + greenloc[i][j] = green[i][j]; + } + } + } +#ifdef _OPENMP + #pragma omp section +#endif + { + for (int i = 0; i < H; i ++) { + for (int j = 0; j < W; j++) { + blueloc[i][j] = blue[i][j]; + } + } + } + } + } + +#ifdef _OPENMP + #pragma omp parallel for reduction(+:avgL, nn) +#endif + for (int i = 0; i < H; i ++) { for (int j = 0; j < W; j++) { int lox = cx + j; int loy = cy + i; if (!local) { - const float redmm = redloc[i][j] = red[i][j]; - const float greenmm = greenloc[i][j] = green[i][j]; - const float bluemm = blueloc[i][j] = blue[i][j]; - const float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); + const float redmm = redloc[i][j]; + const float greenmm = greenloc[i][j]; + const float bluemm = blueloc[i][j]; + const float LL = 0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm; avgL += static_cast(LL); nn++; } else { @@ -5260,21 +5301,24 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in const float redmm = redloc[loy - begy][lox - begx] = red[i][j]; const float greenmm = greenloc[loy - begy][lox - begx] = green[i][j]; const float bluemm = blueloc[loy - begy][lox - begx] = blue[i][j]; - const float LL = (0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm); + const float LL = 0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm; avgL += static_cast(LL); nn++; } } } - + } avgL /= nn; - float vari = 0.f; + double vari = 0.f; int mm = 0; +#ifdef _OPENMP + #pragma omp parallel for reduction(+:vari, mm) +#endif for (int i = 0; i < bfh; i++) for (int j = 0; j < bfw; j++) { - float LL = (0.299f * redloc[i][j] + 0.587f * greenloc[i][j] + 0.114f * blueloc[i][j]); + float LL = 0.299f * redloc[i][j] + 0.587f * greenloc[i][j] + 0.114f * blueloc[i][j]; vari += SQR(LL - avgL); mm++; } @@ -5282,6 +5326,9 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in const float sig = std::sqrt(vari / mm); const float multip = 60000.f / (avgL + 2.f * sig); +#ifdef _OPENMP + #pragma omp parallel for +#endif for (int i = 0; i < bfh; i++) for (int j = 0; j < bfw; j++) { redloc[i][j] *= multip; @@ -5290,6 +5337,9 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in } if (gamma) { +#ifdef _OPENMP + #pragma omp parallel for +#endif for (int i = 0; i < bfh; i++) for (int j = 0; j < bfw; j++) { redloc[i][j] = Color::gammatab_srgb[redloc[i][j]]; From 95b238ca5d5dd16ff54838eb982c733e7cc054bb Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 1 Mar 2020 08:37:51 +0100 Subject: [PATCH 173/264] Added Ingo to copyright Itcwb --- rtengine/rawimagesource.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index c052b41f7..2779081d1 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4340,7 +4340,8 @@ float static studentXY(const array2D & YYcurr, const array2D & ref void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const ColorManagementParams &cmp, const RAWParams &raw, const WBParams & wbpar) { /* - copyright Jacques Desmis 6 - 2018 jdesmis@gmail.com + Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com + Copyright (c) Ingo Weirich 3 - 2020 (heckflosse67@gmx.de) This algorithm try to find temperature correlation between 20 to 200 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. From d0034c880be2b96aea5d17dc8af89b83c50c82dc Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 1 Mar 2020 11:50:58 +0100 Subject: [PATCH 174/264] further cleanups and speedups for ItcWB/getrgbloc --- rtengine/imagesource.h | 2 +- rtengine/improccoordinator.cc | 5 +- rtengine/rawimagesource.cc | 129 ++++++++-------------------------- rtengine/rawimagesource.h | 2 +- rtengine/stdimagesource.cc | 3 - rtengine/stdimagesource.h | 2 +- 6 files changed, 36 insertions(+), 107 deletions(-) diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index 22b8cdc08..d1008837d 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -123,7 +123,7 @@ public: virtual ColorTemp getWB () const = 0; virtual ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal) = 0; virtual void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) = 0; - virtual void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) = 0; + virtual void getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) = 0; virtual double getDefGain () const { diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index e18c6177a..15a8607d3 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -391,7 +391,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { if (params->wb.method == "autitcgreen") { - imgsrc->getrgbloc(false, false, false, 0, 0, fh, fw, 0, 0, fh, fw); + imgsrc->getrgbloc(0, 0, fh, fw, 0, 0, fh, fw); } } @@ -411,8 +411,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } - bool autowb = false; - autowb = (params->wb.method == "autold" || params->wb.method == "aut" || params->wb.method == "autosdw" || params->wb.method == "autedgsdw" || params->wb.method == "autitcgreen" || params->wb.method == "autedgrob" || params->wb.method == "autedg" || params->wb.method == "autorobust"); + const bool autowb = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); if (settings->verbose) { printf("automethod=%s \n", params->wb.method.c_str()); } diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 2779081d1..1fac47ab4 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3407,7 +3407,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi constexpr float trans[ColorCount][ColorCount] = { { 1, 1, 1 }, { 1.7320508, -1.7320508, 0 }, { -1, -1, 2 } }; constexpr float itrans[ColorCount][ColorCount] = { { 1, 0.8660254, -0.5 }, { 1, -0.8660254, -0.5 }, { 1, 0, 1 } }; - float minpt = min(hlmax[0], hlmax[1], hlmax[2]); //min of the raw clip points + float minpt = rtengine::min(hlmax[0], hlmax[1], hlmax[2]); //min of the raw clip points //float maxpt=max(hlmax[0],hlmax[1],hlmax[2]);//max of the raw clip points //float medpt=hlmax[0]+hlmax[1]+hlmax[2]-minpt-maxpt;//median of the raw clip points float maxave = (hlmax[0] + hlmax[1] + hlmax[2]) / 3; //ave of the raw clip points @@ -3418,7 +3418,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi float clip[3]; for (int c = 0; c < ColorCount; ++c) { - clip[c] = min(maxave, hlmax[c]); + clip[c] = rtengine::min(maxave, hlmax[c]); } // Determine the maximum level (clip) of all channels @@ -3473,7 +3473,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi } } - chratio = (std::sqrt(sum[1] / sum[0])); + chratio = std::sqrt(sum[1] / sum[0]); // Apply ratio to lightness in LCH space for (int c = 1; c < ColorCount; c++) { @@ -4341,7 +4341,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double { /* Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com - Copyright (c) Ingo Weirich 3 - 2020 (heckflosse67@gmx.de) + Copyright (c) Ingo Weyrich 3 - 2020 (heckflosse67@gmx.de) This algorithm try to find temperature correlation between 20 to 200 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. @@ -4416,8 +4416,8 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {static_cast(wiprof[2][0]), static_cast(wiprof[2][1]), static_cast(wiprof[2][2])} }; - const int bfwitc = bfw / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfhitc = bfh / 10 + 1; + const int bfwitc = bfw; + const int bfhitc = bfh; typedef struct WbGreen { double green; @@ -4552,7 +4552,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } RangeGreen; constexpr RangeGreen Rangestandard = {8, 70}; - constexpr RangeGreen Rangeextand = {4, 77}; + constexpr RangeGreen Rangeextended = {4, 77}; const RangeGreen Rangemax = {0, N_g}; RangeGreen Rangegreenused; @@ -4560,7 +4560,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double if (settings->itcwb_greenrange == 0) { Rangegreenused = Rangestandard; } else if (settings->itcwb_greenrange == 1) { - Rangegreenused = Rangeextand; + Rangegreenused = Rangeextended; } else { Rangegreenused = Rangemax; } @@ -4816,13 +4816,12 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double #ifdef _OPENMP #pragma omp parallel for #endif - for (int y = 0; y < bfh ; y += 10) { - int yy = y / 10; - for (int x = 0, xx = 0; x < bfw ; x += 10, ++xx) { + for (int y = 0; y < bfh ; ++y) { + for (int x = 0; x < bfw ; ++x) { const float RR = rmm[rep] * redloc[y][x]; const float GG = gmm[rep] * greenloc[y][x]; const float BB = bmm[rep] * blueloc[y][x]; - Color::rgbxyY(RR, GG, BB, xc[yy][xx], yc[yy][xx], Yc[yy][xx], wp); + Color::rgbxyY(RR, GG, BB, xc[y][x], yc[y][x], Yc[y][x], wp); } } //histogram xy depend of temp...but in most cases D45 ..D65.. @@ -5217,15 +5216,12 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D } } -void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) +void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) { + BENCHFUN //used by auto WB local to calculate red, green, blue in local region - int bfh = H, bfw = W; - - if (local) { - bfh = bf_h + 3; - bfw = bf_w + 3; - } + const int bfw = W / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfh = H / 10 + 1; if (! greenloc) { greenloc(bfw, bfh); @@ -5240,73 +5236,17 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in } double avgL = 0.0; - //center data on normal values int nn = 0; - if (!local) { -#ifdef _OPENMP - #pragma omp parallel sections -#endif - { -#ifdef _OPENMP - #pragma omp section -#endif - { - for (int i = 0; i < H; i ++) { - for (int j = 0; j < W; j++) { - redloc[i][j] = red[i][j]; - } - } - } -#ifdef _OPENMP - #pragma omp section -#endif - { - for (int i = 0; i < H; i ++) { - for (int j = 0; j < W; j++) { - greenloc[i][j] = green[i][j]; - } - } - } -#ifdef _OPENMP - #pragma omp section -#endif - { - for (int i = 0; i < H; i ++) { - for (int j = 0; j < W; j++) { - blueloc[i][j] = blue[i][j]; - } - } - } - } - } - #ifdef _OPENMP #pragma omp parallel for reduction(+:avgL, nn) #endif for (int i = 0; i < H; i ++) { for (int j = 0; j < W; j++) { - int lox = cx + j; - int loy = cy + i; - - if (!local) { - const float redmm = redloc[i][j]; - const float greenmm = greenloc[i][j]; - const float bluemm = blueloc[i][j]; - const float LL = 0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm; - avgL += static_cast(LL); - nn++; - } else { - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - const float redmm = redloc[loy - begy][lox - begx] = red[i][j]; - const float greenmm = greenloc[loy - begy][lox - begx] = green[i][j]; - const float bluemm = blueloc[loy - begy][lox - begx] = blue[i][j]; - const float LL = 0.299f * redmm + 0.587f * greenmm + 0.114f * bluemm; - avgL += static_cast(LL); - nn++; - } - } + const float LL = 0.299f * red[i][j] + 0.587f * green[i][j] + 0.114f * blue[i][j]; + avgL += static_cast(LL); + nn++; } } avgL /= nn; @@ -5317,9 +5257,9 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in #ifdef _OPENMP #pragma omp parallel for reduction(+:vari, mm) #endif - for (int i = 0; i < bfh; i++) - for (int j = 0; j < bfw; j++) { - float LL = 0.299f * redloc[i][j] + 0.587f * greenloc[i][j] + 0.114f * blueloc[i][j]; + for (int i = 0; i < H; i++) + for (int j = 0; j < W; j++) { + const float LL = 0.299f * red[i][j] + 0.587f * green[i][j] + 0.114f * blue[i][j]; vari += SQR(LL - avgL); mm++; } @@ -5330,23 +5270,15 @@ void RawImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, in #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = 0; i < bfh; i++) - for (int j = 0; j < bfw; j++) { - redloc[i][j] *= multip; - greenloc[i][j] *= multip; - blueloc[i][j] *= multip; - } - - if (gamma) { -#ifdef _OPENMP - #pragma omp parallel for -#endif - for (int i = 0; i < bfh; i++) - for (int j = 0; j < bfw; j++) { - redloc[i][j] = Color::gammatab_srgb[redloc[i][j]]; - greenloc[i][j] = Color::gammatab_srgb[greenloc[i][j]]; - blueloc[i][j] = Color::gammatab_srgb[blueloc[i][j]]; + for (int i = 0; i < bfh; ++i) { + const int ii = i * 10; + if (ii < H) { + for (int j = 0, jj = 0; jj < W; ++j, jj += 10) { + redloc[i][j] = red[ii][jj] * multip; + greenloc[i][j] = green[ii][jj] * multip; + blueloc[i][j] = blue[ii][jj] * multip; } + } } } @@ -5365,7 +5297,6 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref double avg_b = 0; int rn = 0, gn = 0, bn = 0; double avg_rm, avg_gm, avg_bm; - int bfh = H, bfw = W; if (wbpar.method == "autold") { if (fuji) { for (int i = 32; i < H - 32; i++) { @@ -5542,6 +5473,8 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref if (wbpar.method == "autitcgreen") { bool twotimes = false; + const int bfw = W / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfh = H / 10 + 1; WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index dd15a68e0..71478fbed 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -144,7 +144,7 @@ public: void scaleColors (int winx, int winy, int winw, int winh, const procparams::RAWParams &raw, array2D &rawData); // raw for cblack void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; - void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) override; + void getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; eSensorType getSensorType () const override; diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index 763621171..8cb8fa792 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -315,9 +315,6 @@ void StdImageSource::WBauto(double &tempref, double &greenref, array2D &r { } -void StdImageSource::getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) -{} - void StdImageSource::getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw) { if (redAWBMul != -1.) { diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 9f4fbdfbe..f937188b4 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -58,7 +58,7 @@ public: int load (const Glib::ustring &fname) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; - void getrgbloc(bool local, bool gamma, bool cat02, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) override; + void getrgbloc (int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) override {}; ColorTemp getWB () const override { return wb; From f85b2cc5bc7fa80fa1724e5d6cf5359c0894c223 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 1 Mar 2020 12:22:15 +0100 Subject: [PATCH 175/264] small correction --- rtengine/rawimagesource.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1fac47ab4..9ed217624 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -5220,8 +5220,8 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int { BENCHFUN //used by auto WB local to calculate red, green, blue in local region - const int bfw = W / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfh = H / 10 + 1; + const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfh = H / 10 + ((H % 10) > 0 ? 1 : 0); if (! greenloc) { greenloc(bfw, bfh); @@ -5473,8 +5473,8 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref if (wbpar.method == "autitcgreen") { bool twotimes = false; - const int bfw = W / 10 + 1 ;// 10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfh = H / 10 + 1; + const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfh = H / 10 + ((H % 10) > 0 ? 1 : 0); WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); } From c92c0c0c8a7029c776bd58b174109de201cea866 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 1 Mar 2020 12:44:15 +0100 Subject: [PATCH 176/264] disabled BENCHFUN --- rtengine/rawimagesource.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 9ed217624..f5d31c435 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4399,7 +4399,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Itcwb_sizereference : 3 by default, can be set to 5 ==> size of reference color compare to size of histogram real color itcwb_delta : 1 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good */ - BENCHFUN +// BENCHFUN TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB"); const float wp[3][3] = { @@ -5218,7 +5218,7 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w) { - BENCHFUN +// BENCHFUN //used by auto WB local to calculate red, green, blue in local region const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 const int bfh = H / 10 + ((H % 10) > 0 ? 1 : 0); From 6d31fe48a7f0998fc6709db7f6fd564181b20072 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 2 Mar 2020 08:51:11 +0100 Subject: [PATCH 177/264] Comment code Itcwb --- rtengine/rawimagesource.cc | 43 +++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index f5d31c435..49334d1dc 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3897,6 +3897,9 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy) { + //calculate histogram x y in a rane of 158 colors + //this "choice" are guided by generally colors who are in nature skin, sky, etc. in those cases "steps" are small + // of course we can chnage to be more precise #ifdef _OPENMP #pragma omp parallel #endif @@ -4423,7 +4426,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double double green; float snedecor;//1. actually but put in case of confiance interval } WbGreen; - + //green (tint) values between 0.4 to 4.0 constexpr WbGreen gree[118] = {//symmetric coefficient between 0.717 and 1.40 {0.400, 1.f}, {0.500, 1.f}, @@ -4572,6 +4575,8 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } WbTxyz; //we can change step to increase precision if need - also in Colortemp.cc with same changes //I don't know how to pass this structure to Colortemp ! + // X and Z values calculate for each temp between 2000K to 12000K, so no result after 12000K ! + //of course we can change the step between each temp if need constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after {2001., 1.273842, 0.145295}, {2101., 1.244008, 0.167533}, @@ -4746,6 +4751,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double rmm[tt] = rm / gm; gmm[tt] = 1.f; bmm[tt] = bm / gm; + //return rmm, gmm, bmm in function of temp } struct hiss { @@ -4791,9 +4797,9 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double array2D reff_spect_xx_camera(N_t, 2 * Nc + 2); //here we select the good spectral color inside the 113 values - //call tempxy to calculate for 114 color references Temp and XYZ with cat02 + //call tempxy to calculate for 200 color references Temp and XYZ with cat02 - ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants + ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 200 illuminants //find the good spectral values //calculate xy reference spectral for tempref @@ -4834,6 +4840,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //big step about 0.2 histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy); + //return histogram x and y for each temp and in a range of 158 colors (siza) } // free some memory @@ -4865,6 +4872,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int n15 = 0; int n30 = 0; //part to improve + //determined the number of colors who be used after for (int nh = 0; nh < siza; nh++) { if (Wbhis[nh].histnum < 30) { n30++; //keep only existing color but avoid to small @@ -4911,7 +4919,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } float estimchrom = 0.f; - + //estimate chromaticity for references for (int nh = 0; nh < sizcu4; ++nh) { const float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); wbchro[nh].chroxy_number = chxy * std::sqrt(histcurrref[nh][repref]); @@ -4943,7 +4951,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - //calculate deltaE xx to find best values of spectrals datas + //calculate deltaE xx to find best values of spectrals datas - limited to chroma values int maxnb = rtengine::LIM(settings->itcwb_sizereference, 1, 5); if (settings->itcwb_thres > 39) { @@ -4992,6 +5000,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //Now begin real calculations separated = false; + //recalculate histogram with good values and not estimated ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants //calculate x y Y int sizcurr = siza;//choice of number of correlate colors in image @@ -5038,7 +5047,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - if (extra) { + if (extra) {//always used because I amde this choice, brings better results struct Tempgreen { float student; int tempref; @@ -5052,15 +5061,14 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int i = 0; i < N_g; ++i) {//init variables with Tgstud[i].student = 1000.f;//max value to initialize - Tgstud[i].tempref = 57; - Tgstud[i].greenref = 39; + Tgstud[i].tempref = 57;//5002K + Tgstud[i].greenref = 39;// 1.f } const int dgoodref = rtengine::min(settings->itcwb_greendeltatemp, 4); const int scantempbeg = rtengine::max(goodref - (dgoodref + 1), 1); const int scantempend = rtengine::min(goodref + dgoodref, N_t - 1); - for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; ++gr) { float minstudgr = 100000.f; int goodrefgr = 1; @@ -5072,6 +5080,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double float rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; float gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; float bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + //recalculate Multipliers now with good range of temp and green const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; float new_scale_mul[4]; @@ -5095,6 +5104,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double const float BB = bmm[tt] * B_curref_reduc[i][repref]; Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wp); } + //recalculate xy spectral now with good range of temp and green for (int j = 0; j < Nc ; ++j) { reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY @@ -5117,14 +5127,15 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double reff_spect_xxyy[2 * kkg + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; } } - + //now we have good spectral datas + //claculate student correlation const float abstudgr = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kkg, tt)); if (abstudgr < minstudgr) { // find the minimum Student minstudgr = abstudgr; goodrefgr = tt; } - + //found the values Tgstud[gr].tempref = goodrefgr; Tgstud[gr].greenref = gr; Tgstud[gr].student = minstudgr; @@ -5136,7 +5147,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //now search the value of green the nearest of 1 with a good student value // I take the 3 first values - //I admit a symetrie in green coefiicient for rgb multiplier...probably not excatly true + //I admit a symetrie in green coefiicient for rgb multiplier...probably not exactly true //perhaps we can used a Snedecor test ? but why...at least we have confidence interval > 90% int greengood; int greengoodprov; @@ -5186,7 +5197,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double if (!extra) { tempitc = Txyz[goodref].Tem; } - + //now we have temp green and student if (settings->verbose) { printf("ITCWB tempitc=%f gritc=%f stud=%f \n", tempitc, greenitc, studgood); } @@ -5196,10 +5207,12 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D { // BENCHFUN //auto white balance + //put green (tint) in reasonable limits for an Daylight illuminant + // avoid too bi or too low values if (wbpar.method == "autitcgreen") { bool extra = false; - if (greenref > 0.77 && greenref < 1.3) { + if (greenref > 0.77 && greenref < 1.3) {// 0/77 and 1.3 arbitraties values greenitc = greenref; if (settings->itcwb_forceextra) { @@ -5266,7 +5279,7 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int const float sig = std::sqrt(vari / mm); const float multip = 60000.f / (avgL + 2.f * sig); - + //multip to put red, blue, green in a good range #ifdef _OPENMP #pragma omp parallel for #endif From dbeccefd44e59656d1381c74d4efda197d0689a0 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 2 Mar 2020 16:55:24 +0100 Subject: [PATCH 178/264] Display good values Temp green if autold selected --- rtengine/improccoordinator.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index e7bf2b5bc..29a41249e 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -488,6 +488,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) awbListener->WBChanged(params->wb.temperature, params->wb.green, studgood); } + if (autowb && awbListener && params->wb.method == "autold") { + awbListener->WBChanged(params->wb.temperature, params->wb.green, -1.f); + } + /* GammaValues g_a; double pwr = 1.0 / params->icm.gampos; From 32165f9f7d5c67cea7405a14a3bd6b39297b2dc6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 2 Mar 2020 18:07:41 +0100 Subject: [PATCH 179/264] Small improvment and format code improccoordinator wb --- rtengine/improccoordinator.cc | 45 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 29a41249e..f8a65bf8c 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -441,36 +441,36 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) currWBitc = imgsrc->getWB(); double tempref = currWBitc.getTemp() * (1. + params->wb.tempBias); double greenref = currWBitc.getGreen(); - if (settings->verbose) { + if (settings->verbose && params->wb.method == "autitcgreen") { printf("tempref=%f greref=%f\n", tempref, greenref); } imgsrc->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw); - if (params->wb.method == "autitcgreen") { - params->wb.temperature = tempitc; - params->wb.green = greenitc; - currWB = ColorTemp(params->wb.temperature, params->wb.green, 1., params->wb.method); - currWB.getMultipliers(rm, gm, bm); - } - - if (rm != -1.) { - double bias = params->wb.tempBias; - if (params->wb.method == "autitcgreen") { - bias = 0.; + params->wb.temperature = tempitc; + params->wb.green = greenitc; + currWB = ColorTemp(params->wb.temperature, params->wb.green, 1., params->wb.method); + currWB.getMultipliers(rm, gm, bm); } - autoWB.update(rm, gm, bm, params->wb.equal, bias); - lastAwbEqual = params->wb.equal; - lastAwbTempBias = params->wb.tempBias; - lastAwbauto = params->wb.method; - } else { - lastAwbEqual = -1.; - lastAwbTempBias = 0.0; - lastAwbauto = ""; - autoWB.useDefaults(params->wb.equal); - } + if (rm != -1.) { + double bias = params->wb.tempBias; + + if (params->wb.method == "autitcgreen") { + bias = 0.; + } + + autoWB.update(rm, gm, bm, params->wb.equal, bias); + lastAwbEqual = params->wb.equal; + lastAwbTempBias = params->wb.tempBias; + lastAwbauto = params->wb.method; + } else { + lastAwbEqual = -1.; + lastAwbTempBias = 0.0; + lastAwbauto = ""; + autoWB.useDefaults(params->wb.equal); + } } @@ -483,7 +483,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) params->wb.green = currWB.getGreen(); } - // if (params->wb.method == "Auto" && awbListener && params->wb.enabled) { if (autowb && awbListener && params->wb.method == "autitcgreen") { awbListener->WBChanged(params->wb.temperature, params->wb.green, studgood); } From f4da001589e543f74efd961b27ba8855fc200a62 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 2 Mar 2020 20:00:02 +0100 Subject: [PATCH 180/264] Ciecam02 autotempout button --- rtdata/languages/default | 2 ++ rtengine/improccoordinator.cc | 2 +- rtengine/procparams.cc | 4 ++++ rtengine/procparams.h | 1 + rtgui/colorappearance.cc | 30 ++++++++++++++++++++++++++++-- rtgui/colorappearance.h | 3 ++- rtgui/paramsedited.cc | 6 ++++++ rtgui/paramsedited.h | 1 + 8 files changed, 45 insertions(+), 4 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 607484d19..265266a7c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -787,6 +787,7 @@ HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength +HISTORY_MSG_TEMPOUT;CAM02 automatic temperature HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor HISTORY_MSG_TRANS_Method;Geometry - Method HISTORY_MSG_WAVCLARI;Clarity @@ -1467,6 +1468,7 @@ TP_COLORAPP_TCMODE_LABEL3;Curve chroma mode TP_COLORAPP_TCMODE_LIGHTNESS;Lightness TP_COLORAPP_TCMODE_SATUR;Saturation TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 +TP_COLORAPP_TEMPOUT_TOOLTIP;Disable to chnage temperature and tint TP_COLORAPP_TONECIE;Tone mapping using CIECAM02 TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16 cd/m²). diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index f8a65bf8c..15d477fdc 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1157,7 +1157,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) acListener->ybCamChanged((int) yb); //real value Yb scene } - if (params->colorappearance.enabled && params->colorappearance.presetcat02) { + if (params->colorappearance.enabled && params->colorappearance.presetcat02 && params->colorappearance.autotempout) { acListener->wbCamChanged(params->wb.temperature, params->wb.green); //real temp and tint } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 1dee8375b..a6707fb86 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1389,6 +1389,7 @@ ColorAppearanceParams::ColorAppearanceParams() : datacie(false), tonecie(false), tempout(5000), + autotempout(true), ybout(18), greenout(1.0), tempsc(5000), @@ -1435,6 +1436,7 @@ bool ColorAppearanceParams::operator ==(const ColorAppearanceParams& other) cons && datacie == other.datacie && tonecie == other.tonecie && tempout == other.tempout + && autotempout == other.autotempout && ybout == other.ybout && greenout == other.greenout && tempsc == other.tempsc @@ -3229,6 +3231,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->colorappearance.surrsource, "Color appearance", "SurrSource", colorappearance.surrsource, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.gamut, "Color appearance", "Gamut", colorappearance.gamut, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.tempout, "Color appearance", "Tempout", colorappearance.tempout, keyFile); + saveToKeyfile(!pedited || pedited->colorappearance.autotempout, "Color appearance", "Autotempout", colorappearance.autotempout, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.greenout, "Color appearance", "Greenout", colorappearance.greenout, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.tempsc, "Color appearance", "Tempsc", colorappearance.tempsc, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.greensc, "Color appearance", "Greensc", colorappearance.greensc, keyFile); @@ -4222,6 +4225,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Color appearance", "SurrSource", pedited, colorappearance.surrsource, pedited->colorappearance.surrsource); assignFromKeyfile(keyFile, "Color appearance", "Gamut", pedited, colorappearance.gamut, pedited->colorappearance.gamut); assignFromKeyfile(keyFile, "Color appearance", "Tempout", pedited, colorappearance.tempout, pedited->colorappearance.tempout); + assignFromKeyfile(keyFile, "Color appearance", "Autotempout", pedited, colorappearance.autotempout, pedited->colorappearance.autotempout); assignFromKeyfile(keyFile, "Color appearance", "Greenout", pedited, colorappearance.greenout, pedited->colorappearance.greenout); assignFromKeyfile(keyFile, "Color appearance", "Tempsc", pedited, colorappearance.tempsc, pedited->colorappearance.tempsc); assignFromKeyfile(keyFile, "Color appearance", "Greensc", pedited, colorappearance.greensc, pedited->colorappearance.greensc); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 034577cb6..17cf64a69 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -676,6 +676,7 @@ struct ColorAppearanceParams { bool datacie; bool tonecie; int tempout; + bool autotempout; int ybout; double greenout; int tempsc; diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index fff35a94c..ace7affd6 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -220,7 +220,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" auto m = ProcEventMapper::getInstance(); Evcatpreset = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_CAT02PRESET"); - + EvCATAutotempout = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_TEMPOUT"); //preset button cat02 presetcat02 = Gtk::manage (new Gtk::CheckButton (M ("TP_COLORAPP_PRESETCAT02"))); presetcat02->set_tooltip_markup (M("TP_COLORAPP_PRESETCAT02_TIP")); @@ -627,6 +627,8 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" greenout = Gtk::manage (new Adjuster (M ("TP_WBALANCE_GREEN"), MINGREEN0, MAXGREEN0, 0.001, 1.0, igreenR1, igreenL1)); ybout = Gtk::manage (new Adjuster (M ("TP_COLORAPP_MEANLUMINANCE"), 5, 90, 1, 18)); tempout->set_tooltip_markup (M ("TP_COLORAPP_TEMP_TOOLTIP")); + tempout->throwOnButtonRelease(); + tempout->addAutoButton (M ("TP_COLORAPP_TEMPOUT_TOOLTIP")); tempout->show(); greenout->show(); @@ -768,6 +770,7 @@ void ColorAppearance::neutral_pressed () qcontrast->resetValue (false); colorh->resetValue (false); tempout->resetValue (false); + tempout->setAutoValue (true); greenout->resetValue (false); ybout->resetValue (false); tempsc->resetValue (false); @@ -856,6 +859,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) adapscen->setAutoInconsistent (multiImage && !pedited->colorappearance.autoadapscen); ybscen->setAutoInconsistent (multiImage && !pedited->colorappearance.autoybscen); set_inconsistent (multiImage && !pedited->colorappearance.enabled); + tempout->setAutoInconsistent (multiImage && !pedited->colorappearance.autotempout); shape->setUnChanged (!pedited->colorappearance.curve); shape2->setUnChanged (!pedited->colorappearance.curve2); @@ -982,6 +986,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) lastAutoAdapscen = pp->colorappearance.autoadapscen; lastAutoDegreeout = pp->colorappearance.autodegreeout; lastAutoybscen = pp->colorappearance.autoybscen; + lastAutotempout = pp->colorappearance.autotempout; degree->setValue (pp->colorappearance.degree); degree->setAutoValue (pp->colorappearance.autodegree); @@ -1004,6 +1009,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) qcontrast->setValue (pp->colorappearance.qcontrast); colorh->setValue (pp->colorappearance.colorh); tempout->setValue (pp->colorappearance.tempout); + tempout->setAutoValue (pp->colorappearance.autotempout); greenout->setValue (pp->colorappearance.greenout); ybout->setValue (pp->colorappearance.ybout); tempsc->setValue (pp->colorappearance.tempsc); @@ -1060,6 +1066,7 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) pp->colorappearance.curve2 = shape2->getCurve (); pp->colorappearance.curve3 = shape3->getCurve (); pp->colorappearance.tempout = tempout->getValue (); + pp->colorappearance.autotempout = tempout->getAutoValue (); pp->colorappearance.greenout = greenout->getValue (); pp->colorappearance.ybout = ybout->getValue (); pp->colorappearance.tempsc = tempsc->getValue (); @@ -1135,6 +1142,7 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) pedited->colorappearance.tempsc = tempsc->getEditedState (); pedited->colorappearance.greensc = greensc->getEditedState (); pedited->colorappearance.presetcat02 = presetcat02->get_inconsistent (); + pedited->colorappearance.autotempout = !tempout->getAutoInconsistent(); } @@ -1771,7 +1779,16 @@ void ColorAppearance::adjusterAutoToggled(Adjuster* a) ybscen->setAutoInconsistent (true); } - lastAutoybscen = ybscen->getAutoValue(); + lastAutotempout = tempout->getAutoValue(); + + if (tempout->getAutoInconsistent()) { + tempout->setAutoInconsistent (false); + tempout->setAutoValue (false); + } else if (lastAutotempout) { + tempout->setAutoInconsistent (true); + } + + lastAutotempout = tempout->getAutoValue(); } @@ -1818,6 +1835,15 @@ void ColorAppearance::adjusterAutoToggled(Adjuster* a) } } + if (a == tempout) { + if (tempout->getAutoInconsistent()) { + listener->panelChanged (EvCATAutotempout, M ("GENERAL_UNCHANGED")); + } else if (tempout->getAutoValue()) { + listener->panelChanged (EvCATAutotempout, M ("GENERAL_ENABLED")); + } else { + listener->panelChanged (EvCATAutotempout, M ("GENERAL_DISABLED")); + } + } } } diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h index 2f060edea..863787118 100644 --- a/rtgui/colorappearance.h +++ b/rtgui/colorappearance.h @@ -101,7 +101,7 @@ public: private: rtengine::ProcEvent Evcatpreset; - + rtengine::ProcEvent EvCATAutotempout; bool bgTTipQuery (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); bool srTTipQuery (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -174,6 +174,7 @@ private: bool lastAutoAdapscen; bool lastAutoDegreeout; bool lastAutoybscen; + bool lastAutotempout; bool lastsurr; bool lastgamut; bool lastdatacie; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 448b1316c..52eb7dbe6 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -243,6 +243,7 @@ void ParamsEdited::set(bool v) colorappearance.curveMode2 = v; colorappearance.curveMode3 = v; colorappearance.tempout = v; + colorappearance.autotempout = v; colorappearance.greenout = v; colorappearance.ybout = v; colorappearance.tempsc = v; @@ -834,6 +835,7 @@ void ParamsEdited::initFrom(const std::vector& colorappearance.curveMode2 = colorappearance.curveMode2 && p.colorappearance.curveMode2 == other.colorappearance.curveMode2; colorappearance.curveMode3 = colorappearance.curveMode3 && p.colorappearance.curveMode3 == other.colorappearance.curveMode3; colorappearance.tempout = colorappearance.tempout && p.colorappearance.tempout == other.colorappearance.tempout; + colorappearance.autotempout = colorappearance.autotempout && p.colorappearance.autotempout == other.colorappearance.autotempout; colorappearance.greenout = colorappearance.greenout && p.colorappearance.greenout == other.colorappearance.greenout; colorappearance.ybout = colorappearance.ybout && p.colorappearance.ybout == other.colorappearance.ybout; colorappearance.tempsc = colorappearance.tempsc && p.colorappearance.tempsc == other.colorappearance.tempsc; @@ -2016,6 +2018,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.colorappearance.tempout = mods.colorappearance.tempout; } + if (colorappearance.autotempout) { + toEdit.colorappearance.autotempout = mods.colorappearance.autotempout; + } + if (colorappearance.greenout) { toEdit.colorappearance.greenout = mods.colorappearance.greenout; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 47985400e..938f1bf97 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -290,6 +290,7 @@ struct ColorAppearanceParamsEdited { bool datacie; bool tonecie; bool tempout; + bool autotempout; bool greenout; bool ybout; bool tempsc; From 60160025f973d323c787ea9b81e5017d28a75f6f Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 3 Mar 2020 08:07:36 +0100 Subject: [PATCH 181/264] Ciecam02 chnage default settings cat02preset --- rtengine/improccoordinator.cc | 3 ++- rtgui/colorappearance.cc | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 15d477fdc..3cc58b01c 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1158,7 +1158,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } if (params->colorappearance.enabled && params->colorappearance.presetcat02 && params->colorappearance.autotempout) { - acListener->wbCamChanged(params->wb.temperature, params->wb.green); //real temp and tint + // acListener->wbCamChanged(params->wb.temperature, params->wb.green); //real temp and tint + acListener->wbCamChanged(params->wb.temperature, 1.f); //real temp and tint = 1. } } else { diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index ace7affd6..394298566 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -824,7 +824,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) presetcat02->set_active(pp->colorappearance.presetcat02); nexttemp = pp->wb.temperature; - nextgreen = pp->wb.green; + nextgreen = 1.; //pp->wb.green; if (pedited) { degree->setEditedState (pedited->colorappearance.degree ? Edited : UnEdited); @@ -1368,6 +1368,7 @@ void ColorAppearance::presetcat02pressed () gamut->set_active (true); gamutconn.block (false); degree->setAutoValue (true); + degree->setValue(80); degree->resetValue (false); adapscen->resetValue (false); adapscen->setAutoValue (true); @@ -1383,7 +1384,7 @@ void ColorAppearance::presetcat02pressed () ybscen->setValue(18); surround->set_active (0); adaplum->setValue(400.); - degreeout->setValue(70); + degreeout->setValue(80); ybout->setValue(18); tempout->setValue (nexttemp); greenout->setValue (nextgreen); From 0d921d366a6f37f7b04d678b2cdb2782e9251ba8 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 3 Mar 2020 08:16:47 +0100 Subject: [PATCH 182/264] another small change to cat02preset --- rtgui/colorappearance.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 394298566..159cd8260 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -1368,8 +1368,8 @@ void ColorAppearance::presetcat02pressed () gamut->set_active (true); gamutconn.block (false); degree->setAutoValue (true); - degree->setValue(80); degree->resetValue (false); + degree->setValue(80); adapscen->resetValue (false); adapscen->setAutoValue (true); degreeout->resetValue (false); From 6e4f91ebb9b80f89937d45ef335c625c2b3d1706 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 3 Mar 2020 13:59:48 +0100 Subject: [PATCH 183/264] raw crop for Canon PowerShot SX70 HS --- rtengine/camconst.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index f58167478..9b1b99d1b 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1240,6 +1240,11 @@ Camera constants: "ranges": { "white": 4050 } // nominal 4080-4093 }, + { // Quality C, only raw crop + "make_model": "Canon PowerShot SX70 HS", + "raw_crop": [ 96, 17, 5248, 3932 ] + }, + { // Quality C "make_model": "Canon PowerShot SX150 IS", "dcraw_matrix": [ 13481, -4867, -1063, -2074, 9960, 2472, -170, 1474, 3894 ], // Adobe DNG Converter 11.1 ColorMatrix1 (there is only one matrix and illuminant, and it's for daylight) From cc4de2e804f668bc8f625d1c7bf4374261c092f6 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 3 Mar 2020 15:06:49 +0100 Subject: [PATCH 184/264] Fixed some typos in comments --- rtengine/rawimagesource.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 49334d1dc..ff9472f1a 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3897,9 +3897,9 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy) { - //calculate histogram x y in a rane of 158 colors + //calculate histogram x y in a range of 158 colors //this "choice" are guided by generally colors who are in nature skin, sky, etc. in those cases "steps" are small - // of course we can chnage to be more precise + // of course we can change to be more precise #ifdef _OPENMP #pragma omp parallel #endif @@ -5047,7 +5047,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } } - if (extra) {//always used because I amde this choice, brings better results + if (extra) {//always used because I made this choice, brings better results struct Tempgreen { float student; int tempref; From a356306728aa5c8e8142dbff419dc8fef9835135 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 3 Mar 2020 19:51:43 +0100 Subject: [PATCH 185/264] Silence some warnings --- rtengine/dcraw.cc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 0858bdaaa..7f6e2ee31 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1,7 +1,6 @@ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsign-compare" -#pragma GCC diagnostic ignored "-Wunused-macros" #if (__GNUC__ >= 6) #pragma GCC diagnostic ignored "-Wmisleading-indentation" #endif @@ -63,12 +62,8 @@ $Date: 2018/06/01 20:36:25 $ */ -#define DCRAW_VERSION "9.28" +//#define DCRAW_VERSION "9.28" -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#define _USE_MATH_DEFINES #include #include #include @@ -95,8 +90,12 @@ #ifdef WIN32 #include #include +#ifndef strcasecmp #define strcasecmp stricmp +#endif +#ifndef strncasecmp #define strncasecmp strnicmp +#endif typedef __int64 INT64; typedef unsigned __int64 UINT64; #else From 05f365c0d6f83425c7eff82b4d10945bf957bd07 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 4 Mar 2020 16:31:49 +0100 Subject: [PATCH 186/264] Added method Illuminant to make choices easier in free mode --- rtdata/languages/default | 10 ++++ rtengine/procparams.cc | 6 ++- rtengine/procparams.h | 1 + rtgui/colorappearance.cc | 106 +++++++++++++++++++++++++++++++++++++++ rtgui/colorappearance.h | 4 ++ rtgui/paramsedited.cc | 6 +++ rtgui/paramsedited.h | 1 + 7 files changed, 133 insertions(+), 1 deletion(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 265266a7c..543542feb 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -760,6 +760,7 @@ HISTORY_MSG_ICM_OUTPUT_TYPE;Output - Type HISTORY_MSG_ICM_WORKING_GAMMA;Working - Gamma HISTORY_MSG_ICM_WORKING_SLOPE;Working - Slope HISTORY_MSG_ICM_WORKING_TRC_METHOD;Working - TRC method +HISTORY_MSG_ILLUM;Illuminant HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast @@ -1438,6 +1439,15 @@ TP_COLORAPP_GAMUT;Gamut control (L*a*b*) TP_COLORAPP_GAMUT_TOOLTIP;Allow gamut control in L*a*b* mode. TP_COLORAPP_HUE;Hue (h) TP_COLORAPP_HUE_TOOLTIP;Hue (h) - angle between 0° and 360°. +TP_COLORAPP_ILLUM;Illuminant +TP_COLORAPP_ILLUM_TOOLTIP;Select the illuminant closest to the shooting conditions.\nIn general D50, but it can change depending on the time and lattitude. +TP_COLORAPP_ILA;Incandescent A +TP_COLORAPP_IL50;D50 +TP_COLORAPP_IL55;D55 +TP_COLORAPP_IL60;D60 +TP_COLORAPP_IL65;D65 +TP_COLORAPP_IL75;D75 +TP_COLORAPP_ILFREE;Free TP_COLORAPP_LABEL;CIE Color Appearance Model 2002 TP_COLORAPP_LABEL_CAM02;Image Adjustments TP_COLORAPP_LABEL_SCENE;Scene Conditions diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index a6707fb86..e795d9bd9 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1374,6 +1374,7 @@ ColorAppearanceParams::ColorAppearanceParams() : adaplum(16), badpixsl(0), wbmodel("RawT"), + illum("i50"), algo("No"), contrast(0.0), qcontrast(0.0), @@ -1392,7 +1393,7 @@ ColorAppearanceParams::ColorAppearanceParams() : autotempout(true), ybout(18), greenout(1.0), - tempsc(5000), + tempsc(5003), greensc(1.0), presetcat02(false) { @@ -1421,6 +1422,7 @@ bool ColorAppearanceParams::operator ==(const ColorAppearanceParams& other) cons && adaplum == other.adaplum && badpixsl == other.badpixsl && wbmodel == other.wbmodel + && illum == other.illum && algo == other.algo && contrast == other.contrast && qcontrast == other.qcontrast @@ -3214,6 +3216,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->colorappearance.adaplum, "Color appearance", "AdaptLum", colorappearance.adaplum, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.badpixsl, "Color appearance", "Badpixsl", colorappearance.badpixsl, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.wbmodel, "Color appearance", "Model", colorappearance.wbmodel, keyFile); + saveToKeyfile(!pedited || pedited->colorappearance.illum, "Color appearance", "Illum", colorappearance.illum, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.algo, "Color appearance", "Algorithm", colorappearance.algo, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.jlight, "Color appearance", "J-Light", colorappearance.jlight, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.qbright, "Color appearance", "Q-Bright", colorappearance.qbright, keyFile); @@ -4208,6 +4211,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Color appearance", "AdaptLum", pedited, colorappearance.adaplum, pedited->colorappearance.adaplum); assignFromKeyfile(keyFile, "Color appearance", "Badpixsl", pedited, colorappearance.badpixsl, pedited->colorappearance.badpixsl); assignFromKeyfile(keyFile, "Color appearance", "Model", pedited, colorappearance.wbmodel, pedited->colorappearance.wbmodel); + assignFromKeyfile(keyFile, "Color appearance", "Illum", pedited, colorappearance.illum, pedited->colorappearance.illum); assignFromKeyfile(keyFile, "Color appearance", "Algorithm", pedited, colorappearance.algo, pedited->colorappearance.algo); assignFromKeyfile(keyFile, "Color appearance", "J-Light", pedited, colorappearance.jlight, pedited->colorappearance.jlight); assignFromKeyfile(keyFile, "Color appearance", "Q-Bright", pedited, colorappearance.qbright, pedited->colorappearance.qbright); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 17cf64a69..aabe1e7ae 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -661,6 +661,7 @@ struct ColorAppearanceParams { double adaplum; int badpixsl; Glib::ustring wbmodel; + Glib::ustring illum; Glib::ustring algo; double contrast; double qcontrast; diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 159cd8260..4d3db4081 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -221,6 +221,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" auto m = ProcEventMapper::getInstance(); Evcatpreset = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_CAT02PRESET"); EvCATAutotempout = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_TEMPOUT"); + EvCATillum = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ILLUM"); //preset button cat02 presetcat02 = Gtk::manage (new Gtk::CheckButton (M ("TP_COLORAPP_PRESETCAT02"))); presetcat02->set_tooltip_markup (M("TP_COLORAPP_PRESETCAT02_TIP")); @@ -285,6 +286,25 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" wbmHBox->pack_start (*wbmodel); p1VBox->pack_start (*wbmHBox); + + Gtk::HBox* illumHBox = Gtk::manage (new Gtk::HBox ()); + illumHBox->set_spacing (2); + illumHBox->set_tooltip_markup (M ("TP_COLORAPP_ILLUM_TOOLTIP")); + Gtk::Label* illumLab = Gtk::manage (new Gtk::Label (M ("TP_COLORAPP_ILLUM") + ":")); + illumHBox->pack_start (*illumLab, Gtk::PACK_SHRINK); + illum = Gtk::manage (new MyComboBoxText ()); + illum->append (M ("TP_COLORAPP_ILA")); + illum->append (M ("TP_COLORAPP_IL50")); + illum->append (M ("TP_COLORAPP_IL55")); + illum->append (M ("TP_COLORAPP_IL60")); + illum->append (M ("TP_COLORAPP_IL65")); + illum->append (M ("TP_COLORAPP_IL75")); + illum->append (M ("TP_COLORAPP_ILFREE")); + + illum->set_active (0); + illumHBox->pack_start (*illum); + p1VBox->pack_start (*illumHBox); + Gtk::Image* itempL = Gtk::manage (new RTImage ("circle-blue-small.png")); Gtk::Image* itempR = Gtk::manage (new RTImage ("circle-yellow-small.png")); Gtk::Image* igreenL = Gtk::manage (new RTImage ("circle-magenta-small.png")); @@ -701,6 +721,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" // surrconn = surrsource->signal_toggled().connect ( sigc::mem_fun (*this, &ColorAppearance::surrsource_toggled) ); wbmodelconn = wbmodel->signal_changed().connect ( sigc::mem_fun (*this, &ColorAppearance::wbmodelChanged) ); + illumconn = illum->signal_changed().connect ( sigc::mem_fun (*this, &ColorAppearance::illumChanged) ); algoconn = algo->signal_changed().connect ( sigc::mem_fun (*this, &ColorAppearance::algoChanged) ); surroundconn = surround->signal_changed().connect ( sigc::mem_fun (*this, &ColorAppearance::surroundChanged) ); surrsrcconn = surrsrc->signal_changed().connect ( sigc::mem_fun (*this, &ColorAppearance::surrsrcChanged) ); @@ -777,6 +798,7 @@ void ColorAppearance::neutral_pressed () greensc->resetValue (false); badpixsl->resetValue (false); wbmodel->set_active (0); + illum->set_active (1); toneCurveMode->set_active (0); toneCurveMode2->set_active (0); toneCurveMode3->set_active (0); @@ -938,6 +960,30 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) // Have to be manually called to handle initial state update wbmodelChanged(); + illumconn.block (true); + + if (pedited && !pedited->colorappearance.illum) { + illum->set_active (7); + } else if (pp->colorappearance.illum == "iA") { + illum->set_active (0); + } else if (pp->colorappearance.illum == "i50") { + illum->set_active (1); + } else if (pp->colorappearance.illum == "i55") { + illum->set_active (2); + } else if (pp->colorappearance.illum == "i60") { + illum->set_active (3); + } else if (pp->colorappearance.illum == "i65") { + illum->set_active (4); + } else if (pp->colorappearance.illum == "i75") { + illum->set_active (5); + } else if (pp->colorappearance.illum == "ifree") { + illum->set_active (6); + } + + illumconn.block (false); + // Have to be manually called to handle initial state update + illumChanged(); + algoconn.block (true); if (pedited && !pedited->colorappearance.algo) { @@ -1123,6 +1169,7 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) pedited->colorappearance.surround = surround->get_active_text() != M ("GENERAL_UNCHANGED"); pedited->colorappearance.surrsrc = surrsrc->get_active_text() != M ("GENERAL_UNCHANGED"); pedited->colorappearance.wbmodel = wbmodel->get_active_text() != M ("GENERAL_UNCHANGED"); + pedited->colorappearance.illum = illum->get_active_text() != M ("GENERAL_UNCHANGED"); pedited->colorappearance.algo = algo->get_active_text() != M ("GENERAL_UNCHANGED"); // pedited->colorappearance.surrsource = !surrsource->get_inconsistent(); pedited->colorappearance.gamut = !gamut->get_inconsistent(); @@ -1173,7 +1220,22 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) pp->colorappearance.wbmodel = "RawTCAT02"; } else if (wbmodel->get_active_row_number() == 2) { pp->colorappearance.wbmodel = "free"; + } + if (illum->get_active_row_number() == 0) { + pp->colorappearance.illum = "iA"; + } else if (illum->get_active_row_number() == 1) { + pp->colorappearance.illum = "i50"; + } else if (illum->get_active_row_number() == 2) { + pp->colorappearance.illum = "i55"; + } else if (illum->get_active_row_number() == 3) { + pp->colorappearance.illum = "i60"; + } else if (illum->get_active_row_number() == 4) { + pp->colorappearance.illum = "i65"; + } else if (illum->get_active_row_number() == 5) { + pp->colorappearance.illum = "i75"; + } else if (illum->get_active_row_number() == 6) { + pp->colorappearance.illum = "ifree"; } if (algo->get_active_row_number() == 0) { @@ -1358,6 +1420,7 @@ void ColorAppearance::presetcat02pressed () greensc->resetValue (false); badpixsl->resetValue (false); wbmodel->set_active (0); + illum->set_active (1); toneCurveMode->set_active (0); toneCurveMode2->set_active (0); toneCurveMode3->set_active (0); @@ -1427,6 +1490,7 @@ void ColorAppearance::presetcat02pressed () ybscen->setAutoValue (true); surrsrc->set_active (0); wbmodel->set_active (0); + illum->set_active (1); tempsc->resetValue (false); greensc->resetValue (false); adapscen->resetValue (false); @@ -1884,13 +1948,17 @@ void ColorAppearance::surroundChanged () void ColorAppearance::wbmodelChanged () { if (wbmodel->get_active_row_number() == 0 || wbmodel->get_active_row_number() == 1) { + illum->hide(); tempsc->hide(); greensc->hide(); + tempsc->setValue (5003); + greensc->setValue (1); } if (wbmodel->get_active_row_number() == 2) { tempsc->show(); greensc->show(); + illum->show(); } if (listener && (multiImage || getEnabled()) ) { @@ -1898,6 +1966,43 @@ void ColorAppearance::wbmodelChanged () } } +void ColorAppearance::illumChanged () +{ + if (illum->get_active_row_number() == 0) { + tempsc->setValue (2856); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 1) { + tempsc->setValue (5003); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 2) { + tempsc->setValue (5503); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 3) { + tempsc->setValue (6000); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 4) { + tempsc->setValue (6504); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 5) { + tempsc->setValue (7504); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 6) { + tempsc->set_sensitive(true); + greensc->set_sensitive(true); + } + + if (listener && (multiImage || getEnabled()) ) { + listener->panelChanged (EvCATillum, illum->get_active_text ()); + } +} + + void ColorAppearance::algoChanged () { @@ -2000,6 +2105,7 @@ void ColorAppearance::setBatchMode (bool batchMode) surround->append (M ("GENERAL_UNCHANGED")); surrsrc->append (M ("GENERAL_UNCHANGED")); wbmodel->append (M ("GENERAL_UNCHANGED")); + illum->append (M ("GENERAL_UNCHANGED")); algo->append (M ("GENERAL_UNCHANGED")); toneCurveMode->append (M ("GENERAL_UNCHANGED")); toneCurveMode2->append (M ("GENERAL_UNCHANGED")); diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h index 863787118..c326b06f9 100644 --- a/rtgui/colorappearance.h +++ b/rtgui/colorappearance.h @@ -53,6 +53,7 @@ public: void surroundChanged (); void surrsrcChanged (); void wbmodelChanged (); + void illumChanged (); void algoChanged (); void surrsource_toggled (); void gamut_toggled (); @@ -102,6 +103,7 @@ public: private: rtengine::ProcEvent Evcatpreset; rtengine::ProcEvent EvCATAutotempout; + rtengine::ProcEvent EvCATillum; bool bgTTipQuery (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); bool srTTipQuery (int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip); void foldAllButMe (GdkEventButton* event, MyExpander *expander); @@ -156,6 +158,8 @@ private: sigc::connection surroundconn; MyComboBoxText* wbmodel; sigc::connection wbmodelconn; + MyComboBoxText* illum; + sigc::connection illumconn; MyComboBoxText* algo; sigc::connection algoconn; sigc::connection surrconn; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 52eb7dbe6..48ba4c341 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -219,6 +219,7 @@ void ParamsEdited::set(bool v) colorappearance.adaplum = v; colorappearance.badpixsl = v; colorappearance.wbmodel = v; + colorappearance.illum = v; colorappearance.algo = v; colorappearance.jlight = v; @@ -812,6 +813,7 @@ void ParamsEdited::initFrom(const std::vector& colorappearance.adaplum = colorappearance.adaplum && p.colorappearance.adaplum == other.colorappearance.adaplum; colorappearance.badpixsl = colorappearance.badpixsl && p.colorappearance.badpixsl == other.colorappearance.badpixsl; colorappearance.wbmodel = colorappearance.wbmodel && p.colorappearance.wbmodel == other.colorappearance.wbmodel; + colorappearance.illum = colorappearance.illum && p.colorappearance.illum == other.colorappearance.illum; colorappearance.algo = colorappearance.algo && p.colorappearance.algo == other.colorappearance.algo; colorappearance.jlight = colorappearance.jlight && p.colorappearance.jlight == other.colorappearance.jlight; colorappearance.qbright = colorappearance.qbright && p.colorappearance.qbright == other.colorappearance.qbright; @@ -2010,6 +2012,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.colorappearance.wbmodel = mods.colorappearance.wbmodel; } + if (colorappearance.illum) { + toEdit.colorappearance.illum = mods.colorappearance.illum; + } + if (colorappearance.algo) { toEdit.colorappearance.algo = mods.colorappearance.algo; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 938f1bf97..d2707ec11 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -275,6 +275,7 @@ struct ColorAppearanceParamsEdited { bool ybscen; bool badpixsl; bool wbmodel; + bool illum; bool algo; bool jlight; bool qbright; From bb54a97436585cd7adfb8f63ab5cdfcc747b1089 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 4 Mar 2020 18:12:06 +0100 Subject: [PATCH 187/264] Ciecam02 change label and tooltip --- rtdata/languages/default | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 543542feb..517b68cbd 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1441,7 +1441,7 @@ TP_COLORAPP_HUE;Hue (h) TP_COLORAPP_HUE_TOOLTIP;Hue (h) - angle between 0° and 360°. TP_COLORAPP_ILLUM;Illuminant TP_COLORAPP_ILLUM_TOOLTIP;Select the illuminant closest to the shooting conditions.\nIn general D50, but it can change depending on the time and lattitude. -TP_COLORAPP_ILA;Incandescent A +TP_COLORAPP_ILA;Incandescent StdA 2856K TP_COLORAPP_IL50;D50 TP_COLORAPP_IL55;D55 TP_COLORAPP_IL60;D60 @@ -1460,7 +1460,7 @@ TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's TP_COLORAPP_NEUTRAL;Reset TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values TP_COLORAPP_PRESETCAT02;Preset cat02 automatic -TP_COLORAPP_PRESETCAT02_TIP;Set combobox, sliders, temp, green so that Cat02 automatic is preset.\nYou must change Cat02 adaptation Viewing conditions if need.\nYou can change Temperature and Tint Viewing conditions if need, and other settings if need. +TP_COLORAPP_PRESETCAT02_TIP;Set combobox, sliders, temp, green so that Cat02 automatic is preset.\nYou can change illuminant shooting conditions.\nYou must change Cat02 adaptation Viewing conditions if need.\nYou can change Temperature and Tint Viewing conditions if need, and other settings if need. TP_COLORAPP_RSTPRO;Red & skin-tones protection TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves. TP_COLORAPP_SURROUND;Surround From 6c96e5a0a4d052f840852dcda481ed96046357ea Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 5 Mar 2020 08:10:47 +0100 Subject: [PATCH 188/264] Added D41 to Ciecam02 illuminant --- rtdata/languages/default | 4 ++- rtgui/colorappearance.cc | 61 +++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 517b68cbd..fe6ddaa7c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1442,6 +1442,7 @@ TP_COLORAPP_HUE_TOOLTIP;Hue (h) - angle between 0° and 360°. TP_COLORAPP_ILLUM;Illuminant TP_COLORAPP_ILLUM_TOOLTIP;Select the illuminant closest to the shooting conditions.\nIn general D50, but it can change depending on the time and lattitude. TP_COLORAPP_ILA;Incandescent StdA 2856K +TP_COLORAPP_IL41;D41 TP_COLORAPP_IL50;D50 TP_COLORAPP_IL55;D55 TP_COLORAPP_IL60;D60 @@ -1477,7 +1478,8 @@ TP_COLORAPP_TCMODE_LABEL2;Curve mode 2 TP_COLORAPP_TCMODE_LABEL3;Curve chroma mode TP_COLORAPP_TCMODE_LIGHTNESS;Lightness TP_COLORAPP_TCMODE_SATUR;Saturation -TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 +TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 TP_COLORAPP_TEMPOUT_TOOLTIP;Disable to chnage temperature and tint TP_COLORAPP_TONECIE;Tone mapping using CIECAM02 TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 4d3db4081..bdbe3de3a 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -33,7 +33,7 @@ #define MINTEMP0 2000 //1200 #define MAXTEMP0 12000 //12000 -#define CENTERTEMP0 5000 +#define CENTERTEMP0 5003 #define MINGREEN0 0.8 #define MAXGREEN0 1.2 @@ -242,7 +242,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" p1VBox = Gtk::manage ( new Gtk::VBox()); p1VBox->set_spacing (2); - degree = Gtk::manage (new Adjuster (M ("TP_COLORAPP_CIECAT_DEGREE"), 0., 100., 1., 100.)); + degree = Gtk::manage (new Adjuster (M ("TP_COLORAPP_CIECAT_DEGREE"), 0., 100., 1., 90.)); if (degree->delay < options.adjusterMaxDelay) { degree->delay = options.adjusterMaxDelay; @@ -294,6 +294,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" illumHBox->pack_start (*illumLab, Gtk::PACK_SHRINK); illum = Gtk::manage (new MyComboBoxText ()); illum->append (M ("TP_COLORAPP_ILA")); + illum->append (M ("TP_COLORAPP_IL41")); illum->append (M ("TP_COLORAPP_IL50")); illum->append (M ("TP_COLORAPP_IL55")); illum->append (M ("TP_COLORAPP_IL60")); @@ -628,7 +629,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" // Gtk::Image* iblueredL = Gtk::manage (new RTImage ("circle-blue-small.png")); // Gtk::Image* iblueredR = Gtk::manage (new RTImage ("circle-red-small.png")); - degreeout = Gtk::manage (new Adjuster (M ("TP_COLORAPP_CIECAT_DEGREE"), 0., 100., 1., 100.)); + degreeout = Gtk::manage (new Adjuster (M ("TP_COLORAPP_CIECAT_DEGREE"), 0., 100., 1., 90.)); if (degreeout->delay < options.adjusterMaxDelay) { degreeout->delay = options.adjusterMaxDelay; @@ -646,7 +647,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, "colorappearance" tempout = Gtk::manage (new Adjuster (M ("TP_WBALANCE_TEMPERATURE"), MINTEMP0, MAXTEMP0, 5, CENTERTEMP0, itempR1, itempL1, &wbSlider2Temp, &wbTemp2Slider)); greenout = Gtk::manage (new Adjuster (M ("TP_WBALANCE_GREEN"), MINGREEN0, MAXGREEN0, 0.001, 1.0, igreenR1, igreenL1)); ybout = Gtk::manage (new Adjuster (M ("TP_COLORAPP_MEANLUMINANCE"), 5, 90, 1, 18)); - tempout->set_tooltip_markup (M ("TP_COLORAPP_TEMP_TOOLTIP")); + tempout->set_tooltip_markup (M ("TP_COLORAPP_TEMP2_TOOLTIP")); tempout->throwOnButtonRelease(); tempout->addAutoButton (M ("TP_COLORAPP_TEMPOUT_TOOLTIP")); @@ -798,7 +799,7 @@ void ColorAppearance::neutral_pressed () greensc->resetValue (false); badpixsl->resetValue (false); wbmodel->set_active (0); - illum->set_active (1); + illum->set_active (2); toneCurveMode->set_active (0); toneCurveMode2->set_active (0); toneCurveMode3->set_active (0); @@ -963,21 +964,23 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) illumconn.block (true); if (pedited && !pedited->colorappearance.illum) { - illum->set_active (7); + illum->set_active (8); } else if (pp->colorappearance.illum == "iA") { illum->set_active (0); - } else if (pp->colorappearance.illum == "i50") { + } else if (pp->colorappearance.illum == "i41") { illum->set_active (1); - } else if (pp->colorappearance.illum == "i55") { + } else if (pp->colorappearance.illum == "i50") { illum->set_active (2); - } else if (pp->colorappearance.illum == "i60") { + } else if (pp->colorappearance.illum == "i55") { illum->set_active (3); - } else if (pp->colorappearance.illum == "i65") { + } else if (pp->colorappearance.illum == "i60") { illum->set_active (4); - } else if (pp->colorappearance.illum == "i75") { + } else if (pp->colorappearance.illum == "i65") { illum->set_active (5); - } else if (pp->colorappearance.illum == "ifree") { + } else if (pp->colorappearance.illum == "i75") { illum->set_active (6); + } else if (pp->colorappearance.illum == "ifree") { + illum->set_active (7); } illumconn.block (false); @@ -1225,16 +1228,18 @@ void ColorAppearance::write (ProcParams* pp, ParamsEdited* pedited) if (illum->get_active_row_number() == 0) { pp->colorappearance.illum = "iA"; } else if (illum->get_active_row_number() == 1) { - pp->colorappearance.illum = "i50"; + pp->colorappearance.illum = "i41"; } else if (illum->get_active_row_number() == 2) { - pp->colorappearance.illum = "i55"; + pp->colorappearance.illum = "i50"; } else if (illum->get_active_row_number() == 3) { - pp->colorappearance.illum = "i60"; + pp->colorappearance.illum = "i55"; } else if (illum->get_active_row_number() == 4) { - pp->colorappearance.illum = "i65"; + pp->colorappearance.illum = "i60"; } else if (illum->get_active_row_number() == 5) { - pp->colorappearance.illum = "i75"; + pp->colorappearance.illum = "i65"; } else if (illum->get_active_row_number() == 6) { + pp->colorappearance.illum = "i75"; + } else if (illum->get_active_row_number() == 7) { pp->colorappearance.illum = "ifree"; } @@ -1420,7 +1425,7 @@ void ColorAppearance::presetcat02pressed () greensc->resetValue (false); badpixsl->resetValue (false); wbmodel->set_active (0); - illum->set_active (1); + illum->set_active (2); toneCurveMode->set_active (0); toneCurveMode2->set_active (0); toneCurveMode3->set_active (0); @@ -1432,7 +1437,7 @@ void ColorAppearance::presetcat02pressed () gamutconn.block (false); degree->setAutoValue (true); degree->resetValue (false); - degree->setValue(80); + degree->setValue(90); adapscen->resetValue (false); adapscen->setAutoValue (true); degreeout->resetValue (false); @@ -1447,7 +1452,7 @@ void ColorAppearance::presetcat02pressed () ybscen->setValue(18); surround->set_active (0); adaplum->setValue(400.); - degreeout->setValue(80); + degreeout->setValue(90); ybout->setValue(18); tempout->setValue (nexttemp); greenout->setValue (nextgreen); @@ -1490,7 +1495,7 @@ void ColorAppearance::presetcat02pressed () ybscen->setAutoValue (true); surrsrc->set_active (0); wbmodel->set_active (0); - illum->set_active (1); + illum->set_active (2); tempsc->resetValue (false); greensc->resetValue (false); adapscen->resetValue (false); @@ -1973,26 +1978,30 @@ void ColorAppearance::illumChanged () tempsc->set_sensitive(false); greensc->set_sensitive(false); } else if (illum->get_active_row_number() == 1) { - tempsc->setValue (5003); + tempsc->setValue (4100); tempsc->set_sensitive(false); greensc->set_sensitive(false); } else if (illum->get_active_row_number() == 2) { - tempsc->setValue (5503); + tempsc->setValue (5003); tempsc->set_sensitive(false); greensc->set_sensitive(false); } else if (illum->get_active_row_number() == 3) { - tempsc->setValue (6000); + tempsc->setValue (5503); tempsc->set_sensitive(false); greensc->set_sensitive(false); } else if (illum->get_active_row_number() == 4) { - tempsc->setValue (6504); + tempsc->setValue (6000); tempsc->set_sensitive(false); greensc->set_sensitive(false); } else if (illum->get_active_row_number() == 5) { - tempsc->setValue (7504); + tempsc->setValue (6504); tempsc->set_sensitive(false); greensc->set_sensitive(false); } else if (illum->get_active_row_number() == 6) { + tempsc->setValue (7504); + tempsc->set_sensitive(false); + greensc->set_sensitive(false); + } else if (illum->get_active_row_number() == 7) { tempsc->set_sensitive(true); greensc->set_sensitive(true); } From e3b5a5974884baca831d39ff80750256596b3be8 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 5 Mar 2020 10:41:22 +0100 Subject: [PATCH 189/264] First improvment to histxyY 158 to 192 --- rtengine/rawimagesource.cc | 424 +++++++++++++++++++++---------------- 1 file changed, 245 insertions(+), 179 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index ff9472f1a..53c4aaff0 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3897,7 +3897,7 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy) { - //calculate histogram x y in a range of 158 colors + //calculate histogram x y in a range of 190 colors //this "choice" are guided by generally colors who are in nature skin, sky, etc. in those cases "steps" are small // of course we can change to be more precise #ifdef _OPENMP @@ -4000,279 +4000,345 @@ static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const ar nh = 32; } else if (yc[y][x] < 0.32f) { nh = 33; - } else if (yc[y][x] < 0.34f) { + } else if (yc[y][x] < 0.33f) { nh = 34; - } else if (yc[y][x] < 0.37f) { + } else if (yc[y][x] < 0.335f) { nh = 35; - } else if (yc[y][x] < 0.4f) { + } else if (yc[y][x] < 0.34f) { nh = 36; - } else if (yc[y][x] < 0.45f) { + } else if (yc[y][x] < 0.35f) { nh = 37; - } else if (yc[y][x] < 0.5f) { + } else if (yc[y][x] < 0.37f) { nh = 38; - } else if (yc[y][x] < 0.55f) { + } else if (yc[y][x] < 0.4f) { nh = 39; - } else if (yc[y][x] < 0.7f) { + } else if (yc[y][x] < 0.45f) { nh = 40; + } else if (yc[y][x] < 0.5f) { + nh = 41; + } else if (yc[y][x] < 0.55f) { + nh = 42; + } else if (yc[y][x] < 0.7f) { + nh = 43; } } else if (xc[y][x] < 0.335f && yc[y][x] > 0.1f) {//neutral if (yc[y][x] < 0.2f) { - nh = 41; - } else if (yc[y][x] < 0.24f) { - nh = 42; - } else if (yc[y][x] < 0.29f) { - nh = 43; - } else if (yc[y][x] < 0.32f) { nh = 44; - } else if (yc[y][x] < 0.33f) { + } else if (yc[y][x] < 0.24f) { nh = 45; - } else if (yc[y][x] < 0.34f) { + } else if (yc[y][x] < 0.29f) { nh = 46; - } else if (yc[y][x] < 0.35f) { + } else if (yc[y][x] < 0.32f) { nh = 47; - } else if (yc[y][x] < 0.36f) { + } else if (yc[y][x] < 0.33f) { nh = 48; - } else if (yc[y][x] < 0.37f) { - nh = 47; - } else if (yc[y][x] < 0.38f) { - nh = 48; - } else if (yc[y][x] < 0.4f) { + } else if (yc[y][x] < 0.335f) { nh = 49; - } else if (yc[y][x] < 0.45f) { + } else if (yc[y][x] < 0.34f) { nh = 50; - } else if (yc[y][x] < 0.5f) { + } else if (yc[y][x] < 0.345f) { nh = 51; - } else if (yc[y][x] < 0.55f) { + } else if (yc[y][x] < 0.35f) { nh = 52; - } else if (yc[y][x] < 0.7f) { + } else if (yc[y][x] < 0.355f) { nh = 53; + } else if (yc[y][x] < 0.36f) { + nh = 54; + } else if (yc[y][x] < 0.37f) { + nh = 55; + } else if (yc[y][x] < 0.38f) { + nh = 56; + } else if (yc[y][x] < 0.4f) { + nh = 57; + } else if (yc[y][x] < 0.45f) { + nh = 58; + } else if (yc[y][x] < 0.5f) { + nh = 59; + } else if (yc[y][x] < 0.55f) { + nh = 60; + } else if (yc[y][x] < 0.7f) { + nh = 61; + } + } else if (xc[y][x] < 0.340f && yc[y][x] > 0.1f) {//neutral + if (yc[y][x] < 0.2f) { + nh = 62; + } else if (yc[y][x] < 0.24f) { + nh = 63; + } else if (yc[y][x] < 0.29f) { + nh = 64; + } else if (yc[y][x] < 0.32f) { + nh = 65; + } else if (yc[y][x] < 0.325f) { + nh = 66; + } else if (yc[y][x] < 0.33f) { + nh = 67; + } else if (yc[y][x] < 0.335f) { + nh = 68; + } else if (yc[y][x] < 0.34f) { + nh = 69; + } else if (yc[y][x] < 0.345f) { + nh = 70; + } else if (yc[y][x] < 0.35f) { + nh = 71; + } else if (yc[y][x] < 0.355f) { + nh = 72; + } else if (yc[y][x] < 0.36f) { + nh = 73; + } else if (yc[y][x] < 0.37f) { + nh = 74; + } else if (yc[y][x] < 0.38f) { + nh = 75; + } else if (yc[y][x] < 0.4f) { + nh = 76; + } else if (yc[y][x] < 0.45f) { + nh = 77; + } else if (yc[y][x] < 0.5f) { + nh = 78; + } else if (yc[y][x] < 0.55f) { + nh = 79; + } else if (yc[y][x] < 0.7f) { + nh = 80; } } else if (xc[y][x] < 0.345f && yc[y][x] > 0.1f) {//neutral 37 if (yc[y][x] < 0.2f) { - nh = 54; + nh = 81; } else if (yc[y][x] < 0.24f) { - nh = 55; + nh = 82; } else if (yc[y][x] < 0.29f) { - nh = 56; + nh = 83; } else if (yc[y][x] < 0.32f) { - nh = 57; - } else if (yc[y][x] < 0.33f) {//34 - nh = 58; + nh = 84; + } else if (yc[y][x] < 0.33f) { + nh = 85; + } else if (yc[y][x] < 0.335f) { + nh = 86; } else if (yc[y][x] < 0.34f) { - nh = 59; - } else if (yc[y][x] < 0.35f) {//34 - nh = 60; - } else if (yc[y][x] < 0.36f) {//34 - nh = 61; + nh = 87; + } else if (yc[y][x] < 0.345f) { + nh = 88; + } else if (yc[y][x] < 0.35f) { + nh = 89; + } else if (yc[y][x] < 0.355f) { + nh = 90; + } else if (yc[y][x] < 0.36f) { + nh = 91; } else if (yc[y][x] < 0.37f) { - nh = 62; + nh = 92; } else if (yc[y][x] < 0.38f) { - nh = 63; + nh = 93; } else if (yc[y][x] < 0.39f) { - nh = 64; + nh = 94; } else if (yc[y][x] < 0.4f) { - nh = 65; + nh = 95; } else if (yc[y][x] < 0.42f) { - nh = 66; + nh = 96; } else if (yc[y][x] < 0.45f) { - nh = 67; + nh = 97; } else if (yc[y][x] < 0.48f) { - nh = 68; + nh = 98; } else if (yc[y][x] < 0.5f) { - nh = 69; + nh = 99; } else if (yc[y][x] < 0.55f) { - nh = 70; + nh = 100; } else if (yc[y][x] < 0.65f) { - nh = 71; + nh = 101; } } else if (xc[y][x] < 0.355f && yc[y][x] > 0.1f) {//neutral 37 if (yc[y][x] < 0.2f) { - nh = 72; + nh = 102; } else if (yc[y][x] < 0.24f) { - nh = 73; + nh = 103; } else if (yc[y][x] < 0.29f) { - nh = 74; + nh = 104; } else if (yc[y][x] < 0.32f) { - nh = 75; - } else if (yc[y][x] < 0.33f) {//34 - nh = 76; + nh = 105; + } else if (yc[y][x] < 0.33f) { + nh = 106; + } else if (yc[y][x] < 0.335f) { + nh = 107; } else if (yc[y][x] < 0.34f) { - nh = 77; - } else if (yc[y][x] < 0.35f) {//34 - nh = 78; - } else if (yc[y][x] < 0.36f) {//34 - nh = 79; + nh = 108; + } else if (yc[y][x] < 0.345f) { + nh = 109; + } else if (yc[y][x] < 0.35f) { + nh = 110; + } else if (yc[y][x] < 0.355f) { + nh = 111; + } else if (yc[y][x] < 0.36f) { + nh = 112; } else if (yc[y][x] < 0.37f) { - nh = 80; + nh = 113; } else if (yc[y][x] < 0.38f) { - nh = 81; + nh = 114; } else if (yc[y][x] < 0.39f) { - nh = 82; + nh = 115; } else if (yc[y][x] < 0.4f) { - nh = 83; + nh = 116; } else if (yc[y][x] < 0.42f) { - nh = 84; + nh = 117; } else if (yc[y][x] < 0.45f) { - nh = 85; + nh = 118; } else if (yc[y][x] < 0.48f) { - nh = 86; + nh = 119; } else if (yc[y][x] < 0.5f) { - nh = 87; + nh = 120; } else if (yc[y][x] < 0.55f) { - nh = 88; + nh = 121; } else if (yc[y][x] < 0.65f) { - nh = 89; + nh = 122; } } else if (xc[y][x] < 0.365f && yc[y][x] > 0.15f) { //0.4 if (yc[y][x] < 0.2f) { - nh = 90; - } else if (yc[y][x] < 0.24f) { - nh = 91; - } else if (yc[y][x] < 0.29f) { - nh = 92; - } else if (yc[y][x] < 0.32f) { - nh = 93; - } else if (yc[y][x] < 0.33f) { - nh = 94; - } else if (yc[y][x] < 0.34f) { - nh = 95; - } else if (yc[y][x] < 0.36f) { - nh = 96; - } else if (yc[y][x] < 0.37f) { - nh = 97; - } else if (yc[y][x] < 0.38f) { - nh = 98; - } else if (yc[y][x] < 0.39f) { - nh = 99; - } else if (yc[y][x] < 0.4f) { - nh = 100; - } else if (yc[y][x] < 0.42f) { - nh = 101; - } else if (yc[y][x] < 0.45f) { - nh = 102; - } else if (yc[y][x] < 0.5f) { - nh = 103; - } else if (yc[y][x] < 0.55f) { - nh = 104; - } else if (yc[y][x] < 0.63f) { - nh = 105; - } - } else if (xc[y][x] < 0.405f && yc[y][x] > 0.15f) {//45 - if (yc[y][x] < 0.2f) { - nh = 106; - } else if (yc[y][x] < 0.24f) { - nh = 107; - } else if (yc[y][x] < 0.29f) { - nh = 108; - } else if (yc[y][x] < 0.32f) { - nh = 109; - } else if (yc[y][x] < 0.34f) { - nh = 110; - } else if (yc[y][x] < 0.37f) { - nh = 111; - } else if (yc[y][x] < 0.4f) { - nh = 112; - } else if (yc[y][x] < 0.45f) { - nh = 113; - } else if (yc[y][x] < 0.5f) { - nh = 114; - } else if (yc[y][x] < 0.55f) { - nh = 115; - } else if (yc[y][x] < 0.6f) { - nh = 116; - } - } else if (xc[y][x] < 0.445f && yc[y][x] > 0.15f) {//45 - if (yc[y][x] < 0.2f) { - nh = 117; - } else if (yc[y][x] < 0.24f) { - nh = 118; - } else if (yc[y][x] < 0.29f) { - nh = 119; - } else if (yc[y][x] < 0.32f) { - nh = 120; - } else if (yc[y][x] < 0.34f) { - nh = 121; - } else if (yc[y][x] < 0.37f) { - nh = 122; - } else if (yc[y][x] < 0.4f) { nh = 123; - } else if (yc[y][x] < 0.45f) { - nh = 124; - } else if (yc[y][x] < 0.5f) { - nh = 125; - } else if (yc[y][x] < 0.55f) { - nh = 126; - } else if (yc[y][x] < 0.58f) { - nh = 127; - } - } else if (xc[y][x] < 0.495f && yc[y][x] > 0.15f) { - if (yc[y][x] < 0.2f) { - nh = 128; } else if (yc[y][x] < 0.24f) { - nh = 129; + nh = 124; } else if (yc[y][x] < 0.29f) { - nh = 130; + nh = 125; } else if (yc[y][x] < 0.32f) { - nh = 131; + nh = 126; + } else if (yc[y][x] < 0.33f) { + nh = 127; } else if (yc[y][x] < 0.34f) { - nh = 132; + nh = 128; + } else if (yc[y][x] < 0.35f) { + nh = 129; + } else if (yc[y][x] < 0.36f) { + nh = 130; } else if (yc[y][x] < 0.37f) { + nh = 131; + } else if (yc[y][x] < 0.38f) { + nh = 132; + } else if (yc[y][x] < 0.39f) { nh = 133; } else if (yc[y][x] < 0.4f) { nh = 134; - } else if (yc[y][x] < 0.45f) { + } else if (yc[y][x] < 0.42f) { nh = 135; - } else if (yc[y][x] < 0.5f) { + } else if (yc[y][x] < 0.45f) { nh = 136; - } else if (yc[y][x] < 0.55f) { + } else if (yc[y][x] < 0.5f) { nh = 137; + } else if (yc[y][x] < 0.55f) { + nh = 138; + } else if (yc[y][x] < 0.63f) { + nh = 139; + } + } else if (xc[y][x] < 0.405f && yc[y][x] > 0.15f) {//45 + if (yc[y][x] < 0.2f) { + nh = 140; + } else if (yc[y][x] < 0.24f) { + nh = 141; + } else if (yc[y][x] < 0.29f) { + nh = 142; + } else if (yc[y][x] < 0.32f) { + nh = 143; + } else if (yc[y][x] < 0.34f) { + nh = 144; + } else if (yc[y][x] < 0.37f) { + nh = 145; + } else if (yc[y][x] < 0.4f) { + nh = 146; + } else if (yc[y][x] < 0.45f) { + nh = 147; + } else if (yc[y][x] < 0.5f) { + nh = 148; + } else if (yc[y][x] < 0.55f) { + nh = 149; + } else if (yc[y][x] < 0.6f) { + nh = 150; + } + } else if (xc[y][x] < 0.445f && yc[y][x] > 0.15f) {//45 + if (yc[y][x] < 0.2f) { + nh = 151; + } else if (yc[y][x] < 0.24f) { + nh = 152; + } else if (yc[y][x] < 0.29f) { + nh = 153; + } else if (yc[y][x] < 0.32f) { + nh = 154; + } else if (yc[y][x] < 0.34f) { + nh = 155; + } else if (yc[y][x] < 0.37f) { + nh = 156; + } else if (yc[y][x] < 0.4f) { + nh = 157; + } else if (yc[y][x] < 0.45f) { + nh = 158; + } else if (yc[y][x] < 0.5f) { + nh = 159; + } else if (yc[y][x] < 0.55f) { + nh = 160; + } else if (yc[y][x] < 0.58f) { + nh = 161; + } + } else if (xc[y][x] < 0.495f && yc[y][x] > 0.15f) { + if (yc[y][x] < 0.2f) { + nh = 162; + } else if (yc[y][x] < 0.24f) { + nh = 163; + } else if (yc[y][x] < 0.29f) { + nh = 164; + } else if (yc[y][x] < 0.32f) { + nh = 165; + } else if (yc[y][x] < 0.34f) { + nh = 166; + } else if (yc[y][x] < 0.37f) { + nh = 167; + } else if (yc[y][x] < 0.4f) { + nh = 168; + } else if (yc[y][x] < 0.45f) { + nh = 169; + } else if (yc[y][x] < 0.5f) { + nh = 170; + } else if (yc[y][x] < 0.55f) { + nh = 171; } } else if (xc[y][x] < 0.545f && yc[y][x] > 0.15f) { if (yc[y][x] < 0.2f) { - nh = 138; + nh = 172; } else if (yc[y][x] < 0.24f) { - nh = 139; + nh = 173; } else if (yc[y][x] < 0.29f) { - nh = 140; + nh = 174; } else if (yc[y][x] < 0.32f) { - nh = 141; + nh = 175; } else if (yc[y][x] < 0.34f) { - nh = 142; + nh = 176; } else if (yc[y][x] < 0.37f) { - nh = 143; + nh = 177; } else if (yc[y][x] < 0.4f) { - nh = 144; + nh = 178; } else if (yc[y][x] < 0.45f) { - nh = 145; + nh = 179; } else if (yc[y][x] < 0.5f) { - nh = 146; + nh = 180; } } else if (xc[y][x] < 0.595f && yc[y][x] > 0.15f) { if (yc[y][x] < 0.22f) { - nh = 147; + nh = 181; } else if (yc[y][x] < 0.25f) { - nh = 148; + nh = 182; } else if (yc[y][x] < 0.3f) { - nh = 149; + nh = 183; } else if (yc[y][x] < 0.35f) { - nh = 150; + nh = 184; } else if (yc[y][x] < 0.4f) { - nh = 151; + nh = 185; } else if (yc[y][x] < 0.45f) { - nh = 152; + nh = 186; } } else if (xc[y][x] < 0.65f && yc[y][x] > 0.12f) { if (yc[y][x] < 0.25f) { - nh = 153; + nh = 187; } else if (yc[y][x] < 0.3f) { - nh = 154; + nh = 188; } else if (yc[y][x] < 0.35f) { - nh = 155; + nh = 189; } else if (yc[y][x] < 0.45f) { - nh = 156; + nh = 190; } } else if (xc[y][x] < 0.75f && yc[y][x] > 0.1f) { - nh = 157; + nh = 191; } if (nh >= 0) { histxythr[nh]++; @@ -4714,7 +4780,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double float gmm[N_t]; float bmm[N_t]; - constexpr int siza = 158;//size of histogram + constexpr int siza = 192;//size of histogram //tempref and greenref are camera wb values. // I used them by default to select good spectral values !! From e63320eec9c11c55e3d6726de829d7027b6f9197 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 5 Mar 2020 13:36:37 +0100 Subject: [PATCH 190/264] Added new spectral datas near neutral --- rtengine/colortemp.cc | 38 +++++++++++++++++++++++++++++++++++++- rtengine/colortemp.h | 3 +++ rtengine/rawimagesource.cc | 16 ++++++++-------- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index ec8641fc0..8ef1be27d 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -2408,6 +2408,41 @@ const double ColorTemp::Colorlab_n80_26_spect[97] = { -0.2047, -0.205, -0.2069, -0.208, -0.2099, -0.21, -0.2115, -0.21, -0.2106, -0.209, -0.2086, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +//0,1767000 0,2207000 0,3142000 0,5269000 0,7018000 0,7605000 0,7580000 0,7366000 0,7182000 0,6929000 0,6661000 0,6542000 +//0,6420000 0,6085000 0,5752000 0,5728000 0,5723000 0,5318000 0,4982000 0,5226000 0,5670000 0,5929000 0,5977000 0,5975000 +//0,6002000 0,6065000 0,6177000 0,6352000 0,6526000 0,6623000 0,6633000 0,6593000 0,6517000 0,6479000 0,6607000 0,6908000 + +const double ColorTemp::JDC468_greyc14_66_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1767, 0.19, 0.2207, 0.25, 0.3142, 0.40, 0.5269, 0.63, 0.7018, 0.73, 0.7605, 0.76, 0.7580, 0.74, 0.7366, 0.725, 0.7182, 0.705, 0.6929, 0.68, 0.6661, 0.66, 0.6542, 0.65, + 0.642, 0.62, 0.6085, 0.585, 0.5752, 0.573, 0.5728, 0.573, 0.5723, 0.555, 0.5318, 0.51, 0.4982, 0.51, 0.5226, 0.54, 0.5670, 0.58, 0.5929, 0.594, 0.5977, 0.597, 0.5975, 0.6, + 0.6002, 0.602, 0.6065, 0.61, 0.6177, 0.62, 0.6352, 0.64, 0.6526, 0.66, 0.6623, 0.662, 0.6633, 0.66, 0.6593, 0.653, 0.6517, 0.65, 0.6479, 0.65, 0.6607, 0.69, 0.6908, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +//0,1325000 0,1637000 0,2222000 0,3492000 0,4523000 0,4897000 0,4918000 0,4840000 0,4761000 0,4638000 0,4538000 0,4582000 +// 0,4588000 0,4360000 0,4091000 0,4101000 0,4128000 0,3785000 0,3494000 0,3720000 0,4122000 0,4339000 0,4362000 0,4355000 +// 0,4395000 0,4475000 0,4606000 0,4807000 0,5006000 0,5125000 0,5145000 0,5112000 0,5029000 0,4992000 0,5150000 0,5526000 + +const double ColorTemp::JDC468_greym13_325_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1325, 0.15, 0.1637, 0.2, 0.2222, 0.28, 0.3492, 0.40, 0.4523, 0.47, 0.4897, 0.49, 0.4918, 0.49, 0.4840, 0.48, 0.4761, 0.47, 0.4638, 0.46, 0.4538, 0.455, 0.4582, 0.458, + 0.4588, 0.45, 0.4360, 0.42, 0.4091, 0.41, 0.4101, 0.411, 0.4128, 0.405, 0.3785, 0.36, 0.3494, 0.36, 0.3720, 0.41, 0.4122, 0.425, 0.4339, 0.435, 0.4362, 0.597, 0.4355, 0.437, + 0.4395, 0.44, 0.4475, 0.45, 0.4606, 0.47, 0.4807, 0.49, 0.5006, 0.51, 0.5125, 0.513, 0.5145, 0.512, 0.5112, 0.51, 0.5029, 0.5, 0.4992, 0.51, 0.5150, 0.53, 0.5526, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +//0,0823000 0,1036000 0,1337000 0,1966000 0,2468000 0,2679000 0,2728000 0,2726000 0,2724000 0,2698000 0,2705000 0,2810000 +// 0,2879000 0,2756000 0,2586000 0,2601000 0,2617000 0,2357000 0,2124000 0,2241000 0,2471000 0,2581000 0,2569000 0,2548000 +// 0,2579000 0,2653000 0,2765000 0,2941000 0,3126000 0,3230000 0,3238000 0,3189000 0,3091000 0,3043000 0,3200000 0,3579000 + +const double ColorTemp::JDC468_greyf26_156_spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0823, 0.1, 0.1036, 0.11, 0.1337, 0.16, 0.1966, 0.22, 0.2468, 0.255, 0.2679, 0.27, 0.2728, 0.273, 0.2726, 0.273, 0.2724, 0.271, 0.2698, 0.27, 0.2705, 0.275, 0.2810, 0.285, + 0.2879, 0.28, 0.2756, 0.26, 0.2586, 0.26, 0.2601, 0.261, 0.2617, 0.25, 0.2357, 0.22, 0.2124, 0.22, 0.2241, 0.23, 0.2471, 0.25, 0.2581, 0.278, 0.2569, 0.255, 0.2548, 0.255, + 0.2579, 0.26, 0.2653, 0.27, 0.2765, 0.28, 0.2941, 0.30, 0.3126, 0.32, 0.3230, 0.323, 0.3238, 0.32, 0.3189, 0.31, 0.3091, 0.302, 0.3043, 0.31, 0.3200, 0.34, 0.3579, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + /* * Name: XYZtoCorColorTemp.c @@ -3449,7 +3484,8 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float J570_NeuQ1_spect, J570_NeuS7_spect, J570_NeuV10_spect, J570_NeuW18_spect, J570_NeuZ14_spect, //189 J570_NeuC18_spect, J570_NeuD17_spect, J570_NeuJ11_spect, J570_NeuL4_spect, Colorlab_n72_n2_spect, - Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect + Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect, + JDC468_greyc14_66_spect, JDC468_greym13_325_spect, JDC468_greyf26_156_spect }; diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index 5feed9d26..e96bf8563 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -367,6 +367,9 @@ public: static const double Colorlab_19_n69_spect[97]; static const double Colorlab_n80_10_spect[97]; static const double Colorlab_n80_26_spect[97]; + static const double JDC468_greyc14_66_spect[97]; + static const double JDC468_greym13_325_spect[97]; + static const double JDC468_greyf26_156_spect[97]; static void spectrum_to_xyz_daylight (double _m1, double _m2, double &x, double &y, double &z); static void spectrum_to_xyz_blackbody (double _temp, double &x, double &y, double &z); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 53c4aaff0..f876b8902 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4412,19 +4412,19 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com Copyright (c) Ingo Weyrich 3 - 2020 (heckflosse67@gmx.de) - This algorithm try to find temperature correlation between 20 to 200 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. + This algorithm try to find temperature correlation between 20 to 203 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. I have test many many algorithms to find the first one that work :) Probably (sure) there are improvement to do... I have create a table temperature with temp and white point with 100 values between 2000K and 12000K we can obviously change these values, more...with different steps - I have create or recuparate and transformed 200 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. - I think this value of 200 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized + I have create or recuparate and transformed 203 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. + I think this value of 203 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized Of course we can increase this number :) 1) for the current raw file we create a table for each temp of RGB multipliers 2) then, I choose the "camera temp" to initialize calculation (why not) - 3) for this temp, I calculated XYZ values for the 200 spectral datas + 3) for this temp, I calculated XYZ values for the 203 spectral datas 4) then I create for the image an "histogram", but for xyY (Cie 1931 color space) 5) for each pixel (in fact to accelerate only 1/10 for and 1/10 for y), I determine for each couple xy, the number of occurences 6) I sort this result in ascending order @@ -4764,7 +4764,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {12001., 0.960440, 1.601019} }; const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - constexpr int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values + constexpr int Nc = 203 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values array2D Tx(N_t, Nc); array2D Ty(N_t, Nc); array2D Tz(N_t, Nc); @@ -4863,7 +4863,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double array2D reff_spect_xx_camera(N_t, 2 * Nc + 2); //here we select the good spectral color inside the 113 values - //call tempxy to calculate for 200 color references Temp and XYZ with cat02 + //call tempxy to calculate for 203 color references Temp and XYZ with cat02 ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 200 illuminants @@ -5021,7 +5021,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int maxnb = rtengine::LIM(settings->itcwb_sizereference, 1, 5); if (settings->itcwb_thres > 39) { - maxnb = 200 / settings->itcwb_thres; + maxnb = 203 / settings->itcwb_thres; } for (int nb = 1; nb <= maxnb; ++nb) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 @@ -5299,7 +5299,7 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int { // BENCHFUN //used by auto WB local to calculate red, green, blue in local region - const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);//10 arbitrary value ; perhaps 4 or 5 or 20 const int bfh = H / 10 + ((H % 10) > 0 ? 1 : 0); if (! greenloc) { From f6c5bf0a0b5b4478d1b40a79b33c1202a9885d7c Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 6 Mar 2020 08:53:39 +0100 Subject: [PATCH 191/264] Change didide getrgbloc 10 to 9 - suppress 3 spectral datas --- rtengine/colortemp.cc | 7 ++++--- rtengine/colortemp.h | 3 ++- rtengine/rawimagesource.cc | 14 +++++++------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 8ef1be27d..0b49658cd 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -2408,6 +2408,7 @@ const double ColorTemp::Colorlab_n80_26_spect[97] = { -0.2047, -0.205, -0.2069, -0.208, -0.2099, -0.21, -0.2115, -0.21, -0.2106, -0.209, -0.2086, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +/* //0,1767000 0,2207000 0,3142000 0,5269000 0,7018000 0,7605000 0,7580000 0,7366000 0,7182000 0,6929000 0,6661000 0,6542000 //0,6420000 0,6085000 0,5752000 0,5728000 0,5723000 0,5318000 0,4982000 0,5226000 0,5670000 0,5929000 0,5977000 0,5975000 //0,6002000 0,6065000 0,6177000 0,6352000 0,6526000 0,6623000 0,6633000 0,6593000 0,6517000 0,6479000 0,6607000 0,6908000 @@ -2442,7 +2443,7 @@ const double ColorTemp::JDC468_greyf26_156_spect[97] = { 0.2579, 0.26, 0.2653, 0.27, 0.2765, 0.28, 0.2941, 0.30, 0.3126, 0.32, 0.3230, 0.323, 0.3238, 0.32, 0.3189, 0.31, 0.3091, 0.302, 0.3043, 0.31, 0.3200, 0.34, 0.3579, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - +*/ /* * Name: XYZtoCorColorTemp.c @@ -3484,8 +3485,8 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float J570_NeuQ1_spect, J570_NeuS7_spect, J570_NeuV10_spect, J570_NeuW18_spect, J570_NeuZ14_spect, //189 J570_NeuC18_spect, J570_NeuD17_spect, J570_NeuJ11_spect, J570_NeuL4_spect, Colorlab_n72_n2_spect, - Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect, - JDC468_greyc14_66_spect, JDC468_greym13_325_spect, JDC468_greyf26_156_spect + Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect + /*JDC468_greyc14_66_spect, JDC468_greym13_325_spect, JDC468_greyf26_156_spect*/ }; diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index e96bf8563..e3c899f82 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -367,10 +367,11 @@ public: static const double Colorlab_19_n69_spect[97]; static const double Colorlab_n80_10_spect[97]; static const double Colorlab_n80_26_spect[97]; + /* static const double JDC468_greyc14_66_spect[97]; static const double JDC468_greym13_325_spect[97]; static const double JDC468_greyf26_156_spect[97]; - + */ static void spectrum_to_xyz_daylight (double _m1, double _m2, double &x, double &y, double &z); static void spectrum_to_xyz_blackbody (double _temp, double &x, double &y, double &z); static void spectrum_to_xyz_preset (const double* spec_intens, double &x, double &y, double &z); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index f876b8902..c4226585a 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4764,7 +4764,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {12001., 0.960440, 1.601019} }; const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - constexpr int Nc = 203 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values + constexpr int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values array2D Tx(N_t, Nc); array2D Ty(N_t, Nc); array2D Tz(N_t, Nc); @@ -5299,8 +5299,8 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int { // BENCHFUN //used by auto WB local to calculate red, green, blue in local region - const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);//10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfh = H / 10 + ((H % 10) > 0 ? 1 : 0); + const int bfw = W / 9 + ((W % 9) > 0 ? 1 : 0);//10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfh = H / 9 + ((H % 9) > 0 ? 1 : 0); if (! greenloc) { greenloc(bfw, bfh); @@ -5350,9 +5350,9 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int #pragma omp parallel for #endif for (int i = 0; i < bfh; ++i) { - const int ii = i * 10; + const int ii = i * 9; if (ii < H) { - for (int j = 0, jj = 0; jj < W; ++j, jj += 10) { + for (int j = 0, jj = 0; j < bfw; ++j, jj += 9) { redloc[i][j] = red[ii][jj] * multip; greenloc[i][j] = green[ii][jj] * multip; blueloc[i][j] = blue[ii][jj] * multip; @@ -5552,8 +5552,8 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref if (wbpar.method == "autitcgreen") { bool twotimes = false; - const int bfw = W / 10 + ((W % 10) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 - const int bfh = H / 10 + ((H % 10) > 0 ? 1 : 0); + const int bfw = W / 9 + ((W % 9) > 0 ? 1 : 0);// 10 arbitrary value ; perhaps 4 or 5 or 20 + const int bfh = H / 9 + ((H % 9) > 0 ? 1 : 0); WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw); } From 9773f1bd98930e43930c19625b491eb156208bbb Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 6 Mar 2020 10:41:58 +0100 Subject: [PATCH 192/264] Improve results when chroma is very low --- rtengine/colortemp.cc | 27 ++++++++++++++++++++++++++- rtengine/colortemp.h | 3 +++ rtengine/rawimagesource.cc | 30 ++++++++++++++++++------------ 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 0b49658cd..4d5cb42f2 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -2444,7 +2444,30 @@ const double ColorTemp::JDC468_greyf26_156_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; */ +//A1 0.0912 0.1228 0.1712 0.2978 0.3713 0.4241 0.4861 0.5255 0.5355 0.5363 0.5237 0.5251 +// 0.5722 0.6554 0.6936 0.6675 0.6203 0.5651 0.5116 0.4825 0.4714 0.4866 0.5320 0.5729 +// 0.5968 0.6069 0.6131 0.6198 0.6285 0.6325 0.6316 0.6282 0.6227 0.6196 0.6215 0.6337 +const double ColorTemp::Colorlab_n80_5_9_5_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0912, 0.1, 0.1228, 0.15, 0.1712, 0.2, 0.2978, 0.32, 0.3713, 0.41, 0.4241, 0.44, 0.4861, 0.51, 0.5255, 0.53, 0.5355, 0.534, 0.5363, 0.53, 0.5237, 0.524, 0.5251, 0.56, + 0.5722, 0.6, 0.6554, 0.67, 0.6936, 0.67, 0.6675, 0.65, 0.6203, 0.6, 0.5651, 0.54, 0.5116, 0.5, 0.4825, 0.48, 0.4714, 0.48, 0.4866, 0.5, 0.5320, 0.55, 0.5729, 0.58, + 0.5968, 0.6, 0.6069, 0.61, 0.6131, 0.615, 0.6198, 0.62, 0.6285, 0.63, 0.6325, 0.632, 0.6316, 0.63, 0.6282, 0.625, 0.6227, 0.62, 0.6196, 0.62, 0.6215, 0.63, 0.6337, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +/* +//A2 0.0385 0.0514 0.0711 0.1229 0.1528 0.1744 0.1999 0.2163 0.2209 0.2216 0.2167 0.2185 +//0.2414 0.2813 0.3012 0.2922 0.2734 0.2511 0.2292 0.2173 0.2127 0.2183 0.2354 0.2508 +//0.2599 0.2637 0.2662 0.2689 0.2725 0.2742 0.2738 0.2724 0.2701 0.2689 0.2697 0.2747 + +const double ColorTemp::Colorlab_n57_5_6_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0385, 0.04, 0.0514, 0.06, 0.0711, 0.1, 0.1229, 0.14, 0.1528, 0.16, 0.1744, 0.18, 0.1999, 0.2, 0.2163, 0.22, 0.2209, 0.221, 0.2216, 0.22, 0.2167, 0.216, 0.2185, 0.23, + 0.2414, 0.26, 0.2813, 0.3, 0.3012, 0.3, 0.2922, 0.28, 0.2734, 0.26, 0.2511, 0.24, 0.2292, 0.22, 0.2173, 0.215, 0.2127, 0.215, 0.2183, 0.22, 0.2354, 0.24, 0.2508, 0.255, + 0.2599, 0.26, 0.2637, 0.263, 0.2662, 0.267, 0.2689, 0.27, 0.2725, 0.273, 0.2742, 0.274, 0.2738, 0.273, 0.2724, 0.271, 0.2701, 0.27, 0.2689, 0.269, 0.2697, 0.27, 0.2747, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +*/ /* * Name: XYZtoCorColorTemp.c * @@ -3485,7 +3508,9 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float J570_NeuQ1_spect, J570_NeuS7_spect, J570_NeuV10_spect, J570_NeuW18_spect, J570_NeuZ14_spect, //189 J570_NeuC18_spect, J570_NeuD17_spect, J570_NeuJ11_spect, J570_NeuL4_spect, Colorlab_n72_n2_spect, - Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect + Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect, + Colorlab_n80_5_9_5_9spect //, Colorlab_n57_5_6_9spect + /*JDC468_greyc14_66_spect, JDC468_greym13_325_spect, JDC468_greyf26_156_spect*/ }; diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index e3c899f82..89c324490 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -367,6 +367,9 @@ public: static const double Colorlab_19_n69_spect[97]; static const double Colorlab_n80_10_spect[97]; static const double Colorlab_n80_26_spect[97]; + static const double Colorlab_n80_5_9_5_9spect[97]; +// static const double Colorlab_n57_5_6_9spect[97]; + /* static const double JDC468_greyc14_66_spect[97]; static const double JDC468_greym13_325_spect[97]; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index c4226585a..0326609cd 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4412,19 +4412,19 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com Copyright (c) Ingo Weyrich 3 - 2020 (heckflosse67@gmx.de) - This algorithm try to find temperature correlation between 20 to 203 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. + This algorithm try to find temperature correlation between 20 to 201 color between 200 spectral color and about 20 to 55 color found in the image, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. I have test many many algorithms to find the first one that work :) Probably (sure) there are improvement to do... I have create a table temperature with temp and white point with 100 values between 2000K and 12000K we can obviously change these values, more...with different steps - I have create or recuparate and transformed 203 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. - I think this value of 203 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized + I have create or recuparate and transformed 201 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. + I think this value of 201 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized Of course we can increase this number :) 1) for the current raw file we create a table for each temp of RGB multipliers 2) then, I choose the "camera temp" to initialize calculation (why not) - 3) for this temp, I calculated XYZ values for the 203 spectral datas + 3) for this temp, I calculated XYZ values for the 201 spectral datas 4) then I create for the image an "histogram", but for xyY (Cie 1931 color space) 5) for each pixel (in fact to accelerate only 1/10 for and 1/10 for y), I determine for each couple xy, the number of occurences 6) I sort this result in ascending order @@ -4764,7 +4764,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {12001., 0.960440, 1.601019} }; const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - constexpr int Nc = 200 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values + constexpr int Nc = 201 + 1;//200 number of reference spectral colors, I think it is enough to retrieve good values array2D Tx(N_t, Nc); array2D Ty(N_t, Nc); array2D Tz(N_t, Nc); @@ -4863,7 +4863,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double array2D reff_spect_xx_camera(N_t, 2 * Nc + 2); //here we select the good spectral color inside the 113 values - //call tempxy to calculate for 203 color references Temp and XYZ with cat02 + //call tempxy to calculate for 201 color references Temp and XYZ with cat02 ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 200 illuminants @@ -4998,7 +4998,9 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } estimchrom /= sizcu4; - + if (settings->verbose) { + printf("estimchrom=%f\n", estimchrom); + } if (settings->itcwb_sort) { //sort in ascending with chroma values std::sort(wbchro, wbchro + sizcu4, wbchro[0]); } @@ -5021,7 +5023,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int maxnb = rtengine::LIM(settings->itcwb_sizereference, 1, 5); if (settings->itcwb_thres > 39) { - maxnb = 203 / settings->itcwb_thres; + maxnb = 201 / settings->itcwb_thres; } for (int nb = 1; nb <= maxnb; ++nb) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 @@ -5178,13 +5180,14 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double } //degrade correllation with color high chroma, but not too much...seems not good, but keep in case of?? - if (estimchrom < 0.025f) {//very smal value of chroma for image - + //I suppress this old behavior replace by tint += 0.02 + /* if (estimchrom < 0.025f) {//very smal value of chroma for image + //enable strong values good_spectral[0] = true;//blue good_spectral[11] = true;//green good_spectral[62] = true;//red } - +*/ int kkg = -1; for (int i = 0; i < Nc ; ++i) { if (good_spectral[i]) { @@ -5253,7 +5256,10 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double tempitc = Txyz[goodref].Tem; greenitc = gree[greengood].green; - + if (estimchrom < 0.025f) { + float ac = -2.40f * estimchrom + 0.06f;//small empirical correction, maximum 0.06 if chroma=0 for all image, currently for very low chroma +0.02 + greenitc += ac; + } } avg_rm = 10000.f * rmm[goodref]; From 0e5f514ec11a12e1d25c5d78602cc206957c18ad Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 6 Mar 2020 12:00:21 +0100 Subject: [PATCH 193/264] recalculate itcwb when demosaic method changed --- rtengine/improccoordinator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 3cc58b01c..9bef5b502 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -434,7 +434,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) currWB = imgsrc->getWB(); lastAwbauto = ""; //reinitialize auto } else if (autowb) { - if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { + if (params->wb.method == "autitcgreen" || lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { double rm, gm, bm; double tempitc = 5000.f; double greenitc = 1.; From 961bf3e5fda37ca8a907733f72a1680e3a73e6c8 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 6 Mar 2020 15:15:22 +0100 Subject: [PATCH 194/264] Change range geen in autowb --- rtengine/rawimagesource.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 0326609cd..1296e1a42 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -5284,7 +5284,7 @@ void RawImageSource::WBauto(double & tempref, double & greenref, array2D if (wbpar.method == "autitcgreen") { bool extra = false; - if (greenref > 0.77 && greenref < 1.3) {// 0/77 and 1.3 arbitraties values + if (greenref > 0.5 && greenref < 1.3) {// 0/77 and 1.3 arbitraties values greenitc = greenref; if (settings->itcwb_forceextra) { From 8875cc8df47e70852a235c167fca4a48adf297d7 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 6 Mar 2020 16:04:31 +0100 Subject: [PATCH 195/264] Change number of green reference from 118 to 134 --- rtengine/rawimagesource.cc | 42 ++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1296e1a42..48383c8ba 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4493,14 +4493,30 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double float snedecor;//1. actually but put in case of confiance interval } WbGreen; //green (tint) values between 0.4 to 4.0 - constexpr WbGreen gree[118] = {//symmetric coefficient between 0.717 and 1.40 + constexpr WbGreen gree[134] = {//symmetric coefficient between 0.717 and 1.40 {0.400, 1.f}, + {0.420, 1.f}, + {0.440, 1.f}, + {0.460, 1.f}, + {0.480, 1.f}, {0.500, 1.f}, + {0.520, 1.f}, + {0.540, 1.f}, {0.550, 1.f}, + {0.560, 1.f}, + {0.570, 1.f}, + {0.580, 1.f}, + {0.590, 1.f}, {0.600, 1.f}, - {0.625, 1.f}, + {0.610, 1.f}, + {0.620, 1.f}, + {0.630, 1.f}, + {0.640, 1.f}, {0.650, 1.f}, - {0.675, 1.f}, + {0.660, 1.f}, + {0.670, 1.f}, + {0.680, 1.f}, + {0.690, 1.f}, {0.700, 1.f}, {0.714, 1.f}, {0.727, 1.f}, @@ -4533,7 +4549,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double {0.971, 1.f}, {0.980, 1.f}, {0.990, 1.f}, - {1.000, 1.f},//39 + {1.000, 1.f},//55 {1.010, 1.f}, {1.020, 1.f}, {1.030, 1.f}, @@ -4620,8 +4636,8 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int end; } RangeGreen; - constexpr RangeGreen Rangestandard = {8, 70}; - constexpr RangeGreen Rangeextended = {4, 77}; + constexpr RangeGreen Rangestandard = {24, 86}; + constexpr RangeGreen Rangeextended = {15, 93}; const RangeGreen Rangemax = {0, N_g}; RangeGreen Rangegreenused; @@ -5022,7 +5038,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double //calculate deltaE xx to find best values of spectrals datas - limited to chroma values int maxnb = rtengine::LIM(settings->itcwb_sizereference, 1, 5); - if (settings->itcwb_thres > 39) { + if (settings->itcwb_thres > 55) { maxnb = 201 / settings->itcwb_thres; } @@ -5130,7 +5146,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double for (int i = 0; i < N_g; ++i) {//init variables with Tgstud[i].student = 1000.f;//max value to initialize Tgstud[i].tempref = 57;//5002K - Tgstud[i].greenref = 39;// 1.f + Tgstud[i].greenref = 55;// 1.f } @@ -5223,13 +5239,13 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double int goodrefprov; float studprov; const int goodref0 = Tgstud[0].tempref; - const int greengood0 = Tgstud[0].greenref - 39;//39 green = 1 + const int greengood0 = Tgstud[0].greenref - 55;//55 green = 1 const float stud0 = Tgstud[0].student; const int goodref1 = Tgstud[1].tempref; const float stud1 = Tgstud[1].student; - const int greengood1 = Tgstud[1].greenref - 39; + const int greengood1 = Tgstud[1].greenref - 55; const int goodref2 = Tgstud[2].tempref; - const int greengood2 = Tgstud[2].greenref - 39; + const int greengood2 = Tgstud[2].greenref - 55; const float stud2 = Tgstud[2].student; if (std::fabs(greengood2) < std::fabs(greengood1)) { @@ -5245,12 +5261,12 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double if (std::fabs(greengoodprov) < std::fabs(greengood0)) { goodref = goodrefprov; - greengood = greengoodprov + 39; + greengood = greengoodprov + 55; studgood = studprov; } else { goodref = goodref0; - greengood = greengood0 + 39; + greengood = greengood0 + 55; studgood = stud0; } From 6563989f5df1892648fe25a5b62436cb460e3426 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 7 Mar 2020 17:52:04 +0100 Subject: [PATCH 196/264] Added X-T3 matrix to camconst --- rtengine/camconst.json | 1 + 1 file changed, 1 insertion(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 9b1b99d1b..d50e050dd 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1376,6 +1376,7 @@ Camera constants: { // Quality C, only raw crop "make_model": [ "FUJIFILM X-T3", "FUJIFILM X-T30" ], + "dcraw_matrix": [ 13426,-6334,-1177,-4244,12136,2371,-580,1303,5980 ], // DNG_v11, standard_v2 d65 "raw_crop": [ 0, 5, 6252, 4176] }, From b2165aedd9bedac97b4c0207a6026c1f600bf11c Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 8 Mar 2020 14:12:23 +0100 Subject: [PATCH 197/264] camconst.cc/h : code review --- rtengine/camconst.cc | 223 ++++++++++++++---------------------- rtengine/camconst.h | 33 +++--- rtengine/pdaflinesfilter.cc | 2 +- rtengine/rawimage.cc | 109 +----------------- rtengine/rawimagesource.cc | 2 +- 5 files changed, 109 insertions(+), 260 deletions(-) diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index 36aa96030..52466cd1a 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -2,20 +2,23 @@ * This file is part of RawTherapee. */ #include "camconst.h" + +#include +#include +#include +#include +#include + #include #include #include + #include "settings.h" #include "rt_math.h" -#include -#include // cJSON is a very minimal JSON parser lib in C, not for threaded stuff etc, so if we're going to use JSON more than just // here we should probably replace cJSON with something beefier. #include "cJSON.h" -#include -#include -#include namespace rtengine { @@ -30,8 +33,7 @@ CameraConst::CameraConst() : pdafOffset(0) } -bool -CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) +bool CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) { cJSON *ji = (cJSON *)ji_; @@ -40,7 +42,7 @@ CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) return false; } - for (ji = ji->child; ji != nullptr; ji = ji->next) { + for (ji = ji->child; ji; ji = ji->next) { cJSON *js = cJSON_GetObjectItem(ji, "aperture"); if (!js) { @@ -51,7 +53,7 @@ CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) return false; } - float aperture = (float)js->valuedouble; + const float aperture = js->valuedouble; js = cJSON_GetObjectItem(ji, "scale_factor"); if (!js) { @@ -62,22 +64,21 @@ CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) return false; } - float scale_factor = (float)js->valuedouble; + const float scale_factor = js->valuedouble; cc->mApertureScaling.insert(std::pair(aperture, scale_factor)); } return true; } -bool -CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) +bool CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) { cJSON *ji = (cJSON *)ji_; if (ji->type == cJSON_Number) { - struct camera_const_levels lvl; + camera_const_levels lvl; lvl.levels[0] = lvl.levels[1] = lvl.levels[2] = lvl.levels[3] = ji->valueint; - cc->mLevels[bw].insert(std::pair(0, lvl)); + cc->mLevels[bw].insert(std::pair(0, lvl)); return true; } else if (ji->type != cJSON_Array) { fprintf(stderr, "\"ranges\":\"%s\" must be a number or an array\n", bw ? "white" : "black"); @@ -85,11 +86,11 @@ CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) } if (ji->child->type == cJSON_Number) { - struct camera_const_levels lvl; + camera_const_levels lvl; int i; cJSON *js; - for (js = ji->child, i = 0; js != nullptr && i < 4; js = js->next, i++) { + for (js = ji->child, i = 0; js && i < 4; js = js->next, i++) { lvl.levels[i] = js->valueint; } @@ -97,16 +98,16 @@ CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) lvl.levels[3] = lvl.levels[1]; // G2 = G1 } else if (i == 1) { lvl.levels[3] = lvl.levels[2] = lvl.levels[1] = lvl.levels[0]; - } else if (i != 4 || js != nullptr) { + } else if (i != 4 || js) { fprintf(stderr, "\"ranges\":\"%s\" array must have 1, 3 or 4 numbers.\n", bw ? "white" : "black"); return false; } - cc->mLevels[bw].insert(std::pair(0, lvl)); + cc->mLevels[bw].insert(std::pair(0, lvl)); return true; } - for (ji = ji->child; ji != nullptr; ji = ji->next) { + for (ji = ji->child; ji; ji = ji->next) { int iso[1000] = { 0 }; int iso_count = 0; cJSON *js = cJSON_GetObjectItem(ji, "iso"); @@ -120,7 +121,7 @@ CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) } else if (js->type == cJSON_Array) { int i; - for (js = js->child, i = 0; js != nullptr && i < 1000; js = js->next, i++) { + for (js = js->child, i = 0; js && i < 1000; js = js->next, i++) { if (js->type != cJSON_Number) { fprintf(stderr, "\"ranges\":\"%s\":\"iso\" must be a number or an array of numbers.\n", bw ? "white" : "black"); return false; @@ -142,14 +143,14 @@ CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) return false; } - struct camera_const_levels lvl; + camera_const_levels lvl; if (js->type == cJSON_Number) { lvl.levels[0] = lvl.levels[1] = lvl.levels[2] = lvl.levels[3] = js->valueint; } else if (js->type == cJSON_Array) { int i; - for (js = js->child, i = 0; js != nullptr && i < 4; js = js->next, i++) { + for (js = js->child, i = 0; js && i < 4; js = js->next, i++) { if (js->type != cJSON_Number) { fprintf(stderr, "\"ranges\":\"%s\":\"levels\" must be a number or an array of numbers.\n", bw ? "white" : "black"); return false; @@ -162,7 +163,7 @@ CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) lvl.levels[3] = lvl.levels[1]; // G2 = G1 } else if (i == 1) { lvl.levels[3] = lvl.levels[2] = lvl.levels[1] = lvl.levels[0]; - } else if (i != 4 || js != nullptr) { + } else if (i != 4 || js) { fprintf(stderr, "\"ranges\":\"%s\":\"levels\" array must have 1, 3 or 4 numbers.\n", bw ? "white" : "black"); return false; } @@ -172,15 +173,14 @@ CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) } for (int i = 0; i < iso_count; i++) { - cc->mLevels[bw].insert(std::pair(iso[i], lvl)); + cc->mLevels[bw].insert(std::pair(iso[i], lvl)); } } return true; } -CameraConst * -CameraConst::parseEntry(void *cJSON_, const char *make_model) +CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) { cJSON *js, *ji, *jranges; js = (cJSON *)cJSON_; @@ -198,7 +198,7 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model) int i; - for (i = 0, ji = ji->child; i < 12 && ji != nullptr; i++, ji = ji->next) { + for (i = 0, ji = ji->child; i < 12 && ji; i++, ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"dcraw_matrix\" array must contain numbers\n"); goto parse_error; @@ -218,7 +218,7 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model) int i; - for (i = 0, ji = ji->child; i < 4 && ji != nullptr; i++, ji = ji->next) { + for (i = 0, ji = ji->child; i < 4 && ji; i++, ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"raw_crop\" array must contain numbers\n"); goto parse_error; @@ -227,7 +227,7 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model) cc->raw_crop[i] = ji->valueint; } - if (i != 4 || ji != nullptr) { + if (i != 4 || ji) { fprintf(stderr, "\"raw_crop\" must contain 4 numbers\n"); goto parse_error; } @@ -243,7 +243,7 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model) int i; - for (i = 0, ji = ji->child; i < 8 * 4 && ji != nullptr; i++, ji = ji->next) { + for (i = 0, ji = ji->child; i < 2 * 4 && ji; i++, ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"masked_areas\" array must contain numbers\n"); goto parse_error; @@ -298,16 +298,14 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model) } for (int bw = 0; bw < 2; bw++) { - struct camera_const_levels lvl; + camera_const_levels lvl; if (!cc->get_Levels(lvl, bw, 0, 0)) { - std::map::iterator it; - it = cc->mLevels[bw].begin(); + const std::map::const_iterator it = cc->mLevels[bw].begin(); if (it != cc->mLevels[bw].end()) { // insert levels with lowest iso as the default (iso 0) - struct camera_const_levels lvl = it->second; - cc->mLevels[bw].insert(std::pair(0, lvl)); + cc->mLevels[bw].insert(std::pair(0, it->second)); } } } @@ -320,7 +318,7 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model) goto parse_error; } - for (ji = ji->child; ji != nullptr; ji = ji->next) { + for (ji = ji->child; ji; ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"pdaf_pattern\" array must contain numbers\n"); goto parse_error; @@ -359,14 +357,12 @@ parse_error: return nullptr; } -bool -CameraConst::has_dcrawMatrix() +bool CameraConst::has_dcrawMatrix() const { return dcraw_matrix[0] != 0; } -void -CameraConst::update_dcrawMatrix(const short *other) +void CameraConst::update_dcrawMatrix(const short *other) { if (!other) { return; @@ -377,8 +373,7 @@ CameraConst::update_dcrawMatrix(const short *other) } } -const short * -CameraConst::get_dcrawMatrix() +const short* CameraConst::get_dcrawMatrix() const { if (!has_dcrawMatrix()) { return nullptr; @@ -387,20 +382,12 @@ CameraConst::get_dcrawMatrix() return dcraw_matrix; } -bool -CameraConst::has_pdafPattern() -{ - return pdafPattern.size() > 0; -} - -std::vector -CameraConst::get_pdafPattern() +const std::vector& CameraConst::get_pdafPattern() const { return pdafPattern; } -void -CameraConst::update_pdafPattern(const std::vector &other) +void CameraConst::update_pdafPattern(const std::vector &other) { if (other.empty()) { return; @@ -408,8 +395,7 @@ CameraConst::update_pdafPattern(const std::vector &other) pdafPattern = other; } -void -CameraConst::update_pdafOffset(int other) +void CameraConst::update_pdafOffset(int other) { if (other == 0) { return; @@ -417,14 +403,12 @@ CameraConst::update_pdafOffset(int other) pdafOffset = other; } -bool -CameraConst::has_rawCrop() +bool CameraConst::has_rawCrop() const { return raw_crop[0] != 0 || raw_crop[1] != 0 || raw_crop[2] != 0 || raw_crop[3] != 0; } -void -CameraConst::get_rawCrop(int& left_margin, int& top_margin, int& width, int& height) +void CameraConst::get_rawCrop(int& left_margin, int& top_margin, int& width, int& height) const { left_margin = raw_crop[0]; top_margin = raw_crop[1]; @@ -432,22 +416,20 @@ CameraConst::get_rawCrop(int& left_margin, int& top_margin, int& width, int& hei height = raw_crop[3]; } -bool -CameraConst::has_rawMask(int idx) +bool CameraConst::has_rawMask(int idx) const { - if (idx < 0 || idx > 7) { + if (idx < 0 || idx > 1) { return false; } return (raw_mask[idx][0] | raw_mask[idx][1] | raw_mask[idx][2] | raw_mask[idx][3]) != 0; } -void -CameraConst::get_rawMask(int idx, int& top, int& left, int& bottom, int& right) +void CameraConst::get_rawMask(int idx, int& top, int& left, int& bottom, int& right) const { top = left = bottom = right = 0; - if (idx < 0 || idx > 7) { + if (idx < 0 || idx > 1) { return; } @@ -457,8 +439,7 @@ CameraConst::get_rawMask(int idx, int& top, int& left, int& bottom, int& right) right = raw_mask[idx][3]; } -void -CameraConst::update_Levels(const CameraConst *other) +void CameraConst::update_Levels(const CameraConst *other) { if (!other) { return; @@ -482,13 +463,9 @@ CameraConst::update_Levels(const CameraConst *other) if (other->white_max) { white_max = other->white_max; } - -// for (std::map::iterator i=other->mLevels[0].begin(); i!=other->mLevels[0].end(); i++) { -// } } -void -CameraConst::update_Crop(CameraConst *other) +void CameraConst::update_Crop(CameraConst *other) { if (!other) { return; @@ -499,18 +476,16 @@ CameraConst::update_Crop(CameraConst *other) } } -bool -CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float fnumber) +bool CameraConst::get_Levels(camera_const_levels & lvl, int bw, int iso, float fnumber) const { - std::map::iterator it; - it = mLevels[bw].find(iso); + std::map::const_iterator it = mLevels[bw].find(iso); if (it == mLevels[bw].end()) { - std::map::iterator best_it = mLevels[bw].begin(); + std::map::const_iterator best_it = mLevels[bw].begin(); if (iso > 0) { for (it = mLevels[bw].begin(); it != mLevels[bw].end(); ++it) { - if (abs(it->first - iso) <= abs(best_it->first - iso)) { + if (std::abs(it->first - iso) <= std::abs(best_it->first - iso)) { best_it = it; } else { break; @@ -528,16 +503,15 @@ CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float lvl = it->second; if (bw == 1 && fnumber > 0 && mApertureScaling.size() > 0) { - std::map::iterator it; - it = mApertureScaling.find(fnumber); + std::map::const_iterator scaleIt = mApertureScaling.find(fnumber); - if (it == mApertureScaling.end()) { + if (scaleIt == mApertureScaling.end()) { // fnumber may be an exact aperture, eg 1.414, or a rounded eg 1.4. In our map we // should have rounded numbers so we translate and retry the lookup // table with traditional 1/3 stop f-number rounding used by most cameras, we only // have in the range 0.7 - 10.0, but aperture scaling rarely happen past f/4.0 - const float fn_tab[8][3] = { + constexpr float fn_tab[8][3] = { { 0.7, 0.8, 0.9 }, { 1.0, 1.1, 1.2 }, { 1.4, 1.6, 1.8 }, @@ -550,12 +524,12 @@ CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float for (int avh = 0; avh < 8; avh++) { for (int k = 0; k < 3; k++) { - float av = (avh - 1) + (float)k / 3; - float aperture = sqrtf(powf(2, av)); + const float av = (avh - 1) + k / 3.f; + const float aperture = std::sqrt(std::pow(2.f, av)); if (fnumber > aperture * 0.97f && fnumber < aperture / 0.97f) { fnumber = fn_tab[avh][k]; - it = mApertureScaling.find(fnumber); + scaleIt = mApertureScaling.find(fnumber); avh = 7; break; } @@ -565,18 +539,16 @@ CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float float scaling = 1.0; - if (it == mApertureScaling.end()) { - std::map::reverse_iterator it; - - for (it = mApertureScaling.rbegin(); it != mApertureScaling.rend(); ++it) { - if (it->first > fnumber) { - scaling = it->second; + if (scaleIt == mApertureScaling.end()) { + for (std::map::const_reverse_iterator entry = mApertureScaling.rbegin(); entry != mApertureScaling.rend(); ++entry) { + if (entry->first > fnumber) { + scaling = entry->second; } else { break; } } } else { - scaling = it->second; + scaling = scaleIt->second; } if (scaling > 1.f) { @@ -593,11 +565,10 @@ CameraConst::get_Levels(struct camera_const_levels & lvl, int bw, int iso, float return true; } -int -CameraConst::get_BlackLevel(const int idx, const int iso_speed) +int CameraConst::get_BlackLevel(const int idx, const int iso_speed) const { assert(idx >= 0 && idx <= 3); - struct camera_const_levels lvl; + camera_const_levels lvl; if (!get_Levels(lvl, 0, iso_speed, 0.0)) { return -1; @@ -606,11 +577,10 @@ CameraConst::get_BlackLevel(const int idx, const int iso_speed) return lvl.levels[idx]; } -int -CameraConst::get_WhiteLevel(const int idx, const int iso_speed, const float fnumber) +int CameraConst::get_WhiteLevel(const int idx, const int iso_speed, const float fnumber) const { assert(idx >= 0 && idx <= 3); - struct camera_const_levels lvl; + camera_const_levels lvl; if (!get_Levels(lvl, 1, iso_speed, fnumber)) { return -1; @@ -619,45 +589,41 @@ CameraConst::get_WhiteLevel(const int idx, const int iso_speed, const float fnum return lvl.levels[idx]; } -bool -CameraConst::has_globalGreenEquilibration() +bool CameraConst::has_globalGreenEquilibration() const { return globalGreenEquilibration >= 0; } -bool -CameraConst::get_globalGreenEquilibration() +bool CameraConst::get_globalGreenEquilibration() const { return globalGreenEquilibration > 0; } -void -CameraConst::update_globalGreenEquilibration(bool other) +void CameraConst::update_globalGreenEquilibration(bool other) { globalGreenEquilibration = (other ? 1 : 0); } -bool -CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_) +bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_) { // read the file into a single long string const char *filename = filename_.c_str(); FILE *stream = fopen(filename, "rt"); - if (stream == nullptr) { + if (!stream) { fprintf(stderr, "Could not open camera constants file \"%s\": %s\n", filename, strerror(errno)); return false; } - size_t bufsize = 16384; - size_t increment = 2 * bufsize; + size_t bufsize = 262144; + size_t increment = bufsize; size_t datasize = 0, ret; char *buf = (char *)malloc(bufsize); - while ((ret = fread(&buf[datasize], 1, bufsize - datasize, stream)) != 0) { + while ((ret = fread(&buf[datasize], 1, bufsize - datasize - 1, stream)) != 0) { datasize += ret; - if (datasize == bufsize) { // we need more memory + if (datasize == bufsize - 1) { // we need more memory bufsize += increment; void *temp = realloc(buf, bufsize); // try to realloc buffer with new size if(!temp) { // realloc failed @@ -683,10 +649,6 @@ CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_ fclose(stream); - if(datasize == bufsize) { - buf = (char *)realloc(buf, datasize + 1); - } - buf[datasize] = '\0'; // remove comments @@ -711,11 +673,7 @@ CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_ } free(buf); - /*{ - char *js_str = cJSON_Print(jsroot); - printf("%s\n", js_str); - free(js_str); - }*/ + cJSON *js = cJSON_GetObjectItem(jsroot, "camera_constants"); if (!js) { @@ -723,7 +681,7 @@ CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_ goto parse_error; } - for (js = js->child; js != nullptr; js = js->next) { + for (js = js->child; js; js = js->next) { cJSON *ji = cJSON_GetObjectItem(js, "make_model"); if (!ji) { @@ -738,7 +696,7 @@ CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_ is_array = true; } - while (ji != nullptr) { + while (ji) { if (ji->type != cJSON_String) { fprintf(stderr, "\"make_model\" must be a string or an array of strings\n"); goto parse_error; @@ -750,18 +708,18 @@ CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& filename_ goto parse_error; } - Glib::ustring make_model(ji->valuestring); - make_model = make_model.uppercase(); + std::string make_model(ji->valuestring); + std::transform(make_model.begin(), make_model.end(), make_model.begin(), ::toupper); - const auto ret = mCameraConstants.emplace(make_model, cc); + const auto entry = mCameraConstants.emplace(make_model, cc); - if(ret.second) { // entry inserted into map + if (entry.second) { // entry inserted into map if (settings->verbose) { printf("Add camera constants for \"%s\"\n", make_model.c_str()); } } else { // The CameraConst already exist for this camera make/model -> we merge the values - CameraConst *existingcc = ret.first->second; + CameraConst *existingcc = entry.first->second; // updating the dcraw matrix existingcc->update_dcrawMatrix(cc->get_dcrawMatrix()); @@ -820,22 +778,19 @@ void CameraConstantsStore::init(const Glib::ustring& baseDir, const Glib::ustrin } } -CameraConstantsStore * -CameraConstantsStore::getInstance() +CameraConstantsStore* CameraConstantsStore::getInstance() { static CameraConstantsStore instance_; return &instance_; } -CameraConst * -CameraConstantsStore::get(const char make[], const char model[]) +const CameraConst* CameraConstantsStore::get(const char make[], const char model[]) const { - Glib::ustring key(make); + std::string key(make); key += " "; key += model; - key = key.uppercase(); - std::map::iterator it; - it = mCameraConstants.find(key); + std::transform(key.begin(), key.end(), key.begin(), ::toupper); + const auto it = mCameraConstants.find(key); if (it == mCameraConstants.end()) { return nullptr; diff --git a/rtengine/camconst.h b/rtengine/camconst.h index 3af05ab01..b959481ba 100644 --- a/rtengine/camconst.h +++ b/rtengine/camconst.h @@ -27,9 +27,9 @@ private: std::string make_model; short dcraw_matrix[12]; int raw_crop[4]; - int raw_mask[8][4]; + int raw_mask[2][4]; int white_max; - std::map mLevels[2]; + std::map mLevels[2]; std::map mApertureScaling; std::vector pdafPattern; int pdafOffset; @@ -38,24 +38,23 @@ private: CameraConst(); static bool parseLevels(CameraConst *cc, int bw, void *ji); static bool parseApertureScaling(CameraConst *cc, void *ji); - bool get_Levels(struct camera_const_levels & lvl, int bw, int iso, float fnumber); + bool get_Levels(camera_const_levels & lvl, int bw, int iso, float fnumber) const; public: static CameraConst *parseEntry(void *cJSON, const char *make_model); - bool has_dcrawMatrix(void); - bool has_pdafPattern(void); + bool has_dcrawMatrix(void) const; void update_dcrawMatrix(const short *other); - const short *get_dcrawMatrix(void); - std::vector get_pdafPattern(); - int get_pdafOffset() {return pdafOffset;} - bool has_rawCrop(void); - void get_rawCrop(int& left_margin, int& top_margin, int& width, int& height); - bool has_rawMask(int idx); - void get_rawMask(int idx, int& top, int& left, int& bottom, int& right); - int get_BlackLevel(int idx, int iso_speed); - int get_WhiteLevel(int idx, int iso_speed, float fnumber); - bool has_globalGreenEquilibration(); - bool get_globalGreenEquilibration(); + const short *get_dcrawMatrix(void) const; + const std::vector& get_pdafPattern() const; + int get_pdafOffset() const {return pdafOffset;}; + bool has_rawCrop(void) const; + void get_rawCrop(int& left_margin, int& top_margin, int& width, int& height) const; + bool has_rawMask(int idx) const; + void get_rawMask(int idx, int& top, int& left, int& bottom, int& right) const; + int get_BlackLevel(int idx, int iso_speed) const; + int get_WhiteLevel(int idx, int iso_speed, float fnumber) const; + bool has_globalGreenEquilibration() const; + bool get_globalGreenEquilibration() const; void update_Levels(const CameraConst *other); void update_Crop(CameraConst *other); void update_pdafPattern(const std::vector &other); @@ -75,7 +74,7 @@ public: ~CameraConstantsStore(); void init(const Glib::ustring& baseDir, const Glib::ustring& userSettingsDir); static CameraConstantsStore *getInstance(void); - CameraConst *get(const char make[], const char model[]); + const CameraConst *get(const char make[], const char model[]) const; }; } diff --git a/rtengine/pdaflinesfilter.cc b/rtengine/pdaflinesfilter.cc index 1eddbc1ea..b5c72f7f4 100644 --- a/rtengine/pdaflinesfilter.cc +++ b/rtengine/pdaflinesfilter.cc @@ -177,7 +177,7 @@ PDAFLinesFilter::PDAFLinesFilter(RawImage *ri): gthresh_ = new PDAFGreenEqulibrateThreshold(W_, H_); CameraConstantsStore* ccs = CameraConstantsStore::getInstance(); - CameraConst *cc = ccs->get(ri_->get_maker().c_str(), ri_->get_model().c_str()); + const CameraConst *cc = ccs->get(ri_->get_maker().c_str(), ri_->get_model().c_str()); if (cc) { pattern_ = cc->get_pdafPattern(); diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc index 34d5d961c..c2df70468 100644 --- a/rtengine/rawimage.cc +++ b/rtengine/rawimage.cc @@ -524,7 +524,7 @@ int RawImage::loadRaw (bool loadData, unsigned int imageNum, bool closeFile, Pro } CameraConstantsStore* ccs = CameraConstantsStore::getInstance(); - CameraConst *cc = ccs->get(make, model); + const CameraConst *cc = ccs->get(make, model); if (raw_image) { if (cc && cc->has_rawCrop()) { @@ -850,42 +850,18 @@ DCraw::dcraw_coeff_overrides(const char make[], const char model[], const int is short trans[12]; // set first value to 0 for no change } table[] = { - { - "Canon EOS 5D Mark III", -1, 0x3a98, /* RT */ - { 6722, -635, -963, -4287, 12460, 2028, -908, 2162, 5668 } - }, { "Canon EOS 5D", -1, 0xe6c, /* RT */ { 6319, -793, -614, -5809, 13342, 2738, -1132, 1559, 7971 } }, - { - "Canon EOS 6D", -1, 0x3c82, - { 7034, -804, -1014, -4420, 12564, 2058, -851, 1994, 5758 } - }, - { - "Canon EOS 7D", -1, 0x3510, /* RT - Colin Walker */ - { 5962, -171, -732, -4189, 12307, 2099, -911, 1981, 6304 } - }, { "Canon EOS 20D", -1, 0xfff, /* RT */ { 7590, -1646, -673, -4697, 12411, 2568, -627, 1118, 7295 } }, - { - "Canon EOS 40D", -1, 0x3f60, /* RT */ - { 6070, -531, -883, -5763, 13647, 2315, -1533, 2582, 6801 } - }, - { - "Canon EOS 60D", -1, 0x2ff7, /* RT - Colin Walker */ - { 5678, -179, -718, -4389, 12381, 2243, -869, 1819, 6380 } - }, { "Canon EOS 450D", -1, 0x390d, /* RT */ { 6246, -1272, -523, -5075, 12357, 3075, -1035, 1825, 7333 } }, - { - "Canon EOS 550D", -1, 0x3dd7, /* RT - Lebedev*/ - { 6519, -772, -703, -4994, 12737, 2519, -1387, 2492, 6175 } - }, { "Canon EOS-1D Mark III", 0, 0x3bb0, /* RT */ { 7406, -1592, -646, -4856, 12457, 2698, -432, 726, 7921 } @@ -894,18 +870,10 @@ DCraw::dcraw_coeff_overrides(const char make[], const char model[], const int is "Canon PowerShot G10", -1, -1, /* RT */ { 12535, -5030, -796, -2711, 10134, 3006, -413, 1605, 5264 } }, - { - "Canon PowerShot G12", -1, -1, /* RT */ - { 12222, -4097, -1380, -2876, 11016, 2130, -888, 1630, 4434 } - }, - - { "Fujifilm X100", -1, -1, /* RT - Colin Walker */ { 10841, -3288, -807, -4652, 12552, 2344, -642, 1355, 7206 } }, - - { "Nikon D200", -1, 0xfbc, /* RT */ { 8498, -2633, -295, -5423, 12869, 2860, -777, 1077, 8124 } @@ -918,32 +886,14 @@ DCraw::dcraw_coeff_overrides(const char make[], const char model[], const int is "Nikon D3100", -1, -1, /* RT */ { 7729, -2212, -481, -5709, 13148, 2858, -1295, 1908, 8936 } }, - { - "Nikon D3S", -1, -1, /* RT */ - { 8792, -2663, -344, -5221, 12764, 2752, -1491, 2165, 8121 } - }, { "Nikon D5200", -1, -1, // color matrix copied from D5200 DNG D65 matrix { 8322, -3112, -1047, -6367, 14342, 2179, -988, 1638, 6394 } }, - { - "Nikon D7000", -1, -1, /* RT - Tanveer(tsk1979) */ - { 7530, -1942, -255, -4318, 11390, 3362, -926, 1694, 7649 } - }, { "Nikon D7100", -1, -1, // color matrix and WP copied from D7100 DNG D65 matrix { 8322, -3112, -1047, -6367, 14342, 2179, -988, 1638, 6394 } }, - { - "Nikon D700", -1, -1, /* RT */ - { 8364, -2503, -352, -6307, 14026, 2492, -1134, 1512, 8156 } - }, - { - "Nikon COOLPIX A", -1, 0x3e00, // color matrix and WP copied from "COOLPIX A" DNG D65 matrix - { 8198, -2239, -724, -4871, 12389, 2798, -1043, 205, 7181 } - }, - - { "Olympus E-30", -1, 0xfbc, /* RT - Colin Walker */ { 8510, -2355, -693, -4819, 12520, 2578, -1029, 2067, 7752 } @@ -984,69 +934,14 @@ DCraw::dcraw_coeff_overrides(const char make[], const char model[], const int is "Olympus XZ-1", -1, -1, /* RT - Colin Walker */ { 8665, -2247, -762, -2424, 10372, 2382, -1011, 2286, 5189 } }, - - - /* since Dcraw_v9.21 Panasonic BlackLevel is read from exif (tags 0x001c BlackLevelRed, 0x001d BlackLevelGreen, 0x001e BlackLevelBlue - and we define here the needed offset of around 15. The total BL is BL + BLoffset (cblack + black) */ - - { - "Panasonic DMC-FZ150", 15, 0xfd2, /* RT */ - { 10435, -3208, -72, -2293, 10506, 2067, -486, 1725, 4682 } - }, - { - "Panasonic DMC-G10", 15, 0xf50, /* RT - Colin Walker - variable WL 3920 - 4080 */ - { 8310, -1811, -960, -4941, 12990, 2151, -1378, 2468, 6860 } - }, - { - "Panasonic DMC-G1", 15, 0xf50, /* RT - Colin Walker - variable WL 3920 - 4080 */ - { 7477, -1615, -651, -5016, 12769, 2506, -1380, 2475, 7240 } - }, - { - "Panasonic DMC-G2", 15, 0xf50, /* RT - Colin Walker - variable WL 3920 - 4080 */ - { 8310, -1811, -960, -4941, 12990, 2151, -1378, 2468, 6860 } - }, - { - "Panasonic DMC-G3", 15, 0xfdc, /* RT - Colin Walker - WL 4060 */ - { 6051, -1406, -671, -4015, 11505, 2868, -1654, 2667, 6219 } - }, - { - "Panasonic DMC-G5", 15, 0xfdc, /* RT - WL 4060 */ - { 7122, -2092, -419, -4643, 11769, 3283, -1363, 2413, 5944 } - }, - { - "Panasonic DMC-GF1", 15, 0xf50, /* RT - Colin Walker - Variable WL 3920 - 4080 */ - { 7863, -2080, -668, -4623, 12331, 2578, -1020, 2066, 7266 } - }, - { - "Panasonic DMC-GF2", 15, 0xfd2, /* RT - Colin Walker - WL 4050 */ - { 7694, -1791, -745, -4917, 12818, 2332, -1221, 2322, 7197 } - }, - { - "Panasonic DMC-GF3", 15, 0xfd2, /* RT - Colin Walker - WL 4050 */ - { 8074, -1846, -861, -5026, 12999, 2239, -1320, 2375, 7422 } - }, - { - "Panasonic DMC-GH1", 15, 0xf5a, /* RT - Colin Walker - variable WL 3930 - 4080 */ - { 6360, -1557, -375, -4201, 11504, 3086, -1378, 2518, 5843 } - }, - { - "Panasonic DMC-GH2", 15, 0xf5a, /* RT - Colin Walker - variable WL 3930 - 4080 */ -// { 6855,-1765,-456,-4223,11600,2996,-1450,2602,5761 } }, disabled due to problems with underwater WB - { 7780, -2410, -806, -3913, 11724, 2484, -1018, 2390, 5298 } - }, // dcraw original - { "Pentax K200D", -1, -1, /* RT */ { 10962, -4428, -542, -5486, 13023, 2748, -569, 842, 8390 } }, - - { "Leica Camera AG M9 Digital Camera", -1, -1, /* RT */ { 7181, -1706, -55, -3557, 11409, 2450, -621, 2072, 7533 } }, - - { "SONY NEX-3", 128 << dcraw_arw2_scaling_bugfix_shift, -1, /* RT - Colin Walker */ { 5145, -741, -123, -4915, 12310, 2945, -794, 1489, 6906 } @@ -1104,7 +999,7 @@ DCraw::dcraw_coeff_overrides(const char make[], const char model[], const int is { // test if we have any information in the camera constants store, if so we take that. rtengine::CameraConstantsStore* ccs = rtengine::CameraConstantsStore::getInstance(); - rtengine::CameraConst *cc = ccs->get(make, model); + const rtengine::CameraConst *cc = ccs->get(make, model); if (cc) { if (RT_blacklevel_from_constant == ThreeValBool::T) { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 48383c8ba..f08609f5e 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -1453,7 +1453,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le [&]() -> bool { CameraConstantsStore *ccs = CameraConstantsStore::getInstance(); - CameraConst *cc = ccs->get(ri->get_maker().c_str(), ri->get_model().c_str()); + const CameraConst *cc = ccs->get(ri->get_maker().c_str(), ri->get_model().c_str()); return cc && cc->get_globalGreenEquilibration(); }; From 8b00bb5a5697dd339f061808e3d9935efeb34dd3 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 8 Mar 2020 14:19:39 +0100 Subject: [PATCH 198/264] camconst.cc : more auto --- rtengine/camconst.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index 52466cd1a..5fd8ed81b 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -301,7 +301,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) camera_const_levels lvl; if (!cc->get_Levels(lvl, bw, 0, 0)) { - const std::map::const_iterator it = cc->mLevels[bw].begin(); + const auto it = cc->mLevels[bw].cbegin(); if (it != cc->mLevels[bw].end()) { // insert levels with lowest iso as the default (iso 0) @@ -481,7 +481,7 @@ bool CameraConst::get_Levels(camera_const_levels & lvl, int bw, int iso, float f std::map::const_iterator it = mLevels[bw].find(iso); if (it == mLevels[bw].end()) { - std::map::const_iterator best_it = mLevels[bw].begin(); + auto best_it = mLevels[bw].cbegin(); if (iso > 0) { for (it = mLevels[bw].begin(); it != mLevels[bw].end(); ++it) { From 4ef0b753549eb1314f27ad3d652d415a7d48de44 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 8 Mar 2020 14:36:47 +0100 Subject: [PATCH 199/264] camconst.cc : minor cleanups --- rtengine/camconst.cc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index 5fd8ed81b..fe55ecd11 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -512,14 +512,14 @@ bool CameraConst::get_Levels(camera_const_levels & lvl, int bw, int iso, float f // table with traditional 1/3 stop f-number rounding used by most cameras, we only // have in the range 0.7 - 10.0, but aperture scaling rarely happen past f/4.0 constexpr float fn_tab[8][3] = { - { 0.7, 0.8, 0.9 }, - { 1.0, 1.1, 1.2 }, - { 1.4, 1.6, 1.8 }, - { 2.0, 2.2, 2.5 }, - { 2.8, 3.2, 3.5 }, - { 4.0, 4.5, 5.0 }, - { 5.6, 6.3, 7.1 }, - { 8.0, 9.0, 10.0 } + { 0.7f, 0.8f, 0.9f }, + { 1.f, 1.1f, 1.2f }, + { 1.4f, 1.6f, 1.8f }, + { 2.f, 2.2f, 2.5f }, + { 2.8f, 3.2f, 3.5f }, + { 4.f, 4.5f, 5.f }, + { 5.6f, 6.3f, 7.1f }, + { 8.f, 9.f, 10.f } }; for (int avh = 0; avh < 8; avh++) { @@ -537,7 +537,7 @@ bool CameraConst::get_Levels(camera_const_levels & lvl, int bw, int iso, float f } } - float scaling = 1.0; + float scaling = 1.f; if (scaleIt == mApertureScaling.end()) { for (std::map::const_reverse_iterator entry = mApertureScaling.rbegin(); entry != mApertureScaling.rend(); ++entry) { @@ -570,7 +570,7 @@ int CameraConst::get_BlackLevel(const int idx, const int iso_speed) const assert(idx >= 0 && idx <= 3); camera_const_levels lvl; - if (!get_Levels(lvl, 0, iso_speed, 0.0)) { + if (!get_Levels(lvl, 0, iso_speed, 0.f)) { return -1; } @@ -626,7 +626,7 @@ bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& file if (datasize == bufsize - 1) { // we need more memory bufsize += increment; void *temp = realloc(buf, bufsize); // try to realloc buffer with new size - if(!temp) { // realloc failed + if (!temp) { // realloc failed temp = malloc(bufsize); // alloc now buffer if (temp) { // alloc worked memcpy(temp, buf, bufsize - increment); // copy old buffer content to new buffer From 5691b5498caad2d23f3b9b4cc9aa2bd45ed9d48a Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sun, 8 Mar 2020 22:08:49 +0100 Subject: [PATCH 200/264] camconst.cc : one more auto --- rtengine/camconst.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index fe55ecd11..1e303ba73 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -540,7 +540,7 @@ bool CameraConst::get_Levels(camera_const_levels & lvl, int bw, int iso, float f float scaling = 1.f; if (scaleIt == mApertureScaling.end()) { - for (std::map::const_reverse_iterator entry = mApertureScaling.rbegin(); entry != mApertureScaling.rend(); ++entry) { + for (auto entry = mApertureScaling.crbegin(); entry != mApertureScaling.crend(); ++entry) { if (entry->first > fnumber) { scaling = entry->second; } else { From 493d7306a4d3458136f0d3f151f1a9f84432ab35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Mon, 9 Mar 2020 10:33:56 +0100 Subject: [PATCH 201/264] More C++-isms --- rtengine/camconst.cc | 151 +++++++++++++++++++++---------------------- rtengine/camconst.h | 6 +- 2 files changed, 75 insertions(+), 82 deletions(-) diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index 1e303ba73..aab2a252c 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include @@ -33,9 +35,9 @@ CameraConst::CameraConst() : pdafOffset(0) } -bool CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) +bool CameraConst::parseApertureScaling(CameraConst *cc, const void *ji_) { - cJSON *ji = (cJSON *)ji_; + const cJSON *ji = static_cast(ji_); if (ji->type != cJSON_Array) { fprintf(stderr, "\"ranges\":\"aperture_scaling\" must be an array\n"); @@ -43,12 +45,14 @@ bool CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) } for (ji = ji->child; ji; ji = ji->next) { - cJSON *js = cJSON_GetObjectItem(ji, "aperture"); + const cJSON *js = cJSON_GetObjectItem(ji, "aperture"); if (!js) { fprintf(stderr, "missing \"ranges\":\"aperture_scaling\":\"aperture\" object item.\n"); return false; - } else if (js->type != cJSON_Number) { + } + + if (js->type != cJSON_Number) { fprintf(stderr, "\"ranges\":\"aperture_scaling\":\"aperture\" must be a number.\n"); return false; } @@ -59,28 +63,32 @@ bool CameraConst::parseApertureScaling(CameraConst *cc, void *ji_) if (!js) { fprintf(stderr, "missing \"ranges\":\"aperture_scaling\":\"scale_factor\" object item.\n"); return false; - } else if (js->type != cJSON_Number) { + } + + if (js->type != cJSON_Number) { fprintf(stderr, "\"ranges\":\"aperture_scaling\":\"scale_factor\" must be a number.\n"); return false; } const float scale_factor = js->valuedouble; - cc->mApertureScaling.insert(std::pair(aperture, scale_factor)); + cc->mApertureScaling.emplace(aperture, scale_factor); } return true; } -bool CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) +bool CameraConst::parseLevels(CameraConst *cc, int bw, const void *ji_) { - cJSON *ji = (cJSON *)ji_; + const cJSON *ji = static_cast(ji_); if (ji->type == cJSON_Number) { camera_const_levels lvl; lvl.levels[0] = lvl.levels[1] = lvl.levels[2] = lvl.levels[3] = ji->valueint; - cc->mLevels[bw].insert(std::pair(0, lvl)); + cc->mLevels[bw].emplace(0, lvl); return true; - } else if (ji->type != cJSON_Array) { + } + + if (ji->type != cJSON_Array) { fprintf(stderr, "\"ranges\":\"%s\" must be a number or an array\n", bw ? "white" : "black"); return false; } @@ -88,7 +96,7 @@ bool CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) if (ji->child->type == cJSON_Number) { camera_const_levels lvl; int i; - cJSON *js; + const cJSON *js; for (js = ji->child, i = 0; js && i < 4; js = js->next, i++) { lvl.levels[i] = js->valueint; @@ -103,34 +111,31 @@ bool CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) return false; } - cc->mLevels[bw].insert(std::pair(0, lvl)); + cc->mLevels[bw].emplace(0, lvl); return true; } for (ji = ji->child; ji; ji = ji->next) { - int iso[1000] = { 0 }; - int iso_count = 0; - cJSON *js = cJSON_GetObjectItem(ji, "iso"); + const cJSON *js = cJSON_GetObjectItem(ji, "iso"); if (!js) { fprintf(stderr, "missing \"ranges\":\"%s\":\"iso\" object item.\n", bw ? "white" : "black"); return false; - } else if (js->type == cJSON_Number) { - iso[0] = js->valueint; - iso_count = 1; - } else if (js->type == cJSON_Array) { - int i; + } - for (js = js->child, i = 0; js && i < 1000; js = js->next, i++) { + std::vector isos; + + if (js->type == cJSON_Number) { + isos.push_back(js->valueint); + } else if (js->type == cJSON_Array) { + for (js = js->child; js; js = js->next) { if (js->type != cJSON_Number) { fprintf(stderr, "\"ranges\":\"%s\":\"iso\" must be a number or an array of numbers.\n", bw ? "white" : "black"); return false; } - iso[i] = js->valueint; + isos.push_back(js->valueint); } - - iso_count = i; } else { fprintf(stderr, "\"ranges\":\"%s\":\"iso\" must be an array or a number.\n", bw ? "white" : "black"); return false; @@ -172,28 +177,27 @@ bool CameraConst::parseLevels(CameraConst *cc, int bw, void *ji_) return false; } - for (int i = 0; i < iso_count; i++) { - cc->mLevels[bw].insert(std::pair(iso[i], lvl)); + for (auto iso : isos) { + cc->mLevels[bw].emplace(iso, lvl); } } return true; } -CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) +CameraConst* CameraConst::parseEntry(const void *cJSON_, const char *make_model) { - cJSON *js, *ji, *jranges; - js = (cJSON *)cJSON_; + const cJSON *js = static_cast(cJSON_); - CameraConst *cc = new CameraConst; + std::unique_ptr cc(new CameraConst); cc->make_model = make_model; - ji = cJSON_GetObjectItem(js, "dcraw_matrix"); + const cJSON *ji = cJSON_GetObjectItem(js, "dcraw_matrix"); if (ji) { if (ji->type != cJSON_Array) { fprintf(stderr, "\"dcraw_matrix\" must be an array\n"); - goto parse_error; + return nullptr; } int i; @@ -201,10 +205,10 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) for (i = 0, ji = ji->child; i < 12 && ji; i++, ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"dcraw_matrix\" array must contain numbers\n"); - goto parse_error; + return nullptr; } - cc->dcraw_matrix[i] = (short)ji->valueint; + cc->dcraw_matrix[i] = ji->valueint; } } @@ -213,7 +217,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (ji) { if (ji->type != cJSON_Array) { fprintf(stderr, "\"raw_crop\" must be an array\n"); - goto parse_error; + return nullptr; } int i; @@ -221,7 +225,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) for (i = 0, ji = ji->child; i < 4 && ji; i++, ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"raw_crop\" array must contain numbers\n"); - goto parse_error; + return nullptr; } cc->raw_crop[i] = ji->valueint; @@ -229,7 +233,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (i != 4 || ji) { fprintf(stderr, "\"raw_crop\" must contain 4 numbers\n"); - goto parse_error; + return nullptr; } } @@ -238,7 +242,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (ji) { if (ji->type != cJSON_Array) { fprintf(stderr, "\"masked_areas\" must be an array\n"); - goto parse_error; + return nullptr; } int i; @@ -246,7 +250,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) for (i = 0, ji = ji->child; i < 2 * 4 && ji; i++, ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"masked_areas\" array must contain numbers\n"); - goto parse_error; + return nullptr; } cc->raw_mask[i / 4][i % 4] = ji->valueint; @@ -254,27 +258,23 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (i % 4 != 0) { fprintf(stderr, "\"masked_areas\" array length must be divisible by 4\n"); - goto parse_error; + return nullptr; } } - jranges = cJSON_GetObjectItem(js, "ranges"); + const cJSON *jranges = cJSON_GetObjectItem(js, "ranges"); if (jranges) { ji = cJSON_GetObjectItem(jranges, "black"); - if (ji) { - if (!parseLevels(cc, 0, ji)) { - goto parse_error; - } + if (ji && !parseLevels(cc.get(), 0, ji)) { + return nullptr; } ji = cJSON_GetObjectItem(jranges, "white"); - if (ji) { - if (!parseLevels(cc, 1, ji)) { - goto parse_error; - } + if (ji && !parseLevels(cc.get(), 1, ji)) { + return nullptr; } ji = cJSON_GetObjectItem(jranges, "white_max"); @@ -282,18 +282,16 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (ji) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"ranges\":\"white_max\" must be a number\n"); - goto parse_error; + return nullptr; } - cc->white_max = (int)ji->valueint; + cc->white_max = ji->valueint; } ji = cJSON_GetObjectItem(jranges, "aperture_scaling"); - if (ji) { - if (!parseApertureScaling(cc, ji)) { - goto parse_error; - } + if (ji && !parseApertureScaling(cc.get(), ji)) { + return nullptr; } } @@ -303,9 +301,9 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (!cc->get_Levels(lvl, bw, 0, 0)) { const auto it = cc->mLevels[bw].cbegin(); - if (it != cc->mLevels[bw].end()) { + if (it != cc->mLevels[bw].cend()) { // insert levels with lowest iso as the default (iso 0) - cc->mLevels[bw].insert(std::pair(0, it->second)); + cc->mLevels[bw].emplace(0, it->second); } } } @@ -315,13 +313,13 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (ji) { if (ji->type != cJSON_Array) { fprintf(stderr, "\"pdaf_pattern\" must be an array\n"); - goto parse_error; + return nullptr; } for (ji = ji->child; ji; ji = ji->next) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"pdaf_pattern\" array must contain numbers\n"); - goto parse_error; + return nullptr; } cc->pdafPattern.push_back(ji->valueint); @@ -333,7 +331,7 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (ji) { if (ji->type != cJSON_Number) { fprintf(stderr, "\"pdaf_offset\" must contain a number\n"); - goto parse_error; + return nullptr; } cc->pdafOffset = ji->valueint; @@ -344,17 +342,13 @@ CameraConst* CameraConst::parseEntry(void *cJSON_, const char *make_model) if (ji) { if (ji->type != cJSON_False && ji->type != cJSON_True) { fprintf(stderr, "\"global_green_equilibration\" must be a boolean\n"); - goto parse_error; + return nullptr; } cc->globalGreenEquilibration = (ji->type == cJSON_True); } - return cc; - -parse_error: - delete cc; - return nullptr; + return cc.release(); } bool CameraConst::has_dcrawMatrix() const @@ -392,6 +386,7 @@ void CameraConst::update_pdafPattern(const std::vector &other) if (other.empty()) { return; } + pdafPattern = other; } @@ -400,6 +395,7 @@ void CameraConst::update_pdafOffset(int other) if (other == 0) { return; } + pdafOffset = other; } @@ -445,18 +441,15 @@ void CameraConst::update_Levels(const CameraConst *other) return; } - if (other->mLevels[0].size()) { - mLevels[0].clear(); + if (!other->mLevels[0].empty()) { mLevels[0] = other->mLevels[0]; } - if (other->mLevels[1].size()) { - mLevels[1].clear(); + if (!other->mLevels[1].empty()) { mLevels[1] = other->mLevels[1]; } - if (other->mApertureScaling.size()) { - mApertureScaling.clear(); + if (!other->mApertureScaling.empty()) { mApertureScaling = other->mApertureScaling; } @@ -502,7 +495,7 @@ bool CameraConst::get_Levels(camera_const_levels & lvl, int bw, int iso, float f lvl = it->second; - if (bw == 1 && fnumber > 0 && mApertureScaling.size() > 0) { + if (bw == 1 && fnumber > 0 && !mApertureScaling.empty()) { std::map::const_iterator scaleIt = mApertureScaling.find(fnumber); if (scaleIt == mApertureScaling.end()) { @@ -655,7 +648,7 @@ bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& file cJSON_Minify(buf); // parse - cJSON *jsroot = cJSON_Parse(buf); + cJSON* const jsroot = cJSON_Parse(buf); if (!jsroot) { char str[128]; @@ -674,7 +667,7 @@ bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& file free(buf); - cJSON *js = cJSON_GetObjectItem(jsroot, "camera_constants"); + const cJSON *js = cJSON_GetObjectItem(jsroot, "camera_constants"); if (!js) { fprintf(stderr, "missing \"camera_constants\" object item\n"); @@ -682,7 +675,7 @@ bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& file } for (js = js->child; js; js = js->next) { - cJSON *ji = cJSON_GetObjectItem(js, "make_model"); + const cJSON *ji = cJSON_GetObjectItem(js, "make_model"); if (!ji) { fprintf(stderr, "missing \"make_model\" object item\n"); @@ -702,7 +695,7 @@ bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& file goto parse_error; } - CameraConst *cc = CameraConst::parseEntry((void *)js, ji->valuestring); + CameraConst* const cc = CameraConst::parseEntry((const void *)js, ji->valuestring); if (!cc) { goto parse_error; @@ -719,7 +712,7 @@ bool CameraConstantsStore::parse_camera_constants_file(const Glib::ustring& file } } else { // The CameraConst already exist for this camera make/model -> we merge the values - CameraConst *existingcc = entry.first->second; + CameraConst* const existingcc = entry.first->second; // updating the dcraw matrix existingcc->update_dcrawMatrix(cc->get_dcrawMatrix()); @@ -771,7 +764,7 @@ void CameraConstantsStore::init(const Glib::ustring& baseDir, const Glib::ustrin { parse_camera_constants_file(Glib::build_filename(baseDir, "camconst.json")); - Glib::ustring userFile(Glib::build_filename(userSettingsDir, "camconst.json")); + const Glib::ustring userFile(Glib::build_filename(userSettingsDir, "camconst.json")); if (Glib::file_test(userFile, Glib::FILE_TEST_EXISTS)) { parse_camera_constants_file(userFile); diff --git a/rtengine/camconst.h b/rtengine/camconst.h index b959481ba..aa0702439 100644 --- a/rtengine/camconst.h +++ b/rtengine/camconst.h @@ -36,12 +36,12 @@ private: int globalGreenEquilibration; CameraConst(); - static bool parseLevels(CameraConst *cc, int bw, void *ji); - static bool parseApertureScaling(CameraConst *cc, void *ji); + static bool parseLevels(CameraConst *cc, int bw, const void *ji); + static bool parseApertureScaling(CameraConst *cc, const void *ji); bool get_Levels(camera_const_levels & lvl, int bw, int iso, float fnumber) const; public: - static CameraConst *parseEntry(void *cJSON, const char *make_model); + static CameraConst *parseEntry(const void *cJSON, const char *make_model); bool has_dcrawMatrix(void) const; void update_dcrawMatrix(const short *other); const short *get_dcrawMatrix(void) const; From 9c9cd6dd873bbcedeb6aab759f7b2e4a119212cb Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Tue, 10 Mar 2020 11:45:04 +0100 Subject: [PATCH 202/264] copied some dcp profiles from ART --- rtdata/dcpprofiles/CANON EOS 5D MARK IV.dcp | Bin 0 -> 32782 bytes rtdata/dcpprofiles/CANON EOS M6 MARK II.dcp | Bin 0 -> 65374 bytes rtdata/dcpprofiles/CANON EOS R.dcp | Bin 0 -> 65350 bytes .../CANON POWERSHOT G1 X MARK II.dcp | Bin 0 -> 65390 bytes rtdata/dcpprofiles/FUJIFILM X-A5.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/FUJIFILM X-H1.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/FUJIFILM X-PRO3.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/FUJIFILM X-T3.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/NIKON D500.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON D5300.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON D610.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON D7100.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON D7500.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON D800.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON D850.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON Z 50.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON Z 6.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/NIKON Z 7.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/OLYMPUS E-M5MARKII.dcp | Bin 0 -> 65366 bytes rtdata/dcpprofiles/PENTAX K-50.dcp | Bin 0 -> 65350 bytes rtdata/dcpprofiles/SONY ILCE-6400.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/SONY ILCE-6600.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/SONY ILCE-7RM4.dcp | Bin 0 -> 65358 bytes rtdata/dcpprofiles/SONY ILCE-9.dcp | Bin 0 -> 65350 bytes 24 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 rtdata/dcpprofiles/CANON EOS 5D MARK IV.dcp create mode 100644 rtdata/dcpprofiles/CANON EOS M6 MARK II.dcp create mode 100644 rtdata/dcpprofiles/CANON EOS R.dcp create mode 100644 rtdata/dcpprofiles/CANON POWERSHOT G1 X MARK II.dcp create mode 100644 rtdata/dcpprofiles/FUJIFILM X-A5.dcp create mode 100644 rtdata/dcpprofiles/FUJIFILM X-H1.dcp create mode 100644 rtdata/dcpprofiles/FUJIFILM X-PRO3.dcp create mode 100644 rtdata/dcpprofiles/FUJIFILM X-T3.dcp create mode 100644 rtdata/dcpprofiles/NIKON D500.dcp create mode 100644 rtdata/dcpprofiles/NIKON D5300.dcp create mode 100644 rtdata/dcpprofiles/NIKON D610.dcp create mode 100644 rtdata/dcpprofiles/NIKON D7100.dcp create mode 100644 rtdata/dcpprofiles/NIKON D7500.dcp create mode 100644 rtdata/dcpprofiles/NIKON D800.dcp create mode 100644 rtdata/dcpprofiles/NIKON D850.dcp create mode 100644 rtdata/dcpprofiles/NIKON Z 50.dcp create mode 100644 rtdata/dcpprofiles/NIKON Z 6.dcp create mode 100644 rtdata/dcpprofiles/NIKON Z 7.dcp create mode 100644 rtdata/dcpprofiles/OLYMPUS E-M5MARKII.dcp create mode 100644 rtdata/dcpprofiles/PENTAX K-50.dcp create mode 100644 rtdata/dcpprofiles/SONY ILCE-6400.dcp create mode 100644 rtdata/dcpprofiles/SONY ILCE-6600.dcp create mode 100644 rtdata/dcpprofiles/SONY ILCE-7RM4.dcp create mode 100644 rtdata/dcpprofiles/SONY ILCE-9.dcp diff --git a/rtdata/dcpprofiles/CANON EOS 5D MARK IV.dcp b/rtdata/dcpprofiles/CANON EOS 5D MARK IV.dcp new file mode 100644 index 0000000000000000000000000000000000000000..80407fb216c5afcbe94bfdc84c229c4dc113133b GIT binary patch literal 32782 zcmZ_0WmHvB7d4E8i3)Zi0wxwBh=Fq-6|pD_K?wy!0lQF9>F)0CkWw1%*?8l> zgbmn=ir;?T=X=L^`0?H`?l_ynK8M4)Yp*@mTyxzmTXt+1E+iy0N@&6@VWEj^x- zZ;cch!H((dt$#~IXb3z0=XXE<|2d!8_}48_ArW>Q$$r^?Ym`vpEFqyuZ2X6fMcMh} zt3pD5*_{7e`=5CO?AkHxSisItsQK^xZ?SQ5&41_oXWoBa8#qlZO=&f)ozhAhr8T%6 z+oZSb`9J3;3kgZg6B1g>e)!Mv$)A7!{&P%x|KH=MW&b^Ye$;=DYkvOs{Dsl~{dvLE z{~rHe_t$6lm16Jz`y4_-w)oFmxqm0!Y4aL;Mmj)Qa~HkY{t6doIAf*J9y)yHGY|zg zC@JgF0Qpv^uJgpQE&J)Y;SX?pr4PO@F{1k$8zDErA8v;ZP~(C+2t5kKF_(k%!mnzK z@eV4*=QisK9$Vtk=@Lgu~x?(akm*+tEt{Giz zmH_wKJZxKbh{lx0;-&cwT)2FQu2hId#h4-#mmi|VGy>(NCFuHki2gYeh9^hMaaYcq zhRqAXX*nJ*r|zch_3r41E@S`a4q6o8f;Dq15R#`!pQ|}y%qRgqJlsy_*xO^n3?32- z)#=wMSCHAxy64L)ZBnbDQZzW;gs*Usu%+v&Qb7VK}e$Ew2Zl+-uFxzq_Wf;H*! z_6C?FxMH%14!yke%&SSJKw9Dr`x$hh*1EDjLY+t)3I6-Caf3 zv-`P@cg3ISYw5RLKhc?pG$%$Cj6NX`q8|lj_aWFj?37w*i^owOQUVn^+ z)G9S<_BR5L{NiB#Ta7+V3&SQPVrJAP`gK(Zoa&SD_x>g-5f%tCE)5GGZ=$~aez>We z0n)sQMqc*8j6GR+d1n*7z0eC2ZL{&Wfz2Oq$LOM5ykghB?RACX?|hU$-9$b6osqPu z0R8Va(NWW!a51z9!+&q0soNZIska1+MypdJFFSN>EyrnTb*fW(70T&?L4JGZ%T#K; z^#aTb%V6_%61{c$JR+US2if`7!*P^%E5Xe3_SpPjJgv$sM9vRK_&l3P&qiFwZ95la z%%4K#&2lk9(j8>uH2QS>HB5=|M9#nI)Gaw3O0qt6hPEmmmgsn5A^aY8dESQ zo~_TQK7N)}B4$(uA~>s$eLn0&rnXA9^;$wXw`8WyJUwq?L z`@K-#nSygGzw&n79yni_hRy3f^P{`mFwZ9g$4vY9$G=^mwl53$V!iy0rOt3#m5mQ0 zdibjs9nmm17oA%^^4bsWF=s|Tp4|Arn-V+7Ouhl}jUV{0N3Y`eq(TILe9sr2w86%y z#n_Yep4V`{fW@;)kuC9z*9p3Ud#{QH+1abwk6(4Y0`?Q^u{$A68ZqJmtwefPxAQK`K5>uXp)-v^aJ zX}t8W3>0tm!|-2eeCE?s@Hzn)uuS7mWF_JG>L6_1o67r##$z1wo<0wS z-`r&W=-4QH$PUMdup~YzA{<#Rk+{Le8+M1np2e4LnPmR?ieOk8#KKiLg|A#5h^zbJ zVP2cUKT-3?j{Ph)wWaX!roM2~Oh)IAWZv4t8@+Q=vEXzPf4$rj{_oN-vp9iY^3NT{ zi5WOEE1uuD!wuVwvcR>)@|uM%NR-V+{L2{LUfvmB`*JWsDux%&bcAqq9;Vqv^NK4S z@H+fDRE4AY&f9i~K2rdrihTb1DqBQq6b!O+$nk0Xl)F48ci5r9Lz-_1tU!H(0~{3> z@J8xoNUC%~ZQyc#Rd+F*co#e^Uc={}D}>EWH*Ec|f%o`*9X^d7_!GR9=g#E8?9B*C6Cr*ih?f7u4P*}rnxEYDb84*}`R)yCL3rEoAC~Qwq=1=&9 zqJhQs3t3A1Z?j;yhQ(ryr4s*VeIUkb#-kxXi5FJ!$D5Ifun$t=?{K~ls!Kw*s1hHt z-y8ewQZT$-k$>#$iMtAE$lku3-@v=$V|zM8BA4;EhP$EJJ`)EAmhjz1F0fv34ZD07 z^X=76C~3|{xb7m}UD*+nZE~@`&74;su*cOod4ufyhOeyf_*99=Tszp?e6GlN%_H!L z1Map?6O6lCfrf=_Z)k?VG^q@+U!Cz_x|sl$C1|`)(-PP{GoW`Q074r=1%>UY zc=0k2E?MpZL*-=TYz+o~-&#;smH_ee5O{1h5bQY?htXnTm^V~SAU8e+;>O{)n5`gC z-WG|f@(8?fo-KGE8ir7*D7Z|RAhD|LSu7{uY2 zzmT9|rZ3uG#UtNKL|`oG4aM_`*!6p;;O{g~$c#x@PP5;zztgOv`{&* z7+b_V5E#A!15XNYHq{ft*3#G&a2?p>jVC^nuz5uuRz328(#&ZPDa}Tu4vQ_5|wh|Gw&Zu9KI>^pH*Xk0F%{927X$SL7J4tc;P0Wb3$MR7c zXXw09CO7s~;E1#xLpNB9{MA@21H}AH-cJNK6S#7m<;#Cv=K45b;yXk`s0SG|9lqTjfmfH zR|MO{;m)O1B=eIiF3*ogo8@#e_L>VyJ|_&av&M;d;(N6Y4`9i48dHletL^cO z#E_-Fx3J#80ln3cM2h8immC-lnHEkGw^jjJPG~g_AxoSodRy5(aU+m?&lJFe{p|(o z{K-DP93d;+AS>fbj#rjqvY9)2+`UO|K`~OiJs=d}MXKTp@jTZPZx4Hs81EanamNd< zI=#q+*?I8j_Qte!Z{qeo3pzr+u-@QH9NW_nI?)ep6a0zSuw;Ch;}7d~fyCo@ec|F9P@11;N)hf{dFOhWHJ^Sl$#xH1`H0b4v)0-i#p%)d6tb z5sLc5ab)W*KP)i{!?V(OQZMR*j^p7Fs!bre_dIdQF#>iWiA1@?9cht~*r1q1J{G$| zt|$r*gT2W9GB@mxi^hX)eX?YjD}2-92HDx~O$+I(xQ&JHZP7H)Lj0ZU5!hmf5p!FJ ziE17CsXcthJRr8MH4x5mKyBMSlCb|4Oky078`4a^)mEd~#|fJ??-EDpDtxhZM(D66 z5^qMa@01HRG&GQ15dwIcxS}cb4!L%-9AdlNFeBkM>3drWjScSj+geWya*Lp|#slSA z^(1}bbwtAxoxOELHzXVH)x1z6s3RwJGmyn%e%S3g(z8DWH+T5p&HQ>YBQ*hSdsv+P zQBSt7jKwTnKWrj*i1*MaMDOrN*PRCPV01W!ZVQ0dp(diB76MzgN1p$9mpCK`!kXcq zkJ|Uh&qe;YuNaK`uJ_5M2R@jyGz16yACST@FH|lH#pGixD#C3~j{OVp}+ri*Rit8!-HY9XusPIlcbd zz+8KL)Dz_nHPj=u-5%d!MY+{3brAP;KzN5Jw@bbjM>jY^Wtte*U3Lp&zdK^&8ZmAP zZsJO+6W+41`i&|$?sLYa31Zwz*-A)CxInB%lv9Zp;8~Lk9FK}}uL?@AHp>;=Lq)l} z_iw<_-wk`hM7UgqT->s8$GJr!+`{%u*jspDQJpaNt|=84^gZ$Bf-t8io&?ivUeMbr z%x&J@mUHJgrC++ZJ<8-d0{ywnC9%kk< zxH~!b@Zq&ROafBB_%+qoEw&_&*qfsis3NE z9d8~>b4?A`VbbpoDSc_qWl;`Zy!OD=2eY_?FEUX3&=aGzXK~rDQZS~*3m5N6amI@h zajl5)6oyjV(SlgSXZRrf+e~ih#V9Iy`yeE>Fx&*0YS`9p9q5VG56aNBx(u;+9TZVXK4663sZ#wr*WyvK5_h2BuM3`cN) zI43gR3o|vtFhTk^iK_9$qojyI{_OcwhLhg+7GoCKK`K*@yIS)a!Fu-Csxy}>6Y0hZ zHwVax&*uzhbz)YjBhEiuz-^Ivh26bQP>Pc0R3%>^bdC!m)faOny-#6e;EEH)OSs{J zb~FXKLA+%tH_5&g6%FqAdVCqD68Qj{BR%mhc^NmWqyZhw4|j(zGGV?{wM_TVTe7xkeebE4xNE; zIMprSR*wyV{MtzPEm**fl@Ej*`)vGu=5t9${jjbm8s?+sb6wTmDE}UV(ClfPaJ>)S zZ;HgUr;|DJ2rnq&ESImphLpQSm=F@JG7#twNBvfO$9erRwGke@z> z``G;h^4*RoCi6J0S>Le6+Zm5fFW{QhKErI4D;`A3b1}xfP?@_!QuaG+zboU2qF-vY064puo+MZUmtL zaFJKw_O7i#kxmd>hs(HxS3Kidf^qE8Qtsi6U;qe`4@r-$L#~Sq%1Ej>G+{3pg41 zNTmIZ$Ed9N+_A<`xL;00X2(3PC@u)%f0N)NJCAdX^#`#@!3ue4&c@RpP0le`s36US zyzzy(UJS;F$#5GLy%DMqf!=_roW7?IPP<19vU85mRL*&`5UI$pL)*IPT(;N%%=8^_ z@z_kRdFyXDh&$n4(JW5p>`$mvIzw`-3@7mU2BS-^Fw&Rf&c%I(Kg01|wsW~1*LpGI zy9Zp%=5zlFKcMS|7yjH`zy)u5gJcUISO+cSu9QE=iC@0B_I)8Y?$RUJUiQbCuM0Wf z#wJ+(3cw-ng`8<|En1ESp`m#J_kLL=tlERIuXR56bwL>nH-ti(pU15XE5PSu78}Fn za#v61V#TlsJUcmu%gD+^hiN3lwdJ@J)l_)#QJA12%dMG~h=6G^_#rRDS+0o%IUS4O zMYFjn;gP7XkAu`|X>Q!IFzlP10G(a4xX(X=FplLcMHi*GKOg)t@=g-0x6a_yqgV_- z9uJexGq{gG{BXRS<@^8R=jx$Tx%LCTsQVQ?$j+lqjODUM3X_3CJB+^}$t9Hu5v|h> z==w08+mSf{^W{!Bv3e3`R{a~Bzd7T*=M?T_!%tiT_S(;n?pbjnjgYfIfEG}|#6^!G9F-%5^Yv?S)ffpfIdwT|_!Z@yhDPhn$ zH=V2Q&BYmwaM;OD1IFgnh~W8{Nz+-&gx(C`G<6-aO%mVwZ^ z5s!Fn32u3}KMt!UpvOXz`@(Qdba5;WEt|kSQTD@5)7U|F-mfjnMK*|#71fL%bR5cE zJ||2@dOAQiZ8&EjHiR_mI)S#0=EWa%+8_y}$zJlUeKm4m6&*gn<#r7h9 z?B6+_Giz=}^}7I6=#Jx3wCYhlItc1xBspoTD!h{mhIHmw?&i#LBq@eq>6S6v5608K zS`&)wK5@=PEDz7ug<&9N6z3_Gh4ZT6IDc{^R}z?t?J5zd*BHSW8zkc4(nyr99nNh( z9?R+`QSenA#$B$Agw>>IY}FddjnfXpAF&ubI3dP~j|+zOml%k}iE;-;0ucNx7IBgy z-0u^CI4&QD=Q+Zh?>m14Gn{M@FUtL6b1WH`sOLP4TPNy|Z3hP9=Yt1&iK?F%F}`aD zr;A_6(q*C~m|=d}$Nm%(i_**=}F_C=}sTY&x*b+YfGwMYz`8 zZTOkx&oHzwSMa47_e)sLFmVVct;y_M6o}Ve|49CxDu`tS;nB-KMDkA=<^={rb7Mb= zSX792XG2h5{ez@F%7wE|D6B2M5vLv&H|B-m#mX;agJ~+#SPtI3=o2YioQT~u;pkQG zCFWc#H2oq_;QWzDhD74IF5_Uk-;*SE-R9|0kT-irhI|Y{X?qm1{=FgJUi!m4EE*HL zy2(s~K&VK?B5-v#34G{}X}+-taOfZ}*`BQQITlLGJII|{f9zc{*v@jePcH5rMr@zh zVa$t%#O|#a=__-9npPWeFc2lP;+&8c{gk{c7bcvm3uXnrAlD>@5XF;j81nfQsm~pN zrM?GSW1Yl!$#1l9Uhr(`BtHUvz+cV>o91>p8Rzj@jPZVZYKht3Pz-+*1uNMavZ*o%hmxXkdBiPZSm2L&Cm9D7 zT}}MgFb*~~1_R@&iRKM|T$vCHkr9=|?Q{TUdB!5Bni7p1cK+tzxFNjfI#HfBf`q)W z!_U2iWOe*7GPT74H)fWQNU@=$pK*VBab=`KTa*kGxL|Hf1<7|4Ca2TfFsE5SPUH!Z zx#1qD?iG+5!GE#A*$eXp6~uSkFMKiff!Cih(x=k{yKK_ogJClI5jqa^cb?&#~(7gVxc=Gnk?8AfJI5M@OvCZ>U`N6WpUSr((pt(*@6M!U+8?Le4&C{If+EY4|mS z%y{SlZdxdDZv2N4H@#pV5k#In{Do)UK2Q`7AX{yF@c6Yal(l?`Qey|KW&N?h(~F#y zZ9||&0K(q5li%l>VaxWIBUfCBT~-~uZG-Sb&zab!RpPyOFcfVZiH24geuRYJ@iTi; z%W9PFk)i0Ywj+Di(zq`Za^c~4VSI&1wWXjsAOb~KZHP^J0#>_6Lb>H4 znOGHryvtEA(7QnDr$<8XSTtJ2tVwiMD0KG6z`NxfNj?>XGWA$!SDz)-X8yRbEDj@l zPLuG@46|3qVoU!iQf$fmd{rE{*(ZpfVgQcJiNm9N$H~Xz{($k|xM8uvfRrbSlSCnV zGz=J#9*I%puBaodt3!!2n^$5x!_Q{Z70KsGW$^zRf|E_l zNZ%fY>xPD5@2e%`vgQSl9hGQ%F?lJkhn=?fyuZ!>~tzG1QKLMZ zT-zl|E^Y9HM}-i1^lAukUg3=??Vk`D(vN{QAKXjpg!h>q%wFM#T``Zb)~W;A*8Y&? z8sQq%ic>iO`0)ECUVONVi;U+FQm9NxE1qVV>wV%=de+%R_?&OB!3v6lwQ|) zxD_{E2cY;shiY`)U7VjAg#M|Cst0D(A^1Qrw#!+mzF1uehtLq1w#`w!)L)7H7E3=KD?4~56k(llP_c3>d#wmw$34pJ6Iq?pJpp=FUgd7A7A!e25hUkpc^~7S{96+6LFIe-rb+(rVR_O2 z#^>PQ)fGP9B#F74J*JO;S@C6&1Zm&uh^04#1cxS%AlUW~PE* zo5Be4JkA}H@9q?6pBqZHCo!E;(>rV_~GyT&^IL+G-wq+jMX!3?US(X;wt`1s~$k`Zg|Q8#}dzua>?vA1?aw~GmHswhcTlEbG*IxC^GD)JL7n5`8j8Xld^xFIQPnt=WImD@=nHQRlD$YkNa6Z z>Whs<1+p1eAdZqVm^*gE>7YPmW(4l zP0q*`&EV78#*+EMZg{Da!#n4SlbN$UP;7XE|8#T&DVO)ch~35fr4&&TH_Qj}p{4xo z5B)eA%e0CSmAPt>EV^EW@_?aLCQ6;Bl}3Hx@@?l4u2QGd365UQxLD zq?|t_lL_m03~!BI2N`Rn8l3i9uU$JQAmu^Sv$+c)=w? z=5-l=Vju*eeo4^IE93X21Y*YXWL&>o#(%x+2bYDZc=@1#f1=4WZtf|VdbO2*|HBK8 zds4CF&sci6(gkr$6Y}TdSo-&XGcx_s2l=yiMk6meaw@UgX^&Fl7G9xa64{yLh#k@G zeBs&&M4#!A+ z;z50U`^SDL-1Nn~E1&o`8+)*I56e-1ed3+fI?((w0H2gU^WVc;QEwi^aP?nF13PJnjWGr9O$6wvT>RFFduD>Deel4GA1PS! zd^q(|bVFEnDspY7(+^UPSm&OGC&e@96;pe*hYz;%?Y#s1qaq1%Wu-l|2ZU+CoiXI5 z731@d4W)~Zh?8Am&ZzPjK{v;ZAmdql9=cYXss#)sP8IGLW;TW%KQBT|uY2Oiv$6D1 z!2q7Pd&4+Hg7&C>g6?!*ycUwA8Ed<6Ce9BF*GSU4f;I@r1VB&jilJrAlHtKIh;Q2I3 zI@Kl}qvWHo?wc+{?6)aq&3d zC_$$c2jR=l1PGf+P+2Wjv(ik0#3l(^GSLT9;*(K7PlBqldN==tVZ@OV^uCN6LN*Nc z+qgrrbQ04AG^nS+AVH44J8X{|FVhD3^MR4$Xp8A^a%H+bDhwvkf7wF`x55#-=1!x+ zo}%R7MrVvXHj_>rB}`n^T;VZEnhxoz3}O` zENwdT8nVY(-n~bT)-HX5N$-83?;%H}a1Sy}n;4!VNAH}igW0_RbmqxX?>Gt#mTULq z%F(va60AxM#tSy*!RqU<8y$*)U^%LL^cv0`55q58IeKAw8umAaW0tub-L@hTCl*HH z;#N5-ksgD$4pDe1FGm$mGTyx{8Y1FyRLwR7*OtcO*n3&3))WAB`#40@%TiNaUp&4S z&vFl0`e>XNF3(OxhMO$)XZnF{$C5DHLYC^VdZu1+GVHd=QZ0tXN`+JLeX%TEpJE5w zt!aptl%;1jUqO*?I^=BT(}ZmfsBj!?=h_5GPhUVsCpc(YJAIvnC(@fMsi|OvNb(T}3N{U%bqwKzQ zIZYWTLHFEX#IpI1TdzaTGX%rrmQ$jdja5C2(-^*-4x5yYQ;c(-^HzZd?@Gex^a$wG zD9}+KVzFM7)dCX~Xk>FFtL-p7*i{9p@P}cEJjQwIE6}B;K^QeO4pzzvbOgg}Gxo+K zZJYw#c;6eAtajenyNv#A@__h{L>y>bMyGsph2+L$=w4e!f2?zchffMV`7EQy(;eX6 znhK56%V@?5##_jwV_D83TE}9@RnftAt_fX4MW=`mC#J8{T&_U3^$QWbDhKpPD$!Ak z{-Pk<31?QTFpd2Wa3rQERW!x}nO?IVio+;Js(EiF3v1|>&5G4{_| zs%YMcDU(>vvRswUuX>8F$v&8`tx6q+wBW^LKhzkh(x!KJ(91O6oQW!(;C~Z(EN2Pd zuSzw$DvEC+1dwU+ubK3|{3 zlhWmD>2<~@&ku-4mE>C5)#Zb8PZO~8^BVeRxEFNhGA-1DHPlYq9d$>OAzHMCl42LU z$xne@loH*}^5*N8Q?Tli0wom=*j_mpZ{+@3N$rY<5YHMrNO-KJ(FgwFtGfdfnTC8$ zb3gv5Ibo&N2Kun;8xAsk-SI(uFPiR-ME5{$|P>hz*$Hgcwf;;w``t=40HWXf#! zbrW4Lnv9MthDjc6q7A>|(ETj}Q;IgxKGrv}XKfU&hHj!pN#Rhpi^d!4O|(rT1h=bW zP@}hr&Yv5IuguS{uGvIG7xl5Q-A zO2*jppmTzmK1eAUy{RhH&cX?aiw4`-VBUJ#t}jG_S$*(k!X~QN_y?go9Pm_aD?Pw! zg1bIB!eN>Q{nPXX^BtY>S44|09n}l15w0Mgw5XxkJM6W0!#!zj`fpA*gqhZ>R8pJD zI=#ZnBc6z6Zo%S`@Wu z)jS>!Lj$m7sWv^asRTyb0+A!9O~qebhp~4M-cQh`=ig-`yD1o7g|z8QoeWrx4F&&J zi$;s5AX_60OYUmX8i@q>x`$)<4J|r*PYh()zS$qDMO|7Va9$`1;Wk?Il`G4&S4G3j zSc^`y3_>X5nX5KxQLpp|?C z9jq7N`A`oib+8=#E}`cbKXJZ2dC)%iWb!sD^Ybs_ee7`dlor)o-4C^C4!Hkj2hE@I z9p#aZX!YAocNKkt@C1hOcI(o=>p!CEiVK>g_R>|oZxHaz6>hS7X~?fmTvlOPi}$*8 zwcks;5AeX6ySnt;#ixkr@kCy;E`9CS0@tP9&}i4Cqr@7aXyt>4ox1e?lp16tv%T`2 zE?rp5;}nbGMr?dgxD=(60#L-}tSPvGl{`uClwS`6}~Oh2Vd&x~O@rSq&8Xs<5yY6!!_q(}g| z^kPXcX5Wv(xVgHt>Mqmq{fkD>XkD5h?gwGU<4yR!hu*jFM$+y$=;Z0p-p6c>R>t9| z&35{1m?uo{Bn8Pc5d??G4$`7UBaA2D1(SG!{RM?)G=+kv)AZioyrq}t&x@TJ@xH%ts^ z9QPFE!k*CHZ%CcM%5-m zI*09#5-}lgTy9986vRQJDipah4Cy!RXw-Fw;hmTvt(g%4w-FH#^cYa}iJ|aeI)l_l zY^)rFm)oN-h8oZxmsow|Xf(oF^=L2C7~JoSMwgo|O=P;q7fjQ*O=KqxVYPk374f*T zN1HB<_JZi8!My0I$$E6G%}-EWJ9rE;pnVeGSnq;8?u|002Kzsu>Wc&B?LA119X{ft zq7$o;nNa1lx2Qhij6VUUbkX-N#uK`r?}RD6=l=>*1g=;w#>O$v@sa5|94k$zP~Q_Q zp2)Ol*G;J7off1jdSXV234NT=hzcz)G~G0zO5+|nCz%_fu#uf$qsA5=Xyq48JB z@GRCBy6q;^oN=QPrGCg}=gqF?;r0W6EMfC^=v~9e9>zPc`#5h)N8QjM94#=Ry>^Um zm=%nYL=*ax>1wMOzdFZ{Jx_EDertqcj}3dC^O0W3P@0ou9^d zS>FiESZl)8X#nz=&(B+LME{rs!b~O#O8h>`UGl?sxtKwI-rKdC>aX*`${&O4DR;&i zQn&JNc(BF}E`9)9MXk`0@%qw#$w&MxgD41_Io6|4tEwEee z!Fc1pPNyEvzzS}iD-%s zf<_JdTi;``IE&%Nd~l-Dc!v-6ouQv zv1z{v{WKyNYoj9&bj6s~tPVh^TNEnR8q#gj0qA%Tg<&oFwC1@lmN^a9F}g(`pcw<7 z@phIS!uw3AQdckbtg?rap*c;B_<)fNa~EtlLXU5Hi&?uIp_gqz4+(eU z?_c3Jq*0CKe!G}t!@hlT}0 zi9OG}eeuu|4MKFh1-0H8gV{rZSx>126+at^`+r%CzF$J7c%Fq=(`Q+xWlv}ZHKIARc|uRnEK=GPAe+QdO+27 z24DfKXxqbBC^C)iz6Dm)dw4Vy7{4z#Z$UL=84j#qdfizT^fALH(ZV697;=Q}{t^na zSD`RpW=`Kd2!+J*FkCxrM$=ipz@jJN(0h7-E)5Sr(&WLqudHpR^vTtanD)jN1@(vM z{epKGSI0Exmk!e@4;ccEXByEDM`*WD7Xr>W;M@jF+Nkjg_=yo1smTO89iqh3;P@W2MCQnLZyzqK>iH}IO$tZca>*IJm`quY>m%c{REpwJ7IC71zly`hNp#2 z=z3;BJ%2oAoRc$-j}Nf=6d8>6q>H5Q}%k$}mgnJMAXg zj=14>t|c9>!6T7zDTV?|+R`OpjV#JU_yI%#(f zewusXW0WN|{+$Vfm5kSNv83}_(qP3n+vcN|RQPE!#2@=WXNM(K9+QaqX}&1Ae1xu> zl87#*>37ncDtERaR*Tij6U^z51FiV< z!V!Y6=2T|#V}ze!HrG8&EibjeO41o0lMmApvAYl!IAdt{VR|5^9)>4f5d5FdG5;o> z&2@$HvLkfLcnSf-=e+6>s##wK*HGs3>yA*JyG7{Q=?+n)BQ#{j4TMQ}V3+I>s+*FF zQ>@SK^r$1$>&P{1@nRb3UiQBmWZ>_1FZeVarb{lT;?!twC|o;CTdSESw9y-%pBWTP3Zgg39zm4806VIAqjA z2H826VfCHn4-u_ui|K3j($mi#VE!3fl%L;Ahwi=)%|u&B_3Wji-!(&|$rhU5S&w}B zU8H?ub1v?q)e%j&Kh+N9-TSF?NhA2Rc90D=phy2TfHSg#uCgJ0dAtEC4tAK{Wk}V< z8epHsdKxW_=+~$^Xm;A+QiBowxaKCdFJ!ggamIATP>R4a_Sm(~m|mO6de*5u{_ZrU zORS2KD(Qe+U1PdUtN_L)40CE2)7G{;)D}1(Y^5>H@6JZjC`Z&xHKtQ!vrxxsaNoZf z(dX{z7+uVI4H}K;g{i5~mUKdJf)V{zpM*0kPqq==Nhby+qw9hrG(Ya3_bxC#Bi<1| zy0mG$ej+Zz6?>oWqOnU85FqZ3%X_TojEylk&+?hB)BEWM;}|SrczO$GNgY`Kis;jz zL3XayBJ^E$H68?AMWF|wBl@e5Cv_F`qzJX$ScOfIS1{`jXnAHOyd|!nAcD|qs+CZ< zav8Ov>*`Jr`y9i~uE%e8a3S{57fVTl#Xi{n^CY-#0Ypq*o>y;t|uDF2Jf49(4 zZZ{w^U=4xTR(gflG|12U8n)8_qVO53K2sqnr|J0tRU8Z`hQ-w z>}ZR4m*+g`EM@!2RX7AaWi{VYl%2c^wKHwJ%BvF0nRgY3s~+(?u9iT%?F#yw9`f3$jF(NFpCb?iG#I&F~C{gM}vEygZ+8~jo4 z=B?&3{>|hPP9J#3Z&feGm%xiSUh$ECWnT>WdiLE4b-lcrZy~A|Ux4S3PkcVBp_ryy zqc;8%k0*H;uVRg3EvzP$nS+=2&qM3~tLiMHs`|dK4^jrUf`Hu}7>EjUAM8TKz*YoQ zu)C!@Md|MD&U-c@p{S^cqM|5ZBcdo`KI=bz;~C@2t9u787>vz6`>Z|JoS&7~D(Z$N zVf%$MSZLZRI_D;7LL75_*yOtpsA^zPi3dgGU`b>8RyUFTuy9%4#XA-aq-$C_|AQQ>6)BA7YaJDfzF zaRroBGRF-!dr{dUANS48A-BR-%%$~bLFPDGY$Ki{J#BirImS)16GLdV) zW>_xj>D?-caTP1Va$w?Z4v&DV;yUdd_#ZXLDt{lb?rS!b={fx<6(}ydo=rI{b3{%F z5j|#Q!}YEisy~E^vMQN)5N3u2x5LEw&6JsTHbdipaPfRi3Vz#~A)!4?^m Wp^`d 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 B5r_Z) literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/CANON EOS M6 MARK II.dcp b/rtdata/dcpprofiles/CANON EOS M6 MARK II.dcp new file mode 100644 index 0000000000000000000000000000000000000000..9a877f02f1e18f7ef952d36f7b58558a21aecda5 GIT binary patch literal 65374 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 P?{hl-`!q59@%R4&yQf?j literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/CANON EOS R.dcp b/rtdata/dcpprofiles/CANON EOS R.dcp new file mode 100644 index 0000000000000000000000000000000000000000..6ea5302e290637ef5fb806575782f07b7d344e80 GIT binary patch literal 65350 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 AWdHyG literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/CANON POWERSHOT G1 X MARK II.dcp b/rtdata/dcpprofiles/CANON POWERSHOT G1 X MARK II.dcp new file mode 100644 index 0000000000000000000000000000000000000000..656649fd966bf495a85347ae478535de884b0c00 GIT binary patch literal 65390 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/FUJIFILM X-A5.dcp b/rtdata/dcpprofiles/FUJIFILM X-A5.dcp new file mode 100644 index 0000000000000000000000000000000000000000..c6e88d7891b7c2db8438b5f3cf889dc15aa16bdf GIT binary patch literal 65358 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 S`|JGsIqm+vmNfnF`u_oLw>SO( literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/FUJIFILM X-H1.dcp b/rtdata/dcpprofiles/FUJIFILM X-H1.dcp new file mode 100644 index 0000000000000000000000000000000000000000..e3abc07f179edb0d81bca5b6c0e75a75164ea5a3 GIT binary patch literal 65358 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 dnswQ>@^y{Vw&4-1#KDi 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 literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/FUJIFILM X-PRO3.dcp b/rtdata/dcpprofiles/FUJIFILM X-PRO3.dcp new file mode 100644 index 0000000000000000000000000000000000000000..bfbaff9e5670680c1da81fddea2736519b8f10dc GIT binary patch literal 65358 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 I{rL0$0mxx5%m4rY literal 0 HcmV?d00001 diff --git a/rtdata/dcpprofiles/FUJIFILM X-T3.dcp b/rtdata/dcpprofiles/FUJIFILM X-T3.dcp new file mode 100644 index 0000000000000000000000000000000000000000..5024f38a9f3a64cee842691f23ef5bd982077078 GIT binary patch literal 65358 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