Here's the starter ... use the Hough circular transform to find the circular part. To do this, I initially generated a local image .
im=rgb2gray(imread('Ly7C8.png')); imbw = thresholdLocally(im,[2 2]); % thresold localy with a 2x2 window % preparing to find the circle props = regionprops(imbw,'Area','PixelIdxList','MajorAxisLength','MinorAxisLength'); [~,indexOfMax] = max([props.Area]); approximateRadius = props(indexOfMax).MajorAxisLength/2; radius=round(approximateRadius);%-1:approximateRadius+1); %find the circle using Hough trans. h = circle_hough(edge(imbw), radius,'same'); [~,maxIndex] = max(h(:)); [i,j,k] = ind2sub(size(h), maxIndex); center.x = j; center.y = i; figure;imagesc(im);imellipse(gca,[center.x-radius center.y-radius 2*radius 2*radius]); title('Finding the circle using Hough Trans.');

select only what is inside the circle:
[y,x] = meshgrid(1:size(im,2),1:size(im,1)); z = (xj).^2+(yi).^2; f = (z<=radius^2); im=im.*uint8(f);
EDIT:
find a place to start the image threshold to segment it by looking at the histogram, finding the first local maxima and iterating from there until 2 separate segments are found using bwlabel:
p=hist(im(im>0),1:255); p=smooth(p,5); [pks,locs] = findpeaks(p); bw=bwlabel(im>locs(1)); i=0; while numel(unique(bw))<3 bw=bwlabel(im>locs(1)+i); i=i+1; end imagesc(bw);

The middle part can now be obtained by removing two marked parts from the circle, and the remaining part will be the middle part (+ part of the halo)
bw2=(bw<1.*f);
but after some median filtering we get something more reasonable
bw2= medfilt2(medfilt2(bw2));
and together we get:
imagesc(bw+3*bw2);

The last part is the real βquick and dirty" one, Iβm sure that with the help of already used tools you will get better results ...