Skip Navigation
About NASALatest NewsMultimediaMissionsMy NASAWork For NASA
+ Home

Introduction

This is the official Vision Workbench (VW) web site. It contains information about downloading, installing, using, and contributing to the VW. This site also serves as a distribution point for the latest releases of the VW.

The VW is a general purpose image processing and computer vision library developed by the Autonomous Systems and Robotics (ASR) Area in the Intelligent Systems Division at the NASA Ames Research Center. VW has been publically released under the terms of the NASA Open Source Software Agreement.

The VW was implemented in the C++ programming language and makes extensive use of C++ templates and generative programming techniques for conciseness of expression, efficiency of operation, and generalization of implementation.

While substantial functionality is implemented in the VW, the goal of the library is not to provide advanced cutting-edge image processing or computer vision capabilities. Rather, the intent is to provide a solid efficient foundation implementing well known techniques and a common framework for doing advanced research and development in collaboration with others.

The intended audience for the VW includes computer vision and robotics researchers and developers, as well as those who simply want to transform or enhance images. At this point in time, the VW may not be suitable for those who have little experience or familiarity with C++.

Background

The Intelligent Robotics Group (IRG) has been actively developing image processing and machine vision techniques for planetary exploration since 1995. Initially focused on providing immersive visualization capabilities for mission control, these systems were subsequently adapted for use on-board planetary rovers.

The Vision Workbench resulted from a collaboration between IRG and the Adaptive Control and Evolvable Systems (ACES) group to more effectively leverage technical expertise embodied in disparate ASR image processing and computer vision code bases by developing a framework implementing common functionality and providing a common infrastructure for collaboration and reuse of code.

Approach

C++ templates are used extensively throughout the VW. This enables compile time expansion and optimization of expressions, and in general terms, compile-time computation of checks and quantities that are typically performed at run-time with more traditional object oriented approaches. In addition, extensive parameterization by type of functions and classes together with careful design has the well known advantage of enabling code reuse across a variety of applications.

While the VW is substantially template based, there are situations where run-time type checks must be made, and polymorphism is utilized. This hybrid approach results in a binary VW library in addition to the VW template header files.

The VW library has a hierarchical layered architecture where each implementation layer is composed of a set of modules that are independent of modules in higher level layers. Dependencies between modules in a given layer and circular dependencies (direct or indirect) between modules are not permitted.

The following modules are distributed with this release:

  • Camera
    • pinhole and linescan camera models
    • EXIF Metadata Parsing
    • bayer filter decoding
  • Cartography
    • transformation between map projections
    • geo-referenced file IO (GeoTIFF, etc.)
  • Core
    • exception handling, debugging support, type system support, cache support
  • FileIO
    • reading and writing JPEG, PNG, TIFF, PDS, OpenEXR files (requires 3rd party libraries)
    • image paging support for large files
  • HDR
    • high dynamic range image creation from bracketed low dynamic range exposures
    • camera response curve estimation
    • global and local tone mapping operators
  • Image
    • convolution -- convolve images with linear filters
    • algebra -- image addition, subtraction, and multiplication by a scalar
    • math -- perform per pixel math operations on images (e.g., abs, hypot, sqrt, pow, exp, log, sin, cos, asin, acos, atan2, etc.)
    • transformations - translation, rotation, scale, resampling, arbitrary warps
    • image statistics
  • Math
    • vector, matrix, quaternion and linear algebra (interface to LAPACK),
    • optimization -- levenberg-Marquardt, conjugate gradient
    • estimation of relations between geometric entities -- homographies
    • Determination of geometric extent -- bounding boxes
  • Mosaic
    • assembling large image composites from many source images
    • multi-band blending
    • generating on-disk quad-tree representations of extremely large images
  • Stereo
    • correlating stereo pairs of images
    • stereo camera models for 3D reconstruction
    • outlier rejection

The Core, Math, Image, and FileIO modules are considered to be foundational and are required for typical library usage. The Camera, HDR, and Cartography modules are included in the library by default, but can be disabled in the VW library build process if not desired.

Installation

The latest Vision Workbench source code release is available from the links below:

The Vision Workbench depends on a number of external libraries for supporting functionality. Most of these external libraries are optional and not required for a functional library. However, the boost library is required and must be downloaded, built and installed prior to buiding the Visoin Workbench.

Library Dependent Modules Source Website
Boost Core, etc. (req.) http://www.boost.org/
LAPACK Portions of Math, HDR (opt.) See note below
PNG FileIO (opt.) http://www.libpng.org/
JPEG FileIO (opt.) http://www.ijg.org/
TIFF FileIO (opt.) http://www.libtiff.org/
OpenEXR FileIO (opt.) http://www.openexr.com/
PROJ.4 Cartography (req.) http://www.remotesensing.org/proj/
GDAL Cartography (req.) http://www.remotesensing.org/gdal/

The Vision Workbench relies on the LAPACK and BLAS libraries for its basic linear algebra functions, including eigensystem solving, linear least squares, and singular value decomposition. For your convenience, we have provided a version of LAPACK as a supplementary distribution above. This LAPACK distribution has been tested with the Vision Workbench, however the Vision Workbench has been shown to work with other versions of LAPACK that may come pre-installed on your system. In particular, Mac OS X users do not need to use the LAPACK installer above -- LAPACK support is provided by Apple's veclib framework on Mac OS X.

Detailed installation and build instructions are found in the "README" and "INSTALL" files distributed with the release. You can find release notes for the current version in the "NOTES" file.

Documentation

The most comprehensive source of documentation for VW is the Vision Workbook: a User's Guide to the NASA Vision Workbench. This book is available in the docs/ directory of the source distribution, or you can download a copy of the latest version here. It has not yet been updated for version 2.0 of the Vision Workbench.

In addition, Doxygen can be used to automatically generate API documentation. Assuming you have doxygen installed on your system, you can generate the documentation by running "make docs" in the top level of the VW source distribution.

Mailing List

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

  • vision-workbench [at] lists [dot] nasa [dot] gov

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

  • vision-workbench-request [at] lists [dot] nasa [dot] gov

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

  • vision-workbench-owner [at] lists [dot] nasa [dot] gov

Contributing

We are working to establish out a process through which outside parties can actively participate as developers on this project. In the meantime, please contact vision-workbench-owner [at] lists [dot] nasa [dot] gov if you wish to contribute code to the Vision Workbench library.