Class Relinearlize


public class Relinearlize extends 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 Details

    • Relinearlize

      public Relinearlize()
  • Method Details

    • setNumberControl

      public void setNumberControl(int numControl)
      Specified the number of control points.
      numControl - 3 = planar, 4 = general
    • process

      public void process(DMatrixRMaj L_full, DMatrixRMaj y, double[] betas)
      Estimates betas using relinearization.
      L_full - Linear constraint matrix
      y - distances between world control points
      betas - Estimated betas. Output.
    • solveConstraintMatrix

      protected DMatrixRMaj 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)