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:
- Threshold foreground to a mask and multiply with the segmentation pixel-wise (may loose details)
- Delete instances based centroids' value in foreground (not helpful if instances are not star-convex)
- Delete instances that has, say, 90% overlap with the background (I believe it's the best way)