The OpenVX Specification
dba1aa3
|
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.
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 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*}
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... | |
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. |
[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. |
vx_node
. 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.
[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. |
vx_status_e
enumeration. VX_SUCCESS | Success |
* | An error occurred. See vx_status_e . |