8#include "tpcclibConfig.h"
22static char *info[] = {
23 "List image matrices with their min, max, and mean pixel values.",
24 "Image file in ECAT 6.3 or 7.x, NIfTI-1, and Analyze 7.5 format is accepted.",
26 "Usage: @P [Options] imgfile",
30 " List x,y,z image volumes (default), or x,y image planes.",
33 "See also: imgmax, imgmaxp, imghead, lmlist, img2flat",
35 "Keywords: image, max, min, matrixlist",
54int main(
int argc,
char **argv)
56 int ai, help=0, version=0, verbose=1;
58 char imgfile[FILENAME_MAX], *cptr=NULL;
65 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
68 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
69 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
71 if(strcasecmp(cptr,
"XYZ")==0) {
73 }
else if(strcasecmp(cptr,
"XY")==0) {
76 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
81 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
87 if(ai<argc) {
strlcpy(imgfile, argv[ai], FILENAME_MAX); ai++;}
88 if(ai<argc) {fprintf(stderr,
"Error: too many arguments.\n");
return(1);}
92 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
98 printf(
"imgfile := %s\n", imgfile);
99 printf(
"listVol := %d\n", listVol);
109 if(verbose>1) fprintf(stdout,
"reading %s\n", imgfile);
113 fprintf(stderr,
"Error: %s\n", img.
statmsg);
114 if(verbose>1) printf(
"ret := %d\n", ret);
119 fprintf(stderr,
"Error: %s is not an image.\n", imgfile);
122 int dimt, dimz, dimy, dimx;
124 if(verbose>1) fprintf(stdout,
" dim[x,y,z,t] := %d, %d, %d, %d\n", dimx, dimy, dimz, dimt);
131 fprintf(stdout,
"Frame\tMinValue\tMaxValue\tMeanValue\tValidN\tInvalidN\n"); fflush(stdout);
132 for(
int t=0; t<dimt; t++) {
133 float mmax=nan(
""), mmin=nan(
""), msum=0.0;
135 for(
int z=0; z<dimz; z++)
136 for(
int y=0; y<dimy; y++)
137 for(
int x=0; x<dimx; x++) {
138 if(!isfinite(img.
m[z][y][x][t])) {in++;
continue;}
139 if(!isfinite(mmax)) mmax=img.
m[z][y][x][t];
140 if(!isfinite(mmin)) mmin=img.
m[z][y][x][t];
141 if(img.
m[z][y][x][t]>mmax) mmax=img.
m[z][y][x][t];
142 if(img.
m[z][y][x][t]<mmin) mmin=img.
m[z][y][x][t];
143 msum+=img.
m[z][y][x][t];
146 fprintf(stdout,
"%d\t%.3e\t%.3e\t%.3e\t%d\t%d\n", 1+t, mmin, mmax, msum/(
float)n, n, in);
150 fprintf(stdout,
"Frame\tPlane\tMinValue\tMaxValue\tMeanValue\tValidN\nInvalidN\n"); fflush(stdout);
151 for(
int t=0; t<dimt; t++)
152 for(
int z=0; z<dimz; z++) {
153 float mmax=nan(
""), mmin=nan(
""), msum=0.0;
155 for(
int y=0; y<dimy; y++)
156 for(
int x=0; x<dimx; x++) {
157 if(!isfinite(img.
m[z][y][x][t])) {
158 if(verbose>1) printf(
"pixel[%d][%d][%d][%d] := %g\n", z, y, x, t, img.
m[z][y][x][t]);
161 if(!isfinite(mmax)) mmax=img.
m[z][y][x][t];
162 if(!isfinite(mmin)) mmin=img.
m[z][y][x][t];
163 if(img.
m[z][y][x][t]>mmax) mmax=img.
m[z][y][x][t];
164 if(img.
m[z][y][x][t]<mmin) mmin=img.
m[z][y][x][t];
165 msum+=img.
m[z][y][x][t];
168 fprintf(stdout,
"%d\t%d\t%.3e\t%.3e\t%.3e\t%d\t%d\n", 1+t, 1+z, mmin, mmax, msum/(
float)n, n, in);
void imgEmpty(IMG *image)
int imgRead(const char *fname, IMG *img)
Header file for libtpcimgio.
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
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)