Ask Your Question

Why does recoverPose return a non-zero position when identical point vectors are supplied?

asked 2015-10-27 11:10:06 -0500

mew gravatar image

updated 2015-10-27 11:20:30 -0500

theodore gravatar image

By accident I tried estimating the relative position of an image to itself (don't ask). I would expect a result of 0 translation and 0 rotation.

Surprisingly, I get a non-zero translation result. In fact I get a rather significant result: 0.0825 -0.0825.

In essence my code is as follows:

cv::Point2d pp(u0, v0);
cv::Mat R, t, mask;
cv::Mat E = cv::findEssentialMat(points1, points2, focal, pp, cv::RANSAC, 0.999, 1.0, mask);
cv::recoverPose(E, points1, points2, R, t);

In the above code, t != 0. My question is: is a non-zero result for recoverPose valid when points1 and points2 are identical? If so, why?

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2017-03-26 23:22:39 -0500

ririgo gravatar image

Not sure but in epipolar constraint x2^T * E * x1 = 0 where x2 is a 2d point in second image, and x1 is in first image.

when x1 = x2, we expect that the R is identity right? Than we can rewrite above as x1^T * [t]x * x1 = 0 whew [t]x is a skew-symmetric form of t.

In linear algebra, product the same vector with a skew-symmetric matrix always give 0 so there is no solution for t I guess.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2015-10-27 11:10:06 -0500

Seen: 345 times

Last updated: Mar 26 '17