The OpenVX Specification  dba1aa3
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.

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:

• C1: A set of $$N$$ contiguous pixels $$S$$, $$\forall x$$ in $$S$$, $$I_{x} > I_{p} + t$$
• C2: A set of $$N$$ contiguous pixels $$S$$, $$\forall x$$ in $$S$$, $$I_{x} < I_{p} - t$$

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*}

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...

vx_status VX_API_CALL vxuFastCorners (vx_context context, vx_image input, vx_scalar strength_thresh, vx_bool nonmax_suppression, vx_array corners, vx_scalar num_corners)
[Immediate] Computes corners on an image using FAST algorithm and produces the array of feature points. More...

## Function Documentation

 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] graph The reference to the graph. [in] input The input VX_DF_IMAGE_U8 image. [in] strength_thresh Threshold 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. Any fractional value will be truncated to an integer. [in] nonmax_suppression If true, non-maximum suppression is applied to detected corners before being placed in the vx_array of VX_TYPE_KEYPOINT objects. [out] corners Output corner vx_array of VX_TYPE_KEYPOINT. The order of the keypoints in this array is implementation dependent. [out] num_corners [optional] The total number of detected corners in image. Use a VX_TYPE_SIZE scalar.
Returns
vx_node.
Return values
 vx_node A node reference. Any possible errors preventing a successful creation should be checked using vxGetStatus
 vx_status VX_API_CALL vxuFastCorners ( vx_context context, vx_image input, vx_scalar strength_thresh, vx_bool nonmax_suppression, vx_array corners, vx_scalar num_corners )

[Immediate] Computes corners on an image using FAST algorithm and produces the array of feature points.

Parameters
 [in] context The reference to the overall context. [in] input The input VX_DF_IMAGE_U8 image. [in] strength_thresh Threshold 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. Any fractional value will be truncated to an integer. [in] nonmax_suppression If true, non-maximum suppression is applied to detected corners before being places in the vx_array of VX_TYPE_KEYPOINT structs. [out] corners Output corner vx_array of VX_TYPE_KEYPOINT. The order of the keypoints in this array is implementation dependent. [out] num_corners [optional] The total number of detected corners in image. Use a VX_TYPE_SIZE scalar.
Returns
A vx_status_e enumeration.
Return values
 VX_SUCCESS Success * An error occurred. See vx_status_e.