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.3.2 Directory Structure
  1.3.3 Documentation
  1.3.4 Data
 1.4 The OTB Community and Support
  1.4.1 Join the Mailing List
  1.4.2 Community
 1.5 A Brief History of OTB
  1.5.1 ITK’s history
2 Compiling OTB from source
 2.1 Linux and Mac OS X
  2.1.1 Setting up the build environment
  2.1.2 SuperBuild: Build OTB and all dependencies
  2.1.3 Normal build: Build only OTB
 2.2 Windows
 2.3 Known issues
3 Compiling ICE and Monteverdi from source
 3.1 Linux and Mac OS X
  3.1.1 ICE
  3.1.2 Monteverdi
 3.2 Windows
4 System Overview
 4.1 System Organization
 4.2 Essential System Concepts
  4.2.1 Generic Programming
  4.2.2 Include Files and Class Definitions
  4.2.3 Object Factories
  4.2.4 Smart Pointers and Memory Management
  4.2.5 Error Handling and Exceptions
  4.2.6 Event Handling
  4.2.7 Multi-Threading
 4.3 Numerics
 4.4 Data Representation
 4.5 Data Processing Pipeline
 4.6 Spatial Objects
II  Tutorials
5 Building Simple Applications with OTB
 5.1 Hello world
  5.1.1 Linux and Mac OS X
  5.1.2 Windows
 5.2 Pipeline basics: read and write
 5.3 Filtering pipeline
 5.4 Handling types: scaling output
 5.5 Working with multispectral or color images
 5.6 Parsing command line arguments
 5.7 Going from raw satellite images to useful products
III  User’s guide
6 Data Representation
 6.1 Image
  6.1.1 Creating an Image
  6.1.2 Reading an Image from a File
  6.1.3 Accessing Pixel Data
  6.1.4 Defining Origin and Spacing
  6.1.5 Accessing Image Metadata
  6.1.6 RGB Images
  6.1.7 Vector Images
  6.1.8 Importing Image Data from a Buffer
  6.1.9 Image Lists
 6.2 PointSet
  6.2.1 Creating a PointSet
  6.2.2 Getting Access to Points
  6.2.3 Getting Access to Data in Points
  6.2.4 Vectors as Pixel Type
 6.3 Mesh
  6.3.1 Creating a Mesh
  6.3.2 Inserting Cells
  6.3.3 Managing Data in Cells
 6.4 Path
  6.4.1 Creating a PolyLineParametricPath
7 Reading and Writing Images
 7.1 Basic Example
 7.2 Pluggable Factories
 7.3 IO Streaming
  7.3.1 Implicit Streaming
  7.3.2 Explicit Streaming
 7.4 Reading and Writing RGB Images
 7.5 Reading, Casting and Writing Images
 7.6 Extracting Regions
 7.7 Reading and Writing Vector Images
  7.7.1 Reading and Writing Complex Images
 7.8 Reading and Writing Multiband Images
  7.8.1 Extracting ROIs
 7.9 Reading Image Series
 7.10 Extended filename for reader and writer
  7.10.1 Purpose
  7.10.2 Syntax
  7.10.3 Reader options
  7.10.4 Writer options
8 Reading and Writing Auxilary Data
 8.1 Reading DEM Files
 8.2 Elevation management with OTB
 8.3 Reading and Writing Shapefiles and KML
 8.4 Handling large vector data through OGR
9 Basic Filtering
 9.1 Thresholding
  9.1.1 Binary Thresholding
  9.1.2 General Thresholding
  9.1.3 Threshold to Point Set
 9.2 Mathematical operations on images
  9.2.1 BandMath filter
  9.2.2 BandMathX filter
 9.3 Gradients
  9.3.1 Gradient Magnitude
  9.3.2 Gradient Magnitude With Smoothing
  9.3.3 Derivative Without Smoothing
 9.4 Second Order Derivatives
  9.4.1 Laplacian Filters
   9.4.1.1 Laplacian Filter Recursive Gaussian
 9.5 Edge Detection
  9.5.1 Canny Edge Detection
  9.5.2 Ratio of Means Detector
 9.6 Neighborhood Filters
  9.6.1 Mean Filter
  9.6.2 Median Filter
  9.6.3 Mathematical Morphology
   9.6.3.1 Binary Filters
   9.6.3.2 Grayscale Filters
 9.7 Smoothing Filters
  9.7.1 Blurring
   9.7.1.1 Discrete Gaussian
  9.7.2 Edge Preserving Smoothing
   9.7.2.1 Introduction to Anisotropic Diffusion
   9.7.2.2 Gradient Anisotropic Diffusion
   9.7.2.3 Mean Shift filtering and clustering
  9.7.3 Edge Preserving Speckle Reduction Filters
  9.7.4 Edge preserving Markov Random Field
 9.8 Distance Map
10 Image Registration
 10.1 Registration Framework
 10.2 ”Hello World” Registration
 10.3 Features of the Registration Framework
  10.3.1 Direction of the Transform Mapping
  10.3.2 Registration is done in physical space
 10.4 Multi-Modality Registration
  10.4.1 Viola-Wells Mutual Information
 10.5 Centered Transforms
  10.5.1 Rigid Registration in 2D
  10.5.2 Centered Affine Transform
 10.6 Transforms
  10.6.1 Geometrical Representation
  10.6.2 Transform General Properties
  10.6.3 Identity Transform
  10.6.4 Translation Transform
  10.6.5 Scale Transform
  10.6.6 Scale Logarithmic Transform
  10.6.7 Euler2DTransform
  10.6.8 CenteredRigid2DTransform
  10.6.9 Similarity2DTransform
  10.6.10 QuaternionRigidTransform
  10.6.11 VersorTransform
  10.6.12 VersorRigid3DTransform
  10.6.13 Euler3DTransform
  10.6.14 Similarity3DTransform
  10.6.15 Rigid3DPerspectiveTransform
  10.6.16 AffineTransform
  10.6.17 BSplineDeformableTransform
  10.6.18 KernelTransforms
 10.7 Metrics
  10.7.1 Mean Squares Metric
   10.7.1.1 Exploring a Metric
  10.7.2 Normalized Correlation Metric
  10.7.3 Mean Reciprocal Square Differences
  10.7.4 Mutual Information Metric
   10.7.4.1 Parzen Windowing
   10.7.4.2 Viola and Wells Implementation
   10.7.4.3 Mattes et al. Implementation
  10.7.5 Kullback-Leibler distance metric
  10.7.6 Normalized Mutual Information Metric
  10.7.7 Mean Squares Histogram
  10.7.8 Correlation Coefficient Histogram
  10.7.9 Cardinality Match Metric
  10.7.10 Kappa Statistics Metric
  10.7.11 Gradient Difference Metric
 10.8 Optimizers
 10.9 Landmark-based registration
11 Disparity Map Estimation
 11.1 Disparity Maps
  11.1.1 Geometric deformation modeling
  11.1.2 Similarity measures
  11.1.3 The correlation coefficient
 11.2 Regular grid disparity map estimation
 11.3 Irregular grid disparity map estimation
 11.4 Stereo reconstruction
12 Orthorectification and Map Projection
 12.1 Sensor Models
  12.1.1 Types of Sensor Models
  12.1.2 Using Sensor Models
  12.1.3 Evaluating Sensor Model
  12.1.4 Limits of the Approach
 12.2 Map Projections
 12.3 Orthorectification with OTB
 12.4 Vector data projection manipulation
 12.5 Geometries projection manipulation
 12.6 Elevation management with OTB
 12.7 Vector data area extraction
13 Radiometry
 13.1 Radiometric Indices
  13.1.1 Introduction
  13.1.2 NDVI
  13.1.3 ARVI
  13.1.4 AVI
 13.2 Atmospheric Corrections
14 Image Fusion
 14.1 Simple Pan Sharpening
 14.2 Bayesian Data Fusion
15 Feature Extraction
 15.1 Textures
  15.1.1 Haralick Descriptors
  15.1.2 PanTex
  15.1.3 Structural Feature Set
 15.2 Interest Points
  15.2.1 Harris detector
  15.2.2 SIFT detector
  15.2.3 SURF detector
 15.3 Alignments
 15.4 Lines
  15.4.1 Line Detection
  15.4.2 Segment Extraction
   15.4.2.1 Local Hough Transform
 15.5 Density Features
  15.5.1 Edge Density
  15.5.2 SIFT Density
 15.6 Geometric Moments
  15.6.1 Complex Moments
   15.6.1.1 Complex Moments for Images
   15.6.1.2 Complex Moments for Paths
  15.6.2 Hu Moments
   15.6.2.1 Hu Moments for Images
  15.6.3 Flusser Moments
   15.6.3.1 Flusser Moments for Images
 15.7 Road extraction
  15.7.1 Road extraction filter
  15.7.2 Step by step road extraction
 15.8 Cloud Detection
16 Multi-scale Analysis
 16.1 Introduction
 16.2 Morphological Pyramid
  16.2.1 Morphological Pyramid Exploitation
17 Image Segmentation
 17.1 Region Growing
  17.1.1 Connected Threshold
  17.1.2 Otsu Segmentation
  17.1.3 Neighborhood Connected
  17.1.4 Confidence Connected
 17.2 Segmentation Based on Watersheds
  17.2.1 Overview
  17.2.2 Using the ITK Watershed Filter
 17.3 Level Set Segmentation
  17.3.1 Fast Marching Segmentation
18 Image Simulation
 18.1 PROSAIL model
 18.2 Image Simulation
  18.2.1 LAI image estimation
  18.2.2 Sensor RSR Image Simulation
19 Dimension Reduction
 19.1 Principal Component Analysis
 19.2 Noise-Adjusted Principal Components Analysis
 19.3 Maximum Noise Fraction
 19.4 Fast Independant Component Analysis
 19.5 Maximum Autocorrelation Factor
20 Classification
 20.1 Introduction
 20.2 Unsupervised classification
  20.2.1 K-Means Classification
   20.2.1.1 Simple version
   20.2.1.2 General approach
   20.2.1.3 k-d Tree Based k-Means Clustering
  20.2.2 Kohonen’s Self Organizing Map
   20.2.2.1 Building a color table
   20.2.2.2 SOM Classification
   20.2.2.3 Multi-band, streamed classification
  20.2.3 Bayesian Plug-In Classifier
  20.2.4 Expectation Maximization Mixture Model Estimation
  20.2.5 Statistical Segmentations
   20.2.5.1 Stochastic Expectation Maximization
  20.2.6 Classification using Markov Random Fields
   20.2.6.1 ITK framework
   20.2.6.2 OTB framework
 20.3 Supervised classification
  20.3.1 Generic machine learning framework
  20.3.2 An example of supervised classification method: Support Vector Machines
   20.3.2.1 SVM general description
   20.3.2.2 SVM mathematical formulation
  20.3.3 Learning from samples
  20.3.4 Learning from images
  20.3.5 Multi-band, streamed classification
  20.3.6 Generic Kernel SVM
   20.3.6.1 Learning with User Defined Kernels
   20.3.6.2 Classification with user defined kernel
 20.4 Fusion of Classification maps
  20.4.1 General approach of image fusion
  20.4.2 Majority voting
   20.4.2.1 General description
   20.4.2.2 An example of majority voting fusion
  20.4.3 Dempster Shafer
   20.4.3.1 General description
   20.4.3.2 Mathematical formulation of the combination algorithm
   20.4.3.3 An example of Dempster Shafer fusion
 20.5 Classification map regularization
21 Object-based Image Analysis
 21.1 From Images to Objects
 21.2 Object Attributes
 21.3 Object Filtering based on radiometric and statistics attributes
 21.4 Hoover metrics to compare segmentations
22 Change Detection
 22.1 Introduction
  22.1.1 Surface-based approaches
 22.2 Change Detection Framework
 22.3 Simple Detectors
  22.3.1 Mean Difference
  22.3.2 Ratio Of Means
 22.4 Statistical Detectors
  22.4.1 Distance between local distributions
  22.4.2 Local Correlation
 22.5 Multi-Scale Detectors
  22.5.1 Kullback-Leibler Distance between distributions
 22.6 Multi-components detectors
  22.6.1 Multivariate Alteration Detector
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
   23.1.3.1 Family 1
   23.1.3.2 Family 2
   23.1.3.3 Family 3
   23.1.3.4 Further remarks
   23.1.3.5 Basic hyperspectral unmixing example
 23.2 Dimensionality reduction
 23.3 Anomaly detection
24 Image Visualization and output
 24.1 Images
  24.1.1 Grey Level Images
  24.1.2 Multiband Images
  24.1.3 Indexed Images
  24.1.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
   26.4.1.1 Basic neighborhood techniques: edge detection
   26.4.1.2 Convolution filtering: Sobel operator
   26.4.1.3 Optimizing iteration speed
   26.4.1.4 Separable convolution: Gaussian filtering
   26.4.1.5 Random access iteration
  26.4.2 ShapedNeighborhoodIterator
   26.4.2.1 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
   29.3.2.1 UpdateOutputInformation()
   29.3.2.2 PropagateRequestedRegion()
   29.3.2.3 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
32 Adding New Modules
 32.1 How to Write a Module
 32.2 The otb-module.cmake file
 32.3 The CMakeLists.txt file
 32.4 The include folder
 32.5 The src folder
 32.6 The app folder
 32.7 The test folder
 32.8 Including a remote module in OTB
33 Contributors Guidelines
 33.1 How to Contribute
 33.2 What are remote modules?
 33.3 How to get your remote module inside OTB?
 33.4 Remote module acceptance policy
 33.5 Remote module release policy
V  Appendix
34 Frequently Asked Questions
 34.1 Introduction
  34.1.1 What is OTB?
  34.1.2 What is ORFEO?
   34.1.2.1 Where can I get more information about ORFEO?
  34.1.3 What is the ORFEO Accompaniment Program?
   34.1.3.1 Where can I get more information about the ORFEO Accompaniment Program?
  34.1.4 Who is responsible for the OTB development?
 34.2 License
  34.2.1 Which is the OTB license?
  34.2.2 Am I forced to distribute my code based on OTB?
  34.2.3 Am I forced to contribute my code based on OTB into the official repo?
  34.2.4 If I wanted to distribute an application using OTB what license would I need to use?
  34.2.5 I am a commercial user. Is there any restriction on the use of OTB?
 34.3 Getting OTB
  34.3.1 Who can download the OTB?
  34.3.2 Where can I download the OTB?
  34.3.3 How to get the latest bleeding-edge version?
 34.4 Special issues about compiling OTB from source
   34.4.0.1 Debian Linux / Ubuntu
   34.4.0.2 Errors when compiling internal libkml
   34.4.0.3 OTB compilation and Windows platform
 34.5 Using OTB
  34.5.1 Where to start ?
  34.5.2 What is the image size limitation of OTB ?
 34.6 Getting help
  34.6.1 Is there any mailing list?
  34.6.2 Which is the main source of documentation?
 34.7 Contributing to OTB
  34.7.1 I want to contribute to OTB, where to begin?
  34.7.2 What are the benefits of contributing to OTB?
  34.7.3 What functionality can I contribute?
 34.8 Running the tests
  34.8.1 What are the tests?
  34.8.2 How to run the tests?
  34.8.3 How to get the test data?
  34.8.4 How to submit the results?
 34.9 OTB’s Roadmap
  34.9.1 Which will be the next version of OTB?
   34.9.1.1 What is a major version?
   34.9.1.2 What is a minor version?
   34.9.1.3 What is a bugfix version?
  34.9.2 When will the next version of OTB be available?
  34.9.3 What features will the OTB include and when?
35 Release Notes
36 Wrappings to other languages
 36.1 OTB-Wrapping: bindings to Java language
37 Contributors