[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