www.pudn.com > 医学算法.rar > radon.c
# /* radon - plot radon space carl crawford purdue university w. lafayette, in 47907 july 1980 */ #includeint nfl = 100; /* number of flashes */ int n = 20; /* number of detectors */ int k = 11; /* number of transverses */ int sd; /* 1 = specific detector mode */ int n1 = 0; /* range for specific detector mode */ int n2 = 0; /* range for specific detector mode */ int print = 1; /* 1=print program info */ char *ifn = "radon";/* input file */ char *ofn = "pic";/* output file */ int min,max; /* min and max of pic */ int pic[16384]; /* quantized radon space */ int *p; /* pointer to pic */ float sca,sct,scp; /* scale factors */ float pi = 3.141592654; int quad; /* 1 = quadrant only */ int pos; /* 1 = positive l only */ float pi2; /* related to pi */ int m = 128; /* size of pic */ int m2 = 16384; /* size of pic */ int m5 = 64; char buf[128]; /* line of mapped pic */ float sin(),cos(),atof(),fabs(); float rdt[100]; /* flash radon coordinate */ float rda[100]; /* flash radon coordinate */ FILE *ifd; /* input file descriptor */ FILE *ofd; /* output file descriptor */ float r = 1.0; /* radius of scan circle */ int zero; /* 1 = zero outside of radius */ char *table[] = { "nfl", "n", "k", "if", "of", "r", "sd", 0 }; main(argc,argv) int argc; char **argv; { char cc; register i,j; int la,lt; while(++argv,--argc){ if(**argv == '-')while(cc = *++*argv)switch(cc){ case 'p': /* don't print program info */ print = 0; break; case 'q': /* quadrant only */ quad = 1; break; case 'n': /* negative only */ pos = 1; break; case 'z': /* zero outside of radius */ zero = 1; break; case 's': /* specific detector mode */ sd = 1; break; default: fprintf(stderr,"bad flag: -%c\n",cc); exit(1); }else switch(comm(*argv)){ case 1: /* nfl */ nfl = atoi(*argv + 4); break; case 2: /* n */ n = atoi(*argv + 2); break; case 3: /* k */ k = atoi(*argv + 2); break; case 4: /* ifn */ ifn = *argv + 3; break; case 5: /* ofn */ ofn = *argv + 3; break; case 6: /* radius */ r = atof(*argv + 2); zero = 1; break; case 7: /* specific detector */ n1 = atoi(*argv + 3); n2 = n1 + 1; sd = 1; break; } } if((ifd = fopen(ifn,"r")) == NULL){ fprintf(stderr,"can't open: %s\n",ifn); exit(1); } if((ofd = fopen(ofn,"w")) == NULL){ fprintf(stderr,"can't create: %s\n",ofn); exit(1); } if(print){ printf("RADON DATA\n\n"); printf("nfl = %d\n",nfl); printf("n = %d\n",n); printf("k = %d\n",k); printf("r = %f\n",r); printf("input file: %s\n",ifn); printf("output file: %s\n",ofn); if(quad)printf("quadrant display\n"); if(zero)printf("zero outside radius\n"); if(pos)printf("half data only\n"); if(sd)printf("specific detector: %d\n",n1); } if(!sd){ n1 = 0; n2 = n; } k *= nfl; pi2 = pi + pi; sct = m / (r + r); if(quad){ sct *= 2.0; m5 = m; } for(i=0;i = 0 && la >= 0) pic[(la<<7) + lt]++; } } } min = 10000000.; max = -min; for(i=0;i max)max = pic[i]; } scp = 255. / (max - min); for(p=pic,i=0;i