TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcimgp
imgeval.c
Go to the documentation of this file.
1
5
/*****************************************************************************/
6
#include "
libtpcimgp.h
"
7
/*****************************************************************************/
8
9
/*****************************************************************************/
15
int
imgAverageTAC
(
17
IMG
*img,
19
float
*tac
20
) {
21
return
(
imgAverageMaskTAC
(img, NULL, tac));
22
}
23
/*****************************************************************************/
24
25
/*****************************************************************************/
34
int
imgAverageMaskTAC
(
36
IMG
*img,
39
IMG
*timg,
41
float
*tac
42
) {
43
unsigned
long
long
int
pxlNr;
44
45
if
(img==NULL || img->
status
<
IMG_STATUS_OCCUPIED
)
return
(1);
46
if
(tac==NULL)
return
(2);
47
if
(timg!=NULL) {
48
if
(timg->
status
<
IMG_STATUS_OCCUPIED
)
return
(3);
49
/* check that image dimensions are the same */
50
if
(timg->
dimz
!=img->
dimz
|| timg->
dimz
<1)
return
(5);
51
if
(timg->
dimy
!=img->
dimy
|| timg->
dimy
<1)
return
(5);
52
if
(timg->
dimx
!=img->
dimx
|| timg->
dimx
<1)
return
(5);
53
}
54
/* compute the nr of pixels in the mask */
55
if
(timg==NULL) {
56
pxlNr=img->
dimz
*img->
dimy
*img->
dimx
;
57
}
else
{
58
pxlNr=0;
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++;
63
}
64
if
(pxlNr<1)
return
(4);
65
66
/* compute the TAC */
67
for
(
int
fi=0; fi<img->
dimt
; fi++) {
68
tac[fi]=0.0;
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];
74
}
75
}
76
}
77
tac[fi]/=(float)pxlNr;
78
//printf("pxlNr=%llu/%llu\n", pxlNr, (unsigned long long)img->dimz*img->dimy*img->dimx);
79
}
80
return
(0);
81
}
82
/*****************************************************************************/
83
84
/*****************************************************************************/
91
int
imgAverageAUC
(
93
IMG
*img,
95
float
*avgauc
96
) {
97
98
if
(img->
status
<
IMG_STATUS_OCCUPIED
)
return
(1);
99
if
(avgauc==NULL)
return
(2);
100
*avgauc=0.0;
101
unsigned
long
long
pxlNr=img->
dimz
*img->
dimy
*img->
dimx
;
102
if
(pxlNr<1)
return
(3);
103
for
(
int
fi=0; fi<img->
dimt
; fi++) {
104
float
fv=0.0;
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];
110
fv/=(float)pxlNr;
111
*avgauc+=fv*fl;
112
}
113
return
(0);
114
}
115
/*****************************************************************************/
116
117
/*****************************************************************************/
126
int
imgMaskTAC
(
128
IMG
*img,
131
IMG
*mask,
134
double
*tac,
136
int
verbose
137
) {
138
if
(verbose>0) printf(
"imgMaskTAC()\n"
);
139
140
if
(img->
status
<
IMG_STATUS_OCCUPIED
)
return
(1);
141
if
(mask->
status
<
IMG_STATUS_OCCUPIED
)
return
(2);
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);
147
148
/* Initiate TAC */
149
for
(
int
fi=0; fi<img->
dimt
; fi++) tac[fi]=0.0;
150
/* Add weighted sum to TAC */
151
double
w=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];
158
}
159
/* Divide sum TAC by sum weights */
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"
);
164
165
return
(0);
166
}
167
/*****************************************************************************/
168
169
/*****************************************************************************/
176
int
imgMaskRoiNr
(
179
IMG
*img,
181
INTEGER_LIST
*list
182
) {
183
/* Check the input */
184
if
(img==NULL || list==NULL)
return
1;
185
186
/* Clear any previous list contents */
187
if
(list->
nr
>0) {
integerListEmpty
(list);}
188
189
/* Go through the mask image */
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++) {
193
int
v=
temp_roundf
(img->
m
[zi][yi][xi][0]);
194
if
(v>0) {
195
int
ret=
integerListAdd
(list, v, 1);
196
if
(ret<0)
return
(100+ret);
197
}
198
}
199
/* Sort the list */
200
integerListSort
(list);
201
202
return
0;
203
}
204
/*****************************************************************************/
205
206
/*****************************************************************************/
214
int
imgVoiMaskTAC
(
216
IMG
*img,
219
IMG
*mask,
221
int
mv,
224
double
*tac,
226
int
verbose
227
) {
228
if
(verbose>0) printf(
"imgVoiMaskTAC(img, mask, %d, tac, %d)\n"
, mv, verbose);
229
230
if
(img->
status
<
IMG_STATUS_OCCUPIED
)
return
(-1);
231
if
(mask->
status
<
IMG_STATUS_OCCUPIED
)
return
(-2);
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);
237
238
/* Initiate TAC */
239
for
(
int
fi=0; fi<img->
dimt
; fi++) tac[fi]=0.0;
240
241
/* Add the sum to TAC */
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++) {
247
double
mf=(int)
temp_roundf
(mask->
m
[zi][yi][xi][0]);
248
if
(mf!=mv)
continue
;
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]++;
252
}
253
}
254
}
255
}
256
257
/* Divide sum TAC by sum weights */
258
int
minNr=pxlNr[0];
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);
262
fflush(stderr);
263
}
264
if
(pxlNr[fi]==0) {
265
if
(verbose>0) {
266
fprintf(stderr,
"Warning: zero valid pixels in frame %d.\n"
, 1+fi); fflush(stderr);
267
}
268
tac[fi]=nan(
""
);
269
}
270
if
(verbose>1) {
271
printf(
"%d valid pixels inside mask in frame %d\n"
, pxlNr[fi], 1+fi); fflush(stdout);
272
}
273
tac[fi]/=(double)pxlNr[fi];
274
if
(pxlNr[fi]<minNr) minNr=pxlNr[fi];
275
}
276
277
return
(minNr);
278
}
279
/*****************************************************************************/
280
281
/*****************************************************************************/
imgAverageAUC
int imgAverageAUC(IMG *img, float *avgauc)
Definition
imgeval.c:91
imgAverageTAC
int imgAverageTAC(IMG *img, float *tac)
Definition
imgeval.c:15
imgMaskTAC
int imgMaskTAC(IMG *img, IMG *mask, double *tac, int verbose)
Definition
imgeval.c:126
imgMaskRoiNr
int imgMaskRoiNr(IMG *img, INTEGER_LIST *list)
Definition
imgeval.c:176
imgVoiMaskTAC
int imgVoiMaskTAC(IMG *img, IMG *mask, int mv, double *tac, int verbose)
Definition
imgeval.c:214
imgAverageMaskTAC
int imgAverageMaskTAC(IMG *img, IMG *timg, float *tac)
Definition
imgeval.c:34
integerListEmpty
int integerListEmpty(INTEGER_LIST *l)
Definition
intex.c:175
integerListSort
int integerListSort(INTEGER_LIST *l)
Definition
intex.c:219
integerListAdd
int integerListAdd(INTEGER_LIST *l, int v, int ifnew)
Definition
intex.c:190
IMG_STATUS_OCCUPIED
#define IMG_STATUS_OCCUPIED
Definition
libtpcimgio.h:1479
libtpcimgp.h
Header file for libtpcimgp.
temp_roundf
int temp_roundf(float e)
Definition
petc99.c:20
IMG
Definition
libtpcimgio.h:1657
IMG::dimx
unsigned short int dimx
Definition
libtpcimgio.h:1780
IMG::m
float **** m
Definition
libtpcimgio.h:1799
IMG::status
char status
Definition
libtpcimgio.h:1665
IMG::dimt
unsigned short int dimt
Definition
libtpcimgio.h:1778
IMG::start
float * start
Definition
libtpcimgio.h:1815
IMG::dimz
unsigned short int dimz
Definition
libtpcimgio.h:1784
IMG::dimy
unsigned short int dimy
Definition
libtpcimgio.h:1782
IMG::end
float * end
Definition
libtpcimgio.h:1817
INTEGER_LIST
Definition
libtpcmisc.h:327
INTEGER_LIST::nr
int nr
Definition
libtpcmisc.h:329
Generated on
for TPCCLIB by
1.17.0