Skip to content
Insight Segmentation and Registration Toolkit -- Mirror
C++ C FORTRAN CMake Python HTML Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
Auxiliary @ 1dc07ed
Examples @ 433b3c8


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  <title>ITK README File - Overview and further information</title>
<table cellpadding="2" cellspacing="1" border="0" width="100%">
    <tr valign="Top">
      <td align="Center">
      <a href="">
      <img src="./Documentation/Art/itkLogoMediumTransparentBackground.gif" 
      alt="ITK Logo" width="200" height="128" align="Top" border=0></a>
      <h1>An Introduction to the <br>
Insight Segmentation &amp; Registration Toolkit <br>
(This is Beta 2, Release 0.7, June 2002)<br>
      <hr align="Left" width="100%" size="2"></td>
Welcome to the National Library of Medicine 
Insight Segmentation and Registration Toolkit (ITK).<br>
This document provides a brief description of the project, its history, and
references to additional information describing how to use, develop, and
contribute to ITK. <br>
<h3>What is <a href="">ITK</a>?</h3>
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 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
a MRI scan in order to combine the information contained in both.<br>
ITK is implemented in C++. In addition, an automated wrapping process generates
interfaces between C++ and interpreted programming languages such as Tcl,
Java, and Python. This enables developers to create software using a variety
of programming languages. ITK's C++ implementation style is referred to as
generic programming. Such C++ templating means that the code is highly efficient,
and that the many software problems are discovered at compile-time, rather
than at run-time during program execution.<br>
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<br>
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 is
in place that measures the quality on a daily basis.<br>

<h3>What are ITK's origins?</h3>

In 1999 the US <a href="">National Library
of Medicine</a> of the National Institutes of Health 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). The primary
purpose of the project is to support the
<a href="">
Visible Human Project</a> by providing software tools to process and work
with the project data. ITK's NLM Project Manager was Dr. Terry Yoo, who
coordinated the six prime contractors who made up the Insight
consortium. These consortium members included the three commercial partners
GE Corporate R&amp;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 Principle Investigators for these partners were, respectively, Bill
Lorensen at GE CRD, Will Schroeder at Kitware, Vikram Chalana at Insightful,
Stephen Aylward with Luis Ibanez at UNC (Luis is 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 &amp; Women's Hospital, Celina Imielinska 
and Pat Molholt at Columbia University, Jim Gee at UPenn's Grasp Lab, and
George Stetton at University of Pittsburgh.

<h3> Who are the developers?</h3>
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 Insight as the code grows and becomes
publicly accessible.<br>
Some of the early developers include:<br>
  <li>Elsa Angelini - Columbia, segmentation algorithms</li>           
  <li>Brian Avants - UPenn; FEM classes, registration algorithms</li>
  <li> Stephen Aylward - UNC; architecture, algorithms</li>
  <li>Dan Blezek - GE CRD; testing infrastructure</li>
  <li>Josh Cates - Utah; imaging classes and filters</li>
  <li>Ting Chen - UPenn, segmentation algorithms</li>
  <li>Jeffrey Duda - UPenn; FEM classes, registration algorithms</li>
  <li>James Gee - UPenn; FEM architecture, registration algorithms</li>
  <li>Bill Hoffman - Kitware; CMake (build process); vxl/vnl numerics; 
  infrastructure (smart pointers, object factories, 
  callback mechanism)</li>
  <li>Paul Hughett - UPenn; quality, algorithms</li>
  <li>Luis Ibanez - UNC (now Kitware); imaging classes and filters</li>
  <li>Celina Imielinska - Columbia, segmentation algorithms</li>
  <li>Yinpeng Jin - Columbia, segmentation algorithms</li>
  <li>Brad King - Kitware; Mesh class, autowrapping of C++ code</li>
  <li>Bill Lorensen - GE CRD; testing, requirements, architecture</li>
  <li>Ken Martin - Kitware; Build process, architecture, 
  <li>Dimitris Metaxas - UPenn, segmentation algorithms</li>
  <li>Jim Miller - GE CRD; Image classes, iterators, pipeline update 
  <li>Lydia Ng - Mathsoft (now Insightful); Image filters, 
  clustering/segementation algorithms</li>
  <li>Aljaz Noe - UPenn; FEM classes</li>
  <li>Sayan Pathak &ndash; MathSoft (now Insightful); image 
  clustering/segementation algorithms</li>
  <li>Will Schroeder - Kitware; architecture, Mesh classes, documentation,
   algorithms, core classes</li>
  <li>Marcelo Siqueira - UPenn; FEM classes</li>
  <li>George Stetton - Pittsburgh; image filters, algorithms</li>
  <li>Tessa Sundaram - UPenn; FEM classes, registration algorithms</li>
  <li>Jayaram Udupa - Upenn, segmentation algorithms</li>
  <li>Ross Whitaker - Utah; architecture, algorithms</li>
  <li>Ying Zhuge - UPenn, segmentation algorithms</li>

<h3>How do I participate?</h3>
Because ITK is an open-source system, you can participate. If you'd like
to become involved, here are the following steps that you might consider.
  <li>Read this document</li>
  <li> Obtain access to the CVS repository (read-only, anonymous access),&nbsp;
and obtain the distribution using the following procedure (see instructions
in For More Information at the end of document).</li>
  <li>Find the Insight/Documents/InsightStart.doc and read it thoroughly.</li>
  <li>As this document suggests, join the insight-developers list.</li>
  <li>Contribute code or fix bugs by mailing code to the list or contacting
a developer directly.</li>
  <li>Once you demonstrate your abilities, obtain read-write access to the&nbsp;
repository. Access can be obtained by contacting Bill Hoffman at Kitware
at 518-371-3971 x105 and leaving your desired account name and account password.</li>
<h3>What are the terms of use?</h3>
Because ITK was developed through US Government funding, it does not carry
a copyright as many open-source systems do. Instead, it carries a no-cost
license. The licence can be found at Insight/license.txt.<br>
The important feature of the license is that it gives permission to use Insight
for any purpose, including commercial purposes, with ....&nbsp; There is
a patented code found in the Insight/Code/Patented directory. If you use
any of these code in commercial application, you must contact the patent
holder to obtain permission.<br>
The following sections summarize the technical features of the NLM's Insight
ITK toolkit.
<h3>Design Philosophy</h3>
The following are key features of the toolkit design philosophy.<br>
  <li>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.<br>
  <li>The toolkit provides data representations in general form for images
(arbitrary dimension) and (unstructured) meshes.<br>
  <li>The toolkit does not address visualization or graphical user interface.
These are left to other toolkits (such as 
<a href="">VTK</a>, 
<a href="">VisPack</a>, 
<a href="">3DViewnix</a>,
MetaImage, etc.)
  <li> The toolkit provides minimal tools for file interface. Again, this
is left to other toolkits/libraries to provide. </li>
  <li>Multi-threaded (shared memory) parallel processing is supported. </li>

  <li>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 
<a href="">Insight testing 
dashboard</a>, where testing results are posted, is central to this

<h3>Architecture </h3>
The following are key features of the toolkit architecture.
  <li>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.</li>
  <li>Object factories are used to instantiate objects. Factories allow run-time
extension of the system. </li>
<h3>Implementation Philosophy</h3>
The following are key features of the toolkit implementation philosophy.<br>
  <li>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.</li>
  <li>The toolkit is cross-platform (Unix and Windows).</li>
  <li> The toolkit supports multiple language bindings, including such 
  languages as Tcl, Python, and Java. These bindings are generated 
  automatically using an auto-wrap process. 
  <a href="">Cable</a> is the tool we use for
  wrapping the code.</li>
  <li> 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. </li>
<h3>Build Environment</h3>
Insight uses the 
<a href="">CMake</a>
(cross-platform make) build environment. CMake uses
configure and make on Unix and generates projects and workspaces in the windows
<h3>Testing Environment</h3>
Insight 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 
<a href="">Insight testing 
dashboard</a>. We use 
<a href="">Dart</a> to manage the testing 
process, and to post the results to the dashboard.
<h3>Background References </h3>
<h4>C++ Patterns and Generics</h4>
Insight uses many advanced design patterns and generic programming. You may find these references useful in understanding the design and syntax of Insight.
<li><b>Design Patterns.</b> by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch </li>
<li><b>Generic Programming and the Stl : Using and Extending the C++ Standard Template Library</b> (Addison-Wesley Professional Computing Series)
by Matthew H. Austern </li>
<li><b>Advanced C++ Programming Styles and Idioms</b> by James O. Coplien</li>
<li><b>C/C++ Users Journal</b></li>
<li><b>C++ Report</b></li>

  A number of resources are available to learn more about ITK.
    <li>The ITK web pages are located
    <a href=""></a>.
    <li>Users of the toolkit should look in the file
    <a href="GettingStarted.txt">GettingStarted.txt</a>. This file contains 
    information on how to obtain ITK and the basics of compilation and
    otherwise managing the software.
    <li>Developers, or users interested in learning more, should look in the
    document <a href="Documentation/InsightStart.pdf">InsightStart.pdf</a> or
    InsightStart.doc found in the Insight/Documentation directory.
    <li>Developers should also look at the ITK style guide
    <a href="Documentation/Style.pdf">Style.pdf</a>.

  A great way to learn about ITK is to see how it is used. There are three
  places to find examples.
  <li>The <a href="Examples/">Insight/Examples</a> distributed with ITK.
  The source code is available.</li>
  <li>The <a href="">Examples web pages</a>. 
  These are extensive descriptions, with images and references, of the 
  examples found in #1 above.</li>
  <li>The <a href="Testing/Code/">Testing directories</a> distributed with
  ITK are simple, mainly undocumented examples of how to use the code.</li>

    <li>Data is available via anonymous ftp from: 
      <a href=""></a>.</li>
    <li>See also the
      <a href="">ITK Data web page</a>.</li>

    <li>Terry Yoo (NLM/NIH Insight Project Manager</li>
    <li>Bill Lorensen (PI GE CRD</li>
    <li>Will Schroeder (PI Kitware, Inc.</li>
    <li>Stephen Aylward (PI UNC</li>
    <li>Ross Whitaker (PI Utah</li>
    <li>Vikram Chalana (PI Mathsoft (now Insightful)</li>
    <li>Dimitri Metaxas (PI UPenn </li>
  <h3> </h3>
Something went wrong with that request. Please try again.