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.

  1. Load the list of feature points
  2. Read a block of pixel from the Gaussian filter smoothed input image
  3. Apply a set window centered around each feature point.
  4. Generate the X-direction differential image and Y-direction differential image from the smoothed image in
    the window area
  5. 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.

  1. Launch Stereo Viewer or eBusPlayer and connect to the camera
  2. Click on Device Control to open the control panel
  3. Navigate to ChunkDataControl
  4. Set ChunkActiveMode to True to turn on chunk data transfer
  5. Set ChunkSelector to FeatureDescriptors to activate feature descriptor
  6. Finally, set ChunkEnable to True to enable the feature descriptor computation and transmission
Feature descriptor chunk data settings.

Feature descriptor chunk data settings.

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.

AKAZE descriptor parameters as exposed by Bottlenose

AKAZE descriptor parameters as exposed by Bottlenose

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)