# Class HomographyDirectLinearTransform

java.lang.Object
boofcv.alg.geo.h.HomographyDirectLinearTransform

public class HomographyDirectLinearTransform extends Object

Using linear algebra it computes a planar homography matrix using 2D points, 3D points, or conics. Typically used as an initial estimate for a non-linear optimization. See [1] for 2D and 3D points, and [2] for conics.

The algorithm works by solving the equation below:
hat(x2)*H*x1 = 0
where hat(x) is the skew symmetric cross product matrix. To solve this equation is is reformatted into A*Hs=0 using the Kronecker product and the null space solved for.

The conic algorithm specifies a constraint using a pair of conics. A minimum of 3 conics are required for a unique solution using this linear method [2]. If all possible pairs are used then the growth is O(N^2) instead linear set of pairs are added which has O(N) growth by adding adjacent conics as pairs. This behavior can be toggled.

[1] Chapter 4, "Multiple View Geometry in Computer Vision" 2nd Ed. but uses normalization from "An Invitation to 3-D Vision" 2004.
[2] Kannala, Juho, Mikko Salo, and Janne Heikkilä. "Algorithms for Computing a Planar Homography from Conics in Correspondence." BMVC. 2006.

• ## Field Summary

Fields
Modifier and Type
Field
Description
`protected DMatrixRMaj`
`A`

`protected NormalizationPoint2D`
`N1`

`protected NormalizationPoint2D`
`N2`

`protected SolveNullSpace<DMatrixRMaj>`
`solverNullspace`

• ## Constructor Summary

Constructors
Constructor
Description
`HomographyDirectLinearTransform(boolean normalizeInput)`
Configure homography calculation
• ## Method Summary

Modifier and Type
Method
Description
`protected int`
```addConicPairConstraints(AssociatedPairConic a, AssociatedPairConic b, DMatrixRMaj A, int rowA)```
Add constraint for a pair of conics
`protected int`
```addConics(List<AssociatedPairConic> points, DMatrixRMaj A, int rows)```
Adds the 9x9 matrix constraint for each pair of conics.
`protected int`
```addPoints2D(List<AssociatedPair> points, DMatrixRMaj A, int rows)```

`protected int`
```addPoints3D(List<AssociatedPair3D> points, DMatrixRMaj A, int rows)```

`protected boolean`
```computeH(DMatrixRMaj A, DMatrixRMaj H)```
Computes the SVD of A and extracts the homography matrix from its null space
`boolean`
```process(@Nullable List<AssociatedPair> points2D, @Nullable List<AssociatedPair3D> points3D, @Nullable List<AssociatedPairConic> conics, DMatrixRMaj foundH)```
More versatile process function.
`boolean`
```process(List<AssociatedPair> points, DMatrixRMaj foundH)```
Computes the homography matrix given a set of observed points in two images.
`static void`
```undoNormalizationH(DMatrixRMaj M, NormalizationPoint2D N1, NormalizationPoint2D N2)```
Undoes normalization for a homography matrix.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

• ## Constructor Details

• ### HomographyDirectLinearTransform

public HomographyDirectLinearTransform(boolean normalizeInput)
Configure homography calculation
Parameters:
`normalizeInput` - Should image coordinate be normalized? Needed when coordinates are in units of pixels.
• ## Method Details

• ### process

public boolean process(List<AssociatedPair> points, DMatrixRMaj foundH)

Computes the homography matrix given a set of observed points in two images. A set of `AssociatedPair` is passed in. The computed homography 'H' is found such that the attributes 'p1' and 'p2' in `AssociatedPair` refers to x1 and x2, respectively, in the equation below:
x2 = H*x1

Parameters:
`points` - A set of observed image points that are generated from a planar object. Minimum of 4 pairs required.
`foundH` - Output: Storage for the found solution. 3x3 matrix.
Returns:
True if successful. False if it failed.
• ### process

public boolean process(@Nullable @Nullable List<AssociatedPair> points2D, @Nullable @Nullable List<AssociatedPair3D> points3D, @Nullable @Nullable List<AssociatedPairConic> conics, DMatrixRMaj foundH)
More versatile process function. Lets any of the supporting data structures be passed in.
Parameters:
`points2D` - List of 2D point associations. Can be null.
`points3D` - List of 3D point or 2D line associations. Can be null.
`conics` - List of conics. Can be null
`foundH` - (Output) The estimated homography
Returns:
True if successful. False if it failed.
• ### computeH

protected boolean computeH
Computes the SVD of A and extracts the homography matrix from its null space
• ### undoNormalizationH

public static void undoNormalizationH
Undoes normalization for a homography matrix.

protected int addPoints2D(List<AssociatedPair> points, DMatrixRMaj A, int rows)