public class PoseFromPairLinear6
extends java.lang.Object
Estimates the camera motion using linear algebra given a set of N associated point observations and the depth (z-coordinate) of each object, where N >= 6. Note this is similar to, but not exactly the PnP problem.
Output from this class is a rotation and translation that converts a point from the first to second
camera's reference frame:
X' = R*X+T
where R is a rotation matrix, T is a translation matrix, X is a coordinate in 1st reference frame, and X'
in the second.
This approach is a modified version of the approach discussed in [1]. It is derived by using
bilinear and trilinear constraints, as is discussed in Section 8.3. It has been modified to remove
redundant rows and so that the computed rotation matrix is row major. The solution is derived from
the equations below and by computing the null space from the resulting matrix:
cross(x2)*(R*x1) + cross(x2)*T/λi=0
where cross(x) is the cross product matrix of X, xi is the calibrated image pixel coordinate in the
ith image, R is rotation and T translation.
[1] "An Invitation to 3-D Vision, From Images to Geometric Models" 1st Ed. 2004. Springer.
| Constructor and Description |
|---|
PoseFromPairLinear6() |
| Modifier and Type | Method and Description |
|---|---|
protected org.ejml.data.DenseMatrix64F |
getA()
Matrix used internally.
|
georegression.struct.se.Se3_F64 |
getMotion()
Estimated motion
|
void |
process(java.util.List<AssociatedPair> observations,
java.util.List<georegression.struct.point.Point3D_F64> locations)
Computes the transformation between two camera frames using a linear equation.
|
public void process(java.util.List<AssociatedPair> observations, java.util.List<georegression.struct.point.Point3D_F64> locations)
observations - List of observations on the image plane in calibrated coordinates.locations - List of object locations. One for each observation pair.public georegression.struct.se.Se3_F64 getMotion()
protected org.ejml.data.DenseMatrix64F getA()