Automatic segmentation of low intensity-difference layers


I have an image dataset where the color intensity difference of classes in an image is pretty much similar (example given below, contains 4 layers of muscle, hence 4 classes). I tried many semiautomatic algorithms like grow from seed, flood fill, watershed, etc., but none of them worked well for me. So what I do now is fill in between slices, but I have to do this at least every 20 slices to get a fairly good segmentation. My datasets are large, but if they are downsampled, lots of helpful details are lost. I also have at least 30 datasets like that. So repeating the fill-in between slices is tedious. If you have any advice or suggestions, I would be really grateful.

Can you show a few segmented slices so that we can see what structures you need to separate?

Updated the question with segmentation

until @lassoan provides more complete answer here are my thoughts

So grow from the seed should work well for yellow and blue boundary, as well as brown structure, if you apply an intensity masking along with it.

yellow green boundary is a lot more challenging, because I can’t see a feature that separates them in the lower right corner.

When you say grow from the seeds didnt work, how extensive seeding have you done? For example have you tried growth from the seed after you painted every 20 slice (like you are doing for fill between the slices).

Nowadays, deep learning can be solution for this type of challenging segmentations, but you do need some segmented data to start training a model.

1 Like

I agree, “Grow from seeds” should work, the only question is how much work it takes to provide sufficient seeds. If you need to paint a lot then “Fill between slices” may be more efficient.

You can make the segmentation workflow much faster by first segmenting all the muscles and recolor parts of that segment (using Masking settings / Editable area).

I agree that nowadays you would train a neural network to automate this. However, if you only have 30 images than that may be just enough to train the network. You can try setting up MONAILabel extension or an nn-Unet training and maybe you would get usable results after 10-20 segmentation cases, so you could save some time and get some experience with AI segmentation.

Thank you @muratmaga and @lassoan. I will try the MONAILabel extension as well