Common Interfaces of Descriptor Extractors ========================================== .. highlight:: cpp Extractors of keypoint descriptors in OpenCV have wrappers with common interface that enables to switch easily between different algorithms solving the same problem. This section is devoted to computing descriptors that are represented as vectors in a multidimensional space. All objects that implement ''vector'' descriptor extractors inherit :func:`DescriptorExtractor` interface. .. index:: DescriptorExtractor .. _DescriptorExtractor: DescriptorExtractor ------------------- `id=0.662703709577 Comments from the Wiki `__ .. ctype:: DescriptorExtractor Abstract base class for computing descriptors for image keypoints. :: class CV_EXPORTS DescriptorExtractor { public: virtual ~DescriptorExtractor(); void compute( const Mat& image, vector& keypoints, Mat& descriptors ) const; void compute( const vector& images, vector >& keypoints, vector& descriptors ) const; virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const = 0; virtual int descriptorType() const = 0; static Ptr create( const string& descriptorExtractorType ); protected: ... }; .. In this interface we assume a keypoint descriptor can be represented as a dense, fixed-dimensional vector of some basic type. Most descriptors used in practice follow this pattern, as it makes it very easy to compute distances between descriptors. Therefore we represent a collection of descriptors as a :func:`Mat` , where each row is one keypoint descriptor. .. index:: DescriptorExtractor::compute cv::DescriptorExtractor::compute -------------------------------- `id=0.580995528345 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::compute( const Mat\& image, vector\& keypoints, Mat\& descriptors ) const Compute the descriptors for a set of keypoints detected in an image (first variant) or image set (second variant). :param image: The image. :param keypoints: The keypoints. Keypoints for which a descriptor cannot be computed are removed. :param descriptors: The descriptors. Row i is the descriptor for keypoint i. .. cfunction:: void DescriptorExtractor::compute( const vector\& images, vector >\& keypoints, vector\& descriptors ) const * **images** The image set. * **keypoints** Input keypoints collection. keypoints[i] is keypoints detected in images[i]. Keypoints for which a descriptor can not be computed are removed. * **descriptors** Descriptor collection. descriptors[i] are descriptors computed for a set keypoints[i]. .. index:: DescriptorExtractor::read cv::DescriptorExtractor::read ----------------------------- `id=0.50216855217 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::read( const FileNode\& fn ) Read descriptor extractor object from file node. :param fn: File node from which detector will be read. .. index:: DescriptorExtractor::write cv::DescriptorExtractor::write ------------------------------ `id=0.833473124178 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::write( FileStorage\& fs ) const Write descriptor extractor object to file storage. :param fs: File storage in which detector will be written. .. index:: DescriptorExtractor::create cv::DescriptorExtractor::create ------------------------------- `id=0.759182087407 Comments from the Wiki `__ :func:`DescriptorExtractor` :: .. :param : \ ```` :func:`SiftFeatureDetector` \ ```` :func:`SurfFeatureDetector` \ ```` :func:`BriefFeatureDetector` \ ```` :func:`OpponentColorDescriptorExtractor` ```` .. index:: SiftDescriptorExtractor .. _SiftDescriptorExtractor: SiftDescriptorExtractor ----------------------- `id=0.235928275719 Comments from the Wiki `__ .. ctype:: SiftDescriptorExtractor Wrapping class for descriptors computing using :func:`SIFT` class. :: class SiftDescriptorExtractor : public DescriptorExtractor { public: SiftDescriptorExtractor( const SIFT::DescriptorParams& descriptorParams=SIFT::DescriptorParams(), const SIFT::CommonParams& commonParams=SIFT::CommonParams() ); SiftDescriptorExtractor( double magnification, bool isNormalize=true, bool recalculateAngles=true, int nOctaves=SIFT::CommonParams::DEFAULT_NOCTAVES, int nOctaveLayers=SIFT::CommonParams::DEFAULT_NOCTAVE_LAYERS, int firstOctave=SIFT::CommonParams::DEFAULT_FIRST_OCTAVE, int angleMode=SIFT::CommonParams::FIRST_ANGLE ); virtual void read (const FileNode &fn); virtual void write (FileStorage &fs) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... } .. .. index:: SurfDescriptorExtractor .. _SurfDescriptorExtractor: SurfDescriptorExtractor ----------------------- `id=0.525981855428 Comments from the Wiki `__ .. ctype:: SurfDescriptorExtractor Wrapping class for descriptors computing using :func:`SURF` class. :: class SurfDescriptorExtractor : public DescriptorExtractor { public: SurfDescriptorExtractor( int nOctaves=4, int nOctaveLayers=2, bool extended=false ); virtual void read (const FileNode &fn); virtual void write (FileStorage &fs) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... } .. .. index:: CalonderDescriptorExtractor .. _CalonderDescriptorExtractor: CalonderDescriptorExtractor --------------------------- `id=0.592618722637 Comments from the Wiki `__ .. ctype:: CalonderDescriptorExtractor Wrapping class for descriptors computing using :func:`RTreeClassifier` class. :: template class CalonderDescriptorExtractor : public DescriptorExtractor { public: CalonderDescriptorExtractor( const string& classifierFile ); virtual void read( const FileNode &fn ); virtual void write( FileStorage &fs ) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... } .. .. index:: OpponentColorDescriptorExtractor .. _OpponentColorDescriptorExtractor: OpponentColorDescriptorExtractor -------------------------------- `id=0.77841799645 Comments from the Wiki `__ .. ctype:: OpponentColorDescriptorExtractor Adapts a descriptor extractor to compute descripors in Opponent Color Space (refer to van de Sande et al., CGIV 2008 "Color Descriptors for Object Category Recognition"). Input RGB image is transformed in Opponent Color Space. Then unadapted descriptor extractor (set in constructor) computes descriptors on each of the three channel and concatenate them into a single color descriptor. :: class OpponentColorDescriptorExtractor : public DescriptorExtractor { public: OpponentColorDescriptorExtractor( const Ptr& dextractor ); virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... }; .. .. index:: BriefDescriptorExtractor .. _BriefDescriptorExtractor: BriefDescriptorExtractor ------------------------ `id=0.678325401657 Comments from the Wiki `__ .. ctype:: BriefDescriptorExtractor Class for computing BRIEF descriptors described in paper of Calonder M., Lepetit V., Strecha C., Fua P.: ''BRIEF: Binary Robust Independent Elementary Features.'' 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010. :: class BriefDescriptorExtractor : public DescriptorExtractor { public: static const int PATCH_SIZE = 48; static const int KERNEL_SIZE = 9; // bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes. BriefDescriptorExtractor( int bytes = 32 ); virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... }; ..