SimpleITK
![]() SimpleITK Logo | |
Developer(s) | Insight Software Consortium |
---|---|
Stable release | 2.3.0 / 13 September 2023 |
Written in | C++, Python, R, Java, C#, Lua, Ruby, Tcl |
Operating system | Cross-platform |
Type | Library for image analysis |
License | Apache 2.0 |
Website | www |
SimpleITK is a simplified, open-source interface to the Insight Segmentation and Registration Toolkit (ITK). The SimpleITK image analysis library is available in multiple programming languages including C++, Python, R,[1] Java, C#, Lua, Ruby and Tcl. Binary distributions are available for all three major operating systems (Linux, macOS and Microsoft Windows).
Developed at the National Institutes of Health (NIH) as an open resource, its primary goal is to make the algorithms available in the ITK library accessible to the broadest range of scientists whose work includes image analysis, irrespective of their software development skills.[2] As a consequence, the SimpleITK interface exposes only the most commonly modified algorithmic settings of the ITK components. Additionally, the library provides both an object oriented and a procedural interface to most of the image processing filters. The latter enables image analysis workflows with concise syntax. A secondary goal of the library is to promote reproducible image analysis workflows[3] by using the SimpleITK library in conjunction with modern tools for reproducible computational workflows available in the Python (Jupyter notebooks) and R (knitr package ) programming languages.
Software development is centered on GitHub using a fork and pull model. The project is built using the CMake tool, with nightly builds posted to the project's quality dashboard.
Multiple medical image analysis applications and libraries incorporate SimpleITK as a key building block, as it provides a wide range of image filtering and image IO components with a user friendly interface. Examples include the pyOsirix[4] scripting tool for the popular Osirix application, the pyradiomics python package for extracting radiomic features from medical imaging,[5] the 3DSlicer image analysis application, the SimpleElastix medical image registration library,[6] and the NiftyNet deep learning library for medical imaging.[7]
History
[edit]The initial development of SimpleITK was funded by the United States National Library of Medicine under the American Recovery and Reinvestment Act (ARRA) program as a collaboration between The Mayo Clinic, Kitware Inc, The University of Iowa and NLM's intramural program. The first major release of the toolkit was announced in April-May 2017. The second major release was announced in September 2020.
Between 2013 and 2019, SimpleITK development was primarily carried out as part of the intramural research program of the National Library of Medicine with collaborators at The University of Iowa and Monash University. Since 2019, SimpleITK development is primarily carried out under the Office of Cyber Infrastructure and Computational Biology at the National Institute of Allergy and Infectious Diseases. In April 2020 the toolkit changed its logo to a more modern design.
Examples
[edit]Gaussian smoothing
[edit]Short Python scripts illustrating image reading, blurring, and writing. Using the object oriented interface:
import SimpleITK as sitk import sys if len(sys.argv) < 4: print("Usage: SimpleGaussian <input> <sigma> <output>") sys.exit(1) reader = sitk.ImageFileReader() reader.SetFileName(sys.argv[1]) image = reader.Execute() pixelID = image.GetPixelID() gaussian = sitk.SmoothingRecursiveGaussianImageFilter() gaussian.SetSigma(float(sys.argv[2])) image = gaussian.Execute(image) caster = sitk.CastImageFilter() caster.SetOutputPixelType(pixelID) image = caster.Execute(image) writer = sitk.ImageFileWriter() writer.SetFileName(sys.argv[3]) writer.Execute(image)
A more concise version using the procedural interface:
import SimpleITK as sitk import sys if len(sys.argv) < 4: print("Usage: SimpleGaussian <input> <sigma> <output>") sys.exit(1) image = sitk.ReadImage(sys.argv[1]) pixelID = image.GetPixelID() image = sitk.Cast(sitk.SmoothingRecursiveGaussian(image, float(sys.argv[2])), pixelID) sitk.WriteImage(image, sys.argv[3])
Multi-modality Rigid Registration
[edit]Short R script illustrating the use of the library's registration framework for rigid registration of two 3D images:
library(SimpleITK) args = commandArgs( trailingOnly=TRUE ) if( length( args ) < 2 ) { cat( "Usage: registration <fixed_image> <moving_image> <output_transform>\n" ) quit( save="no", status=1 ) } fixed_image <- ReadImage( args[1], "sitkFloat32" ) moving_image <- ReadImage( args[2], "sitkFloat32" ) initial_transform <- CenteredTransformInitializer( fixed_image, moving_image, Euler3DTransform(), "GEOMETRY" ) reg <- ImageRegistrationMethod() reg$SetMetricAsMattesMutualInformation( numberOfHistogramBins=50 ) reg$SetMetricSamplingStrategy( "RANDOM" ) reg$SetMetricSamplingPercentage( 0.01 ) reg$SetInterpolator( "sitkLinear" ) reg$SetOptimizerAsGradientDescent( learningRate=1.0, numberOfIterations=100 ) reg$SetOptimizerScalesFromPhysicalShift() reg$SetInitialTransform( initial_transform, inPlace=FALSE ) final_transform <- reg$Execute( fixed_image, moving_image ) WriteTransform( final_transform, "final_transform.tfm" )
References
[edit]- ^ R. Beare, B. C. Lowekamp, Z. Yaniv, “Image Segmentation, Registration and Characterization in R with SimpleITK”, J Stat Softw, 86(8), 2018, doi:10.18637/jss.v086.i08.
- ^ B. C. Lowekamp, D. T. Chen, L. Ibáñez, D. Blezek, "The Design of SimpleITK", Front. Neuroinform.,7:45, 2013, doi:10.3389/fninf.2013.00045.
- ^ Z. Yaniv, B. C. Lowekamp, H.J. Johnson, R. Beare, "SimpleITK Image-Analysis Notebooks: a Collaborative Environment for Education and Reproducible Research", J Digit Imaging., 31(3):290-303, 2018, doi: 10.1007/s10278-017-0037-8.
- ^ M. D. Blackledge, D. J.Collins, D-M Koh, M. O. Leach, "Rapid development of image analysis research tools: Bridging the gap between researcher and clinician with pyOsiriX", Comput Biol Med., 69:203-212, 2016, doi: 10.1016/j.compbiomed.2015.12.002
- ^ J. J. M. van Griethuysen, A. Fedorov, C. Parmar, A. Hosny, N. Aucoin, V. Narayan, R. G. H. Beets-Tan, J. C. Fillon-Robin, S. Pieper, H. J. W. L. Aerts, "Computational Radiomics System to Decode the Radiographic Phenotype", Cancer Research, 77(21): e104–e107, 2017, doi: 10.1158/0008-5472.CAN-17-0339
- ^ K. Marstal, F. Berendsen, M. Staring, S. Klein, "SimpleElastix: A User-Friendly, Multi-lingual Library for Medical Image Registration", IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW), 574-582, 2016, doi:10.1109/CVPRW.2016.78
- ^ E. Gibson, W. Li, C. Sudre, L. Fidon, D. I. Shakir, G. Wang, Z. Eaton-Rosen, R. Gray, T. Doel, Y. Hu, T. Whyntie, P. Nachev, M. Modat, D. C. Barratt, S. Ourselin, M. J. Cardoso, T. Vercauteren, "NiftyNet: a deep-learning platform for medical imaging", Comput Methods Programs Biomed., 158:113-122, 2018, doi: 10.1016/j.cmpb.2018.01.025
External links
[edit]- Official website.
- SimpleITK: A Simplified Path to Insight - an online tutorial using Jupyter notebooks in Python.
- Organization on GitHub
- Short examples illustrating how to use some of the library components are available on read the docs.
- Class and procedure documentation is available via Doxygen.
- Jupyter notebooks on GitHub with long and extensively documented examples, useful for learning and teaching how to work with SimpleITK.
- Get help, post questions on the ITK discussion forum.