3D Voxel Carving

Given silhouettes of an object from multiple camera views, this library computes the
maximum volume in 3D space which may have produced them. It requires calibration
parameters for the camera views to be known
- see camera calibration.

Code is designed to be fast, for real-time carving. Carving is done using
a pre-computed lookup table based on the camera parameters.

VoxelSetC is the data structure which
represents an occupied volume in space. To carve this based on a set of calibrated cameras, use
VoxelCarveC.
A lookup table is created on construction, so expect the constructor to take many
seconds or even minutes depending on the size of the voxel set.
Once constructed, the
VoxelCarveC::Update(...) method
will quickly compute the occupied volume given any set of silhouette images.
The current implementation is single-threaded. Faster multi-thread versions on the way.

Voxel carving is often used for visualisation. The VoxelSurfacePoints(...)
functions [1] and
"[2]
compute the set of points one the surface of the voxel set,
expressed as a PointSetC.
This can be rendered in OpenGL using RavlGUIN::DPointSetC.

## Normal classes:

` ` VoxelSetC | A cuboid of volume cells (voxels) in 3D space |

` ` PointSetC | Array of 3D vertices and attributes |

## Normal functions: