I've come across a particularly difficult segmentation task. It's optical coherence tomography data, that has a lot of noise and, compared to the particle size (radius= ~3-6px), low resolution. This, combined with a many overlapping particles, has made it impossible for me to segment out the particles with decent accuracy. I've played around with thresholding, watershedding, morphological operators and h-dome transformation but couldn't come up with results that I've found satisfying.

The region of interest is already cropped out (inside of blue boundary): enter image description here This is what 10 frames of the recording look like: enter image description here

Maybe the darker surrounding, which is free of particles, could be used as a seed for some denoising algorithm?

Manual segmentation of some samples to use as training data for a machine learning approach does not seem feasible, as it is hard to tell what's an actual particle and what is noise. That being sad, a segmentation result that looks pretty believable would be okay for now. (However, I need to do particle tracking based on such data later...)

The best I could do yet was using h-dome transform with a bit of morphological operations (it's an enlarged crop of another sample):

enter image description here What would be a reasonable approach to take the long shapes and divide them into several ones? They seem to be slightly overlapping particles in reality.

Any ideas on where to go from here? Some method I don't know of?

Thanks so much!

  • $\begingroup$ 1) What are the particles? (approximate size (?)) 2) Can you please post two successive frames? 3) The noise is NOT additive. Consequently, is the noise image from the same area WITHOUT particles or from some other random quiet corner of the image? $\endgroup$
    – A_A
    Mar 15, 2018 at 11:51
  • $\begingroup$ 1) Particle radius is ~ 3-6 pixels. 2) Done. 3) Edited the examples, hope it's clearer now. $\endgroup$
    – pscl
    Mar 15, 2018 at 21:17

1 Answer 1


There are a few things you can try but it still is not going to be an easy task. In general, in the absence of data you would be trying to exploit extraneous information by models or assumptions.

1. Try to make sense of the particles: The reason I asked about the particles was to understand if they are are symmetrical. If they are, then you could try a Gaussian filter adapted to the particle size, which would give you "high outputs" for anything that resembles a blob at that size. If they are not and they are "tumbling", then this would need to be taken into account. A single frame output filtered at 6 pixels looks like this:

enter image description here

Not very useful. The basic idea here would be to create a model of the particle so that you can somehow discriminate it amidst the noise. The Gaussian here is trying to match the particle but other features in the image look like the particle too (blob-like density variation). Which brings us to:

2. Try to get rid of the background: There are various ways you can do that. One of them is to average (or median) all of your frames into one. The median is more powerful in terms of discriminating relatively static parts of the image. One "master" frame obtained in this way looks like this:

enter image description here

Which is great because now you can see some more detail that is not exactly visible from the individual frames.

Now we try to subtract this background image from each frame of the sequence to get rid of the background and (hopefully) see remaining blobs flying around. Not exactly what was expected, but the sequence now looks like this:

enter image description here

Maybe I am not getting the timing right here but I don't see any particles flying around (?).

From this point onwards, you can combine approaches. For example, you can now apply the filter on the background-subtracted sequence of frames and then try to track the filter output (the blobs).

Or, you could try subtracting two successive frames and then try to track the gradient blobs. Assuming that the frame rate is sufficiently high (compared to the velocity of the particles), subtracting two successive frames will give you a gradient-like blob towards the direction of movement for each particle. This is expected to be consistent for moving particles and affected (to some extent) by noise. Which would then lead us to:

3. Try to track particles along specific routes: Assuming that you know approximately the routes on which the particles are supposed to be moving, you can create a model of that and use it, during your tracking, to decide if you are tracking a possibly "positive target" or some noise blob that by chance looked like a particle. But that now is way high up in the complexity scale and it assumes that you have a relatively good estimate of what a particle is.

Of course, all of the above would benefit from an increase in the amount of data you are capturing.

Hope this helps.

  • $\begingroup$ There should be way more particles than in your third image and the trajectories look a little off, too - but I will play around with that approach, thank you so much! :) $\endgroup$
    – pscl
    Mar 21, 2018 at 18:51
  • $\begingroup$ @pscl Thanks for letting me know. What are these particles of by the way? $\endgroup$
    – A_A
    Mar 22, 2018 at 6:36
  • $\begingroup$ the image is of a tadpole brain. What the particles are of exactly I don't know. $\endgroup$
    – pscl
    Mar 23, 2018 at 13:13

This site is temporarily in read-only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .