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

Added and tested methods to manipulation classification result columns

parent a4371edc
No related branches found
No related tags found
2 merge requests!65Release 2024.10.01,!57RoiSet facilitates object detection models
This commit is part of merge request !57. Comments created here will be created in the context of that merge request.
......@@ -341,15 +341,12 @@ class RoiSet(object):
:param df: dataframe containing at minimum bounding box and segmentation mask information
:param params: optional arguments that influence the definition and representation of ROIs
"""
# assert acc_obj_ids.chroma == 1
# self.acc_obj_ids = acc_obj_ids
self.acc_raw = acc_raw
self.accs_derived = []
self.params = params
self._df = df
self.count = len(self._df)
# self.object_class_maps = {} # classification results
def __iter__(self):
"""Expose ROI meta information via the Pandas.DataFrame API"""
......@@ -555,7 +552,7 @@ class RoiSet(object):
self.get_patch_masks_acc(expanded=False, pad_to=None)
)
self._df['classify_by_' + name] = pd.Series(dtype='Int64')
se = pd.Series(dtype='Int64', index=self._df.index)
for i, roi in enumerate(self):
oc = np.unique(
......@@ -563,7 +560,9 @@ class RoiSet(object):
obmap_patches.iat(i).data
)
)[-1]
self._df.loc[roi.Index, 'classify_by_' + name] = oc
se[roi.Index] = oc
self.set_classification(name, se)
def get_object_class_map(self, name: str) -> InMemoryDataAccessor:
"""
......@@ -774,6 +773,23 @@ class RoiSet(object):
dfe['patch'] = dfe.apply(lambda r: _make_patch(r), axis=1)
return dfe
@property
def classification_columns(self):
"""
Return list of columns that describe instance classification results
"""
pr = 'classify_by_'
return [c.split(pr)[1] for c in self._df.columns if c.startswith(pr)]
def set_classification(self, cname: str, se: pd.Series):
"""
Set instance classification result as a column addition on dataframe
:param cname: name of classification result
:param se: series containing class information
"""
col = f'classify_by_{cname}'
self._df[col] = se
def run_exports(self, where: Path, channel, prefix, params: RoiSetExportParams) -> dict:
"""
Export various representations of ROIs, e.g. patches, annotated stacks, and object maps.
......@@ -814,9 +830,7 @@ class RoiSet(object):
if k == 'annotated_zstacks':
record[k] = str(Path(k) / self.export_annotated_zstack(subdir, prefix=pr, **kp))
if k == 'object_classes':
pr = 'classify_by_'
cnames = [c.split(pr)[1] for c in self._df.columns if c.startswith(pr)]
for n in cnames:
for n in self.classification_columns:
fp = subdir / n / (pr + '.tif')
write_accessor_data_to_file(fp, self.get_object_class_map(n))
record[f'{k}_{n}'] = str(fp)
......
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