[Bf-blender-cvs] [8a52217] master: Ignore zero weighted markers in keyframe selection

Sergey Sharybin noreply at git.blender.org
Wed Feb 26 13:00:05 CET 2014


Commit: 8a5221750e73b48ea204bde7a489bc11e49770a6
Author: Sergey Sharybin
Date:   Wed Feb 26 17:56:10 2014 +0600
https://developer.blender.org/rB8a5221750e73b48ea204bde7a489bc11e49770a6

Ignore zero weighted markers in keyframe selection

It doesn't make sense to use zero-weighted tracks as a correspondences
in keyframe selection.

Such tracks are not guaranteed to be tracked accurately because their
purpose is to add reference points in 3D space without affecting the
solution.

===================================================================

M	extern/libmv/libmv/simple_pipeline/keyframe_selection.cc

===================================================================

diff --git a/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc b/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc
index 6ab9e7e..64504e7 100644
--- a/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc
+++ b/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc
@@ -131,9 +131,26 @@ Mat pseudoInverse(const Mat &matrix) {
 
   return V * D * V.inverse();
 }
+
+void filterZeroWeightMarkersFromTracks(const Tracks &tracks,
+                                       Tracks *filtered_tracks) {
+  vector<Marker> all_markers = tracks.AllMarkers();
+
+  for (int i = 0; i < all_markers.size(); ++i) {
+    Marker &marker = all_markers[i];
+    if (marker.weight != 0.0) {
+      filtered_tracks->Insert(marker.image,
+                              marker.track,
+                              marker.x,
+                              marker.y,
+                              marker.weight);
+    }
+  }
+}
+
 }  // namespace
 
-void SelectKeyframesBasedOnGRICAndVariance(const Tracks &tracks,
+void SelectKeyframesBasedOnGRICAndVariance(const Tracks &_tracks,
                                            CameraIntrinsics &intrinsics,
                                            vector<int> &keyframes) {
   // Mirza Tahir Ahmed, Matthew N. Dailey
@@ -141,7 +158,10 @@ void SelectKeyframesBasedOnGRICAndVariance(const Tracks &tracks,
   //
   // http://www.cs.ait.ac.th/~mdailey/papers/Tahir-KeyFrame.pdf
 
-  int max_image = tracks.MaxImage();
+  Tracks filtered_tracks;
+  filterZeroWeightMarkersFromTracks(_tracks, &filtered_tracks);
+
+  int max_image = filtered_tracks.MaxImage();
   int next_keyframe = 1;
   int number_keyframes = 0;
 
@@ -173,11 +193,13 @@ void SelectKeyframesBasedOnGRICAndVariance(const Tracks &tracks,
          candidate_image++) {
       // Conjunction of all markers from both keyframes
       vector<Marker> all_markers =
-        tracks.MarkersInBothImages(current_keyframe, candidate_image);
+        filtered_tracks.MarkersInBothImages(current_keyframe,
+                                            candidate_image);
 
       // Match keypoints between frames current_keyframe and candidate_image
       vector<Marker> tracked_markers =
-        tracks.MarkersForTracksInBothImages(current_keyframe, candidate_image);
+        filtered_tracks.MarkersForTracksInBothImages(current_keyframe,
+                                                     candidate_image);
 
       // Correspondences in normalized space
       Mat x1, x2;




More information about the Bf-blender-cvs mailing list