changeset 122:50712e4b8c89 adaptive_diagonals

If two consecutive pin points have the same coordinate on one axis, drop the first. Also, don't forget to recalculate the opening and closing parts of the path
author Chris Cannam
date Fri, 05 Dec 2014 18:06:51 +0000
parents 14a1664d1cfe
children d6f22887283e
files Makefile.inc src/Finder.cpp
diffstat 2 files changed, 36 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.inc	Fri Dec 05 17:28:53 2014 +0000
+++ b/Makefile.inc	Fri Dec 05 18:06:51 2014 +0000
@@ -24,17 +24,27 @@
 # DO NOT DELETE
 
 src/DistanceMetric.o: src/DistanceMetric.h
+src/FeatureConditioner.o: src/FeatureConditioner.h
 src/Path.o: src/Path.h
 src/MatchFeatureFeeder.o: src/MatchFeatureFeeder.h src/Matcher.h
 src/MatchFeatureFeeder.o: src/DistanceMetric.h src/Finder.h
 src/FeatureExtractor.o: src/FeatureExtractor.h
 src/Finder.o: src/Finder.h src/Matcher.h src/DistanceMetric.h src/Path.h
+src/Finder.o: src/MedianFilter.h
 src/Matcher.o: src/Matcher.h src/DistanceMetric.h
-src/MatchVampPlugin.o: src/MatchVampPlugin.h src/Matcher.h
-src/MatchVampPlugin.o: src/DistanceMetric.h src/FeatureExtractor.h
-src/MatchVampPlugin.o: src/MatchFeatureFeeder.h src/Finder.h src/Path.h
+src/MatchPipeline.o: src/MatchPipeline.h src/Matcher.h src/DistanceMetric.h
+src/MatchPipeline.o: src/Finder.h src/FeatureExtractor.h
+src/MatchPipeline.o: src/FeatureConditioner.h src/MatchFeatureFeeder.h
+src/MatchVampPlugin.o: src/MatchVampPlugin.h src/MatchPipeline.h
+src/MatchVampPlugin.o: src/Matcher.h src/DistanceMetric.h src/Finder.h
+src/MatchVampPlugin.o: src/FeatureExtractor.h src/FeatureConditioner.h
+src/MatchVampPlugin.o: src/MatchFeatureFeeder.h
 src/MatchFeatureFeeder.o: src/Matcher.h src/DistanceMetric.h src/Finder.h
 src/Finder.o: src/Matcher.h src/DistanceMetric.h
 src/Matcher.o: src/DistanceMetric.h
-src/MatchVampPlugin.o: src/Matcher.h src/DistanceMetric.h
-src/MatchVampPlugin.o: src/FeatureExtractor.h
+src/MatchPipeline.o: src/Matcher.h src/DistanceMetric.h src/Finder.h
+src/MatchPipeline.o: src/FeatureExtractor.h src/FeatureConditioner.h
+src/MatchPipeline.o: src/MatchFeatureFeeder.h
+src/MatchVampPlugin.o: src/MatchPipeline.h src/Matcher.h src/DistanceMetric.h
+src/MatchVampPlugin.o: src/Finder.h src/FeatureExtractor.h
+src/MatchVampPlugin.o: src/FeatureConditioner.h src/MatchFeatureFeeder.h
--- a/src/Finder.cpp	Fri Dec 05 17:28:53 2014 +0000
+++ b/src/Finder.cpp	Fri Dec 05 18:06:51 2014 +0000
@@ -98,6 +98,9 @@
 Finder::recalculatePathCostMatrix(int r1, int c1, int r2, int c2,
                                   float diagonalWeight) 
 {
+    cerr << "recalculatePathCostMatrix: (" << r1 << "," << c1 << ") -> ("
+         << r2 << "," << c2 << ")" << endl;
+    
     int prevRowStart = 0, prevRowStop = 0;
     
     for (int r = r1; r <= r2; r++) {
@@ -545,28 +548,37 @@
     int ex, ey;
     getEndPoint(ex, ey);
     
-    pair<int, int> prev = *pinpoints.begin();
+    pair<int, int> prev(0, 0);
 
     for (map<int, int>::const_iterator i = pinpoints.begin();
          i != pinpoints.end(); ++i) {
 
         if (i == pinpoints.begin()) continue;
 
+        map<int, int>::const_iterator j = i;
+        ++j;
+        if (j != pinpoints.end() && i->second == j->second) {
+            // skip this one
+            continue;
+        }
+        
         pair<int, int> curr = *i;
 
         if (curr.first > ex || curr.second > ey) {
+            curr = pair<int, int>(ex, ey);
+        }
 
-            recalculatePathCostMatrix(prev.second, prev.first,
-                                      ey, ex, 1.0);
-
-        } else {
-        
-            recalculatePathCostMatrix(prev.second, prev.first,
-                                      curr.second, curr.first, 1.0);
-        }
+        recalculatePathCostMatrix(prev.second, prev.first,
+                                  curr.second, curr.first,
+                                  1.0);
         
         prev = curr;
     }
+
+    recalculatePathCostMatrix(prev.second, prev.first,
+                              m_m->getFrameCount() - 1,
+                              m_m->getOtherFrameCount() - 1,
+                              1.0);
 }