dimensionedTensor hinv(const dimensionedTensor& dt)
{
    return dimensionedTensor
    (
        "hinv("+dt.name()+')',
        dimless/dt.dimensions(),
        hinv(dt.value())
    );
}
Esempio n. 2
0
Img*
dssread(char *file)
{
	int nx, ny, scale, sumall;
	Pix  *p, *pend;
	uint8_t buf[21];
	Biobuf *bp;
	Img *ip;

	if(debug)
		Bprint(&bout, "reading %s\n", file);
	bp = Bopen(file, OREAD);
	if(bp == 0)
		return 0;
	if(Bread(bp, buf, sizeof(buf)) != sizeof(buf) ||
	   buf[0] != 0xdd || buf[1] != 0x99){
		werrstr("bad format");
		return 0;
	}
	nx = getlong(buf+2);
	ny = getlong(buf+6);
	scale = getlong(buf+10);
	sumall = getlong(buf+14);
	if(debug)
		fprint(2, "%s: nx=%d, ny=%d, scale=%d, sumall=%d, nbitplanes=%d,%d,%d\n",
			file, nx, ny, scale, sumall, buf[18], buf[19], buf[20]);
	ip = malloc(sizeof(Img) + (nx*ny-1)*sizeof(int));
	if(ip == 0){
		Bterm(bp);
		werrstr("no memory");
		return 0;
	}
	ip->nx = nx;
	ip->ny = ny;
	dodecode(bp, ip->a, nx, ny, buf+18);
	ip->a[0] = sumall;	/* sum of all pixels */
	Bterm(bp);
	if(scale > 1){
		p = ip->a;
		pend = &ip->a[nx*ny];
		while(p < pend)
			*p++ *= scale;
	}
	hinv(ip->a, nx, ny);
	return ip;
}
Esempio n. 3
0
void Generic_ordinal::invert()
{
  std::vector<ftype> hinv( hist.size() );
  hinv[0]             = range_.min();
  hinv[hist.size()-1] = range_.max();
  for ( int i = 1; i < hist.size()-1; i++ ) {
    ftype target = ftype(i)/nranges;
    ftype guess = 0.5 * ( range_.max() + range_.min() );
    ftype step  = 0.5 * ( range_.max() - range_.min() );
    for ( int j = 0; j < 10; j++ ) {
      if ( ordinal( guess ) > target ) guess -= step;
      else                             guess += step;
      step *= 0.5;
    }
    hinv[i] = Util::bound( range_.min(), guess, range_.max() );
  }
  range_ = Range<ftype>( 0.0, 1.0 );
  hist = hinv;
}