USM's halo control behaves oddly, Issue 409, on behalf of Martin Burri
This commit is contained in:
parent
fc1b4ca564
commit
a19355fe9f
@ -195,15 +195,23 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
int W = lab->W, H = lab->H;
|
int W = lab->W, H = lab->H;
|
||||||
float** b3;
|
float** b3 = NULL;
|
||||||
|
float** labCopy = NULL;
|
||||||
|
|
||||||
if (params->sharpening.edgesonly) {
|
if (params->sharpening.edgesonly) {
|
||||||
b3 = new float*[H];
|
b3 = new float*[H];
|
||||||
for (int i=0; i<H; i++)
|
for (int i=0; i<H; i++)
|
||||||
b3[i] = new float[W];
|
b3[i] = new float[W];
|
||||||
}
|
}
|
||||||
#ifdef _OPENMP
|
|
||||||
|
if (params->sharpening.halocontrol && !params->sharpening.edgesonly) {
|
||||||
|
// We only need the lab parameter copy in this special case
|
||||||
|
labCopy = new float*[H];
|
||||||
|
for( int i=0; i<H; i++ ) {
|
||||||
|
labCopy[i] = new float[W];
|
||||||
|
}
|
||||||
|
}
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@ -236,11 +244,26 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2) {
|
|||||||
lab->L[i][j] = lab->L[i][j] + delta;
|
lab->L[i][j] = lab->L[i][j] + delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
if (!params->sharpening.edgesonly) {
|
||||||
|
// make a deep copy of lab->L
|
||||||
|
#pragma omp for
|
||||||
|
for( int i=0; i<H; i++ )
|
||||||
|
for( int j=0; j<W; j++ )
|
||||||
|
labCopy[i][j] = lab->L[i][j];
|
||||||
|
base = labCopy;
|
||||||
|
}
|
||||||
sharpenHaloCtrl (lab, b2, base, W, H);
|
sharpenHaloCtrl (lab, b2, base, W, H);
|
||||||
|
}
|
||||||
|
|
||||||
} // end parallel
|
} // end parallel
|
||||||
|
|
||||||
|
if (params->sharpening.halocontrol && !params->sharpening.edgesonly) {
|
||||||
|
// delete the deep copy
|
||||||
|
for( int i=0; i<H; i++ ) delete[] labCopy[i];
|
||||||
|
delete[] labCopy;
|
||||||
|
}
|
||||||
|
|
||||||
if (params->sharpening.edgesonly) {
|
if (params->sharpening.edgesonly) {
|
||||||
for (int i=0; i<H; i++)
|
for (int i=0; i<H; i++)
|
||||||
delete [] b3[i];
|
delete [] b3[i];
|
||||||
@ -254,7 +277,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
|
|||||||
float sharpFac = params->sharpening.amount * 0.01f;
|
float sharpFac = params->sharpening.amount * 0.01f;
|
||||||
float** nL = base;
|
float** nL = base;
|
||||||
|
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp for
|
||||||
for (int i=2; i<H-2; i++) {
|
for (int i=2; i<H-2; i++) {
|
||||||
float max1=0, max2=0, min1=0, min2=0, maxn, minn, np1, np2, np3, min_, max_, labL;
|
float max1=0, max2=0, min1=0, min2=0, maxn, minn, np1, np2, np3, min_, max_, labL;
|
||||||
for (int j=2; j<W-2; j++) {
|
for (int j=2; j<W-2; j++) {
|
||||||
@ -968,11 +991,21 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2) {
|
|||||||
|
|
||||||
int W = ncie->W, H = ncie->H;
|
int W = ncie->W, H = ncie->H;
|
||||||
float** b3;
|
float** b3;
|
||||||
|
float** ncieCopy;
|
||||||
|
|
||||||
if (params->sharpening.edgesonly) {
|
if (params->sharpening.edgesonly) {
|
||||||
b3 = new float*[H];
|
b3 = new float*[H];
|
||||||
for (int i=0; i<H; i++)
|
for (int i=0; i<H; i++)
|
||||||
b3[i] = new float[W];
|
b3[i] = new float[W];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (params->sharpening.halocontrol && !params->sharpening.edgesonly) {
|
||||||
|
// We only need the lab parameter copy in this special case
|
||||||
|
ncieCopy = new float*[H];
|
||||||
|
for( int i=0; i<H; i++ ) {
|
||||||
|
ncieCopy[i] = new float[W];
|
||||||
|
}
|
||||||
|
}
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
#endif
|
#endif
|
||||||
@ -1009,11 +1042,26 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2) {
|
|||||||
if(ncie->J_p[i][j] > 8.0f && ncie->J_p[i][j] < 92.0f) ncie->sh_p[i][j] = ncie->sh_p[i][j] + delta;
|
if(ncie->J_p[i][j] > 8.0f && ncie->J_p[i][j] < 92.0f) ncie->sh_p[i][j] = ncie->sh_p[i][j] + delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
if (!params->sharpening.edgesonly) {
|
||||||
|
// make a deep copy of lab->L
|
||||||
|
#pragma omp for
|
||||||
|
for( int i=0; i<H; i++ )
|
||||||
|
for( int j=0; j<W; j++ )
|
||||||
|
ncieCopy[i][j] = ncie->sh_p[i][j];
|
||||||
|
base = ncieCopy;
|
||||||
|
}
|
||||||
sharpenHaloCtrlcam (ncie, b2, base, W, H);
|
sharpenHaloCtrlcam (ncie, b2, base, W, H);
|
||||||
|
}
|
||||||
|
|
||||||
} // end parallel
|
} // end parallel
|
||||||
|
|
||||||
|
if (params->sharpening.halocontrol && !params->sharpening.edgesonly) {
|
||||||
|
// delete the deep copy
|
||||||
|
for( int i=0; i<H; i++ ) delete[] ncieCopy[i];
|
||||||
|
delete[] ncieCopy;
|
||||||
|
}
|
||||||
|
|
||||||
if (params->sharpening.edgesonly) {
|
if (params->sharpening.edgesonly) {
|
||||||
for (int i=0; i<H; i++)
|
for (int i=0; i<H; i++)
|
||||||
delete [] b3[i];
|
delete [] b3[i];
|
||||||
@ -1027,7 +1075,7 @@ void ImProcFunctions::sharpenHaloCtrlcam (CieImage* ncie, float** blurmap, float
|
|||||||
float sharpFac = params->sharpening.amount * 0.01f;
|
float sharpFac = params->sharpening.amount * 0.01f;
|
||||||
float** nL = base;
|
float** nL = base;
|
||||||
|
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp for
|
||||||
for (int i=2; i<H-2; i++) {
|
for (int i=2; i<H-2; i++) {
|
||||||
float max1=0, max2=0, min1=0, min2=0, maxn, minn, np1, np2, np3, min_, max_, labL;
|
float max1=0, max2=0, min1=0, min2=0, maxn, minn, np1, np2, np3, min_, max_, labL;
|
||||||
for (int j=2; j<W-2; j++) {
|
for (int j=2; j<W-2; j++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user