The OpenVX Specification  a73e458
Fast Corners

Detailed Description

Computes the corners in an image using a method based upon FAST9 algorithm suggested in [3] and with some updates from [4] with modifications described below [R00056].

It extracts corners by evaluating pixels on the Bresenham circle around a candidate point. If \( N \) contiguous pixels are brighter than the candidate point by at least a threshold value \( t \) or darker by at least \( t \) , then the candidate point is considered to be a corner. For each detected corner, its strength is computed. Optionally, a non-maxima suppression step is applied on all detected corners to remove multiple or spurious responses.

Segment Test Detector

The FAST corner detector uses the pixels on a Bresenham circle of radius 3 (16 pixels) to classify whether a candidate point \( p \) is actually a corner, given the following variables.

\begin{eqnarray} I &=& \text{ input image } \\ p &=& \text{ candidate point position for a corner } \\ I_p &=& \text{ image intensity of the candidate point in image } I \\ x &=& \text{ pixel on the Bresenham circle around the candidate point } p \\ I_x &=& \text{ image intensity of the candidate point } \\ t &=& \text{ intensity difference threshold for a corner } \\ N &=& \text{ minimum number of contiguous pixel to detect a corner } \\ S &=& \text{ set of contiguous pixel on the Bresenham circle around the candidate point } \\ C_p &=& \text{ corner response at corner location } p \\ \end{eqnarray}

The two conditions for FAST corner detection can be expressed as:

So when either of these two conditions is met, the candidate \( p \) is classified as a corner.

In this version of the FAST algorithm, the minimum number of contiguous pixels \( N \) is 9 (FAST9).

The value of the intensity difference threshold strength_thresh. of type VX_TYPE_FLOAT32 must be within:

\[ {UINT8_{MIN}} < t < {UINT8_{MAX}} \]

These limits are established due to the input data type VX_DF_IMAGE_U8.

Corner Strength Computation

Once a corner has been detected, its strength (response, saliency, or score) shall be computed if nonmax_suppression is set to true, otherwise the value of strength is undefined. The corner response \( C_p \) function is defined as the largest threshold \( t \) for which the pixel \( p \) remains a corner.

Non-maximum suppression

If the nonmax_suppression flag is true, a non-maxima suppression step is applied on the detected corners. The corner with coordinates \((x,y)\) is kept if and only if

\begin{eqnarray*} C_p(x,y) \geq C_p(x-1,y-1) \; and \; C_p(x,y) \geq C_p(x,y-1) \; and \\ C_p(x,y) \geq C_p(x+1,y-1) \; and \; C_p(x,y) \geq C_p(x-1,y) \; and \\ C_p(x,y) > C_p(x+1,y) \; and \; C_p(x,y) >C_p(x-1,y+1) \; and \\ C_p(x,y) >C_p(x,y+1) \; and \; C_p(x,y) >C_p(x+1,y+1) \end{eqnarray*}

See also
http://www.edwardrosten.com/work/fast.html
http://en.wikipedia.org/wiki/Features_from_accelerated_segment_test

Functions

vx_node VX_API_CALL vxFastCornersNode (vx_graph graph, vx_image input, vx_scalar strength_thresh, vx_bool nonmax_suppression, vx_array corners, vx_scalar num_corners)
 [Graph] Creates a FAST Corners Node. More...
 

Function Documentation

◆ vxFastCornersNode()

vx_node VX_API_CALL vxFastCornersNode ( vx_graph  graph,
vx_image  input,
vx_scalar  strength_thresh,
vx_bool  nonmax_suppression,
vx_array  corners,
vx_scalar  num_corners 
)

[Graph] Creates a FAST Corners Node.

Parameters
[in]graphThe reference to the graph [R00368].
[in]inputThe input VX_DF_IMAGE_U8 image [R00369].
[in]strength_threshThreshold on difference between intensity of the central pixel and pixels on Bresenham's circle of radius 3 (VX_TYPE_FLOAT32 scalar), with a value in the range of 0.0 \(\le\) strength_thresh < 256.0 [R00370]. Any fractional value will be truncated to an integer [R00371].
[in]nonmax_suppressionIf true, non-maximum suppression is applied to detected corners before being placed in the vx_array of VX_TYPE_KEYPOINT objects [R00372].
[out]cornersOutput corner vx_array of VX_TYPE_KEYPOINT [R00373]. The order of the keypoints in this array is implementation dependent.
[out]num_cornersThe total number of detected corners in image [R00374](optional). Use a VX_TYPE_SIZE scalar [R00375].
Returns
vx_node [R00376].
Return values
vx_nodeA node reference. Any possible errors preventing a successful creation should be checked using vxGetStatus