Skip to content
Snippets Groups Projects
Commit 0f5f4bd8 authored by Christopher Randolph Rhodes's avatar Christopher Randolph Rhodes
Browse files

Handling of feature extraction on empty RoiSets

parent 36499d70
No related branches found
No related tags found
2 merge requests!4Migrate project from rhodes/model_server to grp-almf/svlt,!3Migrate from rhodes/model_server to grp-almf/svlt repo
......@@ -550,6 +550,8 @@ class RoiSet(object):
return PatchStack(list(se_ext))
def get_patch_obmap_acc(self, **kwargs) -> Union[PatchStack, None]:
if self.count == 0:
return None
labels = self.df().index.sort_values().to_list()
acc_masks = self.get_patch_masks_acc(**kwargs)
return PatchStack([(acc_masks.iat(i).data > 0) * labels[i] for i in range(0, len(labels))])
......@@ -908,13 +910,15 @@ class RoiSet(object):
:param extractor: function that takes an RoiSet object and returns a DataFrame of features
:param kwargs: variable-length keyword arguments that are passed to feature extractor
"""
if self.count == 0:
return
df_features = extractor(self, **kwargs)
insert_level(df_features, 'features')
self._df = self._df.join(df_features)
def get_features(self) -> pd.DataFrame:
return self.df().features
return self.df().get('features')
@classmethod
......
......@@ -70,3 +70,23 @@ class TestRoiSetMonoProducts(unittest.TestCase):
roiset.extract_features(regionprops, make_3d=True, channel=2)
self.assertTrue(('features', 'intensity_std-2') in roiset.df().columns)
self.assertTrue('intensity_std-2' in roiset.get_features())
def test_empty_roiset_extract_features(self):
import numpy as np
from model_server.base.accessors import InMemoryDataAccessor
arr_mask = InMemoryDataAccessor(np.zeros([*stack.hw, 1, stack.nz], dtype='uint8'))
roiset = RoiSet.from_binary_mask(
stack,
arr_mask,
params=RoiSetMetaParams(
filters={'area': {'min': 1e3, 'max': 1e4}},
expand_box_by=(128, 2)
),
allow_3d=True,
)
self.assertEqual(roiset.count, 0)
roiset.extract_features(regionprops, make_3d=True, channel=2)
self.assertTrue(('features', 'intensity_std-2') not in roiset.df().columns)
self.assertIsNone(roiset.get_features())
\ No newline at end of file
......@@ -915,6 +915,12 @@ class TestEmptyRoiSet(unittest.TestCase):
self.assertEqual(len(df_patches), 0)
self.assertIsNone(roiset.get_patches_acc(make_3d=True))
def test_get_obmaps(self):
roiset = self.empty_roiset
self.assertEqual(roiset.count, 0)
acc_obmap = roiset.get_patch_obmap_acc(make_3d=True)
self.assertIsNone(acc_obmap)
def test_run_exports(self):
roiset = self.empty_roiset
export_params = RoiSetExportParams(**{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment