@@ -642,10 +642,15 @@ def fill_holes_and_remove_small_masks(masks, min_size=15):
642642
643643 # Filter small masks
644644 if min_size > 0 :
645- counts = fastremap .unique (masks , return_counts = True )[1 ][1 :]
646- masks = fastremap .mask (masks , np .nonzero (counts < min_size )[0 ] + 1 )
645+ uniq , counts = fastremap .unique (masks , return_counts = True )
646+ # uniq[0] is background (0), so uniq[1:] are the actual mask labels
647+ # counts[1:] are the corresponding counts
648+ small_mask_indices = np .nonzero (counts [1 :] < min_size )[0 ]
649+ # Get the actual label values to remove (not indices)
650+ labels_to_remove = uniq [1 :][small_mask_indices ]
651+ masks = fastremap .mask (masks , labels_to_remove )
647652 fastremap .renumber (masks , in_place = True )
648-
653+
649654 slices = find_objects (masks )
650655 j = 0
651656 for i , slc in enumerate (slices ):
@@ -656,8 +661,11 @@ def fill_holes_and_remove_small_masks(masks, min_size=15):
656661 j += 1
657662
658663 if min_size > 0 :
659- counts = fastremap .unique (masks , return_counts = True )[1 ][1 :]
660- masks = fastremap .mask (masks , np .nonzero (counts < min_size )[0 ] + 1 )
664+ uniq , counts = fastremap .unique (masks , return_counts = True )
665+ small_mask_indices = np .nonzero (counts [1 :] < min_size )[0 ]
666+ labels_to_remove = uniq [1 :][small_mask_indices ]
667+ masks = fastremap .mask (masks , labels_to_remove )
661668 fastremap .renumber (masks , in_place = True )
662669
670+
663671 return masks
0 commit comments