Home | History | Annotate | Download | only in kaze
      1 /**
      2  * @file AKAZE.h
      3  * @brief Main class for detecting and computing binary descriptors in an
      4  * accelerated nonlinear scale space
      5  * @date Mar 27, 2013
      6  * @author Pablo F. Alcantarilla, Jesus Nuevo
      7  */
      8 
      9 #ifndef __OPENCV_FEATURES_2D_AKAZE_FEATURES_H__
     10 #define __OPENCV_FEATURES_2D_AKAZE_FEATURES_H__
     11 
     12 /* ************************************************************************* */
     13 // Includes
     14 #include "AKAZEConfig.h"
     15 #include "TEvolution.h"
     16 
     17 namespace cv
     18 {
     19 
     20 /* ************************************************************************* */
     21 // AKAZE Class Declaration
     22 class AKAZEFeatures {
     23 
     24 private:
     25 
     26   AKAZEOptions options_;                ///< Configuration options for AKAZE
     27   std::vector<TEvolution> evolution_;        ///< Vector of nonlinear diffusion evolution
     28 
     29   /// FED parameters
     30   int ncycles_;                  ///< Number of cycles
     31   bool reordering_;              ///< Flag for reordering time steps
     32   std::vector<std::vector<float > > tsteps_;  ///< Vector of FED dynamic time steps
     33   std::vector<int> nsteps_;      ///< Vector of number of steps per cycle
     34 
     35   /// Matrices for the M-LDB descriptor computation
     36   cv::Mat descriptorSamples_;  // List of positions in the grids to sample LDB bits from.
     37   cv::Mat descriptorBits_;
     38   cv::Mat bitMask_;
     39 
     40 public:
     41 
     42   /// Constructor with input arguments
     43   AKAZEFeatures(const AKAZEOptions& options);
     44 
     45   /// Scale Space methods
     46   void Allocate_Memory_Evolution();
     47   int Create_Nonlinear_Scale_Space(const cv::Mat& img);
     48   void Feature_Detection(std::vector<cv::KeyPoint>& kpts);
     49   void Compute_Determinant_Hessian_Response(void);
     50   void Compute_Multiscale_Derivatives(void);
     51   void Find_Scale_Space_Extrema(std::vector<cv::KeyPoint>& kpts);
     52   void Do_Subpixel_Refinement(std::vector<cv::KeyPoint>& kpts);
     53 
     54   /// Feature description methods
     55   void Compute_Descriptors(std::vector<cv::KeyPoint>& kpts, cv::Mat& desc);
     56   static void Compute_Main_Orientation(cv::KeyPoint& kpt, const std::vector<TEvolution>& evolution_);
     57 };
     58 
     59 /* ************************************************************************* */
     60 /// Inline functions
     61 void generateDescriptorSubsample(cv::Mat& sampleList, cv::Mat& comparisons,
     62                                  int nbits, int pattern_size, int nchannels);
     63 
     64 }
     65 
     66 #endif
     67