Wavelet levels - Fixed crash in rare cases in flat areas
This commit is contained in:
parent
390d62f638
commit
c65a27ce19
@ -1214,12 +1214,27 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
|
|||||||
delete[] noisevarlum;
|
delete[] noisevarlum;
|
||||||
|
|
||||||
//evaluate after denoise
|
//evaluate after denoise
|
||||||
|
bool exitifzero = true;
|
||||||
Evaluate2(*Ldecomp, meand, meanNd, sigmad, sigmaNd, MaxPd, MaxNd, wavNestedLevels);
|
Evaluate2(*Ldecomp, meand, meanNd, sigmad, sigmaNd, MaxPd, MaxNd, wavNestedLevels);
|
||||||
|
for (int dir = 1; dir < 4; dir++) {
|
||||||
|
for (int level = 0; level < levwavL; level++) {
|
||||||
|
if(mean[level] < 0.1f || meand[level] < 0.1f || sigma[level] < 0.1f || sigmad[level] < 0.1f) {
|
||||||
|
printf("near zero - exit\n");
|
||||||
|
exitifzero = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//for level 0 1 2 3
|
//for level 0 1 2 3
|
||||||
float thr = 0.f;
|
float thr = 0.f;
|
||||||
float thrend = cp.thrden; //cp.levdenlow;
|
float thrend = cp.thrden; //cp.levdenlow;
|
||||||
if(thrend < 0.02f) thr = 0.5f;
|
if(thrend < 0.01f) thr = 0.95f;
|
||||||
else if(thrend < 0.05f) thr = 0.2f;
|
else if(thrend < 0.02f) thr = 0.9f;
|
||||||
|
else if(thrend < 0.04f) thr = 0.8f;
|
||||||
|
else if(thrend < 0.06f) thr = 0.7f;
|
||||||
|
else if(thrend < 0.08f) thr = 0.6f;
|
||||||
|
else if(thrend < 0.1f) thr = 0.5f;
|
||||||
|
else if(thrend < 0.2f) thr = 0.2f;
|
||||||
else thr = 0.f;
|
else thr = 0.f;
|
||||||
|
|
||||||
FlatCurve wavlow({
|
FlatCurve wavlow({
|
||||||
@ -1229,8 +1244,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
|
|||||||
//for level 4
|
//for level 4
|
||||||
float thrhigh = 0.f;
|
float thrhigh = 0.f;
|
||||||
float threndhigh = cp.lev4t; //cp.levdenlow;
|
float threndhigh = cp.lev4t; //cp.levdenlow;
|
||||||
if(threndhigh < 0.02f) thrhigh = 0.5f;
|
if(threndhigh < 0.01f) thrhigh = 0.95f;
|
||||||
else if(threndhigh < 0.05f) thrhigh = 0.2f;
|
else if(threndhigh < 0.02f) thrhigh = 0.9f;
|
||||||
|
else if(threndhigh < 0.04f) thrhigh = 0.8f;
|
||||||
|
else if(threndhigh < 0.06f) thrhigh = 0.7f;
|
||||||
|
else if(threndhigh < 0.08f) thrhigh = 0.6f;
|
||||||
|
else if(threndhigh < 0.1f) thrhigh = 0.5f;
|
||||||
else thrhigh = 0.f;
|
else thrhigh = 0.f;
|
||||||
|
|
||||||
FlatCurve wavhigh({
|
FlatCurve wavhigh({
|
||||||
@ -1283,7 +1302,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
if (execut) {
|
if (execut && exitifzero) {
|
||||||
for (int dir = 1; dir < 4; dir++) {
|
for (int dir = 1; dir < 4; dir++) {
|
||||||
for (int level = 0; level < levref; level++) {
|
for (int level = 0; level < levref; level++) {
|
||||||
int Wlvl_L = Ldecomp->level_W(level);
|
int Wlvl_L = Ldecomp->level_W(level);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user