SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration

Overview

SimpleITK

CircleCI ReadTheDocs AzurePipelines
release CircleCI ReadTheDoc Build Status
master CircleCI ReadTheDoc Build Status

SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit ITK with the intent of providing a simplified interface to ITK. SimpleITK itself is written in C++ but is available for a large number of programming languages. Currently these include:

Wrapping of the C++ code is accomplished through SWIG, in principle, any language wrapped by SWIG should be applicable to SimpleITK.

Unlike ITK's support of n-dimensional spatio-temporal images, SimpleITK supports 2D, 3D and 4D images. The dimensionality refers to spatio-temporal dimensions, the voxels can be n-dimensional vectors.

SimpleITK is licensed under the Apache License.

Acknowledgments

SimpleITK development has been supported by:

  • The Intramural Research Program of the National Institutes of Health, National Institute of Allergy and Infectious Diseases.

  • The US National Library of Medicine under the American Recovery and Reinvestment Act (ARRA) and under the Intramural Research Program of the U.S. National Institutes of Health.

  • The Insight Software Consortium and the ITK user and developer communities.

License and Copyright

The SimpleITK project is part of the Insight Software Consortium(ISC) a non-profit educational consortium dedicated to promoting and maintaining open-source, freely available software for bio-medical image analysis. The copyright is held by NumFOCUS. The SimpleITK software is distributed under the Apache License 2.0.

How to Cite

If you found SimpleITK useful in your research, support our efforts by citing the relevant publication(s):

R. Beare, B. C. Lowekamp, Z. Yaniv, "Image Segmentation, Registration and Characterization in R with SimpleITK", J Stat Softw, 86(8), https://doi.org/10.18637/jss.v086.i08, 2018.

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, https://doi.org/10.1007/s10278-017-0037-8, 2018.

B. C. Lowekamp, D. T. Chen, L. Ibáñez, D. Blezek, "The Design of SimpleITK", Front. Neuroinform., 7:45. https://doi.org/10.3389/fninf.2013.00045, 2013.

Documentation

With massive libraries like SimpleITK, good documentation is a must. The documentation for SimpleITK is split up into multiple levels:

  1. API Documentation - This contains class and function documentation. The descriptions for functions and classes are primarily borrowed from the original ITK C++ classes.
  2. SimpleITK Documentation - This site contains high-level guides (fundamental SimpleITK concepts, common conventions, etc.), details with respect to the toolkit's binary distributions, instructions for building the toolkit, as well as SimpleITK examples in all supported programming languages. [This site replaced the SimpleITK Wiki which is mostly of interest for historical reasons.]
  3. Juypyter Notebook Repository - This repository contains a collection of Jupyter Notebooks illustrating the use of SimpleITK for educational and research activities. The notebooks demonstrate the use of SimpleITK for interactive image analysis using the Python and R programming languages. Recommended reading, if you are starting with SimpleITK.

Support

SimpleITK provides access to most of the ITK components, but not all. If you are looking for something specific and can't find it, open an issue on GitHub or ask for support on the forum.

Report an Issue

Help us improve SimpleITK by reporting issues you encounter. When you report an error, you allow us to address your specific problem, but more importantly you are helping all of the SimpleITK community.

Thank you for helping making SimpleITK better!

All issues are reported and managed on the project's GitHub issue tracker. When reporting an issue, please provide as much information as possible to enable us to reproduce the problem.

The following information will allow us to address your issue in a timely manner:

  1. Error message (copy & pasted) and focused description of the problem.
  2. Operating system, and version (e.g. OSX 10.11.6).
  3. Programming language, and version (e.g. Python 2.7.14, R 3.2.3).
  4. Version of SimpleITK (e.g. 1.1.0), just invoke the SimpleITK Version() function.
  5. How did you install SimpleITK, binary distribution (e.g. conda install -c simpleitk simpleitk), or built it from source (e.g. devtools::install_github("SimpleITK/SimpleITKRInstaller")).
  6. A minimal working example which causes the error.
  7. If your code requires input, possibly point to a minimal sized input image.
Comments
  • Debian packaging

    Debian packaging

    I checked out the latest stable release (0.10.0) and attempted a build on Debian Stretch, which eventually failed. The relevant parts of the build log are pasted below. Same problem happens with the current tip of master.

    cmake .. -DBUILD_SHARED_LIBS=ON -DWRAP_PYTHON=OFF -DBUILD_TESTING=OFF
    -- The C compiler identification is GNU 6.2.1
    -- The CXX compiler identification is GNU 6.2.1
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Building SimpleITK version "0.10.0-g5c8b3"
    -- Performing Test CXX_HAS_stdcxx11
    -- Performing Test CXX_HAS_stdcxx11 - Success
    -- Checking if c++11 is required...
    -- Checking if c++11 is required... NO
    -- Performing Test CXX_HAS-Wall
    -- Performing Test CXX_HAS-Wall - Success
    -- Performing Test CXX_HAS-Wno-long-double
    -- Performing Test CXX_HAS-Wno-long-double - Failed
    -- Performing Test CXX_HAS-Wno-long-long
    -- Performing Test CXX_HAS-Wno-long-long - Success
    -- Performing Test CXX_HAS-Wno-unused-local-typedefs
    -- Performing Test CXX_HAS-Wno-unused-local-typedefs - Success
    -- Performing Test CXX_HAS-Wno-strict-overflow
    -- Performing Test CXX_HAS-Wno-strict-overflow - Success
    -- Performing Test CXX_HAS-Wextra
    -- Performing Test CXX_HAS-Wextra - Success
    -- Performing Test CXX_HAS-Wformat_2
    -- Performing Test CXX_HAS-Wformat_2 - Success
    -- Performing Test CXX_HAS-Wno-format-nonliteral
    -- Performing Test CXX_HAS-Wno-format-nonliteral - Success
    -- Performing Test CXX_HAS-Wunused
    -- Performing Test CXX_HAS-Wunused - Success
    -- Performing Test CXX_HAS-Wpointer-arith
    -- Performing Test CXX_HAS-Wpointer-arith - Success
    -- Performing Test CXX_HAS-Winvalid-pch
    -- Performing Test CXX_HAS-Winvalid-pch - Success
    -- Performing Test CXX_HAS-Wcast-align
    -- Performing Test CXX_HAS-Wcast-align - Success
    -- Performing Test CXX_HAS-Wdisabled-optimization
    -- Performing Test CXX_HAS-Wdisabled-optimization - Success
    -- Performing Test CXX_HAS-Woverloaded-virtual
    -- Performing Test CXX_HAS-Woverloaded-virtual - Success
    -- Performing Test CXX_HAS-Wshadow
    -- Performing Test CXX_HAS-Wshadow - Success
    -- Performing Test CXX_HAS-Wwrite-strings
    -- Performing Test CXX_HAS-Wwrite-strings - Success
    -- Performing Test CXX_HAS-Wstrict-null-sentinel
    -- Performing Test CXX_HAS-Wstrict-null-sentinel - Success
    -- Performing Test CXX_HAS-Wno-invalid-offsetof
    -- Performing Test CXX_HAS-Wno-invalid-offsetof - Success
    -- The imported target "vtkgdcm" references the file
       "/usr/lib/x86_64-linux-gnu/libvtkgdcm.so.2.6.6"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "vtkgdcmsharpglue" references the file
       "/usr/lib/x86_64-linux-gnu/libvtkgdcmsharpglue.so"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "vtkgdcmJava" references the file
       "/usr/lib/x86_64-linux-gnu/jni/libvtkgdcmJava.so"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "vtkgdcmPython" references the file
       "/usr/lib/python/dist-packages/libvtkgdcmPython.so"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "vtkgdcmPythonD" references the file
       "/usr/lib/x86_64-linux-gnu/libvtkgdcmPythonD.so.2.6.6"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmdump" references the file
       "/usr/bin/gdcmdump"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmdiff" references the file
       "/usr/bin/gdcmdiff"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmraw" references the file
       "/usr/bin/gdcmraw"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmscanner" references the file
       "/usr/bin/gdcmscanner"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmanon" references the file
       "/usr/bin/gdcmanon"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmgendir" references the file
       "/usr/bin/gdcmgendir"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmimg" references the file
       "/usr/bin/gdcmimg"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmconv" references the file
       "/usr/bin/gdcmconv"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmtar" references the file
       "/usr/bin/gdcmtar"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcminfo" references the file
       "/usr/bin/gdcminfo"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmscu" references the file
       "/usr/bin/gdcmscu"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmxml" references the file
       "/usr/bin/gdcmxml"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmpap3" references the file
       "/usr/bin/gdcmpap3"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- The imported target "gdcmpdf" references the file
       "/usr/bin/gdcmpdf"
    but this file does not exist.  Possible reasons include:
    * The file was deleted, renamed, or moved to another location.
    * An install or uninstall procedure did not complete successfully.
    * The installation package was faulty and contained
       "/usr/lib/x86_64-linux-gnu/gdcm-2.6/GDCMTargets.cmake"
    but not all the files it references.
    
    -- Performing Test SITK_HAS_CXX11_STATIC_ASSERT
    -- Performing Test SITK_HAS_CXX11_STATIC_ASSERT - Success
    -- Performing Test SITK_HAS_CXX11_FUNCTIONAL
    -- Performing Test SITK_HAS_CXX11_FUNCTIONAL - Success
    -- Performing Test SITK_HAS_CXX11_TYPE_TRAITS
    -- Performing Test SITK_HAS_CXX11_TYPE_TRAITS - Success
    -- Performing Test SITK_HAS_CXX11_UNORDERED_MAP
    -- Performing Test SITK_HAS_CXX11_UNORDERED_MAP - Success
    -- Performing Test SITK_HAS_CXX11_NULLPTR
    -- Performing Test SITK_HAS_CXX11_NULLPTR - Success
    -- Performing Test SITK_HAS_CXX11_UNIQUE_PTR
    -- Performing Test SITK_HAS_CXX11_UNIQUE_PTR - Success
    -- Performing Test SITK_HAS_CXX11_ALIAS_TEMPLATE
    -- Performing Test SITK_HAS_CXX11_ALIAS_TEMPLATE - Success
    -- Performing Test SITK_HAS_TR1_SUB_INCLUDE
    -- Performing Test SITK_HAS_TR1_SUB_INCLUDE - Success
    -- Performing Test SITK_HAS_TR1_FUNCTIONAL
    -- Performing Test SITK_HAS_TR1_FUNCTIONAL - Success
    -- Performing Test SITK_HAS_TR1_TYPE_TRAITS
    -- Performing Test SITK_HAS_TR1_TYPE_TRAITS - Success
    -- Performing Test SITK_HAS_TR1_UNORDERED_MAP
    -- Performing Test SITK_HAS_TR1_UNORDERED_MAP - Success
    -- Looking for C++ include stdint.h
    -- Looking for C++ include stdint.h - found
    doc_path: /usr/share/doc/ITK-4.10
    CMake Warning at CMakeLists.txt:305 (message):
      Unable to file ITK's NOTICE File!
    
       This file will not be included in SimpleITK packaging!
    
    
    -- Performing Test SITK_UNDEFINED_SYMBOLS_ALLOWED - Success
    -- Found Tclsh: /usr/bin/tclsh (found version "8.6") 
    -- Found Lua: /usr/bin/lua  
    -- Processing json files...
    -- Processing json files...done
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /tmp/SimpleITK/build
    
    make
    
    [ 78%] Building CXX object Code/BasicFilters/src/CMakeFiles/SimpleITKBasicFilters6.dir/sitkHistogramMatchingImageFilter.cxx.o
    In file included from /usr/include/ITK-4.10/itkHistogramMatchingImageFilter.h:22:0,
                     from /tmp/SimpleITK/build/Code/BasicFilters/src/sitkHistogramMatchingImageFilter.cxx:34:
    /usr/include/ITK-4.10/itkHistogram.h: In instantiation of ‘class itk::Statistics::Histogram<long int, itk::Statistics::DenseFrequencyContainer2>’:
    /usr/include/ITK-4.10/itkHistogramMatchingImageFilter.h:106:58:   required from ‘class itk::HistogramMatchingImageFilter<itk::Image<long int, 3u>, itk::Image<long int, 3u>, long int>’
    /tmp/SimpleITK/build/Code/BasicFilters/src/sitkHistogramMatchingImageFilter.cxx:151:32:   required from ‘itk::simple::Image itk::simple::HistogramMatchingImageFilter::ExecuteInternal(const itk::simple::Image&, const itk::simple::Image&) [with TImageType = itk::Image<long int, 3u>]’
    /tmp/SimpleITK/Code/Common/include/sitkDetail.h:39:36:   required from ‘TMemberFunctionPointer itk::simple::detail::MemberFunctionAddressor<TMemberFunctionPointer>::operator()() const [with TImageType = itk::Image<long int, 3u>; TMemberFunctionPointer = itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)]’
    /tmp/SimpleITK/Code/Common/include/sitkMemberFunctionFactory.hxx:59:7:   required from ‘typename itk::simple::EnableIf<itk::simple::IsInstantiated<TPixelIDType, VImageDimension>::Value>::Type itk::simple::detail::MemberFunctionInstantiater<TMemberFunctionFactory, VImageDimension, TAddressor>::operator()(TPixelIDType*) const [with TPixelIDType = itk::simple::BasicPixelID<long int>; TMemberFunctionFactory = itk::simple::detail::MemberFunctionFactory<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)>; unsigned int VImageDimension = 3u; TAddressor = itk::simple::detail::MemberFunctionAddressor<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)>; typename itk::simple::EnableIf<itk::simple::IsInstantiated<TPixelIDType, VImageDimension>::Value>::Type = void]’
    /tmp/SimpleITK/Code/Common/include/Ancillary/TypeList.h:337:5:   recursively required from ‘void typelist::Visit<TTypeList>::operator()(const Predicate&) [with Predicate = itk::simple::detail::MemberFunctionInstantiater<itk::simple::detail::MemberFunctionFactory<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)>, 3u, itk::simple::detail::MemberFunctionAddressor<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)> >; TTypeList = typelist::TypeList<itk::simple::BasicPixelID<unsigned char>, typelist::TypeList<itk::simple::BasicPixelID<short int>, typelist::TypeList<itk::simple::BasicPixelID<short unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<int>, typelist::TypeList<itk::simple::BasicPixelID<unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<long int>, typelist::TypeList<itk::simple::BasicPixelID<long unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<float>, typelist::TypeList<itk::simple::BasicPixelID<double>, typelist::NullType> > > > > > > > >]’
    /tmp/SimpleITK/Code/Common/include/Ancillary/TypeList.h:337:5:   required from ‘void typelist::Visit<TTypeList>::operator()(const Predicate&) [with Predicate = itk::simple::detail::MemberFunctionInstantiater<itk::simple::detail::MemberFunctionFactory<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)>, 3u, itk::simple::detail::MemberFunctionAddressor<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)> >; TTypeList = typelist::TypeList<itk::simple::BasicPixelID<signed char>, typelist::TypeList<itk::simple::BasicPixelID<unsigned char>, typelist::TypeList<itk::simple::BasicPixelID<short int>, typelist::TypeList<itk::simple::BasicPixelID<short unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<int>, typelist::TypeList<itk::simple::BasicPixelID<unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<long int>, typelist::TypeList<itk::simple::BasicPixelID<long unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<float>, typelist::TypeList<itk::simple::BasicPixelID<double>, typelist::NullType> > > > > > > > > >]’
    /tmp/SimpleITK/Code/Common/include/sitkMemberFunctionFactory.hxx:127:16:   required from ‘void itk::simple::detail::MemberFunctionFactory<TMemberFunctionPointer>::RegisterMemberFunctions() [with TPixelIDTypeList = typelist::TypeList<itk::simple::BasicPixelID<signed char>, typelist::TypeList<itk::simple::BasicPixelID<unsigned char>, typelist::TypeList<itk::simple::BasicPixelID<short int>, typelist::TypeList<itk::simple::BasicPixelID<short unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<int>, typelist::TypeList<itk::simple::BasicPixelID<unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<long int>, typelist::TypeList<itk::simple::BasicPixelID<long unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<float>, typelist::TypeList<itk::simple::BasicPixelID<double>, typelist::NullType> > > > > > > > > >; unsigned int VImageDimension = 3u; TAddressor = itk::simple::detail::MemberFunctionAddressor<itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)>; TMemberFunctionPointer = itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)]’
    /tmp/SimpleITK/Code/Common/include/sitkMemberFunctionFactory.h:123:5:   required from ‘void itk::simple::detail::MemberFunctionFactory<TMemberFunctionPointer>::RegisterMemberFunctions() [with TPixelIDTypeList = typelist::TypeList<itk::simple::BasicPixelID<signed char>, typelist::TypeList<itk::simple::BasicPixelID<unsigned char>, typelist::TypeList<itk::simple::BasicPixelID<short int>, typelist::TypeList<itk::simple::BasicPixelID<short unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<int>, typelist::TypeList<itk::simple::BasicPixelID<unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<long int>, typelist::TypeList<itk::simple::BasicPixelID<long unsigned int>, typelist::TypeList<itk::simple::BasicPixelID<float>, typelist::TypeList<itk::simple::BasicPixelID<double>, typelist::NullType> > > > > > > > > >; unsigned int VImageDimension = 3u; TMemberFunctionPointer = itk::simple::Image (itk::simple::HistogramMatchingImageFilter::*)(const itk::simple::Image&, const itk::simple::Image&)]’
    /tmp/SimpleITK/build/Code/BasicFilters/src/sitkHistogramMatchingImageFilter.cxx:55:73:   required from here
    /usr/include/ITK-4.10/itkHistogram.h:285:8: error: ‘bool itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::IncreaseFrequency(const MeasurementVectorType&, itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::AbsoluteFrequencyType) [with TMeasurement = long int; TFrequencyContainer = itk::Statistics::DenseFrequencyContainer2; itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::MeasurementVectorType = itk::Array<long int>; itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::AbsoluteFrequencyType = long unsigned int]’ cannot be overloaded
       bool IncreaseFrequency(
            ^~~~~~~~~~~~~~~~~
    /usr/include/ITK-4.10/itkHistogram.h:279:8: error: with ‘bool itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::IncreaseFrequency(const IndexType&, itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::AbsoluteFrequencyType) [with TMeasurement = long int; TFrequencyContainer = itk::Statistics::DenseFrequencyContainer2; itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::IndexType = itk::Array<long int>; itk::Statistics::Histogram<TMeasurement, TFrequencyContainer>::AbsoluteFrequencyType = long unsigned int]’
       bool IncreaseFrequency(const IndexType & index,
            ^~~~~~~~~~~~~~~~~
    Code/BasicFilters/src/CMakeFiles/SimpleITKBasicFilters6.dir/build.make:542: recipe for target 'Code/BasicFilters/src/CMakeFiles/SimpleITKBasicFilters6.dir/sitkHistogramMatchingImageFilter.cxx.o' failed
    make[2]: *** [Code/BasicFilters/src/CMakeFiles/SimpleITKBasicFilters6.dir/sitkHistogramMatchingImageFilter.cxx.o] Error 1
    CMakeFiles/Makefile2:619: recipe for target 'Code/BasicFilters/src/CMakeFiles/SimpleITKBasicFilters6.dir/all' failed
    make[1]: *** [Code/BasicFilters/src/CMakeFiles/SimpleITKBasicFilters6.dir/all] Error 2
    Makefile:149: recipe for target 'all' failed
    make: *** [all] Error 2
    
    opened by ghisvail 111
  • ENH: Support adding Elastix component by CMake SimpleITK_USE_ELASTIX=ON

    ENH: Support adding Elastix component by CMake SimpleITK_USE_ELASTIX=ON

    Originally copied files from https://github.com/SuperElastix/SimpleElastix by Kasper Marstal (@kaspermarstal). Specifically, files at Code/ElastixTransformixWrappers are copied from https://github.com/SuperElastix/SimpleElastix/tree/a7cf5bdde891cb61e79848ad1dbe181c48778317/Code/Elastix

    Added to GitHub Actions and Azure Pipelines.

    opened by N-Dekker 42
  • ResampleImageFilter hangs in SimpleITK 2 and multiprocessing within PyTorch

    ResampleImageFilter hangs in SimpleITK 2 and multiprocessing within PyTorch

    If sitk.ResampleImageFilter is executed using PyTorch multiprocessing capabilities, the program hangs. This doesn't happen with SimpleITK 1.

    I have created a minimal working example, runnable online on Google Colab, here: https://gist.github.com/fepegar/77a81c967c92a7c7f0a150cf0152940f

    If you run the notebook as it is, it should hang in the last cell. If you add !pip install "SimpleITK<2" at the beginning of the notebook and run it, it should work.

    Please let me know if you need any further information.

    Bug Report 
    opened by fepegar 39
  • N4biasFieldCorrection: Inputs do not occupy the same physical space!

    N4biasFieldCorrection: Inputs do not occupy the same physical space!

    when i use the N4 Correction filter,the error will occur with some image in windows(in linux never show). Before I call the function, I print the origin、spacing of the mask and image,they are totally the same.

    Even i do not write the mask image : output = corrector.Execute(input) some image will also return the error. RuntimeError: Exception thrown in SimpleITK N4BiasFieldCorrectionImageFilter_Execute: c:\d\vs14-win64-pkg\simpleitk-build\itk-prefix\include\itk-4.13\itkImageToImageFilter.hxx:241: itk::ERROR: SubtractImageFilter(00000246299BDE10): Inputs do not occupy the same physical space! InputImage Origin: [-9.0000000e+01, 1.2600000e+02, -7.2000000e+01], InputImage_1 Origin: [-2.2625000e+01, 2.7125000e+01, -2.2625000e+01] Tolerance: 1.0000000e-06 InputImage Spacing: [1.0000000e+00, 1.0000000e+00, 1.0000000e+00], InputImage_1 Spacing: [2.2625000e+01, 2.7125000e+01, 2.2625000e+01] Tolerance: 1.0000000e-06

    I use the filter in a loop,when I reduce the MaximumNumberOfIterations ,the error shows will delay(before reduce it occur in the second image, after it occur in the fourth image ) . I think maybe it is a memory access error in windows , my version is 1.2 , my visual studio is visual studio 2015

    Confirmed Bug 
    opened by gourdchen 37
  • Cran preparations main

    Cran preparations main

    Some changes resulting from my efforts to make the package pass the tests.

    Vignette had some old indexing examples that are no longer legal.

    A bug fix at about R 3.2 has changed how the "methods" package should be imported

    I need to do more about explicitly exporting stuff from the package, as there is a lot that is used internally. Some of the issues may be dealt with by the optional namespace file swig can create, but it is somewhat broken and will require post processing.

    opened by richardbeare 32
  • Discussion about documentation

    Discussion about documentation

    Hi, Can you please give some instructions to build doxygen documentation of the project? I tried passing -DBUILD_DOXYGEN:BOOL=ON to cmake superbuild but it doesn't seem to work:

    -- Configuring done   
    -- Generating done      
    CMake Warning:     
    CMake Warning:  
      Manually-specified variables were not used by the project:    
                                       
        BUILD_DOXYGEN                          
                                                                   
    -- Build files have been written to: /home/users/sasank/simpleitk_lua/bb/build
    

    I am thinking of using doxygen xml to create sphinx documentation using breathe.

    Thanks in Advance, Sasank.

    PS: It'll be great if you can also upload xml output of doxygen.

    opened by chsasank 27
  • Python bindings documentation

    Python bindings documentation

    I was only able to find PDF version here: https://readthedocs.org/projects/simpleitk/downloads/pdf/master/

    This is... less than ideal. It prevents me from being able to refer to your classes from documentation in my project. Also, PDF is just an all-around awful format for documentation in terms of searching, indexing etc.

    Is there any reason you aren't publishing HTML documentation?

    Question 
    opened by wvxvw 23
  • Python wrapper does not load in UBuntu-Mate for Raspberry Pi3

    Python wrapper does not load in UBuntu-Mate for Raspberry Pi3

    I am building SITK on a Raspberry Pi3 with UBuntu-Mat 16.04. I am using clang3.8 as the compiler. The library only builds under the following conditions: a.) Shared module library is enabled If I disable this, then when I build the Python wrapper it gives me a linker error. So, I presume there is some linker error here.

    When I build it with shared library mode enabled, the build and installation happens successflly. When I try to load the module in Python 3.5 (default version in UBuntu Mate), I get the following error:

    Type "help", "copyright", "credits" or "license" for more information.

    import SimpleITK Traceback (most recent call last): File "", line 1, in File "/home/Downloads/bin/SimpleITK/lib/SimpleITK.py", line 28, in _SimpleITK = swig_import_helper() File "/home/naths/Downloads/bin/SimpleITK/lib/SimpleITK.py", line 24, in swig_import_helper _mod = imp.load_module('_SimpleITK', fp, pathname, description) File "/usr/lib/python3.5/imp.py", line 242, in load_module return load_dynamic(name, filename, file) File "/usr/lib/python3.5/imp.py", line 342, in load_dynamic return _load(spec) ImportError: libSimpleITKBasicFilters13-0.10.so.1: cannot open shared object file: No such file or directory

    What could I be doing wrong here?

    opened by skn123 23
  • Error with Superbuild

    Error with Superbuild

    Hi. I just wanted to test last simpleITK, because the new release is coming soon. Had no time to look into this earlier, so sorry if I am a little bit late.

    When building master with homebrew, I get the following error

    -- Configuring done CMake Error in Code/Explicit/src/CMakeLists.txt: Target "SimpleITKExplicit" INTERFACE_INCLUDE_DIRECTORIES property contains path: "/tmp/simpleitk-20170405-63774-kll36r/sitk-build/ITK-prefix/include/ITK-4.11" which is prefixed in the source directory. -- Generating done

    This seems to be OK outside of homebrew. Maybe the error will give a hint of the problem.

    Confirmed Bug Won't Fix 
    opened by iMichka 21
  • Fix configuration error when Python wrapping is enabled

    Fix configuration error when Python wrapping is enabled

    3D Slicer often failed to build due to SimpleITK configuration error (mostly on Windows, when building in debug mode, see https://github.com/Slicer/Slicer/issues/5498) with this or similar messages:

      Performing configure step for 'SimpleITK'
      loading initial cache file C:/D/S4D/SimpleITK-prefix/tmp/SimpleITK-cache-Debug.cmake
      -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000.
      CMake Error at C:/Program Files/CMake/share/cmake-3.21/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
        Could NOT find Python3 (missing: Python3_EXECUTABLE Python3_LIBRARIES
        Python3_INCLUDE_DIRS Interpreter Development.Module) (Required is at least
        version "3.6")
      Call Stack (most recent call first):
        C:/Program Files/CMake/share/cmake-3.21/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
        C:/Program Files/CMake/share/cmake-3.21/Modules/FindPython/Support.cmake:3166 (find_package_handle_standard_args)
        C:/Program Files/CMake/share/cmake-3.21/Modules/FindPython3.cmake:485 (include)
        C:/D/S4D/VTK-build/lib/cmake/vtk-9.0/VTK-vtk-module-find-packages.cmake:303 (find_package)
        C:/D/S4D/VTK-build/lib/cmake/vtk-9.0/vtk-config.cmake:144 (include)
        C:/D/S4D/VTK-build/vtk-config.cmake:1 (include)
        C:/D/S4D/ITK-build/lib/cmake/ITK-5.2/Modules/ITKVtkGlue.cmake:30 (find_package)
        C:/D/S4D/ITK/CMake/ITKModuleAPI.cmake:76 (include)
        C:/D/S4D/ITK/CMake/ITKModuleAPI.cmake:31 (itk_module_load)
        C:/D/S4D/ITK/CMake/ITKModuleAPI.cmake:129 (_itk_module_config_recurse)
        C:/D/S4D/ITK-build/ITKConfig.cmake:80 (itk_module_config)
        SuperBuild.cmake:368 (find_package)
        CMakeLists.txt:39 (include)
      -- Configuring incomplete, errors occurred!
    
    

    The problem is that Slicer builds its Python interpreter that FindPython3.cmake cannot find, because it is not installed in a standard locations, because it does not get the Python3_EXECUTABLE hint. Slicer's build system sets Python3_EXECUTABLE in the top-level SimpleITK project, but the variable is not passed on to the internal SimpleITK-build project.

    The problem is fixed by passing on Python3_EXECUTABLE to the internal SimpleITK-build project (similarly to how SWIG_EXECUTABLE is passed).

    opened by lassoan 20
  • Support for Apple Silicon arm64 architecture in pip wheels

    Support for Apple Silicon arm64 architecture in pip wheels

    I was able to successfully compile SimpleITK from source on a new Apple Silicon M1 CPU, including Python wrapping. However, installing from pypi using pip fails.

    Steps to reproduce:

    • Apple MacBook Air 2020 with M1 CPU
    • macOS 11.2.3
    • Miniforge3-MacOSX-arm64
    conda create --name sitk python=3.8
    conda activate sitk
    conda install scikit-build
    CC=clang CXX=clang++ pip install simpleitk
    

    It fails with the following error:

    Undefined symbols for architecture arm64:
          "_png_init_filter_functions_neon", referenced from:
              _itk_png_read_filter_row in libitkpng-4.13.a(pngrutil.c.o)
        ld: symbol(s) not found for architecture arm64
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    Full output attached:
    sitk_pip_apple_silicon.log.zip

    opened by mlaves 20
  • Tests fail to run: Target

    Tests fail to run: Target "SimpleITKUnitTestBase" links to: GTest::GTest but the target was not found.

    
    CMake Error at Testing/Unit/TestBase/CMakeLists.txt:9 (target_link_libraries):
      Target "SimpleITKUnitTestBase" links to:
    
        GTest::GTest
    
      but the target was not found.  Possible reasons include:
    
        * There is a typo in the target name.
        * A find_package call is missing for an IMPORTED target.
        * An ALIAS target is missing.
    
    
    
    CMake Error at Testing/Unit/TestBase/CMakeLists.txt:29 (target_link_libraries):
      Target "sitkCompareDriver" links to:
    
        GTest::GTest
    
      but the target was not found.  Possible reasons include:
    
        * There is a typo in the target name.
        * A find_package call is missing for an IMPORTED target.
        * An ALIAS target is missing.
    

    The project was first built with -DBUILD_TESTING=OFF, then reconfigured with -DBUILD_TESTING=ON.

    simpleitk-2.2.1 googletest-1.12.1 clang-14 FreeBSD 13.1

    opened by yurivict 0
  • The test

    The test "Python.Test.ArrayView" is failing in CI.

    The test failure is producing the following output:

    1040: FAIL: test_arrayview_writable (__main__.TestNumpySimpleITKMemoryviewInterface.test_arrayview_writable)
    1040: Test correct behavior of writablity to the returned array view.
    1040: ----------------------------------------------------------------------
    1040: Traceback (most recent call last):
    1040:   File "/Users/blowekamp/src/SimpleITK/Testing/Unit/Python/sitkGetArrayViewFromImageTest.py", line 132, in test_arrayview_writable
    1040:     with self.assertRaises(ValueError):
    1040: AssertionError: ValueError not raised
    1040: 
    1040: ----------------------------------------------------------------------
    1040: Ran 5 tests in 0.072s
    

    It appears a.fill(0) is being executed on the read-only array view of the SimpleITK buffer.

    opened by blowekamp 2
  • Include the DicomImagePrintTags.py output in Sphinx docs

    Include the DicomImagePrintTags.py output in Sphinx docs

    Added sphinx_exec_code directive and used it to run the Python example as a subprocess in the rst file using the Image0075.dcm as input.

    Fixes issue #1798.

    opened by mbopfNIH 5
  • How may I select the chest CT series from multiple series

    How may I select the chest CT series from multiple series

    Suppose I have one directory (folder) for each patient, and each patient many have several series; for example, one patient have chest CT, head CT; while the other one has the abdominal CT and Chest CT. I have thousands of such patient. Is there any efficient method to read all chest CT for all patients?

    I found some common features of chest CT, it usually have the largest length and the size of each slice is usually below 800; so I write the following code to extract Chest CT:

    dtfile=NULL
    for (case_id in sampleNames) {
      data_directory = paste(
        "/Users/zhangzhongheng/Documents/2022/ARDS_CT_radiomics/ARDS影像",case_id,sep = "/")
      series_IDs = SimpleITK::ImageSeriesReader_GetGDCMSeriesIDs(data_directory) 
      series_file_names = NULL
      for (Series in series_IDs) {
        SeriesSel = Series
        series_file_names1 =
          ImageSeriesReader_GetGDCMSeriesFileNames(data_directory,Series)
        if(length(series_file_names1) > length(series_file_names) &
           length(series_file_names1) <= 160 &
           median(file.size(series_file_names1)/1024)<800){
        SeriesSel = Series
        series_file_names = series_file_names1
        }
        cat(".")
      }
      dtfile1 = NULL
    for (filename in series_file_names) {
      dtfile2 = data.frame("CaseID"=case_id,
                           "SerisID" = SeriesSel,
                           "fileName" = filename, 
                           "Size" = file.size(filename))
      dtfile1 = rbind(dtfile1,dtfile2)
      }
      dtfile1 <- dtfile1 %>% 
        dplyr::mutate(Size=round(Size/10240)) %>% 
        filter(abs(Size - median(Size))<2)
      dtfile <- rbind(dtfile,dtfile1)
      cat("#")
    }
    

    However, that does not work well for all patient, for some patient the abdominal series have greater number of slices than chest CT. So I would like to seek help here to see anyone may encounter similar issue.

    Question 
    opened by zh-zhang1984 5
  • FastMarchingUpwindGradient (Python) is broken as of 2.2

    FastMarchingUpwindGradient (Python) is broken as of 2.2

    Test script to run after installing SimpleITK 2.2.0 or 2.2.1:

    import SimpleITK as sitk
    
    sitkImg = sitk.GridSource()
    trialPoints = [(0, 0, 0)]
    targetPoints = [(2, 0, 10)]
    gradientImg = sitk.FastMarchingUpwindGradient(sitkImg, trialPoints, 1, targetPoints)
    print("successfully obtained gradient image")
    

    Resulting output:

    Traceback (most recent call last): File "/home/agilman/test/simpleitk/./sitk_test.py", line 8, in <module> gradientImg = sitk.FastMarchingUpwindGradient(sitkImg, trialPoints, 1, targetPoints) File "/home/agilman/test/simpleitk/venv/lib/python3.9/site-packages/SimpleITK/SimpleITK.py", line 26008, in FastMarchingUpwindGradient return _SimpleITK.FastMarchingUpwindGradient(*args, **kwargs) RuntimeError: Exception thrown in SimpleITK FastMarchingUpwindGradient: /tmp/SimpleITK-build/ITK-prefix/include/ITK-5.3/itkFastMarchingUpwindGradientImageFilter.h:267: ITK ERROR: FastMarchingUpwindGradientImageFilter(0x5633f9ea66f0): No target point set. Cannot set the target reached mode.

    With SimpleITK 2.1.1.2, the success message is printed.

    Bug Report Confirmed Bug 
    opened by alex-gilman 2
Releases(latest)
Napari 3D Ortho Viewer - an ortho viewer for napari for 3D images

napari-3d-ortho-viewer Napari 3D Ortho Viewer - an ortho viewer for napari for 3D images This napari plugin was generated with Cookiecutter using @nap

niklas netter 5 Nov 28, 2022
Photini - A free, easy to use, digital photograph metadata (Exif, IPTC, XMP) editing application for Linux, Windows and MacOS.

A free, easy to use, digital photograph metadata (Exif, IPTC, XMP) editing application for Linux, Windows and MacOS. "Metadata" is said to mea

Jim Easterbrook 120 Dec 20, 2022
Generate waves art for an image

waves-art Generate waves art for an image. Requirements: OpenCV Numpy Example Usage python waves_art.py --image_path tests/test1.jpg --patch_size 15 T

Hamza Rawal 18 Apr 04, 2022
3D Reconstruction Software

Meshroom is a free, open-source 3D Reconstruction Software based on the AliceVision Photogrammetric Computer Vision framework. Learn more details abou

AliceVision 8.7k Jan 02, 2023
A Toolbox for Image Feature Matching and Evaluations

This is a toolbox repository to help evaluate various methods that perform image matching from a pair of images.

Qunjie Zhou 342 Dec 29, 2022
Tweet2Image - Convert tweets to Instagram-friendly images.

Convert tweets to Instagram-friendly images. How to use If you want to use this repository as a submodule, don't forget to put the fonts d

Janu Lingeswaran 1 Mar 11, 2022
Console images in 48 colors, 216 colors and full rgb

console_images Console images in 48 colors, 216 colors and full rgb Full RGB 216 colors 48 colors If it does not work maybe you should change color_fu

Урядов Алексей 5 Oct 11, 2022
Computational Xmas Tree lights!

Computational Xmas Tree This repo contains the code for the computational illumination of a Christmas Tree! It is based on the work by Matt Parker fro

GSD6338 146 Dec 23, 2022
Fast Image Retrieval (FIRe) is an open source image retrieval project

Fast Image Retrieval (FIRe) is an open source image retrieval project release by Center of Image and Signal Processing Lab (CISiP Lab), Universiti Malaya. This project implements most of the major bi

CISiP Lab 39 Nov 25, 2022
kikuchipy is an open-source Python library for processing and analysis of electron backscatter diffraction (EBSD) patterns

kikuchipy is an open-source Python library for processing and analysis of electron backscatter diffraction (EBSD) patterns. The library builds on the

pyxem 53 Dec 29, 2022
QR-code Generator with a basic GUI.

Qr_generator_python Qr code generator with a basic GUI. ❔ About the QR-Code-Generator This project Generates QR codes to sites, e-mails and plain text

Tecixck 2 Oct 11, 2021
Short piece of code to create a rainbow gif of gradual contours from two shapefiles

rainbow-elevation-gif Short piece of code to create a rainbow gif of gradual con

Jess Roberts 6 Jan 17, 2022
Digital image process Basic algorithm

These are some basic algorithms that I have implemented by my hands in the process of learning digital image processing, such as mean and median filtering, sharpening algorithms, interpolation scalin

JingYu 2 Nov 03, 2022
QR fixer part is standalone but for image to FQR conversion

f-qr-fixer QR fixer part is standalone but for image to FQR conversion it requires Pillow (can be installed with easy_install), qrtools (on ubuntu the

2 Nov 22, 2022
clesperanto is a graphical user interface for GPU-accelerated image processing.

clesperanto is a graphical user interface for a multi-platform multi-language framework for GPU-accelerated image processing. It is based on napari and the pyclesperanto-prototype.

1 Jan 02, 2022
Depix is a tool for recovering passwords from pixelized screenshots.

This implementation works on pixelized images that were created with a linear box filter. In this article I cover background information on pixelization and similar research.

23.1k Jan 04, 2023
Utilities for SteamVR on Linux

This project contains scripts to improve the functionally of SteamVR on Linux:

86 Dec 29, 2022
粉專/IG圖文加工器

粉專/IG圖文加工器 介紹 給PS智障(ex:我)使用,用於產生圖文 腳本省去每次重複步驟 可載入圖片(方形,請先處理過,歡迎PR) 圖片簡易套用濾鏡 可將圖片切片 要求 Python 版本 3.9 安裝 安裝最新 python pip3 install -r requirement.txt 效果

Louis Tang 7 Aug 10, 2022
A Blender add-on to create interesting meshes using symmetry

Procedural Symmetries This Blender add-on automates the process of iteratively applying a set of reflection planes to a base mesh. The result will con

1 Dec 29, 2021