diff --git a/model_server/accessors.py b/model_server/accessors.py index 1bb5b6b4b176397660ead624ae704e8b9808992a..0e5e2cc9d827de70dae8a37688fe8af8c5b2def9 100644 --- a/model_server/accessors.py +++ b/model_server/accessors.py @@ -1,7 +1,6 @@ from abc import ABC, abstractmethod import os from pathlib import Path -from typing import Dict import numpy as np from skimage.io import imread @@ -9,6 +8,8 @@ from skimage.io import imread import czifile import tifffile +from model_server.process import is_mask + class GenericImageDataAccessor(ABC): @abstractmethod @@ -34,13 +35,7 @@ class GenericImageDataAccessor(ABC): return True if self.shape_dict['Z'] > 1 else False def is_mask(self): - if self._data.dtype == 'bool': - return True - elif self._data.dtype == 'uint8': - unique = np.unique(self._data) - if unique.shape[0] == 2 and np.all(unique == [0, 255]): - return True - return False + return is_mask(self._data) def get_one_channel_data (self, channel: int): c = int(channel) diff --git a/model_server/process.py b/model_server/process.py index 767cd1f66af5f8489cda8492107eb029f1f65e03..481282237964ef147821fe99f79f025cf768c948 100644 --- a/model_server/process.py +++ b/model_server/process.py @@ -6,6 +6,20 @@ from math import ceil, floor import numpy as np from skimage.exposure import rescale_intensity + +def is_mask(img): + """ + Return True if an image represents a binary mask + :param img: np.ndarray + """ + if img.dtype == 'bool': + return True + elif img.dtype == 'uint8': + unique = np.unique(img) + if unique.shape[0] == 2 and np.all(unique == [0, 255]): + return True + return False + def pad(yxcz, mpx: int): """ Pad and crop image data in Y and X axes to meet specific dimension