http://www.emgu.com

Finds corners with big eigenvalues in the image.

**Namespace:** Emgu.CV**Assembly:** Emgu.CV (in Emgu.CV.dll) Version: 2.4.2.1777 (2.4.2.1777)

# Syntax

C# |
---|

public PointF[][] GoodFeaturesToTrack( int maxFeaturesPerChannel, double qualityLevel, double minDistance, int blockSize, bool useHarris, double k ) |

Visual Basic |
---|

Public Function GoodFeaturesToTrack ( _ maxFeaturesPerChannel As Integer, _ qualityLevel As Double, _ minDistance As Double, _ blockSize As Integer, _ useHarris As Boolean, _ k As Double _ ) As PointF()() |

Visual C++ |
---|

public: array<array<PointF>^>^ GoodFeaturesToTrack( int maxFeaturesPerChannel, double qualityLevel, double minDistance, int blockSize, bool useHarris, double k ) |

#### Parameters

- maxFeaturesPerChannel
- Type: System..::..Int32

The maximum features to be detected per channel

- qualityLevel
- Type: System..::..Double

Multiplier for the maxmin eigenvalue; specifies minimal accepted quality of image corners

- minDistance
- Type: System..::..Double

Limit, specifying minimum possible distance between returned corners; Euclidian distance is used.

- blockSize
- Type: System..::..Int32

Size of the averaging block, passed to underlying cvCornerMinEigenVal or cvCornerHarris used by the function

- useHarris
- Type: System..::..Boolean

If nonzero, Harris operator (cvCornerHarris) is used instead of default cvCornerMinEigenVal

- k
- Type: System..::..Double

Free parameter of Harris detector; used only if use_harris = true

#### Return Value

The good features for each channel# Remarks

The function first calculates the minimal eigenvalue for every source image pixel using cvCornerMinEigenVal function and stores them in eig_image. Then it performs non-maxima suppression (only local maxima in 3x3 neighborhood remain). The next step is rejecting the corners with the minimal eigenvalue less than quality_level?max(eig_image(x,y)). Finally, the function ensures that all the corners found are distanced enough one from another by considering the corners (the most strongest corners are considered first) and checking that the distance between the newly considered feature and the features considered earlier is larger than min_distance. So, the function removes the features than are too close to the stronger features