andreped commited on
Commit
fcf7c10
1 Parent(s): d4d0d98

added fix for handling one or none unique liver segments

Browse files
Files changed (1) hide show
  1. livermask/utils/process.py +18 -15
livermask/utils/process.py CHANGED
@@ -102,21 +102,24 @@ def liver_segmenter(params):
102
 
103
  # 2) keep only largest connected component
104
  labels = label(pred)
105
- regions = regionprops(labels)
106
- area_sizes = []
107
- for region in regions:
108
- area_sizes.append([region.label, region.area])
109
- area_sizes = np.array(area_sizes)
110
- tmp = np.zeros_like(pred)
111
- tmp[labels == area_sizes[np.argmax(area_sizes[:, 1]), 0]] = 1
112
- pred = tmp.copy()
113
- del tmp, labels, regions, area_sizes
114
-
115
- # 3) dilate
116
- pred = binary_dilation(pred.astype(bool), ball(3))
117
-
118
- # 4) remove small holes
119
- pred = remove_small_holes(pred.astype(bool), area_threshold=0.001 * np.prod(pred.shape))
 
 
 
120
 
121
  log.info("saving...")
122
  pred = pred.astype(np.uint8)
 
102
 
103
  # 2) keep only largest connected component
104
  labels = label(pred)
105
+ nb_uniques = len(np.unique(labels)) # note: includes background 0
106
+ if nb_uniques > 2: # if only one, no filtering needed
107
+ regions = regionprops(labels)
108
+ area_sizes = []
109
+ for region in regions:
110
+ area_sizes.append([region.label, region.area])
111
+ area_sizes = np.array(area_sizes)
112
+ tmp = np.zeros_like(pred)
113
+ tmp[labels == area_sizes[np.argmax(area_sizes[:, 1]), 0]] = 1
114
+ pred = tmp.copy()
115
+ del tmp, labels, regions, area_sizes
116
+
117
+ if nb_uniques > 1: # if no segmentation, no post-processing needed
118
+ # 3) dilate
119
+ pred = binary_dilation(pred.astype(bool), ball(3))
120
+
121
+ # 4) remove small holes
122
+ pred = remove_small_holes(pred.astype(bool), area_threshold=0.001 * np.prod(pred.shape))
123
 
124
  log.info("saving...")
125
  pred = pred.astype(np.uint8)