43 unsigned long long int pxlNr;
46 if(tac==NULL)
return(2);
59 for(
int zi=0; zi<timg->
dimz; zi++)
60 for(
int yi=0; yi<timg->
dimy; yi++)
61 for(
int xi=0; xi<timg->
dimx; xi++)
62 if(timg->
m[zi][yi][xi][0]!=0.0) pxlNr++;
64 if(pxlNr<1)
return(4);
67 for(
int fi=0; fi<img->
dimt; fi++) {
69 for(
int zi=0; zi<img->
dimz; zi++) {
70 for(
int yi=0; yi<img->
dimy; yi++) {
71 for(
int xi=0; xi<img->
dimx; xi++) {
72 if(timg==NULL) tac[fi]+=img->
m[zi][yi][xi][fi];
73 else if(timg->
m[zi][yi][xi][0]!=0.0) tac[fi]+=img->
m[zi][yi][xi][fi];
77 tac[fi]/=(float)pxlNr;
99 if(avgauc==NULL)
return(2);
102 if(pxlNr<1)
return(3);
103 for(
int fi=0; fi<img->
dimt; fi++) {
105 float fl=img->
end[fi]-img->
start[fi];
if(fl<=0.0)
return(4);
106 for(
int pi=0; pi<img->
dimz; pi++)
107 for(
int yi=0; yi<img->
dimy; yi++)
108 for(
int xi=0; xi<img->
dimx; xi++)
109 fv+=img->
m[pi][yi][xi][fi];
138 if(verbose>0) printf(
"imgMaskTAC()\n");
142 if(mask->
dimz!=img->
dimz)
return(3);
143 if(mask->
dimy!=img->
dimy)
return(4);
144 if(mask->
dimx!=img->
dimx)
return(5);
145 if(img->
dimt<1 || mask->
dimt<1)
return(6);
146 if(tac==NULL)
return(7);
149 for(
int fi=0; fi<img->
dimt; fi++) tac[fi]=0.0;
152 for(
int zi=0; zi<mask->
dimz; zi++)
153 for(
int yi=0; yi<mask->
dimy; yi++)
154 for(
int xi=0; xi<mask->
dimx; xi++)
if(mask->
m[zi][yi][xi][0]>0.0) {
155 for(
int fi=0; fi<img->
dimt; fi++)
156 tac[fi]+=mask->
m[zi][yi][xi][0]*img->
m[zi][yi][xi][fi];
157 w+=mask->
m[zi][yi][xi][0];
160 for(
int fi=0; fi<img->
dimt; fi++) tac[fi]/=w;
161 if(verbose>1) printf(
"mask_sum := %g\n", w);
162 if(w<=0.0 && verbose>0)
163 fprintf(stderr,
"Warning: zero mask applied to image.\n");
184 if(img==NULL || list==NULL)
return 1;
190 for(
int zi=0; zi<img->
dimz; zi++)
191 for(
int yi=0; yi<img->
dimy; yi++)
192 for(
int xi=0; xi<img->
dimx; xi++) {
196 if(ret<0)
return(100+ret);
228 if(verbose>0) printf(
"imgVoiMaskTAC(img, mask, %d, tac, %d)\n", mv, verbose);
232 if(mask->
dimz!=img->
dimz)
return(-3);
233 if(mask->
dimy!=img->
dimy)
return(-4);
234 if(mask->
dimx!=img->
dimx)
return(-5);
235 if(img->
dimt<1 || mask->
dimt<1)
return(-6);
236 if(tac==NULL)
return(-7);
239 for(
int fi=0; fi<img->
dimt; fi++) tac[fi]=0.0;
242 int pxlNr[img->
dimt], badNr[img->
dimt];
243 for(
int fi=0; fi<img->
dimt; fi++) pxlNr[fi]=badNr[fi]=0;
244 for(
int zi=0; zi<mask->
dimz; zi++) {
245 for(
int yi=0; yi<mask->
dimy; yi++) {
246 for(
int xi=0; xi<mask->
dimx; xi++) {
249 for(
int fi=0; fi<img->
dimt; fi++) {
250 if(!isfinite(img->
m[zi][yi][xi][fi])) {badNr[fi]++;
continue;}
251 tac[fi]+=img->
m[zi][yi][xi][fi]; pxlNr[fi]++;
259 for(
int fi=0; fi<img->
dimt; fi++) {
260 if(badNr[fi]>0 && verbose>1) {
261 fprintf(stderr,
"Warning: %d missing pixel values in frame %d.\n", badNr[fi], 1+fi);
266 fprintf(stderr,
"Warning: zero valid pixels in frame %d.\n", 1+fi); fflush(stderr);
271 printf(
"%d valid pixels inside mask in frame %d\n", pxlNr[fi], 1+fi); fflush(stdout);
273 tac[fi]/=(double)pxlNr[fi];
274 if(pxlNr[fi]<minNr) minNr=pxlNr[fi];
int imgAverageAUC(IMG *img, float *avgauc)
int imgAverageTAC(IMG *img, float *tac)
int imgMaskTAC(IMG *img, IMG *mask, double *tac, int verbose)
int imgMaskRoiNr(IMG *img, INTEGER_LIST *list)
int imgVoiMaskTAC(IMG *img, IMG *mask, int mv, double *tac, int verbose)
int imgAverageMaskTAC(IMG *img, IMG *timg, float *tac)
int integerListEmpty(INTEGER_LIST *l)
int integerListSort(INTEGER_LIST *l)
int integerListAdd(INTEGER_LIST *l, int v, int ifnew)
#define IMG_STATUS_OCCUPIED
Header file for libtpcimgp.