Class UPnPPointCorrespondencePinholeCameraEstimator.Solution

java.lang.Object
com.irurueta.geometry.estimators.UPnPPointCorrespondencePinholeCameraEstimator.Solution
Enclosing class:
UPnPPointCorrespondencePinholeCameraEstimator

private static class UPnPPointCorrespondencePinholeCameraEstimator.Solution extends Object
A possible solution.
  • Field Details

    • controlCameraPoints

      List<Point3D> controlCameraPoints
      Control points in camera coordinates.
    • worldToCameraTransformation

      MetricTransformation3D worldToCameraTransformation
      Transformation from world to camera coordinates. Point projection is expressed by x = P * Xw, where P is a pinhole camera and Xw is a point in world coordinates. Points in camera coordinates are expressed as: Xc = Tw-<c * Xw, where Tw-<c is the transformation from world to camera. The Euclidean transformation Tw-<c is expressed as: Tw-<c = [R t] [0' 1] Projection of a point in camera coordinates can also be expressed as x = Pc * Xc = K * [I 0] * Xc where Pc is a camera and has the form Pc = K *[I 0], so that x = Pc * Xc = K * [I 0] * Xc = K * [I 0] * Tw-<c * Xw x = K * [I 0] * [R t] * Xw = K * [I*R + 0, I*t + 0] * Xw = [0' 1] x = K * [R t] * Xw = K * [R - R*C] * Xw = x = P * Xw, where R is a rotation and C is the camera center in world coordinates. Assuming that control points are obtained up to scale, then instead of an Euclidean transformation we will assume that Tw-<c is a metric transformation, hence: Tw-<c = [s*R t2] [0' 1 ] To obtain the previous equation, then point in camera coordinates must be 1/s*Xc so that: x = Pc * 1/s * Xc = K * [I 0] * 1/s * Xc x = K * [I 0] * 1/s * Tw-<c * Xw x = K * [I 0] * 1/s *[s*R t2] * Xw = K * 1/s * [I*s*R + 0, I*t2 + 0] [0' 1 ] x = K * 1 / s * [s*R t2] * Xw = K * [R 1/s*t2] * Xw where t = 1/s*t2 = -R*C and so again x = K * [R t] * Xw and camera center is C = -1/s*R'*t2
    • camera

      Pinhole camera using provided intrinsic parameters and estimated transformation for this solution.
    • reprojectionError

      double reprojectionError
      Re-projection error.
  • Constructor Details

    • Solution

      private Solution()