NAME
get_earthmover_distance  Computes the earthmover's distance.
SYNOPSIS
#include "lsm/lsm_emd.h"
Example compile flags (system dependent):
DLINUX_X86_64 DLINUX_X86_64_OPTERON DGNU_COMPILER
I/home/kobus/include
L/home/kobus/misc/load/linux_x86_64_opteron L/usr/lib/x86_64linuxgnu
lKJB lfftw3 lgsl lgslcblas ljpeg lSVM lstdc++ lpthread lSLATEC lg2c lacml lacml_mv lblas lg2c lncursesw
int get_earthmover_distance
(
Signature *sig1,
Signature *sig2,
int (*distance_fn)(Vector *,Vector *,double *),
Flow *flow_vec,
int *num_flows_ptr,
double *em_distance_ptr
);
PARAMETERS

Signature *sig1

First input signature

Signature *sig2

Second input signature

Flow *flow_vec

Output array of flows

int *num_flows_ptr

Number of valid flows

double *em_distance_ptr

Earthmover's Distance
DESCRIPTION
This routine computes the earthmover's distance between two distributions.
Distributions are stored in "signatures" which consist of an array of
"features" and a corresponding array of feature weights.
In the emd_lib.c module, a "feature" is simply a "Vector".
A "signature" is defined as follows:
 typedef struct Signature
{
int num_features; Number of features in the signature
Vector** feature_vec; Pointer to array of features
double* weights_vec; Pointer to array of feature weights
} Signature;
Each feature in a signature has a corresponding weight indicating its relative
abundance in the distribution.
A distance function must be supplied that computes the distance between
two features. A function that computes the Euclidean distance between two
features as defined above is provided: See the "distance" function.
This routine will optionally return the flow that was required to map one input
distribution to the other. If "flow_vec" is NULL, then no flow is computed. If
output flows are required, then "flow_vec" must be preallocated, and contain
n1 + n2  1 elements, where n1 and n2 are the numbers of elements in the two
input signatures.
Note that the earthmover's distance is a true metric ONLY when the two input
signatures are the same size.
Uses code written by Yosi Rubner. See http://vision.stanford.edu/~rubner
RETURNS
Either NO_ERROR, or ERROR, with an appropriate error message being set.
DISCLAIMER
This software is not adequatedly tested. It is recomended that
results are checked independantly where appropriate.
AUTHOR
Yossi Rubner, Lindsay Martin
DOCUMENTER
Lindsay Martin
SEE ALSO
euclidean_distance
,
get_target_signature
,
free_signature
,
copy_signature
,
set_signature_features
,
set_signature_weights
,
get_target_signature_db