• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /**
3  * @file KAZE.h
4  * @brief Main program for detecting and computing descriptors in a nonlinear
5  * scale space
6  * @date Jan 21, 2012
7  * @author Pablo F. Alcantarilla
8  */
9 
10 #ifndef __OPENCV_FEATURES_2D_KAZE_FEATURES_H__
11 #define __OPENCV_FEATURES_2D_KAZE_FEATURES_H__
12 
13 /* ************************************************************************* */
14 // Includes
15 #include "KAZEConfig.h"
16 #include "nldiffusion_functions.h"
17 #include "fed.h"
18 #include "TEvolution.h"
19 
20 namespace cv
21 {
22 
23 /* ************************************************************************* */
24 // KAZE Class Declaration
25 class KAZEFeatures
26 {
27 private:
28 
29     /// Parameters of the Nonlinear diffusion class
30     KAZEOptions options_;               ///< Configuration options for KAZE
31     std::vector<TEvolution> evolution_;    ///< Vector of nonlinear diffusion evolution
32 
33     /// Vector of keypoint vectors for finding extrema in multiple threads
34     std::vector<std::vector<cv::KeyPoint> > kpts_par_;
35 
36     /// FED parameters
37     int ncycles_;                  ///< Number of cycles
38     bool reordering_;              ///< Flag for reordering time steps
39     std::vector<std::vector<float > > tsteps_;  ///< Vector of FED dynamic time steps
40     std::vector<int> nsteps_;      ///< Vector of number of steps per cycle
41 
42 public:
43 
44     /// Constructor
45     KAZEFeatures(KAZEOptions& options);
46 
47     /// Public methods for KAZE interface
48     void Allocate_Memory_Evolution(void);
49     int Create_Nonlinear_Scale_Space(const cv::Mat& img);
50     void Feature_Detection(std::vector<cv::KeyPoint>& kpts);
51     void Feature_Description(std::vector<cv::KeyPoint>& kpts, cv::Mat& desc);
52     static void Compute_Main_Orientation(cv::KeyPoint& kpt, const std::vector<TEvolution>& evolution_, const KAZEOptions& options);
53 
54     /// Feature Detection Methods
55     void Compute_KContrast(const cv::Mat& img, const float& kper);
56     void Compute_Multiscale_Derivatives(void);
57     void Compute_Detector_Response(void);
58     void Determinant_Hessian(std::vector<cv::KeyPoint>& kpts);
59     void Do_Subpixel_Refinement(std::vector<cv::KeyPoint>& kpts);
60 };
61 
62 }
63 
64 #endif
65