Feature Descriptor
Overview
For each feature point it detects, Bottlenose is also able to compute a feature descriptor if required. Bottlenose has a dedicated hardware block that uses the SMLDB (Simple Modified Local Difference Binary) algorithm to compute an AKAZE descriptor for each feature point.
The SMLDB algorithm operates as follows.
- Load the list of feature points
- Read a block of pixel from the Gaussian filter smoothed input image
- Apply a set window centered around each feature point.
- Generate the X-direction differential image and Y-direction differential image from the smoothed image in
the window area - Calculate the AKAZE feature descriptor of each feature point from the smoothed image, X-direction
differential image, and Y-direction differential image.
Enabling AKAZE Descriptor
Bottlenose detects and transmits feature descriptors through the chunk data interface of its GigE Vision protocol. The following steps show how to enable feature descriptors with either the Bottlenose Stereo Viewer
or eBusPlayer
.
- Launch
Stereo Viewer
oreBusPlayer
and connect to the camera - Click on
Device Control
to open the control panel - Navigate to
ChunkDataControl
- Set
ChunkActiveMode
toTrue
to turn on chunk data transfer - Set
ChunkSelector
toFeatureDescriptors
to activate feature descriptor - Finally, set
ChunkEnable
toTrue
to enable the feature descriptor computation and transmission
Bottlenose will not transmit the associated feature points until explicitly required to.
AKAZE Parameters
The parameters of the AKAZE descriptor computed by Bottlenose can be accessed by navigating to DescriptorParamaters
located under the FeatureMatching
header. Bottlenose exposes two parameters: window and length.
Here are the details of how to set the parameters for the descriptor:
- AKAZELength: AKAZE is a binary descriptor. The user can choose from different lengths in bits depending on the acceptable trade-off between speed and accuracy. The possible values for length are:
- 120-Bits: this computes a 120-bit long descriptor. To be used when power consumption and processing speed are important
- 128-Bits: similar use case as the 120-bit version.
- 256-Bits: computes a 256-bit descriptor. This represents a good balance between power consumption,
processing speed, and feature-matching accuracy. - 486-Bits: this is the full-size descriptor. Use this when the feature-matching accuracy is required.
- AKAZEWindow: window size to determine the number of pixels selected around a feature point. Possible values are 20x20, 30x30, 40x40, 60x60, and 80x80.
Receiving Descriptors with Python
Feature descriptors can be streamed from Bottlenose using Python. For details on how to interact with the camera and stream feature descriptor data, refer to our sample code.
The following code snippet activates the chunk mode and enables the transmission of feature descriptors.
# Get device parameters from the Gige Vision device
device_params = device.GetParameters()
# Activate chunk mode
chunkMode = device_params.Get("ChunkModeActive")
chunkMode.SetValue(True)
# Select feature descriptors
chunkSelector = device_params.Get("ChunkSelector")
chunkSelector.SetValue("FeatureDescriptors")
# Enable sparse descriptor chunk
chunkEnable = device_params.Get("ChunkEnable")
chunkEnable.SetValue(True)
Updated 11 months ago