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 GNU/Linux and macOS
  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 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.1.1 Linux and Mac OS X
  4.1.2 Windows
 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 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 Auxiliary Data
 7.1 Reading DEM Files
 7.2 Elevation management with OTB
 7.3 Reading and Writing Shapefiles and KML
 7.4 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.2.1 BandMath filter
  8.2.2 BandMathX filter
 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
   8.4.1.1 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
   8.6.3.1 Binary Filters
   8.6.3.2 Grayscale Filters
 8.7 Smoothing Filters
  8.7.1 Blurring
   8.7.1.1 Discrete Gaussian
  8.7.2 Edge Preserving Smoothing
   8.7.2.1 Introduction to Anisotropic Diffusion
   8.7.2.2 Gradient Anisotropic Diffusion
   8.7.2.3 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
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
   9.7.1.1 Exploring a Metric
  9.7.2 Normalized Correlation Metric
  9.7.3 Mean Reciprocal Square Differences
  9.7.4 Mutual Information Metric
   9.7.4.1 Parzen Windowing
   9.7.4.2 Viola and Wells Implementation
   9.7.4.3 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
   14.4.2.1 Local Hough Transform
 14.5 Density Features
  14.5.1 Edge Density
  14.5.2 SIFT Density
 14.6 Geometric Moments
  14.6.1 Complex Moments
   14.6.1.1 Complex Moments for Images
   14.6.1.2 Complex Moments for Paths
  14.6.2 Hu Moments
   14.6.2.1 Hu Moments for Images
  14.6.3 Flusser Moments
   14.6.3.1 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 Independent Component Analysis
 18.5 Maximum Autocorrelation Factor
19 Classification
 19.1 Introduction
 19.2 Machine Learning Framework
  19.2.1 Machine learning models
  19.2.2 Training a model
  19.2.3 Prediction of a model
  19.2.4 Integration in applications
 19.3 Supervised classification
  19.3.1 Support Vector Machines
   19.3.1.1 SVM general description
   19.3.1.2 SVM mathematical formulation
  19.3.2 Shark Random Forests
  19.3.3 Generic Kernel SVM (deprecated)
   19.3.3.1 Learning with User Defined Kernels
   19.3.3.2 Classification with user defined kernel
 19.4 Unsupervised classification
  19.4.1 K-Means Classification
   19.4.1.1 Shark version
   19.4.1.2 Simple version
   19.4.1.3 General approach
   19.4.1.4 k-d Tree Based k-Means Clustering
  19.4.2 Kohonen’s Self Organizing Map
   19.4.2.1 Building a color table
   19.4.2.2 SOM Classification
   19.4.2.3 Multi-band, streamed classification
  19.4.3 Bayesian Plug-In Classifier
  19.4.4 Expectation Maximization Mixture Model Estimation
  19.4.5 Statistical Segmentations
   19.4.5.1 Stochastic Expectation Maximization
  19.4.6 Classification using Markov Random Fields
   19.4.6.1 ITK framework
   19.4.6.2 OTB framework
 19.5 Fusion of Classification maps
  19.5.1 General approach of image fusion
  19.5.2 Majority voting
   19.5.2.1 General description
   19.5.2.2 An example of majority voting fusion
  19.5.3 Dempster Shafer
   19.5.3.1 General description
   19.5.3.2 Mathematical formulation of the combination algorithm
   19.5.3.3 An example of Dempster Shafer fusion
 19.6 Classification map regularization
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 Hyperspectral
 22.1 Unmixing
  22.1.1 Linear mixing model
  22.1.2 Simplex
  22.1.3 State of the art unmixing algorithms selection
   22.1.3.1 Family 1
   22.1.3.2 Family 2
   22.1.3.3 Family 3
   22.1.3.4 Further remarks
   22.1.3.5 Basic hyperspectral unmixing example
 22.2 Dimensionality reduction
 22.3 Anomaly detection
23 Image Visualization and output
 23.1 Images
  23.1.1 Grey Level Images
  23.1.2 Multiband Images
  23.1.3 Indexed Images
  23.1.4 Altitude Images
24 Online data
 24.1 Name to Coordinates
 24.2 Open Street Map
IV  Developer’s guide
25 Iterators
 25.1 Introduction
 25.2 Programming Interface
  25.2.1 Creating Iterators
  25.2.2 Moving Iterators
  25.2.3 Accessing Data
  25.2.4 Iteration Loops
 25.3 Image Iterators
  25.3.1 ImageRegionIterator
  25.3.2 ImageRegionIteratorWithIndex
  25.3.3 ImageLinearIteratorWithIndex
 25.4 Neighborhood Iterators
  25.4.1 NeighborhoodIterator
   25.4.1.1 Basic neighborhood techniques: edge detection
   25.4.1.2 Convolution filtering: Sobel operator
   25.4.1.3 Optimizing iteration speed
   25.4.1.4 Separable convolution: Gaussian filtering
   25.4.1.5 Random access iteration
  25.4.2 ShapedNeighborhoodIterator
   25.4.2.1 Shaped neighborhoods: morphological operations
26 Image Adaptors
 26.1 Image Casting
 26.2 Adapting RGB Images
 26.3 Adapting Vector Images
 26.4 Adaptors for Simple Computation
 26.5 Adaptors and Writers
27 Streaming and Threading
 27.1 Introduction
 27.2 Streaming and threading in OTB
 27.3 Division strategies
28 How To Write A Filter
 28.1 Terminology
 28.2 Overview of Filter Creation
 28.3 Streaming Large Data
  28.3.1 Overview of Pipeline Execution
  28.3.2 Details of Pipeline Execution
   28.3.2.1 UpdateOutputInformation()
   28.3.2.2 PropagateRequestedRegion()
   28.3.2.3 UpdateOutputData()
 28.4 Threaded Filter Execution
 28.5 Filter Conventions
  28.5.1 Optional
  28.5.2 Useful Macros
 28.6 How To Write A Composite Filter
  28.6.1 Implementing a Composite Filter
  28.6.2 A Simple Example
29 Persistent filters
 29.1 Introduction
 29.2 Architecture
  29.2.1 The persistent filter class
  29.2.2 The streaming decorator class
 29.3 An end-to-end example
  29.3.1 First step: writing a persistent filter
  29.3.2 Second step: Decorating the filter and using it
  29.3.3 Third step: one class to rule them all
30 How to write an application
 30.1 Application design
 30.2 Architecture of the class
  30.2.1 DoInit()
  30.2.2 DoUpdateParameters()
  30.2.3 DoExecute()
  30.2.4 Parameters selection
  30.2.5 Parameters description
 30.3 Composite application
  30.3.1 Creating internal applications
  30.3.2 Connecting parameters
  30.3.3 Orchestration
 30.4 Compile your application
 30.5 Execute your application
 30.6 Testing your application
 30.7 Application Example
31 Adding New Modules
 31.1 How to Write a Module
 31.2 The otb-module.cmake file
 31.3 The CMakeLists.txt file
 31.4 The include folder
 31.5 The src folder
 31.6 The app folder
 31.7 The test folder
 31.8 Including a remote module in OTB
32 Contributors Guidelines
V  Appendix
33 Wrappings to other languages
 33.1 OTB-Wrapping: bindings to Java language
34 Contributors