84 float lower_threshold_level,
87 float upper_threshold_level,
95 long long *lower_thr_nr,
98 long long *upper_thr_nr
100 int zi, yi, xi, fi, ret;
101 long long lnr=0, unr=0;
103 float maxauc, lower_thr_limit, upper_thr_limit;
117 for(zi=0; zi<img->
dimz; zi++)
118 for(yi=0; yi<img->
dimy; yi++)
119 for(xi=0; xi<img->
dimx; xi++)
120 timg->
m[zi][yi][xi][0]=1.0;
121 }
else if(timg!=NULL) {
124 if(timg->
dimt<1)
return 3;
134 ret=
imgMax(&aucimg, &maxauc);
if(ret) {
imgEmpty(&aucimg);
return(ret);}
136 lower_thr_limit=lower_threshold_level*maxauc;
137 upper_thr_limit=upper_threshold_level*maxauc;
139 for(zi=0; zi<img->
dimz; zi++)
140 for(yi=0; yi<img->
dimy; yi++)
141 for(xi=0; xi<img->
dimx; xi++)
142 if(aucimg.
m[zi][yi][xi][0]<lower_thr_limit) {
143 if(timg==NULL)
for(fi=0; fi<img->
dimt; fi++) img->
m[zi][yi][xi][fi]=0.0;
144 else timg->
m[zi][yi][xi][0]=0.0;
146 }
else if(aucimg.
m[zi][yi][xi][0]>upper_thr_limit) {
147 if(timg==NULL)
for(fi=0; fi<img->
dimt; fi++) img->
m[zi][yi][xi][fi]=0.0;
148 else timg->
m[zi][yi][xi][0]=0.0;
154 ret=
imgMax(img, &maxauc);
if(ret)
return(ret);
156 lower_thr_limit=lower_threshold_level*maxauc;
157 upper_thr_limit=upper_threshold_level*maxauc;
159 for(zi=0; zi<img->
dimz; zi++)
160 for(yi=0; yi<img->
dimy; yi++)
161 for(xi=0; xi<img->
dimx; xi++)
162 if(img->
m[zi][yi][xi][0]<lower_thr_limit) {
163 if(timg==NULL)
for(fi=0; fi<img->
dimt; fi++) img->
m[zi][yi][xi][fi]=0.0;
164 else timg->
m[zi][yi][xi][0]=0.0;
166 }
else if(img->
m[zi][yi][xi][0]>upper_thr_limit) {
167 if(timg==NULL)
for(fi=0; fi<img->
dimt; fi++) img->
m[zi][yi][xi][fi]=0.0;
168 else timg->
m[zi][yi][xi][0]=0.0;
173 if(lower_thr_nr!=NULL) *lower_thr_nr=lnr;
174 if(upper_thr_nr!=NULL) *upper_thr_nr=unr;
413 printf(
"imgRegionGrowingByThreshold(img, %d, %d, %d, %g, %g, mask, %d)\n",
414 sz, sy, sx, lthr, uthr, verbose);
423 if(sz<0 || sy<0 || sx<0 || sz>=dimz || sy>=dimy || sx>=dimx) {
424 if(verbose>1) printf(
"pixels does not reside inside image\n");
429 if(mask->
m[sz][sy][sx][0]>0.5) {
430 if(verbose>1) printf(
"seed already belongs to mask\n");
435 if(img->
m[sz][sy][sx][0]<lthr || img->
m[sz][sy][sx][0]>uthr) {
437 printf(
" [%d][%d][%d] outside thresholds\n", sz, sy, sx);
440 mask->
m[sz][sy][sx][0]=0.0;
444 printf(
" [%d][%d][%d] added to mask\n", sz, sy, sx);
447 mask->
m[sz][sy][sx][0]=1.0;
451 nsz=sz; nsy=sy; nsx=sx-1;
453 nsz=sz; nsy=sy; nsx=sx+1;
455 nsz=sz; nsy=sy-1; nsx=sx;
457 nsz=sz; nsy=sy+1; nsx=sx;
459 nsz=sz-1; nsy=sy; nsx=sx;
461 nsz=sz+1; nsy=sy; nsx=sx;
int imgRegionGrowingByThreshold(IMG *img, const int sz, const int sy, const int sx, float lthr, float uthr, IMG *mask, int verbose)
int imgThresholdingLowHigh(IMG *img, float lower_threshold_level, float upper_threshold_level, IMG *timg, long long *lower_thr_nr, long long *upper_thr_nr)