public class P3PFinsterwalder extends java.lang.Object implements P3PLineDistance
Solves for the 3 unknown distances between camera center and 3 observed points by finding a root of a cubic polynomial and the roots of two quadratic polynomials. Proposed by Finsterwalder in 1903, this implementation is based off the discussion in [1]. There are up to four solutions.
See P3PLineDistance for a more detailed problem description.
[1] Haralick, Robert M. and Lee, Chung-Nan and Ottenberg, Karsten and Nolle, Michael, "Review and analysis of solutions of the three point perspective pose estimation problem" Int. J. Comput. Vision, 1994 vol 13, no. 13, pages 331-356
| Constructor and Description |
|---|
P3PFinsterwalder(org.ddogleg.solver.PolynomialRoots rootFinder)
Configure
|
| Modifier and Type | Method and Description |
|---|---|
org.ddogleg.struct.FastQueue<PointDistance3> |
getSolutions()
Returns a set of solutions.
|
boolean |
process(georegression.struct.point.Point2D_F64 obs1,
georegression.struct.point.Point2D_F64 obs2,
georegression.struct.point.Point2D_F64 obs3,
double length23,
double length13,
double length12)
Solve for the distance between the camera's origin and each of the 3 points in 3D space.
|
public P3PFinsterwalder(org.ddogleg.solver.PolynomialRoots rootFinder)
rootFinder - Root finder for a 3rd order polynomial with real rootspublic boolean process(georegression.struct.point.Point2D_F64 obs1,
georegression.struct.point.Point2D_F64 obs2,
georegression.struct.point.Point2D_F64 obs3,
double length23,
double length13,
double length12)
P3PLineDistanceprocess in interface P3PLineDistanceobs1 - Observation of P1 in normalized image coordinatesobs2 - Observation of P2 in normalized image coordinatesobs3 - Observation of P3 in normalized image coordinateslength23 - Distance between points P2 and P3length13 - Distance between points P1 and P3length12 - Distance between points P1 and P2public org.ddogleg.struct.FastQueue<PointDistance3> getSolutions()
P3PLineDistancegetSolutions in interface P3PLineDistance