Contents

I  Introduction
1 Welcome
 1.1 Organization
 1.2 How to Learn OTB
 1.3 Software Organization
  1.3.1 Obtaining the Software
 1.4 Downloading OTB
  1.4.1 Join the Mailing List
  1.4.2 Directory Structure
  1.4.3 Documentation
  1.4.4 Data
 1.5 The OTB Community and Support
 1.6 A Brief History of OTB
  1.6.1 ITK’s history
2 Installation
 2.1 Installing binary packages
  2.1.1 Windows 2000/XP/Vista/Seven
  2.1.2 MacOS X
  2.1.3 Linux
   Ubuntu 10.04 and higher
   OpenSuse 11.X and higher
   CentOS 5.5
 2.2 Building from sources
  2.2.1 Getting the OTB source code
  2.2.2 External Libraries
  2.2.3 Configuring OTB
   Preparing CMake
   Compiling OTB
 2.3 Getting Started With OTB
  2.3.1 Hello World !
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
II  Tutorials
4 Building Simple Applications with OTB
 4.1 Hello world
 4.2 Pipeline basics: read and write
 4.3 Filtering pipeline
 4.4 Handling types: scaling output
 4.5 Working with multispectral or color images
 4.6 Parsing command line arguments
 4.7 Viewer
 4.8 Going from raw satellite images to useful products
III  User’s guide
5 Data Representation
 5.1 Image
  5.1.1 Creating an Image
  5.1.2 Reading an Image from a File
  5.1.3 Accessing Pixel Data
  5.1.4 Defining Origin and Spacing
  5.1.5 Accessing Image Metadata
  5.1.6 RGB Images
  5.1.7 Vector Images
  5.1.8 Importing Image Data from a Buffer
  5.1.9 Image Lists
 5.2 PointSet
  5.2.1 Creating a PointSet
  5.2.2 Getting Access to Points
  5.2.3 Getting Access to Data in Points
  5.2.4 Vectors as Pixel Type
 5.3 Mesh
  5.3.1 Creating a Mesh
  5.3.2 Inserting Cells
  5.3.3 Managing Data in Cells
 5.4 Path
  5.4.1 Creating a PolyLineParametricPath
6 Reading and Writing Images
 6.1 Basic Example
 6.2 Pluggable Factories
 6.3 IO Streaming
  6.3.1 Implicit Streaming
  6.3.2 Explicit Streaming
 6.4 Reading and Writing RGB Images
 6.5 Reading, Casting and Writing Images
 6.6 Extracting Regions
 6.7 Reading and Writing Vector Images
  6.7.1 Reading and Writing Complex Images
 6.8 Reading and Writing Multiband Images
  6.8.1 Extracting ROIs
 6.9 Reading Image Series
7 Reading and Writing Auxilary Data
 7.1 Reading DEM Files
 7.2 Elevation management with OTB
 7.3 Lidar data Files
 7.4 Reading and Writing Shapefiles and KML
 7.5 Handling large vector data through OGR
8 Basic Filtering
 8.1 Thresholding
  8.1.1 Binary Thresholding
  8.1.2 General Thresholding
  8.1.3 Threshold to Point Set
 8.2 Mathematical operations on images
 8.3 Gradients
  8.3.1 Gradient Magnitude
  8.3.2 Gradient Magnitude With Smoothing
  8.3.3 Derivative Without Smoothing
 8.4 Second Order Derivatives
  8.4.1 Laplacian Filters
   Laplacian Filter Recursive Gaussian
 8.5 Edge Detection
  8.5.1 Canny Edge Detection
  8.5.2 Ratio of Means Detector
 8.6 Neighborhood Filters
  8.6.1 Mean Filter
  8.6.2 Median Filter
  8.6.3 Mathematical Morphology
   Binary Filters
   Grayscale Filters
 8.7 Smoothing Filters
  8.7.1 Blurring
   Discrete Gaussian
  8.7.2 Edge Preserving Smoothing
   Introduction to Anisotropic Diffusion
   Gradient Anisotropic Diffusion
   Mean Shift filtering and clustering
  8.7.3 Edge Preserving Speckle Reduction Filters
  8.7.4 Edge preserving Markov Random Field
 8.8 Distance Map
 8.9 Rasterization
9 Image Registration
 9.1 Registration Framework
 9.2 ”Hello World” Registration
 9.3 Features of the Registration Framework
  9.3.1 Direction of the Transform Mapping
  9.3.2 Registration is done in physical space
 9.4 Multi-Modality Registration
  9.4.1 Viola-Wells Mutual Information
 9.5 Centered Transforms
  9.5.1 Rigid Registration in 2D
  9.5.2 Centered Affine Transform
 9.6 Transforms
  9.6.1 Geometrical Representation
  9.6.2 Transform General Properties
  9.6.3 Identity Transform
  9.6.4 Translation Transform
  9.6.5 Scale Transform
  9.6.6 Scale Logarithmic Transform
  9.6.7 Euler2DTransform
  9.6.8 CenteredRigid2DTransform
  9.6.9 Similarity2DTransform
  9.6.10 QuaternionRigidTransform
  9.6.11 VersorTransform
  9.6.12 VersorRigid3DTransform
  9.6.13 Euler3DTransform
  9.6.14 Similarity3DTransform
  9.6.15 Rigid3DPerspectiveTransform
  9.6.16 AffineTransform
  9.6.17 BSplineDeformableTransform
  9.6.18 KernelTransforms
 9.7 Metrics
  9.7.1 Mean Squares Metric
   Exploring a Metric
  9.7.2 Normalized Correlation Metric
  9.7.3 Mean Reciprocal Square Differences
  9.7.4 Mutual Information Metric
   Parzen Windowing
   Viola and Wells Implementation
   Mattes et al. Implementation
  9.7.5 Kullback-Leibler distance metric
  9.7.6 Normalized Mutual Information Metric
  9.7.7 Mean Squares Histogram
  9.7.8 Correlation Coefficient Histogram
  9.7.9 Cardinality Match Metric
  9.7.10 Kappa Statistics Metric
  9.7.11 Gradient Difference Metric
 9.8 Optimizers
 9.9 Landmark-based registration
10 Disparity Map Estimation
 10.1 Disparity Maps
  10.1.1 Geometric deformation modeling
  10.1.2 Similarity measures
  10.1.3 The correlation coefficient
 10.2 Regular grid disparity map estimation
 10.3 Irregular grid disparity map estimation
 10.4 Stereo reconstruction
11 Orthorectification and Map Projection
 11.1 Sensor Models
  11.1.1 Types of Sensor Models
  11.1.2 Using Sensor Models
  11.1.3 Evaluating Sensor Model
  11.1.4 Limits of the Approach
 11.2 Map Projections
 11.3 Orthorectification with OTB
 11.4 Vector data projection manipulation
 11.5 Geometries projection manipulation
 11.6 Elevation management with OTB
 11.7 Vector data area extraction
12 Radiometry
 12.1 Radiometric Indices
  12.1.1 Introduction
  12.1.2 NDVI
  12.1.3 ARVI
  12.1.4 AVI
 12.2 Atmospheric Corrections
13 Image Fusion
 13.1 Simple Pan Sharpening
 13.2 Bayesian Data Fusion
14 Feature Extraction
 14.1 Textures
  14.1.1 Haralick Descriptors
  14.1.2 PanTex
  14.1.3 Structural Feature Set
 14.2 Interest Points
  14.2.1 Harris detector
  14.2.2 SIFT detector
  14.2.3 SURF detector
 14.3 Alignments
 14.4 Lines
  14.4.1 Line Detection
  14.4.2 Segment Extraction
   Local Hough Transform
   Line Segment Detector
  14.4.3 Right Angle Detector
 14.5 Density Features
  14.5.1 Edge Density
  14.5.2 SIFT Density
 14.6 Geometric Moments
  14.6.1 Complex Moments
   Complex Moments for Images
   Complex Moments for Paths
  14.6.2 Hu Moments
   Hu Moments for Images
  14.6.3 Flusser Moments
   Flusser Moments for Images
 14.7 Road extraction
  14.7.1 Road extraction filter
  14.7.2 Step by step road extraction
 14.8 Cloud Detection
15 Multi-scale Analysis
 15.1 Introduction
 15.2 Morphological Pyramid
  15.2.1 Morphological Pyramid Exploitation
16 Image Segmentation
 16.1 Region Growing
  16.1.1 Connected Threshold
  16.1.2 Otsu Segmentation
  16.1.3 Neighborhood Connected
  16.1.4 Confidence Connected
 16.2 Segmentation Based on Watersheds
  16.2.1 Overview
  16.2.2 Using the ITK Watershed Filter
 16.3 Level Set Segmentation
  16.3.1 Fast Marching Segmentation
17 Image Simulation
 17.1 PROSAIL model
 17.2 Image Simulation
  17.2.1 LAI image estimation
  17.2.2 Sensor RSR Image Simulation
18 Dimension Reduction
 18.1 Principal Component Analysis
 18.2 Noise-Adjusted Principal Components Analysis
 18.3 Maximum Noise Fraction
 18.4 Fast Independant Component Analysis
 18.5 Maximum Autocorrelation Factor
19 Classification
 19.1 Introduction
  19.1.1 k-d Tree Based k-Means Clustering
  19.1.2 K-Means Classification
   Simple version
   General approach
  19.1.3 Bayesian Plug-In Classifier
  19.1.4 Expectation Maximization Mixture Model Estimation
  19.1.5 Classification using Markov Random Fields
   ITK framework
   OTB framework
 19.2 Statistical Segmentations
  19.2.1 Stochastic Expectation Maximization
 19.3 Support Vector Machines
  19.3.1 Mathematical formulation
  19.3.2 Learning With PointSets
  19.3.3 PointSet Classification
  19.3.4 Learning With Images
  19.3.5 Image Classification
  19.3.6 Generic Kernel SVM
   Learning with User Defined Kernels
   Classification with user defined kernel
  19.3.7 Multi-band, streamed classification
  19.3.8 Classification map regularization
 19.4 Kohonen’s Self Organizing Map
  19.4.1 The algorithm
   Learning
  19.4.2 Building a color table
  19.4.3 SOM Classification
  19.4.4 Multi-band, streamed classification
20 Object-based Image Analysis
 20.1 From Images to Objects
 20.2 Object Attributes
 20.3 Object Filtering based on radiometric and statistics attributes
 20.4 Hoover metrics to compare segmentations
21 Change Detection
 21.1 Introduction
  21.1.1 Surface-based approaches
 21.2 Change Detection Framework
 21.3 Simple Detectors
  21.3.1 Mean Difference
  21.3.2 Ratio Of Means
 21.4 Statistical Detectors
  21.4.1 Distance between local distributions
  21.4.2 Local Correlation
 21.5 Multi-Scale Detectors
  21.5.1 Kullback-Leibler Distance between distributions
 21.6 Multi-components detectors
  21.6.1 Multivariate Alteration Detector
22 Geospatial analysis
 22.1 Reading from and Writing to Geospatial DBs
23 Hyperspectral
 23.1 Unmixing
  23.1.1 Linear mixing model
  23.1.2 Simplex
  23.1.3 State of the art unmixing algorithms selection
   Family 1
   Family 2
   Family 3
   Further remarks
   Basic hyperspectral unmixing example
 23.2 Dimensionality reduction
 23.3 Anomaly detection
24 Image Visualization and output
 24.1 Viewer
 24.2 Images
  24.2.1 Grey Level Images
  24.2.2 Multiband Images
  24.2.3 Indexed Images
  24.2.4 Altitude Images
25 Online data
 25.1 Name to Coordinates
 25.2 Open Street Map
IV  Developer’s guide
26 Iterators
 26.1 Introduction
 26.2 Programming Interface
  26.2.1 Creating Iterators
  26.2.2 Moving Iterators
  26.2.3 Accessing Data
  26.2.4 Iteration Loops
 26.3 Image Iterators
  26.3.1 ImageRegionIterator
  26.3.2 ImageRegionIteratorWithIndex
  26.3.3 ImageLinearIteratorWithIndex
 26.4 Neighborhood Iterators
  26.4.1 NeighborhoodIterator
   Basic neighborhood techniques: edge detection
   Convolution filtering: Sobel operator
   Optimizing iteration speed
   Separable convolution: Gaussian filtering
   Random access iteration
  26.4.2 ShapedNeighborhoodIterator
   Shaped neighborhoods: morphological operations
27 Image Adaptors
 27.1 Image Casting
 27.2 Adapting RGB Images
 27.3 Adapting Vector Images
 27.4 Adaptors for Simple Computation
 27.5 Adaptors and Writers
28 Streaming and Threading
 28.1 Introduction
 28.2 Streaming and threading in OTB
 28.3 Division strategies
29 How To Write A Filter
 29.1 Terminology
 29.2 Overview of Filter Creation
 29.3 Streaming Large Data
  29.3.1 Overview of Pipeline Execution
  29.3.2 Details of Pipeline Execution
   UpdateOutputInformation()
   PropagateRequestedRegion()
   UpdateOutputData()
 29.4 Threaded Filter Execution
 29.5 Filter Conventions
  29.5.1 Optional
  29.5.2 Useful Macros
 29.6 How To Write A Composite Filter
  29.6.1 Implementing a Composite Filter
  29.6.2 A Simple Example
30 Persistent filters
 30.1 Introduction
 30.2 Architecture
  30.2.1 The persistent filter class
  30.2.2 The streaming decorator class
 30.3 An end-to-end example
  30.3.1 First step: writing a persistent filter
  30.3.2 Second step: Decorating the filter and using it
  30.3.3 Third step: one class to rule them all
31 How to write an application
 31.1 Application design
 31.2 Architecture of the class
  31.2.1 DoInit()
  31.2.2 DoUpdateParameters()
  31.2.3 DoExecute()
  31.2.4 Parameters selection
  31.2.5 Parameters description
 31.3 Compile your application
 31.4 Execute your application
 31.5 Testing your application
 31.6 Application Example
V  Appendix
32 Frequently Asked Questions
 32.1 Introduction
  32.1.1 What is OTB?
  32.1.2 What is ORFEO?
   Where can I get more information about ORFEO?
  32.1.3 What is the ORFEO Accompaniment Program?
   Where can I get more information about the ORFEO Accompaniment Program?
  32.1.4 Who is responsible for the OTB development?
 32.2 Licence
  32.2.1 Which is the OTB licence?
  32.2.2 If I write an application using OTB am I forced to distribute that application?
  32.2.3 If I write an application using OTB am I forced to contribute the code into the offical repositories?
  32.2.4 If I wanted to distribute an application using OTB what license would I need to use?
  32.2.5 I am a commercial user. Is there any restriction on the use of OTB?
 32.3 Getting OTB
  32.3.1 Who can download the OTB?
  32.3.2 Where can I download the OTB?
  32.3.3 How to get the latest bleeding-edge version?
 32.4 Compiling and installing OTB from source
  32.4.1 Which platforms are supported?
  32.4.2 Which libraries/packages are needed before compiling and installing OTB?
  32.4.3 Main steps
   Unix/Linux Platforms
   Microsoft Visual Studio (Express 2008/Express 2010)
  32.4.4 Specific platform issues
   Visual Studio 2010/Express 2010
   MacOSX 10.6 Snow Leopard
   Debian Linux / Ubuntu
 32.5 Using OTB
  32.5.1 Where to start ?
  32.5.2 What is the image size limitation of OTB ?
 32.6 Getting help
  32.6.1 Is there any mailing list?
  32.6.2 Which is the main source of documentation?
 32.7 Contributing to OTB
  32.7.1 I want to contribute to OTB, where to begin?
  32.7.2 What are the benefits of contributing to OTB?
  32.7.3 What functionality can I contribute?
 32.8 Running the tests
  32.8.1 What are the tests?
  32.8.2 How to run the tests?
  32.8.3 How to get the test data?
  32.8.4 How to submit the results?
 32.9 OTB’s Roadmap
  32.9.1 Which will be the next version of OTB?
   What is a major version?
   What is a minor version?
   What is a bugfix version?
  32.9.2 When will the next version of OTB be available?
  32.9.3 What features will the OTB include and when?
33 Release Notes
34 Wrappings to other languages
 34.1 OTB-Wrapping: bindings to Java language
  34.1.1 Mangling
  34.1.2 How to Use OTB-Wrapping in Java
   Import OTB classes
   Compile Java programs
   Java programs execution
  34.1.3 Example
  34.1.4 Use OTB-Wrapping
   Download sources
   Required Tools
   Compile OTB-Wrapping sources
   Download binaries
   Use OTB-Wrapping with Eclipse
 34.2 Java tutorials
  34.2.1 Hello World
  34.2.2 Pipeline
  34.2.3 Filtering pipeline
  34.2.4 Smarter Filtering Pipeline
  34.2.5 Scaling Pipeline
  34.2.6 MultiSpectral
  34.2.7 OrthoFusion
 34.3 Python tutorials
  34.3.1 Hello World
  34.3.2 Pipeline
  34.3.3 Filtering pipeline
  34.3.4 Smarter Filtering Pipeline
  34.3.5 Scaling Pipeline
  34.3.6 MultiSpectral
 34.4 Developer Guide
  34.4.1 Add a new Library : Creating a new CMakeList.txt file
  34.4.2 Add a new cmake file
   A simple Example : otb::StreamingShrinkImageFilter
  34.4.3 Predefined Macros
   OTB-Wrapping predefined variables
   OTB-Wrapping predefined lists
   Macro MANGLE_NAME
  34.4.4 HTML JavaDoc generation
   Generate JavaDoc documentation
   Generate JavaDoc while compilation
35 Contributors