Mercurial > hg > match-vamp
comparison 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 |
comparison
equal
deleted
inserted
replaced
156:d6df9fe7b12f | 157:d6c1556fadd0 |
---|---|
60 d += 1e-2; | 60 d += 1e-2; |
61 } | 61 } |
62 if (d > 1.0) d = 1.0; | 62 if (d > 1.0) d = 1.0; |
63 | 63 |
64 return d; // normalisation param ignored | 64 return d; // normalisation param ignored |
65 | |
65 } | 66 } |
66 | 67 |
67 // Euclidean | 68 if (m_params.metric == Manhattan) { |
68 | 69 for (int i = 0; i < featureSize; i++) { |
69 for (int i = 0; i < featureSize; i++) { | 70 d += fabs(f1[i] - f2[i]); |
70 d += fabs(f1[i] - f2[i]); | 71 sum += fabs(f1[i]) + fabs(f2[i]); |
71 sum += fabs(f1[i]) + fabs(f2[i]); | 72 } |
73 } else { | |
74 // Euclidean | |
75 for (int i = 0; i < featureSize; i++) { | |
76 d += (f1[i] - f2[i]) * (f1[i] - f2[i]); | |
77 sum += fabs(f1[i]) + fabs(f2[i]); | |
78 } | |
79 d = sqrt(d); | |
72 } | 80 } |
73 | 81 |
74 double noise = 1e-3 * featureSize; | 82 double noise = 1e-3 * featureSize; |
75 if (m_params.noise == AddNoise) { | 83 if (m_params.noise == AddNoise) { |
76 d += noise; | 84 d += noise; |