diff options
Diffstat (limited to 'extern')
-rw-r--r-- | extern/libmv/ChangeLog | 62 | ||||
-rw-r--r-- | extern/libmv/libmv/simple_pipeline/bundle.cc | 37 |
2 files changed, 47 insertions, 52 deletions
diff --git a/extern/libmv/ChangeLog b/extern/libmv/ChangeLog index 225138b0166..476e01dbe28 100644 --- a/extern/libmv/ChangeLog +++ b/extern/libmv/ChangeLog @@ -1,6 +1,27 @@ -commit b63b8d6989f460fda7d963a2c8b21e8ffa6f8066 +commit f71f7c59d4d13574ea4dc3a196cc22eef1c192df Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Fri Jan 24 19:32:34 2014 +0600 +Date: Tue Jan 28 16:39:14 2014 +0600 + + Fixed for keyframe selection + + Using tracks with constant zero weight used to crash + keyframe selection since it was trying to use missing + parameter blocks for Jacobian evaluation, + + Also fixed possible issues with wrong camera block being + marked as variable. This could technically happen when + having zero weighted tracks. Made it so all camera blocks + are marked as variable for now. + +commit 557d531b061aa69d114e89cbb325c5175389afec +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Tue Jan 28 16:10:33 2014 +0600 + + Style cleanup: wrong indentation of wrapped line + +commit ca15262cf07a873268173965ee1fb84f9729b744 +Author: Sergey Sharybin <sergey.vfx@gmail.com> +Date: Tue Jan 28 15:21:36 2014 +0600 Rework detector API and implement Harris detector @@ -17,6 +38,8 @@ Date: Fri Jan 24 19:32:34 2014 +0600 Reviewers: keir + Reviewed By: keir + Differential Revision: https://developer.blender.org/D258 commit 6458915f64fceba108c5279b7320ca8c76e8a742 @@ -651,38 +674,3 @@ Date: Sat Apr 6 16:54:08 2013 +0600 Further, not actually sure this is nice idea to use KLT in such synthetic case. - -commit 1e54624875284e9532f4880c067e80e474444b2e -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Sat Apr 6 16:40:59 2013 +0600 - - Pyramid tracker unit test fix - - Issue was caused by trackers modifying guessed - point location even in case of failure. So made - id so both level 0 and level 3 of pyramid are - starting from the same initial guessed location. - - Modifying locations in case tracker returns false - is not actually a bug - someone could still want - to use that location. False in this case means - more like "returned location is not so much - accurate". - -commit b46c48e0e1862828df6dca711148c11b1f60777c -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Sat Apr 6 00:38:40 2013 +0600 - - Intersect unit test fix - - EuclideanIntersect is not aware of camera calibration - matrix yet and always assumes it to be an identity. - - So using non-identity matrix to construct sample case - leads to wrong projection results. - - For now made it so test case uses identity matrix for - calibration. - - Also fixed variable shadowing which lead to wrong - markers positions (were either zero or undefined). diff --git a/extern/libmv/libmv/simple_pipeline/bundle.cc b/extern/libmv/libmv/simple_pipeline/bundle.cc index e7887256892..9835248e7d5 100644 --- a/extern/libmv/libmv/simple_pipeline/bundle.cc +++ b/extern/libmv/libmv/simple_pipeline/bundle.cc @@ -262,10 +262,24 @@ void EuclideanBundlerPerformEvaluation(const Tracks &tracks, int num_cameras = all_cameras_R_t->size(); int num_points = 0; + vector<EuclideanPoint*> minimized_points; for (int i = 0; i <= max_track; i++) { - const EuclideanPoint *point = reconstruction->PointForTrack(i); + EuclideanPoint *point = reconstruction->PointForTrack(i); if (point) { - num_points++; + // We need to know whether the track is constant zero weight, + // and it so it wouldn't have parameter block in the problem. + // + // Getting all markers for track is not so bac currently since + // this code is only used by keyframe selection when there are + // not so much tracks and only 2 frames anyway. + vector<Marker> markera_of_track = tracks.MarkersForTrack(i); + for (int j = 0; j < markera_of_track.size(); j++) { + if (markera_of_track.at(j).weight != 0.0) { + minimized_points.push_back(point); + num_points++; + break; + } + } } } @@ -275,35 +289,28 @@ void EuclideanBundlerPerformEvaluation(const Tracks &tracks, evaluation->num_cameras = num_cameras; evaluation->num_points = num_points; - if (evaluation->evaluate_jacobian) { - // Evaluate jacobian matrix. + if (evaluation->evaluate_jacobian) { // Evaluate jacobian matrix. ceres::CRSMatrix evaluated_jacobian; ceres::Problem::EvaluateOptions eval_options; // Cameras goes first in the ordering. int max_image = tracks.MaxImage(); - bool is_first_camera = true; for (int i = 0; i <= max_image; i++) { const EuclideanCamera *camera = reconstruction->CameraForImage(i); if (camera) { double *current_camera_R_t = &(*all_cameras_R_t)[i](0); // All cameras are variable now. - if (is_first_camera) { - problem->SetParameterBlockVariable(current_camera_R_t); - is_first_camera = false; - } + problem->SetParameterBlockVariable(current_camera_R_t); eval_options.parameter_blocks.push_back(current_camera_R_t); } } // Points goes at the end of ordering, - for (int i = 0; i <= max_track; i++) { - EuclideanPoint *point = reconstruction->PointForTrack(i); - if (point) { - eval_options.parameter_blocks.push_back(&point->X(0)); - } + for (int i = 0; i < minimized_points.size(); i++) { + EuclideanPoint *point = minimized_points.at(i); + eval_options.parameter_blocks.push_back(&point->X(0)); } problem->Evaluate(eval_options, @@ -405,7 +412,7 @@ void EuclideanBundleCommonIntrinsics(const Tracks &tracks, if (bundle_constraints & BUNDLE_NO_TRANSLATION) { problem.SetParameterization(current_camera_R_t, - constant_translation_parameterization); + constant_translation_parameterization); } } |