Technical Summary

The following sections summarize the technical features of NLM's SimpleITK library:

Design Philosophy
The following are key features of the library design philosophy.
  • The library provides data representation and algorithms for performing segmentation and registration. The focus is on medical applications, although the toolkit is capable of processing other data types.
  • The library provides data representations as 2D and 3D images.
  • The library does not address visualization or graphical user interface. These are left to other toolkits (such as VTK). However, it provides bridges to make it easy to integrate with them.
  • Multi-threaded (shared memory) parallel processing is supported.
  • The development of the toolkit is based on principles of extreme programming. That is, design, implementation, and testing are performed in a rapid, iterative process. Testing forms the core of this process. In Insight, testing is performed continuously as files are checked in, and every night across multiple platforms and compilers. The SimpleITK testing dashboard, where testing results are posted, is central to this process.
Architecture
The following are key features of the library architecture.
  • The library is organized around a procedural programming approach. Data is represented using data objects, which are in turn processed by process objects (filters). Data objects are passed to process objects as arguments to procedural methods, and the results are passed back as return types from those procedural methods.
The following are key features of the library implementation philosophy.
  • The library is implemented using procedural programming principles. However, internally it uses advanced C++ templates features such as template metaprogramming, hence development was carried out with the latest versions of the MSVC, gcc, and Intel compilers.
  • The library is cross-platform (Unix, Windows and MacOSX).
  • The library supports multiple language bindings, including such languages as Tcl, Python, and Java. These bindings are generated automatically using SWIG.
  • The memory model depends on lazy evaluation, that maintains auto-pointers to actual data objects. Data objects can be allocated on the stack, and when scope is exited, they are released automatically.
Build Environment
SimpleITK uses the CMake (cross-platform make) build environment. CMake is an operating system and compiler independent build process that produces native build files appropriate to the OS and compiler that it is run with. On Unix CMake produces makefiles and on Windows CMake generates projects and workspaces. Additionally, SimpleITK uses a code generation infrastructure based on Lua and JSON. This infrastructure itself is build as part of the build and configuration process, and therefore it is not necessary for the developers to set it up in advance.

Testing Enviroment
SimpleITK supports an extensive testing environment. The code is tested daily and even continuously on many hardware/operating system/compiler combinations and the results are posted daily on the SimpleITK testing dashboard. We use CDash to manage the testing process, and to post the results to the dashboard.