forked from davidstutz/vedaldi2006-siftpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sift.ipp
111 lines (102 loc) · 3.36 KB
/
sift.ipp
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
// file: sift.ipp
// author: Andrea Vedaldi
// description: Sift inline members definition
// AUTORIGHTS
// Copyright (c) 2006 The Regents of the University of California
// All Rights Reserved.
//
// Created by Andrea Vedaldi (UCLA VisionLab)
//
// Permission to use, copy, modify, and distribute this software and its
// documentation for educational, research and non-profit purposes,
// without fee, and without a written agreement is hereby granted,
// provided that the above copyright notice, this paragraph and the
// following three paragraphs appear in all copies.
//
// This software program and documentation are copyrighted by The Regents
// of the University of California. The software program and
// documentation are supplied "as is", without any accompanying services
// from The Regents. The Regents does not warrant that the operation of
// the program will be uninterrupted or error-free. The end-user
// understands that the program was developed for research purposes and
// is advised not to rely exclusively on the program for any reason.
//
// This software embodies a method for which the following patent has
// been issued: "Method and apparatus for identifying scale invariant
// features in an image and use of same for locating an object in an
// image," David G. Lowe, US Patent 6,711,293 (March 23,
// 2004). Provisional application filed March 8, 1999. Asignee: The
// University of British Columbia.
//
// IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
// FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
// INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
// ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF
// CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
// BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE
// MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
/** @brief Get width of an octave
** @param width of octave @a o.
**/
inline
int
VL::Sift::getOctaveWidth(int o) const
{
assert( omin <= o && o < omin + O ) ;
return (o >= 0) ? (width >> o) : (width << -o) ;
}
/** @brief Get height of an octave
** @param height of octave @a o.
**/
inline
int
VL::Sift::getOctaveHeight(int o) const
{
assert( omin <= o && o < omin + O ) ;
return (o >= 0) ? (height >> o) : (height << -o) ;
}
/** @brief Get octave
** @param pointer to octave @a o.
**/
inline
float *
VL::Sift::getOctave(int o)
{
assert( omin <= o && o < omin + O ) ;
return octaves[o-omin] ;
}
/** @brief Get level
** @param pointer to level @c (o,s).
**/
inline
float *
VL::Sift::getLevel(int o, int s)
{
assert( omin <= o && o < omin + O ) ;
assert( smin <= s && s <= smax ) ;
return octaves[o - omin] +
getOctaveWidth(o)*getOctaveHeight(o) * (s-smin) ;
}
/** @brief Get octave sampling period
**/
inline
float
VL::Sift::getOctaveSamplingPeriod(int o) const
{
return (o >= 0) ? (1 << o) : 1.0f / (1 << -o) ;
}
/** @brief Get octave sampling period
**/
inline
float
VL::Sift::getScaleFromIndex(float o, float s) const
{
return sigma0 * powf( 2.0f, o + s / S ) ;
}
// Emacs:
// Local Variables:
// mode: C++
// End: