Skip to content

LinjieChen/ITK

 
 

Repository files navigation

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  <title>ITK README File - Overview and further information</title>
</head>
<body>
<table cellpadding="2" cellspacing="1" border="0" width="100%">
  <tbody>
    <tr valign="Top">
      <td align="Center">
      <h1>
      <a href="http://www.itk.org">
      <img src="./Documentation/Art/itkLogoMediumTransparentBackground.gif" 
      alt="ITK Logo" width="200" height="128" align="Top" border=0></a>
      </h1>
      </td>
      <td>
      <h1>An Introduction to the <br>
Insight Segmentation &amp; Registration Toolkit <br>
      </h1>
      <hr align="Left" width="100%" size="2"></td>
    </tr>
  </tbody>
</table>
<br>
Welcome to the National Library of Medicine Insight Segmentation and Registration
Toolkit (ITK).<br>
<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>
<h2>Introduction</h2>
<h3>What is <a href="http://www.itk.org">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>
<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>
<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
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="http://www.nlm.nih.gov/nlmhome.html">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="http://www.nlm.nih.gov/research/visible/visible_human.html"> 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 Software 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 (now at
Rutgers). 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.  <br>

<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>
<br>
Some of the early developers include:<br>
<ul>
  <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, 
  infrastructure</li>
  <li>Dimitris Metaxas - UPenn, segmentation algorithms</li>
  <li>Jim Miller - GE CRD; Image classes, iterators, pipeline update 
  mechanism</li>
  <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>
</ul>

<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.
<br>
<ol>
  <li>Read this document and the
  <a href="http://www.itk.org/ItkSoftwareGuide.pdf">
  <i>ITK Software Guide</i></a>. (The book is also available for purchase from
  <a href="http://www.kitware.com/products/index.html">
  Kitware's estore</a>.)</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 CVS repository. Access can be obtained by following the procedure 
  described in the Insight/Documents/InsightDeveloperStart.pdf file.</li>
</ol>

<h3>What are the terms of use?</h3>
The ITK copyright is held by the Insight Software Consortium. This non-profit
entity promotes the use of ITK for educational and research purposes. The
<a href="http://www.itk.org/HTML/Copyright.htm">copyright</a> enables both
commercial and non-commercial usage. 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>

<h2>TECHNICAL SUMMARY</h2>
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>
<br>
<ul>
  <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>
  <li>The toolkit provides data representations in general form for images
(arbitrary dimension) and (unstructured) meshes.<br>
 </li>
  <li>The toolkit does not address visualization or graphical user interface.
These are left to other toolkits (such as 
<a href="http://www.vtk.org">VTK</a>, 
<a href="http://rolle.engr.utk.edu/~vision/vispack/">VisPack</a>, 
<a href="http://mipgsun.mipg.upenn.edu/~Vnews/">3DViewnix</a>,
<a href="http://caddlab.rad.unc.edu/technologies/index.html#metaObjects">
MetaImage</a>, etc.)
  </li>
  <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="http://public.kitware.com/dashboard.php?name=itk">Insight testing 
dashboard</a>, where testing results are posted, is central to this
process.</li>

</ul>
<h3>Architecture </h3>
The following are key features of the toolkit architecture.
<ul>
  <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>
</ul>
<h3>Implementation Philosophy</h3>
The following are key features of the toolkit implementation philosophy.<br>
<ul>
  <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, Windows and MacOSX).</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="http://www.itk.org/HTML/CableSwig.html">CableSwig</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>
  <li>The Command/Observer design pattern is used for invoking and processing
  events.</li>
</ul>
<h3>Build Environment</h3>
Insight uses the 
<a href="http://www.cmake.org">CMake</a>
(cross-platform make) build environment. CMake uses
configure and make on Unix and generates projects and workspaces in the windows
environment.<br>
<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="http://public.kitware.com/dashboard.php?name=itk">Insight testing 
dashboard</a>. We use 
<a href="http://public.kitware.com/Dart/">Dart</a> to manage the testing 
process, and to post the results to the dashboard.
<br>
<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.
<ul>
<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>
</ul>


<h2>ADDITIONAL INFORMATION</h2>
  <h3>Resources</h3>
  A number of resources are available to learn more about ITK.
  <ul>
    <li>The ITK web pages are located
    <a href="http://www.itk.org">http://www.itk.org</a>.</li>
    <li>The definitive guide to ITK is available from 
    <a href="http://www.itk.org/ItkSoftwareGuide.pdf">
    <i>ITK Software Guide</i></a>. (The book is also available for 
    purchase from <a href="http://www.kitware.com/products/index.html">
    Kitware's estore</a>.)</li>
    <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>
    <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>
    <li>Developers should also look at the ITK style guide
    <a href="Documentation/Style.pdf">Style.pdf</a>.</li>
  </ul>

  <h3>Examples</h3>
  A great way to learn about ITK is to see how it is used. There are three
  places to find examples.
  <ol>
  <li>The <a href="Examples/">Insight/Examples</a> distributed with ITK.
  The source code is available. The examples are used in the <i>ITK
  Software Guide</i> mentioned previously.</li>
  <li>The <a href="http://www.itk.org/HTML/Examples.htm">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>
  </ol>

  <h3>Data</h3>
  <ul>
    <li>Data is available via anonymous ftp from: 
      <a href="ftp://public.kitware.com/pub/itk/Data/">
      ftp://public.kitware.com/pub/itk/Data/</a>.</li>
    <li>See also the
      <a href="http://www.itk.org/HTML/Data.htm">ITK Data web page</a>.</li>
  </ul>

  <h3>Contacts</h3>
  <ul>
    <li>Terry Yoo (NLM/NIH Insight Project Manager yoo@fluorite.nlm.nih.gov)</li>
    <li>Bill Lorensen (PI GE CRD lorensen@crd.ge.com)</li>
    <li>Will Schroeder (PI Kitware, Inc. will.schroeder@kitware.com)</li>
    <li>Stephen Aylward (PI UNC aylward@unc.edu).</li>
    <li>Ross Whitaker (PI Utah whitaker@cs.utah.edu)</li>
    <li>Lydia Ng (PI Insightful lng@insightful.com)</li>
    <li>Dimitri Metaxas (PI Rutgers dnm@cs.rutgers.edu) </li>
  </ul>
  <br>
 <br>
  <br>
 <br>
  <br>
  <h3></h3>
  <h3> </h3>
  <br>
  </body>
  </html>