Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extern/libmv/libmv/simple_pipeline/keyframe_selection.cc30
1 files changed, 26 insertions, 4 deletions
diff --git a/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc b/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc
index 6ab9e7eefb6..64504e7af9a 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;