What is PyRPL?

PyRPL is short for the "Python Registration Prototyping Library" and it is exactly that - a Python package built to facilitate the rapid prototyping of image registration algorithms. The primary goal of PyRPL is to provide clear and simple access to efficiently built and well documented fundamental image registration components organized in an intuitive architecture. From those components PyRPL also offers pre-built implementations of a large number of published non-linear image registration models. PyRPL is built to appeal to users at multiple levels: medical imaging scientists who want to apply any of the many pre-built registration models to their data, image registration engineers who want to use the modular fundamental components to quickly realize and evaluate new registration models, and fine scale Python developers who are interested in expanding PyRPL's fundamental capabilities.

PyRPL Features

 - Ready to use pre-built implementations of many registration models:
   (click citation for pertinent literature)
        - Symmetric Interleaved Geodesic Shooting in Diffeomorphisms (SIGSID) [1]
        - Geodesic Regression in Diffeomorphisms (GRID) [2]
        - Geodesic Shooting in Diffeomorphisms (GSID) [3]
        - Large Deformation Diffeomorphic Metric Mapping (LDDMM) [4]
        - Symmetric Normalyzation (SyN) [5]
        - Fluid Registration [6]
        - Elastic Registration [7]

- Accessories for registration related tasks
        - Computing Jacobians
        - Composing deformations
        - Shooting geodesics

- Pre-implemented image matching functionals:
        - Mutual Information (MI)
        - Global Correlation Coefficient (GCC)
        - Local Correlation Coefficient (LCC)
        - Sum of Squared Differences (SSD)

- Pre-implemented regularizers:
        - Any differential operator of the form: (a \nabla^2 + b \nabla (\nabla \cdot) + c)^d 
        - Gaussian with arbitrary covariance

- Pre-implemented optimizers:
        - Gradient descent
        - Secant method with line search
        - Barzilai-Borwein method with backtracking line search

- Unit tests for image level components


PyRPL Architecture

PyRPL code is organized into four layers of abstraction:


This is more than just a concept - it is the highest level directory structure of the package. Every file in PyRPL is labeled by the layer to which it is a member and code within each layer is sufficiently abstracted from each other layer that components are easily interchangeable. PyRPL is designed so that developers can work at any level in the architecture having no knowledge of implementation details in the other layers - rendering the package accessible and easy to begin working with.