Segmenting Circular Objects that are touching multiple other objects

imagej
segmentation
material-science

#1

Hello,

I am attempting to size microspheres that I have imaged on TEM. The microspheres are touching multiple other microspheres and I am having difficulty segmenting/thresholding the objects to maintain the original size of the microsphere. I either have the problem of the negative space becoming the main focus of the particle analysis, or I have thresholded the image so much that the particle size is no longer accurate.

In other programs, there is the ability to automatically draw circles around an object based on the circularity of part of that that object. Is that ability available in ImageJ?

Thank you.


#2

Hello @smithd10,

Are all microspheres of the same size and you would like to get one number per image or a size for each microsphere.

If you need one number per image you could probably segment the white part in between and compute the diameter based on the distance between the white “triangles”.


#3

Your data is very clean! So this actually seems like a really straightforward autosegmentation to me.

Here is a macro:

setAutoThreshold("MaxEntropy");
run("Create Mask");
run("Close-");
run("Watershed");
setForegroundColor(255,255,255);
drawRect(0, 0, getWidth(), getHeight());
run("Analyze Particles...", " size=100-Infinity circularity=0.5-1.0 exclude add");
close();
resetThreshold();
roiManager("Show All");
roiManager("Show All");
roiManager("Measure");

Here is the resulting segmentation:

With measurements:

I built this up by following the general Segmentation workflow and using the Macro Recorder.


#4

Hmm, that’s an interesting idea! I’ll keep that in mind for when scenarios like this come up again in the future.

Thanks for the input @tibuch!


#5

If you would like to have more precise measurements you can use the Ellipse split plugin:

Here is a macro:

setAutoThreshold("Default dark");
setAutoThreshold("Default");
setOption("BlackBackground", true);
run("Convert to Mask");
run("Ellipse Split", "binary=[Use standard watershed] add_to_manager add_to_results_table remove merge_when_relativ_overlap_larger_than_threshold overlap=95 major=0-Infinity minor=0-Infinity aspect=1-Infinity");

And this is the result:


Fractal box counts