List of (non-rigid) image registration projects for Python

Purpose

This is a curated list of Python projects for non-rigid (i.e. elastic) image registration. Currently, there is not a single library that stands out as the way to do image registration. This is in part because image registration is hard and there is a large variety of methods which is perhaps difficult to collect in a single library. But this is also because there has not been a collaborative effort to make such a library.

This website is a small step in unifying efforts related to image registration in Python by providing a single place to list the current projects and their status. It should give users who need tools for registration problems a better idea of what library they could best use. Further, developers who want to implement new tools have a better idea of what’s already out there, and what other developers they might collaborate with.

Contributing

If you know of a library/project that’s not listed here, or think that the information on this page is inaccurate, please help improve this site by making a contribution via the Github page.

The list


Scikit-Image

Scikit-Image is a popular and well-maintained image processing toolkit, which also provides a framework for finding the transform between images and using it to warp one image onto another.

Installation: available via conda.

SimpleITK

SimpleITK is a C++ library that has bindings for Python. See e.g. examples for B-spline and Demons.

Installation: via conda or pip.

PyElastix

PyElastix is a thin wrapper around the Elastix toolkit. Written in pure Python, so no compilation required.

Installation: pip or conda.

Nipy

Dipy includes methods for Diffeomorphic registration in 2D and 3D.

The nireg subopackage also provides functionality image registration. Need more info.

Installation: see instructions

SimpleElastix

SimpleElastix is an extension of SimpleITK that includes Elastix to offer more registration algorithms.

Installation: compilation is difficult, but there is an effort to put it on conda-forge.

PIRT

PIRT is a framework for exposing a variety of elastic registration algorithms via a common API, including Demons, a diffeomorphic (i.e. geometrically correct) variety of Demons, and more. The algorithms are written in Cython for speed, and therefore needs compilation. It’s a bit idiosyncratic, tied to visvis, and the original developer does not have time to maintain it mutch.

Installation: needs compilation

Python-register

python-register is a package for image registration built on top of scipy and numpy.

Installation: needs compilation

Silx

The Silx toolkit includes a GPU-based SIFT registration algorithm.

Installation: needs compilation?