How to get Coordination Number in Granular Pack?

Hello everyone,
I am wondering how to get coordination number (average number of contacts a grain can have with the neighbors) from a micro-CT image of a granular pack. A brief overview will be highly appreciated. Thank you so much guys.


Welcome to the forum, @Zubair!

Could you please post a sample image, and a brief description of the numbers you expect to extract from it? That will help us give more effective suggestions for the analysis.

Hello @ctrueden,

Thanks for your reply. I have a stack of images of a granular pack (like the following example).

I have just started ImageJ and still exploring it. So far after some studies, the following steps I am considering to do. Please let me know if you have any suggestion which of the options in ImageJ would be best to use in the steps or any modifications.

  1. Separate the individual grains from the background and contact points from the neighbors and label them.
  2. reestablish the contacts
  3. find the number of contacts from the common voxels (tagged for each grain) a grain shares with its neighbors.



Thanks for the example image.

So, you want to do this in 3D? What constitutes a “neighbor”? Does it have to be within a certain distance?

One possible (naive!) workflow might be:

  • Segment the grains
  • Reduce grains to their center points (Process :arrow_forward: Binary :arrow_forward: Ultimate Points)
  • Compute the 3D Voronoi diagram of those points; the neighbors of the Voronoi regions will be the neighboring grains.

Hopefully, other more skilled image analysts will jump in here with other ideas.