8#include "tpcclibConfig.h"
23static char *info[] = {
24 "Compute the pixel value difference between consecutive frames to get a rough",
25 "estimate on variance on each pixel.",
26 "Program writes an image containing sum of |frame[i+1]-frame[i]|.",
28 "Usage: @P [Options] imgfile difimgfile",
32 " Differences are divided by the average of frames,",
33 " |frame[i+1]+frame[i]|/2.",
36 "See also: imgpeak, imgmask, imgthrs, imgfrsmo, imgdelfr, imgledif, img2tif",
38 "Keywords: image, dynamics, noise, time, mask",
57int main(
int argc,
char **argv)
59 int ai, help=0, version=0, verbose=1;
60 char imgfile[FILENAME_MAX], outfile[FILENAME_MAX];
69 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
70 imgfile[0]=outfile[0]=(char)0;
72 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
73 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
75 if(strncasecmp(cptr,
"NORMALIZED", 4)==0) {
76 dif_normalized=1;
continue;
78 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
83 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
88 if(ai<argc) {
strlcpy(imgfile, argv[ai], FILENAME_MAX); ai++;}
89 if(ai<argc) {
strlcpy(outfile, argv[ai], FILENAME_MAX); ai++;}
90 if(ai<argc) {fprintf(stderr,
"Error: too many arguments.\n");
return(1);}
94 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
100 printf(
"imgfile := %s\n", imgfile);
101 printf(
"outfile := %s\n", outfile);
102 printf(
"dif_normalized := %d\n", dif_normalized);
110 if(verbose>0) {printf(
"reading dynamic image %s\n", imgfile); fflush(stdout);}
114 fprintf(stderr,
"Error: %s\n", img.
statmsg);
115 if(verbose>1) printf(
"ret := %d\n", ret);
119 fprintf(stderr,
"Error: %s contains only 1 time frame.\n", imgfile);
123 fprintf(stdout,
" image contains %d frames and %d planes.\n", img.
dimt, img.
dimz);
127 if(verbose>0) fprintf(stderr,
"Warning: missing pixel values.\n");
133 if(verbose>0) {printf(
"computing frame differences\n"); fflush(stdout);}
136 if(dif_normalized==0) ret=
imgGetFrameDiff(&img, &dimg, NULL, verbose-1);
140 fprintf(stderr,
"Error: cannot compute frame differences.\n");
146 if(verbose>1) {printf(
"normalizing difference image\n"); fflush(stdout);}
148 for(zi=0; zi<dimg.
dimz; zi++)
149 for(yi=0; yi<dimg.
dimy; yi++)
150 for(xi=0; xi<dimg.
dimx; xi++) {
151 if(mimg.
m[zi][yi][xi][0]>1.0E-10)
152 dimg.
m[zi][yi][xi][0]/=mimg.
m[zi][yi][xi][0];
154 dimg.
m[zi][yi][xi][0]=0.0;
161 if(verbose>1) {printf(
"writing result image\n"); fflush(stdout);}
164 fprintf(stderr,
"Error: %s\n", mimg.
statmsg);
168 if(verbose>0) fprintf(stdout,
"Image %s saved.\n", outfile);
unsigned long long imgNaNs(IMG *img, int fix)
void imgEmpty(IMG *image)
int imgRead(const char *fname, IMG *img)
int imgWrite(const char *fname, IMG *img)
int imgGetFrameDiff(IMG *img, IMG *dimg, IMG *mimg, int verbose)
Header file for libtpcimgio.
Header file for libtpcimgp.
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)