88from de .mpicbg .scf .imgtools .image .create .image import ImageCreationUtilities
99from de .mpicbg .scf .imgtools .image .create .labelmap import WatershedLabeling
1010from ij import IJ
11+ from inra .ijpb .plugins import RemoveBorderLabelsPlugin
1112from mcib3d .geom import Objects3DPopulation
1213from mcib3d .image3d import ImageHandler , ImageLabeller
1314from 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
120144def maxima_finder_3d (imp , min_threshold = 0 , noise = 100 , rxy = 1.5 , rz = 1.5 ):
0 commit comments