34 "fault in calling routine",
47 memset(vol, 0,
sizeof(
VOL));
53 vol->
v=(
float***)NULL;
54 vol->
voxel=(
float*)NULL;
56 vol->
row=(
float**)NULL;
57 vol->
plane=(
float***)NULL;
70 memset(svol, 0,
sizeof(
SVOL));
77 svol->
v=(
short int***)NULL;
78 svol->
voxel=(
short int*)NULL;
79 svol->
column=(
short int*)NULL;
80 svol->
row=(
short int**)NULL;
81 svol->
plane=(
short int***)NULL;
104 vol->
v=(
float***)NULL;
105 vol->
voxel=(
float*)NULL;
107 vol->
row=(
float**)NULL;
108 vol->
plane=(
float***)NULL;
121 if(
VOL_TEST) printf(
"svolEmpty()\n");
124 if(svol->
_vxl!=NULL) free(svol->
_vxl);
125 if(svol->
_col!=NULL) free(svol->
_col);
126 if(svol->
_row!=NULL) free(svol->
_row);
127 if(svol->
_pln!=NULL) free(svol->
_pln);
134 svol->
v=(
short int***)NULL;
135 svol->
voxel=(
short int*)NULL;
136 svol->
column=(
short int*)NULL;
137 svol->
row=(
short int**)NULL;
138 svol->
plane=(
short int***)NULL;
157 unsigned short int zi, ri;
161 if(
VOL_TEST) printf(
"voiAllocate(*vol, %d, %d, %d)\n", planes, rows, columns);
165 if(planes<1 || rows<1 || columns<1)
return(2);
166 vxlNr=planes*rows*columns;
170 if(planes==vol->
dimz && rows==vol->
dimy && columns==vol->
dimx) {
171 for(vi=0; vi<vxlNr; vi++) vol->
_vxl[vi]=0;
178 vol->
_pln=(
float***)malloc(planes*
sizeof(
float**));
179 if(vol->
_pln==NULL) {
181 vol->
_row=(
float**)malloc(planes*rows*
sizeof(
float*));
182 if(vol->
_row==NULL) {
183 free(vol->
_pln);
return(6);}
184 vol->
_col=vol->
_vxl=(
float*)calloc(planes*rows*columns,
sizeof(
float));
185 if(vol->
_vxl==NULL) {
186 free(vol->
_pln); free(vol->
_row);
return(8);
190 for(zi=0; zi<planes; zi++) {
192 for(ri=0; ri<rows; ri++) {
193 *rptr++=cptr; cptr+=columns;
222 unsigned short int zi, ri;
224 short int **rptr, *cptr;
226 if(
VOL_TEST) printf(
"svoiAllocate(*svol, %d, %d, %d)\n", planes, rows, columns);
230 if(planes<1 || rows<1 || columns<1)
return(2);
231 vxlNr=planes*rows*columns;
235 if(planes==svol->
dimz && rows==svol->
dimy && columns==svol->
dimx) {
236 for(vi=0; vi<vxlNr; vi++) svol->
_vxl[vi]=0;
243 svol->
_pln=(
short int***)malloc(planes*
sizeof(
short int**));
244 if(svol->
_pln==NULL) {
246 svol->
_row=(
short int**)malloc(planes*rows*
sizeof(
short int*));
247 if(svol->
_row==NULL) {
248 free(svol->
_pln);
return(6);}
249 svol->
_col=svol->
_vxl=(
short int*)calloc(planes*rows*columns,
sizeof(
short int));
250 if(svol->
_vxl==NULL) {
251 free(svol->
_pln); free(svol->
_row);
return(8);
255 for(zi=0; zi<planes; zi++) {
257 for(ri=0; ri<rows; ri++) {
258 *rptr++=cptr; cptr+=columns;
286 unsigned short int zi, yi, xi, fi;
288 if(
VOL_TEST) printf(
"img2vol(img, %d, vol)\n", frame);
290 if(vol==NULL)
return(1);
293 if(frame<1 || img->dimt<frame)
return(2);
304 for(zi=0; zi<vol->
dimz; zi++)
305 for(yi=0; yi<vol->
dimy; yi++)
306 for(xi=0; xi<vol->
dimx; xi++)
307 vol->
v[zi][yi][xi]=img->
m[zi][yi][xi][fi];
324 unsigned short int zi, yi, xi, fi;
327 if(
VOL_TEST) printf(
"img2svol(img, %d, svol)\n", frame);
329 if(svol==NULL)
return(1);
332 if(frame<1 || img->dimt<frame)
return(2);
343 ret=
imgFrameMinMax(img, frame, &fmin, &fmax);
if(ret)
return(10+ret);
344 if(fabs(fmin)>fabs(fmax)) g=fabs(fmin);
else g=fabs(fmax);
345 if(g!=0) g=32766./g;
else g=1.0;
346 for(zi=0; zi<svol->
dimz; zi++)
347 for(yi=0; yi<svol->
dimy; yi++)
348 for(xi=0; xi<svol->
dimx; xi++)
349 svol->
v[zi][yi][xi]=(
short int)temp_roundf(g*img->
m[zi][yi][xi][fi]);
368 unsigned short int zi, yi, xi, fi;
370 if(
VOL_TEST) printf(
"vol2img(vol, img, %d)\n", frame);
375 if(frame<1 || img->dimt<frame)
return(2);
381 for(zi=0; zi<vol->
dimz; zi++)
382 for(yi=0; yi<vol->
dimy; yi++)
383 for(xi=0; xi<vol->
dimx; xi++)
384 img->
m[zi][yi][xi][fi]=vol->
v[zi][yi][xi];
402 unsigned short int zi, yi, xi, fi;
404 if(
VOL_TEST) printf(
"svol2img(svol, img, %d)\n", frame);
409 if(frame<1 || img->dimt<frame)
return(2);
411 if(img->
dimz!=svol->
dimz)
return(4);
415 for(zi=0; zi<svol->
dimz; zi++)
416 for(yi=0; yi<svol->
dimy; yi++)
417 for(xi=0; xi<svol->
dimx; xi++)
418 img->
m[zi][yi][xi][fi]=(svol->
scale_factor)*(float)svol->
v[zi][yi][xi];
434 fprintf(fp,
"Volume data is not initialized.\n");
return;}
436 fprintf(fp,
"Volume data is initialized but empty.\n");
return;}
438 fprintf(fp,
"Volume status: %s\n", vol->
statmsg);
439 fprintf(fp,
"Patient orientation: %d\n", vol->
orientation);
440 fprintf(fp,
"Voxel sizes (x, y, z): %g %g %g mm\n",
442 fprintf(fp,
"Dimensions (x, y, z): %d %d %d\n",
456 if(
VOL_TEST) printf(
"svolInfo()\n");
458 fprintf(fp,
"Volume data is not initialized.\n");
return;}
460 fprintf(fp,
"Volume data is initialized but empty.\n");
return;}
462 fprintf(fp,
"Volume status: %s\n", svol->
statmsg);
463 fprintf(fp,
"Patient orientation: %d\n", svol->
orientation);
464 fprintf(fp,
"Voxel sizes (x, y, z): %g %g %g mm\n",
466 fprintf(fp,
"Dimensions (x, y, z): %d %d %d\n",
484 if(r.
z1<1 || r.
y1<1 || r.
x1<1)
return;
488 for(zi=r.
z1-1; zi<r.
z2; zi++) {
489 fprintf(fp,
"pl=%03d ", zi+1);
490 for(xi=r.
x1-1; xi<r.
x2; xi++) fprintf(fp,
" x=%05d", xi+1);
492 for(yi=r.
y1-1; yi<r.
y2; yi++) {
493 fprintf(fp,
"y=%05d", yi+1);
494 for(xi=r.
x1-1; xi<r.
x2; xi++)
495 fprintf(fp,
" %7.3f", vol->
v[zi][yi][xi]);
517 if(r.
z1<1 || r.
y1<1 || r.
x1<1)
return(2);
521 zi=r.
z1-1; yi=r.
y1-1; xi=r.
x1-1; *maxv=vol->
v[zi][yi][xi];
522 if(p!=NULL) {p->
z=zi+1; p->
y=yi+1; p->
x=xi+1;}
523 for(zi=r.
z1-1; zi<r.
z2; zi++) {
524 for(yi=r.
y1-1; yi<r.
y2; yi++) {
525 for(xi=r.
x1-1; xi<r.
x2; xi++)
if(*maxv<vol->v[zi][yi][xi]) {
526 *maxv=vol->
v[zi][yi][xi];
527 if(p!=NULL) {p->
z=zi+1; p->
y=yi+1; p->
x=xi+1;}
549 if(r.
z1<1 || r.
y1<1 || r.
x1<1)
return(2);
554 for(zi=r.
z1-1; zi<r.
z2; zi++) {
555 for(yi=r.
y1-1; yi<r.
y2; yi++) {
556 for(xi=r.
x1-1; xi<r.
x2; xi++) {
557 *avg+=vol->
v[zi][yi][xi]; n++;
561 if(n>0) *avg/=(float)n;
#define IMG_STATUS_OCCUPIED
#define IMG_STATUS_INITIALIZED
#define IMG_STATUS_UNINITIALIZED
int imgFrameMinMax(IMG *img, int frame, float *minvalue, float *maxvalue)
char * _volStatusMessage[]
int volMax(VOL *vol, VOL_RANGE r, VOL_PIXEL *p, float *maxv)
void svolInit(SVOL *svol)
void volContents(VOL *vol, VOL_RANGE r, FILE *fp)
int svolAllocate(SVOL *svol, int planes, int rows, int columns)
void svolEmpty(SVOL *svol)
int svol2img(SVOL *svol, IMG *img, int frame)
int volAllocate(VOL *vol, int planes, int rows, int columns)
void volInfo(VOL *vol, FILE *fp)
void svolInfo(SVOL *svol, FILE *fp)
int img2vol(IMG *img, VOL *vol, int frame)
int img2svol(IMG *img, SVOL *svol, int frame)
int volAvg(VOL *vol, VOL_RANGE r, float *avg)
int vol2img(VOL *vol, IMG *img, int frame)