9#include "tpcclibConfig.h"
23static char *info[] = {
24 "List the XFORM matrix from DICOM.",
26 "NOT for production use!",
28 "Usage: @P [-Options] dicomfile",
32 " List (y, default) or do not list (n) the xform matrix.",
34 " List (y) or do not list (n, default) the NIfTI quatern parameters.",
37 "See also: dcmlhdr, dcmframe, dcmmlist",
39 "Keywords: image, DICOM",
58int main(
int argc,
char **argv)
60 int ai, help=0, version=0, verbose=1;
61 char dcmfile[FILENAME_MAX];
70 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
73 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
75 char *cptr; cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(!*cptr)
continue;
76 if(strncasecmp(cptr,
"XFORM=", 6)==0) {
77 if((listXform=
tpcYesNo(cptr+6))>=0)
continue;
78 }
else if(strncasecmp(cptr,
"QUATERN=", 8)==0) {
79 if((listQuatern=
tpcYesNo(cptr+8))>=0)
continue;
81 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
90 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
95 if(ai<argc)
strlcpy(dcmfile, argv[ai++], FILENAME_MAX);
97 fprintf(stderr,
"Error: invalid argument '%s'.\n", argv[ai]);
102 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
108 printf(
"dcmfile := %s\n", dcmfile);
109 printf(
"listXform := %d\n", listXform);
110 printf(
"listQuatern := %d\n", listQuatern);
122 if(verbose>3) {printf(
"max_tree_depth := %u\n",
dcmfileMaxDepth(&dcm)); fflush(stdout);}
125 if(verbose>1) {printf(
"reading Image Orientation (Patient)\n"); fflush(stdout);}
129 fprintf(stderr,
"Error: cannot read Image Orientation (Patient).\n");
132 if(verbose>1) {printf(
"reading Image Position (Patient)\n"); fflush(stdout);}
136 fprintf(stderr,
"Error: cannot read Image Position (Patient).\n");
139 if(verbose>1) {printf(
"reading Voxel sizes\n"); fflush(stdout);}
143 fprintf(stderr,
"Error: cannot find voxel size.\n");
148 printf(
"imgorient := %g", iop[0]);
for(
int i=1; i<6; i++) printf(
", %g", iop[i]);
150 printf(
"imgpos := %g", ipp[0]);
for(
int i=1; i<3; i++) printf(
", %g", ipp[i]);
152 printf(
"pxlsize := %g", pxlsize[0]);
for(
int i=1; i<3; i++) printf(
", %g", pxlsize[i]);
160 ret=
dcmImgXform(iop, pxlsize, ipp, xform, verbose-1);
162 fprintf(stderr,
"Error: cannot calculate XFORM.\n");
163 if(verbose>1) printf(
"dcmXform() := %d\n", ret);
168 for(
int i=0; i<4; i++) {
169 printf(
"%g", xform[4*i]);
170 for(
int j=1; j<4; j++) printf(
"\t%g", xform[j+4*i]);
182 fprintf(stderr,
"Error: cannot calculate quatern parameters.\n");
183 if(verbose>1) printf(
"dcmXformToQuatern() := %d\n", ret);
187 printf(
"quatern_b := %g\n", quatern[0]);
188 printf(
"quatern_c := %g\n", quatern[1]);
189 printf(
"quatern_d := %g\n", quatern[2]);
190 printf(
"qoffset_x := %g\n", quatern[3]);
191 printf(
"qoffset_y := %g\n", quatern[4]);
192 printf(
"qoffset_z := %g\n", quatern[5]);
void dcmfileInit(DCMFILE *d)
void dcmfileFree(DCMFILE *d)
unsigned short int dcmfileMaxDepth(DCMFILE *df)
int dcmImgPxlsize(DCMFILE *d, double *pxlsize, const int verbose)
int dcmImgOrient(DCMFILE *d, double *iop, const int verbose)
int dcmImgPos(DCMFILE *d, double *imgpos, const int verbose)
int dcmXformToQuatern(double *xform, double *quatern, double *qoffset, const int verbose)
int dcmImgXform(double *iop, double *xyzMM, double *imgPos, double *xform, const int verbose)
int dcmFileRead(const char *filename, DCMFILE *dcm, const short int headerOnly, TPCSTATUS *status)
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int tpcYesNo(const char *s)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
void statusInit(TPCSTATUS *s)
char * errorMsg(tpcerror e)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
Header file for libtpcdcm.
Header file for library libtpcextensions.
Header file for library libtpctac.