Up: No Title
Previous: Research technique
This section describes at a high level most of the software developed for
the reconstruction pipeline. The individual programs are self documenting
(with few exceptions, noted below); this means that for the most part the
programs can be run with no command line arguments in order to get a usage
message displayed. The organization of this section is roughly as follows:
conversion utilities are listed first, followed by programs used to compute
the eigenspaces, in the order they would be used; at the end are the
testing and reconstruction programs.
- Converts FLIRT's .f file format to a PGM suitable for
viewing in xv.
- Converts FLIRT's .f file format for matrices into
Matlab's .mat file format.
- reads in a .f file of a CyberWare head and converts it
into an Open Inventor file. Makes the following assumptions:
- The first 1/4 (vertically) of the .f file represents the range
data for the head.
- The rest of the .f file represents the texture map of the head;
values are uninterleaved, in red, green, and blue order, and range
from 0 to 255.
- Head is oriented vertically (i.e., top of head is at top of
- Converts a set of range data in standard CyberWare
format into a PGM file suitable for viewing with xv.
- Reads in a PGM image and maps the intensity values
[minIn.. maxIn] to [minOut..maxOut], passing through unchanged all pixels
outside of the [minIn..maxIn] range. (A more general version of
- Reads in a PGM image and linearly maps intensity values
0..255 to threshold..(255-threshold).
- Reads in a PGM image, diffuses it using a 2D Laplacian
lattice, and writes out the result in .f format. Command line options
turn on/off Open Inventor display window, and set alpha value and number
of iterations. Usage documentation describes diffusion algorithm.
- Calculates Lambda, the ratio of structure to texture
power for a given data set.
- Reads in two files, a .f file containing a CyberWare head
(combined structure and texture), and a .f file containing a mask.
Multiplies the structure and texture by the mask (so that higher
intensities in the mask show up more brightly in the resulting file),
multiplies the texture components by lambda (see lambdaCalc), and
writes out the resulting head's data in .f format.
- Subsamples a .f file by a factor of n in the horizontal
and vertical dimensions.
- Performs eigenvector decomposition on a set of input
vectors. See comments at top of code for input/output file descriptions.
- Computes the optimal linear estimator for a given
set of eigenvectors and a known set of dimensions. The estimator, when
given these dimensions later, will use the complete set of eigenvectors
to estimate the unknown dimensions.
- Aligns heads. Input is a data file containing information
about each head, including four points to align to the first
(``canonical'') head. Output is head-aligned-[0... n].iv, which can be
converted to .f format with iv2float.
- Renders an Inventor model using a ``virtual CyberWare
scanner'' into cylindrical coordinate depth and texture maps. Writes the
result in .f format. Assumes dimensions of model are those which
float2iv outputs (Y coordinate from 0 to 1; radius between 0 and 255).
- Aligns heads based on alignment data from FLIRT's
alignment program (canonicalCyber) but using Inventor-based ray caster to
- Cycles through Inventor models given on command line at a
rate of half a second per model. Useful for verifying alignment of head
- singleEigHeadTest, modularEigHeadTest
- Reconstruct original input
heads based on either single or modular eigenspace decomposition. These
programs have path names hard coded into them, and are not
self documenting (take no command line arguments).
- Reads in a data file (the format of which is
described in the usage) and reconstructs all the heads listed in it based
on the coefficients in the file (acquired from eigenDecomp). Used
to compare modular eigenspace reconstruction to single eigenspace
reconstruction without leaving the test head out of the
eigenspace. (Note: with all eigenvectors preserved, single eigenspace
should always do better than modular.)
- Projects a head onto an eigenspace or set of
eigenspaces, reconstructs the head based on the acquired coefficients,
and computes the error between the original head and the reconstructed
one, printing this floating point number on standard output. Also outputs
reconstructed head's data to ``recon-test.f''.
- A manual reconstruction demo in which the user can
specify (via a graphical user interface) the coefficients of
reconstruction. Has pathnames hard-coded in, and is not
self-documenting. See comments at top of code for running instructions.
- uses the input from the FLIRT system as the basis for
model reconstruction. It projects the incoming head data onto an
eigenspace or set of eigenspaces (using the estimators computed by
estimatorCalc to fill in unknown data), and reconstructs the head based
on the acquired coefficients.
Up: No Title
Previous: Research technique
Kenneth B Russell
Mon May 5 14:33:03 EDT 1997