From 74c398e6b71f8124f3ec5891674250d59ed20971 Mon Sep 17 00:00:00 2001 From: Alexey Spizhevoy Date: Wed, 2 Mar 2011 08:04:08 +0000 Subject: [PATCH] refactored gpu::solvePnpRansac a bit --- modules/gpu/src/calib3d.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/gpu/src/calib3d.cpp b/modules/gpu/src/calib3d.cpp index 68987131c..5fdc3734a 100644 --- a/modules/gpu/src/calib3d.cpp +++ b/modules/gpu/src/calib3d.cpp @@ -276,23 +276,24 @@ void cv::gpu::solvePnpRansac(const Mat& object, const Mat& image, const Mat& cam int num_inliers = static_cast(best_score); // Extract the best hypothesis data + Mat rot_mat = rot_matrices.colRange(best_idx.x * 9, (best_idx.x + 1) * 9).reshape(0, 3); Rodrigues(rot_mat, rvec); rvec = rvec.reshape(0, 1); + tvec = transl_vectors.colRange(best_idx.x * 3, (best_idx.x + 1) * 3).clone(); tvec = tvec.reshape(0, 1); // Build vector of inlier indices if (params.inliers != NULL) { - params.inliers->resize(num_inliers); + params.inliers->clear(); + params.inliers->reserve(num_inliers); - Point3f p; - Point3f p_transf; + Point3f p, p_transf; Point2f p_proj; const float* rot = rot_mat.ptr(); const float* transl = tvec.ptr(); - int inlier_id = 0; for (int i = 0; i < num_points; ++i) { @@ -305,7 +306,7 @@ void cv::gpu::solvePnpRansac(const Mat& object, const Mat& image, const Mat& cam p_proj.x = p_transf.x / p_transf.z; p_proj.y = p_transf.y / p_transf.z; if (norm(p_proj - image_normalized.at(0, i)) < params.max_dist) - (*params.inliers)[inlier_id++] = i; + params.inliers->push_back(i); } } }