A MATLAB implementation of the Five-Point Algorithm by David Nistér
Given five points matches between two images, and the intrinsic parameters of each camera. Estimate the essential matrix E, the rotation matrix R and translation vector t, between both images. This algorithm is based on the method described by David Nistér in "An Efficient Solution to the Five-Point Relative Pose Problem"
E_all = FIVE_POINT_ALGORITHM(pts1, pts2, K1, K2) returns in E all the valid essential matrix solutions for the five point correspondence. If you don't need R and t, use this version as it avoids computing unnecessary results.
[E_all, R_all, t_all, Eo_all] = FIVE_POINT_ALGORITHM(pts1, pts2, K1, K2) also returns in R_all and t_all all the rotation matrices and translation vectors of camera 2 for the different essential matrices, such that a 3D point in camera 1 reference frame can be transformed into the camera 2 reference frame through p_2 = R{n}*p_1 + t{n}. Eo_all is the essential matrix before the imposing the structure U*diag([1 1 0])*V'. It should help get a better feeling on the accuracy of the solution. All these return values a nx1 cell arrays.
pts1, pts2 - assumed to have dimension 2x5 and of equal size.
K1, K2 - 3x3 intrinsic parameters of cameras 1 and 2 respectively
- R and t computation is done assuming perfect point correspondence.
- Extract
RandtfromE - Provide example cases.
- Extract
Randtwithout perfect point correspondence - Augment example cases.
- Implement the variant with 5 points over 3 images
- Handle more than 5 points
- Author: Sérgio Agostinho - sergio(dot)r(dot)agostinho(at)gmail(dot)com
- Date: Feb 2015
- Last modified: Mar 2015
- Version: 0.9
Feel free to provide feedback or contribute.