# 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  for 2D and 3D points, and  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 . 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.

 Chapter 4, "Multiple View Geometry in Computer Vision" 2nd Ed. but uses normalization from "An Invitation to 3-D Vision" 2004.
 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)