An Introduction to Programming for Medical Image Analysis with The Visualization Toolkit
Xenophon Papademetris
A Programming guide for the BioImage Suite
Project
Draft December 12 2006
Xenophon Papademetris
A Programming guide for the BioImage Suite
Project
Draft December 12 2006
Preface
This book is an edited collection of class handouts that I wrote for the graduate seminar “Programming
for Medical Image Analysis” (ENAS 920a) that was taught at Yale University, Department of Biomedical
Engineering, in the Fall of 2006. My goal for the class was to provide sufficient introductory material for
a typical 1st year engineering graduate student with some background in programming in C and C++
to acquire the skills to leverage modern open source toolkits in medical image analysis and visualization
such as the Visualization Toolkit (VTK)[24] and, to a lesser extent, the Insight Toolkit (ITK)[12].
One obviously has to acknowledge that there are many programming books out there that cover the
material discussed in this book in more depth (and more correctly perhaps); I list many of my sources
in Chapter 1. However, placed one on top of the other, these books form a pile about 1-2 feet high,
which can be discouraging to a beginner. This book is meant to be an introductory guide. Many of the
definitions are informal, much like one teaches math at 1st grade. As the student progresses and begins
to understand the introductory material, then he/she should look at more specialized books which offer
a deeper insight into what is going on. The manual pages for many of these toolkits also become useful
at this point.
Most of our graduate students – the intended audience for this book and class – while having a strong
applied mathematics/signal processing background, are not expert programmers. Frequently, they would
have had some programming classes at the undergraduate level and would have been, most likely, exposed
to C/C++ at some point. However, with rare exceptions, a dive into the combination of object-oriented
and generic programming model used in ITK, for instance, would leave most of them befuddled.
Such students begin their graduate research in semester long projects called “special investigations”.
This is part of the process of identifying a topic for their research as well as a lab in which they will
pursue their dissertation work. In our own research in medical image analysis, the typical product of a
doctoral dissertation is a mathematical framework for attacking an image analysis problem which has
to be translated into computer code for testing and validation.
Most of the students, in these special investigations, prototype ideas in MATLAB [15]. While MATLAB
is a wonderful prototyping tool, it leaves much to be desired in terms of the development of the
programming habits needed to write a large, sustainable, and reusable body of code. Unfortunately,
many students ending up in the trap of developing the best algorithms that can be implemented in
MATLAB as opposed to focusing on what on optimal algorithmic strategy would be. This is especially
apparent once large 3D and 4D datasets enter into the picture, and their algorithms end up taking hours
and days to run.
At this point in the game, a helpful professor suggests that they should probably look to move to a
more efficient language such as C++. However, one look at straight C++ without any of the additional
toolkits, makes them realize that switching to C++ is easier said than done. There are very few default
5
CONTENTS Draft December 13, 2006
operations for things like linear algebra, image processing, image display etc. Then, perhaps, another
helpful person suggests that they take a look at VTK and/or ITK. While now, they can see that there
is a ton of functionality out there, they are often lost as to where to begin. VTK and ITK are natural
tools once one is used to them but they can be imposing and “scary” to the beginner. While there are
some books out there (especially the VTK User’s Guide) which are very helpful, they are often only
obliquely related to what they really need to learn how to do: implement image analysis methods, learn
how to (properly) display their results, and learn how to put a graphical user interface to enable them
and their potential users to interact with the methods. The goal of the course, and this book, is to
precisely provide the necessary guidance for a new graduate student in order to achieve these goals.
The selection of the material, as well as its presentation, is naturally colored by the author’s own
experience. I coordinate the BioImage Suite project www.bioimagesuite.org, which is a large medical
image analysis utility developed in a mixture of C++ and [ Incr] Tcl. 1 In part, the motivation for
teaching this class and writing this book, is directly derived from the needs of the BioImage Suite
project. In particular, the driving question was, how does one get a new programmer up to speed with
the skills he/she will need in order to contribute? Perhaps somebody else teaching this class would have
used Python instead of Tcl as the scripting language; this is as much a matter of taste (and endless
discussions and sadly flame wars in this internet era) and experience with the particular language as
anything else. Also, while I mention ITK towards the end – see Chapter 24, the primary toolkit used
here is VTK. The template-free interface of VTK makes it easier for beginners, and I find that ITK can
be downright user-hostile to the less experienced programmer.
One of my complaints with many introductory texts is that they never attempt to teach how one goes
about learning how to put together decent sized applications. They focus too much on “grammar” and
too little on “writing stories”. However, graduate students need to write “stories” – useful ease-to-use
tools that both they and clinical and/or basic science collaborators can use and maintain. Hence, as
part of the class, I have also made an attempt to introduce some software engineering tools such as
Subversion and CMAKE. As any experienced developer often learns the hard way, these tools can be
just as critical as the choice of programming language or toolkit.
Finally, a disclaimer: While VTK is now at version 5.0 we still focus on VTK 4.4 – this is the version in
use in BioImage Suite at this point. As we migrate the software to VTK 5.x (a good rule of thumb is
never to use .0 release of any toolkit) this book will be updated to reflect this.
Acknowledgments: BioImage Suite is supported by the National Institutes of Health (NIH)/National
Institute of Biomedical Imaging and Bioengineering (NIBIB) under grant 1 R01 EB006494-01. The
author would also like to acknowledge the valuable help of Thomas Teisseyre in preparing this book.
1Interfacing with BioImage Suite is discussed in Chapters 15 and 16.

国外某大学站点上下到的vtk和医学使用的一个教程,作为vtk开发可以参考下其中内容,注意,该文档仅仅为对方学校内部使用,好像并没有公开发表,所以也请下载后内部教材使用而已,不要将其public。