Class EuclideanTransformation2DRefiner


public class EuclideanTransformation2DRefiner extends PairMatchesAndInliersDataRefiner<EuclideanTransformation2D,Point2D,Point2D>
Refines a 2D Euclidean transformation by taking into account an initial estimation, inlier point matches and their residuals. This class can be used to find a solution that minimizes error of inliers in LMSE terms. Typically, a refiner is used by a robust estimator, however it can also be useful in some other situations.
  • Field Details

    • residualTestPoint

      private final Point2D residualTestPoint
      Point to be reused when computing residuals.
    • refinementStandardDeviation

      private double refinementStandardDeviation
      Standard deviation used for Levenberg-Marquardt fitting during refinement. Returned value gives an indication of how much variance each residual has. Typically, this value is related to the threshold used on each robust estimation, since residuals of found inliers are within the range of such threshold.
  • Constructor Details

    • EuclideanTransformation2DRefiner

      public EuclideanTransformation2DRefiner()
      Constructor.
    • EuclideanTransformation2DRefiner

      public EuclideanTransformation2DRefiner(EuclideanTransformation2D initialEstimation, boolean keepCovariance, BitSet inliers, double[] residuals, int numInliers, List<Point2D> samples1, List<Point2D> samples2, double refinementStandardDeviation)
      Constructor.
      Parameters:
      initialEstimation - initial estimation to be set.
      keepCovariance - true if covariance of estimation must be kept after refinement, false otherwise.
      inliers - set indicating which of the provided matches are inliers.
      residuals - residuals for matched samples.
      numInliers - number of inliers on initial estimation.
      samples1 - 1st set of paired samples.
      samples2 - 2nd set of paired samples.
      refinementStandardDeviation - standard deviation used for Levenberg-Marquardt fitting.
    • EuclideanTransformation2DRefiner

      public EuclideanTransformation2DRefiner(EuclideanTransformation2D initialEstimation, boolean keepCovariance, com.irurueta.numerical.robust.InliersData inliersData, List<Point2D> samples1, List<Point2D> samples2, double refinementStandardDeviation)
      Constructor.
      Parameters:
      initialEstimation - initial estimation to be set.
      keepCovariance - true if covariance of estimation must be kept after refinement, false otherwise.
      inliersData - inlier data, typically obtained from a robust estimator.
      samples1 - 1st set of paired samples.
      samples2 - 2nd set of paired samples.
      refinementStandardDeviation - standard deviation used for Levenberg-Marquardt fitting.
  • Method Details

    • getRefinementStandardDeviation

      public double getRefinementStandardDeviation()
      Gets standard deviation used for Levenberg-Marquardt fitting during refinement. Returned value gives an indication of how much variance each residual has. Typically, this value is related to the threshold used on each robust estimation, since residuals of found inliers are within the range of such threshold.
      Returns:
      standard deviation used for refinement.
    • setRefinementStandardDeviation

      public void setRefinementStandardDeviation(double refinementStandardDeviation) throws LockedException
      Sets standard deviation used for Levenberg-Marquardt fitting during refinement. Returned value gives an indication of how much variance each residual has. Typically, this value is related to the threshold used on each robust estimation, since residuals of found inliers are within the range of such threshold.
      Parameters:
      refinementStandardDeviation - standard deviation used for refinement.
      Throws:
      LockedException - if estimator is locked.
    • refine

      Refines provided initial estimation.
      Specified by:
      refine in class Refiner<EuclideanTransformation2D>
      Returns:
      refines estimation.
      Throws:
      NotReadyException - if not enough input data has been provided.
      LockedException - if estimator is locked because refinement is already in progress.
      RefinerException - if refinement fails for some reason (e.g. unable to converge to a result).
    • refine

      Refines provided initial estimation. This method always sets a value into provided result instance regardless of the fact that error has actually improved in LMSE terms or not.
      Specified by:
      refine in class Refiner<EuclideanTransformation2D>
      Parameters:
      result - instance where refined estimation will be stored.
      Returns:
      true if result improves (error decreases) in LMSE terms respect to initial estimation, false if no improvement has been achieved.
      Throws:
      NotReadyException - if not enough input data has been provided.
      LockedException - if estimator is locked because refinement is already in progress.
      RefinerException - if refinement fails for some reason (e.g. unable to converge to a result).
    • residual

      private double residual(EuclideanTransformation2D transformation, Point2D inputPoint, Point2D outputPoint)
      Computes the residual between the Euclidean transformation and a pair or matched points.
      Parameters:
      transformation - a transformation.
      inputPoint - input 2D point.
      outputPoint - output 2D point.
      Returns:
      residual.
    • totalResidual

      private double totalResidual(EuclideanTransformation2D transformation)
      Computes total residual among all provided inlier samples.
      Parameters:
      transformation - a transformation.
      Returns:
      total residual.