Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ version = "0.0.0"
# - or: python = ">=3.10"

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

[tool.ruff.lint.pydocstyle]
convention = "numpy"

[tool.coverage.report]
exclude_also = [
'no-cover:jython-only',
'cover:jython',
]
30 changes: 27 additions & 3 deletions src/imcflibs/imagej/objects3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from de.mpicbg.scf.imgtools.image.create.image import ImageCreationUtilities
from de.mpicbg.scf.imgtools.image.create.labelmap import WatershedLabeling
from ij import IJ
from inra.ijpb.plugins import RemoveBorderLabelsPlugin
from mcib3d.geom import Objects3DPopulation
from mcib3d.image3d import ImageHandler, ImageLabeller
from mcib3d.image3d.processing import MaximaFinder
Expand Down Expand Up @@ -71,7 +72,15 @@ def imgplus_to_population3d(imp):
return Objects3DPopulation(img)


def segment_3d_image(imp, title=None, min_thresh=1, min_vol=None, max_vol=None):
def segment_3d_image(
imp,
title=None,
min_thresh=1,
min_vol=None,
max_vol=None,
remove_touching_borders=False,
remove_touching_borders_z=False,
): # cover:jython
"""Segment a 3D binary image to get a labelled stack.

Parameters
Expand All @@ -90,6 +99,11 @@ def segment_3d_image(imp, title=None, min_thresh=1, min_vol=None, max_vol=None):
max_vol : int, optional
Maximum volume (in voxels) above which objects get filtered.
Defaults to None.
remove_touching_borders : bool, optional
Whether to remove objects that touch the borders in X and Y. Defaults to False.
remove_touching_borders_z : bool, optional
Comment thread
lguerard marked this conversation as resolved.
Whether to remove objects that touch the z-axis borders. Defaults to False.


Returns
-------
Expand All @@ -107,14 +121,24 @@ def segment_3d_image(imp, title=None, min_thresh=1, min_vol=None, max_vol=None):
labeler.setMinSizeCalibrated(min_vol, img)
if max_vol:
labeler.setMaxSizeCalibrated(max_vol, img)

# Generate labelled segmentation
seg = labeler.getLabels(img)
seg.setScale(cal.pixelWidth, cal.pixelDepth, cal.getUnits())

seg = RemoveBorderLabelsPlugin().remove(
seg.getImagePlus(),
remove_touching_borders,
remove_touching_borders,
remove_touching_borders,
remove_touching_borders,
remove_touching_borders_z,
remove_touching_borders_z,
)

if title:
seg.setTitle(title)

return seg.getImagePlus()
return seg


def maxima_finder_3d(imp, min_threshold=0, noise=100, rxy=1.5, rz=1.5):
Expand Down
12 changes: 12 additions & 0 deletions tests/test_objects3d.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""Tests for the imcflibs.imagej.objects3d module."""

from imcflibs.imagej.objects3d import imgplus_to_population3d
from imcflibs.imagej.objects3d import maxima_finder_3d
from imcflibs.imagej.objects3d import population3d_to_imgplus
from imcflibs.imagej.objects3d import seeded_watershed
from imcflibs.imagej.objects3d import segment_3d_image


def test_mock_imports():
"""Test if the mock imports work fine."""
assert True
Loading