8#include "tpcclibConfig.h"
23static char *info[] = {
24 "Conjunction (AND) of two mask images in ECAT 6.3 or 7.x, NIfTI-1, or",
25 "Analyze 7.5 format.",
26 "Pixels with non-zero in both masks is set to 1, otherwise to 0.",
28 "Usage: @P [Options] mask1 mask2 andmask",
33 "See also: maskinv, maskdila, maskeros, imgmask, imgthrs, img2dft",
35 "Keywords: image, mask, conjunction",
54int main(
int argc,
char **argv)
56 int ai, help=0, version=0, verbose=1;
58 char maskfile1[FILENAME_MAX], maskfile2[FILENAME_MAX], outfile[FILENAME_MAX];
65 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
66 maskfile1[0]=maskfile2[0]=outfile[0]=(char)0;
68 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
69 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
71 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
76 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
81 if(ai<argc) {
strlcpy(maskfile1, argv[ai], FILENAME_MAX); ai++;}
82 if(ai<argc) {
strlcpy(maskfile2, argv[ai], FILENAME_MAX); ai++;}
83 if(ai<argc) {
strlcpy(outfile, argv[ai], FILENAME_MAX); ai++;}
84 if(ai<argc) {fprintf(stderr,
"Error: too many arguments.\n");
return(1);}
88 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
95 printf(
"maskfile1 := %s\n", maskfile1);
96 printf(
"maskfile2 := %s\n", maskfile2);
97 printf(
"outfile := %s\n", outfile);
108 if(verbose>0) {printf(
"reading %s\n", maskfile1); fflush(stdout);}
109 ret=
imgRead(maskfile1, &mask1);
111 fprintf(stderr,
"Error: %s\n", mask1.
statmsg);
112 if(verbose>1) printf(
"ret := %d\n", ret);
115 if(verbose>0) {printf(
"reading %s\n", maskfile2); fflush(stdout);}
116 ret=
imgRead(maskfile2, &mask2);
118 fprintf(stderr,
"Error: %s\n", mask2.
statmsg);
119 if(verbose>1) printf(
"ret := %d\n", ret);
123 fprintf(stderr,
"Error: mask cannot be dynamic image.\n");
130 fprintf(stderr,
"Error: different mask image dimensions.\n");
138 if(verbose>0) {printf(
"mask conjunction\n"); fflush(stdout);}
142 fprintf(stderr,
"Error: cannot make conjunction of mask images\n");
143 if(verbose>1) printf(
"ret := %d\n", ret);
150 fprintf(stderr,
"Warning: all voxels are zeroes; empty mask not saved.\n");
155 printf(
"nr_of_positive_voxels := %u\n", mn);
162 if(verbose>2) printf(
"writing mask\n");
165 fprintf(stderr,
"Error: %s\n", mask1.
statmsg);
169 if(verbose>0) printf(
"mask written.\n\n");
void imgEmpty(IMG *image)
int imgRead(const char *fname, IMG *img)
int imgWrite(const char *fname, IMG *img)
Header file for libtpcimgio.
Header file for libtpcimgp.
long long imgMaskCount(IMG *img)
int imgMaskConjunction(IMG *mask1, IMG *mask2)
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)