SIFT (Scale Invariant Feature Transform (SIFT)) More...
Go to the source code of this file.
Classes | |
struct | _VlSiftFilt |
SIFT filter. More... | |
struct | _VlSiftKeypoint |
SIFT filter keypoint. More... | |
Typedefs | |
typedef float | vl_sift_pix |
SIFT filter pixel type. | |
typedef struct _VlSiftFilt | VlSiftFilt |
SIFT filter. | |
typedef struct _VlSiftKeypoint | VlSiftKeypoint |
SIFT filter keypoint. | |
Functions | |
Create and destroy | |
VL_EXPORT VlSiftFilt * | vl_sift_new (int width, int height, int noctaves, int nlevels, int o_min) |
Create a new SIFT filter. | |
VL_EXPORT void | vl_sift_delete (VlSiftFilt *f) |
Delete SIFT filter. | |
Process data | |
VL_EXPORT int | vl_sift_process_first_octave (VlSiftFilt *f, vl_sift_pix const *im) |
Start processing a new image. | |
VL_EXPORT int | vl_sift_process_next_octave (VlSiftFilt *f) |
Process next octave. | |
VL_EXPORT void | vl_sift_detect (VlSiftFilt *f) |
Detect keypoints. | |
VL_EXPORT int | vl_sift_calc_keypoint_orientations (VlSiftFilt *f, double angles[4], VlSiftKeypoint const *k) |
Calculate the keypoint orientation(s) | |
VL_EXPORT void | vl_sift_calc_keypoint_descriptor (VlSiftFilt *f, vl_sift_pix *descr, VlSiftKeypoint const *k, double angle) |
Compute the descriptor of a keypoint. | |
VL_EXPORT void | vl_sift_calc_raw_descriptor (VlSiftFilt const *f, vl_sift_pix const *image, vl_sift_pix *descr, int widht, int height, double x, double y, double s, double angle0) |
Run the SIFT descriptor on raw data. | |
VL_EXPORT void | vl_sift_keypoint_init (VlSiftFilt const *f, VlSiftKeypoint *k, double x, double y, double sigma) |
Initialize a keypoint from its position and scale. | |
Retrieve data and parameters | |
VL_INLINE int | vl_sift_get_octave_index (VlSiftFilt const *f) |
Get current octave index. | |
VL_INLINE int | vl_sift_get_noctaves (VlSiftFilt const *f) |
Get number of octaves. | |
VL_INLINE int | vl_sift_get_octave_first (VlSiftFilt const *f) |
Get first octave. | |
VL_INLINE int | vl_sift_get_octave_width (VlSiftFilt const *f) |
Get current octave width. | |
VL_INLINE int | vl_sift_get_octave_height (VlSiftFilt const *f) |
Get current octave height. | |
VL_INLINE int | vl_sift_get_nlevels (VlSiftFilt const *f) |
Get number of levels per octave. | |
VL_INLINE int | vl_sift_get_nkeypoints (VlSiftFilt const *f) |
Get number of keypoints. | |
VL_INLINE double | vl_sift_get_peak_thresh (VlSiftFilt const *f) |
Get peaks treashold. | |
VL_INLINE double | vl_sift_get_edge_thresh (VlSiftFilt const *f) |
Get edges threshold. | |
VL_INLINE double | vl_sift_get_norm_thresh (VlSiftFilt const *f) |
Get norm threshold. | |
VL_INLINE double | vl_sift_get_magnif (VlSiftFilt const *f) |
Get the magnification factor. | |
VL_INLINE double | vl_sift_get_window_size (VlSiftFilt const *f) |
Get the Gaussian window size. | |
VL_INLINE vl_sift_pix * | vl_sift_get_octave (VlSiftFilt const *f, int s) |
Get current octave data. | |
VL_INLINE VlSiftKeypoint const * | vl_sift_get_keypoints (VlSiftFilt const *f) |
Get keypoints. | |
Set parameters | |
VL_INLINE void | vl_sift_set_peak_thresh (VlSiftFilt *f, double t) |
Set peaks threshold. | |
VL_INLINE void | vl_sift_set_edge_thresh (VlSiftFilt *f, double t) |
Set edges threshold. | |
VL_INLINE void | vl_sift_set_norm_thresh (VlSiftFilt *f, double t) |
Set norm threshold. | |
VL_INLINE void | vl_sift_set_magnif (VlSiftFilt *f, double m) |
Set the magnification factor. | |
VL_INLINE void | vl_sift_set_window_size (VlSiftFilt *f, double x) |
Set the Gaussian window size. |
SIFT (Scale Invariant Feature Transform (SIFT))
Definition in file sift.h.
typedef float vl_sift_pix |
typedef struct _VlSiftFilt VlSiftFilt |
SIFT filter.
------------------------------------------------------------------ This filter implements the SIFT detector and descriptor.
typedef struct _VlSiftKeypoint VlSiftKeypoint |
SIFT filter keypoint.
------------------------------------------------------------------ This structure represent a keypoint as extracted by the SIFT filter VlSiftFilt.
VL_EXPORT void vl_sift_calc_keypoint_descriptor | ( | VlSiftFilt * | f, |
vl_sift_pix * | descr, | ||
VlSiftKeypoint const * | k, | ||
double | angle0 | ||
) |
Compute the descriptor of a keypoint.
------------------------------------------------------------------
f | SIFT filter. |
descr | SIFT descriptor (output) |
k | keypoint. |
angle0 | keypoint direction. |
The function computes the SIFT descriptor of the keypoint k of orientation angle0. The function fills the buffer descr which must be large enough to hold the descriptor.
The function assumes that the keypoint is on the current octave. If not, it does not do anything.
VL_EXPORT int vl_sift_calc_keypoint_orientations | ( | VlSiftFilt * | f, |
double | angles[4], | ||
VlSiftKeypoint const * | k | ||
) |
Calculate the keypoint orientation(s)
------------------------------------------------------------------
f | SIFT filter. |
angles | orientations (output). |
k | keypoint. |
The function computes the orientation(s) of the keypoint k. The function returns the number of orientations found (up to four). The orientations themselves are written to the vector angles.
k->s
to be in the range s_min+1
and s_max-2
(where usually s_min=0
and s_max=S+2
). If this is not the case, the function returns zero orientations.VL_EXPORT void vl_sift_calc_raw_descriptor | ( | VlSiftFilt const * | f, |
vl_sift_pix const * | grad, | ||
vl_sift_pix * | descr, | ||
int | width, | ||
int | height, | ||
double | x, | ||
double | y, | ||
double | sigma, | ||
double | angle0 | ||
) |
Run the SIFT descriptor on raw data.
------------------------------------------------------------------
f | SIFT filter. |
grad | image gradients. |
descr | SIFT descriptor (output). |
width | image width. |
height | image height. |
x | keypoint x coordinate. |
y | keypoint y coordinate. |
sigma | keypoint scale. |
angle0 | keypoint orientation. |
The function runs the SIFT descriptor on raw data. Here image is a 2 x width x height array (by convention, the memory layout is a s such the first index is the fastest varying one). The first width x height layer of the array contains the gradient magnitude and the second the gradient angle (in radians, between 0 and ). x, y and sigma give the keypoint center and scale respectively.
In order to be equivalent to a standard SIFT descriptor the image gradient must be computed at a smoothing level equal to the scale of the keypoint. In practice, the actual SIFT algorithm makes the following additional approximation, which influence the result:
S
levels.VL_EXPORT void vl_sift_delete | ( | VlSiftFilt * | f | ) |
Delete SIFT filter.
-------------------------------------------------------------------
f | SIFT filter to delete. |
The function frees the resources allocated by vl_sift_new().
VL_EXPORT void vl_sift_detect | ( | VlSiftFilt * | f | ) |
Detect keypoints.
------------------------------------------------------------------ The function detect keypoints in the current octave filling the internal keypoint buffer. Keypoints can be retrieved by vl_sift_get_keypoints().
f | SIFT filter. |
Index GSS
Index matrix A
VL_INLINE double vl_sift_get_edge_thresh | ( | VlSiftFilt const * | f | ) |
VL_INLINE VlSiftKeypoint const * vl_sift_get_keypoints | ( | VlSiftFilt const * | f | ) |
VL_INLINE double vl_sift_get_magnif | ( | VlSiftFilt const * | f | ) |
VL_INLINE int vl_sift_get_nkeypoints | ( | VlSiftFilt const * | f | ) |
VL_INLINE int vl_sift_get_nlevels | ( | VlSiftFilt const * | f | ) |
VL_INLINE int vl_sift_get_noctaves | ( | VlSiftFilt const * | f | ) |
VL_INLINE double vl_sift_get_norm_thresh | ( | VlSiftFilt const * | f | ) |
VL_INLINE vl_sift_pix * vl_sift_get_octave | ( | VlSiftFilt const * | f, |
int | s | ||
) |
Get current octave data.
------------------------------------------------------------------
f | SIFT filter. |
s | level index. |
The level index s ranges in the interval s_min = -1
and s_max = S + 2
, where S
is the number of levels per octave.
VL_INLINE int vl_sift_get_octave_first | ( | VlSiftFilt const * | f | ) |
VL_INLINE int vl_sift_get_octave_height | ( | VlSiftFilt const * | f | ) |
VL_INLINE int vl_sift_get_octave_index | ( | VlSiftFilt const * | f | ) |
VL_INLINE int vl_sift_get_octave_width | ( | VlSiftFilt const * | f | ) |
VL_INLINE double vl_sift_get_peak_thresh | ( | VlSiftFilt const * | f | ) |
VL_INLINE double vl_sift_get_window_size | ( | VlSiftFilt const * | f | ) |
VL_EXPORT void vl_sift_keypoint_init | ( | VlSiftFilt const * | f, |
VlSiftKeypoint * | k, | ||
double | x, | ||
double | y, | ||
double | sigma | ||
) |
Initialize a keypoint from its position and scale.
------------------------------------------------------------------
f | SIFT filter. |
k | SIFT keypoint (output). |
x | x coordinate of the keypoint center. |
y | y coordinate of the keypoint center. |
sigma | keypoint scale. |
The function initializes a keypoint structure k from the location x and y and the scale sigma of the keypoint. The keypoint structure maps the keypoint to an octave and scale level of the discretized Gaussian scale space, which is required for instance to compute the keypoint SIFT descriptor.
The formula linking the keypoint scale sigma to the octave and scale indexes is
In addition to the scale index s (which can be fractional due to scale interpolation) a keypoint has an integer scale index is too (which is the index of the scale level where it was detected in the DoG scale space). We have the constraints (Detector see also the "SIFT detector"):
Thus octave o represents scales . Note that some scales may be represented more than once. For each scale, we select the largest possible octave that contains it, i.e.
and then
In practice, both and are clamped to their feasible range as determined by the SIFT filter parameters.
VL_EXPORT VlSiftFilt* vl_sift_new | ( | int | width, |
int | height, | ||
int | noctaves, | ||
int | nlevels, | ||
int | o_min | ||
) |
Create a new SIFT filter.
------------------------------------------------------------------
width | image width. |
height | image height. |
noctaves | number of octaves. |
nlevels | number of levels per octave. |
o_min | first octave index. |
The function allocates and returns a new SIFT filter for the specified image and scale space geometry.
Setting O to a negative value sets the number of octaves to the maximum possible value depending on the size of the image.
VL_EXPORT int vl_sift_process_first_octave | ( | VlSiftFilt * | f, |
vl_sift_pix const * | im | ||
) |
Start processing a new image.
------------------------------------------------------------------
f | SIFT filter. |
im | image data. |
The function starts processing a new image by computing its Gaussian scale space at the lower octave. It also empties the internal keypoint buffer.
VL_EXPORT int vl_sift_process_next_octave | ( | VlSiftFilt * | f | ) |
Process next octave.
------------------------------------------------------------------
f | SIFT filter. |
The function computes the next octave of the Gaussian scale space. Notice that this clears the record of any feature detected in the previous octave.
VL_INLINE void vl_sift_set_edge_thresh | ( | VlSiftFilt * | f, |
double | t | ||
) |
VL_INLINE void vl_sift_set_magnif | ( | VlSiftFilt * | f, |
double | m | ||
) |
VL_INLINE void vl_sift_set_norm_thresh | ( | VlSiftFilt * | f, |
double | t | ||
) |
VL_INLINE void vl_sift_set_peak_thresh | ( | VlSiftFilt * | f, |
double | t | ||
) |
VL_INLINE void vl_sift_set_window_size | ( | VlSiftFilt * | f, |
double | x | ||
) |
Set the Gaussian window size.
------------------------------------------------------------------
f | SIFT filter. |
x | Gaussian window size (in units of spatial bin). |
This is the parameter of the standard SIFT descriptor Standard SIFT descriptor.