/** @file sift.c
** @brief SIFT - Definition
** @author Andrea Vedaldi
**/
/*
Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
All rights reserved.
This file is part of the VLFeat library and is made available under
the terms of the BSD license (see the COPYING file).
*/
/**
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@page sift Scale Invariant Feature Transform (SIFT)
@author Andrea Vedaldi
@par "Credits:" May people have contributed with suggestions and bug
reports. Although the following list is certainly incomplete, we would
like to thank: Wei Dong, Loic, Giuseppe, Liu, Erwin, P. Ivanov, and
Q. S. Luo.
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@ref sift.h implements a @ref sift-usage "SIFT filter object", a
reusable object to extract SIFT features @cite{lowe99object} from one
or multiple images.
- @ref sift-intro
- @ref sift-intro-detector
- @ref sift-intro-descriptor
- @ref sift-intro-extensions
- @ref sift-usage
- @ref sift-tech
- @ref sift-tech-ss
- @ref sift-tech-detector
- @ref sift-tech-detector-peak
- @ref sift-tech-detector-edge
- @ref sift-tech-detector-orientation
- @ref sift-tech-descriptor
- @ref sift-tech-descriptor-can
- @ref sift-tech-descriptor-image
- @ref sift-tech-descriptor-std
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@section sift-intro Overview
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
A SIFT feature is a selected image region (also called keypoint) with
an associated descriptor. Keypoints are extracted by the <b>@ref
sift-intro-detector "SIFT detector"</b> and their descriptors are
computed by the <b>@ref sift-intro-descriptor "SIFT descriptor"</b>. It is
also common to use independently the SIFT detector (i.e. computing the
keypoints without descriptors) or the SIFT descriptor (i.e. computing
descriptors of custom keypoints).
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@subsection sift-intro-detector SIFT detector
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@sa
@ref sift-tech-ss "Scale space technical details",
@ref sift-tech-detector "Detector technical details"
A SIFT <em>keypoint</em> is a circular image region with an
orientation. It is described by a geometric <em>frame</em> of four
parameters: the keypoint center coordinates @e x and @e y, its @e
scale (the radius of the region), and its @e orientation (an angle
expressed in radians). The SIFT detector uses as keypoints image
structures which resemble “blobs”. By searching for blobs
at multiple scales and positions, the SIFT detector is invariant (or,
more accurately, covariant) to translation, rotations, and rescaling
of the image.
The keypoint orientation is also determined from the local image
appearance and is covariant to image rotations. Depending on the
symmetry of the keypoint appearance, determining the orientation can
be ambiguous. In this case, the SIFT detectors returns a list of up to
four possible orientations, constructing up to four frames (differing
only by their orientation) for each detected image blob.
@image html sift-frame.png "SIFT keypoints are circular image regions with an orientation."
There are several parameters that influence the detection of SIFT
keypoints. First, searching keypoints at multiple scales is obtained
by constructing a so-called “Gaussian scale space”. The
scale space is just a collection of images obtained by progressively
smoothing the input image, which is analogous to gradually reducing
the image resolution. Conventionally, the smoothing level is called
<em>scale</em> of the image. The construction of the scale space is
influenced by the following parameters, set when creating the SIFT
filter object by ::vl_sift_new():
- <b>Number of octaves</b>. Increasing the scale by an octave means
doubling the size of the smoothing kernel, whose effect is roughly
equivalent to halving the image resolution. By default, the scale
space spans as many octaves as possible (i.e. roughly <code>
log2(min(width,height)</code>), which has the effect of searching
keypoints of all possible sizes.
- <b>First octave index</b>. By convention, the octave of index 0
starts with the image full resolution. Specifying an index greater
than 0 starts the scale space at a lower resolution (e.g. 1 halves
the resolution). Similarly, specifying a negative index starts the
scale space at an higher resolution image, and can be useful to
extract very small features (since this is obtained by interpolating
the input image, it does not make much sense to go past -1).
- <b>Number of levels per octave</b>. Each octave is sampled at this
given number of intermediate scales (by default 3). Increasing this
number might in principle return more refined keypoints, but in
practice can make their selection unstable due to noise (see [1]).
Keypoints are further refined by eliminating those that are likely to
be unstable, either because they are selected nearby an image edge,
rather than an image blob, or are found on image structures with low
contrast. Filtering is controlled by the follow:
- <b>Peak threshold.</b> This is the minimum amount of contrast to
accept a keypoint. It is set by configuring the SIFT filter object
by ::vl_sift_set_peak_thresh().
- <b>Edge threshold.</b> This is the edge rejection threshold. It is
set by configuring the SIFT filter object by
::vl_sift_set_edge_thresh().
<table>
<caption>Summary of the parameters influencing the SIFT detector.</caption>
<tr style="font-weight:bold;">
<td>Parameter</td>
<td>See also</td>
<td>Controlled by</td>
<td>Comment</td>
</tr>
<tr>
<td>number of octaves</td>
<td> @ref sift-intro-detector </td>
<td>::vl_sift_new</td>
<td></td>
</tr>
<tr>
<td>first octave index</td>
<td> @ref sift-intro-detector </td>
<td>::vl_sift_new</td>
<td>set to -1 to extract very small features</td>
</tr>
<tr>
<td>number of scale levels per octave</td>
<td> @ref sift-intro-detector </td>
<td>::vl_sift_new</td>
<td>can affect the number of extracted keypoints</td>
</tr>
<tr>
<td>edge threshold</td>
<td> @ref sift-intro-detector </td>
<td>::vl_sift_set_edge_thresh</td>
<td>decrease to eliminate more keypoints</td>
</tr>
<tr>
<td>peak threshold</td>
<td> @ref sift-intro-detector </td>
<td>::vl_sift_set_peak_thresh</td>
<td>increase to eliminate more keypoints</td>
</tr>
</table>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@subsection sift-intro-descriptor SIFT Descriptor
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
@sa @ref sift-tech-descriptor "Descriptor technical details"
A SIFT descriptor is a 3-D spatial histogram of the image gradients in
characterizing the appearance of a keypoint. The gradient at each
pixel is regarded as a sample of a three-dimensional elementary
feature vector, formed by the pixel location and the gradient
orientation. Samples are weighed by the gradient norm and accumulated
in a 3-D histogram @em h, which (up to normalization and clamping)
forms the SIFT descriptor of the region. An additional Gaussian
weighting function is applied to give less importance to gradients
farther away from the keypoint center. Orientations are quantized into
eight bins and the spatial coordinates into four each, as follows:
@image html sift-descr-easy.png "The SIFT descriptor is a spatial histogram of the image gradient."
SIFT descriptors are computed by either calling
::vl_sift_calc_keypoint_descriptor or
::vl_sift_calc_raw_descriptor. They accept as input a keypoint
frame, which specifies the descriptor center, its size, and its
orientation on the image plane. The following parameters influence the
descriptor calculation:
- <b>magnification factor</b>. The descriptor size is determined by
multiplying the keypoint scale by this factor. It is set
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
matchSIFT_三维重建_SIFT算法_ (1793个子文件)
sift.1 5KB
mser.1 4KB
vlfeat.7 3KB
aib 10KB
aib 9KB
aib 9KB
aib 8KB
vlfeat.bib 3KB
sift.c 71KB
kmeans.c 52KB
generic.c 32KB
mser.c 29KB
sift.c 26KB
dsift.c 24KB
imopv.c 23KB
kdtree.c 23KB
aib.c 21KB
vl_alldist2.c 17KB
homkermap.c 17KB
mser.c 17KB
vl_sift.c 14KB
host.c 14KB
quickshift.c 14KB
slic.c 14KB
pgm.c 14KB
pegasos.c 13KB
mathop.c 12KB
stringop.c 11KB
vl_imsmooth.c 10KB
vl_mser.c 9KB
getopt_long.c 9KB
vl_kmeans.c 9KB
rodrigues.c 9KB
lbp.c 9KB
vl_pegasos.c 9KB
vl_dsift.c 8KB
vl_ubcmatch.c 8KB
mathop_sse2.c 8KB
imopv_sse2.c 7KB
hikmeans.c 7KB
vl_aib.c 7KB
vl_siftdescriptor.c 7KB
vl_localmax.c 7KB
random.c 6KB
ikmeans.c 6KB
vl_inthist.c 6KB
vl_ihashsum.c 6KB
vl_hikmeanspush.c 6KB
vl_imwbackwardmx.c 6KB
vl_hikmeans.c 6KB
vl_alldist.c 6KB
array.c 6KB
vl_erfill.c 6KB
vl_homkermap.c 5KB
vl_kdtreequery.c 5KB
vl_twister.c 5KB
vl_kdtreebuild.c 5KB
vl_ikmeans.c 4KB
vl_ihashfind.c 4KB
vl_slic.c 4KB
vl_aibhist.c 4KB
test_heap-def.c 4KB
vl_imdisttf.c 4KB
vl_binsum.c 4KB
test_stringop.c 4KB
vl_quickshift.c 4KB
vl_ikmeanspush.c 4KB
vl_samplinthist.c 3KB
vl_imintegral.c 3KB
test_imopv.c 3KB
vl_lbp.c 2KB
test_getopt_long.c 2KB
vl_irodr.c 2KB
vl_rodr.c 2KB
test_threads.c 2KB
vl_tpsumx.c 2KB
vl_binsearch.c 2KB
vl_version.c 2KB
test_mathop.c 2KB
test_vec_comp.c 2KB
aib.c 1KB
test_mathop_abs.c 1KB
vl_simdctrl.c 985B
vl_getpid.c 852B
test_nan.c 823B
test_qsort-def.c 785B
test_rand.c 722B
test_host.c 419B
doxygen.conf 73KB
COPYING 1KB
doxygen.css 18KB
doxygen.css 18KB
doxygen.css 15KB
web.css 7KB
web.css 7KB
pygmentize.css 3KB
pygmentize.css 3KB
tabs.css 1KB
xhtml1.dcl 7KB
vl_binsum.def 8KB
共 1793 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
资源评论
- tiandavis602022-03-23用户下载后在一定时间内未进行评价,系统默认好评。
周玉坤举重
- 粉丝: 63
- 资源: 4780
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功