Exemplo n.º 1
0
  def xySlice ( self, fileobj ):

    zdim,ydim,xdim = self.data.shape
    imagemap = np.zeros ( [ ydim, xdim ], dtype=np.uint32 )

    # false color redrawing of the region
    recolor_cy ( self.data.reshape((imagemap.shape[0],imagemap.shape[1])), imagemap )

    outimage = Image.frombuffer ( 'RGBA', (xdim,ydim), imagemap, 'raw', 'RGBA', 0, 1 )
    outimage.save ( fileobj, "PNG" )
Exemplo n.º 2
0
  def yzSlice ( self, scale, fileobj ):

    zdim,ydim,xdim = self.data.shape
    imagemap = np.zeros ( [ zdim, ydim ], dtype=np.uint32 )

    # false color redrawing of the region
    recolor_cy ( self.data.reshape((imagemap.shape[0],imagemap.shape[1])), imagemap )

    outimage = Image.frombuffer ( 'RGBA', (ydim,zdim), imagemap, 'raw', 'RGBA', 0, 1 )
    newimage = outimage.resize ( [ydim, int(zdim*scale)] )
    newimage.save ( fileobj, "PNG" )
Exemplo n.º 3
0
  def tile2WebPNG ( self, xdim, ydim, tile ):
    """Create PNG Images and write to cache for the specified tile"""

    # write it as a png file
    if self.dbtype == dbtype.IMAGES_8bit :
      return Image.frombuffer ( 'L', [xdim,ydim], tile.flatten(), 'raw', 'L', 0, 1 )
    elif self.dbtype == dbtype.ANNOTATIONS :
      recolor_cy (tile, tile)
      return Image.frombuffer ( 'RGBA', [xdim,ydim], tile.flatten(), 'raw', 'RGBA', 0, 1 )
    elif self.dbtype == dbtype.IMAGES_16bit :
      outimage = Image.frombuffer ( 'I;16', [xdim,ydim], tile.flatten(), 'raw', 'I;16', 0, 1)
      outimage = outimage.point(lambda i:i*(1./256)).convert('L')
    elif self.dbtype == dbtype.RGB_32bit :
      outimage = Image.fromarray( tile, 'RGBA')
    else :
      logger.warning ( "Datatype not yet supported".format(self.dbtype) )

    return outimage
Exemplo n.º 4
0
  def cacheMiss ( self, resolution, xtile, ytile, zslice ):
    """On a miss. Cutout, return the image and load the cache in a background thread"""

    # make sure that the tile size is aligned with the cubedim
    if self.tilesz % self.proj.datasetcfg.cubedim[resolution][0] != 0 or self.tilesz % self.proj.datasetcfg.cubedim[resolution][1]:
      raise("Illegal tile size.  Not aligned")

    # figure out the cutout (limit to max image size)
    xstart = xtile*self.tilesz
    ystart = ytile*self.tilesz
    xend = min ((xtile+1)*self.tilesz,self.proj.datasetcfg.imagesz[resolution][0])
    yend = min ((ytile+1)*self.tilesz,self.proj.datasetcfg.imagesz[resolution][1])

    # get an xy image slice
    imageargs = '{}/{},{}/{},{}/{}/'.format(resolution,xstart,xend,ystart,yend,zslice) 
    cb = ocpcarest.xySlice ( imageargs, self.proj, self.db )
    if cb.data.shape != (1,self.tilesz,self.tilesz):
      tiledata = np.zeros((self.tilesz,self.tilesz), cb.data.dtype )
      tiledata[0:((yend-1)%self.tilesz+1),0:((xend-1)%self.tilesz+1)] = cb.data[0,:,:]
    else:
      tiledata = cb.data

    # need to make polymorphic for different image types     
    if tiledata.dtype == np.uint8:
      outimage = Image.frombuffer ( 'L', (self.tilesz,self.tilesz), tiledata, 'raw', 'L', 0, 1 ) 
    elif tiledata.dtype == np.uint32:
      tiledata = tiledata.reshape([self.tilesz,self.tilesz])
      recolor_cy (tiledata, tiledata)
      outimage = Image.frombuffer ( 'RGBA', [self.tilesz,self.tilesz], tiledata, 'raw', 'RGBA', 0, 1 )
    else:
      #added by PJM to support probmap type.
      tiledata = np.uint8(tiledata*256)
      outimage = Image.frombuffer ( 'L', (self.tilesz,self.tilesz), tiledata, 'raw', 'L', 0, 1 ) 
      #assert 0 
      # need to fix here and add falsecolor args

    return outimage
  def tile2WebPNG ( self, tile, color, brightness ):
    """Create PNG Images for the specified tile"""

    if color != None:
      # 16 bit images map down to 8 bits
      if tile.dtype == np.uint16:
        tile = np.uint8(tile/256)

      # false color the image
      if tile.dtype != np.uint8:
        raise ("Illegal color option for data type %s" % ( tile.dtype ))
      else:
        tile = self.falseColor ( tile, color )

      img = Image.frombuffer ( 'RGBA', [self.tilesz,self.tilesz], tile.flatten(), 'raw', 'RGBA', 0, 1 )

      # enhance false color images when requested
      if brightness != None:
        # Enhance the image
        from PIL import ImageEnhance
        enhancer = ImageEnhance.Brightness(img)
        img = enhancer.enhance(brightness)

      return img

    else:

      # write it as a png file
      if tile.dtype==np.uint8:
        return Image.frombuffer ( 'L', [self.tilesz,self.tilesz], tile.flatten(), 'raw', 'L', 0, 1 )
      elif tile.dtype==np.uint32:
        recolor_cy (tile, tile)
        return Image.frombuffer ( 'RGBA', [self.tilesz,self.tilesz], tile.flatten(), 'raw', 'RGBA', 0, 1 )
      elif tile.dtype==np.uint16:
        outimage = Image.frombuffer ( 'I;16', [self.tilesz,self.tilesz], tile.flatten(), 'raw', 'I;16', 0, 1)
        outimage = outimage.point(lambda i:i*(1./256)).convert('L')
        return outimage
Exemplo n.º 6
0
  def catmaidSlice( self ):

    cmtilesz = self.data.shape[0]
    recolor_cy( self.data, self.data )
    self.data = Image.frombuffer ( 'L', [cmtilesz,cmtilesz], self.data, 'raw', 'RGBA', 0, 1 )