The executable reads an input file, performs tensor voting with the user-defined
value for sigma2 and writes the resulting tensors to the output file.

The syntax is:

VotingND infile outfile sigma2

The input file is a text file that begins with an unsigned integer that
specifies the dimensionality of the space, followed by a list of un-oriented
points or tensors, or a mixture of both. An un-oriented point is represented by
its coordinates followed by a 0, such that a file containing un-oriented points
would look like this:

N

x1_1 x1_2 … x1_N 0

x2_1 x2_2 … x2_N 0

…

xM_1 xM_2 … xM_N 0

Where xi are the M points and xi_j, j=1..N are the coordinates of each point.
The number of points does not need to be specified. The points are encoded as
unit ball tensors with all eigenvalues equal to one and an orthonormal set of
eigenvectors.

Alternatively, one can input points with orientation information in the form
of tensors. In this case, the coordinates are followed by a 1 to indicate that
the point is associated with a tensor. Following the 1, the input file contains
the eigenvalues of the tensor in decreasing order and then the eigenvectors
starting from the one corresponding to the maximum eigenvalue. The input file
should be in the following form:

N

x1_1 x1_2 … x1_N 1

lambda1_1 lambda1_2… lambda1_N

e1_11 e1_12 … e1_1N

…

e1_N1 e1_N2 … e1_NN

…

…

xM_1 xM_2 … xM_N 1

lambdaM_1 lambdaM_2… lambdaM_N

eM_11 eM_12 … eM_1N

…

eM_N1 eM_N2 … eM_NN

Line feeds are actually ignored. They are included here for clarity. Also,
the code can read the 0 or 1 index in integer or floating form. If one wishes to
compute saliency values at locations that do not participate in the computation,
these should be associated with zero ball tensors. Such tensors have to be
provided in the second format as tensors with all eigenvalues equal to zero.

The output file is also a text file that contains the tensors accumulated
after voting at the input positions. It is always in the second format. It can
be used directly as input for a second pass of tensor voting, if so desired.

The final parameter is the square of the scale of the voting field which
effectively determines the size of the voting neighborhood and the degree of
smoothness. The scale should be set according to the dimensions of the input
space. A scale below 1.0 would probably result in no information propagation in
a space where the average distance between points is more than 10 units of
length.

Since Euclidean distances are used when computing the magnitude of the votes
that are cast from point to point, the input coordinates may need to be scaled
in a way that ensures that the Euclidean distances between points are
meaningful. This functionality is not provided since it is problem-dependent.

Note: Our software contains the Approximate Nearest Neighbor (ANN) k-d tree
library (release 0.1) of the University of Maryland and Sunil Arya and David
Mount. We are grateful to the authors for making their software publicly
available. The license agreement of the ANN library is the following:

Copyright (c) 1997-1998 University of Maryland and Sunil Arya and David
Mount. All Rights Reserved.

This software and related documentation is part of the Approximate Nearest
Neighbor Library (ANN).

Permission to use, copy, and distribute this software and its documentation
is hereby granted free of charge, provided that:

(1) it is not a component of a commercial product, and

(2) this notice appears in all copies of the software and related documentation.

The University of Maryland (U.M.) and the authors make no representations
about the suitability or fitness of this software for any purpose. It is
provided "as is" without express or implied warranty.