forked from InsightSoftwareConsortium/ITK
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathREADME.html
320 lines (307 loc) · 15.4 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
<!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 & 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&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 & 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 – 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),
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 [email protected])</li>
<li>Bill Lorensen (PI GE CRD [email protected])</li>
<li>Will Schroeder (PI Kitware, Inc. [email protected])</li>
<li>Stephen Aylward (PI UNC [email protected]).</li>
<li>Ross Whitaker (PI Utah [email protected])</li>
<li>Lydia Ng (PI Insightful [email protected])</li>
<li>Dimitri Metaxas (PI Rutgers [email protected]) </li>
</ul>
<br>
<br>
<br>
<br>
<br>
<h3></h3>
<h3> </h3>
<br>
</body>
</html>