changeset 197:547bea29ad89 re-minimise

Increase noise for compact types
author Chris Cannam
date Fri, 27 Feb 2015 09:07:54 +0000
parents fa005e5e0953
children 082ff90f1c82
files src/DistanceMetric.cpp test/TestDistanceMetric.cpp
diffstat 2 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/DistanceMetric.cpp	Fri Feb 27 08:55:39 2015 +0000
+++ b/src/DistanceMetric.cpp	Fri Feb 27 09:07:54 2015 +0000
@@ -109,6 +109,11 @@
     assert(f2.size() == f1.size());
     int featureSize = static_cast<int>(f1.size());
 
+    double minNoise = 0.0;
+#ifdef USE_COMPACT_TYPES
+    minNoise = 1.0 / m_params.scale;
+#endif
+    
     if (m_params.metric == Cosine) {
 
         double num = 0, denom1 = 0, denom2 = 0;
@@ -122,7 +127,9 @@
         d = 1.0 - (num / (eps + sqrt(denom1 * denom2)));
 
         if (m_params.noise == AddNoise) {
-            d += 1e-2;
+            double noise = 1e-2;
+            if (noise < minNoise) noise = minNoise;
+            d += noise;
         }
         if (d > 1.0) d = 1.0;
         
@@ -143,8 +150,9 @@
         d = sqrt(d);
     }
 
-    double noise = 1e-3 * featureSize;
     if (m_params.noise == AddNoise) {
+        double noise = 1e-3 * featureSize;
+        if (noise < minNoise) noise = minNoise;
         d += noise;
         sum += noise;
     }
--- a/test/TestDistanceMetric.cpp	Fri Feb 27 08:55:39 2015 +0000
+++ b/test/TestDistanceMetric.cpp	Fri Feb 27 09:07:54 2015 +0000
@@ -68,6 +68,9 @@
         e0 = getTestFeature(0);
 
     double noise = 1e-3 * 4;
+#ifdef USE_COMPACT_TYPES
+    noise = 1.0 / params.scale;
+#endif
     
     BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), dm.scaleValueIntoDistanceRange(0.0 + noise));
     BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), dm.scaleValueIntoDistanceRange(6.0 + noise));
@@ -88,6 +91,9 @@
         e0 = getTestFeature(0);
 
     double noise = 1e-3 * 4;
+#ifdef USE_COMPACT_TYPES
+    noise = 1.0 / params.scale;
+#endif
     
     BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), dm.scaleValueIntoDistanceRange(1.0));
     BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), dm.scaleValueIntoDistanceRange(1.0));