diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-03-01 15:52:38 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-03-01 15:52:38 +0400 |
commit | 9da36d3ab1cbc34968350fe0440528016d8fa423 (patch) | |
tree | a28a701e5e4664b72cc4e3b43e6b89453949630e /extern | |
parent | 032923a9f5162e0d6ff158b095b252ad361698d3 (diff) |
Updates to libmv's bundle.sh to make sure libmv upstream
is copying properly to our sources.
Diffstat (limited to 'extern')
-rw-r--r-- | extern/libmv/ChangeLog | 300 | ||||
-rw-r--r-- | extern/libmv/SConscript | 1 | ||||
-rwxr-xr-x | extern/libmv/bundle.sh | 1 | ||||
-rw-r--r-- | extern/libmv/patches/series | 1 | ||||
-rw-r--r-- | extern/libmv/patches/v3d_verbosity.patch | 12 |
5 files changed, 155 insertions, 160 deletions
diff --git a/extern/libmv/ChangeLog b/extern/libmv/ChangeLog index 222fc4eaa1f..a4f25f83a1c 100644 --- a/extern/libmv/ChangeLog +++ b/extern/libmv/ChangeLog @@ -1,3 +1,158 @@ +commit 473996468a4e67e7c860169181a4ff31ce9b8c80 +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Fri Mar 1 17:44:54 2013 +0600 + + Fixed incorrect order of arguments passing + to EXPECT_EQ in keyframe selection tests. + +commit d38ebb74693fdf5b8f0fecf62a3d8c9c53b0b84a +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Fri Mar 1 17:40:38 2013 +0600 + + Modal (aka tripod) solver rework + + Several major things are done in this commit: + + - First of all, logic of modal solver was changed. + We do not rely on only minimizer to take care of + guessing rotation for frame, but we're using + analytical rotation computation for point clouds + to obtain initial rotation. + + Then this rotation is being refined using Ceres + minimizer and now instead of minimizing average + distance between points of point of two clouds, + minimization of reprojection error of point + cloud onto frame happens. + + This gives quite a bit of precision improvement. + + - Second bigger improvement here is using bundle + adjustment for a result of first step when we're + only estimating rotation between neighbor images + and reprojecting markers. + + This averages error across the image sequence + avoiding error accumulation. Also, this will + tweak bundles themselves a bit for better match. + + - And last bigger improvement here is support of + camera intrinsics refirenment. + + This allowed to significantly improve solution + for real-life footage and results after such + refining are much more usable than it were before. + + Thanks to Keir for the help and code review! + +commit 5d6c2e7a27bdd1a1b23bf289d70a9b8f62514c9a +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Fri Mar 1 17:37:35 2013 +0600 + + Increase verbosity level for reprojected markers info + + This information is useful, but in cases when you, say, + working on a bundler it's annoying to scroll all the + information up. + +commit ac252bb1250b3028b9c94736b644e7ab4e7b14b8 +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Fri Mar 1 17:36:19 2013 +0600 + + Move radial distortion code to own templated function + + This shall not lead to any functional changes, just + avoids radial distortion code duplicated in camera + intrinsics and bundling code. + + For fancier bundle adjustment support of different + distortion models this is not actually enough and + would need to make some bigger changes, but this + changes makes code a bit easier to maintain already. + +commit c253b794612dd529e1d3a9bd7a7c41c32c9a9abb +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Fri Mar 1 17:33:27 2013 +0600 + + Use threaded cost function, jacobian and linear solver + computation, so bundling is as fast as it could be with + current parameter block structure. + +commit 931fe37a10212b91b525d4f6eb753990a338b471 +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Fri Mar 1 17:29:21 2013 +0600 + + Fixed comment for euclidean bundling, + which is now supports raidal bundling independently + from other intrinsics. + +commit 217d8e6edc3de1a853fb84275d2d2dd898e7529c +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Tue Feb 26 18:19:01 2013 +0600 + + Allow K1,K2 refirement combination + + It is now possible to refine only radial distortion + with new Ceres based bundler and this new combination + is already used in Blender. + +commit d8850addc944d400f7a9c358396c437d9e4acc70 +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Tue Feb 26 18:17:09 2013 +0600 + + Switch euclidean intersection code to use Ceres + + Would not expect any significant changes in solver + behavior, but it could be more accurate in some cases. + + Switching projective intersection to ceres is marked + as a TODO for now. + +commit 6990b7946ec96b3cb2dcfc8a1beaaba9538b0802 +Author: Keir Mierle <mierle@gmail.com> +Date: Mon Feb 25 20:00:48 2013 +0000 + + Switch motion tracker bundle adjustment to Ceres. + + Patch originally written by me, then finished by Sergey. Big + thanks to Sergey for troopering through and fixing the many issues + with my original (not compilable) patch. + + The Ceres implementation uses 2 parameter blocks for each camera + (1 for rotation and 1 for translation), 1 parameter block for + common intrinsics (focal length etc) and 1 parameter block for + each track (e.g. bundle or 3D point). + + We turn on some fancy optimizer options to get better performance, + in particular: + + options.preconditioner_type = ceres::SCHUR_JACOBI; + options.linear_solver_type = ceres::ITERATIVE_SCHUR; + options.use_inner_iterations = true; + options.use_nonmonotonic_steps = true; + options.max_num_iterations = 100; + + Special thanks to Sameer Agarwal of Ceres fame for splitting out + the SCHUR_JACOBI preconditioner so that it didn't depend on + CHOLMOD. Previously we could not use that preconditioner in + Blender because CHOLMOD is too large of a dependency for Blender. + + BundleIntrinsicsLogMessage: + - Moved bunch of if(foo) LG << "bar" into this function, to make + EuclideanBundleCommonIntrinsics a little bit easier to follow. + + EuclideanBundle: + - Fix RMSE logging. + +commit 1696342954614b54133780d74d6ee0fbcbe224f0 +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Tue Feb 26 18:10:33 2013 +0600 + + Upgrade ceres to latest upstream version + + This is needed because of some features of new Ceres + for further development. + commit 575336f794841ada90aacd783285014081b8318c Author: Sergey Sharybin <sergey.vfx@gmail.com> Date: Mon Jan 7 15:58:40 2013 +0600 @@ -643,148 +798,3 @@ Date: Thu Apr 12 13:56:02 2012 +0600 It projects markers onto sphere and uses rigid registration of rotation to find rotation angles which makes bundles from previous and current frame be as closest as it's possible. - -commit fa3842e472e3b9c789e47bf6d8f592aa40a84f16 -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Thu Apr 12 12:32:48 2012 +0600 - - implementation of some basic algorithms for point cloud orientation: - - - Implementation of rigid registration algorithm which searches transformation - form one point cloud to another assuming that points in this clouds are - already paired (points with the same index in different clouds belongs to - the same pair) which minimizes average distance between points in pairs. - - Algorithm uses Levenberg-Marquardt solver to find such transformation. - - Supports registration of rotation-scale-transform (which is probably most - common usage) and rotation only (which might be useful for basic modal - tripod solver). - - - Implementation of Iterative-Point-Clouds algorithm which searches - transformation from one arbitrary point cloud to another making - points as closest to each other as possible. - - This algorithm doesn't require points be initially paired, but for - good result clouds should have rough initial orientation. If they're - arbitrary oriented from the very beginning, algorithm might fail - producing good resold. - - Iteration is based on building pairs of closest to each other points - and registering rigid transformation between them which incrementally - constructs final result. - - TODO: building pairs might be speedup a lot using data structures like - AABB trees, K-D trees or so. - -commit 9618d9a1d48bb3c28da605d9027f57a74f462785 -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Wed Apr 11 14:17:14 2012 +0600 - - Added configuration file for glog to compile smooth on Hurd platform. - - Patch by Pino Toscano <pino@debian.org>, thanks! - -commit 63b2bd20237c8599fa73ce42556e4fb99b9f7cca -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Thu Mar 22 17:03:34 2012 +0600 - - Trackers refactoring: - - Deduplicate pattern sampling used in esm and lmicklt trackers - and move SamplePattern to image/sample.h - - Move computation of Pearson product-moment correlation into - own function in new file image/correlation.h so all trackers - can use it to check final correlation. - - Remove SAD tracker. It's almost the same as brute tracker, - with only two differences: - 1. It does brute search of affine transformation which in some cases - helps to track rotating features - 2. It didn't use common tracker api which probably gave some speed - advantage, but lead to a real headache to use it together with - other trackers leading to duplicated code in 3d-party software. - -commit 9fe49c32e990f28c83f2bbb1d18057aed8879af7 -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Mon Mar 12 09:36:15 2012 +0600 - - Code cleanup: convert line endings to Unix style (native on my platform) so it - wouldn't confuse other versioning systems used for project where libmv is bundled to, - - Also change mode to +x for glog's windows-related script. - -commit fe74ae2b53769389b0ed9d7e604c8e60be81077d -Author: Sergey I. Sharybin <g.ulairi@gmail.com> -Date: Sun Mar 11 20:34:15 2012 +0600 - - Replace "third_party/glog/src/glog/logging.h" with <glog/logging.h> - - It was needed because of how build systems is setup in Blender but think - this will be helpful change for other applications too because it makes - it's easier to move libraries around and even use libraries installed - on the operation system. - -commit 37fc726701479f2d321d6af878fa93f3176278d5 -Author: Sergey I. Sharybin <g.ulairi@gmail.com> -Date: Sun Mar 11 19:27:41 2012 +0600 - - Upgrade gflags and glog libraries - stage 2 (final) - - Changes to upstream code which are needed to make libmv compile smooth on all platforms - - * Replace <gflags/gflags.h> with "third_party/gflags/gflags/gflags.h" which is easier - to setup things in libmv and also helps with setting up building libmv into - external applications. - * Replace "glog/logging.h" and "glog/logging.h" with <glog/logging.h> and <glog/logging.h> - which is needed on Windows platform because otherwise files like logging.cc will be using - relative path which points to headers used by linux instead of headers need to be used - on Windows. - * Replace _asm int 3 with __debugbreak(). Such assembler code is obsolete and doesn't work - with 64bit versions of MSVC compilers. - * Do not use stacktrace for MinGW and FreeBSD because it leads into issues accessing - some specific data on this platforms. - * Define HAVE_LIB_GFLAGS for Windows builds. - * Do not define __declspec(dllimport) for MinGW platforms. - * Setup proper includes and datatypes for int32, uint32, int64 and uint64 for MinGW - * Do not define va_copy for MinGW platforms (it's already defined there). - * Patch localtime_r to be working fine with MinGW, disable strerror_r for MinGW because - of lack of needed functions. - -commit 8ed07abfa49d1e0511752021c972e0715e5a1383 -Author: Sergey I. Sharybin <g.ulairi@gmail.com> -Date: Sun Mar 11 19:06:33 2012 +0600 - - Upgrade gflags and glog libraries - stage 1 - - This commit copies sources from latest original release of gflags and glog - over currently bundled versions of this libraries without any modifications. - - This revision can't b compiled, all needed changes to make new libraries working - fine will be done with next commit to make it clear which changes were necessary - for easier bundling further newer version and extract patches and put them to - gflags/glog upstream repo. - - Such upgrade of libraries is needed to make it able to compile libmv - with clang compilers. Currently used versions: - - - gflags is version 2.0 - - glog is version 0.3.2 - -commit 75b9af405964ff2c7d3f0a44500e27e63b37c91b -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Fri Feb 17 23:29:11 2012 +0600 - - _USE_MATH_DEFINES is needed to define constants like M_E when building with msvc - Occasionally was removed, but now added comment about this so hopefully it - wouldn't removed again. - -commit f85b1232a9b929f69443b5eed6e7a39908cd6551 -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Fri Feb 17 21:34:40 2012 +0600 - - Picky edit: corrected mode for ssba readme file. - -commit f8c2b223f01551fd81a85f6d5221646165147035 -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Fri Feb 17 21:32:05 2012 +0600 - - Picky edits: corrected EOL diff --git a/extern/libmv/SConscript b/extern/libmv/SConscript index a503730926d..d0015db42d7 100644 --- a/extern/libmv/SConscript +++ b/extern/libmv/SConscript @@ -11,7 +11,6 @@ Import('env') defs = [] -defs.append('V3DLIB_ENABLE_SUITESPARSE') defs.append('GOOGLE_GLOG_DLL_DECL=') src = env.Glob("*.cpp") diff --git a/extern/libmv/bundle.sh b/extern/libmv/bundle.sh index 21d0308268a..a9edfde55bf 100755 --- a/extern/libmv/bundle.sh +++ b/extern/libmv/bundle.sh @@ -124,7 +124,6 @@ cat > CMakeLists.txt << EOF set(INC . - ../colamd/Include third_party/ceres/include ) diff --git a/extern/libmv/patches/series b/extern/libmv/patches/series index 1db7983fdd0..e69de29bb2d 100644 --- a/extern/libmv/patches/series +++ b/extern/libmv/patches/series @@ -1 +0,0 @@ -v3d_verbosity.patch diff --git a/extern/libmv/patches/v3d_verbosity.patch b/extern/libmv/patches/v3d_verbosity.patch deleted file mode 100644 index f5c6afbd0b5..00000000000 --- a/extern/libmv/patches/v3d_verbosity.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/libmv/simple_pipeline/bundle.cc b/src/libmv/simple_pipeline/bundle.cc -index fa0b6cc..d382cd5 100644 ---- a/src/libmv/simple_pipeline/bundle.cc -+++ b/src/libmv/simple_pipeline/bundle.cc -@@ -194,7 +194,6 @@ void EuclideanBundleCommonIntrinsics(const Tracks &tracks, - double v3d_inlier_threshold = 500000.0; - - // Finally, run the bundle adjustment. -- V3D::optimizerVerbosenessLevel = 1; - V3D::CommonInternalsMetricBundleOptimizer opt(v3d_bundle_intrinsics, - v3d_inlier_threshold, - v3d_K, |