kreshuklab/plant-seg

Add foreground/background postprocessing

Opened this issue · 2 comments

Some of the networks we have in plantseg output foreground probability maps together with boundary predictions. This can be used in the segmentation post-processing step in order to filter background instances (i.e. assign 0-label to pixels not belonging to foreground).

The easiest way to implement it as discussed with @lorenzocerrone and @qin-yu would be to add additional argument to segmentation functions in plantseg/segmentation/functional/segmentation.py called foreground_pmaps and apply filtering the output segmentation if the argument is present. Then support this parameter it in the config, legacy and napari GUI.

I doubt if this is a good idea. If we are providing this option in each segmentation method, then testing different threshold requires re-runs of the whole segmentation algorithm.

For Napari interface, I would make it a widget similar to widget_fix_over_under_segmentation_from_nuclei() and put it in the same menu, "Extra-Seg".

After careful thought, I decided to do versions of filtering by foreground:

  1. Threshold foreground to a mask and multiply with the segmentation pixel-wise (may loose details)
  2. Delete instances based centroids' value in foreground (not helpful if instances are not star-convex)
  3. Delete instances that has, say, 90% overlap with the background (I believe it's the best way)