next up previous contents
Next: OpenVL Overview Up: OpenVL - The Open Previous: Contents   Contents


Introduction

Volumetric data is used in many disciplines ranging from biomedical sciences to seismic sciences. Even with the wide spread use of such data, there is no standard library for handling them. All the currently available systems such as VTK [13,12], VolVis [1], AVS [15], OpenDX(formerly Data Explorer) [6], Khoros [8] etc. provide high-level functionality mainly for the purpose of visualizing the data. None of them provide low-level volume access functionality and framework for handling volumetric data. Some libraries such as ITK [7] and ImLib3D [2], which were developed at the same time as OpenVL, do provide some low level access functionality but lack the support for multiple data layouts and a dynamic plugin framework which we feel is critical for flexibility, extensibility, and ease of use. Other libraries such as VLI [11] are developed specifically for certain hardware and do not provide any data access functionality.

The main motivation for our work is the lack of a standard framework for working with volumetric datasets. Any researcher or developer intending to work with volumetric data has to build tools that provide the basic functionality needed for accessing the data. OpenVL is a framework which allows the users to concentrate on algorithm development and implementation and not bother with the low-level volume access issues. It also makes the code more manageable, less prone to errors, and more readable.

The second motivation for our work is the need for a standard platform for collaboration in the community. We want to encourage sharing of algorithm implementations to maximize code reuse and minimize duplication of efforts. For this, the OpenVL framework provides support for plugins. This allows researchers and developers to provide their algorithm implementations as OpenVL plugins which others can easily incorporate into their own code. For example, a plugin may provide a volume subdivision, a region-grow capability or an implementation of a newly published work. As these plugins are used by other users, it is likely that they will be optimized and improved. As a result, all the users of OpenVL will have access to the most optimzed implementation of various algorithms.

OpenVL is a low-level library that provides a uniform application programming interface (API) for volumetric data access, layout, and implementation of various volumetric algorithms. The library is designed to meet the following key objectives:

Uniform volume access API: OpenVL provides an uniform and standard API for accessing volumetric data stored in different layouts. This makes handling volumetric data relatively easy. The resultant code is less error prone, and more readable.

Modular: OpenVL is modular. Almost everything in OpenVL is implemented as a plugin which makes it very easy to add and remove functionality.

Extensibility: OpenVL is designed to be extensible. All the functionality provided by OpenVL can be extended by implementing additional plugins. These plugins can be provided by third parties and need not be part of OpenVL. Their functionality will be available immediately to all OpenVL enabled applications.

High performance: Every part of OpenVL is implemented to provide maximum performance. The OpenVL design allows users to tradeoff between flexibility and performance where flexibility can lead to reduced performance.

Ease of use: The various APIs used in OpenVL are designed to be as simple as possible. All APIs are documented and reference documentation is always available on the OpenVL website. The use of plugins allows users to employ algorithms implemented by others without knowing the intrinsics of the implementaton.

Open source: We strongly believe in the fundamentals of open source. The entire source code for OpenVL is freely available on the Internet from the OpenVL website. The development of OpenVL is open and contributions are encouraged.

Modern techniques: OpenVL uses modern techniques for a flexible as well as optimized implementation. The library is implemented as a shared library which applications can dynamically link to. The library uses powerful C++ techniques such as templates, partial specialization of templates, code inlining etc.


next up previous contents
Next: OpenVL Overview Up: OpenVL - The Open Previous: Contents   Contents
Sarang Lakare 2002-12-23