Revision: 42489
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42489
Author:   nazgul
Date:     2011-12-07 14:54:03 +0000 (Wed, 07 Dec 2011)
Log Message:
-----------
Merging remained part of hybrid tracker which adds correlation threshold

Keir's comment:
  Add support for detecting tracking failure in the ESM tracker component of
  libmv. Since both KLT and Hybrid rely on ESM underneath, KLT and Hybrid now
  have a minimum correlation setting to match. With this fix, track failures
  should get detected quicker, with the issue that sometimes the tracker will
  give up too easily. That is fixable by reducing the required correlation (in
  the track properties).

Command used for merge: svn merge -r 42396:42397 -r 42399:42400 
^/branches/soc-2011-tomato

Modified Paths:
--------------
    trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.cc
    trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.h
    trunk/blender/extern/libmv/libmv-capi.cpp
    trunk/blender/extern/libmv/libmv-capi.h
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/source/blender/blenkernel/intern/tracking.c

Property Changed:
----------------
    trunk/blender/
    trunk/blender/source/blender/editors/space_outliner/


Property changes on: trunk/blender
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2011-cucumber:37517
/branches/soc-2011-tomato:42376,42378-42379
   + /branches/soc-2011-cucumber:37517
/branches/soc-2011-tomato:42376,42378-42379,42397,42400

Modified: trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.cc
===================================================================
--- trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.cc     
2011-12-07 11:29:24 UTC (rev 42488)
+++ trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.cc     
2011-12-07 14:54:03 UTC (rev 42489)
@@ -273,11 +273,31 @@
 
     // If the step was accepted, then check for termination.
     if (d.squaredNorm() < min_update_squared_distance) {
-      if (new_error > reasonable_error) {
-        LG << "Update size shrank but reasonable error ("
-           << reasonable_error << ") not achieved; failing.";
-        return true; // XXX
+      // Compute the Pearson product-moment correlation coefficient to check
+      // for sanity.
+      // TODO(keir): Put this somewhere smarter.
+      double sX=0,sY=0,sXX=0,sYY=0,sXY=0;
+      for (int r = 0; r < width; ++r) {
+        for (int c = 0; c < width; ++c) {
+          double x = image_and_gradient1_sampled(r, c, 0);
+          double y = image_and_gradient2_sampled[new_image](r, c, 0);
+          sX += x;
+          sY += y;
+          sXX += x*x;
+          sYY += y*y;
+          sXY += x*y;
+        }
       }
+      double N = width*width;
+      sX /= N, sY /= N, sXX /= N, sYY /= N, sXY /= N;
+      double correlation = (sXY-sX*sY)/sqrt(double((sXX-sX*sX)*(sYY-sY*sY)));
+      LG << "Final correlation: " << correlation;
+
+      if (correlation < minimum_correlation) {
+        LG << "Correlation " << correlation << " greater than "
+           << minimum_correlation << "; bailing.";
+        return false;
+      }
       LG << "Successful track in " << (i + 1) << " iterations.";
       return true;
     }

Modified: trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.h
===================================================================
--- trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.h      
2011-12-07 11:29:24 UTC (rev 42488)
+++ trunk/blender/extern/libmv/libmv/tracking/esm_region_tracker.h      
2011-12-07 14:54:03 UTC (rev 42489)
@@ -38,7 +38,8 @@
         max_iterations(16),
         min_determinant(1e-6),
         min_update_squared_distance(1e-4),
-        sigma(0.9) {}
+        sigma(0.9),
+        minimum_correlation(0.78) {}
   
   virtual ~EsmRegionTracker() {}
 
@@ -54,6 +55,7 @@
   double min_determinant;
   double min_update_squared_distance;
   double sigma;
+  double minimum_correlation;
 };
 
 }  // namespace libmv

Modified: trunk/blender/extern/libmv/libmv-capi.cpp
===================================================================
--- trunk/blender/extern/libmv/libmv-capi.cpp   2011-12-07 11:29:24 UTC (rev 
42488)
+++ trunk/blender/extern/libmv/libmv-capi.cpp   2011-12-07 14:54:03 UTC (rev 
42489)
@@ -111,12 +111,13 @@
 
 /* ************ RegionTracker ************ */
 
-libmv_RegionTracker *libmv_pyramidRegionTrackerNew(int max_iterations, int 
pyramid_level, int half_window_size)
+libmv_RegionTracker *libmv_pyramidRegionTrackerNew(int max_iterations, int 
pyramid_level, int half_window_size, double minimum_correlation)
 {
        libmv::EsmRegionTracker *esm_region_tracker = new 
libmv::EsmRegionTracker;
        esm_region_tracker->half_window_size = half_window_size;
        esm_region_tracker->max_iterations = max_iterations;
        esm_region_tracker->min_determinant = 1e-4;
+       esm_region_tracker->minimum_correlation = minimum_correlation;
 
        libmv::PyramidRegionTracker *pyramid_region_tracker =
                new libmv::PyramidRegionTracker(esm_region_tracker, 
pyramid_level);
@@ -124,12 +125,13 @@
        return (libmv_RegionTracker *)pyramid_region_tracker;
 }
 
-libmv_RegionTracker *libmv_hybridRegionTrackerNew(int max_iterations, int 
half_window_size)
+libmv_RegionTracker *libmv_hybridRegionTrackerNew(int max_iterations, int 
half_window_size, double minimum_correlation)
 {
        libmv::EsmRegionTracker *esm_region_tracker = new 
libmv::EsmRegionTracker;
        esm_region_tracker->half_window_size = half_window_size;
        esm_region_tracker->max_iterations = max_iterations;
        esm_region_tracker->min_determinant = 1e-4;
+       esm_region_tracker->minimum_correlation = minimum_correlation;
 
        libmv::BruteRegionTracker *brute_region_tracker = new 
libmv::BruteRegionTracker;
        brute_region_tracker->half_window_size = half_window_size;

Modified: trunk/blender/extern/libmv/libmv-capi.h
===================================================================
--- trunk/blender/extern/libmv/libmv-capi.h     2011-12-07 11:29:24 UTC (rev 
42488)
+++ trunk/blender/extern/libmv/libmv-capi.h     2011-12-07 14:54:03 UTC (rev 
42489)
@@ -43,8 +43,8 @@
 void libmv_setLoggingVerbosity(int verbosity);
 
 /* RegionTracker */
-struct libmv_RegionTracker *libmv_pyramidRegionTrackerNew(int max_iterations, 
int pyramid_level, int half_window_size);
-struct libmv_RegionTracker *libmv_hybridRegionTrackerNew(int max_iterations, 
int half_window_size);
+struct libmv_RegionTracker *libmv_pyramidRegionTrackerNew(int max_iterations, 
int pyramid_level, int half_window_size, double minimum_correlation);
+struct libmv_RegionTracker *libmv_hybridRegionTrackerNew(int max_iterations, 
int half_window_size, double minimum_correlation);
 int libmv_regionTrackerTrack(struct libmv_RegionTracker *libmv_tracker, const 
float *ima1, const float *ima2,
                        int width, int height, double  x1, double  y1, double 
*x2, double *y2);
 void libmv_regionTrackerDestroy(struct libmv_RegionTracker *libmv_tracker);

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py   2011-12-07 
11:29:24 UTC (rev 42488)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py   2011-12-07 
14:54:03 UTC (rev 42489)
@@ -129,8 +129,7 @@
 
             if settings.default_tracker == 'KLT':
                 col.prop(settings, "default_pyramid_levels")
-            elif settings.default_tracker == 'SAD':
-                col.prop(settings, "default_correlation_min")
+            col.prop(settings, "default_correlation_min")
 
             col.separator()
 
@@ -497,8 +496,7 @@
 
             if active.tracker == 'KLT':
                 col.prop(active, "pyramid_levels")
-            elif active.tracker == 'SAD':
-                col.prop(active, "correlation_min")
+            col.prop(active, "correlation_min")
 
             col.separator()
             col.prop(active, "frames_limit")

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c   2011-12-07 
11:29:24 UTC (rev 42488)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c   2011-12-07 
14:54:03 UTC (rev 42489)
@@ -77,7 +77,6 @@
        tracking->camera.units= CAMERA_UNITS_MM;
 
        tracking->settings.default_tracker= TRACKER_HYBRID;
-       tracking->settings.default_pyramid_levels= 2;
        tracking->settings.default_minimum_correlation= 0.75;
        tracking->settings.default_pattern_size= 11;
        tracking->settings.default_search_size= 51;
@@ -810,9 +809,9 @@
                                                        int level= 
MIN2(track->pyramid_levels, max_pyramid_levels);
 
                                                        
if(track->tracker==TRACKER_KLT)
-                                                               
track_context.region_tracker= libmv_pyramidRegionTrackerNew(100, level, 
MAX2(wndx, wndy));
+                                                               
track_context.region_tracker= libmv_pyramidRegionTrackerNew(100, level, 
MAX2(wndx, wndy), track->minimum_correlation);
                                                        else
-                                                               
track_context.region_tracker= libmv_hybridRegionTrackerNew(100, MAX2(wndx, 
wndy));
+                                                               
track_context.region_tracker= libmv_hybridRegionTrackerNew(100, MAX2(wndx, 
wndy), track->minimum_correlation);
                                                }
                                                else 
if(track->tracker==TRACKER_SAD) {
                                                        
track_context.pattern_size= MAX2(patx, paty);


Property changes on: trunk/blender/source/blender/editors/space_outliner
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2011-pepper/source/blender/editors/space_outliner:36831-38987
/branches/soc-2011-tomato/source/blender/editors/space_outliner:42376,42378-42379
   + /branches/soc-2011-pepper/source/blender/editors/space_outliner:36831-38987
/branches/soc-2011-tomato/source/blender/editors/space_outliner:42376,42378-42379,42397,42400

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to