next up previous
Next: References Up: No Title Previous: Research technique

Catalog of the software


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:
  1. The first 1/4 (vertically) of the .f file represents the range data for the head.
  2. 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.
  3. Head is oriented vertically (i.e., top of head is at top of image)

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 threshold.)

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 interpolate model.

Cycles through Inventor models given on command line at a rate of half a second per model. Useful for verifying alignment of head models.

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.

next up previous
Next: References Up: No Title Previous: Research technique

Kenneth B Russell
Mon May 5 14:33:03 EDT 1997