88 int ret, fi, pi, xi, yi;
89 float *fdata=NULL, *fptr;
91 char datfile[FILENAME_MAX], hdrfile[FILENAME_MAX], siffile[FILENAME_MAX];
93 int dimNr, dimx, dimy, dimz=1, dimt=1, pxlNr=0;
98 if(
IMG_TEST) printf(
"imgReadAnalyze(%s, *img)\n", dbname);
109 strcpy(datfile, dbname); cptr=strrchr(datfile,
'.');
110 if(cptr!=NULL && (strcmp(cptr,
".img")==0 || strcmp(cptr,
".hdr")==0)) {
111 *cptr=(char)0; strcpy(hdrfile, datfile);
114 strcat(datfile,
".img"); strcat(hdrfile,
".hdr");
120 strcpy(datfile, dbname); strcat(datfile,
".img");
121 strcpy(hdrfile, dbname); strcat(hdrfile,
".hdr");
135 if(
IMG_TEST) fprintf(stdout,
"reading image data %s\n", datfile);
143 if(dimNr>2) {dimz=dsr.
dime.
dim[3];
if(dimNr>3) dimt=dsr.
dime.
dim[4];}
144 pxlNr=dimx*dimy*dimz;
158 for(pi=0; pi<dimz; pi++) img->
planeNumber[pi]=pi+1;
161 if(strstr(dsr.
hist.
descrip,
"Decay corrected.")!=NULL)
163 else if(strstr(dsr.
hist.
descrip,
"No decay correction.")!=NULL)
169 fdata=malloc(pxlNr*
sizeof(
float));
173 for(fi=0; fi<dimt; fi++) {
180 for(pi=0; pi<img->
dimz; pi++)
181 for(yi=dimy-1; yi>=0; yi--)
182 for(xi=dimx-1; xi>=0; xi--)
183 img->
m[pi][yi][xi][fi]=*fptr++;
185 for(pi=dimz-1; pi>=0; pi--)
186 for(yi=dimy-1; yi>=0; yi--)
187 for(xi=dimx-1; xi>=0; xi--)
188 img->
m[pi][yi][xi][fi]=*fptr++;
196 strcpy(siffile, dbname); strcat(siffile,
".sif");
197 if(access(siffile, 0) == -1) {
198 strcpy(siffile, datfile); strcat(siffile,
".sif");
201 if(
IMG_TEST) printf(
"reading SIF file %s\n", siffile);
202 if(access(siffile, 0) == -1) {
203 if(
IMG_TEST) printf(
" No SIF file; therefore unknown frame times.\n");
212 if(st!=NULL) strftime(buf, 128,
"%Y-%m-%d %H:%M:%S", st);
213 else strcpy(buf,
"1900-01-01 00:00:00");
219 for(fi=0; fi<sif.
frameNr; fi++) {
224 for(fi=0; fi<sif.
frameNr; fi++) {
258 int ret, fi, pi, xi, yi, little;
261 char datfile[FILENAME_MAX], hdrfile[FILENAME_MAX];
265 short int *sdata, *sptr, smin, smax;
268 if(
IMG_TEST) printf(
"imgWriteAnalyze(%s, *img)\n", dbname);
277 strcpy(datfile, dbname); strcat(datfile,
".img");
278 strcpy(hdrfile, dbname); strcat(hdrfile,
".hdr");
291 cptr=strrchr(dbname,
'/');
if(cptr==NULL) cptr=strrchr(dbname,
'\\');
292 if(cptr!=NULL) cptr++;
if(cptr==NULL) cptr=dbname;
314 else strcpy(dsr.
hist.
descrip,
"No decay correction.");
329 if(
IMG_TEST) printf(
"scaling data to short ints\n");
334 if(g<1E-20) g=1.0;
else g=32767./g; dsr.
dime.
funused1=1.0/g;
335 if(
IMG_TEST) printf(
"min=%g max=%g scale_factor=%g\n",
340 sdata=malloc(pxlNr*
sizeof(
short int));
347 if((fp=fopen(datfile,
"wb")) == NULL) {
355 smin=smax=temp_roundf(g*img->
m[0][0][0][0]);
356 for(fi=0; fi<img->
dimt; fi++) {
359 for(pi=0; pi<img->
dimz; pi++)
360 for(yi=img->
dimy-1; yi>=0; yi--)
361 for(xi=img->
dimx-1; xi>=0; xi--) {
362 *sptr=temp_roundf(g*img->
m[pi][yi][xi][fi]);
363 if(*sptr>smax) smax=*sptr;
else if(*sptr<smin) smin=*sptr;
367 for(pi=img->
dimz-1; pi>=0; pi--)
368 for(yi=img->
dimy-1; yi>=0; yi--)
369 for(xi=img->
dimx-1; xi>=0; xi--) {
370 *sptr=temp_roundf(g*img->
m[pi][yi][xi][fi]);
371 if(*sptr>smax) smax=*sptr;
else if(*sptr<smin) smin=*sptr;
376 little=little_endian();
378 swabip(sdata, pxlNr*
sizeof(
short int));
380 if(fwrite(sdata, 2, pxlNr, fp) != pxlNr) {
382 free(sdata); fclose(fp);
390 if(
IMG_TEST) printf(
"smin=%d smax=%d\n", smin, smax);
418 char hdrfile[FILENAME_MAX], siffile[FILENAME_MAX];
424 if(
IMG_TEST) printf(
"\nimgReadAnalyzeHeader(%s, *img)\n", dbname);
439 if(
IMG_TEST>1) printf(
"anaReadHeader() return value := %d\n", ret);
485 int dimNr, dimx, dimy, dimz=1, dimt=1, pxlNr=0;
487 if(
IMG_TEST) printf(
"\nimgGetAnalyzeHeader(*img, *dsr)\n");
503 if(dimNr>2) {dimz=h->
dime.
dim[3];
if(dimNr>3) dimt=h->
dime.
dim[4];}
504 pxlNr=dimx*dimy*dimz;
520 if(strstr(h->
hist.
descrip,
"Decay corrected.")!=NULL)
522 else if(strstr(h->
hist.
descrip,
"No decay correction.")!=NULL)
550 if(
IMG_TEST) printf(
"\nimgSetAnalyzeHeader(*img, *dsr)\n");
567 cptr=strrchr(dbname,
'/');
if(cptr==NULL) cptr=strrchr(dbname,
'\\');
568 if(cptr!=NULL) cptr++;
if(cptr==NULL) cptr=(
char*)dbname;
590 else strcpy(dsr->
hist.
descrip,
"No decay correction.");
612 if(g<1E-20) g=1.0;
else g=32767./g; dsr->
dime.
funused1=1.0/g;
635 if(
IMG_TEST) printf(
"\nimgReadAnalyzeFirstFrame(%s, *img)\n", fname);
680 float *fdata=NULL, *fptr;
682 char datfile[FILENAME_MAX], hdrfile[FILENAME_MAX], siffile[FILENAME_MAX];
686 if(
IMG_TEST) printf(
"\nimgReadAnalyzeFrame(%s, %d, *img, %d)\n",
687 fname, frame_to_read, frame_index);
711 if(
IMG_TEST>2) fprintf(stdout,
"reading image data %s\n", datfile);
715 fdata=malloc(img->
dimx*img->
dimy*img->
dimz*
sizeof(
float));
728 for(pi=0; pi<img->
dimz; pi++)
729 for(yi=img->
dimy-1; yi>=0; yi--)
730 for(xi=img->
dimx-1; xi>=0; xi--)
731 img->
m[pi][yi][xi][frame_index]=*fptr++;
733 for(pi=img->
dimz-1; pi>=0; pi--)
734 for(yi=img->
dimy-1; yi>=0; yi--)
735 for(xi=img->
dimx-1; xi>=0; xi--)
736 img->
m[pi][yi][xi][frame_index]=*fptr++;
748 if(sif.
frameNr>=frame_to_read) {
749 img->
start[frame_index]=sif.
x1[frame_to_read-1];
750 img->
end[frame_index]=sif.
x2[frame_to_read-1];
751 img->
mid[frame_index]=0.5*(img->
start[frame_index]+img->
end[frame_index]);
786 int ret=0, pxlNr, zi, xi, yi, little;
788 short int *sdata=NULL, *sptr;
789 char datfile[FILENAME_MAX], hdrfile[FILENAME_MAX], siffile[FILENAME_MAX];
791 float scale_factor=1.0;
794 if(
IMG_TEST) printf(
"\nimgWriteAnalyzeFrame(%s, %d, *img, %d, %g, %g)\n",
795 dbname, frame_to_write, frame_index, fmin, fmax);
817 sprintf(hdrfile,
"%s.hdr", dbname);
818 sprintf(datfile,
"%s.img", dbname);
819 sprintf(siffile,
"%s.sif", dbname);
823 if(frame_to_write==0) frame_to_write=1;
824 dsr.
dime.
dim[4]=frame_to_write;
826 if(fabs(scale_factor)>1.0E-20) scale_factor=1.0/scale_factor;
833 if(access(datfile, 0) != -1)
remove(datfile);
852 if(frame_to_write==0) frame_to_write=dsr.
dime.
dim[4]+1;
853 if(dsr.
dime.
dim[4]<frame_to_write) {
855 dsr.
dime.
dim[4]=frame_to_write;
860 printf(
"frame_to_write := %d\n", frame_to_write);
861 printf(
"hdrfile := %s\n", hdrfile);
862 printf(
"datfile := %s\n", datfile);
863 printf(
"siffile := %s\n", siffile);
868 sdata=(
short int*)malloc(pxlNr*
sizeof(
short int));
872 if(frame_to_write==1) fp=fopen(datfile,
"wb");
else fp=fopen(datfile,
"r+b");
875 if(fseek(fp, (frame_to_write-1)*pxlNr*img->
dimz*
sizeof(
short int), SEEK_SET)!=0) {
877 little=little_endian();
880 for(zi=0; zi<img->
dimz; zi++) {
882 for(yi=img->
dimy-1; yi>=0; yi--)
for(xi=img->
dimx-1; xi>=0; xi--) {
883 *sptr=temp_roundf(scale_factor*img->
m[zi][yi][xi][frame_index]); sptr++;
886 sptr=sdata;
if(little!=dsr.
little) swabip(sptr, pxlNr*
sizeof(
short int));
889 if(fwrite(sptr,
sizeof(
short int), pxlNr, fp) != pxlNr) {
894 for(zi=img->
dimz-1; zi>=0; zi--) {
896 for(yi=img->
dimy-1; yi>=0; yi--)
for(xi=img->
dimx-1; xi>=0; xi--) {
897 *sptr=temp_roundf(scale_factor*img->
m[zi][yi][xi][frame_index]); sptr++;
900 sptr=sdata;
if(little!=dsr.
little) swabip(sptr, pxlNr*
sizeof(
short int));
903 if(fwrite(sptr,
sizeof(
short int), pxlNr, fp) != pxlNr) {
int anaExists(const char *dbname)
int imgAllocate(IMG *image, int planes, int rows, int columns, int frames)
int anaWriteHeader(char *filename, ANALYZE_DSR *h)
void imgEmpty(IMG *image)
ANALYZE_HEADER_HISTORY hist
int anaReadHeader(char *filename, ANALYZE_DSR *h)
int imgReadAnalyzeFrame(const char *fname, int frame_to_read, IMG *img, int frame_index)
int imgWriteAnalyze(const char *dbname, IMG *img)
#define IMG_STATUS_OCCUPIED
int imgSetAnalyzeHeader(IMG *img, const char *dbname, ANALYZE_DSR *dsr, float fmin, float fmax)
int anaPrintHeader(ANALYZE_DSR *h, FILE *fp)
int sifRead(char *filename, SIF *data)
int imgReadAnalyze(const char *dbname, IMG *img)
#define IMG_STATUS_INITIALIZED
int anaDatabaseExists(const char *dbname, char *hdrfile, char *imgfile, char *siffile)
int imgReadAnalyzeFirstFrame(const char *fname, IMG *img)
int anaReadImagedata(FILE *fp, ANALYZE_DSR *h, int frame, float *data)
#define ANALYZE_DT_SIGNED_SHORT
char studyNr[MAX_STUDYNR_LEN+1]
int imgReadAnalyzeHeader(const char *dbname, IMG *img)
int imgWriteAnalyzeFrame(const char *dbname, int frame_to_write, IMG *img, int frame_index, float fmin, float fmax)
ANALYZE_HEADER_IMGDIM dime
int imgGetAnalyzeHeader(IMG *img, ANALYZE_DSR *h)
void imgSetStatus(IMG *img, int status_index)
int imgMinMax(IMG *img, float *minvalue, float *maxvalue)