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

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 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 close merge delete

Sort by ยป oldest newest most voted

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.

more

Official site

GitHub

Wiki

Documentation