The OpenVX Specification
a73e458

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 nonmaxima suppression step is applied on all detected corners to remove multiple or spurious responses.
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
.
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.
If the nonmax_suppression
flag is true, a nonmaxima 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(x1,y1) \; and \; C_p(x,y) \geq C_p(x,y1) \; and \\ C_p(x,y) \geq C_p(x+1,y1) \; and \; C_p(x,y) \geq C_p(x1,y) \; and \\ C_p(x,y) > C_p(x+1,y) \; and \; C_p(x,y) >C_p(x1,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*}
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_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.
[in]  graph  The reference to the graph [R00368]. 
[in]  input  The input VX_DF_IMAGE_U8 image [R00369]. 
[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 [R00370]. Any fractional value will be truncated to an integer [R00371]. 
[in]  nonmax_suppression  If true, nonmaximum suppression is applied to detected corners before being placed in the vx_array of VX_TYPE_KEYPOINT objects [R00372]. 
[out]  corners  Output corner vx_array of VX_TYPE_KEYPOINT [R00373]. The order of the keypoints in this array is implementation dependent. 
[out]  num_corners  The total number of detected corners in image [R00374](optional). Use a VX_TYPE_SIZE scalar [R00375]. 
vx_node
[R00376]. vx_node  A node reference. Any possible errors preventing a successful creation should be checked using vxGetStatus 