Skip to main content

Parallel tiff writer compatible with ImageJ.

Project description

Tiffwrite

Exploiting tifffile in parallel to write ImageJ compatible tiffs with good compression.

Features

  • Writes bigtiff file that opens in ImageJ as hyperstack with correct dimensions.
  • Parallel compression.
  • Write individual frames in random order.
  • Compresses even more by referencing tag or image data which otherwise would have been save several times. For example empty frames, or a long string tag on every frame.
  • Enables memory efficient scripts by saving frames whenever they're ready to be saved, not waiting for the whole stack.

Installation

pip install tiffwrite

or

pip install tiffwrite@git+https://github.com/wimpomp/tiffwrite

Usage

Write an image stack

tiffwrite(file, data, axes='TZCXY', bar=False, colormap=None, pxsize=None)
  • file: string; filename of the new tiff file.
  • data: 2 to 5D numpy array in one of these datatypes: (u)int8, (u)int16, float32.
  • axes: string; order of dimensions in data, default: TZCXY for 5D, ZCXY for 4D, CXY for 3D, XY for 2D data.
  • bar: bool; whether or not to show a progress bar.
  • colormap: string; choose any colormap from the colorcet module.
  • pxsize: float; set tiff tag so ImageJ can read the pixel size (in um).

Write one frame at a time

with IJTiffWriter(file, shape, dtype='uint16', colormap=None, nP=None, extratags=None, pxsize=None) as tif:
some loop:
    tif.save(frame, c, z, t)
  • file: string; filename of the new tiff file, or list of filenames.

  • shape: iterable; shape (C, Z, T) of data to be written in file.

  • dtype: string; cast data to dtype before saving, only (u)int8, (u)int16 and float32 are supported.

  • colormap: string; choose any colormap from the colorcet module.

  • nP: int; number of compressor workers to use

  • extratags: dict {int tagnr: (int type, data)}, extra tags to save on every frame, will cause a crash if not used correctly!

  • pxsize: float; set tiff tag so ImageJ can read the pixel size (in um).

  • frame: 2D numpy array with data

  • c, z, t: int; channel, z, time coordinates of the frame

Examples

Write an image stack

from tiffwrite import tiffwrite
import numpy as np

image = np.random.randint(0, 255, (5, 3, 64, 64), 'uint16')
tiffwrite('file.tif', image, 'TCXY')

Write one frame at a time

from itertools import product
from tiffwrite import IJTiffWriter
import numpy as np

shape = (3, 5, 10)  # channels, z, time
with IJTiffWriter('file.tif', shape, pxsize=0.09707) as tif:
    for c in range(shape[0]):
        for z in range(shape[1]):
            for t in range(shape[2]):
                tif.save(np.random.randint(0, 10, (32, 32)), c, z, t)

Saving multiple tiffs simultaneously

from itertools import product
from tiffwrite import IJTiffWriter
import numpy as np

shape = (3, 5, 10)  # channels, z, time
with IJTiffWriter(('fileA.tif', 'fileB.tif'), shape) as tif:
    for c in range(shape[0]):
        for z in range(shape[1]):
            for t in range(shape[2]):
                tif.save('fileA.tif', np.random.randint(0, 10, (32, 32)), c, z, t)
                tif.save('fileB.tif', np.random.randint(0, 10, (32, 32)), c, z, t)

Tricks & tips

  • ImageJ colors channels in the order rgbwcym, and IJTiffwriter automatically and efficiently writes 0's when a frame is skipped. You can use this when specific colors are important, for example: you want to use only red and blue.
  • The order of feeding frames to IJTiffWriter is unimportant, IJTiffWriter will order de ifd's such that the file will be opened as a correctly ordered hyperstack.
  • Using the colormap parameter you can make ImageJ open the file and apply the colormap. colormap='glasbey' is very useful.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tiffwrite-2021.12.0.tar.gz (22.0 kB view hashes)

Uploaded Source

Built Distribution

tiffwrite-2021.12.0-py3-none-any.whl (21.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page