Analyzing inhomogeneous filamentous biomass

Tags: #<Tag:0x00007fa306c392d0> #<Tag:0x00007fa306c39190> #<Tag:0x00007fa306c39028> #<Tag:0x00007fa306c38ee8>


Dear community,

I hope you can help me with a difficult image analysis task. I have microscopic images of a filamentously growing bacterium and want to analyze what proportion of the projected area is caused by dense biomass (clumps/pellets) and what proportion is occupied by freely dispersed mycelia.

I tried to apply different grey value thresholds and ridge detection, but this unfortunately leads to a lot of false-postive detection. With sharpened images the result is a little bit better, but I could not manage to trace all of the filaments, because some of them are not perfectly in focus.

Do you see a possibility to perform a good trancing of the mycelia and maybe also segment the image in parts according to the degree “clumpiness” as I sketched in the attached image?

I’m looking forward to your ideas. Many thanks for your help!



You basically have the “sexy method” and the “old but gold” method.

Sexy is converting your image to 8-bit and traning a Weka classifier like this one

I got this by training about 100 pixels for each class (Bg, freely dispersed and dense) and letting it run with defaults.

Old but gold is thinking that your phenotype basically relates to density of the fibers, so we can try to build a “density map” of your image and then set a few thresholds.
Here I get the “density” by using the Frangi Vesselness plugin with a scale of 1 and averaging it with a normalized inverted version of your original image. This is to try and enhance your bacteria and remove some background.
Finally I run a mean filter of size 20px. Averaging like this gives us a good sign of how spread/dense the intensities are together

Then I can extract with a threshold, the pixels above 0.2 “averaged intensity over 20x20 neighborhood” which I will dub “density”.

and the area between a “density” of 0.12 and 0.2.

And together with the original (inverted) image

This is a start to trigger the discussion, this method is currently sensitive to the background so some more work would be needed, which is why I did not post a macro (also because I made all these steps by hand)


Thank you very much for your reply, Olivier.
Meanwhile, I got quite good results by using the Trainable Weka segmentation. :slight_smile: