}
// Find pair-wise motion
- vector<uchar> inlier_mask;
- matches_info.H = findHomography(src_points, dst_points, inlier_mask, CV_RANSAC);
+ matches_info.H = findHomography(src_points, dst_points, matches_info.inliers_mask, CV_RANSAC);
// Find number of inliers
matches_info.num_inliers = 0;
- for (size_t i = 0; i < inlier_mask.size(); ++i)
- if (inlier_mask[i])
+ for (size_t i = 0; i < matches_info.inliers_mask.size(); ++i)
+ if (matches_info.inliers_mask[i])
matches_info.num_inliers++;
// Check if we should try to refine motion
int inlier_idx = 0;
for (size_t i = 0; i < matches_info.matches.size(); ++i)
{
- if (!inlier_mask[i])
+ if (!matches_info.inliers_mask[i])
continue;
+
const DMatch& m = matches_info.matches[i];
Point2f p = features1.keypoints[m.queryIdx].pt;
}
// Rerun motion estimation on inliers only
- matches_info.H = findHomography(src_points, dst_points, inlier_mask, CV_RANSAC);
-
- // Find number of inliers
- matches_info.num_inliers = 0;
- for (size_t i = 0; i < inlier_mask.size(); ++i)
- if (inlier_mask[i])
- matches_info.num_inliers++;
+ matches_info.H = findHomography(src_points, dst_points, CV_RANSAC);
}
total_num_matches_ = 0;
for (size_t i = 0; i < edges_.size(); ++i)
- total_num_matches_ += static_cast<int>(pairwise_matches[edges_[i].first * num_images_ + edges_[i].second].matches.size());
+ total_num_matches_ += static_cast<int>(pairwise_matches[edges_[i].first * num_images_ + edges_[i].second].num_inliers);
CvLevMarq solver(num_images_ * 4, total_num_matches_ * 3,
cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 100, DBL_EPSILON));
for (size_t k = 0; k < matches_info.matches.size(); ++k)
{
+ if (!matches_info.inliers_mask[k])
+ continue;
+
const DMatch& m = matches_info.matches[k];
Point2d kp1 = features1.keypoints[m.queryIdx].pt;