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
path: root/extern
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-02-26 15:56:10 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-02-26 15:56:10 +0400
commit8a5221750e73b48ea204bde7a489bc11e49770a6 (patch)
tree15c2e18fdb8979853219203a2c042a3b0f81deb3 /extern
parent4a61df9c95d48c0854d49869eac2d3dc0453b7f4 (diff)
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.
Diffstat (limited to 'extern')
-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;