The NASA Vision Workbench (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 publicly released under the terms of the NASA Open Source Software Agreement.
The Vision Workbench 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 Vision Workbench, 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 Vision Workbench 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++.
The Vision Workbench is primarily developed by the Intelligent Robotics Group (IRG) in the Intelligent Systems Division at the NASA Ames Research Center. 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, as well as for large-scale data processing of planetary satellite imagery.
C++ templates are used extensively throughout the Vision Workbench. 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.
The Vision Workbench 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:
- pinhole and linescan camera models
- EXIF metadata parsing
- bayer filter decoding
- transformation between map projections
- geo-referenced file IO (GeoTIFF, etc.)
- exception handling
- debugging support
- type system support
- cache support
- reading and writing JPEG, PNG, TIFF, PDS, OpenEXR files (requires 3rd party libraries)
- image paging support for large files
- high dynamic range image creation from bracketed low dynamic range exposures
- camera response curve estimation
- global and local tone mapping operators
- 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
- vector, matrix, quaternion and linear algebra (interface to LAPACK)
- optimization — levenberg-Marquardt, conjugate gradient
- homographies — estimation of relations between geometric entities
- bounding boxes — Determination of geometric extent
- assembling large image composites from many source images
- multi-band blending
- generating on-disk quad-tree representations of extremely large images
- 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.