With this mask how I would do it quickly is to dilate. Then invert. Use the analyze particle to remove anything not circular enough and below a certain size and then create a new mask. Invert this mask and fill any left holes:
Using a binary version of your input
run("Analyze Particles...", "size=10-Infinity circularity=0.80-1.00 show=Masks");
Yields this result:
So you can clean up such masks with different combinations of binary operations and the filter of the particle analyzer.
BUT some things i would consider:
A) This mask is regular since it comes from a 96 well plate. Might be easier to generate a regular pattern since spacing and size is always the same? Depends how much variability is there in the alignment, initial location and sizing of the circles, but these are technical variables that could be small.
B) Alternatively you could find other ways to detect/segment the circles, but for this one needs to see how the input looks like.