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;