I am trying to segment and label white blood cells from this image: Original Image

Using K-Means I managed to segment most of what I wanted: enter image description here

But as you can see, there are some cells connected to each other which I would like to label as separate objects.

So my questions is: Can you point me to some known algorithms that perform the task of automatically separating them? This image comes from a data set with annotations of the cell centers, in case machine learning is involved...

Also, but much less important, it would be nice to hear suggestions about improving the K-Means segmentation (Discarding the 'Stains').

Edit: Thanks! After playing around with the regional minima function (inextendedmin), I managed to segment all of the cells in the center, except for the bottom left in that cluster at first, but some cleaning up of the segmented image did the trick in the second watershed segmentation: enter image description here

Edit2: For anyone who still follows (or even cares), I managed to improve segmentation using K-means for spatial clustering on the original bw image, where the number of cells I obtained via watershed was defined as k (number of clusters). The result provided a bit finer segmentation: enter image description here

  • The cells image is taken from ALL-IDB

1 Answer 1


I can't recommend anything in the realm of your clustering algorithm, but this looks to be pretty simple. The initial segmentation worked nicely; a simple watershed should separate those cells.

For example, in MATLAB:

function W = dowatershed(I)
    %% I is a logical mask (i.e., im2bw)
    d = -bwdist(~I);    
    l = watershed(d);
    W = I;
    W(l == 0) = 0;

Not the answer you're looking for? Browse other questions tagged or ask your own question.