25 if(verbose>0) printf(
"%s(img, %g, ...)\n", __func__, thrs);
28 float d, fmax, fmin, thrslev;
29 float px, py, pz, fsum;
33 if(img->
dimt<1)
return(3);
34 if(thrs<=0.0 || thrs>=1.0)
return(4);
35 if(pos==NULL)
return(5);
39 zi=yi=xi=0; fmax=fmin=img->
m[zi][yi][xi][fi];
40 for(zi=0; zi<img->
dimz; zi++)
41 for(yi=0; yi<img->
dimy; yi++)
42 for(xi=0; xi<img->
dimx; xi++) {
43 if(img->
m[zi][yi][xi][fi] > fmax) fmax=img->
m[zi][yi][xi][fi];
44 else if(img->
m[zi][yi][xi][fi] < fmin) fmin=img->
m[zi][yi][xi][fi];
46 if(verbose>1) printf(
"fmin := %g\nfmax := %g\n", fmin, fmax);
49 d=fmax-fmin;
if(d<=0.0)
return(10);
50 thrslev=d*thrs+fmin;
if(verbose>1) printf(
"thrslev := %g\n", thrslev);
53 px=py=pz=0.0; fsum=0.0;
54 for(zi=0; zi<img->
dimz; zi++)
55 for(yi=0; yi<img->
dimy; yi++)
56 for(xi=0; xi<img->
dimx; xi++) {
57 d=img->
m[zi][yi][xi][fi]-thrslev;
65 if(fsum<=0.0)
return 5;
66 px/=fsum; py/=fsum; pz/=fsum;
67 if(verbose>1) printf(
"peak_pos := (%g,%g,%g)\n", px, py, pz);
68 pos->
x=roundf(px); pos->
y=roundf(py); pos->
z=roundf(pz); pos->
f=1;