# Rigid 2D Matching

Matches key points with the RANSAC algorithm using a geometric model that allows a proper rigid transformation and scaling in two dimensions. Given a set of points and their associated feature vectors, this matcher tries to find a transformation that maps the points to one of the known models in the model database with sufficient accuracy so that the shape of the model is preserved.

In mathematics, a proper rigid transformation preserves distances between every pair of points and the handedness of shapes. In other words, it allows translation and rotation but no reflection or shape-changing transformations such as scaling or stretching. This tool can however allow scale changes even though it models rigid objects because the apparent size of a rigid object may change due to changing distance from the camera.

The matching algorithm makes it possible to impose fine-grained limits on allowed changes between a model and a query. It is possible to limit allowed rotation angles and scaling factors to a predefined range. The algorithm can also prune duplicate detections that overlap each other. Finally, a number of parameters are provided for making an optimal trade-off between speed an accuracy.

## Inputs

- rotationInvariant
- If
`true`

, the matcher will allow at most*maxRotationAngle*degrees of rotation between a model and an unknown object to be matched. Otherwise, no rotation will be allowed.

- maxRotationAngle
- The maximum allowed absolute rotation angle in degrees. If set to 180, all rotations will be accepted.

- scaleInvariant
- If
`true`

, the matcher will allow a relative scale change between*minScale*and*maxScale*. Otherwise, no scale changes will be allowed.

- minScale
- The minimum accepted scaling factor. If the size of an unknown object is less than
*minScale*times that of the matched model, no match will be reported.

- maxScale
- The maximum accepted scaling factor. If the size of an unknown object is greater than
*maxScale*times that of the matched model, no match will be reported.

- minimizeGeometricError
- Enables or disables geometric refinement of the matched transformation. The RANSAC algorithm produces a transformation that is based on a random subset of the input points. If
*minimizeGeometricError*is enabled, the model will be adjusted so that it matches the matched points with the smallest possible geometric error. This will generally result in more accurate match positioning, but it also makes the algorithm a bit slower.

- mergeNearbyMatches
- If
`true`

, the matcher will merge detections whose scale, angle and location are close enough to each other. This is usually the right thing to do because the same model can often be matched with slightly different parameters. Model merging puts such nearby matches into one match. With geometric error minimization enabled, the geometric model will be fitted to all of the points in the merged matches.

- scaleTolerance
- The maximum allowed relative scale change in merging nearby detections. Setting
*scaleTolerance*to a non-zero value makes it possible to merge detected models even if their sizes are slightly different. For example, if*scaleTolerance*is 0.1, the tool can merge two detections if the scaling factor of the smaller detection is greater than 90% of the scaling factor of the larger detection.

- angleTolerance
- The maximum allowed angle change in merging nearby detections, in degrees. Setting
*angleTolerance*to a non-zero value makes it possible to merge detected models even if their angles are slightly different. For example, if*scaleTolerance*is 5, the tool can merge two detections if the angle between them is less than 5 degrees.

- distanceTolerance
- The maximum allowed distance between origins of models to be merged, in world coordinates. Setting
*distanceTolerance*to a non-zero value makes it possible to merge detected models even if their locations are slightly different. For example, if*distanceTolerance*is set to 10, the tool can merge overlapping detections if the distance between their coordinate frames is less than 10 world units.

- selectionProbability
- The probability of choosing a model that fits the data well enough. Provided that a model can be fitted to the input points, the RANSAC algorithm can estimate the number or rounds required to find a good solution. Due to the probabilistic nature of the algorithm, one can never be sure that the solution is actually found. This parameter sets the confidence level for finding a solution. A higher probability means slower execution.

- maxIterations
- The maximum number of iterations the RANSAC algorithm will run if it doesn't find a match earlier. This value is used to put a hard upper bound to the time the algorithm will run even when a high
*selectionProbability*value is used.

- maxSamplings
- The maximum number of random samplings the algorithm will try while finding model candidates. On each iteration, the algorithm randomly picks a subset of points to match the models against. The algorithm will fail if no valid model candidates are found after
*maxSamplings*random subsets.

- maxPointMatchDistance
- The threshold for accepting a point as an match. When the matcher tries to fit different models to the input points, it measures the distance of each point to the corresponding point in the model. If the distance exceeds
*maxPointMatchDistance*, the point will be considered an outlier and rejected. The points whose distance to the corresponding model point is less than or equal to*maxPointMatchDistance*are regarded as inliers to which the model can be fitted.

- minMatchedPoints
- The minimum number of matched key point pairs that are required for an accepted match. A candidate model will be rejected if the number of matched points is less than this value. Increasing this value makes spurious detections less likely.

Inherits KeyPointMatchingTool.