class mrpt::vision::CFeatureExtraction

Overview

The central class from which images can be analyzed in search of different kinds of interest points and descriptors computed for them.

To extract features from an image, create an instance of CFeatureExtraction, fill out its CFeatureExtraction::options field, including the algorithm to use (see CFeatureExtraction::TOptions::featsType), and call CFeatureExtraction::detectFeatures. This will return a set of features of the class mrpt::vision::CFeature, which include details for each interest point as well as the desired descriptors and/or patches.

By default, a 21x21 patch is extracted for each detected feature. If the patch is not needed, set patchSize to 0 in CFeatureExtraction::options

The implemented detection algorithms are (see CFeatureExtraction::TOptions::featsType):

  • KLT (Kanade-Lucas-Tomasi): A detector (no descriptor vector).

  • Harris: A detector (no descriptor vector).

  • BCD (Binary Corner Detector): A detector (no descriptor vector) (Not implemented yet).

  • SIFT: An implementation of the SIFT detector and descriptor. The implemention may be selected with CFeatureExtraction::TOptions::SIFTOptions::implementation.

  • SURF: OpenCV’s implementation of SURF detector and descriptor.

  • The FAST feature detector (OpenCV’s implementation)

Additionally, given a list of interest points onto an image, the following descriptors can be computed for each point by calling CFeatureExtraction::computeDescriptors :

  • SIFT descriptor (Lowe’s descriptors).

  • SURF descriptor (OpenCV’s implementation - Requires OpenCV 1.1.0 from SVN or later).

  • Intensity-domain spin images (SpinImage): Creates a vector descriptor with the 2D histogram as a single row.

  • A circular patch in polar coordinates (Polar images): The matrix descriptor is a 2D polar image centered at the interest point.

  • A log-polar image patch (Log-polar images): The matrix descriptor is the 2D log-polar image centered at the interest point.

The descriptor “Intensity-domain spin images” is described in “A sparse texture representation using affine-invariant regions”, S Lazebnik, C Schmid, J Ponce, 2003 IEEE Computer Society Conference on Computer Vision.

See also:

mrpt::vision::CFeature

#include <mrpt/vision/CFeatureExtraction.h>

class CFeatureExtraction
{
public:
    // enums

    enum TSIFTImplementation;

    // structs

    struct TOptions;

    // fields

    mrpt::system::CTimeLogger profiler {false};
    TOptions options;

    // methods

    void detectFeatures(
        const mrpt::img::CImage& img,
        CFeatureList& feats,
        const unsigned int init_ID = 0,
        const unsigned int nDesiredFeatures = 0,
        const TImageROI& ROI = TImageROI()
        );

    void computeDescriptors(const mrpt::img::CImage& in_img, CFeatureList& inout_features, TDescriptorType in_descriptor_list);
};

Fields

mrpt::system::CTimeLogger profiler {false}

Timelogger: disabled by default.

TOptions options

Set all the parameters of the desired method here before calling detectFeatures()

Methods

void detectFeatures(
    const mrpt::img::CImage& img,
    CFeatureList& feats,
    const unsigned int init_ID = 0,
    const unsigned int nDesiredFeatures = 0,
    const TImageROI& ROI = TImageROI()
    )

Extract features from the image based on the method defined in TOptions.

Parameters:

img

(input) The image from where to extract the images.

feats

(output) A complete list of features (containing a patch for each one of them if options.patchsize > 0).

nDesiredFeatures

(op. input) Number of features to be extracted. Default: all possible.

See also:

computeDescriptors

void computeDescriptors(const mrpt::img::CImage& in_img, CFeatureList& inout_features, TDescriptorType in_descriptor_list)

Compute one (or more) descriptors for the given set of interest points onto the image, which may have been filled out manually or from detectFeatures.

Each value in “in_descriptor_list” represents one descriptor to be computed, for example:

   // This call will compute both, SIFT and Spin-Image descriptors
for a list of feature points lstFeats. fext.computeDescriptors(img,
lstFeats, descSIFT | descSpinImages );

The SIFT descriptors for already located features can only be computed through the Hess and CSBinary implementations which may be specified in CFeatureExtraction::TOptions::SIFTOptions.

This call will also use additional parameters from options

Parameters:

in_img

(input) The image from where to compute the descriptors.

inout_features

(input/output) The list of features whose descriptors are going to be computed.

in_descriptor_list

(input) The bitwise OR of one or several descriptors defined in TDescriptorType.