There was a very similar question on StackOverflow recently, asking to get the convex hull of a discontinuous composite ROI. I posted a small Groovy script in the answer:
In case the link shouldn’t work, here’s the Groovy script again (you can run it from the script editor after choosing Language > Groovy):
#@ ImagePlus imp
roi = ThresholdToSelection.run(imp)
proi = new PolygonRoi(roi.getContainedFloatPoints(), Roi.POLYGON)
chRoi = new PolygonRoi(proi.getConvexHull(), Roi.POLYGON)
You would still somehow have to select the correct subregion from your image, but it should solve your issue of having discontinuous ROIs due to suboptimal thresholding.
Hope it helps. Let me know if you’re having any issues with it.