MATLAB: Segmentation of roughly circular objects in an image.

edge detectionhough transformimage processingsegmentation

Hello everybody,
I've been trying to segment this image for some time, and chiefly I need to identify the nuclei as signified by dark, roughly circular objects. Original image (Photobucket)
My current train of thought uses a Canny edge detect, and then a circular Hough transform from there: Edge detected image. However, as you can see in my edge detection, there are a lot of edges which clearly don't correspond to nuclei, and I'm wondering if it would improve things significantly if I could discard the edges which are too long or too short to be a nucleus. To that end, is it possible to find the length of each 'chain' which is an edge, and discard them?
That's my main question, but if anybody has any suggestions that might help the problem as a whole, then that would be fantastic too!
Many thanks, Callum

Best Answer

Normally we don't give advice on algorithms, since this is a MATLAB forum, but you might try a sigma filter or a morphological erosion to get rid of the white clutter. Then try to flatten the image with CLAHE using adapthisteq(). Then try thresholding, labeling, and calling regionprops. Throw out blobs that aren't round by checking their circularity (perimeter^2/(4*pi*area)). Or you could try imfindcircle and see how that does. Try Brett's GUI to make it easy: http://www.mathworks.com/matlabcentral/fileexchange/34365-findcirclesgui
Related Question