Feature detection, descriptors and matching

Overview

// typedefs

typedef TKeyPoint_templ<mrpt::img::TPixelCoord> mrpt::vision::TKeyPoint;
typedef TKeyPoint_templ<mrpt::img::TPixelCoordf> mrpt::vision::TKeyPointf;
typedef TKeyPointList_templ<TKeyPoint> mrpt::vision::TKeyPointList;
typedef TKeyPointList_templ<TKeyPointf> mrpt::vision::TKeyPointfList;

// structs

template <typename FEATURE_LIST>
struct mrpt::vision::KeypointResponseSorter;

template <typename FEATURE>
struct mrpt::vision::TKeyPointList_templ;

template <>
struct mrpt::vision::TKeyPointTraits<TKeyPointf>;

template <>
struct mrpt::vision::TKeyPointTraits<TKeyPoint>;

template <typename FEATURE>
struct mrpt::vision::TKeyPointTraits;

template <typename PIXEL_COORD_TYPE>
struct mrpt::vision::TKeyPoint_templ;

// classes

class mrpt::vision::CFeature;
class mrpt::vision::CFeatureExtraction;
class mrpt::vision::CFeatureList;

template <typename FEAT>
class mrpt::vision::CFeatureListKDTree;

class mrpt::vision::CMatchedFeatureList;

// global functions

template <class DESCRIPTOR_KDTREE>
size_t mrpt::vision::find_descriptor_pairings(
    std::vector<std::vector<size_t>>* pairings_1_to_multi_2,
    std::vector<std::pair<size_t, size_t>>* pairings_1_to_2,
    const CFeatureList& feats_img1,
    const DESCRIPTOR_KDTREE& feats_img2_kdtree,
    const mrpt::vision::TDescriptorType descriptor = descSIFT,
    const size_t max_neighbors = 4,
    const double max_relative_distance = 1.2,
    const typename DESCRIPTOR_KDTREE::kdtree_t::DistanceType max_distance = std::numeric_limits<typename DESCRIPTOR_KDTREE::kdtree_t::DistanceType>::max()
    );

Typedefs

typedef TKeyPoint_templ<mrpt::img::TPixelCoord> mrpt::vision::TKeyPoint

Simple structure for image key points.

See also:

TKeyPointf, CFeature, TKeyPointList

typedef TKeyPoint_templ<mrpt::img::TPixelCoordf> mrpt::vision::TKeyPointf

A version of TKeyPoint with subpixel precision.

typedef TKeyPointList_templ<TKeyPoint> mrpt::vision::TKeyPointList

A list of image features using the structure TKeyPoint for each feature.

  • capable of KD-tree computations

typedef TKeyPointList_templ<TKeyPointf> mrpt::vision::TKeyPointfList

A list of image features using the structure TKeyPointf for each feature - capable of KD-tree computations.

Global Functions

template <class DESCRIPTOR_KDTREE>
size_t mrpt::vision::find_descriptor_pairings(
    std::vector<std::vector<size_t>>* pairings_1_to_multi_2,
    std::vector<std::pair<size_t, size_t>>* pairings_1_to_2,
    const CFeatureList& feats_img1,
    const DESCRIPTOR_KDTREE& feats_img2_kdtree,
    const mrpt::vision::TDescriptorType descriptor = descSIFT,
    const size_t max_neighbors = 4,
    const double max_relative_distance = 1.2,
    const typename DESCRIPTOR_KDTREE::kdtree_t::DistanceType max_distance = std::numeric_limits<typename DESCRIPTOR_KDTREE::kdtree_t::DistanceType>::max()
    )

Search for pairings between two sets of visual descriptors (for now, only SURF and SIFT features are considered).

Pairings are returned in one of two formats (or both of them simultaneously), depending on the non-NULL output containers present in the call.

CFeatureList  feats1, feats2;
// Populate feature lists [...]

// Create kd-tree for SIFT features of "feats2":
TSIFTDescriptorsKDTreeIndex<double>  feats2_kdtree(feats2);

// Search correspondences:
std::vector<std::vector<size_t>>             pairings_1_to_multi_2;
std::vector<std::pair<size_t,size_t> > pairings_1_to_2;
mrpt::vision::find_descriptor_pairings(
   &pairings_1_to_multi_2,   // Can be set to nullptr if not needed
   &pairings_1_to_2,         // Can be set to nullptr if not needed
   feats1, feats2_kdtree,    // The two sets of features
   mrpt::vision::descSIFT    // Select descriptor to use
   // [further optional params]
   );

See also:

TSIFTDescriptorsKDTreeIndex, TSURFDescriptorsKDTreeIndex