diff --git a/modules/videostab/src/global_motion.cpp b/modules/videostab/src/global_motion.cpp index e0302ced2c..f40ef4c7ef 100644 --- a/modules/videostab/src/global_motion.cpp +++ b/modules/videostab/src/global_motion.cpp @@ -402,8 +402,8 @@ Mat estimateGlobalMotionRansac( std::vector subset1(params.size); // best hypothesis - std::vector subset0best(params.size); - std::vector subset1best(params.size); + std::vector bestIndices(params.size); + Mat_ bestM; int ninliersMax = -1; @@ -447,14 +447,20 @@ Mat estimateGlobalMotionRansac( { bestM = M; ninliersMax = numinliers; - subset0best.swap(subset0); - subset1best.swap(subset1); + bestIndices.swap(indices); } } if (ninliersMax < params.size) + { // compute RMSE - bestM = estimateGlobalMotionLeastSquares(subset0best, subset1best, model, rmse); + for (int i = 0; i < params.size; ++i) + { + subset0[i] = points0_[bestIndices[i]]; + subset1[i] = points1_[bestIndices[i]]; + } + bestM = estimateGlobalMotionLeastSquares(subset0, subset1, model, rmse); + } else { subset0.resize(ninliersMax);