Source code for arthropod_describer.plugins.test_plugin.properties.mean_intensity

import copy
import typing
from typing import Optional

import numpy as np

from arthropod_describer.common.common import Info
from arthropod_describer.common.label_image import RegionProperty, PropertyType
from arthropod_describer.common.photo import Photo
from arthropod_describer.common.plugin import PropertyComputation
from arthropod_describer.common.regions_cache import RegionsCache, Region
from arthropod_describer.common.user_params import UserParam


[docs]class MeanIntensity(PropertyComputation): """ GROUP: Basic properties NAME: Mean intensity DESCRIPTION: Mean intensity (R, G, B) KEY: mean_intensity """ def __init__(self, info: Optional[Info] = None): super().__init__(info) def __call__(self, photo: Photo, region_labels: typing.List[int], regions_cache: RegionsCache) -> \ typing.List[RegionProperty]: props: typing.List[RegionProperty] = [] refl = photo['Reflections'].label_image for region_label in region_labels: if region_label not in regions_cache.regions: continue region: Region = regions_cache.regions[region_label] top, left, height, width = region.bbox refl_roi = refl[top:top + height, left:left + width] mask = np.logical_xor(region.mask, refl_roi > 0) yy, xx = np.nonzero(mask) pixels = region.image[yy, xx] mean_intensity = np.mean(pixels, axis=0) prop = RegionProperty() prop.info = copy.deepcopy(self.example('mean_intensity').info) prop.label = int(region.label) prop.value = (mean_intensity.tolist(), self._no_unit) prop.prop_type = PropertyType.Intensity prop.num_vals = 3 prop.val_names = ['R', 'G', 'B'] props.append(prop) return props @property def user_params(self) -> typing.List[UserParam]: return super().user_params @property def region_restricted(self) -> bool: return super().region_restricted @property def computes(self) -> typing.Dict[str, Info]: return {self.info.key: self.info}
[docs] def example(self, prop_name: str) -> RegionProperty: prop = RegionProperty() prop.label = 0 prop.info = copy.deepcopy(self.info) prop.value = None prop.prop_type = PropertyType.Intensity prop.val_names = ['R', 'G', 'B'] prop.num_vals = 3 return prop
[docs] def target_worksheet(self, prop_name: str) -> str: return super(MeanIntensity, self).target_worksheet(self.info.key)
@property def group(self) -> str: return super().group