1 #ifndef __OPENCV_FEATURES_2D_KAZE_UTILS_H__
2 #define __OPENCV_FEATURES_2D_KAZE_UTILS_H__
3 
4 /* ************************************************************************* */
5 /**
6  * @brief This function computes the angle from the vector given by (X Y). From 0 to 2*Pi
7  */
getAngle(float x,float y)8 inline float getAngle(float x, float y) {
9 
10   if (x >= 0 && y >= 0) {
11     return atanf(y / x);
12   }
13 
14   if (x < 0 && y >= 0) {
15     return static_cast<float>(CV_PI)-atanf(-y / x);
16   }
17 
18   if (x < 0 && y < 0) {
19     return static_cast<float>(CV_PI)+atanf(y / x);
20   }
21 
22   if (x >= 0 && y < 0) {
23     return static_cast<float>(2.0 * CV_PI) - atanf(-y / x);
24   }
25 
26   return 0;
27 }
28 
29 /* ************************************************************************* */
30 /**
31  * @brief This function computes the value of a 2D Gaussian function
32  * @param x X Position
33  * @param y Y Position
34  * @param sig Standard Deviation
35  */
gaussian(float x,float y,float sigma)36 inline float gaussian(float x, float y, float sigma) {
37   return expf(-(x*x + y*y) / (2.0f*sigma*sigma));
38 }
39 
40 /* ************************************************************************* */
41 /**
42  * @brief This function checks descriptor limits
43  * @param x X Position
44  * @param y Y Position
45  * @param width Image width
46  * @param height Image height
47  */
checkDescriptorLimits(int & x,int & y,int width,int height)48 inline void checkDescriptorLimits(int &x, int &y, int width, int height) {
49 
50   if (x < 0) {
51     x = 0;
52   }
53 
54   if (y < 0) {
55     y = 0;
56   }
57 
58   if (x > width - 1) {
59     x = width - 1;
60   }
61 
62   if (y > height - 1) {
63     y = height - 1;
64   }
65 }
66 
67 /* ************************************************************************* */
68 /**
69  * @brief This funtion rounds float to nearest integer
70  * @param flt Input float
71  * @return dst Nearest integer
72  */
fRound(float flt)73 inline int fRound(float flt) {
74   return (int)(flt + 0.5f);
75 }
76 
77 /* ************************************************************************* */
78 /**
79  * @brief Exponentiation by squaring
80  * @param flt Exponentiation base
81  * @return dst Exponentiation value
82  */
fastpow(int base,int exp)83 inline int fastpow(int base, int exp) {
84     int res = 1;
85     while(exp > 0) {
86         if(exp & 1) {
87             exp--;
88             res *= base;
89         } else {
90             exp /= 2;
91             base *= base;
92         }
93     }
94     return res;
95 }
96 
97 #endif
98