From 334ad09535291de7a3abe9af07b25204a7f76cc6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 16 Jan 2019 15:03:44 +0100 Subject: [PATCH] Show Sobel-Canny structure --- rtdata/languages/default | 1 + rtengine/iplocallab.cc | 90 +++++++++++++++++++++++++++++++++------- rtgui/locallab.cc | 18 ++++++-- 3 files changed, 89 insertions(+), 20 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 0e38e9f53..9cba8aba1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2037,6 +2037,7 @@ TP_LOCALLAB_SHOWMNONE;None TP_LOCALLAB_SHOWMODIF;Show modifications whithout mask TP_LOCALLAB_SHOWMODIFMASK;Show modifications whith mask TP_LOCALLAB_SHOWMASK;Show mask +TP_LOCALLAB_SHOWSTRUC;Show structure TP_LOCALLAB_USEMASK;Use mask TP_LOCALLAB_SOFT;Soft Light TP_LOCALLAB_STRENG;Strength diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 95b1a6ea5..450862989 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -402,6 +402,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskcolmet = 3; } else if (locallab.spots.at(sp).showmaskcolMethod == "showmask") { lp.showmaskcolmet = 4; + } else if (locallab.spots.at(sp).showmaskcolMethod == "showstruc") { + lp.showmaskcolmet = 5; } if (locallab.spots.at(sp).showmaskexpMethod == "none") { @@ -414,6 +416,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskexpmet = 3; } else if (locallab.spots.at(sp).showmaskexpMethod == "showmask") { lp.showmaskexpmet = 4; + } else if (locallab.spots.at(sp).showmaskexpMethod == "showstruc") { + lp.showmaskexpmet = 5; } @@ -5119,7 +5123,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La LabImage *origblurmask = nullptr; float radius = 3.f / sk; - bool usemask = lp.showmaskexpmet >= 2 && senstype == 1; + bool usemask = (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) && senstype == 1; if (usemask) { origblurmask = new LabImage(GW, GH); @@ -5663,7 +5667,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } delete origblur; - if (lp.showmaskcolmet >= 2 && senstype == 1) { + if ((lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4)&& senstype == 1) { delete origblurmask; } @@ -5763,7 +5767,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm float radius = 3.f / sk; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { origblurmask = new LabImage(GW, GH); #ifdef _OPENMP @@ -5880,7 +5884,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm if(lp.struco > 0.f && rs > 0.f) { rsob = 1.1f * lp.struco * (rs); } - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; rLmask = origblurmask->L[y][x] / 327.68f; @@ -6590,7 +6594,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm } delete origblur; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { delete origblurmask; } } @@ -10111,7 +10115,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o //local color and light - if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet >= 2) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili + if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhue; float huemoins = hueref - dhue; @@ -10259,6 +10263,34 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } delete[] tmL; } + if (lp.showmaskcolmet == 5) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if(zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; + } + } + } + } } @@ -10295,7 +10327,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float kmaskHa = 0; float kmaskHb = 0; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { if (locllmasCurve) { valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); @@ -10342,7 +10374,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float radiusb = 3.f / sk; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { #ifdef _OPENMP #pragma omp parallel @@ -10423,7 +10455,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o - if (lp.showmaskcolmet != 4) { + if (lp.showmaskcolmet == 0 || lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10434,9 +10466,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int loy = cy + y; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - // bufcolorig->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - // bufcolorig->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - // bufcolorig->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas chpro = 0.f; //Chroma curve @@ -10563,7 +10592,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o - if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet >= 2 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili + if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhueex; float huemoins = hueref - dhueex; @@ -10703,6 +10732,35 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete[] tmL; } + if (lp.showmaskexpmet == 5) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if(zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; + } + } + } + } + } @@ -10731,7 +10789,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float valCC = 0.f; float2 sincosval; - if (lp.showmaskexpmet >= 2) { + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { if (locllmasexpCurve) { valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); valLL = 1.f - valLL; @@ -10754,7 +10812,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float radiusb = 3.f / sk; - if (lp.showmaskexpmet >= 2) { + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { #ifdef _OPENMP #pragma omp parallel @@ -10834,7 +10892,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (lp.showmaskexpmet != 4) { + if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index d4c5ffc18..ef5e21b7c 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -234,6 +234,7 @@ Locallab::Locallab(): showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskcolMethod->append(M("TP_LOCALLAB_USEMASK")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMASK")); + showmaskcolMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); showmaskcolMethod->set_active(0); showmaskcolMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); @@ -393,6 +394,7 @@ Locallab::Locallab(): showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_USEMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMASK")); + showmaskexpMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); showmaskexpMethod->set_active(0); showmaskexpMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); @@ -1501,6 +1503,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = "mask"; } else if (showmaskcolMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = "showmask"; + } else if (showmaskcolMethod->get_active_row_number() == 5) { + pp->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = "showstruc"; } pp->locallab.spots.at(pp->locallab.selspot).llcurve = llshape->getCurve(); @@ -1532,6 +1536,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = "mask"; } else if (showmaskexpMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = "showmask"; + } else if (showmaskexpMethod->get_active_row_number() == 5) { + pp->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = "showstruc"; } pp->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = LLmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = CCmaskexpshape->getCurve(); @@ -2156,7 +2162,7 @@ void Locallab::qualitycurveMethodChanged() void Locallab::showmaskcolMethodChanged() { - if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4) && expcolor->getEnabled()) { + if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4 || showmaskcolMethod->get_active_row_number() == 5) && expcolor->getEnabled()) { showmaskexpMethod->set_active(0); expexpose->setEnabled(false); } @@ -2171,7 +2177,7 @@ void Locallab::showmaskcolMethodChanged() void Locallab::showmaskexpMethodChanged() { - if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4) && expexpose->getEnabled()) { + if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4 || showmaskexpMethod->get_active_row_number() == 5) && expexpose->getEnabled()) { showmaskcolMethod->set_active(0); expcolor->setEnabled(false); } @@ -3500,6 +3506,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con showmaskcolMethod->set_active(3); } else if (pp->locallab.spots.at(index).showmaskcolMethod == "showmask") { showmaskcolMethod->set_active(4); + } else if (pp->locallab.spots.at(index).showmaskcolMethod == "showstruc") { + showmaskcolMethod->set_active(5); } llshape->setCurve(pp->locallab.spots.at(index).llcurve); ccshape->setCurve(pp->locallab.spots.at(index).cccurve); @@ -3531,6 +3539,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con showmaskexpMethod->set_active(3); } else if (pp->locallab.spots.at(index).showmaskexpMethod == "showmask") { showmaskexpMethod->set_active(4); + } else if (pp->locallab.spots.at(index).showmaskexpMethod == "showstruc") { + showmaskexpMethod->set_active(5); } CCmaskexpshape->setCurve(pp->locallab.spots.at(index).CCmaskexpcurve); LLmaskexpshape->setCurve(pp->locallab.spots.at(index).LLmaskexpcurve); @@ -3893,14 +3903,14 @@ void Locallab::updateSpecificGUIState() //update showmethod if (multiImage && showmaskcolMethod->get_active_text() == M("GENERAL_UNCHANGED")) { showmaskexpMethod->set_active(0); - } else if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4)) { + } else if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4 || showmaskcolMethod->get_active_row_number() == 5)) { showmaskexpMethod->set_active(0); expexpose->setEnabled(false); } if (multiImage && showmaskexpMethod->get_active_text() == M("GENERAL_UNCHANGED")) { showmaskcolMethod->set_active(0); - } else if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4)) { + } else if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4 || showmaskexpMethod->get_active_row_number() == 5)) { showmaskcolMethod->set_active(0); expcolor->setEnabled(false); }