def testTiles(self):
        from omero.model import PixelsI
        from omero.sys import ParametersI
        from omero.util.tiles import RPSTileLoop
        from omero.util.tiles import TileLoopIteration
        from numpy import fromfunction

        sizeX = 4096
        sizeY = 4096
        sizeZ = 1
        sizeC = 1
        sizeT = 1
        tileWidth = 1024
        tileHeight = 1024
        imageName = "testStitchBig4K-1Ktiles"
        description = None
        tile_max = float(255)

        pixelsService = self.client.sf.getPixelsService()
        queryService = self.client.sf.getQueryService()

        query = "from PixelsType as p where p.value='int8'"
        pixelsType = queryService.findByQuery(query, None)
        channelList = range(sizeC)
        iId = pixelsService.createImage(sizeX, sizeY, sizeZ, sizeT,
                                        channelList, pixelsType, imageName,
                                        description)

        image = queryService.findByQuery(
            "select i from Image i join fetch i.pixels where i.id = :id",
            ParametersI().addId(iId))
        pid = image.getPrimaryPixels().getId().getValue()

        def f(x, y):
            """
            create some fake pixel data tile (2D numpy array)
            """
            return (x * y) / (1 + x + y)

        def mktile(w, h):
            tile = fromfunction(f, (w, h))
            tile = tile.astype(int)
            tile[tile > tile_max] = tile_max
            return list(tile.flatten())

        tile = fromfunction(f, (tileWidth, tileHeight)).astype(int)
        tile_min = float(tile.min())
        tile_max = min(tile_max, float(tile.max()))

        class Iteration(TileLoopIteration):
            def run(self, data, z, c, t, x, y, tileWidth, tileHeight,
                    tileCount):
                tile2d = mktile(tileWidth, tileHeight)
                data.setTile(tile2d, z, c, t, x, y, tileWidth, tileHeight)

        loop = RPSTileLoop(self.client.sf, PixelsI(pid, False))
        loop.forEachTile(256, 256, Iteration())

        c = 0
        pixelsService.setChannelGlobalMinMax(pid, c, tile_min, tile_max)
    def testTicket4737WithForEachTile(self):
        pix = self.pix()
        class Iteration(TileLoopIteration):
            def run(self, data, z, c, t, x, y, tileWidth, tileHeight, tileCount):
                data.setTile([5]*tileWidth*tileHeight, z, c, t, x, y, tileWidth, tileHeight)

        loop = RPSTileLoop(self.client.getSession(), pix)
        loop.forEachTile(256, 256, Iteration())
        pix = self.query.get("Pixels", pix.id.val)
        self.check_pix(pix)
    def testTicket4737WithForEachTile(self):
        pix = self.pix()

        class Iteration(TileLoopIteration):
            def run(self, data, z, c, t, x, y, tileWidth, tileHeight,
                    tileCount):
                data.setTile([5] * tileWidth * tileHeight, z, c, t, x, y,
                             tileWidth, tileHeight)

        loop = RPSTileLoop(self.client.getSession(), pix)
        loop.forEachTile(256, 256, Iteration())
        pix = self.query.get("Pixels", pix.id.val)
        self.check_pix(pix)
Example #4
0
def create_image_from_tiles(conn, source, image_name, description,
                            box, tile_size):

    pixels_service = conn.getPixelsService()
    query_service = conn.getQueryService()
    xbox, ybox, wbox, hbox, z1box, z2box, t1box, t2box = box
    size_x = wbox
    size_y = hbox
    size_z = source.getSizeZ()
    size_t = source.getSizeT()
    size_c = source.getSizeC()
    tile_width = tile_size
    tile_height = tile_size
    primary_pixels = source.getPrimaryPixels()

    def create_image():
        query = "from PixelsType as p where p.value='uint8'"
        pixels_type = query_service.findByQuery(query, None)
        channel_list = range(size_c)
        # bytesPerPixel = pixelsType.bitSize.val / 8
        iid = pixels_service.createImage(
            size_x,
            size_y,
            size_z,
            size_t,
            channel_list,
            pixels_type,
            image_name,
            description,
            conn.SERVICE_OPTS)

        return conn.getObject("Image", iid)

    # Make a list of all the tiles we're going to need.
    # This is the SAME ORDER that RPSTileLoop will ask for them.
    zct_tile_list = []
    for t in range(0, size_t):
        for c in range(0, size_c):
            for z in range(0, size_z):
                for tile_offset_y in range(
                        0, ((size_y + tile_height - 1) / tile_height)):
                    for tile_offset_x in range(
                            0, ((size_x + tile_width - 1) / tile_width)):
                        x = tile_offset_x * tile_width
                        y = tile_offset_y * tile_height
                        w = tile_width
                        if (w + x > size_x):
                            w = size_x - x
                        h = tile_height
                        if (h + y > size_y):
                            h = size_y - y
                        tile_xywh = (xbox + x, ybox + y, w, h)
                        zct_tile_list.append((z, c, t, tile_xywh))

    # This is a generator that will return tiles in the sequence above
    # getTiles() only opens 1 rawPixelsStore for all the tiles
    # whereas getTile() opens and closes a rawPixelsStore for each tile.
    tile_gen = primary_pixels.getTiles(zct_tile_list)

    def next_tile():
        return tile_gen.next()

    class Iteration(TileLoopIteration):

        def run(self, data, z, c, t, x, y, tile_width, tile_height,
                tile_count):
            tile2d = next_tile()
            data.setTile(tile2d, z, c, t, x, y, tile_width, tile_height)

    new_image = create_image()
    pid = new_image.getPixelsId()
    loop = RPSTileLoop(conn.c.sf, PixelsI(pid, False))
    loop.forEachTile(tile_width, tile_height, Iteration())

    for the_c in range(size_c):
        pixels_service.setChannelGlobalMinMax(pid, the_c, float(0),
                                              float(255), conn.SERVICE_OPTS)

    return new_image
    def testTiles(self):
        from omero.model import PixelsI
        from omero.sys import ParametersI
        from omero.util.tiles import RPSTileLoop
        from omero.util.tiles import TileLoopIteration
        from numpy import fromfunction

        sizeX = 4096
        sizeY = 4096
        sizeZ = 1
        sizeC = 1
        sizeT = 1
        tileWidth = 1024
        tileHeight = 1024
        imageName = "testStitchBig4K-1Ktiles"
        description = None
        tile_max = float(255)

        pixelsService = self.client.sf.getPixelsService()
        queryService = self.client.sf.getQueryService()

        query = "from PixelsType as p where p.value='int8'"
        pixelsType = queryService.findByQuery(query, None)
        channelList = range(sizeC)
        iId = pixelsService.createImage(
            sizeX, sizeY, sizeZ, sizeT,
            channelList, pixelsType, imageName, description)

        image = queryService.findByQuery(
            "select i from Image i join fetch i.pixels where i.id = :id",
            ParametersI().addId(iId))
        pid = image.getPrimaryPixels().getId().getValue()

        def f(x, y):
            """
            create some fake pixel data tile (2D numpy array)
            """
            return (x * y) / (1 + x + y)

        def mktile(w, h):
            tile = fromfunction(f, (w, h))
            tile = tile.astype(int)
            tile[tile > tile_max] = tile_max
            return list(tile.flatten())

        tile = fromfunction(f, (tileWidth, tileHeight)).astype(int)
        tile_min = float(tile.min())
        tile_max = min(tile_max, float(tile.max()))

        class Iteration(TileLoopIteration):

            def run(self, data, z, c, t, x, y,
                    tileWidth, tileHeight, tileCount):
                tile2d = mktile(tileWidth, tileHeight)
                data.setTile(tile2d, z, c, t, x, y, tileWidth, tileHeight)

        loop = RPSTileLoop(self.client.sf, PixelsI(pid, False))
        loop.forEachTile(256, 256, Iteration())

        c = 0
        pixelsService.setChannelGlobalMinMax(
            pid, c, tile_min, tile_max)