Show Sobel-Canny structure

This commit is contained in:
Desmis
2019-01-16 15:03:44 +01:00
parent 44549ff4f8
commit 334ad09535
3 changed files with 89 additions and 20 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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);
}