The ORFEO Tool Box Software Guide
Updated for OTB-3.20
OTB Development Team
November 12, 2013
http://www.orfeo-toolbox.org...
The ORFEO Toolbox is not a black box.
Ch.D.
FOREWORD
Beside the Pleiades (PHR) and Cosmo-Skymed (CSK) systems developments forming ORFEO,
the dual and bilateral syste...
iv
The Methodological part objective is the definition and the development of tools for the operational
exploitation of the...
CONTENTS
I Introduction 1
1 Welcome 3
1.1 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
vi CONTENTS
Ubuntu 10.04 and higher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
OpenSuse 11.X and...
CONTENTS vii
4.3 Filtering pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4...
viii CONTENTS
6 Reading and Writing Images 99
6.1 Basic Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
CONTENTS ix
8.3 Gradients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8....
x CONTENTS
9.3.1 Direction of the Transform Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . 200
9.3.2 Registra...
CONTENTS xi
9.7.4 Mutual Information Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Parzen Windo...
xii CONTENTS
11.5 Geometries projection manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
11....
CONTENTS xiii
14.5.1 Edge Density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
14.5.2 S...
xiv CONTENTS
17.1 PROSAIL model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
17.2...
CONTENTS xv
19.3.2 An example of supervised classification method: Support Vector Machines . . . . . 502
SVM general descri...
xvi CONTENTS
21.3.2 Ratio Of Means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
21.4 Stat...
CONTENTS xvii
25 Online data 579
25.1 Name to Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
xviii CONTENTS
27.5 Adaptors and Writers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628...
CONTENTS xix
31 How to write an application 653
31.1 Application design . . . . . . . . . . . . . . . . . . . . . . . . . ...
xx CONTENTS
32.3.3 How to get the latest bleeding-edge version? . . . . . . . . . . . . . . . . . . . . . . 667
32.4 Compi...
CONTENTS xxi
32.9.2 When will the next version of OTB be available? . . . . . . . . . . . . . . . . . . . 677
32.9.3 What ...
xxii CONTENTS
34.3.5 Scaling Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
34.3.6...
LIST OF FIGURES
2.1 Cmake user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
...
xxiv List of Figures
8.8 GradientMagnitudeRecursiveGaussianImageFilter output . . . . . . . . . . . . . . . . . . . . 153
...
List of Figures xxv
9.13 AffineTransform registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
xxvi List of Figures
14.11Line Correlation Detector Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
List of Figures xxvii
16.13FastMarchingImageFilter intermediate output . . . . . . . . . . . . . . . . . . . . . . . . . ....
xxviii List of Figures
21.6 ERS Images for Change Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
List of Figures xxix
27.1 ImageAdaptor concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
LIST OF TABLES
2.1 Available installation procedures with respect to system configuration and target usage . . . . 12
9.1 G...
xxxii List of Tables
12.1 Vegetation indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
Part I
Introduction
CHAPTER
ONE
WELCOME
Welcome to the ORFEO ToolBox (OTB) Software Guide.
This document presents the essential concepts used ...
4 Chapter 1. Welcome
familiar with the build process and the general program organization, follow by reading Chapter 3,
wh...
1.4. Downloading OTB 5
Once you unzip or untar the file, a directory called OTB will be created in your disk and you will b...
6 Chapter 1. Welcome
• OTB/Testing—a large number of small programs used to test OTB. These examples tend to
be minimally ...
1.4. Downloading OTB 7
• OTB/Code/Projections—classes allowing to deal with sensor models and cartographic pro-
jections.
...
8 Chapter 1. Welcome
1.4.4 Data
The OTB Toolkit was designed to support the ORFEO Acompaniment Program and its associated
...
1.6. A Brief History of OTB 9
• the need to realise those new developments in very close cooperation with the final users f...
10 Chapter 1. Welcome
1.6.1 ITK’s history
In 1999 the US National Library of Medicine of the National Institutes of Health...
CHAPTER
TWO
INSTALLATION
This section describes the process for installing OTB on your system. OTB is a toolbox, and as su...
12 Chapter 2. Installation
OTB library and
internal applica-
tions
Monteverdi Wrapping (Java
and Python)
Any platform Buil...
2.1. Installing binary packages 13
be added to your desktop and in the start menu (in the OSGeo4W folder). You can now use...
14 Chapter 2. Installation
If you want only OTB libraries, please use:
sudo aptitude install libotb
If you want OTB Applic...
2.1. Installing binary packages 15
OpenSuse 11.X and higher
For OpenSuse 11.X and higher, OTB, Monteverdi and OTB-Wrapping...
16 Chapter 2. Installation
CentOS 5.5
Since 3.12 version, OTB packages (OTB, monteverdi) are available on CentOS 5.5 distr...
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Software guide 3.20.0
Upcoming SlideShare
Loading in …5
×

Software guide 3.20.0

614
-1

Published on

Published in: Software, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
614
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Software guide 3.20.0

  1. 1. The ORFEO Tool Box Software Guide Updated for OTB-3.20 OTB Development Team November 12, 2013 http://www.orfeo-toolbox.org e-mail: otb@cnes.fr
  2. 2. The ORFEO Toolbox is not a black box. Ch.D.
  3. 3. FOREWORD Beside the Pleiades (PHR) and Cosmo-Skymed (CSK) systems developments forming ORFEO, the dual and bilateral system (France - Italy) for Earth Observation, the ORFEO Accompaniment Program was set up, to prepare, accompany and promote the use and the exploitation of the images derived from these sensors. The creation of a preparatory program1 is needed because of: • the new capabilities and performances of the ORFEO systems (optical and radar high resolu- tion, access capability, data quality, possibility to acquire simultaneously in optic and radar), • the implied need of new methodological developments : new processing methods, or adapta- tion of existing methods, • the need to realise those new developments in very close cooperation with the final users for better integration of new products in their systems. This program was initiated by CNES mid-2003 and will last until mid 2013. It consists in two parts, between which it is necessary to keep a strong interaction: • A Thematic part, • A Methodological part. The Thematic part covers a large range of applications (civil and defence), and aims at specifying and validating value added products and services required by end users. This part includes consideration about products integration in the operational systems or processing chains. It also includes a careful thought on intermediary structures to be developed to help non-autonomous users. Lastly, this part aims at raising future users awareness, through practical demonstrations and validations. 1http://smsc.cnes.fr/PLEIADES/A prog accomp.htm
  4. 4. iv The Methodological part objective is the definition and the development of tools for the operational exploitation of the submetric optic and radar images (tridimensional aspects, changes detection, texture analysis, pattern matching, optic radar complementarities). It is mainly based on R&D studies and doctorate and post-doctorate researches. In this context, CNES2 decided to develop the ORFEO ToolBox (OTB), a set of algorithms encapsu- lated in a software library. The goals of the OTB is to capitalise a methological savoir faire in order to adopt an incremental development approach aiming to efficiently exploit the results obtained in the frame of methodological R&D studies. All the developments are based on FLOSS (Free/Libre Open Source Software) or existing CNES developments. OTB is distributed under the C´eCILL licence, http://www.cecill.info/licences/Licence_CeCILL_V2-en.html. OTB is implemented in C++ and is mainly based on ITK3 (Insight Toolkit). 2http://www.cnes.fr 3http://www.itk.org
  5. 5. CONTENTS I Introduction 1 1 Welcome 3 1.1 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 How to Learn OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Software Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.1 Obtaining the Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Downloading OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4.1 Join the Mailing List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4.2 Directory Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4.3 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.4 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 The OTB Community and Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.6 A Brief History of OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.6.1 ITK’s history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Installation 11 2.1 Installing binary packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.1 Windows 2000/XP/Vista/Seven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.2 MacOS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.3 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  6. 6. vi CONTENTS Ubuntu 10.04 and higher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 OpenSuse 11.X and higher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 CentOS 5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2 Building from sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.1 Getting the OTB source code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.2 External Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.3 Configuring OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Preparing CMake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Compiling OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 Getting Started With OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.1 Hello World ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 System Overview 25 3.1 System Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2 Essential System Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.1 Generic Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2.2 Include Files and Class Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2.3 Object Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.4 Smart Pointers and Memory Management . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.5 Error Handling and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.6 Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2.7 Multi-Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3 Numerics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4 Data Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.5 Data Processing Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6 Spatial Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 II Tutorials 37 4 Building Simple Applications with OTB 39 4.1 Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 Pipeline basics: read and write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
  7. 7. CONTENTS vii 4.3 Filtering pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.4 Handling types: scaling output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.5 Working with multispectral or color images . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.6 Parsing command line arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.7 Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.8 Going from raw satellite images to useful products . . . . . . . . . . . . . . . . . . . . . . . 56 III User’s guide 61 5 Data Representation 63 5.1 Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.1.1 Creating an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.1.2 Reading an Image from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.1.3 Accessing Pixel Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.1.4 Defining Origin and Spacing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.1.5 Accessing Image Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.1.6 RGB Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.1.7 Vector Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.1.8 Importing Image Data from a Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.1.9 Image Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.2 PointSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.2.1 Creating a PointSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.2.2 Getting Access to Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.2.3 Getting Access to Data in Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2.4 Vectors as Pixel Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.3 Mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.3.1 Creating a Mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.3.2 Inserting Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.3.3 Managing Data in Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.4 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 5.4.1 Creating a PolyLineParametricPath . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
  8. 8. viii CONTENTS 6 Reading and Writing Images 99 6.1 Basic Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.2 Pluggable Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.3 IO Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.3.1 Implicit Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.3.2 Explicit Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.4 Reading and Writing RGB Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.5 Reading, Casting and Writing Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.6 Extracting Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.7 Reading and Writing Vector Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.7.1 Reading and Writing Complex Images . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.8 Reading and Writing Multiband Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.8.1 Extracting ROIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.9 Reading Image Series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6.10 Extended filename for reader and writer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.10.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.10.2 Reader options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.10.3 Writer options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 7 Reading and Writing Auxilary Data 123 7.1 Reading DEM Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 7.2 Elevation management with OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.3 Lidar data Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 7.4 Reading and Writing Shapefiles and KML . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 7.5 Handling large vector data through OGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 8 Basic Filtering 139 8.1 Thresholding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.1.1 Binary Thresholding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.1.2 General Thresholding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 8.1.3 Threshold to Point Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 8.2 Mathematical operations on images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
  9. 9. CONTENTS ix 8.3 Gradients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 8.3.1 Gradient Magnitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 8.3.2 Gradient Magnitude With Smoothing . . . . . . . . . . . . . . . . . . . . . . . . . 152 8.3.3 Derivative Without Smoothing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 8.4 Second Order Derivatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 8.4.1 Laplacian Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Laplacian Filter Recursive Gaussian . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 8.5 Edge Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8.5.1 Canny Edge Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8.5.2 Ratio of Means Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 8.6 Neighborhood Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 8.6.1 Mean Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 8.6.2 Median Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 8.6.3 Mathematical Morphology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Binary Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Grayscale Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 8.7 Smoothing Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 8.7.1 Blurring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Discrete Gaussian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 8.7.2 Edge Preserving Smoothing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Introduction to Anisotropic Diffusion . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Gradient Anisotropic Diffusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Mean Shift filtering and clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 8.7.3 Edge Preserving Speckle Reduction Filters . . . . . . . . . . . . . . . . . . . . . . 180 8.7.4 Edge preserving Markov Random Field . . . . . . . . . . . . . . . . . . . . . . . . 183 8.8 Distance Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 8.9 Rasterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 9 Image Registration 191 9.1 Registration Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 9.2 ”Hello World” Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 9.3 Features of the Registration Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
  10. 10. x CONTENTS 9.3.1 Direction of the Transform Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . 200 9.3.2 Registration is done in physical space . . . . . . . . . . . . . . . . . . . . . . . . . 202 9.4 Multi-Modality Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 9.4.1 Viola-Wells Mutual Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 9.5 Centered Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9.5.1 Rigid Registration in 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9.5.2 Centered Affine Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 9.6 Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 9.6.1 Geometrical Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 9.6.2 Transform General Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 9.6.3 Identity Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 9.6.4 Translation Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 9.6.5 Scale Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 9.6.6 Scale Logarithmic Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.6.7 Euler2DTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.6.8 CenteredRigid2DTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.6.9 Similarity2DTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 9.6.10 QuaternionRigidTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 9.6.11 VersorTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 9.6.12 VersorRigid3DTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 9.6.13 Euler3DTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 9.6.14 Similarity3DTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.6.15 Rigid3DPerspectiveTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 9.6.16 AffineTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 9.6.17 BSplineDeformableTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.6.18 KernelTransforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 9.7 Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 9.7.1 Mean Squares Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Exploring a Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 9.7.2 Normalized Correlation Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.7.3 Mean Reciprocal Square Differences . . . . . . . . . . . . . . . . . . . . . . . . . . 241
  11. 11. CONTENTS xi 9.7.4 Mutual Information Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Parzen Windowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Viola and Wells Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Mattes et al. Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 9.7.5 Kullback-Leibler distance metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 9.7.6 Normalized Mutual Information Metric . . . . . . . . . . . . . . . . . . . . . . . . 245 9.7.7 Mean Squares Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 9.7.8 Correlation Coefficient Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 9.7.9 Cardinality Match Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 9.7.10 Kappa Statistics Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 9.7.11 Gradient Difference Metric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 9.8 Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 9.9 Landmark-based registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 10 Disparity Map Estimation 255 10.1 Disparity Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 10.1.1 Geometric deformation modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 10.1.2 Similarity measures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 10.1.3 The correlation coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 10.2 Regular grid disparity map estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 10.3 Irregular grid disparity map estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 10.4 Stereo reconstruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 11 Orthorectification and Map Projection 277 11.1 Sensor Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 11.1.1 Types of Sensor Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 11.1.2 Using Sensor Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 11.1.3 Evaluating Sensor Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 11.1.4 Limits of the Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 11.2 Map Projections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 11.3 Orthorectification with OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 11.4 Vector data projection manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
  12. 12. xii CONTENTS 11.5 Geometries projection manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 11.6 Elevation management with OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 11.7 Vector data area extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 12 Radiometry 301 12.1 Radiometric Indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 12.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 12.1.2 NDVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 12.1.3 ARVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 12.1.4 AVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 12.2 Atmospheric Corrections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 13 Image Fusion 319 13.1 Simple Pan Sharpening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 13.2 Bayesian Data Fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 14 Feature Extraction 327 14.1 Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 14.1.1 Haralick Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 14.1.2 PanTex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 14.1.3 Structural Feature Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 14.2 Interest Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 14.2.1 Harris detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 14.2.2 SIFT detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 14.2.3 SURF detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 14.3 Alignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 14.4 Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 14.4.1 Line Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 14.4.2 Segment Extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Local Hough Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Line Segment Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 14.4.3 Right Angle Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 14.5 Density Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
  13. 13. CONTENTS xiii 14.5.1 Edge Density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 14.5.2 SIFT Density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 14.6 Geometric Moments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 14.6.1 Complex Moments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Complex Moments for Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Complex Moments for Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 14.6.2 Hu Moments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Hu Moments for Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 14.6.3 Flusser Moments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Flusser Moments for Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 14.7 Road extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 14.7.1 Road extraction filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 14.7.2 Step by step road extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 14.8 Cloud Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 15 Multi-scale Analysis 381 15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 15.2 Morphological Pyramid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 15.2.1 Morphological Pyramid Exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . 388 16 Image Segmentation 395 16.1 Region Growing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 16.1.1 Connected Threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 16.1.2 Otsu Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 16.1.3 Neighborhood Connected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 16.1.4 Confidence Connected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 16.2 Segmentation Based on Watersheds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 16.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 16.2.2 Using the ITK Watershed Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 16.3 Level Set Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 16.3.1 Fast Marching Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 17 Image Simulation 425
  14. 14. xiv CONTENTS 17.1 PROSAIL model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 17.2 Image Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 17.2.1 LAI image estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 17.2.2 Sensor RSR Image Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 18 Dimension Reduction 443 18.1 Principal Component Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 18.2 Noise-Adjusted Principal Components Analysis . . . . . . . . . . . . . . . . . . . . . . . . 445 18.3 Maximum Noise Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 18.4 Fast Independant Component Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 18.5 Maximum Autocorrelation Factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 19 Classification 455 19.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 19.2 Unsupervised classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 19.2.1 K-Means Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Simple version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 General approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 k-d Tree Based k-Means Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 19.2.2 Kohonen’s Self Organizing Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Building a color table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 SOM Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Multi-band, streamed classification . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 19.2.3 Bayesian Plug-In Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 19.2.4 Expectation Maximization Mixture Model Estimation . . . . . . . . . . . . . . . . . 480 19.2.5 Statistical Segmentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Stochastic Expectation Maximization . . . . . . . . . . . . . . . . . . . . . . . . . . 484 19.2.6 Classification using Markov Random Fields . . . . . . . . . . . . . . . . . . . . . . 487 ITK framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 OTB framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 19.3 Supervised classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 19.3.1 Generic machine learning framework . . . . . . . . . . . . . . . . . . . . . . . . . 501
  15. 15. CONTENTS xv 19.3.2 An example of supervised classification method: Support Vector Machines . . . . . 502 SVM general description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 SVM mathematical formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 19.3.3 Learning from samples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 19.3.4 Learning from images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 19.3.5 Multi-band, streamed classification . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 19.3.6 Generic Kernel SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Learning with User Defined Kernels . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Classification with user defined kernel . . . . . . . . . . . . . . . . . . . . . . . . . . 512 19.4 Fusion of Classification maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 19.4.1 General approach of image fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 19.4.2 Majority voting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 General description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 An example of majority voting fusion . . . . . . . . . . . . . . . . . . . . . . . . . . 513 19.4.3 Dempster Shafer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 General description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Mathematical formulation of the combination algorithm . . . . . . . . . . . . . . . . 515 An example of Dempster Shafer fusion . . . . . . . . . . . . . . . . . . . . . . . . . 515 19.5 Classification map regularization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 20 Object-based Image Analysis 521 20.1 From Images to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 20.2 Object Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 20.3 Object Filtering based on radiometric and statistics attributes . . . . . . . . . . . . . . . . . . 525 20.4 Hoover metrics to compare segmentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 21 Change Detection 531 21.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 21.1.1 Surface-based approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 21.2 Change Detection Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 21.3 Simple Detectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 21.3.1 Mean Difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
  16. 16. xvi CONTENTS 21.3.2 Ratio Of Means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 21.4 Statistical Detectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 21.4.1 Distance between local distributions . . . . . . . . . . . . . . . . . . . . . . . . . . 542 21.4.2 Local Correlation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 21.5 Multi-Scale Detectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 21.5.1 Kullback-Leibler Distance between distributions . . . . . . . . . . . . . . . . . . . 547 21.6 Multi-components detectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 21.6.1 Multivariate Alteration Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 22 Geospatial analysis 553 22.1 Reading from and Writing to Geospatial DBs . . . . . . . . . . . . . . . . . . . . . . . . . . 553 23 Hyperspectral 555 23.1 Unmixing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 23.1.1 Linear mixing model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 23.1.2 Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 23.1.3 State of the art unmixing algorithms selection . . . . . . . . . . . . . . . . . . . . . 559 Family 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Family 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Family 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Further remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Basic hyperspectral unmixing example . . . . . . . . . . . . . . . . . . . . . . . . . 562 23.2 Dimensionality reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 23.3 Anomaly detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 24 Image Visualization and output 569 24.1 Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 24.2 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 24.2.1 Grey Level Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 24.2.2 Multiband Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 24.2.3 Indexed Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 24.2.4 Altitude Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
  17. 17. CONTENTS xvii 25 Online data 579 25.1 Name to Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 25.2 Open Street Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 IV Developer’s guide 585 26 Iterators 587 26.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 26.2 Programming Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 26.2.1 Creating Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 26.2.2 Moving Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 26.2.3 Accessing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 26.2.4 Iteration Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 26.3 Image Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 26.3.1 ImageRegionIterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 26.3.2 ImageRegionIteratorWithIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 26.3.3 ImageLinearIteratorWithIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 26.4 Neighborhood Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598 26.4.1 NeighborhoodIterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 Basic neighborhood techniques: edge detection . . . . . . . . . . . . . . . . . . . . . 604 Convolution filtering: Sobel operator . . . . . . . . . . . . . . . . . . . . . . . . . . 607 Optimizing iteration speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 Separable convolution: Gaussian filtering . . . . . . . . . . . . . . . . . . . . . . . . 610 Random access iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 26.4.2 ShapedNeighborhoodIterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Shaped neighborhoods: morphological operations . . . . . . . . . . . . . . . . . . . . 615 27 Image Adaptors 619 27.1 Image Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 27.2 Adapting RGB Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 27.3 Adapting Vector Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 27.4 Adaptors for Simple Computation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
  18. 18. xviii CONTENTS 27.5 Adaptors and Writers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 28 Streaming and Threading 629 28.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 28.2 Streaming and threading in OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 28.3 Division strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 29 How To Write A Filter 631 29.1 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 29.2 Overview of Filter Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 29.3 Streaming Large Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633 29.3.1 Overview of Pipeline Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 29.3.2 Details of Pipeline Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636 UpdateOutputInformation() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636 PropagateRequestedRegion() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637 UpdateOutputData() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 29.4 Threaded Filter Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 29.5 Filter Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 29.5.1 Optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 29.5.2 Useful Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 29.6 How To Write A Composite Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 29.6.1 Implementing a Composite Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 29.6.2 A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 30 Persistent filters 647 30.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 30.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 30.2.1 The persistent filter class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 30.2.2 The streaming decorator class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 30.3 An end-to-end example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 30.3.1 First step: writing a persistent filter . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 30.3.2 Second step: Decorating the filter and using it . . . . . . . . . . . . . . . . . . . . . 651 30.3.3 Third step: one class to rule them all . . . . . . . . . . . . . . . . . . . . . . . . . . 651
  19. 19. CONTENTS xix 31 How to write an application 653 31.1 Application design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 31.2 Architecture of the class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 31.2.1 DoInit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 31.2.2 DoUpdateParameters() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 31.2.3 DoExecute() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 31.2.4 Parameters selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 31.2.5 Parameters description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 31.3 Compile your application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 31.4 Execute your application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 31.5 Testing your application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 31.6 Application Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 V Appendix 661 32 Frequently Asked Questions 663 32.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 32.1.1 What is OTB? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 32.1.2 What is ORFEO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664 Where can I get more information about ORFEO? . . . . . . . . . . . . . . . . . . . 664 32.1.3 What is the ORFEO Accompaniment Program? . . . . . . . . . . . . . . . . . . . . 664 Where can I get more information about the ORFEO Accompaniment Program? . . . 665 32.1.4 Who is responsible for the OTB development? . . . . . . . . . . . . . . . . . . . . . 665 32.2 Licence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 32.2.1 Which is the OTB licence? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 32.2.2 If I write an application using OTB am I forced to distribute that application? . . . . 666 32.2.3 If I write an application using OTB am I forced to contribute the code into the offical repositories?666 32.2.4 If I wanted to distribute an application using OTB what license would I need to use? 666 32.2.5 I am a commercial user. Is there any restriction on the use of OTB? . . . . . . . . . . 666 32.3 Getting OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 32.3.1 Who can download the OTB? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 32.3.2 Where can I download the OTB? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
  20. 20. xx CONTENTS 32.3.3 How to get the latest bleeding-edge version? . . . . . . . . . . . . . . . . . . . . . . 667 32.4 Compiling and installing OTB from source . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 32.4.1 Which platforms are supported? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 32.4.2 Which libraries/packages are needed before compiling and installing OTB? . . . . . 667 32.4.3 Main steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Unix/Linux Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Microsoft Visual Studio (Express 2008/Express 2010) . . . . . . . . . . . . . . . . . 671 32.4.4 Specific platform issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 Visual Studio 2010/Express 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 MacOSX 10.6 Snow Leopard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 Debian Linux / Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 32.5 Using OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 32.5.1 Where to start ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 32.5.2 What is the image size limitation of OTB ? . . . . . . . . . . . . . . . . . . . . . . 672 32.6 Getting help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 32.6.1 Is there any mailing list? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 32.6.2 Which is the main source of documentation? . . . . . . . . . . . . . . . . . . . . . . 673 32.7 Contributing to OTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 32.7.1 I want to contribute to OTB, where to begin? . . . . . . . . . . . . . . . . . . . . . 673 32.7.2 What are the benefits of contributing to OTB? . . . . . . . . . . . . . . . . . . . . . 674 32.7.3 What functionality can I contribute? . . . . . . . . . . . . . . . . . . . . . . . . . . 674 32.8 Running the tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 32.8.1 What are the tests? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 32.8.2 How to run the tests? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 32.8.3 How to get the test data? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 32.8.4 How to submit the results? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 32.9 OTB’s Roadmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 32.9.1 Which will be the next version of OTB? . . . . . . . . . . . . . . . . . . . . . . . . 676 What is a major version? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 What is a minor version? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 What is a bugfix version? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
  21. 21. CONTENTS xxi 32.9.2 When will the next version of OTB be available? . . . . . . . . . . . . . . . . . . . 677 32.9.3 What features will the OTB include and when? . . . . . . . . . . . . . . . . . . . . 677 33 Release Notes 679 34 Wrappings to other languages 733 34.1 OTB-Wrapping: bindings to Java language . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 34.1.1 Mangling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 34.1.2 How to Use OTB-Wrapping in Java . . . . . . . . . . . . . . . . . . . . . . . . . . 734 Import OTB classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 Compile Java programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 Java programs execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 34.1.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736 34.1.4 Use OTB-Wrapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 Download sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 Required Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 Compile OTB-Wrapping sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 Download binaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 Use OTB-Wrapping with Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 34.2 Java tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 34.2.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 34.2.2 Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 34.2.3 Filtering pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 34.2.4 Smarter Filtering Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740 34.2.5 Scaling Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742 34.2.6 MultiSpectral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743 34.2.7 OrthoFusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 34.3 Python tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 34.3.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 34.3.2 Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 34.3.3 Filtering pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 34.3.4 Smarter Filtering Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
  22. 22. xxii CONTENTS 34.3.5 Scaling Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 34.3.6 MultiSpectral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 34.4 Developer Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 34.4.1 Add a new Library : Creating a new CMakeList.txt file . . . . . . . . . . . . . . . . 756 34.4.2 Add a new cmake file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 A simple Example : otb::StreamingShrinkImageFilter . . . . . . . . . . . . . . . . . 757 34.4.3 Predefined Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 OTB-Wrapping predefined variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 OTB-Wrapping predefined lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 Macro MANGLE NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 34.4.4 HTML JavaDoc generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Generate JavaDoc documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Generate JavaDoc while compilation . . . . . . . . . . . . . . . . . . . . . . . . . . 761 35 Contributors 763 Index 777
  23. 23. LIST OF FIGURES 2.1 Cmake user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1 OTB Image Geometrical Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.2 PointSet with Vectors as PixelType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.1 Collaboration diagram of the ImageIO classes . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.2 Use cases of ImageIO factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.3 Class diagram of ImageIO factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.4 Initial SPOT 5 image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.5 ROI of a SPOT5 image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 7.1 DEM To Image generator Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.2 Image from lidar data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 8.1 BinaryThresholdImageFilter transfer function . . . . . . . . . . . . . . . . . . . . . . . . . . 140 8.2 BinaryThresholdImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 8.3 ThresholdImageFilter using the threshold-below mode. . . . . . . . . . . . . . . . . . . . . . 142 8.4 ThresholdImageFilter using the threshold-above mode . . . . . . . . . . . . . . . . . . . . . 143 8.5 ThresholdImageFilter using the threshold-outside mode . . . . . . . . . . . . . . . . . . . . . 143 8.6 Band Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 8.7 GradientMagnitudeImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
  24. 24. xxiv List of Figures 8.8 GradientMagnitudeRecursiveGaussianImageFilter output . . . . . . . . . . . . . . . . . . . . 153 8.9 Effect of the Derivative filter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 8.10 Output of the RecursiveGaussianImageFilter. . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.11 Output of the LaplacianRecursiveGaussianImageFilter. . . . . . . . . . . . . . . . . . . . . . 160 8.12 CannyEdgeDetectorImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8.13 Touzi Edge Detector Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 8.14 Effect of the MedianImageFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 8.15 Effect of the Median filter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8.16 Effect of erosion and dilation in a binary image. . . . . . . . . . . . . . . . . . . . . . . . . . 170 8.17 Effect of erosion and dilation in a grayscale image. . . . . . . . . . . . . . . . . . . . . . . . 172 8.18 DiscreteGaussianImageFilter Gaussian diagram. . . . . . . . . . . . . . . . . . . . . . . . . . 173 8.19 DiscreteGaussianImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 8.20 GradientAnisotropicDiffusionImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . 178 8.21 Mean Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 8.22 Lee Filter Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 8.23 Frost Filter Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 8.24 MRF restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 8.25 DanielssonDistanceMapImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 8.26 Rasterized SRTM water bodies near Arcachon, France. . . . . . . . . . . . . . . . . . . . . . 190 9.1 Image Registration Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 9.2 Registration Framework Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 9.3 Fixed and Moving images in registration framework . . . . . . . . . . . . . . . . . . . . . . . 197 9.4 HelloWorld registration output images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 9.5 Pipeline structure of the registration example . . . . . . . . . . . . . . . . . . . . . . . . . . 199 9.6 Registration Coordinate Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 9.7 Multi-Modality Registration Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 9.8 Multi-Modality Registration outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9.9 Rigid2D Registration input images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 9.10 Rigid2D Registration output images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 9.11 Rigid2D Registration input images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 9.12 Rigid2D Registration output images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
  25. 25. List of Figures xxv 9.13 AffineTransform registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 9.14 AffineTransform output images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 9.15 Geometrical representation objects in ITK . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 9.16 Parzen Windowing in Mutual Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.17 Class diagram of the Optimizer hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 9.18 Estimation of affine transformation using least square optimisation from SIFT points . . . . . 253 10.1 Estimation of the correlation surface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 10.2 Deformation field and resampling from fine registration . . . . . . . . . . . . . . . . . . . . . 263 10.3 Deformation field and resampling from disparity map estimation . . . . . . . . . . . . . . . . 270 10.4 From stereo pair to elevation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 11.1 Image Ortho-registration Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 12.1 ARVI Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 12.2 ARVI Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 12.3 AVI Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 13.1 Simple pan-sharpening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 13.2 Pan sharpening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 13.3 Bayesian Data Fusion Example inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 13.4 Bayesian Data Fusion results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 14.1 Results of applying Haralick contrast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 14.2 PanTex Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 14.3 Right Angle Detection Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 14.4 Harris Filter Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 14.5 SIFT Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 14.6 SURF Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 14.7 Alignment Detection Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 14.8 Line Ratio Detector Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 14.9 Line Correlation Detector Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 14.10Line Correlation Detector Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
  26. 26. xxvi List of Figures 14.11Line Correlation Detector Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 14.12LSD Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 14.13Right Angle Detection Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 14.14Edge Density Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 14.15SIFT Density Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 14.16Road extraction filter application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 14.17Spectral Angle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 14.18Road extraction filter application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 14.19Road extraction filter application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 14.20Cloud Detection Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 15.1 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 15.2 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 15.3 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 15.4 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 15.5 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 15.6 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 15.7 Morphological pyramid analysis and synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . 389 15.8 Morphological pyramid analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 16.1 ConnectedThreshold segmentation results . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 16.2 OtsuThresholdImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 16.3 OtsuThresholdImageFilter output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 16.4 NeighborhoodConnectedThreshold segmentation results . . . . . . . . . . . . . . . . . . . . 405 16.5 ConfidenceConnected segmentation results . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 16.6 Watershed Catchment Basins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 16.7 Watersheds Hierarchy of Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 16.8 Watersheds filter composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 16.9 Watershed segmentation output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 16.10Zero Set Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 16.11Grid position of the embedded level-set surface. . . . . . . . . . . . . . . . . . . . . . . . . . 416 16.12FastMarchingImageFilter collaboration diagram . . . . . . . . . . . . . . . . . . . . . . . . . 417
  27. 27. List of Figures xxvii 16.13FastMarchingImageFilter intermediate output . . . . . . . . . . . . . . . . . . . . . . . . . . 423 16.14FastMarchingImageFilter segmentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 17.1 LAIFromNDVIImageTransform Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 18.1 PCA Filter (forward trasnformation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 18.2 PCA Filter (forward trasnformation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 18.3 PCA Filter (forward trasnformation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 18.4 PCA Filter (forward trasnformation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 18.5 Maximum Autocorrelation Factor results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 19.1 Output of the KMeans classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 19.2 Two normal distributions plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 19.3 Kohonen’s Self Organizing Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 19.4 SOM Image Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 19.5 SOM Image Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 19.6 Bayesian plug-in classifier for two Gaussian classes . . . . . . . . . . . . . . . . . . . . . . . 476 19.7 SEM Classification results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 19.8 Output of the ScalarImageMarkovRandomField . . . . . . . . . . . . . . . . . . . . . . . . . 492 19.9 OTB Markov Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 19.10MRF restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 19.11MRF restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 19.12MRF restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 19.13MRF restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 20.1 Image to Label Object Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 20.2 Object based extraction based on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 21.1 Spot Images for Change Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 21.2 Difference Change Detection Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 21.3 Radarsat Images for Change Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 21.4 Ratio Change Detection Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 21.5 Kullback-Leibler Change Detection Results . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
  28. 28. xxviii List of Figures 21.6 ERS Images for Change Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 21.7 Correlation Change Detection Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 21.8 Kullback-Leibler profile Change Detection Results . . . . . . . . . . . . . . . . . . . . . . . 549 21.9 Multivariate Alteration Detection Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 23.1 Hyperspectral cube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 23.2 Linear mixing model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 23.3 Decomposition of the LMM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 23.4 Hyperspectral cube vectorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 23.5 Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 23.6 Unmixing Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 23.7 Concept of detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 23.8 Anomaly detection block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 23.9 Sliding window and parameters definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 24.1 Image visualization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 24.2 Scaling images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 24.3 Scaling images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 24.4 Scaling images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 24.5 Grayscale to color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 24.6 Hill shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 25.1 Open street map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 26.1 ITK image iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 26.2 Copying an image subregion using ImageRegionIterator . . . . . . . . . . . . . . . . . . . . 595 26.3 Using the ImageRegionIteratorWithIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 26.4 Neighborhood iterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 26.5 Some possible neighborhood iterator shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 26.6 Sobel edge detection results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 26.7 Gaussian blurring by convolution filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 26.8 Finding local minima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 26.9 Binary image morphology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
  29. 29. List of Figures xxix 27.1 ImageAdaptor concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 27.2 Image Adaptor for performing computations . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 29.1 Relationship between DataObjects and ProcessObjects . . . . . . . . . . . . . . . . . . . . . 632 29.2 The Data Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 29.3 Sequence of the Data Pipeline updating mechanism . . . . . . . . . . . . . . . . . . . . . . . 635 29.4 Composite Filter Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 29.5 Composite Filter Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
  30. 30. LIST OF TABLES 2.1 Available installation procedures with respect to system configuration and target usage . . . . 12 9.1 Geometrical Elementary Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 9.2 Identity Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 9.3 Translation Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 9.4 Scale Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.5 Scale Logarithmic Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.6 Euler2D Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.7 CenteredRigid2D Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.8 Similarity2D Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 9.9 QuaternionRigid Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 9.10 Versor Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 9.11 Versor Rigid3D Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 9.12 Euler3D Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.13 Similarity3D Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 9.14 Rigid3DPerspective Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . 235 9.15 Affine Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 9.16 BSpline Deformable Transform Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . 237 10.1 Characterization of the geometric deformation sources . . . . . . . . . . . . . . . . . . . . . 257 10.2 Approaches to image registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
  31. 31. xxxii List of Tables 12.1 Vegetation indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 12.2 Soil indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 12.3 Water indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 12.4 Built-up indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 14.1 Haralick features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 16.1 ConnectedThreshold example parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 16.2 NeighborhoodConnectedThreshold example parameters . . . . . . . . . . . . . . . . . . . . . 405 16.3 ConnectedThreshold example parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 16.4 FastMarching segmentation example parameters . . . . . . . . . . . . . . . . . . . . . . . . . 422 32.1 Libraries used in the OTB. In the column Where, the default behavior during the configuration of OTB is indicated by when the 34.1 Mangling of the basic types used. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 34.2 Mangling of the usually types used. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 34.3 C++ code translation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
  32. 32. Part I Introduction
  33. 33. CHAPTER ONE WELCOME Welcome to the ORFEO ToolBox (OTB) Software Guide. This document presents the essential concepts used in OTB. It will guide you through the road of learning and using OTB. The Doxygen documentation for the OTB application programming interface is available on line at http://orfeo-toolbox.sourceforge.net/Doxygen/html. 1.1 Organization This software guide is divided into several parts, each of which is further divided into several chap- ters. Part I is a general introduction to OTB, with—in the next chapter—a description of how to install the ORFEO Toolbox on your computer. Part I also introduces basic system concepts such as an overview of the system architecture, and how to build applications in the C++ programming language. Part II is a short guide with gradual difficulty to get you start programming with OTB. Part III describes the system from the user point of view. Dozens of examples are used to illustrate important system features. Part IV is for the OTB developer. It explains how to create your own classes and extend the system. 1.2 How to Learn OTB There are two broad categories of users of OTB. First are class developers, those who create classes in C++. The second, users, employ existing C++ classes to build applications. Class developers must be proficient in C++, and if they are extending or modifying OTB, they must also be familiar with OTB’s internal structures and design (material covered in Part IV). The key to learning how to use OTB is to become familiar with its palette of objects and the ways of combining them. We recommend that you learn the system by studying the examples and then, if you are a class developer, study the source code. Start by the first few tutorials in Part II to get
  34. 34. 4 Chapter 1. Welcome familiar with the build process and the general program organization, follow by reading Chapter 3, which provides an overview of some of the key concepts in the system, and then review the exam- ples in Part III. You may also wish to compile and run the dozens of examples distributed with the source code found in the directory OTB/Examples. (Please see the file OTB/Examples/README.txt for a description of the examples contained in the various subdirectories.) There are also several hundreds of tests found in the source distribution in OTB/Testing/Code, most of which are mini- mally documented testing code. However, they may be useful to see how classes are used together in OTB, especially since they are designed to exercise as much of the functionality of each class as possible. 1.3 Software Organization The following sections describe the directory contents, summarize the software functionality in each directory, and locate the documentation and data. 1.3.1 Obtaining the Software Periodic releases of the software are available on the OTB Web site. These official releases are available a few times a year and announced on the ORFEO Web pages and mailing lists. This software guide assumes that you are working with the latest official OTB release (available on the OTB Web site). 1.4 Downloading OTB OTB can be downloaded without cost from the following web site: http://www.orfeo-toolbox.org/ In order to track the kind of applications for which OTB is being used, you will be asked to complete a form prior to downloading the software. The information you provide in this form will help developers to get a better idea of the interests and skills of the toolkit users. Once you fill out this form you will have access to the download page. This page can be book marked to facilitate subsequent visits to the download site without having to complete any form again. Then choose the tarball that better fits your system. The options are .zip and .tgz files. The first type is better suited for MS-Windows while the second one is the preferred format for UNIX systems.
  35. 35. 1.4. Downloading OTB 5 Once you unzip or untar the file, a directory called OTB will be created in your disk and you will be ready for starting the configuration process described in Section 2.2.3 on page 18. You can also get the current version following instructions in Section 32.3.3, on page 667. 1.4.1 Join the Mailing List It is strongly recommended that you join the users mailing list. This is one of the primary resources for guidance and help regarding the use of the toolkit. You can subscribe to the users list online at http://groups.google.com/group/otb-users The otb-users mailing list is also the best mechanism for expressing your opinions about the toolbox and to let developers know about features that you find useful, desirable or even unnecessary. OTB developers are committed to creating a self-sustaining open-source OTB community. Feedback from users is fundamental to achieving this goal. 1.4.2 Directory Structure To begin your OTB odyssey, you will first need to know something about OTB’s software organiza- tion and directory structure. It is helpful to know enough to navigate through the code base to find examples, code, and documentation. OTB is organized into several different modules. There are three: the OTB, OTB-Documents and OTB-Wrapping modules. The source code, examples and applications are found in the OTB module; documentation, tutorials, and material related to the design and marketing of OTB are found in OTB-Documents; and resources to wrap OTB classes into other languages (such as Java or Python) are available from OTB-Wrapping. Usually you will work with the OTB module unless you are a developer, are teaching a course, or are looking at the details of various design documents. The OTB module contains the following subdirectories: • OTB/Code—the heart of the software; the location of the majority of the source code. • OTB/Applications—a set of applications modules that can be launched in different ways (command-line, graphical interface, Python/Java), refer to the OTB Cookbook for more infor- mation • OTB/CMake—internal files used during the configuration process • OTB/Copyright—the copyright information of OTB and all the dependencies included in the OTB source tree • OTB/Examples—a suite of simple, well-documented examples used by this guide and to il- lustrate important OTB concepts.
  36. 36. 6 Chapter 1. Welcome • OTB/Testing—a large number of small programs used to test OTB. These examples tend to be minimally documented but may be useful to demonstrate various system concepts. • OTB/Utilities—supporting software for the OTB source code. For example, libraries such as ITK.GDAL. The source code directory structure—found in OTB/Code—is important to understand since other directory structures (such as the Testing directory) shadow the structure of the OTB/Code directory. • OTB/Code/ApplicationEngine—the core library for building applications based on OTB • OTB/Code/Common—core classes, macro definitions, typedefs, and other software constructs central to OTB. • OTB/Code/BasicFilters—basic image processing filters. • OTB/Code/Fusion—image fusion algorithms, as for instance, pansharpening. • OTB/Code/FeatureExtraction—the location of many feature extraction algorithms. • OTB/Code/ChangeDetection—a set of remote sensing image change detection algorithms. • OTB/Code/DisparityMap—tools for estimating disparities – deformations – between im- ages. • OTB/Code/Fuzzy—fuzzy logic based algorithms, with Dempster-Shaffer theory related classes • OTB/Code/GeospatialAnalysis—classes allowing to connect to geospatial database like PostGIS. • OTB/Code/Gui—very basic widgets for building graphical user interfaces, such as progress bars for filters, etc. • OTB/Code/Hyperspectral—hyperspectral images analysis • OTB/Code/IO—classes that support the reading and writing of data. • OTB/Code/Learning—several functionnalities for supervised learning and classification. • OTB/Code/Markov—implementation of Markov Random Fields regularization and segmen- tation. • OTB/Code/MultiScale—a set of functionalities for multiscale image analysis and synthesis. • OTB/Code/MultiTemporal—time series interpolation related algorithms • OTB/Code/OBIA—Object Based Image Analysis filters and data structures • OTB/Code/ObjectDetection—Object detection chain based on local feature extraction
  37. 37. 1.4. Downloading OTB 7 • OTB/Code/Projections—classes allowing to deal with sensor models and cartographic pro- jections. • OTB/Code/Radiometry—classes allowing to compute vegetation indices and radiometric corrections. • OTB/Code/SARPolarimetry—some add-ons for SAR polarimetry synthesis and analysis. • OTB/Code/Segmentation—several functionnalities for image segmentation. • OTB/Code/Simulation—Sensor simulator • OTB/Code/SpatialReasoning—several functionnalities high level image analysis using spatial reasoning techniques. • OTB/Code/Testing—internal classes used in the used in the testing framework • OTB/Code/Visualization—utilities for simple image visualization. • OTB/Code/Wrappers—wrappers of applications in several access points (command-line, QT Gui, SWIG...). The OTB-Documents module contains the following subdirectories: • OTB-Documents/CourseWare—material related to teaching OTB. • OTB-Documents/Latex—LATEX styles to produce this work as well as other documents. • OTB-Documents/SoftwareGuide—LATEX files used to create this guide. (Note that the code found in OTB/Examples is used in conjunction with these LATEX files.) 1.4.3 Documentation Besides this text, there are other documentation resources that you should be aware of. Doxygen Documentation. The Doxygen documentation is an essential resource when working with OTB. These extensive Web pages describe in detail every class and method in the system. The documentation also contains inheritance and collaboration diagrams, listing of event invocations, and data members. The documentation is heavily hyper-linked to other classes and to the source code. The Doxygen documentation is available on-line at http://www.orfeo-toolbox.org/doxygen/. Header Files. Each OTB class is implemented with a .h and .cxx/.txx file (.txx file for templated classes). All methods found in the .h header files are documented and provide a quick way to find documentation for a particular method. (Indeed, Doxygen uses the header documentation to produces its output.)
  38. 38. 8 Chapter 1. Welcome 1.4.4 Data The OTB Toolkit was designed to support the ORFEO Acompaniment Program and its associated data. This data is available at http://smsc.cnes.fr/PLEIADES/index.htm. 1.5 The OTB Community and Support OTB was created from its inception as a collaborative, community effort. Research, teaching, and commercial uses of the toolkit are expected. If you would like to participate in the community, there are a number of possibilities. • Users may actively report bugs, defects in the system API, and/or submit feature requests. Currently the best way to do this is through the OTB users mailing list. • Developers may contribute classes or improve existing classes. If you are a developer, you may request permission to join the OTB developers mailing list. Please do so by sending email to otb “at” cnes.fr. To become a developer you need to demonstrate both a level of competence as well as trustworthiness. You may wish to begin by submitting fixes to the OTB users mailing list. • Research partnerships with members of the ORFEO Acompaniment Program are encouraged. CNES will encourage the use of OTB in proposed work and research projects. • Educators may wish to use OTB in courses. Materials are being developed for this purpose, e.g., a one-day, conference course and semester-long graduate courses. Watch the OTB web pages or check in the OTB-Documents/CourseWare directory for more information. 1.6 A Brief History of OTB Beside the Pleiades (PHR) and Cosmo-Skymed (CSK) systems developments forming ORFEO, the dual and bilateral system (France - Italy) for Earth Observation, the ORFEO Accompaniment Program was set up, to prepare, accompany and promote the use and the exploitation of the images derived from these sensors. The creation of a preparatory program1 is needed because of : • the new capabilities and performances of the ORFEO systems (optical and radar high resolu- tion, access capability, data quality, possibility to acquire simultaneously in optic and radar), • the implied need of new methodological developments : new processing methods, or adapta- tion of existing methods, 1http://smsc.cnes.fr/PLEIADES/A prog accomp.htm
  39. 39. 1.6. A Brief History of OTB 9 • the need to realise those new developments in very close cooperation with the final users for better integration of new products in their systems. This program was initiated by CNES mid-2003 and will last until 2010 at least It consists in two parts, between which it is necessary to keep a strong interaction : • A Thematic part • A Methodological part. The Thematic part covers a large range of applications (civil and defence ones), and aims at spec- ifying and validating value added products and services required by end users. This part includes consideration about products integration in the operational systems or processing lines. It also in- cludes a careful thought on intermediary structures to be developed to help non-autonomous users. Lastly, this part aims at raising future users awareness, through practical demonstrations and valida- tions. The Methodological part objective is the definition and the development of tools for the operational exploitation of the future submetric optic and radar images (tridimensional aspects, change detec- tion, texture analysis, pattern matching, optic radar complementarities). It is mainly based on R&D studies and doctorate and post-doctorate research. In this context, CNES2 decided to develop the ORFEO ToolBox (OTB), a set of algorithms encapsu- lated in a software library. The goals of the OTB is to capitalise a methological savoir faire in order to adopt an incremental development approach aimin to efficiently exploit the results obtained in the frame of methodological R&D studies. All the developments are based on FLOSS (Free/Libre Open Source Software) or existing CNES developments. OTB is implemented in C++ and is mainly based on ITK3 (Insight Toolkit): • ITK is used as the core element of OTB • OTB classes inherit from ITK classes • The software development procedure of OTB is strongly inspired from ITK’s (Extreme Pro- gramming, test-based coding, Generic Programming, etc.) • The documentation production procedure is the same as for ITK • Several chapters of the Software Guide are litterally copied from ITK’s Software Guide (with permission). • Many examples are taken from ITK. 2http://www.cnes.fr 3http://www.itk.org
  40. 40. 10 Chapter 1. Welcome 1.6.1 ITK’s history In 1999 the US National Library of Medicine of the National Institutes of Health awarded six three-year contracts to develop an open-source registration and segmentation toolkit, that eventu- ally came to be known as the Insight Toolkit (ITK) and formed the basis of the Insight Software Consortium. ITK’s NIH/NLM Project Manager was Dr. Terry Yoo, who coordinated the six prime contractors composing the Insight consortium. These consortium members included three com- mercial partners—GE Corporate R&D, Kitware, Inc., and MathSoft (the company name is now Insightful)—and three academic partners—University of North Carolina (UNC), University of Ten- nessee (UT) (Ross Whitaker subsequently moved to University of Utah), and University of Penn- sylvania (UPenn). The Principle Investigators for these partners were, respectively, Bill Lorensen at GE CRD, Will Schroeder at Kitware, Vikram Chalana at Insightful, Stephen Aylward with Luis Ib´a˜nez at UNC (Luis is now at Kitware), Ross Whitaker with Josh Cates at UT (both now at Utah), and Dimitri Metaxas at UPenn (now at Rutgers). In addition, several subcontractors rounded out the consortium including Peter Raitu at Brigham & Women’s Hospital, Celina Imielinska and Pat Mol- holt at Columbia University, Jim Gee at UPenn’s Grasp Lab, and George Stetten at the University of Pittsburgh. In 2002 the first official public release of ITK was made available.
  41. 41. CHAPTER TWO INSTALLATION This section describes the process for installing OTB on your system. OTB is a toolbox, and as such, once it is installed in your computer, provides by default a set of useful libraries. You can use these libraries to build your own applications based on it. What OTB does provide, besides the toolbox, is a large set of test files and examples that will introduce you to OTB concepts and will show you how to use OTB in your own projects. Since the release 3.12, OTB embeds a specific framework to generate applications in a more user- friendly way. If you activate the specific option BUILD APPLICATIONS, OTB builds for each appli- cation one shared library (also known as plugin). This plugin can be auto-loaded into appropriate tools without recompiling, and is able to fully describe its own parameters, behaviour and documen- tation. The tools to use these plugins can be extended, but OTB is shipped with the following: • A command-line launcher, • A graphical launcher, with an auto-generated Qt interface, providing ergonomic parameters setting, display of documentation, and progress reporting, • A C and SWIG interface, which means that any application can be loaded, set up and executed into a high-level language such as Python for instance. The classical OTB powered applications are still available and will still be maintained: Monteverdi An integrated application giving graphical access to a lot of OTB functionalities. OTB-Wrapping Calling OTB from Python or Java (see chapter 34). There are two ways to install OTB on your system: installing from a binary distribution, or compiling from sources (Table 2.1). What you need depends on your system, and on what you intend to do.
  42. 42. 12 Chapter 2. Installation OTB library and internal applica- tions Monteverdi Wrapping (Java and Python) Any platform Build from source (see section 2.2) Build from source (see section 2.2) Build from source (see section 2.2) Windows 2000/X- P/Vista/Seven OSGeo4W installer for internal applica- tions Windows or OS- Geo4W installer (see section 2.1.1) OSGeo4W installer (see section 2.1.1) MacOS X 10.6 and higher MacPorts (see sec- tion 2.1.2) app’s DMG file (see section 2.1.2) Ubuntu Linux 10.04 and higher (32/64 bits) APT repository (see section 2.1.3) APT repository (see section 2.1.3) OpenSuse 11.X and higher (32/64 bits) RPM package (see section 2.1.3) RPM package (see section 2.1.3) CentOS 6.X and higher (32/64 bits) RPM package (see section 2.1.3) RPM package (see section 2.1.3) RPM package (see section 2.1.3) Table 2.1: Available installation procedures with respect to system configuration and target usage 2.1 Installing binary packages 2.1.1 Windows 2000/XP/Vista/Seven For Windows 2000/XP/Vista/Seven users, there is a classical standalone installation program for Monteverdi, available from the OTB download page. There are another way to install Monteverdi directly through through OSGeo4W. With this new way, you can install other OTB packages as described in the following paragraph. Since version 3.12, we provide OTB packages through OSGeo4W for Windows 2000/XP/Vista/- Seven users. Packages for the OTB applications, Monteverdi and OTB-Wrapping are available directly in the OSGeo4W installer with the following names: • otb-bin for command line and QT applications • otb-python for python applications • otb-monteverdi for the Monteverdi application • otb-wrapping for low level Python/Java bindings. Follow the instructions in the installer and select the packages you want to add. The installer will proceed with the installation of selected packages and all their dependencies. In the case of otb- monteverdi, Monteverdi will be directly installed in the OSGeo4W repository and a shortcut will
  43. 43. 2.1. Installing binary packages 13 be added to your desktop and in the start menu (in the OSGeo4W folder). You can now use directly Monteverdi from your desktop, from the start menu and from an OSGeo4W shell with command monteverdi. For the otb-bin packages, it will be available directly in the OSGeo4W shell, for example run otbgui_BandMath. We recommended to use this way to install internal applications of OTB on Windows. If you want to use the otb-python package, for example in QGIS, please following the install note found in the OTB wiki. You can simply check from an OSGeo4W shell the list of available applications: python import otbApplication print str( otbApplication.Registry.GetAvailableApplications() ) For more information you can read the OTB Cookbook which provides useful information about these OTB applications. 2.1.2 MacOS X Orfeo Toolbox is now available on MacPorts. The port name is called orfeotoolbox. You can follow the MacPorts documentation to install MacPorts first, then install the orfeotoolbox port. A standard DMG package is available for Monteverdi for MacOS X 10.8. Please go the the OTB download page. Click on the file to launch Monteverdi. 2.1.3 Linux Ubuntu 10.04 and higher For Ubuntu 10.04 and higher, OTB, OTB applications, Monteverdi and OTB-Wrapping packages may be available as Debian packages through APT repositories. Since release 3.14.1, OTB packages are available in the ubuntugis-unstable repository. You can add it by using these command-lines: sudo aptitude install add-apt-repository sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable Now run: sudo aptitude update
  44. 44. 14 Chapter 2. Installation If you want only OTB libraries, please use: sudo aptitude install libotb If you want OTB Applications, please use: sudo aptitude install otb-bin otb-bin-qt python-otb If you want monteverdi application, please use: sudo aptitude install monteverdi If you want Python/Java wrapping, please use: sudo aptitude install otb-wrapping-python otb-wrapping-java If you are using Synaptic, you can add the repositories, update and install the packages through the graphical interface. For further informations about Ubuntu packages go to ubuntugis-unstable launchpad page and click on Read about installing. Moreover, nightly builds for all OTB projects are also available through APT repositories. However you should use it carefully. If you are using apt command-line tools, use these command-lines to add the otb repository to apt sources: sudo aptitude install add-apt-repository sudo add-apt-repository ppa:otb/orfeotoolbox-nightly Now run: sudo aptitude update As with the previous cases, select which packages you will install. sudo aptitude install libotb otb-bin otb-bin-qt python-otb monteverdi Be careful not to add the two repositories, since they may cause incompatibilities. apt-add-repository will try to retrieve the GPG keys of the repositories to certify the origin of the packages. If you are behind a http proxy, this step won’t work and apt-add-repository will stall and eventually quit. You can temporarily ignore this error and proceed with the update step. Following this, aptitude update will issue a warning about a signature problem. This warning won’t prevent you from installing the packages.
  45. 45. 2.1. Installing binary packages 15 OpenSuse 11.X and higher For OpenSuse 11.X and higher, OTB, Monteverdi and OTB-Wrapping packages are available through zypper. First, you need to add the appropriate repositories with these command-lines (please replace 11.4 by your OpenSuse version): sudo zypper ar http://download.opensuse.org/repositories/games/openSUSE_11.4/ Games sudo zypper ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_11.4/ GEO sudo zypper ar http://download.opensuse.org/repositories/home:/tzotsos/openSUSE_11.4/ tzotsos Now run: sudo zypper refresh sudo zypper install OrfeoToolbox sudo zypper install OrfeoToolbox-devel sudo zypper install Monteverdi sudo zypper install OrfeoToolbox-python Alternatively you can use the One-Click Installer from the openSUSE Download page or add the above repositories and install through Yast Package Management. In case you wish to test the latest version of the packages, you can run: sudo zypper refresh sudo zypper install OrfeoToolbox-beta sudo zypper install OrfeoToolbox-beta-devel sudo zypper install Monteverdi-beta There is also support for the recently introduced ’rolling’ openSUSE distribution named ’Tumble- weed’. For Tumbleweed you need to add the following repositories with these command-lines: sudo zypper ar http://download.opensuse.org/repositories/games/openSUSE_Tumbleweed/ Games sudo zypper ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Tumbleweed/ GEO sudo zypper ar http://download.opensuse.org/repositories/home:/tzotsos/openSUSE_Tumbleweed/ tzotsos and then add the OTB packages as shown above.
  46. 46. 16 Chapter 2. Installation CentOS 5.5 Since 3.12 version, OTB packages (OTB, monteverdi) are available on CentOS 5.5 distribution. In the following lines, we will describe the way to install OTB and monteverdi packages on this distribution. If you want use OTB-Wrapping, please following the instructions found in this file. Preliminary steps (common to all packages): 1. Configure your system to pass through your HTTP(S) proxy, 2. Add required extra repositories: EPEL, ELGIS and centosplus, can be found in the previous file. So if you want OTB and monteverdi packages, you need to install a standard RPM packages which is available on OTB website: wget http://www.orfeo-toolbox.org/packages/centos/5.5/i386/3.11.0/ gdal-1.8.0-5.i386.rpm yum --nogpgcheck install gdal-1.8.0-5.i386.rpm We can now get and install (replace version number by the current): 1. OTB libraries and applications package: wget http://www.orfeo-toolbox.org/packages/centos/5.5/i386/3.11.0/ OrfeoToolbox-3.11.0-1.i386.rpm yum --nogpgcheck install OrfeoToolbox-3.11.0-1.i386.rpm 2. monteverdi package: wget http://www.orfeo-toolbox.org/packages/centos/5.5/i386/3.11.0/ Monteverdi-1.9.0-0.i386.rpm yum --nogpgcheck install Monteverdi-1.9.0-0.i386.rpm 2.2 Building from sources OTB has been developed and tested across different combinations of operating systems, compil- ers, and hardware platforms including MS-Windows, Linux on Intel-compatible hardware and Mac OSX. It is known to work with the following compilers:

×