|
|
- import numpy as np
- import logging
-
- log = logging.getLogger(__name__)
-
-
- class ImageSet(object):
- """
- A group of images that share the same timestamp. NIS Elements doesn't store a unique timestamp for every
- image, rather, it stores one for each set of images that share the same field of view and z-axis level.
-
- """
- def __init__(self):
- self._images = []
-
- def add(self, image):
- """
- :type image: nd2reader.model.Image()
-
- """
- self._images.append(image)
-
- def __iter__(self):
- for image in self._images:
- yield image
-
-
- class Image(object):
- def __init__(self, timestamp, raw_array, field_of_view, channel, z_level, height, width):
- self._timestamp = timestamp
- self._raw_data = raw_array
- self._field_of_view = field_of_view
- self._channel = channel
- self._z_level = z_level
- self._height = height
- self._width = width
- self._data = None
-
- @property
- def field_of_view(self):
- return self._field_of_view
-
- @property
- def timestamp(self):
- """
- The number of seconds after the beginning of the acquisition that the image was taken. Note that for a given field
- of view and z-level offset, if you have images of multiple channels, they will all be given the same timestamp.
- No, this doesn't make much sense. But that's how ND2s are structured, so if your experiment depends on millisecond
- accuracy, you need to find an alternative imaging system.
-
- """
- return self._timestamp / 1000.0
-
- @property
- def channel(self):
- return self._channel
-
- @property
- def z_level(self):
- return self._z_level
-
- @property
- def data(self):
- if self._data is None:
- # The data is just a flat, 1-dimensional array. We convert it to a 2D image here.
- self._data = np.reshape(self._raw_data, (self._height, self._width))
- return self._data
-
- @property
- def is_valid(self):
- return np.any(self._raw_data)
|