From a67869dcea3d727787174e24d9a2cecf0a2bdb41 Mon Sep 17 00:00:00 2001 From: Christopher Rhodes <christopher.rhodes@embl.de> Date: Thu, 31 Oct 2024 15:50:24 +0100 Subject: [PATCH] Can filter ROI by minimum of height and width --- model_server/base/roiset.py | 5 ++++- tests/base/test_roiset.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/model_server/base/roiset.py b/model_server/base/roiset.py index d78a9805..13d16e7f 100644 --- a/model_server/base/roiset.py +++ b/model_server/base/roiset.py @@ -49,6 +49,7 @@ class RoiFilterRange(BaseModel): class RoiFilter(BaseModel): area: Union[RoiFilterRange, None] = None diag: Union[RoiFilterRange, None] = None + min_hw: Union[RoiFilterRange, None] = None class RoiSetMetaParams(BaseModel): @@ -116,7 +117,7 @@ def filter_df(df: pd.DataFrame, filters: RoiFilter = None) -> pd.DataFrame: query_str = 'label > 0' # always true if filters is not None: # parse filters for k, val in filters.dict(exclude_unset=True).items(): - assert k in ('area', 'diag') + assert k in ('area', 'diag', 'min_hw') vmin = val['min'] vmax = val['max'] assert vmin >= 0 @@ -282,6 +283,8 @@ def df_insert_slices(df: pd.DataFrame, sd: dict, expand_box_by) -> pd.DataFrame: df['h'] = df['y1'] - df['y0'] df['w'] = df['x1'] - df['x0'] df['diag'] = (df['w']**2 + df['h']**2).apply(sqrt) + df['min_hw'] = df[['w', 'h']].min(axis=1) + ebxy, ebz = expand_box_by df['ebb_y0'] = (df.y0 - ebxy).apply(lambda x: max(x, 0)) df['ebb_y1'] = (df.y1 + ebxy).apply(lambda x: min(x, h)) diff --git a/tests/base/test_roiset.py b/tests/base/test_roiset.py index 3a661914..5f8fe52b 100644 --- a/tests/base/test_roiset.py +++ b/tests/base/test_roiset.py @@ -260,7 +260,11 @@ class TestRoiSetMultichannelProducts(BaseTestRoiSetMonoProducts, unittest.TestCa params=RoiSetMetaParams( expand_box_by=(128, 2), mask_type='boxes', - filters={'area': {'min': 1e3, 'max': 1e4}, 'diag': {'min': 1e1, 'max': 1e5}}, + filters={ + 'area': {'min': 1e3, 'max': 1e4}, + 'diag': {'min': 1e1, 'max': 1e5}, + 'min_hw': {'min': 1e1, 'max': 1e4} + }, deproject_channel=0, ) ) -- GitLab