Exemple #1
0
int main(int argc, char *argv[]) {

  char ifname[FNAMELEN+1];
  int haveifname = 0;
  char ofname[FNAMELEN+1];
  int haveofname = 0;
  float wdelta[] = {1.,1.,1.};
  int stride[] = {1,1,1};
  
  if (argc < 5) {
    usage(argv[0]);
    return -1;
  }

  int ic = 1;
  while (ic < argc) {
    if (!strcmp(argv[ic], "-f")) {
      strncpy(ifname, argv[++ic], FNAMELEN);
      haveifname = 1;
    } else if (!strcmp(argv[ic], "-o")) {
      strncpy(ofname, argv[++ic], FNAMELEN);
      haveofname = 1;
    } else if (!strcmp(argv[ic], "-s")) {
      stride[0] = atoi(argv[++ic]);
      stride[1] = atoi(argv[++ic]);
      stride[2] = atoi(argv[++ic]);
      if (stride[0] < 1 || stride[1] < 1 || stride[2] < 1) {
	fprintf(stderr, "stride must be at least 1 in each direction!\n");
	exit(-1);
      }
    } else if (!strcmp(argv[ic], "-w")) {
      wdelta[0] = atof(argv[++ic]);
      wdelta[1] = atof(argv[++ic]);
      wdelta[2] = atof(argv[++ic]);
    }
    ic++;
  }
  
  if (!haveifname || !haveofname) {
    usage(argv[0]);
  }

  // find start/end of filename indices
  fprintf(stderr, "Finding start/end indices for stack: check inputs if this hangs!\n");
  int istart=0, iend;
  char tfname[FNAMELEN+1];
  sprintf(tfname, ifname, istart);
  FILE *tf = fopen(tfname, "r");
  while (!tf) {
    //fclose(tf);
    istart++;
    sprintf(tfname, ifname, istart);
    //fprintf(stderr, "istart = %d\n", istart);
    //fprintf(stderr, "tfname = %s\n", tfname);
    tf = fopen(tfname, "r");
  }
  fclose(tf);
  iend = istart + 1;
  sprintf(tfname, ifname, iend);
  tf = fopen(tfname, "r");
  while (tf) {
    fclose(tf);
    iend++;
    sprintf(tfname, ifname, iend);
    //fprintf(stderr, "iend = %d\n", iend);
    //fprintf(stderr, "tfname = %s\n", tfname);
    tf = fopen(tfname, "r");
  }
  iend--;
  
  fprintf(stderr, "File index appears to go from %d to %d\n", istart, iend);
  
  VOL_STRUCT *tgavol = loadTGAstack(ifname, istart, iend, 1);
  tgavol->wdx = wdelta[0];
  tgavol->wdy = wdelta[1];
  tgavol->wdz = wdelta[2];

  showXvol(tgavol);
  VOL_STRUCT *tgavol_sm = rebinXvol(tgavol, stride);
  normaliseXvol(tgavol_sm);
  showXvol(tgavol_sm);

  XRAW_STRUCT *xraw = Xvol2Xraw(tgavol_sm);
  sprintf(xraw->filename, ofname);
  showXraw(xraw);
  saveXraw(xraw);

  return 0;
}
Exemple #2
0
int main(int argc, char *argv[]) {

  #define FNAMELEN 400
  char ifname[FNAMELEN+1];
  int haveifname = 0;
  char ofname[FNAMELEN+1];
  int haveofname = 0;

  int trim[3] = {0,0,0};
  int stride[3] = {1,1,1}; //{3,3,1};
  int pow2 = 0;
  int max1g = 0;

  if (argc < 5) {
    usage(argv[0]);
    return -1;
  }

  int ic = 1;
  while (ic < argc) {
    if (!strcmp(argv[ic], "-f")) {
      strncpy(ifname, argv[++ic], FNAMELEN);
      haveifname = 1;
    } else if (!strcmp(argv[ic], "-o")) {
      strncpy(ofname, argv[++ic], FNAMELEN);
      haveofname = 1;
    } else if (!strcmp(argv[ic], "-t")) {
      trim[0] = atoi(argv[++ic]);
      trim[1] = atoi(argv[++ic]);
      trim[2] = atoi(argv[++ic]);
      if (trim[0] < 0 || trim[1] < 1 || trim[2] < 1) {
	fprintf(stderr, "trim must be at least 0 in each direction!\n");
	exit(-1);
      }
    } else if (!strcmp(argv[ic], "-s")) {
      stride[0] = atoi(argv[++ic]);
      stride[1] = atoi(argv[++ic]);
      stride[2] = atoi(argv[++ic]);
      if (stride[0] < 1 || stride[1] < 1 || stride[2] < 1) {
	fprintf(stderr, "stride must be at least 1 in each direction!\n");
	exit(-1);
      }
    } else if (!strcmp(argv[ic], "-2")) {
      pow2 = 1;
    } else if (!strcmp(argv[ic], "-1G")) {
      max1g = 1;
    }
    ic++;
  }

  if (!haveifname || !haveofname) {
    usage(argv[0]);
    return -1;
  }
    
  XRAW_STRUCT *xr = loadXraw(ifname);

  if (!xr) {
    fprintf(stderr, "Failed to open or read '%s'.\n", argv[1]);
    return -1;
  }

  showXraw(xr);
  fprintf(stdout, "- - - - - - - - - - - - - - - - - - - - - - - - -\n");

  if (trim[0] + trim[1] + trim[2] > 1) {
    XRAW_STRUCT *xrt = trimXraw(xr, trim);
    if (xrt) {
      deleteXraw(xr);
      xr = xrt;
    }
  }

  if (max1g) {
    while (((long)xr->nx / (long)stride[0] * 
	    (long)xr->ny / (long)stride[1] * 
	    (long)xr->nz / (long)stride[2]) >
	   (long)1024 * (long)1024 * (long)1024) {
      int maxidx = 0;
      int maxn = xr->nx;
      if (xr->ny/stride[1] > xr->nx/stride[0]) {
	maxidx = 1;
	maxn = xr->ny;
      }
      if (xr->nz/stride[2] > maxn/stride[maxidx]) {
	maxidx = 2;
      }
      stride[maxidx] += 1;
    }
  }
  

  fprintf(stderr, "converting...\n");
  VOL_STRUCT *vol = Xraw2Xvol(xr, stride);
  if (!vol) {
    fprintf(stderr, "Failed to parse data volume.\n");
    return -1;
  }

  showXvol(vol);

  if (pow2) {
    fprintf(stderr, "converting to pow2-format...\n");
    VOL_STRUCT *vol2 = makePow2Xvol(vol);
    vol = vol2;
  }


  fprintf(stderr, "converting...\n");
  XRAW_STRUCT *xro = Xvol2Xraw(vol);
  sprintf(xro->filename, ofname);
  showXraw(xro);
  fprintf(stderr, "writing...\n");
  saveXraw(xro);

  return 0;
}
int main(int argc, char *argv[]) {

  char ofname[FNAMELEN+1];
  int haveofname = 0;
  int dims[] = {0, 0, 0};
  int havedims = 0;
  float vals[] = {0., 1.};
  int width = 1;
  float wdelta[] = {1.,1.,1.};

  
  if (argc < 7) {
    usage(argv[0]);
    return -1;
  }

  int ic = 1;
  while (ic < argc) {
    if (!strcmp(argv[ic], "-o")) {
      strncpy(ofname, argv[++ic], FNAMELEN);
      haveofname = 1;
    } else if (!strcmp(argv[ic], "-d")) {
      dims[0] = atoi(argv[++ic]);
      dims[1] = atoi(argv[++ic]);
      dims[2] = atoi(argv[++ic]);
      if (dims[0] < 1 || dims[1] < 1 || dims[2] < 1) {
	fprintf(stderr, "dimensions too small, please >= 1 in every direction!\n");
	exit(-1);
      }
      havedims = 1;
    } else if (!strcmp(argv[ic], "-v")) {
      vals[0] = atoi(argv[++ic]);
      vals[1] = atoi(argv[++ic]);
    } else if (!strcmp(argv[ic], "-p")) {
      width = atoi(argv[++ic]);
    } else if (!strcmp(argv[ic], "-w")) {
      wdelta[0] = atof(argv[++ic]);
      wdelta[1] = atof(argv[++ic]);
      wdelta[2] = atof(argv[++ic]);
    }
    ic++;
  }
  
  if (!haveofname || !havedims) {
    usage(argv[0]);
  }

  VOL_STRUCT *vol = (VOL_STRUCT *)malloc(1 * sizeof(VOL_STRUCT));

  sprintf(vol->filename, "generated_3d_checkerboard");

  vol->nx = dims[0];
  vol->ny = dims[1];
  vol->nz = dims[2];
  
  vol->wdx = wdelta[0];
  vol->wdy = wdelta[1];
  vol->wdz = wdelta[2];
  
  vol->bzero = 0.0;
  vol->bscale = 1.0;

  int i, j, k;
  
  vol->data = (float ***)malloc(vol->nx * sizeof(float **));
  for (i = 0; i < vol->nx; i++) {
    vol->data[i] = (float **)malloc(vol->ny * sizeof(float *));
    for (j = 0; j < vol->ny; j++) {
      vol->data[i][j] = (float *)malloc(vol->nz * sizeof(float));
      for (k = 0; k < vol->nz; k++) {
	if (((i + j + k) / width) % 2) {
	  vol->data[i][j][k] = vals[0];
	} else {
	  vol->data[i][j][k] = vals[1];
	}
      }
    }
  }
  
  int npins = 8;
  float pinpoints[] = {0.0, 29.0, 32.0, 36.0, 127.0, 127.5, 191.25, 255.0};
  COLOUR table[] = {{0.69, 0.68, 0.67},
		    {0.09, 0.10, 0.23},
		    {0.03, 0.09, 0.18},
		    {0.03, 0.09, 0.12},
		    {0.00, 0.06, 0.01},
		    {0.00, 0.05, 0.00},
		    {1.00, 0.03, 0.00},
		    {1.00, 0.00, 0.00}};
  //float alphas[] = {0.5, 0.391, 0.380, 0.365, 0.024, 0.025, 0.263, 0.5};
  
  int pinidx = 0; // index of pin on right of i
  for (i = 0; i < 256; i++) {
    while ((float)i <= pinpoints[pinidx] && pinidx < npins-1) {
      pinidx++;
    }
    if ((pinidx > npins-1) || (pinidx < 1)) {
      fprintf(stderr, "Error finding pin for colortable!\n");
      exit(-1);
    }
    float frac = ((float)i - pinpoints[pinidx-1]) / (pinpoints[pinidx] - pinpoints[pinidx-1]);
    vol->red[i]   = table[pinidx-1].r * (1. - frac) + table[pinidx].r * frac;
    vol->green[i] = table[pinidx-1].g * (1. - frac) + table[pinidx].g * frac;
    vol->blue[i]  = table[pinidx-1].b * (1. - frac) + table[pinidx].b * frac;
  }
    
  showXvol(vol);
  VOL_STRUCT *vol_sm = vol; //rebinXvol(vol, stride);
  normaliseXvol(vol_sm);
  showXvol(vol_sm);

  XRAW_STRUCT *xraw = Xvol2Xraw(vol_sm);
  sprintf(xraw->filename, ofname);
  showXraw(xraw);
  saveXraw(xraw);

  return 0;
}