Shouldn't be too hard unless the noise is a problem. I'd do these steps:
- Reduce noise - there are a variety of methods.
- Threshold at a high level to find bright things.
- Use bwareaopen to get rid of small objects.
- Call bwlabel and regionprops and use perimeter^2/(4*pi*area) to find round objects.
- Use ismember() to keep the round objects only. Now you have just the white circle part.
- Threshold at a medium level to get medium bright things.
- Use watershed if necessary to split apart touching blobs.
- Use imreconstruct to get only the gray part that contains the white circle.
Here are some examples to help you: