Make Euclidean resection "always" succeed.
authorKeir Mierle <mierle@gmail.com>
Thu, 20 Sep 2012 18:55:44 +0000 (18:55 +0000)
committerKeir Mierle <mierle@gmail.com>
Thu, 20 Sep 2012 18:55:44 +0000 (18:55 +0000)
commite38c1a5ae721630c217ca7830fd7aabf6f4620e0
tree825f3e57ba2ba894f7cd01489a81b4618ab6e38a
parenta4f73c5694a44e6948665ee54d51d8df70be8e24
Make Euclidean resection "always" succeed.

The Euclidean resection code had a magical constant, 1e-3, used to
compare the results of solving an equation. This failure detection
was well-intended, trying to prevent poor solutions from getting
made without notifying the caller. Unfortunately in practice, this
threshold is too conservative. Furthermore, it is not clear the
threshold should exist at all; the purpose of the Euclidean
resection is to come up with the best solution it can; other
methods (e.g. reprojection error) should be used to compare
whether the method succeeded.

This commit changes the Euclidean EPnP code to always succeed,
causing the previous fallback to projective resection to never
run. In most cases, this will result in better reconstructions.

This should, in most cases, fix the dreaded "flipping" problem.
extern/libmv/libmv/multiview/euclidean_resection.cc
extern/libmv/libmv/multiview/euclidean_resection.h
extern/libmv/libmv/numeric/levenberg_marquardt.h
extern/libmv/libmv/simple_pipeline/pipeline.cc
extern/libmv/libmv/simple_pipeline/resect.cc