comparison src/DistanceMetric.cpp @ 145:ecfb4ada171b noise

Add a constant value (representing "noise") to each distance and sum
author Chris Cannam
date Fri, 16 Jan 2015 16:43:56 +0000
parents 6914a6a01ffc
children b79151bb75af
comparison
equal deleted inserted replaced
144:254e16f831ee 145:ecfb4ada171b
36 double 36 double
37 DistanceMetric::calcDistance(const vector<double> &f1, 37 DistanceMetric::calcDistance(const vector<double> &f1,
38 const vector<double> &f2) 38 const vector<double> &f2)
39 { 39 {
40 double d = 0; 40 double d = 0;
41 double sum1 = 0;
42 double sum2 = 0;
43 double sum = 0; 41 double sum = 0;
44 42
45 int featureSize = f1.size(); 43 int featureSize = f1.size();
46 assert(int(f2.size()) == featureSize); 44 assert(int(f2.size()) == featureSize);
47 45
48 for (int i = 0; i < featureSize; i++) { 46 for (int i = 0; i < featureSize; i++) {
49 d += fabs(f1[i] - f2[i]); 47 d += fabs(f1[i] - f2[i]);
50 sum1 += fabs(f1[i]); 48 sum += fabs(f1[i]) + fabs(f2[i]);
51 sum2 += fabs(f2[i]);
52 } 49 }
53 50
54 sum = sum1 + sum2; 51 double noise = 1e-3 * featureSize;
55 52 d += noise;
53 sum += noise;
54
56 if (sum == 0) { 55 if (sum == 0) {
57 return 0; 56 return 0;
58 } 57 }
59 58
60 double distance = 0; 59 double distance = 0;