Skip to content

Commit ad505f8

Browse files
authored
Merge pull request #139 from lguerard/fix/138-object3D-border-filtering
Add options to segment_3d_image for removing objects touching borders
2 parents 379487b + f215ea5 commit ad505f8

4 files changed

Lines changed: 51 additions & 8 deletions

File tree

poetry.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ version = "0.0.0"
2020
# - or: python = ">=3.10"
2121

2222
[tool.poetry.dependencies]
23-
imcf-fiji-mocks = ">=0.13.0"
23+
# IMPORTANT: see the "poetry.lock.md" file when changing dependencies!!!
24+
imcf-fiji-mocks = ">=0.14.0"
2425
python = ">=2.7"
2526
python-micrometa = "^15.2.3"
2627
sjlogging = ">=0.5.2"
@@ -54,3 +55,9 @@ ignore = [
5455

5556
[tool.ruff.lint.pydocstyle]
5657
convention = "numpy"
58+
59+
[tool.coverage.report]
60+
exclude_also = [
61+
'no-cover:jython-only',
62+
'cover:jython',
63+
]

src/imcflibs/imagej/objects3d.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from de.mpicbg.scf.imgtools.image.create.image import ImageCreationUtilities
99
from de.mpicbg.scf.imgtools.image.create.labelmap import WatershedLabeling
1010
from ij import IJ
11+
from inra.ijpb.plugins import RemoveBorderLabelsPlugin
1112
from mcib3d.geom import Objects3DPopulation
1213
from mcib3d.image3d import ImageHandler, ImageLabeller
1314
from mcib3d.image3d.processing import MaximaFinder
@@ -71,7 +72,15 @@ def imgplus_to_population3d(imp):
7172
return Objects3DPopulation(img)
7273

7374

74-
def segment_3d_image(imp, title=None, min_thresh=1, min_vol=None, max_vol=None):
75+
def segment_3d_image(
76+
imp,
77+
title=None,
78+
min_thresh=1,
79+
min_vol=None,
80+
max_vol=None,
81+
remove_touching_borders=False,
82+
remove_touching_borders_z=False,
83+
): # cover:jython
7584
"""Segment a 3D binary image to get a labelled stack.
7685
7786
Parameters
@@ -90,6 +99,11 @@ def segment_3d_image(imp, title=None, min_thresh=1, min_vol=None, max_vol=None):
9099
max_vol : int, optional
91100
Maximum volume (in voxels) above which objects get filtered.
92101
Defaults to None.
102+
remove_touching_borders : bool, optional
103+
Whether to remove objects that touch the borders in X and Y. Defaults to False.
104+
remove_touching_borders_z : bool, optional
105+
Whether to remove objects that touch the z-axis borders. Defaults to False.
106+
93107
94108
Returns
95109
-------
@@ -107,14 +121,24 @@ def segment_3d_image(imp, title=None, min_thresh=1, min_vol=None, max_vol=None):
107121
labeler.setMinSizeCalibrated(min_vol, img)
108122
if max_vol:
109123
labeler.setMaxSizeCalibrated(max_vol, img)
110-
111124
# Generate labelled segmentation
112125
seg = labeler.getLabels(img)
113126
seg.setScale(cal.pixelWidth, cal.pixelDepth, cal.getUnits())
127+
128+
seg = RemoveBorderLabelsPlugin().remove(
129+
seg.getImagePlus(),
130+
remove_touching_borders,
131+
remove_touching_borders,
132+
remove_touching_borders,
133+
remove_touching_borders,
134+
remove_touching_borders_z,
135+
remove_touching_borders_z,
136+
)
137+
114138
if title:
115139
seg.setTitle(title)
116140

117-
return seg.getImagePlus()
141+
return seg
118142

119143

120144
def maxima_finder_3d(imp, min_threshold=0, noise=100, rxy=1.5, rz=1.5):

tests/test_objects3d.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
"""Tests for the imcflibs.imagej.objects3d module."""
2+
3+
from imcflibs.imagej.objects3d import imgplus_to_population3d
4+
from imcflibs.imagej.objects3d import maxima_finder_3d
5+
from imcflibs.imagej.objects3d import population3d_to_imgplus
6+
from imcflibs.imagej.objects3d import seeded_watershed
7+
from imcflibs.imagej.objects3d import segment_3d_image
8+
9+
10+
def test_mock_imports():
11+
"""Test if the mock imports work fine."""
12+
assert True

0 commit comments

Comments
 (0)