Package boofcv.alg.geo.pose
Class Relinearlize
java.lang.Object
boofcv.alg.geo.pose.Relinearlize
Used in case 4 of EPnP. See [1] for details. This technique appears to not be all that accurate in practice, but better than nothing. Or maybe there is a bug in the implementation below since even with perfect data it appears to generate large errors. One possible source of implementation error is that the entire null space is not being used. More of the null space (particularly in the planar case) could be used if more relinearization was run multiple times.
[1] Aviad Kipnis and Adi Shamir, "Cryptanalysis of HPE Public Key Cryptosystem" 1999
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
process
(DMatrixRMaj L_full, DMatrixRMaj y, double[] betas) Estimates betas using relinearization.void
setNumberControl
(int numControl) Specified the number of control points.protected DMatrixRMaj
Apply additional constraints to reduce the number of possible solutions x(k) = x_{ij} = bi*bj = x0(k) + a1*V0(k) + a2*V1(k) + a3*V2(k) constraint: x_{ii}*x_{jk} = x_{ik}*x_{ji}double
valueNull
(int which, int index)
-
Constructor Details
-
Relinearlize
public Relinearlize()
-
-
Method Details
-
setNumberControl
public void setNumberControl(int numControl) Specified the number of control points.- Parameters:
numControl
- 3 = planar, 4 = general
-
process
Estimates betas using relinearization.- Parameters:
L_full
- Linear constraint matrixy
- distances between world control pointsbetas
- Estimated betas. Output.
-
solveConstraintMatrix
Apply additional constraints to reduce the number of possible solutions x(k) = x_{ij} = bi*bj = x0(k) + a1*V0(k) + a2*V1(k) + a3*V2(k) constraint: x_{ii}*x_{jk} = x_{ik}*x_{ji} -
valueNull
public double valueNull(int which, int index)
-