Package com.irurueta.geometry.refiners
Class LineCorrespondenceAffineTransformation2DRefiner
java.lang.Object
com.irurueta.geometry.refiners.Refiner<AffineTransformation2D>
com.irurueta.geometry.refiners.InliersDataRefiner<AffineTransformation2D>
com.irurueta.geometry.refiners.PairMatchesAndInliersDataRefiner<AffineTransformation2D,Line2D,Line2D>
com.irurueta.geometry.refiners.AffineTransformation2DRefiner<Line2D,Line2D>
com.irurueta.geometry.refiners.LineCorrespondenceAffineTransformation2DRefiner
public class LineCorrespondenceAffineTransformation2DRefiner
extends AffineTransformation2DRefiner<Line2D,Line2D>
A 2D affine transformation refiner using line correspondences.
This class takes into account an initial estimation, inlier line matches
and their residuals 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 Summary
FieldsModifier and TypeFieldDescriptionprivate final Line2DLine to be reused when computing residuals.Fields inherited from class com.irurueta.geometry.refiners.PairMatchesAndInliersDataRefiner
samples1, samples2Fields inherited from class com.irurueta.geometry.refiners.InliersDataRefiner
inliers, numInliers, residualsFields inherited from class com.irurueta.geometry.refiners.Refiner
covariance, DEFAULT_KEEP_COVARIANCE, initialEstimation, keepCovariance, listener, locked -
Constructor Summary
ConstructorsConstructorDescriptionConstructor.LineCorrespondenceAffineTransformation2DRefiner(AffineTransformation2D initialEstimation, boolean keepCovariance, com.irurueta.numerical.robust.InliersData inliersData, List<Line2D> samples1, List<Line2D> samples2, double refinementStandardDeviation) Constructor.LineCorrespondenceAffineTransformation2DRefiner(AffineTransformation2D initialEstimation, boolean keepCovariance, BitSet inliers, double[] residuals, int numInliers, List<Line2D> samples1, List<Line2D> samples2, double refinementStandardDeviation) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionbooleanrefine(AffineTransformation2D result) Refines provided initial estimation.private doubleresidual(AffineTransformation2D transformation, Line2D inputLine, Line2D outputLine) Computes the residual between the affine transformation and a pair of matched lines.private doubletotalResidual(AffineTransformation2D transformation) Computes total residual among all provided inlier samples.Methods inherited from class com.irurueta.geometry.refiners.AffineTransformation2DRefiner
getRefinementStandardDeviation, refine, setRefinementStandardDeviationMethods inherited from class com.irurueta.geometry.refiners.PairMatchesAndInliersDataRefiner
getSamples1, getSamples2, isReady, setSamples1, setSamples2Methods inherited from class com.irurueta.geometry.refiners.InliersDataRefiner
getInliers, getNumInliers, getResiduals, getTotalSamples, setInliers, setInliersData, setNumInliers, setResidualsMethods inherited from class com.irurueta.geometry.refiners.Refiner
getCovariance, getInitialEstimation, getListener, isCovarianceKept, isLocked, setCovarianceKept, setInitialEstimation, setListener
-
Field Details
-
residualTestLine
Line to be reused when computing residuals.
-
-
Constructor Details
-
LineCorrespondenceAffineTransformation2DRefiner
public LineCorrespondenceAffineTransformation2DRefiner()Constructor. -
LineCorrespondenceAffineTransformation2DRefiner
public LineCorrespondenceAffineTransformation2DRefiner(AffineTransformation2D initialEstimation, boolean keepCovariance, BitSet inliers, double[] residuals, int numInliers, List<Line2D> samples1, List<Line2D> 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.
-
LineCorrespondenceAffineTransformation2DRefiner
public LineCorrespondenceAffineTransformation2DRefiner(AffineTransformation2D initialEstimation, boolean keepCovariance, com.irurueta.numerical.robust.InliersData inliersData, List<Line2D> samples1, List<Line2D> 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
-
refine
public boolean refine(AffineTransformation2D result) throws NotReadyException, LockedException, RefinerException 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:
refinein classRefiner<AffineTransformation2D>- 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
Computes the residual between the affine transformation and a pair of matched lines.- Parameters:
transformation- a transformation.inputLine- input 2D line.outputLine- output 2D line.- Returns:
- residual.
-
totalResidual
Computes total residual among all provided inlier samples.- Parameters:
transformation- a transformation.- Returns:
- total residual.
-