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.
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.
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 is a C++ library that has bindings for Python. See e.g. examples for B-spline and Demons.
Installation: via conda or pip.
ITKElastix provides an ITK Python interface to Elastix, by the people from the ITK project. Installable via pip, with binary wheels available for all common platforms.
PyElastix is a thin wrapper around the Elastix toolkit. Written in pure Python, so no compilation required.
Installation: pip or conda.
Dipy includes methods for Diffeomorphic registration in 2D and 3D.
Installation: see instructions
nireg aims to be a dedicated pure-Python image registration package.
It is yet to be fully documented and made usable to dummy users.
ANTsPy is a Python library which wraps the C++ biomedical image processing library ANTs, which has registration capabilities. Some documentation is available, and it is yet to be fully documented.
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 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 were previously written in Cython, but are now implemented in Python, yet running at C-speed thanks to Numba, making installation easy. Not very actively maintained at the moment.
Installation: pip
python-register is a package for image registration built on top of scipy and numpy.
Installation: needs compilation
The Silx toolkit includes a GPU-based SIFT registration algorithm.
Installation: needs compilation?
GeFolki (Geoscience Extended FlOw Lucas- Kanade Iterative) is a coregistration method that has been developped in the framework of the MEDUSA project, first for SAR/SAR co-registration, then for other cases of remote sensing image coregistration, including hetergeneous image co-registration (ex LIDAR/SAR, optics/SAR, hyperspectral/optics and so on). It is an adaptation of an optical flow method. The method is implemented in both Python and MATLAB.
Installation: Just download the repo. Examples on how to use the modules are given.
spam (Software for Practical Analysis of Materials) contains a mature library of Digital Image Correlation and Digital Volume Correlation tools, including scripts and graphical tools for non-rigid 2D and 3D registraion as well as a multi-modal registration package, based on a fitting of the joint histogram rather than mutual information. Tutorials for registration and multi-modal registraion can be found from the homepage.
Installation: pip