SKM is an image registration software written in C++11
and implements the kernel machine for image registration published in Jud et al. [2016a, 2016b]
. The computational heavy transformation model is accelerated by executing it on the graphics processing unit where the parallel computing platform CUDA is used.
The software provides an image registration functionality in the spirit of the ITK registration framework (v3), where the computational heavy transformation, regularization, value and derivative computations are performed on the GPU. It can be included as a library into your own source code or be executed on the command line through the provided SKMReg
application. The software can be basically built for either 2d or 3d images which can be specified in the build process (see Installation).
The project has been tested with the following hardware/software configurations on Ubuntu 16.04
- NVIDIA GeForce GTX 970
- NVIDIA GeForce GTX 1080
- NVIDIA GeForce GTX TITAN X
- gcc 4.9.3
- cmake/ccmake 3.5.1
- git 2.7.4
- Nvidia Cuda 7.5 or 8.0 (Ubuntu packages: nvidia-cuda-dev nvidia-cuda-toolkit)
- Nvidia device drivers (Ubuntu package: nvidia-361)
- HDF5 (Ubuntu packages: libhdf5-cpp-11 libhdf5-dev)
git clone https://github.com/ChristophJud/SKMImageRegistration.git
cd SKMImageRegistration
mkdir build
mkdir install
cd build
ccmake ../superbuild
- Configure by pressing 'c'
- Set the number of space dimensions of your images (2 or 3)
- Set the installation directory
CMAKE_INSTALL_PREFIX
(e.g.<project_dir>/install
) - Set the installation directory of the dependencies
INSTALL_DEPENDENCIES_DIR
(e.g.<project_dir>/install/thirdparty
) - Reconfigure and generate by pressing 'g'
Compile the project:
make -j<num_cores - 1>
The project is automatically installed in the provided directories, thus no rule to make an install target is defined. The SKMReg
application can be found in <install_directory>/bin
.
The project depends on the Insight Toolkit (ITK), Json for Modern C++ and the BPrinter library, which are automatically built as external projects when running the cmake
superbuild.
Basically, there are three different sources of parameter values SKM uses. The first one are the default values which are hardcoded in the software (see ConfigUtils.h
). As a second source, parameter values can be provided through a json
file and finally each parameter can be also set by a command line argument. The different sources overwrite the values in the mentioned order.
Usual calls of SKM looks as follows:
SKMReg help
SKMReg version
SKMReg config_file /tmp/config.json
SKMReg config_file /tmp/config.json temp_directory /tmp/experiment
SKMReg reference_filename /tmp/ref.mhd target_filename /tmp/tar.mhd metric \"ncc\" reg_l1 "[1e-2, 1e-3, 1e-4]"
SKM writes severel intermediate results and the final results to the temp_directory
which should be created before calling SKM. The default location is /tmp/skm
. The final results are:
- Displacement field:
<temp_directory>/df.vtk
- Warped reference image:
<temp_directory>/warped.vtk
To look at the results and visualize them, you can e.g. use ParaView.
The project started in the Medical Image Analysis Center research group of the University of Basel, where we had to efficiently register abdominal image time series.
- Christoph Jud - initial work ([email protected])
- Benedikt Bitterli - cuda support
- Nadia Möri - mathematical support
- Robin Sandkühler - coding support
- Philippe C. Cattin - project support
SKM is licensed under the Apache 2.0 license. For details, consider the LICENSE and NOTICE file.
If you can use this software in any way, please cite us in your publications:
[2016a] Christoph Jud, Nadia Möri, and Philippe C. Cattin. "Sparse Kernel Machines for Discontinuous Registration and Nonstationary Regularization". In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops, pages 9-16, 2016. link
and/or
[2016b] Christoph Jud, Nadia Möri, Benedikt Bitterli and Philippe C. Cattin. "Bilateral Regularization in Reproducing Kernel Hilbert Spaces for Discontinuity Preserving Image Registration". In 7th International Conference on Machine Learning in Medical Imaging, 2016.
We released SKM to contribute to the community. Thus, if you find and/or fix bugs or extend the software please contribute as well and let us know or make a pull request.
SKM depends on several thirdparty open source project which are either linked as library or has been directly integrated into the source code. For details, consider the NOTICE file.