Skip to content
Merged
Changes from 1 commit
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
22 changes: 20 additions & 2 deletions src/imcflibs/imagej/objects3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,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,
):
"""Segment a 3D binary image to get a labelled stack.

Parameters
Expand All @@ -90,6 +98,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,10 +120,15 @@ 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())

if remove_touching_borders:
obj = seg.getObjects3DPopulation()
obj.removeObjectsTouchingBorders(seg, remove_touching_borders_z)
seg = ImageHandler.wrap(population3d_to_imgplus(imp, obj))

if title:
seg.setTitle(title)

Expand Down
Loading