# HG changeset patch # User Chris Cannam # Date 1421947211 0 # Node ID b990fa45cb1fed3c8621e24e86f2d04c4ffbc1a8 # Parent 254e16f831ee749c275f01300f79be4c9209da9d# Parent 214b72d557962f1c87a1b29faccde664a71888d7 Merge from branch "noise" diff -r 254e16f831ee -r b990fa45cb1f src/DistanceMetric.cpp --- a/src/DistanceMetric.cpp Fri Jan 16 10:28:29 2015 +0000 +++ b/src/DistanceMetric.cpp Thu Jan 22 17:20:11 2015 +0000 @@ -38,21 +38,20 @@ const vector &f2) { double d = 0; - double sum1 = 0; - double sum2 = 0; double sum = 0; int featureSize = f1.size(); assert(int(f2.size()) == featureSize); - + for (int i = 0; i < featureSize; i++) { d += fabs(f1[i] - f2[i]); - sum1 += fabs(f1[i]); - sum2 += fabs(f2[i]); + sum += fabs(f1[i]) + fabs(f2[i]); } - sum = sum1 + sum2; - + double noise = 1e-3 * featureSize; + d += noise; + sum += noise; + if (sum == 0) { return 0; } diff -r 254e16f831ee -r b990fa45cb1f test/TestDistanceMetric.cpp --- a/test/TestDistanceMetric.cpp Fri Jan 16 10:28:29 2015 +0000 +++ b/test/TestDistanceMetric.cpp Thu Jan 22 17:20:11 2015 +0000 @@ -34,12 +34,14 @@ e2 = getTestFeature(2), e0 = getTestFeature(0); - BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 6.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 6.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 6.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 12.0); + double noise = 1e-3 * 4; + + BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0 + noise); + BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 6.0 + noise); + BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 6.0 + noise); + BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0 + noise); + BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 6.0 + noise); + BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 12.0 + noise); } BOOST_AUTO_TEST_CASE(sum) @@ -52,11 +54,13 @@ e2 = getTestFeature(2), e0 = getTestFeature(0); - BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0); + double noise = 1e-3 * 4; + + BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 1.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 1.0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 1.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0); - BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 1.0/3.0); + BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), noise / (12.0 + noise)); + BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), (6.0 + noise) / (18.0 + noise)); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 1.0); }