From 3ca94fa31848bbf617ce66bbf3940acfe89c3b0b Mon Sep 17 00:00:00 2001 From: Laurent Guerard Date: Tue, 31 Mar 2026 15:03:52 +0200 Subject: [PATCH 1/3] feat: Enhance rolling ball background subtraction with additional options --- src/imcflibs/imagej/processing.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/imcflibs/imagej/processing.py b/src/imcflibs/imagej/processing.py index 41a6b9ae..767e2a63 100644 --- a/src/imcflibs/imagej/processing.py +++ b/src/imcflibs/imagej/processing.py @@ -66,7 +66,14 @@ def apply_filter(imp, filter_method, filter_radius, do_3d=False): return imageplus -def apply_rollingball_bg_subtraction(imp, rolling_ball_radius, do_3d=False): +def apply_rollingball_bg_subtraction( + imp, + rolling_ball_radius, + light_background=False, + sliding=False, + disable=False, + do_3d=False, +): """Perform background subtraction using a rolling ball method. Parameters @@ -75,6 +82,12 @@ def apply_rollingball_bg_subtraction(imp, rolling_ball_radius, do_3d=False): Input ImagePlus to filter and threshold rolling_ball_radius : int Radius of the rolling ball filter to use + light_background : bool, optional + If set to True, will treat the background as light, by default False + sliding : bool, optional + If set to True, will do a sliding window approach, by default False + disable : bool, optional + If set to True, will disable the smoothing, by default False do_3d : bool, optional If set to True, will do a 3D filtering, by default False @@ -85,7 +98,18 @@ def apply_rollingball_bg_subtraction(imp, rolling_ball_radius, do_3d=False): """ log.info("Applying rolling ball with radius %d" % rolling_ball_radius) - options = "rolling=" + str(rolling_ball_radius) + " stack" if do_3d else "" + option_parts = ["rolling=" + str(rolling_ball_radius)] + + if light_background: + option_parts.append("light") + if sliding: + option_parts.append("sliding") + if disable: + option_parts.append("disable") + if do_3d: + option_parts.append("stack") + + options = " ".join(option_parts) log.debug("Background subtraction options: %s" % options) From 6659e1188eeada0879dc5c9545d90603e769443f Mon Sep 17 00:00:00 2001 From: Laurent Guerard Date: Tue, 31 Mar 2026 15:09:03 +0200 Subject: [PATCH 2/3] fix: Correct spelling of 'Subtract Background' in rolling ball background subtraction function --- src/imcflibs/imagej/processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imcflibs/imagej/processing.py b/src/imcflibs/imagej/processing.py index 767e2a63..910e865c 100644 --- a/src/imcflibs/imagej/processing.py +++ b/src/imcflibs/imagej/processing.py @@ -114,7 +114,7 @@ def apply_rollingball_bg_subtraction( log.debug("Background subtraction options: %s" % options) imageplus = imp.duplicate() - IJ.run(imageplus, "Substract Background...", options) + IJ.run(imageplus, "Subtract Background...", options) return imageplus From cd48fac5743c3b748e96fde4b68d8cf2aa018791 Mon Sep 17 00:00:00 2001 From: Laurent Guerard Date: Tue, 31 Mar 2026 15:19:15 +0200 Subject: [PATCH 3/3] refactor: Extract rolling ball options into a separate function for clarity --- src/imcflibs/imagej/processing.py | 39 +++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/imcflibs/imagej/processing.py b/src/imcflibs/imagej/processing.py index 910e865c..0aa223c1 100644 --- a/src/imcflibs/imagej/processing.py +++ b/src/imcflibs/imagej/processing.py @@ -98,18 +98,13 @@ def apply_rollingball_bg_subtraction( """ log.info("Applying rolling ball with radius %d" % rolling_ball_radius) - option_parts = ["rolling=" + str(rolling_ball_radius)] - - if light_background: - option_parts.append("light") - if sliding: - option_parts.append("sliding") - if disable: - option_parts.append("disable") - if do_3d: - option_parts.append("stack") - - options = " ".join(option_parts) + options = rolling_ball_options( + rolling_ball_radius, + light_background=light_background, + sliding=sliding, + disable=disable, + do_3d=do_3d, + ) log.debug("Background subtraction options: %s" % options) @@ -119,6 +114,26 @@ def apply_rollingball_bg_subtraction( return imageplus +def rolling_ball_options( + rolling_ball_radius, + light_background=False, + sliding=False, + disable=False, + do_3d=False, +): + """Return the option string for rolling ball background subtraction.""" + parts = ["rolling=" + str(rolling_ball_radius)] + if light_background: + parts.append("light") + if sliding: + parts.append("sliding") + if disable: + parts.append("disable") + if do_3d: + parts.append("stack") + return " ".join(parts) + + def apply_threshold(imp, threshold_method, do_3d=True): """Apply a threshold method to the input ImagePlus.