forked from herbertbay/SURF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fasthessian.h
113 lines (88 loc) · 2.96 KB
/
fasthessian.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
110
111
112
113
/*
* 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 __FASTHESSIAN_H
#define __FASTHESSIAN_H
#include <vector>
namespace surf {
class Ipoint;
class Image;
class FastHessian {
public:
//! Destructor
~FastHessian();
//! Constructor with parameters
FastHessian(Image *im, std::vector< Ipoint >& ip, double thres = 0.2, bool doub = false,
short int initMasksize = 9, short int samplingStep = 2,
short int octaves = 4);
//! Pass the integral image
void setIimage( Image *iim );
//! Detect the interest Points, write into ipts
void getInterestPoints();
//! Create a new ipoint at location (x, y), at a certain scale
//! and corner response strength
void makeIpoint(double x, double y, double scale, double strength=0);
protected:
//! Allocate scale layers for one octave
void allocateOctave();
//! Fast non-maximum-suppression
void findMaximum(int *borders, int o, int octave);
void interpFeature(int s, int row, int col, Image *map,
int o, int octave, int movesRemain,
int *borders);
int fitQuadrat(int s, int r, int c, double &res);
private:
//! Integral image
Image *_Iimage;
//! Octaves
Image **_scaleLevel;
//! Vector of variables
int _vas[9];
//! Threshold for interest point detection
double _threshold;
//! Indicates whether the image size was doubled or not
//! default is false
bool _doubled;
//! Reference to vector of interest points passed from outside
std::vector< Ipoint >& _ipts;
//! Initial lobe size for the second derivative in one direction
//! default is 3
short int _initLobe;
//! Number scales
short int _maxScales;
//! Number octaves
short int _maxOctaves;
//! The sampling step
short int _sampling;
//! Integral image dimensions
int _width;
int _height;
//! Result of fitting quadratic
double _offset[3];
};
}
#endif // FASTHESSIAN_H