当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python skimage.feature.SIFT用法及代码示例


用法:

class skimage.feature.SIFT(upsampling=2, n_octaves=8, n_scales=3, sigma_min=1.6, sigma_in=0.5, c_dog=0.013333333333333334, c_edge=10, n_bins=36, lambda_ori=1.5, c_max=0.8, lambda_descr=6, n_hist=4, n_ori=8)

基础:skimage.feature.util.FeatureDetectorskimage.feature.util.DescriptorExtractor

SIFT 特征检测和说明符提取。

参数

upsamplingint 可选

在特征检测之前,图像被放大 1 倍(无放大)、2 或 4。方法:Bi-cubic 插值。

n_octavesint 可选

最大八度音阶数。每增加一个八度,图像大小减半,sigma 加倍。八度音阶的数量将根据需要减少,以在最小比例下沿每个维度保持至少 12 个像素。

n_scalesint 可选

每个八度音阶的最大音阶数。

sigma_min浮点数,可选

种子图像的模糊级别。如果启用了上采样 sigma_min 按因子 1/上采样进行缩放

sigma_in浮点数,可选

输入图像的假定模糊级别。

c_dog浮点数,可选

DoG中丢弃低对比度极值的阈值它的最终值取决于n_scales的关系:final_c_dog = (2^(1/n_scales)-1) /(2^(1/3)-1) * c_dog

c_edge浮点数,可选

丢弃位于边的极值的阈值。如果 H 是极值的 Hessian,则其 “edgeness” 由 tr(H)²/det(H) 说明。如果边度高于 (c_edge + 1)²/c_edge,则丢弃极值。

n_binsint 可选

直方图中说明关键点周围梯度方向的 bin 数量。

lambda_ori浮点数,可选

用于查找关键点参考方向的窗口的宽度为 6 * lambda_ori * sigma,并由 2 * lambda_ori * sigma 的标准差加权。

c_max浮点数,可选

方向直方图中的次峰被接受为方向的阈值

lambda_descr浮点数,可选

用于定义关键点说明符的窗口具有 2 * lambda_descr * sigma * (n_hist+1)/n_hist 的宽度,并由 lambda_descr * sigma 的标准差加权。

n_histint 可选

用于定义关键点说明符的窗口由 n_hist * n_hist 直方图组成。

n_oriint 可选

说明符补丁的直方图中的 bin 数量。

注意

SIFT 算法由 David Lowe [1][2] 开发,后来获得了不列颠哥伦比亚大学的专利。由于该专利于 2020 年到期,因此可以免费使用。此处的实现紧跟 [3] 中的详细说明,包括使用相同的默认参数。

参考

1

D.G. Lowe. “Object recognition from local scale-invariant features”, Proceedings of the Seventh IEEE International Conference on Computer Vision, 1999, vol.2, pp. 1150-1157. DOI:10.1109/ICCV.1999.790410

2

D.G. Lowe. “Distinctive Image Features from Scale-Invariant Keypoints”, International Journal of Computer Vision, 2004, vol. 60, pp. 91-110. DOI:10.1023/B:VISI.0000029664.99615.94

3

I. R. Otero and M. Delbracio. “Anatomy of the SIFT Method”, Image Processing On Line, 4 (2014), pp. 370-396. DOI:10.5201/ipol.2014.82

例子

>>> from skimage.feature import SIFT, match_descriptors
>>> from skimage.data import camera
>>> from skimage.transform import rotate
>>> img1 = camera()
>>> img2 = rotate(camera(), 90)
>>> detector_extractor1 = SIFT()
>>> detector_extractor2 = SIFT()
>>> detector_extractor1.detect_and_extract(img1)
>>> detector_extractor2.detect_and_extract(img2)
>>> matches = match_descriptors(detector_extractor1.descriptors,
...                             detector_extractor2.descriptors,
...                             max_ratio=0.6)
>>> matches[10:15]
array([[ 10, 412],
       [ 11, 417],
       [ 12, 407],
       [ 13, 411],
       [ 14, 406]])
>>> detector_extractor1.keypoints[matches[10:15, 0]]
array([[ 95, 214],
       [ 97, 211],
       [ 97, 218],
       [102, 215],
       [104, 218]])
>>> detector_extractor2.keypoints[matches[10:15, 1]]
array([[297,  95],
       [301,  97],
       [294,  97],
       [297, 102],
       [293, 104]])

属性

delta_min浮点数

第一个八度的采样距离。它的最终值为 1/上采样。

float_dtype类型

图像的数据类型。

scalespace_sigmas(n_octaves, n_scales + 3) 数组

所有八度音阶中所有音阶的 sigma 值。

keypoints(N, 2) 数组

关键点坐标为 (row, col)

positions(N, 2) 数组

Subpixel-precision 关键点坐标为 (row, col)

sigmas(N, ) 数组

关键点的相应 sigma(模糊)值。

scales(N, ) 数组

关键点的相应比例。

orientations(N, ) 数组

每个关键点周围的渐变方向。

octaves(N, ) 数组

关键点的对应八度。

descriptors(N, n_hist*n_hist*n_ori) 数组

关键点的说明符。

相关用法


注:本文由纯净天空筛选整理自scikit-image.org大神的英文原创作品 skimage.feature.SIFT。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。