changeset 149:b990fa45cb1f refactors

Merge from branch "noise"
author Chris Cannam
date Thu, 22 Jan 2015 17:20:11 +0000
parents 254e16f831ee (current diff) 214b72d55796 (diff)
children b79151bb75af
files
diffstat 2 files changed, 19 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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<double> &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;
     }
--- 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);
 }