SimpleITK: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
No edit summary
No edit summary
 
(291 intermediate revisions by 13 users not shown)
Line 1: Line 1:
'''Simple ITK'''
{{SimpleITKMigrationHeader}}


= Goals =
[[Image: SimpleITK-SquareTransparentLogo.png|center]]


* Provide an easy-access layer to ITK for non-C++ expert developers
=Overview=


= Examples of Other Librarires =
Welcome to the National Library of Medicine Insight Segmentation and Registration Toolkit (ITK). [http://www.itk.org/ ITK] is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. Among them, SimpleITK is a simplified layer built on top of ITK, intended to facilitate its use in rapid prototyping, education, interpreted languages. SimpleITK has the following main characteristics:


* CIMG: http://cimg.sourceforge.net
* C++ library with wrappers for Python, Java, CSharp, R, Tcl and Ruby
* Object-oriented
* Provides a simplified, easy-to-use, procedural interface without templates
* Is distributed under an open source Apache 2.0 License
* Binary distributions for Python, Java and CSharp


= Sandbox =
SimpleITK captures many of features available in ITK, and is under ongoing development. Earlier in the development process a set of [[SimpleITK/Goals|Specific Goals]] were outlined.


* Dan's: http://github.com/dblezek/SimpleITK (This is currently the "unofficial" SimpleITK repository)
= How to Cite =
* Gabe's: http://github.com/gabehart/SimpleITK (Experiments with multi-image filters, e.g. AddImage)
* Brad's: http://github.com/blowekamp/SimpleITK (Meta-programming experiment)


= Scope =
If you find SimpleITK useful in your research, please cite the relevant publications:
== Current open questions ==
* Internal execution mechanism
** switch statement, supported by macros
** Factory mechanism, new image types could be added at runtime
** Meta-programming
* Datatypes
** What to support "out of the box"?
** How easy/difficult to add new datatypes to a build?
* Compile times
** Templates radically extend CPU and memory requirements
* Library size / scope
** Custom SWIG files vs. automatically generated SWIG
** Automation for SimpleITK facade generation from ITK classes?


== Suggested Areas to Cover ==
* Lowekamp BC, Chen DT, Ibáñez L and Blezek D (2013) [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3874546/pdf/fninf-07-00045.pdf The Design of SimpleITK]. Front. Neuroinform. 7:45. doi: 10.3389/fninf.2013.00045


* IO
* 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., https://doi.org/10.1007/s10278-017-0037-8, 2017. (you can freely read the manuscript [http://em.rdcu.be/wf/click?upn=KP7O1RED-2BlD0F9LDqGVeSIWDx8-2B-2B8r81HkSA5fUW53U-3D_kZYp45lAKoeuSXKlMMKnLRu-2FO1jcvtAwo2UFz30PH9bPLAejS1IjjDkfGx8EIWfnvmrgAH2RF3xvrb1fezqultdVNEEAM7Fc2RGY-2BOVhjR-2BAN-2B7Wi6qUoM6BYtn1ZWsTzFdNZQxBXXJ2Nf0BaU5NhQLQVs2hoM2TXsKZ7pnKQXZVJEAOyLbQSvZkJOvdc7Gk36rdNDa3pn5vH17-2FvszYj4mKlZlgROxTE-2Be2yQ-2FOLAYsoDHZNvVuG4vJr4xNpQnmAI16Nz8h3GJi-2F9GKnpBsAg-3D-3D. here])  
* Basic Filters
* Registration
** Basic Framework
** Deformable registration
*** BSplines
*** Demons
* Segmentation
** Region Growing
** Level Sets
** Classifiers
* Meshes ? (Not Yet)


== Types ==


* Image pixel types supported
** int8_t
** int16_t
** int32_t
** float
* Image dimensions supported
** 3D
** Is 2D managed as a 3D image of 1 slice ?
*** Performance penalty for neighborhood filters... ?
*** Could be "2D" versions of 3D filters, i.e. RecursiveGaussianFilter2D.  This would work on a slice-by-slice basis.


== Languages ==
= Getting Started =
Wrapped languages will be any that SWIG supports, if someone is willing to write tests / any needed glue code.
* C++ Layer
* Python
* Lua
* Java
* ?


= Implementation Details =
* [[SimpleITK/GettingStarted|Getting Started For Users]]
** [[SimpleITK/GettingStarted#Binaries|downloading the binaries]]
** [[SimpleITK/GettingStarted#Build_It_Yourself|build the code yourself]]
** [[SimpleITK/GettingStarted#Recommended_Software|additional software]] which is useful with SimpleITK
* [[SimpleITK/GettingStarted/Visual_guide_to_building_on_Linux|A Visual Guide to Building SimpleITK on Linux]]
* [[SimpleITK/GettingStarted/A_visual_guide_to_SimpleITK_in_Java|A Visual Guide to SimpleITK with Java and Eclipse]]
* [[SimpleITK/GettingStarted/A_visual_guide_to_SimpleITK_with_CSharp|A Visual Guide to SimpleITK with CSharp on Microsoft Visual Studio]]


* Coding Style
== Download ==
** Copyright Headers & License
* Const correctness (can we avoid using const's completely?)
* Testing
** C++ testing (Google Test?)
** Python tests (PyUnit?)
** Lua tests (?!?)
** Java tests (JUnit)
** ? other languages ?
* Managing basic types
** Arrays
** Regions
** Transforms
* Not so basic types (could these be enums passed as ivars?)
** Interpolators
** Optimizers
** Metrics


= Plan =
SimpleITK currently provides binary distribution for Python, CSharp and Java language bindings.
You can download the [https://sourceforge.net/projects/simpleitk/files/SimpleITK/1.0.0/ 1.0.0 release from SourceForge].


* Image classes
= Documentation =
* IO


= TCons =
* [[SimpleITK/FAQ|Frequently Asked Questions (FAQ)]]
== Tcon topics 7/15/2010 ==
Toll-Free #:      1-800-704-9804
International #:  1-404-920-6604
Participant Code: 61466276
Thursday, July 15th, 3:30-5:00pm EDT
(2:30-4:00pm Central).


* General architecture
== API ==
* Wrapping efficiency
* Should SimpleITK be mixable with normal ITK ?
** At C++ level ?
** At WrapITK (Python, Tcl ) level ?
** Provide access to the underlying ITK image ?
* SimpleImage class
** Include casting to other image types.
** Introduce in ITK an itk::ImageBase class that is not templated over Dimension.
* Use Pointer semantics ?
** image->getDepth() vs image.getDepth()


* What kind of flexibility to provide for Users to add functionalities to SimpleITK
* Nightly generated [https://www.itk.org/SimpleITKDoxygen/html/ Doxygen].
** It should be easy to write (even if the class is conceptually complex).
* Release 1.0 [https://www.itk.org/SimpleITKDoxygen100/html/index.html Doxygen].
** User says : "I need this data type X..."
* Release 0.10 [https://www.itk.org/SimpleITKDoxygen010/html/index.html Doxygen].
*** Then, how hard is for the developer of SimpleITK classes to satisfy the user's request.
* Release 0.9 [https://www.itk.org/SimpleITKDoxygen09/html/index.html Doxygen].
* Release 0.8 [https://www.itk.org/SimpleITKDoxygen08/html/index.html Doxygen].
* Release 0.7 [https://www.itk.org/SimpleITKDoxygen07/html/index.html Doxygen].
* Release 0.6.1 [https://www.itk.org/SimpleITKDoxygen06/html/ Doxygen].


* Design a Simple calling convention
== Short Examples ==
** Procedural-like notation...
** out = Gaussian().setSigma(2).execute(image)
** out = Gaussian( image, 2 )
** Gaussian gaussian( 2 ) // sigma as argument to the constructor
** gaussian( "Sigma",2, "Width", 2 );  // arguments packed as key,value pair
** Add introspection to ITK proper
*** All filters provide a list of "Key, Type" pairs
*** SetParameter( "parameterName", parameterValue );


== Tcon topics 7/16/2010 ==
Concise [https://itk.org/SimpleITKDoxygen/html/examples.html examples] illustrating the usage of various SimpleITK features. Examples are written in a variety of languages including Python, R, C++, Java...


== SimpleITK Notebooks ==


* IO class to combine ImageFileReader and ImageSeriesReader into a single class.
The SimpleITK Notebooks are examples and tutorials on how to use SimpleITK utilizing Jupyter Notebooks. This approach allows the user to create, edit and re-run scripts and view the results all within a web interface. The authoritative description of what Jupyter Notebooks are can be found on the [http://jupyter.org/ Jupyter website]. While SimpleITK supports a number of programming languages, the majority of notebooks are written in Python and some in R.
*** Make this class in ITK proper first, then expose it in simple ITK.
* Namespace to use : "sitk" or "stk".
* Const-correctness: (yes)
* Thread-safety:
** The same instance of the object can't be used from multiple-threads.
** Multiple-threads can create instances of an object type.
* Testing
** Based on the same testing framework as ITK.
** Higher quality bar than ITK proper.
* Exposing basic types:
** Avoid exposing low level types such as Region, Array...
* Registration
** Implement pre-fabricated modules that contain a full registration framework
** Used the Finder (dynamic registration) pattern to reduce compilation time (enable parallel compilation).
*** Finder will locate even internal components (such as interpolators) by name (using a string).
** Should the output be a
*** Resampled Image ?
*** Transform ? ( <----This one )
*** Transform Parameters ?
** There will be a simpleResample that takes a simpleTransform as argument
** There will be simpleTransformReader & simpleTransformWriter
* Segmentation
** Output should be a LabelMap (plus a naming convention)
*** Make this class in ITK proper first, then expose it in simple ITK.
*** Along with Readers and Writers.
** "Feature" associated with every label.
** The Registration resampler should be able to map label images as well (to map a segmentation from an atlas to a subject, for example).
** Level Sets will be packaged at a modular level (with their preprocessing filters included).


== Tcon topics 7/22/2010 ==
The main notebook repository is available on [https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks github].


* Should SimpleITK be mixable with VTK?
Additional repositories containing tutorial specific notebooks are listed in the [http://www.itk.org/Wiki/SimpleITK#SimpleITK_Tutorials Tutorials section] below.
** SimpleImage class include casting to vtkImage?
** Concept: interactive programming languages are really cool if they include data visualization. We need to have a way to visualize images as we process them.


== Tcon topics 8/12/2010 ==
== SimpleITK Tutorials ==


Notes from discussions held during the tcon:
=== Upcoming ===


* Gabe Hart reported on experiments with wrapping SimpleITK for Java
* SPIE Medical Imaging 2018, Houston TX, USA: [https://spie.org/MI/course/simpleitk-jupyter-notebooks-biomedical-image-analysis-in-python SimpleITK Jupyter Notebooks: Biomedical Image Analysis in Python].
** How to manage classpath ?
** How to organize ITK classes into jar file.
*** Should they follow the distribution of "modular ITK" ?
* Synergy between WrapITK and SimpleITK
** Could we use WrapITK infrastructure to generate the instantiations of SimpleITK ?
* Brad L. reported on experiments using template metaprogramming for selecting pixel types
** Example implemented: http://github.com/blowekamp/SimpleITK/network
* Discussion about what pixel types to provide
** Should they be extendable by a user ?
** How about "unsigned long" ? (or is it Label Maps what we really want ?)
* Label Maps
** We agree in that they should be a first class citizen object, at the pair of the image
** How to map LabelObjects from one image grid coordinates to another ?
*** Do we need a "resample label map" filter ?
* Procedural look and feel
** Should SimpleITK has a procedural look ? (ala Matlab ?)
** Or the sequence of "create object, set parameter, set parameter.... execute"
** Can we have both ?
*** Without one diminishing the other ?
* What to do with basic Arrat types ?
** Point, Vector, CovariantVector
*** How to hide their dimension ?
** Introduce a generic "Array" class at SimpleITK level ?
*** maybe with an internal enum indicating that it is a Point, Vector or CovariantVector ?
*** Manage Dimension dynamically (or hide it internally), just like the simple Image class.
* SimpleITK making it look natural in Wrapped languages
** Provide functionalities for converting ITK classes into classes of the target language
*** In Java: be able to convert a simpleImage into a [http://download-llnw.oracle.com/javase/6/docs/api/java/awt/image/BufferedImage.html Java BufferedImage class], and back.
*** In Python: be able to convert an simpleImage into a [http://www.pythonware.com/products/pil/ Python Image] or at least a python array.
* SimpleITK & Visualization
** Should we provide some simple visualization capabilities ?
** Easy conversion from ITK simpleImage to vtkImageData
** Basic Viewer example (maybe based on Qt+VTK: or [http://www.commontk.org/index.php/Main_Page CTK] for that matter) that takes origin, spacing and orientation into account.
* What pixel types to include ?
** Suggested for Microscopy
*** unsigned char (int8)
*** signed short (int16)
*** unsigned short (uint16)
*** signed int (int32)
*** unsigned int (uint32)
*** float (float32)
*** double


== Tcon topics 8/13/2010 ==


* How many classes to expose ?
=== Past ===
** Start with the classes exposed in v3d plugins (~80)
* The International Symposium on Biomedical Imaging (ISBI) 2016, Prague, Czech republic: [http://biomedicalimaging.org/2016/?page_id=572  SimpleITK: An Interactive, Python-Based Introduction to SimpleITK with the Insight Segmentation and Registration Toolkit (ITK)]
** Grow to about ~200 ~300 classes
* SPIE Medical Imaging 2016, San Diego, USA: ITK in Biomedical Research and Commercial Applications
** From there, listen to community feedback regarding new classes to add.
: Tutorial material: [https://github.com/InsightSoftwareConsortium/SimpleITKTutorialSPIE2016 git repository] [https://hdl.handle.net/10380/3542 additional presentations] .
* Support for Large Data
* Medical Image Computing and Computer Assisted Intervention (MICCAI) 2015, Munich, Germany: a Python based tutorial on the use of the [[SimpleITK/Tutorials/MICCAI2015 | ITKv4 registration framework via SimpleITK]].
** SimpleITK must be usable for building real applications.
: Tutorial material: [https://github.com/InsightSoftwareConsortium/SimpleITKTutorialMICCAI2015.git git repository].
** It must support image larger than the available RAM.
* ImageJ User & Developer Conference 2015, Madison, WI, USA: [http://imagej.net/Conference_2015_Program#Matt_McCormick_-_SimpleITK an introductory tutorial] in Python.
* Identify Target Customers for SimpleITK
: Tutorial material: [https://github.com/InsightSoftwareConsortium/SimpleITKWorkshopImageJ2015 git repository]. 
** Groups that are not using ITK at this point, because this consider it too complicated
* Medical Image Computing and Computer Assisted Intervention (MICCAI) 2011, Toronto, Canada: a general [[ITK_Release_4/Outreach/Conferences/MICCAI 2011/SimpleITK|tutorial on SimpleITK]].
** Invite them to be early evaluators of the SimpleITK prototypes.
: Tutorial material: [https://github.com/SimpleITK/SimpleITK-MICCAI-2011-Tutorial/blob/master/Presentation/SimpleITK-MICCAI-2011.pdf?raw=true PDF of presentation], [http://midas.kitware.com/collection/view/175 virtual machine], and [https://github.com/SimpleITK/SimpleITK-MICCAI-2011-Tutorial  git repository].
* Reviewing the MetaProgramming layer used by Brad L. to instantiate types
* How to manage multiple component images ?
** Have an array of simpleITK images ?
* How to manage time ?
** ND+t ?


== Community Blogs ==


== Tcon topics 8/17/2010 ==
These are blog entries written by people who are not necessarily directly involved with SimpleITK. If you want us to link to your SimpleITK blog entry just let us know on the mailing list (community@itk.org).  
*Next ITKv4 Meeting - Potentially October 4-6
*Additional Conference Calls held last week
**'''SimpleITK'''
**'''Microscopy'''
***Summary: What changes to the ITK fundamentals required for large image sizes. There may be issues for video processing as well
****How to deal with time as a dimension
****Memory management (Streaming)
***Possible changes to the image structure - Luis will make proposal to handle these issues and present to the group
****Video processing may require a ring buffer structure
****Iterators may need to be updated to avoid access to the buffer pointer
****Possibility of using image adapters
***Multi-resolution Images
****Possibility of support for this at the level of the image reader (JPEG2000: support for 2D images in files)
****Query image reader for different resolution images
***Non-regular image spacing
****Potential different time point for top and bottom of image
****VTK Rectilinear grid handles this
****What filters are required to handle non-uniform spacing. Can convolution be applied and then resample to regular spacing
****Does this cause a data explosion
***File formats
****Desire for more file format support: probably would benefit from just 2-3 formats
****64 bit TIFF reader, Vendor specific private tags
****Update to libTiff is required
****Streaming support exists for Meta, VTK, MRC. ImageSeriesReader will stream slice-by-slice
**'''WrapITK'''
*Sequestered reference applications
*Clean-up Releases
**Currently running behind
**Limited coverage for Windows machines on the Dashboard - Need to turn on BUILD_EXAMPLES for these machines
**Need to updated OpenJPEG (version 2) and libTiff
*DICOM
**Design for QR of PACS without writing to disk
***Currently requires to locally save a copy of the file(s) before reading as an ITK image
***How do you know what you are going to get (e.g. multi-planar scout images)
***Create a database or data structure to present to the programmer and then create an image from the bulk data
***What API is required to support this functionality
***Data structure to hold information (DOM specification - Larry Tarbox from XIP - Stephen Alyward)
***Potential to pass Metadata Dictionary


* General introduction of SimpleITK on the [http://news.iscas.co/simpleitk-a-simplified-multi-language-interface-to-the-insight-segmentation-and-registration-toolkit/  International Society for Computer Aided Surgery blog], 1 March 2017.
* [http://zarquon42b.github.io/2015/05/22/SimpleITKandR/  SimpleITK and R], 22 May 2015.
* [http://kevin-keraudren.blogspot.com/2014/12/medical-image-analysis-ipython-tutorials.html Medical Image Analysis Course], 20 December 2014.
* [https://pyscience.wordpress.com/tag/simpleitk Image Segmentation with Python and SimpleITK], October/November 2014.


== Tcon topics 8/26/2010 ==
=Support=
 
SimpleITK is supported through the ITK community and the active developers. In addition to the resources listed above in the documentation section, the  [https://discourse.itk.org discourse forum]  can be used to ask questions and obtain additional help from the ITK community. The legacy [http://www.itk.org/ITK/help/mailing.html ITK mailing lists] is no longer prefered.
 
== Issue Tracking And Feature Requests ==
 
We are currently using the [https://github.com/SimpleITK/SimpleITK/issues github issue tracker]. Before switching to github issue tracking we used an instance of the
[https://itk.icts.uiowa.edu/jira/browse/SIMPLEITK Legacy Jira Issue Tracker ] hosted by the University of Iowa.
 
== Releases ==
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=refs/tags/v1.0.1 v1.0.1] [https://github.com/SimpleITK/SimpleITK/releases/tag/v1.0.1 Release Notes]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=refs/tags/v1.0.0 v1.0.0] [https://github.com/SimpleITK/SimpleITK/releases/tag/v1.0.0 Release Notes] [https://sourceforge.net/projects/simpleitk/files/SimpleITK/1.0.0 Downloads] [https://www.itk.org/SimpleITKDoxygen100/html/index.html Doxygen]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=4a3376df08f27162b4d2a90e4a0452a839ab3124 v0.10.0] [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.10.0 Release Notes] [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.10.0 Downloads] [https://www.itk.org/SimpleITKDoxygen010/html/index.html Doxygen]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=ec033f0be4f67b2e21483ed9bc3698f07dba9d06 v0.9.1] [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.9.1 Release Notes] [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.9.1 Downloads]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=7f06e9fc7f3cda9c47e8b7d6d37885b1f425ea3b v0.9.0] [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.9.0 Release Notes] [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.9.0 Downloads] [https://www.itk.org/SimpleITKDoxygen09/html/index.html Doxygen]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=d0a90983877b46631e69a398bd8341889912c8c2 v0.8.1] [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.8.1 Release Notes]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.8.1/ Downloads]  [https://www.itk.org/SimpleITKDoxygen08/html/index.html Doxygen]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=11bff587f8a930bbca02813595aa3d08388af979 v0.8.0] [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.8.0  Release Notes]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.8.0/ Downloads]
* [https://itk.org/gitweb?p=SimpleITK.git;a=commit;h=a2b29110771a1eb0b09d18ff8e98a784dc6e6451 v0.7.1]  [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.7.1  Release Notes]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.7.1/ Downloads]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=6fecf5ae5859295082b9016c97bf4bd68a961a62 v0.7.0] [https://github.com/SimpleITK/SimpleITK/releases/tag/v0.7.0  Release Notes]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.7.0/ Downloads]  [https://www.itk.org/SimpleITKDoxygen07/html/index.html Doxygen]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=fc17df598cac97d344c875fed117f03ae7d1aacd v0.6.1]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.6.1/ Downloads] [http://www.itk.org/SimpleITKDoxygen06/html/index.html Doxygen]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=c055ef4e4cd2802c56e169084d9dd1bc655b4e93 v0.6.0]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.6.0/ Downloads]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=41fbb6d69f88fa1c8ab3b9d710b7ae57bb975721 v0.5.1]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.5.1/ Downloads]
* [https://itk.org/gitweb?p=SimpleITK.git;a=tag;h=35ccfd2b99b4b5675d4d0894bb870574396408b6 v0.5.0]  [https://sourceforge.net/projects/simpleitk/files/SimpleITK/0.5.0/ Downloads]
 
= Development =
 
SimpleITK has moved to a [https://github.com/SimpleITK/SimpleITK Github] based work flow for issues tracking and contribution.
 
 
SimpleITK utilizes an additional "next" branch to merge and test changes before merging into the master branch. This makes our "master" branch more stable and reliable. This follows the CMake development process:
 
* [http://www.cmake.org/Wiki/CMake/Git/Develop CMake Development Process ]
 
 
== Source Code Repository ==
 
SimpleITK uses git as the revision control system.  The official repository is hosted along side ITK as http://itk.org/SimpleITK.git  [http://public.kitware.com/gitweb?p=SimpleITK.git]. It is also mirrored on  [https://github.com/SimpleITK/SimpleITK Github ].
 
Development is currently following the branchy workflow with the Kitware stage repository. This workflow is described here:
*http://public.kitware.com/Wiki/Git/Workflow/Stage
*http://public.kitware.com/Wiki/Git/Workflow/Topic
 
Contributions from github will be pushed to the stage repo and merged into the next branch by a SimpleITK developer.
 
== [[SimpleITK/Design_And_Proposals | Design And Proposals]] ==

Latest revision as of 18:17, 13 December 2019

NOTICE
This page is being migrated to Read The Docs!

For the up to date version please see this page!

SimpleITK-SquareTransparentLogo.png

Overview

Welcome to the National Library of Medicine Insight Segmentation and Registration Toolkit (ITK). ITK is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. Among them, SimpleITK is a simplified layer built on top of ITK, intended to facilitate its use in rapid prototyping, education, interpreted languages. SimpleITK has the following main characteristics:

  • C++ library with wrappers for Python, Java, CSharp, R, Tcl and Ruby
  • Object-oriented
  • Provides a simplified, easy-to-use, procedural interface without templates
  • Is distributed under an open source Apache 2.0 License
  • Binary distributions for Python, Java and CSharp

SimpleITK captures many of features available in ITK, and is under ongoing development. Earlier in the development process a set of Specific Goals were outlined.

How to Cite

If you find SimpleITK useful in your research, please cite the relevant publications:

  • Lowekamp BC, Chen DT, Ibáñez L and Blezek D (2013) The Design of SimpleITK. Front. Neuroinform. 7:45. 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., https://doi.org/10.1007/s10278-017-0037-8, 2017. (you can freely read the manuscript here)


Getting Started

Download

SimpleITK currently provides binary distribution for Python, CSharp and Java language bindings. You can download the 1.0.0 release from SourceForge.

Documentation

API

Short Examples

Concise examples illustrating the usage of various SimpleITK features. Examples are written in a variety of languages including Python, R, C++, Java...

SimpleITK Notebooks

The SimpleITK Notebooks are examples and tutorials on how to use SimpleITK utilizing Jupyter Notebooks. This approach allows the user to create, edit and re-run scripts and view the results all within a web interface. The authoritative description of what Jupyter Notebooks are can be found on the Jupyter website. While SimpleITK supports a number of programming languages, the majority of notebooks are written in Python and some in R.

The main notebook repository is available on github.

Additional repositories containing tutorial specific notebooks are listed in the Tutorials section below.

SimpleITK Tutorials

Upcoming


Past

Tutorial material: git repository additional presentations .
Tutorial material: git repository.
Tutorial material: git repository.
  • Medical Image Computing and Computer Assisted Intervention (MICCAI) 2011, Toronto, Canada: a general tutorial on SimpleITK.
Tutorial material: PDF of presentation, virtual machine, and git repository.

Community Blogs

These are blog entries written by people who are not necessarily directly involved with SimpleITK. If you want us to link to your SimpleITK blog entry just let us know on the mailing list (community@itk.org).

Support

SimpleITK is supported through the ITK community and the active developers. In addition to the resources listed above in the documentation section, the discourse forum can be used to ask questions and obtain additional help from the ITK community. The legacy ITK mailing lists is no longer prefered.

Issue Tracking And Feature Requests

We are currently using the github issue tracker. Before switching to github issue tracking we used an instance of the Legacy Jira Issue Tracker hosted by the University of Iowa.

Releases

Development

SimpleITK has moved to a Github based work flow for issues tracking and contribution.


SimpleITK utilizes an additional "next" branch to merge and test changes before merging into the master branch. This makes our "master" branch more stable and reliable. This follows the CMake development process:


Source Code Repository

SimpleITK uses git as the revision control system. The official repository is hosted along side ITK as http://itk.org/SimpleITK.git [1]. It is also mirrored on Github .

Development is currently following the branchy workflow with the Kitware stage repository. This workflow is described here:

Contributions from github will be pushed to the stage repo and merged into the next branch by a SimpleITK developer.

Design And Proposals