Source code for ddd_pylib.labels_manip._labels_properties_operator

from ddd_pylib._base import MeasurementsOperator
from skimage.measure import regionprops
from tifffile import imread
import pandas as pd
import numpy as np
import xarray as xr



[docs] class LabelsPropertiesOperator(MeasurementsOperator): def __init__(self): super().__init__() self.secondary_image = None self.properties = [] self.dataframe = None
[docs] def getSecondaryImage(self): return self.secondary_image
[docs] def setProperties(self, properties): self.properties = [] if properties is None else properties
[docs] def getProperties(self): return self.properties
[docs] def getDataFrame(self): return self.dataframe
[docs] def setSecondaryImage(self, image): if not image is None: self.secondary_image = image
def _measureLabel(self, image, secondary_image=None): region_props = regionprops(label_image=image.values, intensity_image=secondary_image) if self.properties != []: if "measure" in self.properties: measure = "volume" if "Z" in image.dims else "area" data = {} for prop in self.properties: if prop == "measure": prop = measure data[prop] = [] for key in self.properties: key1 = key if key=="measure": key=measure key1="area" for e in region_props: data[key].append(getattr(e, key1, None)) result = self._createDataFrame(data) else: result = self._createDataFrame(region_props) return result def _createDataFrame(self, array): self.dataframe = pd.DataFrame(data=array) return self.dataframe
[docs] def getPrefix(self): return "DataFrameMeasure - "
def _applyToFrame(self, frameData, t, nT): if self.secondary_image is None: image1 = frameData[0] return self._measureLabel(image1) else: image1, image2 = frameData return self._measureLabel(image1, image2) def _zipInputs(self): if self.secondary_image is None: return super()._zipInputs() else: imA = self.getMainImage() imB = self.getSecondaryImage() if "T" in imA.dims: return [ (imA.isel(T=t), imB.isel(T=t)) for t in range(self.getNTimePoints()) ] else: return [(imA, imB)]