Blender Git Loki
Git Commits -> Revision cf5e979
Revision cf5e979 by Sergey Sharybin (master) May 30, 2013, 09:03 (GMT) |
Motion tracking: automatic keyframe selection Implements an automatic keyframe selection algorithm which uses couple of approaches to find out best keyframes candidates: - First, slightly modifier Pollefeys's criteria is used, which limits correspondence ration from 80% to 100%. This allows to reject keyframe candidate early without doing heavy math in cases there're not much common features with first keyframe. - Second step is based on Geometric Robust Information Criteria (aka GRIC), which checks whether features motion between candidate keyframes is better defined by homography or fundamental matrices. To be a good keyframe candidate, fundamental matrix need to define motion better than homography (in this case F-GRIC will be smaller than H-GRIC). This two criteria are well described in this paper: http://www.cs.ait.ac.th/~mdailey/papers/Tahir-KeyFrame.pdf - Final step is based on estimating reconstruction error of a full-scene solution using candidate keyframes. This part is based on the following paper: ftp://ftp.tnt.uni-hannover.de/pub/papers/2004/ECCV2004-TTHBAW.pdf This step requires reconstruction using candidate keyframes and obtaining covariance matrix of 3D points positions. Reconstruction was done pretty much straightforward using other simple pipeline routines, and for covariance estimation pseudo-inverse of Hessian is used, which is in this case (J^T * J)+, where + denotes pseudo-inverse. Jacobian matrix is estimating using Ceres evaluate API. This is also crucial to get rid of possible gauge ambiguity, which is in our case made by zero-ing 7 (by gauge freedoms number) eigen values in pseudo-inverse. There're still room for improving and optimizing the code, but we need some point to start with anyway :) Thanks to Keir Mierle and Sameer Agarwal who assisted a lot to make this feature working. |
Commit Details:
Full Hash: cf5e979fb4cef064f60d901c89c2a8a2f039d410
SVN Revision: 57133
Parent Commit: 9fb3d3e
Lines Changed: +778, -20
2 Added Paths:
/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc (+579, -0) (View)
/extern/libmv/libmv/simple_pipeline/keyframe_selection.h (+52, -0) (View)
/extern/libmv/libmv/simple_pipeline/keyframe_selection.h (+52, -0) (View)
8 Modified Paths:
/extern/libmv/CMakeLists.txt (+2, -0) (Diff)
/extern/libmv/files.txt (+2, -0) (Diff)
/extern/libmv/libmv-capi.cc (+98, -5) (Diff)
/extern/libmv/libmv-capi.h (+3, -1) (Diff)
/release/scripts/startup/bl_ui/space_clip.py (+2, -1) (Diff)
/source/blender/blenkernel/intern/tracking.c (+30, -11) (Diff)
/source/blender/makesdna/DNA_tracking_types.h (+3, -2) (Diff)
/source/blender/makesrna/intern/rna_tracking.c (+7, -0) (Diff)
/extern/libmv/files.txt (+2, -0) (Diff)
/extern/libmv/libmv-capi.cc (+98, -5) (Diff)
/extern/libmv/libmv-capi.h (+3, -1) (Diff)
/release/scripts/startup/bl_ui/space_clip.py (+2, -1) (Diff)
/source/blender/blenkernel/intern/tracking.c (+30, -11) (Diff)
/source/blender/makesdna/DNA_tracking_types.h (+3, -2) (Diff)
/source/blender/makesrna/intern/rna_tracking.c (+7, -0) (Diff)