"""FISSA functions to handle image and roi objects and return the right format.
If a custom version of this file is used (which can be defined at the
declaration of the core FISSA Experiment class), it should have the same
functions as here, with the same inputs and outputs.
Authors:
- Sander W Keemink <swkeemink@scimail.eu>
- Scott C Lowe <scott.code.lowe@gmail.com>
"""
from past.builtins import basestring
import numpy as np
import tifffile
from . import roitools
[docs]def image2array(image):
"""Loads a TIFF image from disk.
Parameters
----------
image : str or array_like
Either a path to a TIFF file, or array_like data.
Returns
-------
numpy.ndarray
A 3D array containing the data, with dimensions corresponding to
`(frames, y_coordinate, x_coordinate)`.
"""
if isinstance(image, basestring):
return tifffile.imread(image)
return np.array(image)
[docs]def getmean(data):
"""Determine the mean image across all frames.
Parameters
----------
data : array_like
Data array as made by image2array. Should be shaped `(frames, y, x)`.
Returns
-------
numpy.ndarray
y by x array for the mean values
"""
return data.mean(axis=0)
[docs]def rois2masks(rois, data):
"""Take the object `rois` and returns it as a list of binary masks.
Parameters
----------
rois : string or list of array_like
Either a string with imagej roi zip location, list of arrays encoding
polygons, or list of binary arrays representing masks
data : array
Data array as made by image2array. Must be shaped `(frames, y, x)`.
Returns
-------
list
List of binary arrays (i.e. masks)
"""
# get the image shape
shape = data.shape[1:]
# if it's a list of strings
if isinstance(rois, basestring):
rois = roitools.readrois(rois)
if not isinstance(rois, list):
raise ValueError('Wrong ROIs input format: expected a list.')
# if it's a something by 2 array (or vice versa), assume polygons
if np.shape(rois[0])[1] == 2 or np.shape(rois[0])[0] == 2:
return roitools.getmasks(rois, shape)
# if it's a list of bigger arrays, assume masks
elif np.shape(rois[0]) == shape:
return rois
raise ValueError('Wrong ROIs input format: unfamiliar shape.')