forked from herbertbay/SURF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
surf.h
109 lines (87 loc) · 2.8 KB
/
surf.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
* Speeded-Up Robust Features (SURF)
* https://github.com/herbertbay/SURF
*
* Authors: Herbert Bay, Andreas Ess, Geert Willems
* Windows port by Stefan Saur
*
* Copyright (2006): ETH Zurich, Switzerland
* Katholieke Universiteit Leuven, Belgium
* All rights reserved.
*
* For details, see the paper:
* Herbert Bay, Tinne Tuytelaars, Luc Van Gool,
* "SURF: Speeded Up Robust Features"
* Proceedings of the ninth European Conference on Computer Vision, May 2006
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for educational, research, and non-commercial
* purposes, without fee and without a signed licensing agreement, is
* hereby granted, provided that the above copyright notice and this
* paragraph appear in all copies modifications, and distributions.
*
* Any commercial use or any redistribution of this software
* requires a license from one of the above mentioned establishments.
*
* For further details, contact Herbert Bay ([email protected]).
*/
#ifndef __SURF_H
#define __SURF_H
namespace surf {
class Image;
class Surf {
public:
//! Constructor
Surf();
//! Constructor with parameters
Surf(Image *im, bool dbl=false, bool usurf=false,
bool ext=false, int insi=4);
//! Destructor
~Surf();
//! Get length of the descriptor vector
int getVectLength();
//! set Ipoint for which a descriptor has to be computed
void setIpoint(Ipoint *ipt);
//! Assign reproducible orienation
void assignOrientation();
//! Compute the robust features
void makeDescriptor();
protected:
//! Create the vector
void createVector(double scale,
double row, double col);
//! Create the vector
void createUprightVector(double scale,
double row, double col);
//! Add sample to the vector
void AddSample(int r, int c, double rpos,
double cpos, double rx, double cx, int step);
//! Add upright sample to the vector
void AddUprightSample(int r, int c, double rpos,
double cpos, double rx, double cx, int step);
//! Place sample to index in vector
void PlaceInIndex(double mag1, int ori1,
double mag2, int ori2, double rx, double cx);
//! Normalise descriptor vector for illumination invariance for
//! Lambertian surfaces
void normalise();
//! Create Lookup tables
void createLookups();
private:
Image *_iimage;
Ipoint *_current;
double ***_index;
bool _doubleImage;
bool _upright;
bool _extended;
int _VecLength;
int _IndexSize;
double _MagFactor;
int _OriSize;
int _width, _height;
double _sine, _cose;
double **_Pixels;
double _lookup1[83], _lookup2[40];
};
}
#endif // SURF_H