Wavelet zero-out unwated levels bug fixed, issue 2702#369
This commit is contained in:
@@ -149,6 +149,7 @@ struct cont_params {
|
|||||||
bool finena;
|
bool finena;
|
||||||
bool toningena;
|
bool toningena;
|
||||||
bool noiseena;
|
bool noiseena;
|
||||||
|
int maxilev;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -223,6 +224,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
cp.eddetthrHi=(float) params->wavelet.edgedetectthr2;
|
cp.eddetthrHi=(float) params->wavelet.edgedetectthr2;
|
||||||
int N=imheight*imwidth;
|
int N=imheight*imwidth;
|
||||||
int maxmul=params->wavelet.thres;
|
int maxmul=params->wavelet.thres;
|
||||||
|
cp.maxilev=maxmul;
|
||||||
static const float scales[10] = {1.f,2.f,4.f,8.f,16.f,32.f,64.f,128.f,256.f,512.f};
|
static const float scales[10] = {1.f,2.f,4.f,8.f,16.f,32.f,64.f,128.f,256.f,512.f};
|
||||||
float scaleskip[10];
|
float scaleskip[10];
|
||||||
for(int sc=0;sc<10;sc++)
|
for(int sc=0;sc<10;sc++)
|
||||||
@@ -2067,20 +2069,33 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(choiceClevel==0) { // Only one level
|
if(choiceClevel==0) { // Only one level
|
||||||
if(level != choicelevel){ // zero all for the levels != choicelevel
|
|
||||||
for (int dir=1; dir<4; dir++) {
|
if(choiceDir==0) { // All directions
|
||||||
for (int i=0; i<W_L*H_L; i++) {
|
if(level != choicelevel){ // zero all for the levels != choicelevel
|
||||||
WavCoeffs_L[dir][i] = 0.f;
|
for (int dir=1; dir<4; dir++) {
|
||||||
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
|
WavCoeffs_L[dir][i] = 0.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // zero the unwanted directions for level == choicelevel
|
} else { // zero the unwanted directions for level == choicelevel
|
||||||
for (int i=0; i<W_L*H_L; i++) {
|
|
||||||
WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f;
|
if(choicelevel >= cp.maxilev) {
|
||||||
|
for (int dir=1; dir<4; dir++) {
|
||||||
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
|
WavCoeffs_L[dir][i] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(level != choicelevel){ // zero all for the levels != choicelevel
|
||||||
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
|
WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(choiceClevel==1) { // Only below level
|
} else if(choiceClevel==1) { // Only below level
|
||||||
if(choiceDir==0) { // All directions
|
if(choiceDir==0) { // All directions
|
||||||
if(level >= choicelevel) {
|
if(level > choicelevel) {
|
||||||
for (int dir=1; dir<4; dir++) {
|
for (int dir=1; dir<4; dir++) {
|
||||||
for (int i=0; i<W_L*H_L; i++) {
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
WavCoeffs_L[dir][i] =0.f;
|
WavCoeffs_L[dir][i] =0.f;
|
||||||
@@ -2088,7 +2103,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // zero the unwanted directions for level >= choicelevel
|
} else { // zero the unwanted directions for level >= choicelevel
|
||||||
if(level >= choicelevel) {
|
if(level > choicelevel) {
|
||||||
for (int i=0; i<W_L*H_L; i++) {
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f;
|
WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f;
|
||||||
}
|
}
|
||||||
@@ -2104,7 +2119,16 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // zero the unwanted directions for level >= choicelevel
|
} else { // zero the unwanted directions for level >= choicelevel
|
||||||
if(level <= choicelevel) {
|
if(choicelevel >= cp.maxilev) {
|
||||||
|
for (int dir=1; dir<4; dir++) {
|
||||||
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
|
WavCoeffs_L[dir][i] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if(level <= choicelevel) {
|
||||||
for (int i=0; i<W_L*H_L; i++) {
|
for (int i=0; i<W_L*H_L; i++) {
|
||||||
WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f;
|
WavCoeffs_L[dir1][i] = WavCoeffs_L[dir2][i] = 0.f;
|
||||||
}
|
}
|
||||||
@@ -2865,20 +2889,31 @@ if(cp.BAmet==1){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(choiceClevel==0) { // Only one level
|
if(choiceClevel==0) { // Only one level
|
||||||
if(level != choicelevel){ // zero all for the levels != choicelevel
|
if(choiceDir==0) { // All directions
|
||||||
for (int dir=1; dir<4; dir++) {
|
if(level != choicelevel){ // zero all for the levels != choicelevel
|
||||||
for (int i=0; i<W_ab*H_ab; i++) {
|
for (int dir=1; dir<4; dir++) {
|
||||||
WavCoeffs_ab[dir][i] = 0.f;
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
|
WavCoeffs_ab[dir][i] = 0.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // zero the unwanted directions for level == choicelevel
|
} else { // zero the unwanted directions for level == choicelevel
|
||||||
for (int i=0; i<W_ab*H_ab; i++) {
|
if(choicelevel >= cp.maxilev) {
|
||||||
WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f;
|
for (int dir=1; dir<4; dir++) {
|
||||||
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
|
WavCoeffs_ab[dir][i] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(level != choicelevel){ // zero all for the levels != choicelevel
|
||||||
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
|
WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(choiceClevel==1) { // Only below level
|
} else if(choiceClevel==1) { // Only below level
|
||||||
if(choiceDir==0) { // All directions
|
if(choiceDir==0) { // All directions
|
||||||
if(level >= choicelevel) {
|
if(level > choicelevel) {
|
||||||
for (int dir=1; dir<4; dir++) {
|
for (int dir=1; dir<4; dir++) {
|
||||||
for (int i=0; i<W_ab*H_ab; i++) {
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
WavCoeffs_ab[dir][i] =0.f;
|
WavCoeffs_ab[dir][i] =0.f;
|
||||||
@@ -2886,7 +2921,7 @@ if(cp.BAmet==1){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // zero the unwanted directions for level >= choicelevel
|
} else { // zero the unwanted directions for level >= choicelevel
|
||||||
if(level >= choicelevel) {
|
if(level > choicelevel) {
|
||||||
for (int i=0; i<W_ab*H_ab; i++) {
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f;
|
WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f;
|
||||||
}
|
}
|
||||||
@@ -2902,7 +2937,14 @@ if(cp.BAmet==1){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // zero the unwanted directions for level >= choicelevel
|
} else { // zero the unwanted directions for level >= choicelevel
|
||||||
if(level <= choicelevel) {
|
if(choicelevel >= cp.maxilev) {
|
||||||
|
for (int dir=1; dir<4; dir++) {
|
||||||
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
|
WavCoeffs_ab[dir][i] = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(level <= choicelevel) {
|
||||||
for (int i=0; i<W_ab*H_ab; i++) {
|
for (int i=0; i<W_ab*H_ab; i++) {
|
||||||
WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f;
|
WavCoeffs_ab[dir1][i] = WavCoeffs_ab[dir2][i] = 0.f;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user