SIFT
sift.hpp
Go to the documentation of this file.
1 #ifndef SIFT_HPP
2 #define SIFT_HPP
3 
4 #include <cmath>
5 #include <array>
6 #include <vector>
7 
8 #include <vigra/multi_array.hxx>
9 #include <vigra/matrix.hxx>
10 
11 #include "types.hpp"
12 #include "matrix.hpp"
13 #include "octaveelem.hpp"
14 #include "interestpoint.hpp"
15 
16 namespace sift {
17  class Sift {
18  public:
22  const bool subpixel;
23  private:
27  const f32_t _sigma;
31  const f32_t _k;
32 
37 
41  const u16_t _octaves;
42 
47 
52 
57 
58  public:
66  explicit
67  Sift(u16_t dogsPerEpoch = 3, u16_t octaves = 3, f32_t sigma = 1.6,
68  f32_t k = std::sqrt(2), bool subpixel = false) :
69  subpixel(subpixel), _sigma(sigma), _k(k), _dogsPerEpoch(dogsPerEpoch),
70  _octaves(octaves) {
71  }
72 
78  std::vector<InterestPoint> calculate(vigra::MultiArray<2, f32_t>&);
79 
80  private:
85  void _createDecriptors(std::vector<InterestPoint>&);
86 
92  std::vector<f32_t> _eliminateVectorThreshold(std::vector<f32_t>&) const;
93 
98 
103 
110  void _eliminateEdgeResponses(std::vector<InterestPoint>&, const Matrix<OctaveElem>&) const;
111 
118  const std::set<f32_t> _findPeaks(const std::array<f32_t, 36>&) const;
119 
125  void _orientationAssignment(std::vector<InterestPoint>&);
126 
133 
140  void _findScaleSpaceExtrema(const Matrix<OctaveElem>&, std::vector<InterestPoint>&) const;
141 
147  const Matrix<OctaveElem> _createDOGs(vigra::MultiArray<2, f32_t>&);
148  };
149 }
150 #endif //SIFT_HPP
float f32_t
Definition: types.hpp:13
unsigned short int u16_t
Definition: types.hpp:6
const f32_t _sigma
Definition: sift.hpp:27
const Matrix< OctaveElem > _createDOGs(vigra::MultiArray< 2, f32_t > &)
Definition: sift.cpp:381
void _findScaleSpaceExtrema(const Matrix< OctaveElem > &, std::vector< InterestPoint > &) const
Definition: sift.cpp:348
void _createOrientationPyramid()
Definition: sift.cpp:146
const Point< u16_t, u16_t > _findNearestGaussian(f32_t)
Definition: sift.cpp:205
Definition: sift.hpp:17
std::vector< InterestPoint > calculate(vigra::MultiArray< 2, f32_t > &)
Definition: sift.cpp:19
const f32_t _k
Definition: sift.hpp:31
Matrix< vigra::MultiArray< 2, f32_t > > _magnitudes
Definition: sift.hpp:51
void _createDecriptors(std::vector< InterestPoint > &)
Definition: sift.cpp:60
Definition: matrix.hpp:22
const u16_t _octaves
Definition: sift.hpp:41
void _createMagnitudePyramid()
Definition: sift.cpp:130
const bool subpixel
Definition: sift.hpp:22
void _eliminateEdgeResponses(std::vector< InterestPoint > &, const Matrix< OctaveElem > &) const
Definition: sift.cpp:288
const u16_t _dogsPerEpoch
Definition: sift.hpp:36
Definition: algorithms.cpp:8
Matrix< vigra::MultiArray< 2, f32_t > > _orientations
Definition: sift.hpp:56
Sift(u16_t dogsPerEpoch=3, u16_t octaves=3, f32_t sigma=1.6, f32_t k=std::sqrt(2), bool subpixel=false)
Definition: sift.hpp:67
Matrix< OctaveElem > _gaussians
Definition: sift.hpp:46
std::vector< f32_t > _eliminateVectorThreshold(std::vector< f32_t > &) const
Definition: sift.cpp:113
const std::set< f32_t > _findPeaks(const std::array< f32_t, 36 > &) const
Definition: sift.cpp:220
void _orientationAssignment(std::vector< InterestPoint > &)
Definition: sift.cpp:163