public class Relinearlize
extends java.lang.Object
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 and Description |
|---|
Relinearlize() |
| Modifier and Type | Method and Description |
|---|---|
void |
process(org.ejml.data.DenseMatrix64F L_full,
org.ejml.data.DenseMatrix64F y,
double[] betas)
Estimates betas using relinearization.
|
void |
setNumberControl(int numControl)
Specified the number of control points.
|
protected org.ejml.data.DenseMatrix64F |
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}
|
double |
valueNull(int which,
int index) |
public void setNumberControl(int numControl)
numControl - 3 = planar, 4 = generalpublic void process(org.ejml.data.DenseMatrix64F L_full,
org.ejml.data.DenseMatrix64F y,
double[] betas)
L_full - Linear constraint matrixy - distances between world control pointsbetas - Estimated betas. Output.protected org.ejml.data.DenseMatrix64F solveConstraintMatrix()
public double valueNull(int which,
int index)