Insight Segmentation and Registration Toolkit
Encyclopedia
ITK is a cross-platform
, open-source application development framework widely used for the development of image segmentation
and image registration
programs. Segmentation is the process of identifying and classifying data found in a digitally sampled representation. Typically the sampled representation is an image acquired from such medical instrumentation as CT or MRI scanners. Registration is the task of aligning or developing correspondences between data. For example, in the medical environment, a CT scan may be aligned with an MRI scan in order to combine the information contained in both.
ITK was developed with funding from the National Library of Medicine (U.S.
) as an open resource of algorithms for analyzing the images of the Visible Human Project
. ITK stands for The Insight Segmentation and Registration Toolkit. The toolkit provides leading-edge segmentation and registration algorithms in two, three, and more dimensions. ITK uses the CMake
build environment to manage the configuration process. The software is implemented in C++
and it is wrapped for Tcl
, Python
(using CableSwig) and Java
. This enables developers to create software using a variety of programming languages. ITK's C++ implementation style is referred to as generic programming (i.e., using templated code). Such C++ templating means that the code is highly efficient, and that many software problems are discovered at compile-time, rather than at run-time during program execution.
Because ITK is an open-source project, developers from around the world can use, debug, maintain, and extend the software. ITK uses a model of software development referred to as extreme programming. Extreme programming collapses the usual software creation methodology into a simultaneous and iterative process of design-implement-test-release. The key features of extreme programming are communication and testing. Communication among the members of the ITK community is what helps manage the rapid evolution of the software. Testing is what keeps the software stable. In ITK, an extensive testing process (using CDash) is in place that measures the quality on a daily basis. The ITK Testing Dashboard is posted continuously reflecting the quality of the software.
awarded a three-year contract to develop an open-source registration and segmentation toolkit, which eventually came to be known as the Insight Toolkit (ITK). ITK's NLM Project Manager was Dr. Terry Yoo, who coordinated the six prime contractors who made up the Insight Software Consortium. These consortium members included the three commercial partners GE
Corporate R&D, Kitware
, Inc., and MathSoft (the company name is now Insightful); and the three academic partners University of North Carolina (UNC
), University of Tennessee
(UT), and University of Pennsylvania
(UPenn). The principal investigators for these partners were, respectively, Bill Lorensen with Jim Miller at GE CRD, Will Schroeder at Kitware, Vikram Chalana with Lydia Ng at Insightful, Stephen Aylward with Luis Ibanez at UNC (both now at Kitware), Ross Whitaker with Josh Cates at UT (both now at Utah), and Dimitri Metaxas at UPenn. In addition, several subcontractors rounded out the consortium including Peter Raitu at Brigham & Women's Hospital, Celina Imielinska and Pat Molholt at Columbia University, Jim Gee at UPenn's Grasp Lab, and George Stetten at University of Pittsburgh.
Who are the developers?
The best way to determine the names of developers is to view the CVS source code repository logs. Most of the early developers are listed in the following, however, many developers beyond those listed here will participate in the development of ITK as the code grows and becomes publicly accessible.
or MRI scanners. Registration is the task of aligning or developing correspondences between data. For example, in the medical environment, a CT scan may be aligned with a MRI scan in order to combine the information contained in both.
ITK is implemented in C++. ITK is cross-platform, using the CMake
build environment to manage the compilation process. In addition, an automated wrapping process generates interfaces between C++ and interpreted programming languages such as Tcl, Java, and Python (using CableSwig). This enables developers to create software using a variety of programming languages. ITK's implementation employs the technique of generic programming
through the use of C++ templates.
Because ITK is an open-source project, developers from around the world can use, debug, maintain, and extend the software. ITK uses a model of software development referred to as extreme programming
. Extreme programming collapses the usual software creation methodology into a simultaneous and iterative process of design-implement-test-release. The key features of extreme programming are communication and testing. Communication among the members of the ITK community is what helps manage the rapid evolution of the software. Testing is what keeps the software stable. In ITK, an extensive testing process (using CDash) is in place that measures the quality on a daily basis. The ITK Testing Dashboard is posted continuously reflecting the quality of the software.
After its inception the software continued growing with contributions from other institutions including
The goals for the project include the following:
The source code of the Insight Toolkit is distributed under a BSD License (as approved by the Open Source Initiative
)
The philosophy of Open Source of the Insight Toolkit was extended to support Open Science, in particular by providing Open Access to publications in the domain of Medical Image Processing. These publications are made freely available through the Insight Journal
.
Versions of ITK previous to ITK 3.6 were distributed under a modified BSD License. The main motivation for adopting a BSD license starting with ITK 3.6, was to have an OSI
-approved license.
Design Philosophy
The following are key features of the toolkit design philosophy.
In 2004 ITK-SNAP
(website) was developed from SNAP
and became a popular free segmentation software using ITK and having a nice and simple user interface.
Cross-platform
In computing, cross-platform, or multi-platform, is an attribute conferred to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms...
, open-source application development framework widely used for the development of image segmentation
Segmentation (image processing)
In computer vision, segmentation refers to the process of partitioning a digital image into multiple segments . The goal of segmentation is to simplify and/or change the representation of an image into something that is more meaningful and easier to analyze...
and image registration
Image registration
Image registration is the process of transforming different sets of data into one coordinate system. Data may be multiple photographs, data from different sensors, from different times, or from different viewpoints. It is used in computer vision, medical imaging, military automatic target...
programs. Segmentation is the process of identifying and classifying data found in a digitally sampled representation. Typically the sampled representation is an image acquired from such medical instrumentation as CT or MRI scanners. Registration is the task of aligning or developing correspondences between data. For example, in the medical environment, a CT scan may be aligned with an MRI scan in order to combine the information contained in both.
ITK was developed with funding from the National Library of Medicine (U.S.
United States
The United States of America is a federal constitutional republic comprising fifty states and a federal district...
) as an open resource of algorithms for analyzing the images of the Visible Human Project
Visible Human Project
The Visible Human Project is an effort to create a detailed data set of cross-sectional photographs of the human body, in order to facilitate anatomy visualization applications. A male and a female cadaver were cut into thin slices which were then photographed and digitized. The project is run by...
. ITK stands for The Insight Segmentation and Registration Toolkit. The toolkit provides leading-edge segmentation and registration algorithms in two, three, and more dimensions. ITK uses the CMake
CMake
CMake is a cross-platform, open-source system for managing the build process of software using a compiler-independent method. It is designed to support directory hierarchies and applications that depend on multiple libraries, and for use in conjunction with native build environments such as Make,...
build environment to manage the configuration process. The software is implemented in C++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
and it is wrapped for Tcl
Tcl
Tcl is a scripting language created by John Ousterhout. Originally "born out of frustration", according to the author, with programmers devising their own languages intended to be embedded into applications, Tcl gained acceptance on its own...
, Python
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
(using CableSwig) and Java
Java (programming language)
Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities...
. This enables developers to create software using a variety of programming languages. ITK's C++ implementation style is referred to as generic programming (i.e., using templated code). Such C++ templating means that the code is highly efficient, and that many software problems are discovered at compile-time, rather than at run-time during program execution.
Because ITK is an open-source project, developers from around the world can use, debug, maintain, and extend the software. ITK uses a model of software development referred to as extreme programming. Extreme programming collapses the usual software creation methodology into a simultaneous and iterative process of design-implement-test-release. The key features of extreme programming are communication and testing. Communication among the members of the ITK community is what helps manage the rapid evolution of the software. Testing is what keeps the software stable. In ITK, an extensive testing process (using CDash) is in place that measures the quality on a daily basis. The ITK Testing Dashboard is posted continuously reflecting the quality of the software.
Origins
In 1999 the US National Library of Medicine of the National Institutes of HealthNational Institutes of Health
The National Institutes of Health are an agency of the United States Department of Health and Human Services and are the primary agency of the United States government responsible for biomedical and health-related research. Its science and engineering counterpart is the National Science Foundation...
awarded a three-year contract to develop an open-source registration and segmentation toolkit, which eventually came to be known as the Insight Toolkit (ITK). ITK's NLM Project Manager was Dr. Terry Yoo, who coordinated the six prime contractors who made up the Insight Software Consortium. These consortium members included the three commercial partners GE
Gê
Gê are the people who spoke Ge languages of the northern South American Caribbean coast and Brazil. In Brazil the Gê were found in Rio de Janeiro, Minas Gerais, Bahia, Piaui, Mato Grosso, Goias, Tocantins, Maranhão, and as far south as Paraguay....
Corporate R&D, Kitware
Kitware
Kitware, Inc. is a technology company headquartered in Clifton Park, New York. The company specializes in the research and development of open-source software in the fields of computer vision, medical imaging, visualization, 3D data publishing and technical software development...
, Inc., and MathSoft (the company name is now Insightful); and the three academic partners University of North Carolina (UNC
University of North Carolina at Chapel Hill
The University of North Carolina at Chapel Hill is a public research university located in Chapel Hill, North Carolina, United States...
), University of Tennessee
University of Tennessee
The University of Tennessee is a public land-grant university headquartered at Knoxville, Tennessee, United States...
(UT), and University of Pennsylvania
University of Pennsylvania
The University of Pennsylvania is a private, Ivy League university located in Philadelphia, Pennsylvania, United States. Penn is the fourth-oldest institution of higher education in the United States,Penn is the fourth-oldest using the founding dates claimed by each institution...
(UPenn). The principal investigators for these partners were, respectively, Bill Lorensen with Jim Miller at GE CRD, Will Schroeder at Kitware, Vikram Chalana with Lydia Ng at Insightful, Stephen Aylward with Luis Ibanez at UNC (both now at Kitware), Ross Whitaker with Josh Cates at UT (both now at Utah), and Dimitri Metaxas at UPenn. In addition, several subcontractors rounded out the consortium including Peter Raitu at Brigham & Women's Hospital, Celina Imielinska and Pat Molholt at Columbia University, Jim Gee at UPenn's Grasp Lab, and George Stetten at University of Pittsburgh.
Who are the developers?
The best way to determine the names of developers is to view the CVS source code repository logs. Most of the early developers are listed in the following, however, many developers beyond those listed here will participate in the development of ITK as the code grows and becomes publicly accessible.
Technical Details
ITK is an open-source software toolkit for performing registration and segmentation. Segmentation is the process of identifying and classifying data found in a digitally sampled representation. Typically the sampled representation is an image acquired from such medical instrumentation as CTComputed tomography
X-ray computed tomography or Computer tomography , is a medical imaging method employing tomography created by computer processing...
or MRI scanners. Registration is the task of aligning or developing correspondences between data. For example, in the medical environment, a CT scan may be aligned with a MRI scan in order to combine the information contained in both.
ITK is implemented in C++. ITK is cross-platform, using the CMake
CMake
CMake is a cross-platform, open-source system for managing the build process of software using a compiler-independent method. It is designed to support directory hierarchies and applications that depend on multiple libraries, and for use in conjunction with native build environments such as Make,...
build environment to manage the compilation process. In addition, an automated wrapping process generates interfaces between C++ and interpreted programming languages such as Tcl, Java, and Python (using CableSwig). This enables developers to create software using a variety of programming languages. ITK's implementation employs the technique of generic programming
Generic programming
In a broad definition, generic programming is a style of computer programming in which algorithms are written in terms of to-be-specified-later types that are then instantiated when needed for specific types provided as parameters...
through the use of C++ templates.
Because ITK is an open-source project, developers from around the world can use, debug, maintain, and extend the software. ITK uses a model of software development referred to as extreme programming
Extreme Programming
Extreme programming is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements...
. Extreme programming collapses the usual software creation methodology into a simultaneous and iterative process of design-implement-test-release. The key features of extreme programming are communication and testing. Communication among the members of the ITK community is what helps manage the rapid evolution of the software. Testing is what keeps the software stable. In ITK, an extensive testing process (using CDash) is in place that measures the quality on a daily basis. The ITK Testing Dashboard is posted continuously reflecting the quality of the software.
Developers and Contributors
The Insight Toolkit was initially developed by six principal organizations- KitwareKitwareKitware, Inc. is a technology company headquartered in Clifton Park, New York. The company specializes in the research and development of open-source software in the fields of computer vision, medical imaging, visualization, 3D data publishing and technical software development...
- GEGeneral ElectricGeneral Electric Company , or GE, is an American multinational conglomerate corporation incorporated in Schenectady, New York and headquartered in Fairfield, Connecticut, United States...
Corporate R&D - Insightful
- UNC Chapel Hill
- University of UtahUniversity of UtahThe University of Utah, also known as the U or the U of U, is a public, coeducational research university in Salt Lake City, Utah, United States. The university was established in 1850 as the University of Deseret by the General Assembly of the provisional State of Deseret, making it Utah's oldest...
- University of PennsylvaniaUniversity of PennsylvaniaThe University of Pennsylvania is a private, Ivy League university located in Philadelphia, Pennsylvania, United States. Penn is the fourth-oldest institution of higher education in the United States,Penn is the fourth-oldest using the founding dates claimed by each institution...
After its inception the software continued growing with contributions from other institutions including
- Harvard Brigham & Women's Hospital
- University of PittsburghUniversity of PittsburghThe University of Pittsburgh, commonly referred to as Pitt, is a state-related research university located in Pittsburgh, Pennsylvania, United States. Founded as Pittsburgh Academy in 1787 on what was then the American frontier, Pitt is one of the oldest continuously chartered institutions of...
- Columbia UniversityColumbia UniversityColumbia University in the City of New York is a private, Ivy League university in Manhattan, New York City. Columbia is the oldest institution of higher learning in the state of New York, the fifth oldest in the United States, and one of the country's nine Colonial Colleges founded before the...
- University of IowaUniversity of IowaThe University of Iowa is a public state-supported research university located in Iowa City, Iowa, United States. It is the oldest public university in the state. The university is organized into eleven colleges granting undergraduate, graduate, and professional degrees...
- Georgetown UniversityGeorgetown UniversityGeorgetown University is a private, Jesuit, research university whose main campus is in the Georgetown neighborhood of Washington, D.C. Founded in 1789, it is the oldest Catholic university in the United States...
- Stanford UniversityStanford UniversityThe Leland Stanford Junior University, commonly referred to as Stanford University or Stanford, is a private research university on an campus located near Palo Alto, California. It is situated in the northwestern Santa Clara Valley on the San Francisco Peninsula, approximately northwest of San...
- King's College of London
- Creatis INSA
Funding
The funding for the project is from the National Library of Medicine at the National Institutes of Health. NLM in turn was supported by member institutions of NIH (see sponsors).The goals for the project include the following:
- Support the Visible Human ProjectVisible Human ProjectThe Visible Human Project is an effort to create a detailed data set of cross-sectional photographs of the human body, in order to facilitate anatomy visualization applications. A male and a female cadaver were cut into thin slices which were then photographed and digitized. The project is run by...
. - Establish a foundation for future research.
- Create a repository of fundamental algorithms.
- Develop a platform for advanced product development.
- Support commercial application of the technology.
- Create conventions for future work.
- Grow a self-sustaining community of software users and developers.
The source code of the Insight Toolkit is distributed under a BSD License (as approved by the Open Source Initiative
Open Source Initiative
The Open Source Initiative is an organization dedicated to promoting open source software.The organization was founded in February 1998, by Bruce Perens and Eric S. Raymond, prompted by Netscape Communications Corporation publishing the source code for its flagship Netscape Communicator product...
)
The philosophy of Open Source of the Insight Toolkit was extended to support Open Science, in particular by providing Open Access to publications in the domain of Medical Image Processing. These publications are made freely available through the Insight Journal
Insight Journal
The Insight Journal is an electronic scientific journal that covers the reproducibility of technical reports in the areas of image analysis and visualization...
Community Participation
Because ITK is an open-source system, anybody can make contributions to the project. This contributions however are organized by an oversight committee. A person interested in contributing to ITK can take the following actions- Read this document and especially the ITK Software Guide. (This book can be purchased from Kitware's store.)
- Obtain access to the CVS repository (read-only, anonymous access), and obtain the distribution using the following procedure outlined here.
- If you wish to contribute code, find the Insight/Documents/InsightDeveloperStart.pdf (in the source distribution) and read it thoroughly.
- As this document suggests, join the insight-developers list. You will have to contact a developer for permission (will.schroeder@kitware.com)
- Contribute code or fix bugs by mailing code to the list or contacting a developer directly.
- Once you demonstrate your abilities, obtain read-write access to the repository. Access can be obtained following the instructions outlined in the Insight/Documents/InsightDeveloperStart.pdf document.
Copyright and License
ITK is copyrighted by the Insight Software Consortium, a non-profit alliance of organizations and individuals interested in supporting ITK. Starting with ITK version 3.6, the software is distributed under a BSD open-source license. It allows use for any purpose, with the possible exception of code found in the patented directory, and with proper recognition. The full terms of the copyright and the license are available at http://www.itk.org/HTML/Copyright.htm. Version 4.0 uses Apache 2.0 LicenseApache License
The Apache License is a copyfree free software license authored by the Apache Software Foundation . The Apache License requires preservation of the copyright notice and disclaimer....
.
Versions of ITK previous to ITK 3.6 were distributed under a modified BSD License. The main motivation for adopting a BSD license starting with ITK 3.6, was to have an OSI
Open Source Initiative
The Open Source Initiative is an organization dedicated to promoting open source software.The organization was founded in February 1998, by Bruce Perens and Eric S. Raymond, prompted by Netscape Communications Corporation publishing the source code for its flagship Netscape Communicator product...
-approved license.
Technical Summary
The following sections summarize the technical features of the NLM's Insight ITK toolkit.Design Philosophy
The following are key features of the toolkit design philosophy.
- The toolkit 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 toolkit provides data representations in general form for images (arbitrary dimension) and (unstructured) meshes.
- The toolkit does not address visualization or graphical user interface. These are left to other toolkits (such as VTK, VisPack, 3DViewnix, MetaImage, etc.)
- The toolkit provides minimal tools for file interface. Again, this is left to other toolkits/libraries to provide.
- 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 is 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 ITK testing dashboard, where testing results are posted, is central to this process.
Architecture
The following are key features of the toolkit architecture.- The toolkit is organized around a data-flow architecture. That is, data is represented using data objects which are in turn processed by process objects (filters). Data objects and process objects are connected together into pipelines. Pipelines are capable of processing the data in pieces according to a user-specified memory limit set on the pipeline.
- Object factories are used to instantiate objects. Factories allow run-time extension of the system.
- A command/observer design pattern is used for event processing.
Implementation Philosophy
The following are key features of the toolkit implementation philosophy.- The toolkit is implemented using generic programming principles. Such heavily templated C++ code challenges many compilers; hence development was carried out with the latest versions of the MSVC, Sun, gcc, Intel, and SGI compilers.
- The toolkit is cross-platform (Unix, Windows and Mac OS X).
- The toolkit supports multiple language bindings, including such languages as Tcl, Python, and Java. These bindings are generated automatically using an auto-wrap process. CableSwig is the tool which is used for this purpose.
- The memory model depends on "smart pointers" that maintain a reference count to objects. Smart pointers can be allocated on the stack, and when scope is exited, the smart pointers disappear and decrement their reference count to the object that they refer to.
Build Environment
ITK 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.Testing Environment
ITK 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 ITK testing dashboard. We use Dart to manage the testing process, and to post the results to the dashboard.Background References: C++ Patterns and Generics
ITK uses many advanced design patterns and generic programming. You may find these references useful in understanding the design and syntax of Insight.- Design Patterns. by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch
- Generic Programming and the Stl : Using and Extending the C++ Standard Template Library (Addison-Wesley Professional Computing Series) by Matthew H. Austern
- Advanced C++ Programming Styles and Idioms by James O. Coplien
- C/C++ Users Journal
- C++ Report
Gaussian-smoothed Image Gradient
Region Growing Segmentation
Resources
A number of resources are available to learn more about ITK.- The ITK web pages are located http://www.itk.org.
- Users and developers alike should read the ITK Software Guide
- Many compilable examples are available on the ITK Examples Wiki
- Tutorials are available at http://www.itk.org/HTML/Tutorials.htm
- The software can be downloaded from http://www.itk.org/HTML/Download.php.
- Developers, or users interested in contributing code, should look in the document Insight/Documentation/InsightDeveloperStart.pdf or InsightDeveloperStart.doc found in the source code distribution.
- Developers should also look at the ITK style guide Insight/Documentation/Style.pdf found in the source distribution.
Applications
A great way to learn about ITK is to see how it is used. There are four places to find applications of ITK.- The Insight/Examples/ source code examples distributed with ITK. The source code is available. In addition, it is heavily commented and works in combination with the ITK Software Guide.
- The separate InsightApplications checkout.
- The Applications web pages. These are extensive descriptions, with images and references, of the examples found in #1 above.
- The testing directories distributed with ITK are simple, mainly undocumented examples of how to use the code.
In 2004 ITK-SNAP
ITK-SNAP
ITK-SNAP is an interactive software application that allows users to navigate three-dimensional medical images, manually delineate anatomical regions of interest, and perform automatic image segmentation...
(website) was developed from SNAP
Snap
-Computing:* ITK-SNAP, a medical imaging software application* Snap * SNAP , a symbolic circuit simulator* Snap Server, a computer storage device* Subnetwork Access Protocol , capable of binding to the Logical Link Control...
and became a popular free segmentation software using ITK and having a nice and simple user interface.
Data
- Data is available via anonymous ftp from: http://public.kitware.com/pub/itk/Data/.
- See also the ITK Data web page.
Contacts
- Terry Yoo (NLM/NIH Insight Project Manager yoo at nlm.nih.gov)
- Will Schroeder (PI Kitware, Inc. will.schroeder at kitware.com)