[Insight-developers] Re: [vtkusers] Re: Announce; Insight (ITK) Segmentation and Registration Toolkit

Will Schroeder will.schroeder@kitware.com
Thu, 28 Feb 2002 17:01:08 -0500


Hi Xenios-


>What is the relationship (if any) between ITK and VTK? Can they easily 
>co-exist in the same project?

There are several features that simplifies VTK / ITK integration.
+ Thanks to CMake, ITK and VTK can be built and linked in a consistent 
fashion. ITK requires ANSI C++, including RTTI, so VTK must be built with 
the ANSI flag enabled (VTK_USE_ANSI_STDLIB).
+ There are filters (called importers and exporters) in VTK and ITK that 
allow data to be moved between pipelines.
+ There are readers and writers that allow data exchange.

ITK has no visualization support, so using VTK as the visualization engine 
is a natural. (In fact there are several ITK examples that are written 
assuming VTK is available.)  It also has a dataflow architecture, but in 
ITK there are just two data object types: an image and a mesh. The mesh in 
particular is more flexible but less memory efficient. The ITK image is 
templated over pixel type, so it is possible to have pixels that are quite 
complex. The ITK iterators are quite beautiful, they support n-dimensions 
and nicely simplify the code.

While there are similarities in design, style, and extreme programming 
style (i.e., dashboard), the main thing that you will notice is that ITK is 
very templated in the generic programming style. This means that ITK is 
compile-time oriented versus VTK's run-time orientation. This use of C++ is 
almost like a new programming language, since it uses features of C++ that 
some people haven't seen too much of. On the plus side, generic programming 
tends to produce faster executing code. You will definitely need a good, 
modern compiler to handle ITK.

Another integration path: ITK has developed a system called CABLE that 
automatically wraps C++ with Tcl, a lot like VTK does now. The only thing 
is that the process is enormously more difficult because of the templated 
code. CABLE is a general solution, but slower and creates much bigger 
libraries than the custom VTK wrapping process that we have now. Eventually 
this will be refined and VTK/ITK programs using Tcl or other interpreted 
languages should be real easy to do. For now it is a bit tricky to work with.

Will

William J. Schroeder, Ph.D
Kitware, Inc.
469 Clifton Corporate Parkway
Clifton Park, NY 12065
will.schroeder@kitware.com
1-518-371-3971 x102
1-518-371-3971 (fax)