for i in range(resolutions): divScale = Math.pow(scale, i + 1) omeMeta.setResolutionSizeX(PositiveInteger(int(reader.getSizeX() / divScale)), 0, i + 1) omeMeta.setResolutionSizeY(PositiveInteger(int(reader.getSizeY() / divScale)), 0, i + 1) # setup writer writer = OMETiffWriter() writer.setMetadataRetrieve(omeMeta) writer.setId(outFile) type = reader.getPixelType() # read and write main image img = reader.openBytes(0) writer.saveBytes(0, img) # create ImageScaler for downsampling scaler = SimpleImageScaler() # generate downsampled resolutions and write to output for i in range(resolutions): writer.setResolution(i + 1) x = omeMeta.getResolutionSizeX(0, i + 1).getValue() y = omeMeta.getResolutionSizeY(0, i + 1).getValue() downsample = scaler.downsample(img, reader.getSizeX(), reader.getSizeY(), Math.pow(scale, i + 1), FormatTools.getBytesPerPixel(type), reader.isLittleEndian(), FormatTools.isFloatingPoint(type), reader.getRGBChannelCount(), reader.isInterleaved()) writer.saveBytes(0, downsample) writer.close() reader.close()
nYTiles = nYTiles + 1 for y in range(nYTiles): for x in range(nXTiles): # Calculate the correct size and offset for each tile tileX = x * tileSizeX tileY = y * tileSizeY effTileSizeX = tileSizeX * currentScale if ((tileX * currentScale) + effTileSizeX) >= width: effTileSizeX = width - (tileX * currentScale) effTileSizeY = tileSizeY * currentScale if ((tileY * currentScale) + effTileSizeY) >= height: effTileSizeY = height - (tileY * currentScale) # Read the tile, create the downsampled version and then write to output tile = reader.openBytes(image, tileX * currentScale, tileY * currentScale, effTileSizeX, effTileSizeY) downsample = scaler.downsample(tile, effTileSizeX, effTileSizeY, currentScale, FormatTools.getBytesPerPixel(type), reader.isLittleEndian(), FormatTools.isFloatingPoint(type), reader.getRGBChannelCount(), reader.isInterleaved()) writer.saveBytes(image, downsample, tileX, tileY, effTileSizeX / currentScale, effTileSizeY / currentScale) writer.close(); reader.close(); IJ.log("Done") options = ImporterOptions() options.setColorMode(ImporterOptions.COLOR_MODE_COMPOSITE) options.setId(outFile) options.setSeriesOn(2, True); imps = BF.openImagePlus(options) for imp in imps: imp.show()
file = "/path/to/inputFile.tiff" outFile = "/path/to/outputFile.ome.tiff" resolutions = 3 scale = 2 tileSizeX = 512 tileSizeY = 512 # setup image reader and writer reader = ImageReader() omeMeta = MetadataTools.createOMEXMLMetadata() reader.setMetadataStore(omeMeta) reader.setId(file) writer = OMETiffWriter() writer.setMetadataRetrieve(omeMeta) writer.setInterleaved(reader.isInterleaved()) writer.setTileSizeX(tileSizeX) writer.setTileSizeY(tileSizeY) writer.setId(outFile) # convert to OME-TIFF using tiled reading and writing for series in range(reader.getSeriesCount()): reader.setSeries(series) writer.setSeries(series) # convert each image in the current series for image in range(reader.getImageCount()): width = reader.getSizeX() height = reader.getSizeY() # Determined the number of tiles to read and write