This is a classical image segmentation problem: I need to make a visual measurement of particles. I've been using watershed, kmeans and mean shift but it doesn't work well on this image. Could you please recommend me some other methods/open source code?

P/S: Any manual/semi automatic segmentation is also ok with me. I just need the correct segmentation in a reasonable not time consuming way.

enter image description here

  • 7
    $\begingroup$ Could you manually segment a few particles to give us an idea of what you require? P.S. next time upload a smaller image to reduce page load time, I have adjusted this one for you :) $\endgroup$ – geometrikal May 2 '13 at 7:19
  • 6
    $\begingroup$ I don't even know how to count these particles with my eyes and brain. Which things are particles and which are just lumps on particles? $\endgroup$ – endolith May 3 '13 at 13:38
  • $\begingroup$ Maybe you want to try some form of trainable segmentation... $\endgroup$ – thang Mar 9 '15 at 23:53

Since it is very hard to guess what result you need, proposing any automatic segmentation method is very hard.

Let me instead propose two different semi-automatic segmentation with markers.

  1. Segmentation using Minimum Spanning Forests with markers

    This method is based on a version of watershed [Cousty et. al.: Watershed Cuts: Minimum Spanning Forests and the Drop of Water Principle, 2009].

    Basically, you calculate a version of watershed (there are many versions), called watershed cuts, which gives you a (pretty severe) over-segmentation.

    After that, you mark your one object (or all of your objects, 1 marker per object + 1 for the background if there is any) you want to find, and it calculates the most likely segmentation based on pre-calculated watershed.

    I don't want to go into details, since there is pseudo-code and example images provided (one is even a cell image) in the article, but if you want me please leave a comment and I can add some more information.

  2. Segmentation using $\alpha$-trees (or $\alpha$-connected components) with markers

    Here, the "starting over-segmentation" is actually simply the segmentation to flat-zones (equal-intensity areas in the image). I am going to explain a little bit of theory here.

    An $\alpha$-connected component of a pixel $p$, or $\alpha$-$CC(p)$ is obtained as follows:

    • first you choose a connectivity (4- or 8-conn.; 4-conn simply means the neighbors of a pixel are up, down, left, and right)
    • if the intensity difference between two neighboring pixels is $\leq \alpha$, those pixels are connected
    • $\alpha$-$CC(p)$ contains all the pixels connected to pixel $p$ as well as all the pixels that can be reached from pixel $p$ through a connected path

    Now, for various reasons (I can expand the answer again if somebody asks), if you follow the $\alpha$-$CC$ around one pixel, its area usually grows slowly as you increase the $\alpha$, then at some point you have a sudden and rapid increase in the area, and then it continues to grow slowly. Usually, if you look at the $\alpha$-$CC$ just in the moment before the rapid size increase, it will give you your object.

    Again, you can use markers to mark which $\alpha$-$CC$'s you want to "follow". The advantage here is that you can calculate the $\alpha$-hierarchy once and then do all the calculations on the same hierarchy.

    I know it sounds a bit confusing with all the new terms unless you know something about $\alpha$-trees, but here's some references to help:

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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