Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 305 lines (239 sloc) 13.764 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305

The NASA Vision Workbench is a modular, extensible, cross-platform
computer vision software framework written in C++. It was designed to
support a variety of space exploration tasks, including automated
science and engineering analysis, robot perception, and 2D/3D
environment reconstruction, though it can also serve as a
general-purpose image processing and machine vision framework in other
contexts as well.

This package is composed of several modules each of which provides a
separate C++ library. The core library provides the basic image and
pixel data types as well as a range of fundamental image processing
operations. The other modules provided in this release are:

 * Math: geometric, numeric, and other mathematical types and functions
 * HDR: creating, processing, and compressing high dynamic range images
 * InterestPoint: Detecting, tracking, and matching interest points
 * Mosaic: compositing, blending, and manipulating 2D image mosaics
 * Camera: camera models and related types and functions
 * Cartography: tools for manipulating geospatially-referenced images

Each of these modules and their dependencies are discussed in greater
detail in section 3, "LIBRARY STRUCTURE".

2. LICENSE (see COPYING for the full text)

A. Copyright and License Summary

Copyright (c) 2006-2012, United States Government as represented by the
Administrator of the National Aeronautics and Space Administration. All
rights reserved.

The NASA Vision Workbench is licensed under the Apache License,
Version 2.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.

B. Third-Party Libraries

This distribution includes some bundled third-party software as a
convenience to the user. This software, located in the "thirdparty/"
directory, is not covered by the above-mentioned distribution
agreement or copyright. See the included documentation for detailed
copyright and license information for any third-party software. In
addition, various pieces of the Vision Workbench depend on additional
third-party libraries that the user is expected to have installed.
The specific dependencies of each component of the Vision Workbench
are discussed section 3, "LIBRARY STRUCTURE", and information of where
to obtain non-bundled third-party libraries is provided in section 4,


The Vision Workbench software is located in the directory "src/vw/"
and consists of a core library and several optional libraries or
"modules". Each module is contained in a subdirectory with the name
name as the module.

A. The Main Vision Workbench Library

At the center of the Vision Workbench are three modules that are
in fact linked together to form a single fundamental library.

i. The "Core/" module provides fundamental services that are not
specific to image processing, such as C++ exception types and type
computation classes.

ii. The "Image/" module provides the pixel and image types and
functions that form the heart of the Vision Workbench, including
support for various color spaces, filtering operations, and other
image processing primitives.

iii. The "FileIO/" module contains routines to support reading and
writing images from and to disk in a variety of file formats.

The only required dependency of the Vision Workbench core is the Boost
C++ libraries, which provide a variety of low-level C++ library
servies. (These are actually many libraries by different authors
released under a common license, but they are generally distributed as
a package and we will treat them that way for simplicity.) The file
I/O module has a number of optional dependencies, each providing
support for one or more image file formats. Specifically these are:
libpng for PNG files, libjpeg for JPEG/JFIF files, libtiff for TIFF
files, NetPBM for PBM/PGM/etc. files, and OpenEXR for EXR files.

B. Math Module

This module provides a variety of mathematical data types and
algorithms. It is centered around fundamental vector, matrix, and
quaternion data types which support the usual range of mathematical
operations. On top of that foundation there are higher-level types
and algorithms for geometric computation, linear algebra,
optimization, and statistics, and so forth.

The linear algebra numerical algorithms rely on the standard low-level
routines provided by LAPACK (Linear Algebra Package) and BLAS (Basic
Linear Algebra Subprograms). Many computers (e.g. those running OS X)
come with optimized implementations of LAPACK and BLAS, in which case
you can (and probably should) just use those. To support other
platforms we provide public-domain implementations automatically
translated from the original Fortran and taken from the online Netlib

C. HDR Module

While the core Vision Workbench library supports working with high
dynamic range (HDR) image data directly, most input and output devices
(e.g. digital cameras and displays) only support a limited dynamic range.
This module provides tools for interfacing between the two worlds, by
generating HDR images from collections of ordinary images as well as
providing several methods to compress HDR images for display on ordinary
output devices.

D. InterestPoint Module

Interest points are points in an image that can be reliably detected and
tracked, such as corners or peaks. This module provides tools for
locating interest points in images in a variety of ways. It can also
generate local descriptors for those points using several methods which
can then be used to locate corresponding points in sets of images.

E. Mosaic Module

The Mosaic module provides tools for working with large images
assembled from many smaller images, such as panoramas or aerial maps.
It includes support for assembling source images into a mosaic,
blending the images in the mosaic to create a single large image, and
dicing the extremely large images that result into better formats for

F. Camera Module

The Camera module provides a variety of data types and tools for
working with camera models and camera data. Most notably it includes
support for a variety of standard camera geometries, the ability to
transform images between camera models, and the ability to interpret
camera data stored in the EXIF headers of image files generated by
digital cameras.

G. Cartography Module

The Cartography module provides a variety of 2D and 3D mapping
capabilities. It allows you to georeference an image, specifying its
projection, position within the projected space, and altitude
reference (or "datum"), and it supports reprojecting images into the
desired projection. It requires the PROJ.4 cartographic projection
library, and also optionally depends on the GDAL library which
provides support for a variety of GIS file formats.

H. Testing Frameworks

Each module includes a collection of tests located in that module's
"tests/" subdirectory. You can use these tests to confirm that the
library is installed and working properly on your system. To do this,
simply run "make check" after building the library. Please report any
errors you encounter, using the contact information at the bottom of
this file. Note that while the tests do currently exercise a
significant portion of the library, they are not yet fully exhaustive.


A. Obtaining the Software

If you are reading this text then presumably you have a copy of
the software. However, you can obtain the most recent version from

Before attempting to configure, build or install the Vision Workbench
you should obtain and install any prerequisite libraries that you
need. The only absolute requirement is the Boost. The others are
either required to build a specific module, or will enable a
particular feature if available. A complete list of dependencies
is shown in the table below, where each library is noted as being
either a required or optional dependency of one or modules. All of
these libraries are distributed under some variation on the themes
of the MIT and BSD licenses. See each individual library's
documentation for details.

| Library | Relevant Modules | Source Website |
| Boost | Core, etc. (req.) | |
| PROJ.4 | Cartography (req.) | |
| GDAL | Cart/FileIO (opt.) | |
| PNG | FileIO (opt.) | |
| JPEG | FileIO (opt.) | |
| TIFF | FileIO (opt.) | |
| OpenEXR | FileIO (opt.) | |

In addition, the some Vision Workbench modules require other, lower
level modules to be built. The internal Vision Workbench dependency
table appears below.

| HDR | Mosaic | Cartography | Application-specific Toolkits
| FileIO | Camera | High-level Primatives
| Image | Math | Low-level image processing/Linear Algrebra
| Core | Basic Programming Infrastructure

B. Building and Installing

Once you have obtained and installed all of the prerequisite software
the process of building the Vision Workbench itself is generally
straightforward. There are four steps:

i. Configure the library. This is usually as simple as running the
"./configure" script from within the root Vision Workbench package

ii. Build the library by running "make".

iii. Run the tests by running "make check".

iv. Install the library by running "make install".

While this simple sequence will suffice for most users, the configure
script has many options that you can use to adjust various properties,
such as compiler optimization flags or the search paths used to find
required libraries. See the "INSTALL" file in this directory for more
detailed information.

C. Using the Library

When you install the library it will place files into three
subdirectories in the installation location. The header files which
you will need to develop software using the library are located in the
"include/" subdirectory. The compiled libraries, which you will need
to link your software against, are located in the "lib/" subdirectory.
You will need to configure your software development environment as
appropriate to locate these files. Finally, a number of simple
command-line tools are provided in the "bin/" directory. These are
intended primarily as demo applications, but many of them are in fact
useful in their own right. See the documentation for a complete list
of the tools.


The primary source of documentation is the Vision Workbook, which is
provided in source form along with this distribution. It includes a
gentle introduction to using the core image processing routines, as
well as documentation for each of the high level Vision Workbench
modules. A copy of this document in PDF format should be available
from wherever you obtained this package. The original source for this
document can be found in "docs/workbook" and it can be built by
running "make workbook". This operation requires the latex typesetting


A. Mailing List

All bugs, feature requests, and general discussion should be sent to
the Vision Workbench user mailing list:

To subscribe to this list, send an empty email message with the subject
'subscribe' (without the quotes) to

To contact the lead developers and project manager directly, send mail

Please do NOT use this second list for technical inquiries, which
should all be sent to the main vision-workbench list above.

B. Credits

The Vision Workbench was developed within the Autonomous Systems and
Robotics area of the Inteligent Systems Division at NASA's Ames
Research Center. It leverages the Intelligent Robotics Group's (IRG)
extensive experience developing surface reconstruction and tools for
planetary exploration---e.g. the Mars Pathfinder and Mars Exploration
Rover missions---and rover autonomy. It has also been developed in
collaboration with the Adaptive Control and Evolvable Systems (ACES)
group, and draws on their experience developing computer vision
techniques for autonomous vehicle control systems.

See the AUTHORS file for a complete list of developers.
Something went wrong with that request. Please try again.