Case Study: Lacunae Analysis with ETH, Zurich

In collaboration with the Laboratory for Bone Biomechanics at the Institute for Biomechanics, ETH Zurich we used XamFlow to analyse lacunae in human bone.

“I’m astonished XamFlow could analyze my entire dataset in one day. I had previously planned one to two months of computation time for this analysis without XamFlow!” – Elliott Goff, Laboratory for Bone Biomechanics, ETH Zurich


  • 113 samples of human iliac crest bone biopsies

  • Cortical bone and trabecular bone scanned separately

  • 226 images

  • 10 to 18 GB per image

  • 3.5 TB image data in total

  • Over 24 million lacunae


Each image will be segmented using an individual threshold value. The threshold is calculated from a histogram of the image pixel values.


A finished ETH.Processing.LacunaeThreshold job shows a plot of the histogram used to determine the threshold.

Calculating the histogram in Python takes a lot of time and memory. Switching to out-of-core image processing tools like CLIP and LUPO allows processing the 18 GB images in seconds and without requiring 18 GB RAM.

Component Labeling

The threshold can now be used for the segmentation, and the connected components in the segments are labeled. These components can then be analysed to detect the lacunae. Each image contains on the order of ten to hundred thousand individual lacunae.

In the ETH.Processing.LacunaeDetectionAndMeasurement task type we again use out-of-core image processing tools to improve performance and reduce memory usage for these steps.


Lucid HPC Tools can process datasets larger than the available RAM, and require less time than the equivalent Python libraries.

The reduced memory requirements further permit analysis of multiple images in parallel.

This allowed us to finish the analysis for over 24 million lacunae in record time. The entire 3.5 TB dataset could be fully analysed in less than one day of computation on one worker.

Spawning Runs per Lacuna

See also Spawning new runs from a task type

The ETH.Processing.LacunaeDetection task type is similar to ETH.Processing.LacunaeDetectionAndMeasurement, but instead of performaning the entire analysis it spawns a new run for each component.

The ETH.Generic.LacunaParameters task type is automatically created in each run, to provide the required parameters. The ETH.Processing.LacunaCrop task type can then be used to crop and analyse the VOI containing one specific lacuna. This also enables various further possibilities, like appending task types for e.g. visualization and reporting:


XamFlow reporting tools allow creating charts, see Chart Report.


    1. Goff, F. Buccino, C. Bregoli and R. Müller. Ultra-high-resolution micro-CT imaging and high-throughput phenotyping of individual osteocyte lacunae in human bone. Abstracts XIVth Congress of the International Society of Bone Morphometry (ISBM), Orlando, USA, September 23-26, 2019.