From afe7c5fd7a9073a58e0b24069084100aecbf4735 Mon Sep 17 00:00:00 2001 From: Debargha Mukherjee Date: Thu, 22 Jun 2017 13:47:23 -0700 Subject: [PATCH] Do not find transformation for very few points Adds check to make sure that find transformation functions are never called for 0 points. Change-Id: I2d7cf40aace535b1d708d6189aea9c1e0f7c281b --- av1/encoder/ransac.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/av1/encoder/ransac.c b/av1/encoder/ransac.c index ce6ae785f..c6e3675be 100644 --- a/av1/encoder/ransac.c +++ b/av1/encoder/ransac.c @@ -139,7 +139,8 @@ static void normalize_homography(double *pts, int n, double *T) { double msqe = 0; double scale; int i; - if (n <= 0) return; + + assert(n > 0); for (i = 0; i < n; ++i, p += 2) { mean[0] += p[0]; mean[1] += p[1]; @@ -822,13 +823,15 @@ static int ransac(const int *matched_points, int npoints, // Recompute the motions using only the inliers. for (i = 0; i < num_desired_motions; ++i) { - copy_points_at_indices(points1, corners1, motions[i].inlier_indices, - motions[i].num_inliers); - copy_points_at_indices(points2, corners2, motions[i].inlier_indices, - motions[i].num_inliers); - - find_transformation(motions[i].num_inliers, points1, points2, - params_by_motion + (MAX_PARAMDIM - 1) * i); + if (motions[i].num_inliers >= minpts) { + copy_points_at_indices(points1, corners1, motions[i].inlier_indices, + motions[i].num_inliers); + copy_points_at_indices(points2, corners2, motions[i].inlier_indices, + motions[i].num_inliers); + + find_transformation(motions[i].num_inliers, points1, points2, + params_by_motion + (MAX_PARAMDIM - 1) * i); + } num_inliers_by_motion[i] = motions[i].num_inliers; } -- GitLab