VRIP Implementation

(Minus hole filling)

Evan Rosson

CSC 570

Winter 2007


Download

This program has been tested on Ubuntu Linux 6.10. You'll need OpenGL and GLUT. All other required libraries should be included, though you may have to play around with the makefiles for the libraries included in the source's /lib directory.

Project Goals

Implement VRIP, without the hole filling, for educational purposes.

Methods

The program goes through five stages, all of which may be visualized:

Documentation

Command line usage:

./vrip [OPTIONS...] alignment.conf [data.ply...]

Ply files should be in ASCII format. (See the included Stanford Bunny data.)

Command Line Options
--res X Y ZVolume resolution; X * Y * Z voxels. Default 10 * 10 * 10.
--cutoff VALUEWeight cutoff value used when generating volume. Default 0.20.
Used to prevent surfaces on opposite sides of the model from interacting
--zthresh VALUEZ threshhold used when generating range surfaces. Default 0.005
Increase this value if your range surfaces are connected where no connection should appear.

Camera controls
a,dMove left/right
w,sMove up/down
z,xMove forward/backward
A,DRotate along x-axis
W,SRotate along y-axis
Z,XRotate along z-axis
r Reset to starting camera angle/size
g Show next stage*
G Show previous stage*
o Show all input files
n Show only the next input file
h Display help
i Image alignment on/off
f Flatten image
q Scale image up (enlarge)
Q Scale image down (shrink)
c Toggle colors
l List alignment/display settings
* Stages: range image -> surface -> volume -> merged volume -> merged surface

Known Problems and Future Work

Ordered by importance relative to difficulty of implementation:

Most of these issues are relatively straightforward fixes, if enough time were available; there are no glaring architectural problems with the program that I'm aware of.

Results

A single range image, read from a PLY file. Data taken from Stanford's repository.
A single range surface, generated from the previous range image.
The volume generated from the above range image. Resolution is 25 * 25 * 25 voxels.
Multiple aligned range surfaces. Each range surface is a different color.
The result of merging the volumes generated from the preceding six range images.
The surface generated from the above volume using Marching Cubes.
The surface generated from the above volume using Marching Cubes on a 50 * 50 * 50 volume. Some parts are more apparent at a higher resolution, especially the back leg; but it's apparent that there are still some problems with volume intersection calculations.

More results, obtained using a cutoff of 0.05 at a resolution of 25 * 25 * 25:

make && ./vrip --res 25 25 25 --cutoff 0.05 data/bunny/data/bun.conf data/bunny/data/bun000.ply data/bunny/data/bun045.ply data/bunny/data/bun090.ply data/bunny/data/bun180.ply data/bunny/data/bun270.ply data/bunny/data/bun315.ply

Even more results, obtained using a cutoff of 0.05 at a resolution of 50 * 50 * 50:

make && ./vrip --res 50 50 50 --cutoff 0.05 data/bunny/data/bun.conf data/bunny/data/bun000.ply data/bunny/data/bun045.ply data/bunny/data/bun090.ply data/bunny/data/bun180.ply data/bunny/data/bun270.ply data/bunny/data/bun315.ply

Resources