elastix: a configurable toolbox for registering one image onto another
Official elastix repository
At a glance
- What is it?
- elastix is an Apache-2.0 image registration toolbox built on the Insight Segmentation and Registration Toolkit, where the task is finding the spatial transformation that maps a fixed image onto a moving one. What makes it usable rather than academic is that the components are configurable and the whole thing runs from a command line.
- Who is it for?
- elastix fits a researcher who needs repeatable image registration, whether aligning scans for comparison, resampling an atlas onto a subject, or quantifying how much two images differ, and who wants a scriptable tool with a published parameter set rather than a library call. It does not fit someone who needs deep learning registration, and it does not fit a project that has to avoid the ITK dependency chain.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the problem actually is: finding a transformation between two images
The README describes elastix as a toolbox for rigid and nonrigid registration of images, and it defines the task precisely. Registration is finding a spatial transformation that maps one image, called the fixed image, to another, called the moving image, by optimising relevant image similarity metrics. The vocabulary of fixed and moving is the standard one in the field and it matters more than it first appears, because the two images are not interchangeable. The fixed image defines the coordinate system and the resolution of the result, and the moving image is the one that gets transformed into it. The software consists of a collection of algorithms commonly used for medical image registration, and the key claim is about the modular design, which lets a user quickly configure, test and compare different registration methods for a specific application. That is the difference between a research demo and a tool people use on real data.
A command line interface is the point, for batch processing
The README is explicit that a command-line interface enables automated processing of large numbers of data sets by means of scripting. For registration work that is the deciding feature, because the interesting cases are studies rather than images. Aligning a hundred volumes, or a thousand slices, needs the same pipeline applied consistently, and a library that you call from a script can do that but a binary that takes a parameter file is easier to make reproducible. The project is built on the Insight Segmentation and Registration Toolkit, and the repository layout shows a conventional CMake C++ project with a CMake directory, a Core directory, a Components directory and a Common directory, plus a Testing directory with a CTest configuration, a tools directory, a dox directory for the documentation, and package configuration templates. There is a pre-commit configuration and a clang-format file, so the code is formatted and checked automatically, and the presence of a pixi lock and manifest alongside the CMake build suggests the project also supports a pixi-based environment.
The wrappers are the reason a non-C++ user can use it
elastix itself is a C++ command line program, but the README points to a set of access routes that decide how you will actually use it. ITKElastix makes it available in Python and on PyPI as itk-elastix, which is the route most people take because it lets you compose a registration with the rest of an ITK pipeline in the same language. SimpleElastix makes it available in C++, Python, Java, R, Ruby, C# and Lua. A Docker image of the latest build is published on Docker Hub, and the repository carries a Dockerfile that shows the image is deliberately thin, built on ubuntu:20.04, adding only the libgomp1 package that elastix requires, copying the prebuilt binaries and libraries into the image, and copying the licence and notice files alongside them so the licensing travels with the image. Plugins also exist for graphical use, including a napari plugin and a 3D Slicer plugin.
The model zoo is the parameter set you should not write yourself
Two links in the README are worth more than the rest for a newcomer. The first is the model zoo, hosted at the LKML laboratory site, and the second is the extensive manual on the project wiki. Registration is a configuration problem before it is a coding problem. You pick a transformation model, which is the family of allowed deformations, a similarity metric, a sampling strategy, an optimizer and a number of resolutions to work through, and the quality of the result depends as much on those choices as on the algorithm. A model zoo gives you parameter files that were worked out for particular data, and the README also links a Model Zoo badge in the same spirit as the Docker one. The tutorials are offered as Jupyter notebooks through a Binder environment, which means you can run a worked registration example in the browser without installing anything locally.
Citing elastix, and the component-level citation that is separate
The README asks, directly, that if you use the software anywhere you cite specific articles, and it lists two. The first is the 2010 IEEE Transactions on Medical Imaging paper, elastix: a toolbox for intensity based medical image registration, by Klein, Staring, Murphy, Viergever and Pluim. The second is a 2014 Frontiers in Neuroinformatics paper on fast parallel image registration on CPU and GPU for diagnostic classification of Alzheimer's disease, by Shamonin, Bron, Lelieveldt, Smits, Klein and Staring. Then there is the nuance. The README notes that specific components of elastix are made by many people and that the relevant citation for a component is found separately in the wiki, and it points to the Zenodo DOI identifiers for referring to particular software releases. So there are three citation layers: the tool as a whole, the component you actually used, and the exact release, and the project asks for all three. The project is funded through the CZI Essential Open Source Software for Science program, which is worth knowing if you are deciding whether to depend on it.
A long-lived project with a clear lineage and a governance file
The project has a history that explains its structure. The lead developers are Stefan Klein and Marius Staring, the software was initially developed at the Image Sciences Institute under the supervision of Josien P.W. Pluim, and many others have contributed since. The repository makes that history concrete in the files it carries. There is a GOVERNANCE.md file at the root, a CODE_OF_CONDUCT.md, a CONTRIBUTING.md, a NOTICE file as well as the LICENSE, and a .gitmodules file, which points to the third-party components that are pulled in as submodules rather than vendored. The releases tell you how the project moves. Version 5.3.1 was tagged in March 2026, 5.3.0 in February 2026 and 5.2.0 in July 2024, so the 5.x line is stable and slow moving, which is the right shape for a tool that people cite in papers and run on data they cannot easily reproduce. The repository is not archived and the last push was on 2026-10-20, and the project also maintains a mailing list for questions.
Editorial conclusion
elastix fits a researcher who needs repeatable image registration, whether aligning scans for comparison, resampling an atlas onto a subject, or quantifying how much two images differ, and who wants a scriptable tool with a published parameter set rather than a library call. It does not fit someone who needs deep learning registration, and it does not fit a project that has to avoid the ITK dependency chain. Verify first which transformation model and metric you need, since the component pipeline is where the real configuration lives, use the model zoo parameter files rather than starting from scratch, and cite the software properly, since the README asks for it and the component-level citation is separate from the paper.
Frequently asked questions
What is elastix and what task does it perform?
It is a toolbox for rigid and nonrigid registration of images, based on the Insight Segmentation and Registration Toolkit. Registration is finding a spatial transformation that maps one image, the fixed image, to another, the moving image, by optimising image similarity metrics, and the modular design lets you configure, test and compare different registration methods for a specific application.
How do I use elastix from Python?
Through ITKElastix, which makes elastix available in Python and is published on PyPI as itk-elastix. There is also SimpleElastix, which exposes the functionality in C++, Python, Java, R, Ruby, C# and Lua, plus a Docker image and plugins for napari and 3D Slicer.
Does elastix need a manual to be usable?
The README points to an extensive manual and a model zoo on the wiki, and links interactive Jupyter notebook tutorials through Binder. The model zoo provides parameter files for particular data, which is the practical starting point since registration is a configuration problem before it is a coding problem.
What licence is elastix under and how should I cite it?
It is Apache-2.0, and the README asks that you cite the 2010 IEEE Transactions on Medical Imaging paper on intensity based medical image registration, or the 2014 Frontiers in Neuroinformatics paper on fast parallel image registration. Component-level citations are separate and live in the wiki, and Zenodo DOI identifiers refer to specific releases.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/superelastix-elastix)Was this useful?