tifffile
tifffile copied to clipboard
Set spatial offset of OME-Tiff dataset
Following up on https://github.com/cgohlke/tifffile/issues/245, I have another question regarding OME-Tiff.
I would like to specify a spatial offset as I am saving a list of chunks relative to a spatial coordinate system.
This is the code I came with:
import tifffile as tiff
import dask.array
from pathlib import Path
rng = dask.array.random.default_rng()
chunk_ids = [[0,0,0]]
x = rng.random((512,)*3, chunks=(256,)*3)
resolution_full_um = 10
def save_chunks_per_id(dataset: dask.array.Array, chunk_id_list: list[list[int]], chunk_size: list[int], filename_prefix: str | Path):
if isinstance(filename_prefix, str):
filename_prefix = Path(filename_prefix)
for chunk_id in chunk_id_list:
p = Path(filename_prefix.parent / (filename_prefix.name.replace(".ome.tif","") + "_chunk_{0}_{1}_{2}.ome.tif".format(*chunk_id)))
d = dataset.rechunk(chunk_size).blocks[*chunk_id].compute()
metadata = {
'axes': 'ZYX', # Define the axes
'SignificantBits': 16, # Define the number of significant bits
'PhysicalSizeX': resolution_full_um,
'PhysicalSizeXUnit': 'µm',
'PhysicalSizeY': resolution_full_um,
'PhysicalSizeYUnit': 'µm',
'PhysicalSizeZ': resolution_full_um,
'PhysicalSizeZUnit': 'µm',
# 'Plane': { # returns a `TypeError: 'int' is not a list or tuple` if used instead
# 'PositionX': chunk_id[2] * chunk_size[2],
# 'PositionXUnit': 'µm',
# 'PositionY': chunk_id[1] * chunk_size[1],
# 'PositionYUnit': 'µm',
# 'PositionZ': chunk_id[0] * chunk_size[0],
# 'PositionZUnit': 'µm',
# },
'PositionX': chunk_id[2] * chunk_size[2],
'PositionXUnit': 'µm',
'PositionY': chunk_id[1] * chunk_size[1],
'PositionYUnit': 'µm',
'PositionZ': chunk_id[0] * chunk_size[0],
'PositionZUnit': 'µm',
}
tiff.imwrite(p,d,photometric='minisblack',metadata=metadata)
save_chunks_per_id(x, chunk_ids, (256,)*3, "./test.ome.tif")
but the PositionX
, PositionY
and PositionZ
are not saved. I tried by having a 'Plane' child node but it didn't work either.
<OME Creator="tifffile.py 2024.5.22" UUID="urn:uuid:ee3ad635-37ca-11ef-a4cc-50849246a087" xmlns="http://www.openmicroscopy.org/Schemas/OME/2016-06" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openmicroscopy.org/Schemas/OME/2016-06 http://www.openmicroscopy.org/Schemas/OME/2016-06/ome.xsd">
<Image ID="Image:0" Name="Image0">
<Pixels BigEndian="false" DimensionOrder="XYCZT" ID="Pixels:0" Interleaved="false" PhysicalSizeX="10.0" PhysicalSizeXUnit="µm" PhysicalSizeY="10.0" PhysicalSizeYUnit="µm" PhysicalSizeZ="10.0" PhysicalSizeZUnit="µm" SignificantBits="16" SizeC="1" SizeT="1" SizeX="256" SizeY="256" SizeZ="256" Type="double">
<Channel ID="Channel:0:0" SamplesPerPixel="1">
<LightPath/>
<TiffData IFD="0" PlaneCount="256"/>