Mercurial > hg > match-vamp
diff src/DistanceMetric.cpp @ 157:d6c1556fadd0 refactors
Default is actually Manhattan, not Euclidean (it just looks like squared-Euclidean for energy vectors). Add Euclidean as another alternative.
author | Chris Cannam |
---|---|
date | Thu, 29 Jan 2015 10:55:24 +0000 |
parents | d6df9fe7b12f |
children | d1bc89794cd4 |
line wrap: on
line diff
--- a/src/DistanceMetric.cpp Thu Jan 29 10:25:47 2015 +0000 +++ b/src/DistanceMetric.cpp Thu Jan 29 10:55:24 2015 +0000 @@ -62,13 +62,21 @@ if (d > 1.0) d = 1.0; return d; // normalisation param ignored + } - // Euclidean - - for (int i = 0; i < featureSize; i++) { - d += fabs(f1[i] - f2[i]); - sum += fabs(f1[i]) + fabs(f2[i]); + if (m_params.metric == Manhattan) { + for (int i = 0; i < featureSize; i++) { + d += fabs(f1[i] - f2[i]); + sum += fabs(f1[i]) + fabs(f2[i]); + } + } else { + // Euclidean + for (int i = 0; i < featureSize; i++) { + d += (f1[i] - f2[i]) * (f1[i] - f2[i]); + sum += fabs(f1[i]) + fabs(f2[i]); + } + d = sqrt(d); } double noise = 1e-3 * featureSize;