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

Threshold object classifier using PatchStacks passes tests

parent 881f1fde
No related branches found
No related tags found
No related merge requests found
......@@ -1190,19 +1190,26 @@ class IntensityThresholdInstanceMaskSegmentationModel(InstanceMaskSegmentationMo
allow_3d: bool = False,
connect_3d: bool = True,
) -> GenericImageDataAccessor:
labels = get_label_ids(mask)
df = pd.DataFrame(regionprops_table(
labels.data_yxz,
intensity_image=img.get_mono(self.channel).data_yxz,
properties=('label', 'area', 'intensity_mean', 'bbox')
))
df['intensity_mean'] > self.tr
om = np.zeros(labels.shape, labels.dtype)
def _label_object_class(la):
om[labels.data == la] = 1
df.loc[df['intensity_mean'] > (self.tr * img.dtype_max), 'label'].apply(_label_object_class)
return InMemoryDataAccessor(om)
if isinstance(img, PatchStack): # assume one object per patch
df = img.get_object_df(mask)
om = np.zeros(mask.shape, 'uint16')
def _label_patch_class(la):
om[la] = (mask.iat(la).data > 0) * 1
df.loc[df['intensity_mean'] > (self.tr * img.dtype_max), 'label'].apply(_label_patch_class)
return PatchStack(om)
else:
labels = get_label_ids(mask)
df = pd.DataFrame(regionprops_table(
labels.data_yxz,
intensity_image=img.get_mono(self.channel).data_yxz,
properties=('label', 'area', 'intensity_mean')
))
om = np.zeros(labels.shape, labels.dtype)
def _label_object_class(la):
om[labels.data == la] = 1
df.loc[df['intensity_mean'] > (self.tr * img.dtype_max), 'label'].apply(_label_object_class)
return InMemoryDataAccessor(om)
def label_instance_class(
self, img: GenericImageDataAccessor, mask: GenericImageDataAccessor, **kwargs
......
......@@ -302,6 +302,7 @@ class TestPatchStackAccessor(unittest.TestCase):
self.assertEqual(acc.hw, (h, w))
self.assertEqual(acc.get_mono(channel=0).data_yxz.shape, (n, h, w, nz))
self.assertEqual(acc.get_mono(channel=0, mip=True).data_yx.shape, (n, h, w))
return acc
def test_object_df(self):
w = 30
......
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