Contents

I  Introduction
1 Welcome
 1.1 Organization
 1.2 How to Learn ITK
 1.3 Software Organization
 1.4 The Insight Community and Support
 1.5 A Brief History of ITK
2 Configuring and Building ITK
 2.1 Obtaining the Software
  2.1.1 Downloading Packaged Releases
  2.1.2 Downloading From Git
  2.1.3 Data
 2.2 Using CMake for Configuring and Building ITK
  2.2.1 Preparing CMake
  2.2.2 Configuring ITK
  2.2.3 Advanced Module Configuration
  2.2.4 Static and Shared Libraries
  2.2.5 Compiling ITK
  2.2.6 Installing ITK on Your System
 2.3 Cross compiling ITK
 2.4 Getting Started With ITK
 2.5 Using ITK as an External Library
  2.5.1 Hello World!
II  Architecture
3 System Overview
 3.1 System Organization
 3.2 Essential System Concepts
  3.2.1 Generic Programming
  3.2.2 Include Files and Class Definitions
  3.2.3 Object Factories
  3.2.4 Smart Pointers and Memory Management
  3.2.5 Error Handling and Exceptions
  3.2.6 Event Handling
  3.2.7 Multi-Threading
 3.3 Numerics
 3.4 Data Representation
 3.5 Data Processing Pipeline
 3.6 Spatial Objects
 3.7 Wrapping
  3.7.1 Python Setup
   Install Stable Python Packages
   Install Latest Python Packages
   Build Python Packages from Source
4 Data Representation
 4.1 Image
  4.1.1 Creating an Image
  4.1.2 Reading an Image from a File
  4.1.3 Accessing Pixel Data
  4.1.4 Defining Origin and Spacing
  4.1.5 RGB Images
  4.1.6 Vector Images
  4.1.7 Importing Image Data from a Buffer
 4.2 PointSet
  4.2.1 Creating a PointSet
  4.2.2 Getting Access to Points
  4.2.3 Getting Access to Data in Points
  4.2.4 RGB as Pixel Type
  4.2.5 Vectors as Pixel Type
  4.2.6 Normals as Pixel Type
 4.3 Mesh
  4.3.1 Creating a Mesh
  4.3.2 Inserting Cells
  4.3.3 Managing Data in Cells
  4.3.4 Customizing the Mesh
  4.3.5 Topology and the K-Complex
  4.3.6 Representing a PolyLine
  4.3.7 Simplifying Mesh Creation
  4.3.8 Iterating Through Cells
  4.3.9 Visiting Cells
  4.3.10 More on Visiting Cells
 4.4 Path
  4.4.1 Creating a PolyLineParametricPath
 4.5 Containers
5 Spatial Objects
 5.1 Introduction
 5.2 Hierarchy
 5.3 Transformations
 5.4 Types of Spatial Objects
  5.4.1 ArrowSpatialObject
  5.4.2 BlobSpatialObject
  5.4.3 EllipseSpatialObject
  5.4.4 GaussianSpatialObject
  5.4.5 GroupSpatialObject
  5.4.6 ImageSpatialObject
  5.4.7 ImageMaskSpatialObject
  5.4.8 LandmarkSpatialObject
  5.4.9 LineSpatialObject
  5.4.10 MeshSpatialObject
  5.4.11 SurfaceSpatialObject
  5.4.12 TubeSpatialObject
  5.4.13 DTITubeSpatialObject
 5.5 Read/Write SpatialObjects
 5.6 Statistics Computation via SpatialObjects
6 Iterators
 6.1 Introduction
 6.2 Programming Interface
  6.2.1 Creating Iterators
  6.2.2 Moving Iterators
  6.2.3 Accessing Data
  6.2.4 Iteration Loops
 6.3 Image Iterators
  6.3.1 ImageRegionIterator
  6.3.2 ImageRegionIteratorWithIndex
  6.3.3 ImageLinearIteratorWithIndex
  6.3.4 ImageSliceIteratorWithIndex
  6.3.5 ImageRandomConstIteratorWithIndex
 6.4 Neighborhood Iterators
  6.4.1 NeighborhoodIterator
   Basic neighborhood techniques: edge detection
   Convolution filtering: Sobel operator
   Optimizing iteration speed
   Separable convolution: Gaussian filtering
   Slicing the neighborhood
   Random access iteration
  6.4.2 ShapedNeighborhoodIterator
   Shaped neighborhoods: morphological operations
7 Image Adaptors
 7.1 Image Casting
 7.2 Adapting RGB Images
 7.3 Adapting Vector Images
 7.4 Adaptors for Simple Computation
 7.5 Adaptors and Writers
III  Development Guidelines
8 How To Write A Filter
 8.1 Terminology
 8.2 Overview of Filter Creation
 8.3 Streaming Large Data
  8.3.1 Overview of Pipeline Execution
  8.3.2 Details of Pipeline Execution
   UpdateOutputInformation()
   PropagateRequestedRegion()
   UpdateOutputData()
 8.4 Threaded Filter Execution
 8.5 Filter Conventions
  8.5.1 Optional
  8.5.2 Useful Macros
 8.6 How To Write A Composite Filter
  8.6.1 Implementing a Composite Filter
  8.6.2 A Simple Example
9 How To Create A Module
 9.1 Name and dependencies
  9.1.1 CMakeLists.txt
  9.1.2 itk-module.cmake
 9.2 Headers
 9.3 Libraries
 9.4 Tests
 9.5 Wrapping
  9.5.1 CMakeLists.txt
  9.5.2 Class wrap files
   Wrapping Variables
   Wrapping Macros
 9.6 Third-Party Dependencies
  9.6.1 itk-module-init.cmake
  9.6.2 CMakeList.txt
 9.7 Contributing with a Remote Module
  9.7.1 Policy for Adding and Removing Remote Modules
  9.7.2 Procedure for Adding a Remote Module