Note
Go to the end to download the full example code.
Tiled OME-Zarr#
This script shows how to create a tiled single-resolution OME-Zarr dataset, make a tiles grid, and write data.
import os
from tempfile import TemporaryDirectory
import numpy as np
from iohub.ngff import open_ome_zarr
Set storage path
tmp_dir = TemporaryDirectory()
store_path = os.path.join(tmp_dir.name, "tiled.zarr")
print("Zarr store path", store_path)
Zarr store path /tmp/tmpqih40eag/tiled.zarr
Write 5D data to a new Zarr store
# define grid (rows, columns)
grid_shape = (2, 3)
# define tile shape (5D array)
tile_shape = (5, 2, 3, 32, 32)
with open_ome_zarr(
store_path, layout="tiled", mode="a", channel_names=["DAPI", "GFP"]
) as dataset:
dtype = np.uint16
tiles = dataset.make_tiles(
"tiled_raw", grid_shape=grid_shape, tile_shape=tile_shape, dtype=dtype
)
for row in range(grid_shape[0]):
for column in range(grid_shape[1]):
# each tile will be filled with different constant values
data = np.zeros(shape=tile_shape, dtype=dtype) + row + column
tiles.write_tile(data, row, column)
Load the dataset
with open_ome_zarr(store_path, layout="tiled", mode="r") as dataset:
# data store structure
dataset.print_tree()
# get tiled image array
tiled = dataset["tiled_raw"]
# check grid and tile shapes
print(tiled.tiles, tiled.tile_shape)
# read a tile
tile_1_2 = tiled.get_tile(1, 2)
/
└── tiled_raw (5, 2, 3, 64, 96) uint16
(2, 3) (1, 1, 1, 32, 32)
Try viewing the images with napari-ome-zarr
Clean up
tmp_dir.cleanup()