pyimreg.github.com

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.

dipy

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

Installation: see instructions

nireg

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

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

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 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

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?

GeFolki

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.