You are here: Start » Function Reference » Image Analysis » DetectCorners_CornerResponse
DetectCorners_CornerResponse
Detects corners using corner response method.
Header: | AVL.h |
---|
Syntax
void avl::DetectCorners_CornerResponse ( const avl::Image& inMonoImage, atl::Optional<const avl::Region&> inRoi, const avl::CornerResponseMethod::Type inCornerResponseMethod, const int inKernelSize, atl::Optional<float> inThreshold, atl::Optional<atl::Array<avl::Point2D>&> outCorners, atl::Optional<avl::Image&> outCornerResponseImage = atl::NIL )
Parameters
Name | Type | Range | Default | Description | |
---|---|---|---|---|---|
inMonoImage | const Image& | Input image | |||
inRoi | Optional<const Region&> | NIL | Range of pixels to be processed | ||
inCornerResponseMethod | const CornerResponseMethod::Type | Method for computing corner response | |||
inKernelSize | const int | 1 - 10 | 3 | Method kernel size | |
inThreshold | Optional<float> | 0.0 - 255.0 | 50.0f | Threshold for corner response value, between 0 and 255, default value is taken from SelectThresholdValue on outCornerResponseImage and entropy method | |
outCorners | Optional<Array<Point2D>&> | Found corner points | |||
outCornerResponseImage | Optional<Image&> | NIL |
Requirements
For input inMonoImage only pixel formats are supported: 1xuint8, 1xint8, 1xuint16, 1xint16, 1xint32, 1xreal.
Read more about pixel formats in Image documentation.
Description
The operation detects corners using either Harris or Kanade-Tomasi corner response method,
depending on inCornerResponseMethod.
For every square window of size inKernelSize a convolution matrix is computed:
\[M = \left(\begin{array}{ccc}
\sum g_r^2 & \sum g_c g_r \\
\sum g_c g_r & \sum g_c^2
\end{array} \right) \]
where the summation is performed over the whole window
and \(g_r, g_c\) denote horizontal and vertical gradient respectively at the point.
Harris' corner response is computed the following way:
\[H = \mathrm{det}(M) - k \mathrm{tr}^2(M) \]
where k is a constant set to 0.01.
Kanade-Tomasi corner response is given by:
\[KT = \mathrm{min}(\lambda_1, \lambda_2)\]
where \(\lambda_1, \lambda_2\) are eigenvalues of the convolution matrix.
Values H or KT give corner response image.
Then a few steps are performed in order to extract corner points. First, the normalized corner response function is thresholded with inThreshold with a small hysteresis, then the remained points are split into connected regions (blobs) and the center of each blob is determined.
Examples
Remarks
Both methods give similar results and are quite fast. However, they tend to be less accurate than DetectCorners_Foerstner.
Errors
Error type | Description |
---|---|
DomainError | Unknown algorithm in DetectCorners_CornerResponse. |
See Also
- DetectCorners_Foerstner – Detects corners using the Foerstner algorithm.