our research


TomoLab: software for tomographic vision

This project is a Python 3.x porting of our previous project, which is now no longer actively supported.


TomoLab is (or will be) a tomographic reconstruction software for PET, PET-MRI and SPECT in 2D, 3D (volumetric) and 4D (spatio-temporal) for Python 3.x.

The software provides high-speed reconstruction using Graphics Processing Units (GPU).

Note: an NVidia CUDA-compatible GPU is required.

TomoLab can be utilized with arbitrary scanner geometries. It can be utilized for abstract tomographic reconstruction experiments to develop new algorithms and explore new system geometries, or to connect to real-world scanners, providing production quality image reconstruction with standard (MLEM, OSEM, Ordinary Poisson OSEM) and advanced algorithms.

TomoLab implements algorithms for motion correction (direct motion estimation), kinetic imaging, multi-modal reconstruction, respiratory and cardiac gated imaging. The source code contains Jupyter notebooks with examples.


  • Clone the official Github repo [] wherever you like, on your workstation.
  • Open a terminal window and cd to the main directory of the package (i.e. you should see the file from using ls)
  • [optional but recommended] Activate the virtual environment in which you plan to install TomoLab.
  • Execute pip install . (this will install the local version of the repo using pip, as this package is not yet available on the online server of PyPI)

If you have troubles with any of these steps, please just open an Issue on Github and we will try to sort it out.


In order to correctly load and use TomoLab you need to compile NiftyRec.

Please, follow the instructions provided in the repo to do that.

Once you are done compiling NiftyRec, you need to add it to your path, so that TomoLab is able to find it when it's imported. There are many ways you can do this, here's my suggestion:
  • Open the file ~/.bashrc in your favorite text editor
  • Add this line at the end of the file: export LD_LIBRARY_PATH=/lib:${LD_LIBRARY_PATH}
  • Start a new terminal session to load and use the edited ~/.bashrc file

Current status of the porting of (python 2.7) to TomoLab (python 3.x)

  • Reorganization of the code

    • integrating major (‘s) dependencies within the main TomoLab project
    • switching to relative imports throughout the code
    • consistently following PEP8 style rules
    • choosing a naming convention for modules, classes and variable (in therm of Captialization, usage of underscores, and so on) and keeping it consistent
  • Simulation

    • Several synthetic phantoms ready to be generated. A set of routines allow to create complex geometries (which may also be combined together by addition or subtraction), specifying the desired size and shape.
    • Prepared a documentation notebook to showcase synthetic phantom generation capabilities
    • Python 3.x interfaces to projection and backprojection operation successfully built on top of NityRec low level (C++, CUDA) libraries.
  • PET reconstruction

    • Static reconstruction using OSEM and MLEM
    • Implementing basic smoothing prior for OSL-MAP-OSEM
    • Dynamic Reconstruction
    • Class for efficiently handling 2D+t reconstruction (for research purpose)
    • Cyclic Scan Reconstruction, informed of motion information coming from MR vNAV data
  • MR reconstruction

    • Everything still needs to be checked after moving from python 2 to python 3
  • SPECT reconstruction

    • Everything still needs to be checked after moving from python 2 to python 3
  • CT reconstruction

    • CT reconstruction is not yet available. Anyway, it should be straightforward to leverage PE ray-tracing system for CT reconstruction, in the next future.
  • Image registration

    • [ ]
  • (PET and DCE-MRI) Kinetic modeling

    • [ ]


Getting started

Examples and demos of the features of TomoLab are in the /tomolab/Examples folder.

A better documentation, and instructions about the best order in which you can study those notebooks will come (hopefully) very soon.