22 if(maxvalue==NULL)
return(2);
else *maxvalue=0.0;
25 for(
int pi=0; pi<img->
dimz; pi++)
26 for(
int yi=0; yi<img->
dimy; yi++)
27 for(
int xi=0; xi<img->
dimx; xi++)
28 for(
int fi=0; fi<img->
dimt; fi++) {
29 if(!isfinite(f) || img->
m[pi][yi][xi][fi]>f) f=img->
m[pi][yi][xi][fi];
51 if(maxvalue==NULL)
return(2);
else *maxvalue=0.0;
54 for(
int pi=0; pi<img->
dimz; pi++)
55 for(
int yi=0; yi<img->
dimy; yi++)
56 for(
int xi=0; xi<img->
dimx; xi++)
57 for(
int fi=0; fi<img->
dimt; fi++) {
58 if(!isfinite(f) || fabs(img->
m[pi][yi][xi][fi])>fabs(f)) f=img->
m[pi][yi][xi][fi];
92 if(r->
z1<1 || r->
y1<1 || r->
x1<1 || r->
f1<1)
return(2);
96 zi=r->
z1-1; yi=r->
y1-1; xi=r->
x1-1; fi=r->
f1-1;
98 if(maxp!=NULL) {maxp->
z=zi+1; maxp->
y=yi+1; maxp->
x=xi+1; maxp->
f=fi+1;}
99 if(minp!=NULL) {minp->
z=zi+1; minp->
y=yi+1; minp->
x=xi+1; minp->
f=fi+1;}
100 for(zi=r->
z1-1; zi<r->z2; zi++) {
101 for(yi=r->
y1-1; yi<r->y2; yi++) {
102 for(xi=r->
x1-1; xi<r->x2; xi++) {
103 for(fi=r->
f1-1; fi<r->f2; fi++) {
104 if(!isfinite(lmax) || img->
m[zi][yi][xi][fi]>lmax) {
105 lmax=img->
m[zi][yi][xi][fi];
106 if(maxp!=NULL && isfinite(img->
m[zi][yi][xi][fi])) {
107 maxp->
z=zi+1; maxp->
y=yi+1; maxp->
x=xi+1; maxp->
f=fi+1;}
109 if(!isfinite(lmin) || img->
m[zi][yi][xi][fi]<lmin) {
110 lmin=img->
m[zi][yi][xi][fi];
111 if(minp!=NULL && isfinite(img->
m[zi][yi][xi][fi])) {
112 minp->
z=zi+1; minp->
y=yi+1; minp->
x=xi+1; minp->
f=fi+1;}
119 zi=yi=xi=fi=0; lmax=lmin=nanf(
"");
120 if(maxp!=NULL) {maxp->
z=zi+1; maxp->
y=yi+1; maxp->
x=xi+1; maxp->
f=fi+1;}
121 if(minp!=NULL) {minp->
z=zi+1; minp->
y=yi+1; minp->
x=xi+1; minp->
f=fi+1;}
122 for(zi=0; zi<img->
dimz; zi++) {
123 for(yi=0; yi<img->
dimy; yi++) {
124 for(xi=0; xi<img->
dimx; xi++) {
125 for(fi=0; fi<img->
dimt; fi++) {
126 if(!isfinite(lmax) || img->
m[zi][yi][xi][fi]>lmax) {
127 lmax=img->
m[zi][yi][xi][fi];
128 if(maxp!=NULL && isfinite(img->
m[zi][yi][xi][fi])) {
129 maxp->
z=zi+1; maxp->
y=yi+1; maxp->
x=xi+1; maxp->
f=fi+1;}
131 if(!isfinite(lmin) || img->
m[zi][yi][xi][fi]<lmin) {
132 lmin=img->
m[zi][yi][xi][fi];
133 if(minp!=NULL && isfinite(img->
m[zi][yi][xi][fi])) {
134 minp->
z=zi+1; minp->
y=yi+1; minp->
x=xi+1; minp->
f=fi+1;}
141 if(maxv!=NULL) *maxv=lmax;
142 if(minv!=NULL) *minv=lmin;
143 if(!isfinite(lmax) && (maxp!=NULL || maxv!=NULL))
return(5);
144 if(!isfinite(lmin) && (minp!=NULL || minv!=NULL))
return(5);
162 return (
imgRangeMinMax(img, NULL, NULL, maxvalue, NULL, minvalue));
182 if(minvalue==NULL || maxvalue==NULL)
return(2);
183 *minvalue=*maxvalue=0.0;
186 if(frame<1)
return(4);
190 for(
int pi=0; pi<img->
dimz; pi++)
191 for(
int yi=0; yi<img->
dimy; yi++)
192 for(
int xi=0; xi<img->
dimx; xi++) {
193 if(!isfinite(ma) || img->
m[pi][yi][xi][fi]>ma) ma=img->
m[pi][yi][xi][fi];
194 if(!isfinite(mi) || img->
m[pi][yi][xi][fi]<mi) mi=img->
m[pi][yi][xi][fi];
196 *minvalue=mi; *maxvalue=ma;
197 if(!isfinite(mi) || !isfinite(ma))
return(5);
223 if(
IMG_TEST) printf(
"imgReadMinMax(%s, *fmin, *fmax)\n", fname);
228 if(fmin!=NULL) *fmin=frmin;
229 if(fmin!=NULL) *fmax=frmax;
231 if(fmin!=NULL && !(*fmin<=frmin)) *fmin=frmin;
232 if(fmax!=NULL && !(*fmax>=frmax)) *fmax=frmax;
237 if(ret==STATUS_NOMATRIX && fi>0)
return STATUS_OK;
262 if(maxvalue==NULL && p==NULL)
return(2);
264 if(maxvalue!=NULL) *maxvalue=0.0;
265 if(p!=NULL) p->
x=p->
y=p->
z=p->
f=1;
267 for(pi=0; pi<img->
dimz; pi++)
268 for(yi=1; yi<img->
dimy-1; yi++)
269 for(xi=1; xi<img->
dimx-1; xi++)
270 for(fi=0; fi<img->
dimt; fi++) {
271 v=img->
m[pi][yi-1][xi-1][fi]+
272 img->
m[pi][yi-1][xi ][fi]+
273 img->
m[pi][yi-1][xi+1][fi]+
274 img->
m[pi][yi ][xi-1][fi]+
275 img->
m[pi][yi ][xi ][fi]*2.0+
276 img->
m[pi][yi ][xi+1][fi]+
277 img->
m[pi][yi+1][xi-1][fi]+
278 img->
m[pi][yi+1][xi ][fi]+
279 img->
m[pi][yi+1][xi+1][fi];
282 f=v;
if(p!=NULL) {p->
x=xi+1; p->
y=yi+1; p->
z=pi+1; p->
f=fi+1;}}
284 if(maxvalue!=NULL) *maxvalue=f;
304 int zi, yi, xi, fi, mf;
307 if(verbose>0) printf(
"imgGetPeak(img, %g, p, %d)\n", beforeTime, verbose);
309 if(p==NULL)
return(2);
311 if(beforeTime<img->mid[0]) {
312 if(verbose>0) fprintf(stderr,
"Error: invalid max search time setting.\n");
315 f=nanf(
""); mf=img->
dimt; p->
x=p->
y=p->
z=p->
f=1;
316 for(zi=0; zi<img->
dimz; zi++) {
317 for(yi=0; yi<img->
dimy; yi++) {
318 for(xi=0; xi<img->
dimx; xi++) {
319 for(fi=0; fi<img->
dimt; fi++)
if(img->
mid[fi]<=beforeTime) {
320 if(!isfinite(img->
m[zi][yi][xi][fi]))
continue;
321 if(isfinite(f) && img->
m[zi][yi][xi][fi]<f)
323 if(isfinite(f) && img->
m[zi][yi][xi][fi]==f) {
327 f=img->
m[zi][yi][xi][fi];
328 p->
x=xi+1; p->
y=yi+1; p->
z=zi+1; p->
f=fi+1;
334 if(!isfinite(f))
return(5);
335 if(verbose>2) printf(
"maxval := %g\n", f);
359 if(verbose>0) printf(
"imgGetMaxTime(*img, *mimg, %d)\n", w);
362 if(mimg==NULL)
return(2);
367 if(verbose>1) printf(
"allocating memory for %dx%dx%d pixels\n", img->
dimz, img->
dimy, img->
dimx);
374 mimg->
unit=CUNIT_UNKNOWN;
377 for(
int zi=0; zi<img->
dimz; zi++) {
378 for(
int yi=0; yi<img->
dimy; yi++) {
379 for(
int xi=0; xi<img->
dimx; xi++) {
382 double mv=img->
m[zi][yi][xi][ti];
383 for(ti=1; ti<img->
dimt; ti++) {
384 if(img->
m[zi][yi][xi][ti]<mv)
continue;
385 mi=ti; mv=img->
m[zi][yi][xi][ti];
387 if(mv>0.0) mimg->
m[zi][yi][xi][0]=img->
mid[mi];
388 else mimg->
m[zi][yi][xi][0]=0.0;
396 for(
int zi=0; zi<img->
dimz; zi++) {
397 for(
int yi=0; yi<img->
dimy; yi++) {
398 for(
int xi=0; xi<img->
dimx; xi++) {
400 double sumw=0.0, sumt=0.0;
401 for(
int ti=0; ti<img->
dimt; ti++) {
402 if(isnan(img->
m[zi][yi][xi][ti]))
continue;
403 float fdur=img->
end[ti]-img->
start[ti];
if(fdur<=0.0) fdur=1.0;
404 sumt+=img->
m[zi][yi][xi][ti]*img->
mid[ti]*fdur;
405 sumw+=img->
m[zi][yi][xi][ti]*fdur;
408 if(sumt>0.0 && sumw>0.0) mimg->
m[zi][yi][xi][0]=sumt;
409 else mimg->
m[zi][yi][xi][0]=0.0;
417 for(
int zi=0; zi<img->
dimz; zi++) {
418 for(
int yi=0; yi<img->
dimy; yi++) {
419 for(
int xi=0; xi<img->
dimx; xi++) {
422 double mv=img->
m[zi][yi][xi][ti];
423 for(ti=1; ti<img->
dimt; ti++) {
424 if(img->
m[zi][yi][xi][ti]<mv)
continue;
425 mi=ti; mv=img->
m[zi][yi][xi][ti];
428 if(mi<1 || mi>img->
dimt-2)
continue;
429 int i1, i2; i1=mi-1; i2=mi+1;
if(i1>0 && i2<img->dimt-1) {i1--; i2++;}
430 double sumw=0.0, sumt=0.0;
431 for(
int i=i1; i<=i2; i++) {
432 if(!(img->
m[zi][yi][xi][i]>0.0))
continue;
433 sumt+=img->
m[zi][yi][xi][i]*img->
mid[i];
434 sumw+=img->
m[zi][yi][xi][i];
437 if(sumt>0.0) mimg->
m[zi][yi][xi][0]=sumt;
438 else mimg->
m[zi][yi][xi][0]=0.0;
464 if(verbose>0) printf(
"imgGetMaxFrame()\n");
467 if(mimg==NULL)
return(2);
472 if(verbose>1) printf(
"allocating memory for %dx%dx%d pixels\n", img->
dimz, img->
dimy, img->
dimx);
482 for(zi=0; zi<img->
dimz; zi++) {
483 for(yi=0; yi<img->
dimy; yi++)
for(xi=0; xi<img->
dimx; xi++) {
484 ti=mi=0; mv=img->
m[zi][yi][xi][ti];
485 for(ti=1; ti<img->
dimt; ti++) {
486 if(img->
m[zi][yi][xi][ti]<mv)
continue;
487 mi=ti; mv=img->
m[zi][yi][xi][ti];
489 if(mv>1.0E-008) mimg->
m[zi][yi][xi][0]=1.0+mi;
490 else mimg->
m[zi][yi][xi][0]=0.0;
516 if(r->
z1<1 || r->
y1<1 || r->
x1<1 || r->
f1<1)
return(2);
520 if(avg==NULL)
return(5);
524 for(zi=r->
z1-1; zi<r->z2; zi++) {
525 for(yi=r->
y1-1; yi<r->y2; yi++) {
526 for(xi=r->
x1-1; xi<r->x2; xi++) {
527 for(fi=r->
f1-1; fi<r->f2; fi++)
if(!isnan(img->
m[zi][yi][xi][fi])) {
528 *avg+=img->
m[zi][yi][xi][fi]; n++;
534 for(zi=0; zi<img->
dimz; zi++) {
535 for(yi=0; yi<img->
dimy; yi++) {
536 for(xi=0; xi<img->
dimx; xi++) {
537 for(fi=0; fi<img->
dimt; fi++)
if(!isnan(img->
m[zi][yi][xi][fi])) {
538 *avg+=img->
m[zi][yi][xi][fi]; n++;
544 if(n>0) *avg/=(float)n;
566 long long int i, j, l, m;
573 while(data[i]<x) i++;
574 while(x<data[j]) j--;
575 if(i<=j) {s=data[i]; data[i]=data[j]; data[j]=s; i++; j--;}
627 float sumsqr=0.0, sqrsum=0.0, avg;
629 if(n<1 || data==NULL) {
if(sd!=NULL) *sd=0.0;
return(0.0);}
631 for(i=0; i<n; i++) {sumsqr+=data[i]*data[i]; sqrsum+=data[i];}
632 avg=sqrsum/(float)n;
if(sd==NULL)
return(avg);
637 *sd=sqrt( (sumsqr - sqrsum/(
float)n) / (
float)(n-1) );
659 if(fmin!=NULL) *fmin=nanf(
"");
660 if(fmax!=NULL) *fmax=nanf(
"");
663 for(i=0; i<n; i++)
if(isfinite(data[i]))
break;
667 for(; i<n; i++)
if(isfinite(data[i])) {
668 if(data[i]>ma) ma=data[i];
669 else if(data[i]<mi) mi=data[i];
671 if(fmin!=NULL) *fmin=mi;
672 if(fmax!=NULL) *fmax=ma;
int imgAllocate(IMG *image, int planes, int rows, int columns, int frames)
int imgCopyhdr(IMG *image1, IMG *image2)
void imgEmpty(IMG *image)
int imgReadFrame(const char *fname, int frame_to_read, IMG *img, int frame_index)
int imgGetMaxTime(IMG *img, IMG *mimg, const int w, int verbose)
int imgAvg(IMG *img, IMG_RANGE *r, float *avg)
float fmean(float *data, long long int n, float *sd)
void fMinMaxFin(float *data, long long int n, float *fmin, float *fmax)
int imgReadMinMax(const char *fname, float *fmin, float *fmax)
int imgFrameMinMax(IMG *img, int frame, float *minvalue, float *maxvalue)
int imgRangeMinMax(IMG *img, IMG_RANGE *r, IMG_PIXEL *maxp, float *maxv, IMG_PIXEL *minp, float *minv)
int imgAbsMax(IMG *img, float *maxvalue)
int imgMinMax(IMG *img, float *minvalue, float *maxvalue)
int imgGetMaxFrame(IMG *img, IMG *mimg, int verbose)
int imgGetPeak(IMG *img, float beforeTime, IMG_PIXEL *p, int verbose)
float f_kth_smallest(float *data, long long int n, long long int k)
int imgMax(IMG *img, float *maxvalue)
int imgSmoothMax(IMG *img, float *maxvalue, IMG_PIXEL *p)
float fmedian(float *data, long long int n)
Header file for libtpcimgio.
#define IMG_STATUS_OCCUPIED