Esempio n. 1
0
int main(int argc, char **argv) {
  
  if (argc != 2) {
    fprintf(stderr, "Usage: %s xrwfilename\n", argv[0]);
    return -1;
  }

  XRAW_STRUCT *xr = loadXraw(argv[1]);
  if (!xr) {
    fprintf(stderr, "Failed to open or read '%s'.\n", argv[1]);
    return -1;
  }
  
  int nbin = 256;
  float x[256];
  float data[256];
  int centre = 1;
  
  int i;
  for (i = 0; i < 256; i++) {
    x[i] = ((float)i + 0.5) / 256.0;
    data[i] = 0.;
  }
  
  for (i = 0; i < xr->nx * xr->ny * xr->nz; i++) {
    data[xr->data[i]] += 1.0;
  }

  for (i = 0; i < 256; i++) {
    data[i] = log10f(data[i]+1);
  }

  fprintf(stdout,"Normalised data value\tLog(count)\t%s\n", argv[1]);
  for (i = 0; i < 256; i++) {
    fprintf(stdout,"%4.8f\t%4.8f\n", x[i],data[i]);
  }

  return 0;
}
Esempio n. 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;
}
Esempio n. 3
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 use_rows = 0;

  int stride[3] = {1,1,1}; //{3,3,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], "-R")) {
      use_rows = atoi(argv[++ic]);
    }
    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");
  
  VOL_STRUCT *vol = Xraw2Xvol(xr, stride);
  if (!vol) {
    fprintf(stderr, "Failed to parse data volume.\n");
    return -1;
  }

  showXvol(vol);

  int nx, ny, nz;
  nx = vol->nx;
  ny = vol->ny;
  nz = vol->nz;

  bitmap_t bits;

  if (use_rows == 1) {
    bits.w = nx * nz;
    bits.h = ny;
    bits.pix = (pixel_t *)malloc(nx*ny*nz*sizeof(pixel_t));
    
    int i, j, k;
    float val;
    uint8_t grey;
    for (i = 0; i < nx; i++) {
      for (j = 0; j < ny; j++) {
	for (k = 0; k < nz; k++) {
	  val = vol->data[i][j][k];
	  grey = val * 255.0;
	  bits.pix[(nx*nz)*j + (k*nx+i)].r = grey;
	  bits.pix[(nx*nz)*j + (k*nx+i)].g = grey;
	  bits.pix[(nx*nz)*j + (k*nx+i)].b = grey;
	}
      }
    }

  } else {
   
    int Nzx, Nzy;
    if (use_rows > 1) {
      Nzy = use_rows;
      Nzx = nz/Nzy;
      if (nz % Nzy) {
	Nzx++;
      }
    } else {
      Nzx = (int)(floorf(sqrtf((float)nz)));
      if (Nzx * Nzx == nz) {
	Nzy = Nzx;
      } else {
	Nzx++;
	Nzy = (nz / Nzx) + 1;
      }
    }

    fprintf(stderr, "mosaic dimensions are: %d %d\n", Nzx, Nzy);

    bits.w = nx * Nzx;
    bits.h = ny * Nzy;
    bits.pix = (pixel_t *)malloc(nx * ny * Nzx * Nzy * sizeof(pixel_t));

    int i, j, k;
    int izx, izy;
    float val;
    uint8_t grey;
    for (i = 0; i < nx; i++) {
      for (j = 0; j < ny; j++) {
	for (k = 0; k < nz; k++) {
	  val = vol->data[i][j][k];
	  grey = val * 255.0;
	  izy = k / Nzx;
	  izx = k % Nzx;
	  bits.pix[(nx*Nzx)*(izy*ny+j) + (izx*nx+i)].r = grey;
	  bits.pix[(nx*Nzx)*(izy*ny+j) + (izx*nx+i)].g = grey;
	  bits.pix[(nx*Nzx)*(izy*ny+j) + (izx*nx+i)].b = grey;
	}
      }
    }
  }

  FILE *fout = fopen(ofname, "w");
  if (fout) {
    savePNG(fout, &bits);
    fclose(fout);
  } else {
    fprintf(stderr, "Failed to open '%s' for writing.\n", ofname);
    return -1;
  }

  return 0;
}