非常教程

Scikit image参考手册

特征 | feature

feature

skimage.feature.blob_dog(image,min_sigma,...)

在给定的灰度图像中查找斑点。

skimage.feature.blob_doh(image,min_sigma,...)

在给定的灰度图像中查找斑点。

skimage.feature.blob_log(image,min_sigma,...)

在给定的灰度图像中查找斑点。

skimage.feature.canny(图片,西格玛,...)

使用Canny算法边缘过滤图像。

skimage.feature.corner_fast(image,n,...)

提取给定图像的FAST角点。

skimage.feature.corner_foerstner(image,sigma)

计算Foerstner角落测量响应图像。

skimage.feature.corner_harris(image,...)

计算哈里斯角度测量响应图像。

skimage.feature.corner_kitchen_rosenfeld(图像)

Compute Kitchen和Rosenfeld角落测量响应图像。

skimage.feature.corner_moravec(图片,...)

计算Moravec角落测量响应图像。

skimage.feature.corner_orientations(图片,...)

计算拐角的方向。

skimage.feature.corner_peaks(image,...)

在角落测量响应图像中找到角点。

skimage.feature.corner_shi_tomasi(image,sigma)

计算Shi-Tomasi(Kanade-Tomasi)角落测量响应图像。

skimage.feature.corner_subpix(图像,角落)

确定拐角的亚像素位置。

skimage.feature.daisy(img,step,radius,...)

为给定图像密集提取DAISY特征描述符。

skimage.feature.draw_multiblock_lbp(img,r,...)

多块本地二进制模式可视化。

skimage.feature.greycomatrix(image,...,...)

计算灰度共生矩阵。

skimage.feature.greycoprops(P,道具)

计算GLCM的纹理属性。

skimage.feature.hessian_matrix(图片,...)

计算Hessian矩阵。

skimage.feature.hessian_matrix_det(image,...)

计算图像上的近似Hessian行列式。

skimage.feature.hessian_matrix_eigvals(Hxx,...)

计算Hessian矩阵的特征值。

skimage.feature.hog(图像,方向,...)

提取给定图像的定向梯度直方图(HOG)。

skimage.feature.local_binary_pattern(image,P,R)

灰度和旋转不变LBP(局部二元模式)。

skimage.feature.match_descriptors(...,...)

描述符的蛮力匹配。

skimage.feature.match_template(图片,模板)

使用归一化相关将模板匹配到2-D或3-D图像。

skimage.feature.multiblock_lbp(int_image,r,...)

多块本地二进制模式(MB-LBP)。

skimage.feature.peak_local_max(图片,...)

在图像中查找峰值作为坐标列表或布尔掩模。

skimage.feature.plot_matches(ax,image1,...)

绘制匹配的功能。

skimage.feature.register_translation(...,...)

通过互相关高效的子像素图像平移配准。

skimage.feature.shape_index(image,sigma,...)

计算形状索引。

skimage.feature.structure_tensor(image,...)

使用平方差和计算结构张量。

skimage.feature.structure_tensor_eigvals(...)

计算结构张量的特征值。

skimage.feature.BRIEF(descriptor_size,...)

简单二进制描述符提取器。

skimage.feature.CENSURE(min_scale,...)

CENSURE关键点检测器。

skimage.feature.ORB(缩放,n_scales,...)

面向快速和旋转的简要特征检测器和二进制描述符提取器。

skimage.feature.blob

skimage.feature.brief

skimage.feature.brief_cy

skimage.feature.censure

skimage.feature.censure_cy

skimage.feature.corner

skimage.feature.corner_cy

skimage.feature.match

skimage.feature.orb

skimage.feature.orb_cy

skimage.feature.peak

skimage.feature.template

skimage.feature.texture

表征图像纹理的方法。

skimage.feature.util

blob_dog

skimage.feature.blob_dog(image, min_sigma=1, max_sigma=50, sigma_ratio=1.6, threshold=2.0, overlap=0.5)[source]

在给定的灰度图像中查找斑点。

使用高斯差分(DoG)方法[R166]找到斑点。对于找到的每个blob,该方法返回其坐标以及检测到blob的高斯内核的标准偏差。

参数:

image:ndarray输入灰度图像,blob被认为是黑暗背景下的亮点(黑色白色)。min_sigma:float,可选高斯内核的最小标准偏差。保持低点以检测更小的斑点。max_sigma:float,可选高斯内核的最大标准偏差。保持这个高点来检测更大的斑点。sigma_ratio:float,可选用于计算高斯差分阈值的高斯核的标准偏差之间的比率:float,可选。尺度空间最大值的绝对下界。小于阈值的局部最大值将被忽略。减少此检测强度较低的斑点。overlap:float,可选值介于0和1之间的值。如果两个斑点的区域重叠大于阈值的一个分数,则会消除较小的斑点。

返回:

A:(n,3)ndarray A 2d数组,每行代表3个值,(y,x,sigma)其中(y,x)是blob的坐标,sigma是检测到blob的高斯内核的标准偏差。

注意

每个斑点的半径大约是(\sqrt{2}sigma)。

参考

R166

(1, 2) http://en.wikipedia.org/wiki/Blob_detection#The_difference_of_Gaussians_approach

例子

>>> from skimage import data, feature
>>> feature.blob_dog(data.coins(), threshold=.5, max_sigma=40)
array([[ 267.      ,  359.      ,   16.777216],
       [ 267.      ,  115.      ,   10.48576 ],
       [ 263.      ,  302.      ,   16.777216],
       [ 263.      ,  245.      ,   16.777216],
       [ 261.      ,  173.      ,   16.777216],
       [ 260.      ,   46.      ,   16.777216],
       [ 198.      ,  155.      ,   10.48576 ],
       [ 196.      ,   43.      ,   10.48576 ],
       [ 195.      ,  102.      ,   16.777216],
       [ 194.      ,  277.      ,   16.777216],
       [ 193.      ,  213.      ,   16.777216],
       [ 185.      ,  347.      ,   16.777216],
       [ 128.      ,  154.      ,   10.48576 ],
       [ 127.      ,  102.      ,   10.48576 ],
       [ 125.      ,  208.      ,   10.48576 ],
       [ 125.      ,   45.      ,   16.777216],
       [ 124.      ,  337.      ,   10.48576 ],
       [ 120.      ,  272.      ,   16.777216],
       [  58.      ,  100.      ,   10.48576 ],
       [  54.      ,  276.      ,   10.48576 ],
       [  54.      ,   42.      ,   16.777216],
       [  52.      ,  216.      ,   16.777216],
       [  52.      ,  155.      ,   16.777216],
       [  45.      ,  336.      ,   16.777216]])

blob_doh

skimage.feature.blob_doh(image, min_sigma=1, max_sigma=30, num_sigma=10, threshold=0.01, overlap=0.5, log_scale=False)[source]

在给定的灰度图像中查找斑点。

使用Hessian方法的行列式[R167]找到斑点。对于找到的每个blob,该方法返回其坐标以及用于行列式检测到blob的Hessian矩阵的高斯内核的标准偏差。Hessians的决定因素用[R168]近似。

参数:

图像:ndarray输入灰度图像。黑色可以是黑暗中的光线,反之亦然。min_sigma:float,可选用于计算Hessian矩阵的高斯内核的最小标准偏差。保持低点以检测更小的斑点。max_sigma:float,可选用于计算Hessian矩阵的高斯内核的最大标准偏差。保持这个高点来检测更大的斑点。num_sigma:int,可选要在min_sigma和max_sigma之间考虑的标准差的中间值数。阈值:浮点,可选。尺度空间最大值的绝对下界。小于阈值的局部最大值将被忽略。减少这个检测不太突出的斑点。overlap:float,可选值介于0和1之间的值。如果两个斑点的区域重叠大于阈值的一个分数,则会消除较小的斑点。

返回:

答:(n,3)ndarray一个二维数组,每行代表3个值,(y,x,sigma)其中(y,x)是blob的坐标,sigma是Hessian矩阵的高斯核的标准偏差其行列式检测到斑点。

注意

每个斑点的半径大约是sigma。Hessians行列式的计算与标准差无关。因此检测较大的斑点不会花费更多时间。在方法线blob_dog()blob_log()高斯较大的计算sigma需要更多的时间。缺点是这种方法不能用于检测半径小于3px由于在Hessian行列式的近似中使用的盒式滤波器而引起的斑点。

参考

R167

(1, 2) http://en.wikipedia.org/wiki/Blob_detection#The_determinant_of_the_Hessian

R168

(1, 2) Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, “SURF: Speeded Up Robust Features” ftp://ftp.vision.ee.ethz.ch/publications/articles/eth_biwi_00517.pdf

例子

>>> from skimage import data, feature
>>> img = data.coins()
>>> feature.blob_doh(img)
array([[ 270.        ,  363.        ,   30.        ],
       [ 265.        ,  113.        ,   23.55555556],
       [ 262.        ,  243.        ,   23.55555556],
       [ 260.        ,  173.        ,   30.        ],
       [ 197.        ,  153.        ,   20.33333333],
       [ 197.        ,   44.        ,   20.33333333],
       [ 195.        ,  100.        ,   23.55555556],
       [ 193.        ,  275.        ,   23.55555556],
       [ 192.        ,  212.        ,   23.55555556],
       [ 185.        ,  348.        ,   30.        ],
       [ 156.        ,  302.        ,   30.        ],
       [ 126.        ,  153.        ,   20.33333333],
       [ 126.        ,  101.        ,   20.33333333],
       [ 124.        ,  336.        ,   20.33333333],
       [ 123.        ,  205.        ,   20.33333333],
       [ 123.        ,   44.        ,   23.55555556],
       [ 121.        ,  271.        ,   30.        ]])

blob_log

skimage.feature.blob_log(image, min_sigma=1, max_sigma=50, num_sigma=10, threshold=0.2, overlap=0.5, log_scale=False)[source]

在给定的灰度图像中查找斑点。

使用高斯拉普拉斯(LoG)方法[R169]找到斑点。对于找到的每个blob,该方法返回其坐标以及检测到blob的高斯内核的标准偏差。

参数:

image:ndarray输入灰度图像,blob被认为是黑暗背景下的亮点(黑色白色)。min_sigma:float,可选高斯内核的最小标准偏差。保持低点以检测更小的斑点。max_sigma:float,可选高斯内核的最大标准偏差。保持这个高点来检测更大的斑点。num_sigma:int,可选要在min_sigma和max_sigma之间考虑的标准差的中间值数。阈值:浮点,可选。尺度空间最大值的绝对下界。小于阈值的局部最大值将被忽略。减少此检测强度较低的斑点。overlap:float,可选值介于0和1之间的值。如果两个斑点的区域重叠大于阈值的一个分数,则会消除较小的斑点。log_scale:布尔,

返回:

A:(n,3)ndarray A 2d数组,每行代表3个值,(y,x,sigma)其中(y,x)是blob的坐标,sigma是检测到blob的高斯内核的标准偏差。

注意

每个斑点的半径大约是(\sqrt{2}sigma)。

参考

R169

(1, 2) http://en.wikipedia.org/wiki/Blob_detection#The_Laplacian_of_Gaussian

示例

>>> from skimage import data, feature, exposure
>>> img = data.coins()
>>> img = exposure.equalize_hist(img)  # improves detection
>>> feature.blob_log(img, threshold = .3)
array([[ 266.        ,  115.        ,   11.88888889],
       [ 263.        ,  302.        ,   17.33333333],
       [ 263.        ,  244.        ,   17.33333333],
       [ 260.        ,  174.        ,   17.33333333],
       [ 198.        ,  155.        ,   11.88888889],
       [ 198.        ,  103.        ,   11.88888889],
       [ 197.        ,   44.        ,   11.88888889],
       [ 194.        ,  276.        ,   17.33333333],
       [ 194.        ,  213.        ,   17.33333333],
       [ 185.        ,  344.        ,   17.33333333],
       [ 128.        ,  154.        ,   11.88888889],
       [ 127.        ,  102.        ,   11.88888889],
       [ 126.        ,  208.        ,   11.88888889],
       [ 126.        ,   46.        ,   11.88888889],
       [ 124.        ,  336.        ,   11.88888889],
       [ 121.        ,  272.        ,   17.33333333],
       [ 113.        ,  323.        ,    1.        ]])

canny

skimage.feature.canny(image, sigma=1.0, low_threshold=None, high_threshold=None, mask=None, use_quantiles=False)[source]

使用Canny算法边缘过滤图像。

参数:

图像:二维数组灰度输入图像检测边缘; 可以是任何dtype。sigma:float高斯滤波器的标准偏差。low_threshold:float滞后阈值的下限(链接边)。如果没有,low_threshold被设置为dtype的最大值的10%。high_threshold:float滞后阈值上限(链接边缘)。如果没有,high_threshold被设置为dtype最大值的20%。mask:array,dtype = bool,可选Mask用于限制Canny对某个区域的应用。use_quantiles:bool,可选如果为True,则将low_threshold和high_threshold视为边缘幅度图像的分位数,而不是绝对边缘幅度值。如果为True,那么阈值必须在0,1范围内。

返回:

输出:2D数组(图像)二进制边缘图。

另请参阅

skimage.sobel

注意

该算法的步骤如下:

  • 使用sigma宽度高斯平滑图像。
  • 应用水平和垂直Sobel算子来获取图像中的渐变。边缘强度是渐变的常态。
  • 薄到1像素宽曲线的潜在边缘。首先,找到每个点的边缘法线。这是通过查看X-Sobel和Y-Sobel的符号和相对大小来将点分为4类:水平,垂直,对角线和反对角线。然后查看正常方向和反向方向,以查看这两个方向中的任何一个的值是否大于所讨论的点。使用插值来获得混合点,而不是选择最接近正常点的点。
  • 执行滞后阈值:首先将高于阈值的所有点标记为边缘。然后递归地标记8个连接到带标记点的低阈值以上的点作为边。

参考

R170

Canny, J., A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis and Machine Intelligence, 8:679-714, 1986

R171

William Green’s Canny tutorial http://dasl.mem.drexel.edu/alumni/bGreen/www.pages.drexel.edu/_weg22/can_tut.html

示例

>>> from skimage import feature
>>> # Generate noisy image of a square
>>> im = np.zeros((256, 256))
>>> im[64:-64, 64:-64] = 1
>>> im += 0.2 * np.random.rand(*im.shape)
>>> # First trial with the Canny filter, with the default smoothing
>>> edges1 = feature.canny(im)
>>> # Increase the smoothing for better results
>>> edges2 = feature.canny(im, sigma=3)

corner_fast

skimage.feature.corner_fast(image, n=12, threshold=0.15)[source]

提取给定图像的FAST角点。

参数:

图像:2D ndarray输入图像。n:int圆圈上的16个像素中连续像素的最小数目,它们应该都是较亮或较暗的测试像素。如果Ic <Ip - 阈值,则圆上的点c是较暗的测试像素p,如果Ic> Ip +阈值则亮。也代表FAST-n转角检测器中的n。threshold:float用于决定圆圈上的像素是否比测试像素更亮,更暗或相似的阈值。当需要更多角落时降低阈值,反之亦然。

返回:

回应:ndarray FAST角落反应图像。

参考

R172

Edward Rosten and Tom Drummond “Machine Learning for high-speed corner detection”, http://www.edwardrosten.com/work/rosten_2006_machine.pdf

R173

Wikipedia, “Features from accelerated segment test”, https://en.wikipedia.org/wiki/Features_from_accelerated_segment_test

例子

>>> from skimage.feature import corner_fast, corner_peaks
>>> square = np.zeros((12, 12))
>>> square[3:9, 3:9] = 1
>>> square.astype(int)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> corner_peaks(corner_fast(square, 9), min_distance=1)
array([[3, 3],
       [3, 8],
       [8, 3],
       [8, 8]])

corner_foerstner

skimage.feature.corner_foerstner(image, sigma=1)[source]

计算Foerstner角落测量响应图像。

该角点检测器使用来自自相关矩阵A的信息:

A = [(imx**2)   (imx*imy)] = [Axx Axy]
    [(imx*imy)   (imy**2)]   [Axy Ayy]

其中imx和imy是一阶导数,用高斯滤波器进行平均。角落测量然后被定义为:

w = det(A) / trace(A)           (size of error ellipse)
q = 4 * det(A) / trace(A)**2    (roundness of error ellipse)

参数:

图像:ndarray输入图像。sigma:float,可选用于高斯核的标准偏差,用作自相关矩阵的加权函数。

返回:

w:ndarray错误椭圆大小。q:ndarray错误椭圆的圆度。

参考

R174

http://www.ipb.uni-bonn.de/uploads/tx_ikgpublication/foerstner87.fast.pdf

R175

http://en.wikipedia.org/wiki/Corner_detection

例子

>>> from skimage.feature import corner_foerstner, corner_peaks
>>> square = np.zeros([10, 10])
>>> square[2:8, 2:8] = 1
>>> square.astype(int)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> w, q = corner_foerstner(square)
>>> accuracy_thresh = 0.5
>>> roundness_thresh = 0.3
>>> foerstner = (q > roundness_thresh) * (w > accuracy_thresh) * w
>>> corner_peaks(foerstner, min_distance=1)
array([[2, 2],
       [2, 7],
       [7, 2],
       [7, 7]])

corner_harris

skimage.feature.corner_harris(image, method='k', k=0.05, eps=1e-06, sigma=1)[source]

计算哈里斯角度测量响应图像。

该角点检测器使用来自自相关矩阵A的信息:

A = [(imx**2)   (imx*imy)] = [Axx Axy]
    [(imx*imy)   (imy**2)]   [Axy Ayy]

其中imx和imy是一阶导数,用高斯滤波器进行平均。角落测量然后被定义为:

det(A) - k * trace(A)**2

要么:

2 * det(A) / (trace(A) + eps)

参数:

图像:ndarray输入图像。方法:{'k','eps'},可选用于从自相关矩阵计算响应图像的方法。k:float,可选灵敏度因子,用于分离边缘的角点,通常范围为0,0.2。较小的k值会导致检测到尖角。eps:float,可选归一化因子(Noble的角点测量)。sigma:float,可选用于高斯核的标准偏差,用作自相关矩阵的加权函数。

返回:

回应:ndarray Harris反应形象。

参考

R176

http://kiwi.cs.dal.ca/~dparks/CornerDetection/harris.htm

R177

http://en.wikipedia.org/wiki/Corner_detection

示例

>>> from skimage.feature import corner_harris, corner_peaks
>>> square = np.zeros([10, 10])
>>> square[2:8, 2:8] = 1
>>> square.astype(int)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> corner_peaks(corner_harris(square), min_distance=1)
array([[2, 2],
       [2, 7],
       [7, 2],
       [7, 7]])

corner_kitchen_rosenfeld

skimage.feature.corner_kitchen_rosenfeld(image, mode='constant', cval=0)[source]

Compute Kitchen和Rosenfeld角落测量响应图像。

角落度量计算如下:

(imxx * imy**2 + imyy * imx**2 - 2 * imxy * imx * imy)
    / (imx**2 + imy**2)

imx和imy是第一个和imxx,imxy,imyy是第二个衍生物。

参数:

图像:ndarray输入图像。模式:{'constant','reflect','wrap','nearest','mirror'},可选如何处理图像边界外的值。cval:float,可选与模式“常​​量”一起使用,即图像边界外的值。

返回:

回应:ndarray Kitchen和Rosenfeld响应形象。

corner_moravec

skimage.feature.corner_moravec(image, window_size=1)[source]

计算Moravec角落测量响应图像。

这是最简单的角落探测器之一,速度相对较快,但有一些限制(例如不是旋转不变)。

参数:

图像:ndarray输入图像。window_size:int,可选的窗口大小。

返回:

回应:ndarray Moravec响应图像。

参考

R178

http://kiwi.cs.dal.ca/~dparks/CornerDetection/moravec.htm

R179

http://en.wikipedia.org/wiki/Corner_detection

例子

>>> from skimage.feature import corner_moravec
>>> square = np.zeros([7, 7])
>>> square[3, 3] = 1
>>> square.astype(int)
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> corner_moravec(square).astype(int)
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 2, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])

corner_orientations

skimage.feature.corner_orientations(image, corners, mask)[source]

计算拐角的方向。

使用一阶中心矩即质量中心法计算拐角的方向。角定位是使用一阶中心矩计算的角点周围局部邻域中的角点坐标与强度矩心之间的角度。

参数:

图像:二维数组输入灰度图像。拐角:(N,2)阵列拐角坐标为(row,col)。mask:二维数组Mask用于定义用于计算中心矩的角点的局部邻域。

返回:

方向:(N,1)阵列角度的方向-pi,pi。

参考

R180

Ethan Rublee, Vincent Rabaud, Kurt Konolige and Gary Bradski “ORB : An efficient alternative to SIFT and SURF” http://www.vision.cs.chubu.ac.jp/CV-R/pdf/Rublee_iccv2011.pdf

R181

Paul L. Rosin, “Measuring Corner Properties” http://users.cs.cf.ac.uk/Paul.Rosin/corner2.pdf

例子

>>> from skimage.morphology import octagon
>>> from skimage.feature import (corner_fast, corner_peaks,
...                              corner_orientations)
>>> square = np.zeros((12, 12))
>>> square[3:9, 3:9] = 1
>>> square.astype(int)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> corners = corner_peaks(corner_fast(square, 9), min_distance=1)
>>> corners
array([[3, 3],
       [3, 8],
       [8, 3],
       [8, 8]])
>>> orientations = corner_orientations(square, corners, octagon(3, 2))
>>> np.rad2deg(orientations)
array([  45.,  135.,  -45., -135.])

corner_peaks

skimage.feature.corner_peaks(image, min_distance=1, threshold_abs=None, threshold_rel=0.1, exclude_border=True, indices=True, num_peaks=inf, footprint=None, labels=None)[source]

在角落测量响应图像中找到角点。

这不同于skimage.feature.peak_local_max它使用相同的累加器值抑制多个连接的峰值。

Parameters:

* : * See skimage.feature.peak_local_max().

例子

>>> from skimage.feature import peak_local_max
>>> response = np.zeros((5, 5))
>>> response[2:4, 2:4] = 1
>>> response
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  1.,  0.],
       [ 0.,  0.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])
>>> peak_local_max(response)
array([[3, 3],
       [3, 2],
       [2, 3],
       [2, 2]])
>>> corner_peaks(response)
array([[2, 2]])

corner_shi_tomasi

skimage.feature.corner_shi_tomasi(image, sigma=1)[source]

计算Shi-Tomasi(Kanade-Tomasi)角落测量响应图像。

该角点检测器使用来自自相关矩阵A的信息:

A = [(imx**2)   (imx*imy)] = [Axx Axy]
    [(imx*imy)   (imy**2)]   [Axy Ayy]

其中imx和imy是一阶导数,用高斯滤波器进行平均。然后将拐角度量定义为A的较小特征值:

((Axx + Ayy) - sqrt((Axx - Ayy)**2 + 4 * Axy**2)) / 2

参数:

图像:ndarray输入图像。sigma:float,可选用于高斯核的标准偏差,用作自相关矩阵的加权函数。

返回:

回应:ndarray Shi-Tomasi反应形象。

参考

R182

http://kiwi.cs.dal.ca/~dparks/CornerDetection/harris.htm

R183

http://en.wikipedia.org/wiki/Corner_detection

例子

>>> from skimage.feature import corner_shi_tomasi, corner_peaks
>>> square = np.zeros([10, 10])
>>> square[2:8, 2:8] = 1
>>> square.astype(int)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> corner_peaks(corner_shi_tomasi(square), min_distance=1)
array([[2, 2],
       [2, 7],
       [7, 2],
       [7, 7]])

corner_subpix

skimage.feature.corner_subpix(image, corners, window_size=11, alpha=0.99)[source]

确定拐角的亚像素位置。

统计测试决定角是否被定义为两个边或单个峰的交集。根据分类结果,子像素角位置基于灰度值的局部协方差来确定。如果统计测试的显着性水平不够,拐角不能被分类,并且输出子像素位置被设置为NaN。

参数:

图像:ndarray输入图像。角:(N,2)ndarray角坐标(行,列)。window_size:int,可选的子像素估计的搜索窗口大小。alpha:float,可选角度分类的意义级别。

返回:

职位:(N,2)ndarray子像素角落位置。NaN用于“未分类”的角落。

参考

R184

http://www.ipb.uni-bonn.de/uploads/tx_ikgpublication/ foerstner87.fast.pdf

R185

http://en.wikipedia.org/wiki/Corner_detection

示例

>>> from skimage.feature import corner_harris, corner_peaks, corner_subpix
>>> img = np.zeros((10, 10))
>>> img[:5, :5] = 1
>>> img[5:, 5:] = 1
>>> img.astype(int)
array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]])
>>> coords = corner_peaks(corner_harris(img), min_distance=2)
>>> coords_subpix = corner_subpix(img, coords, window_size=7)
>>> coords_subpix
array([[ 4.5,  4.5]])

daisy

skimage.feature.daisy(img, step=4, radius=15, rings=3, histograms=8, orientations=8, normalization='l1', sigmas=None, ring_radii=None, visualize=False)[source]

为给定图像密集提取DAISY特征描述符。

DAISY是一种类似于SIFT的特征描述符,其制定方式允许快速密集提取。通常,这对于袋特征图像表示是实用的。

实施遵循Tola等人。[R186]但偏离以下几点:

  • 直方图箱的贡献在色调范围(角度范围)上用圆形高斯窗口平滑。
  • 该代码中空间高斯平滑的西格玛值与Tola等人在原始代码中的西格玛值不匹配。[R187]。在他们的代码中,空间平滑应用于输入图像和中心直方图。但是,这种平滑在[R186]中没有记录,因此省略。

参数:

img:(M,N)数组输入图像(灰度)。步骤:int,可选描述符采样点之间的距离。radius:int,最外层环的可选Radius(以像素为单位)。戒指:int,可选戒指数量。直方图:int,可选每个环采样的直方图数量。方向:int,可选每个直方图的方向数量(bin)。规范化:'l1'| 'l2'| '雏菊'| 'off',可选如何标准化描述符'l1':每个描述符的L1标准化。'l2':每个描述符的L2规范化。'daisy':个体直方图的L2归一化。'关闭':禁用标准化。sigma:浮点数的一维数组,中心直方图和每个直方图环的空间高斯平滑的可选标准偏差。这个sigma数组应该从中心和外面排序。即 第一个西格马值定义中心直方图的空间平滑,最后一个西格玛值定义最外层环的空间平滑。指定sigmas将覆盖以下参数。rings = len(sigma) - 1 ring_radii:int的一维数组,每个环可选的半径(以像素为单位)。指定ring_radii将覆盖以下两个参数。rings = len(ring_radii)radius = ring_radii-1如果同时给出sigma和ring_radii,则它们必须满足以下谓词,因为中心直方图不需要半径。len(ring_radii)== len(sigma)+ 1 visualize:bool,可选生成DAISY描述符的可视化 rings = len(sigma) - 1 ring_radii:int的一维数组,每个环可选的半径(以像素为单位)。指定ring_radii将覆盖以下两个参数。rings = len(ring_radii)radius = ring_radii-1如果同时给出sigma和ring_radii,则它们必须满足以下谓词,因为中心直方图不需要半径。len(ring_radii)== len(sigma)+ 1 visualize:bool,可选生成DAISY描述符的可视化 rings = len(sigma) - 1 ring_radii:int的一维数组,每个环可选的半径(以像素为单位)。指定ring_radii将覆盖以下两个参数。rings = len(ring_radii)radius = ring_radii-1如果同时给出sigma和ring_radii,则它们必须满足以下谓词,因为中心直方图不需要半径。len(ring_radii)== len(sigma)+ 1 visualize:bool,可选生成DAISY描述符的可视化

返回:

descs:数组给定图像的DAISY描述符的网格,作为数组维数(P,Q,R)其中P = ceil((M-半径* 2)/步长)Q = ceil((N - radius * 2)/ step )R =(rings *直方图+ 1)*方向descs_img:(M,N,3)数组(仅当可视化== True时)DAISY描述符的可视化。

  • 'l1':L1标准化每个描述符。
  • 'l2':每个描述符的L2规范化。
  • 'daisy':个体直方图的L2归一化。
  • 'off':禁用标准化。

sigma:1D浮点数组,可选

中心直方图和每个直方图环的空间高斯平滑的标准偏差。这个sigma数组应该从中心和外面排序。即第一个西格马值定义中心直方图的空间平滑,最后一个西格玛值定义最外环的空间平滑。指定sigmas将覆盖以下参数。

rings = len(sigmas) - 1

ring_radii:int的1D数组,可选

每个环的半径(以像素为单位)。指定ring_radii将覆盖以下两个参数。

rings = len(ring_radii) radius = ring_radii[-1]

如果同时给出sigma和ring_radii,则它们必须满足以下谓词,因为中心直方图不需要半径。

len(ring_radii) == len(sigmas) + 1

可视化:bool, optional

生成DAISY描述符的可视化

Returns:  **descs** : array

给定图像的DAISY描述符网格作为数组维数(P,Q,R)其中

P = ceil((M - radius*2) / step) Q = ceil((N - radius*2) / step) R = (rings * histograms + 1) * orientations

descs_img : (M, N, 3) array (only if visualize==True)

DAISY描述符的可视化。

参考

R186

(1, 2, 3) Tola et al. “Daisy: An efficient dense descriptor applied to wide- baseline stereo.” Pattern Analysis and Machine Intelligence, IEEE Transactions on 32.5 (2010): 815-830.

R187

(1, 2) http://cvlab.epfl.ch/software/daisy

draw_multiblock_lbp

skimage.feature.draw_multiblock_lbp(img, r, c, width, height, lbp_code=0, color_greater_block=[1, 1, 1], color_less_block=[0, 0.69, 0.96], alpha=0.5)[source]

多块本地二进制模式可视化。

具有较高和的块用α混合的白色矩形着色,而具有较低和的块用彩色α混合的青色着色。颜色和alpha参数可以更改。

参数:

img:float或uint的图标用于可视化图案的图像。r:int包含要素的矩形的左上角的行坐标。c:int包含要素的矩形的左上角的列坐标。width:int将用于计算要素的9个相等矩形之一的宽度。height:int将用于计算要素的9个相等矩形之一的高度。lbp_code:int要显示的功能的描述符。如果未提供,则将使用具有0值的描述符。color_greater_block:3个浮点数列表指定具有较大强度值的块的颜色。它们应该在0,1范围内。对应的值定义(R,G,B)值。默认值是白色1,1,1. color_greater_block:3个花车列表花车指定具有较大强度值的花色的颜色。它们应该在0,1范围内。对应的值定义(R,G,B)值。默认值是青色0,0.69,0.96。alpha:float指定可视化不透明度的范围0,1中的值。1 - 完全透明,0 - 不透明。

返回:

输出:使用MB-LBP可视化的浮点图像。

参考

R188

Face Detection Based on Multi-Block LBP Representation. Lun Zhang, Rufeng Chu, Shiming Xiang, Shengcai Liao, Stan Z. Li http://www.cbsr.ia.ac.cn/users/scliao/papers/Zhang-ICB07-MBLBP.pdf

greycomatrix

skimage.feature.greycomatrix(image, distances, angles, levels=None, symmetric=False, normed=False)[source]

计算灰度共生矩阵。

灰度级共生矩阵是图像上给定偏移处的共生灰度值的直方图。

参数:

image:array_like整型输入图像。只支持正值图像。如果type不是uint8,则需要设置参数级别。距离:array_like像素对距离偏移列表。angles:array_like以弧度表示的像素对角度列表。levels:int,可选输入图像应该包含0和level-1的整数,其中level指示计数的灰度数(对于8位图像通常为256)。该参数对于16位或更高的图像是必需的,通常是图像的最大值。由于输出矩阵至少为x水平,因此可能最好使用输入图像的分档而不是较大的水平值。symmetric:bool,可选如果为True,则输出矩阵P:,:,d,theta是对称的。这是通过忽略值对的顺序来实现的,所以(i,j)和(j,i)在给定偏移量时遇到(i,j)时被累加。默认值是False。normed:bool,可选如果为True,则将每个矩阵P:,:,d,theta除以给定偏移量的累计同现事件总数。结果矩阵的元素总和为1.默认值为False。

返回:

P:4-D ndarray灰度共生直方图。值Pi,j,d,theta是灰度级j在距离d和与灰度级i成角度θ时出现的次数。如果normed为False,则输出为uint32类型,否则为float64。尺寸是:水平x水平x距离数量x角度数量。

参考

R189

The GLCM Tutorial Home Page, http://www.fp.ucalgary.ca/mhallbey/tutorial.htm

R190

Pattern Recognition Engineering, Morton Nadler & Eric P. Smith

R191

Wikipedia, http://en.wikipedia.org/wiki/Co-occurrence_matrix

示例

计算2个GLCM:一个用于向右偏移1像素,另一个向上偏移1像素。

>>> image = np.array([[0, 0, 1, 1],
...                   [0, 0, 1, 1],
...                   [0, 2, 2, 2],
...                   [2, 2, 3, 3]], dtype=np.uint8)
>>> result = greycomatrix(image, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4],
...                       levels=4)
>>> result[:, :, 0, 0]
array([[2, 2, 1, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 1],
       [0, 0, 0, 1]], dtype=uint32)
>>> result[:, :, 0, 1]
array([[1, 1, 3, 0],
       [0, 1, 1, 0],
       [0, 0, 0, 2],
       [0, 0, 0, 0]], dtype=uint32)
>>> result[:, :, 0, 2]
array([[3, 0, 2, 0],
       [0, 2, 2, 0],
       [0, 0, 1, 2],
       [0, 0, 0, 0]], dtype=uint32)
>>> result[:, :, 0, 3]
array([[2, 0, 0, 0],
       [1, 1, 2, 0],
       [0, 0, 2, 1],
       [0, 0, 0, 0]], dtype=uint32)

greycoprops

skimage.feature.greycoprops(P, prop='contrast')[source]

计算GLCM的纹理属性。

计算灰度共生矩阵的特征以作为矩阵的紧凑总结。属性计算如下:

  • ‘contrast’: (\sum_{i,j=0}^{levels-1} P_{i,j}(i-j)^2)
  • ‘dissimilarity’: (\sum_{i,j=0}^{levels-1}P_{i,j}|i-j|)
  • ‘homogeneity’: (\sum_{i,j=0}^{levels-1}\frac{P_{i,j}}{1+(i-j)^2})
  • ‘ASM’: (\sum_{i,j=0}^{levels-1} P_{i,j}^2)
  • ‘energy’: (\sqrt{ASM})
  • ‘correlation’: [\sum_{i,j=0}^{levels-1} P_{i,j}\left\frac{(i-\mu_i) \ (j-\mu_j)}{\sqrt{(\sigma_i^2)(\sigma_j^2)}}\right]

参数:

P:ndarray输入数组。P是计算指定属性的灰度共生直方图。值Pi,j,d,theta是灰度级j在距离d和与灰度级i成角度θ时出现的次数。prop:{'contrast','dissimilarity','homogeneity','energy','correlation','ASM'},可选GLCM的特性来计算。默认值是'对比'。

返回:

结果:2-D ndarray 2维阵列。resultd,a是第d个距离和第a个角度的属性'prop'。

参考

R192

The GLCM Tutorial Home Page, http://www.fp.ucalgary.ca/mhallbey/tutorial.htm

例子

计算距离为1,2和角度为0度,90度的GLCM的对比度

>>> image = np.array([[0, 0, 1, 1],
...                   [0, 0, 1, 1],
...                   [0, 2, 2, 2],
...                   [2, 2, 3, 3]], dtype=np.uint8)
>>> g = greycomatrix(image, [1, 2], [0, np.pi/2], levels=4,
...                  normed=True, symmetric=True)
>>> contrast = greycoprops(g, 'contrast')
>>> contrast
array([[ 0.58333333,  1.        ],
       [ 1.25      ,  2.75      ]])

hessian_matrix

skimage.feature.hessian_matrix(image, sigma=1, mode='constant', cval=0, order=None)[source]

计算Hessian矩阵。

Hessian矩阵定义如下:

H = [Hrr Hrc]
    [Hrc Hcc]

其是通过将图像与高斯内核的二阶导数在相应的x方向和y方向上卷积来计算的。

参数:

图像:ndarray输入图像。sigma:float用于高斯核的标准偏差,用作自相关矩阵的加权函数。模式:{'constant','reflect','wrap','nearest','mirror'},可选如何处理图像边界外的值。cval:float,可选与模式“常​​量”一起使用,即图像边界外的值。顺序:{'xy','rc'},可选此参数允许在梯度计算中使用图像轴的反向或正向顺序。'xy'表示最初使用最后一个轴(Hxx,Hxy,Hyy),而'rc'表示最初使用第一个轴(Hrr,Hrc,Hcc)。

返回:

Hrr:输入图像中每个像素的Hessian矩阵的ndarray元素。Hrc:输入图像中每个像素的Hessian矩阵的ndarray元素。Hcc:输入图像中每个像素的Hessian矩阵的ndarray元素。

示例

>>> from skimage.feature import hessian_matrix
>>> square = np.zeros((5, 5))
>>> square[2, 2] = 4
>>> Hrr, Hrc, Hcc = hessian_matrix(square, sigma=0.1, order = 'rc')
>>> Hrc
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0., -1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0., -1.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

hessian_matrix_det

skimage.feature.hessian_matrix_det(image, sigma=1)[source]

计算图像上的近似Hessian行列式。

该方法使用整体图像上的盒滤波器来计算近似的Hessian行列式,如[R193]中所述。

参数:

image:array计算Hessian行列式的图像。sigma:float,可选用于高斯内核的标准偏差,用于Hessian矩阵。

返回:

out:array Hessians行列式的数组。

注意

此方法的运行时间仅取决于图像的大小。它sigma与人们所期望的无关。缺点是sigma小于的结果3不准确,即与计算Hessian并将其作为行列式的结果不相似。

参考

R193

(1, 2) Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, “SURF: Speeded Up Robust Features” ftp://ftp.vision.ee.ethz.ch/publications/articles/eth_biwi_00517.pdf

hessian_matrix_eigvals

skimage.feature.hessian_matrix_eigvals(Hxx, Hxy, Hyy)[source]

计算Hessian矩阵的特征值。

参数:

Hxx:输入图像中每个像素的Hessian矩阵的ndarray元素。Hxy:输入图像中每个像素的Hessian矩阵的元素。Hyy:输入图像中每个像素的Hessian矩阵的元素。

返回:

l1:每个输入矩阵的较大特征值。l2:每个输入矩阵的较小特征值。

例子

>>> from skimage.feature import hessian_matrix, hessian_matrix_eigvals
>>> square = np.zeros((5, 5))
>>> square[2, 2] = 4
>>> Hxx, Hxy, Hyy = hessian_matrix(square, sigma=0.1, order='rc')
>>> hessian_matrix_eigvals(Hxx, Hxy, Hyy)[0]
array([[ 0.,  0.,  2.,  0.,  0.],
       [ 0.,  1.,  0.,  1.,  0.],
       [ 2.,  0., -2.,  0.,  2.],
       [ 0.,  1.,  0.,  1.,  0.],
       [ 0.,  0.,  2.,  0.,  0.]])

hog

skimage.feature.hog(image, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(3, 3), block_norm='L1', visualise=False, transform_sqrt=False, feature_vector=True, normalise=None)[source]

提取给定图像的定向梯度直方图(HOG)。

计算面向梯度的直方图(HOG)

  1. (可选)全局图像标准化

2. 在x和y中计算渐变图像

3. 计算梯度直方图

4. 正常化块

5. 展平成一个特征向量

参数:

图像:(M,N)ndarray输入图像(灰度)。方向:int,可选方向箱的数量。pixels_per_cell:2元组(int,int),可选的单元格大小(以像素为单位)。cells_per_block:2元组(int,int),可选每个块中的单元格数。block_norm:str {'L1','L1-sqrt','L2','L2-Hys'},可选块归一化方法:L1使用L1范数进行归一化。(默认)L1-sqrt使用L1-norm进行归一化,然后是平方根。L2规范化使用L2范数。使用L2范数进行L2-Hys归一化,然后将最大值限制为0.2(Hys代表滞后)并使用L2范数重新归一化。有关详细信息,请参阅R196,R197。可视化:布尔,可选还返回HOG的图像。transform_sqrt:bool,可选应用幂法压缩以在处理前对图像进行归一化。如果图像包含负值,请不要使用它。另请参阅下面的注释部分。feature_vector:bool,可选通过在返回前对结果调用.ravel()来返回数据作为特征向量。normalize:bool,不赞成参数已弃用。使用transform_sqrt进行幂法压缩。规范化已被弃用。

返回:

newarr:ndarray HOG将图像视为一维(展平)阵列。hog_image:ndarray(if visualize = True)HOG图像的可视化。

注意

所提出的代码实现了从[R195]的HOG提取方法,其具有以下变化:(I)使用(3,3)单元的块((2,2));(II)单元内没有平滑(高斯空间窗口sigma = 8pix在论文中);(III)使用L1块标准化(本文中的L2-Hys)。

幂律压缩也称为伽玛校正,用于减少阴影和光照变化的影响。压缩使黑暗区域变得更轻。当kwarg transform_sqrt设置为True,该函数计算每个颜色通道的平方根,然后将宏算法应用于图像。

参考

R194

http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients

R195

(1, 2) Dalal, N and Triggs, B, Histograms of Oriented Gradients for Human Detection, IEEE Computer Society Conference on Computer Vision and Pattern Recognition 2005 San Diego, CA, USA, https://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf, DOI:10.1109/CVPR.2005.177

R196

(1, 2) Lowe, D.G., Distinctive image features from scale-invatiant keypoints, International Journal of Computer Vision (2004) 60: 91, http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf, DOI:10.1023/B:VISI.0000029664.99615.94

R197

(1, 2) Dalal, N, Finding People in Images and Videos, Human-Computer Interaction cs.HC, Institut National Polytechnique de Grenoble - INPG, 2006, https://tel.archives-ouvertes.fr/tel-00390303/file/NavneetDalalThesis.pdf

local_binary_pattern

skimage.feature.local_binary_pattern(image, P, R, method='default')[source]

灰度和旋转不变LBP(局部二元模式)。

LBP是一种可用于纹理分类的不变描述符。

参数:

图像:(N,M)阵列Graylevel图像。P:int圆对称邻居设置点的数量(角度空间的量化)。R:float圆的半径(操作员的空间分辨率)。方法:{'default','ror','uniform','var'}确定模式的方法。'default':原始的局部二值模式,它是灰度但不是旋转不变的。'ror':扩展灰度和旋转不变的默认实现。'uniform':改进的旋转不变性和均匀的模式以及角度空间的更精细的量化,灰度和旋转不变。'nri_uniform':非旋转不变的均匀图案变体,它只是灰度不变的R199。'VAR':

返回:

输出:(N,M)阵列LBP图像。

  • 'default':原始的局部二值模式,它是灰度但不是旋转不变的。
  • 'ror':扩展灰度和旋转不变的默认实现。
  • 'uniform':改进的旋转不变性和均匀的模式以及角度空间的更精细的量化,灰度和旋转不变。
  • 'nri_uniform':非旋转不变统一模式变体,它只是灰度不变的[R199]。
  • 'var':旋转不变方差测量局部图像纹理的对比度,其是旋转但不是灰度不变的。
Returns:  **output** : (N, M) array

LBP图像。

参考

R198

Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns. Timo Ojala, Matti Pietikainen, Topi Maenpaa. http://www.rafbis.it/biplab15/images/stories/docenti/Danielriccio/Articoliriferimento/LBP.pdf, 2002.

R199

(1, 2) Face recognition with local binary patterns. Timo Ahonen, Abdenour Hadid, Matti Pietikainen, http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.214.6851, 2004.

match_descriptors

skimage.feature.match_descriptors(descriptors1, descriptors2, metric=None, p=2, max_distance=inf, cross_check=True)[source]

描述符的蛮力匹配。

对于第一组中的每个描述符,该匹配器在第二组中找到最接近的描述符(在启用交叉检查的情况下反之亦然)。

参数:

描述符1:(M,P)数组关于第一个图像中的M个关键点的大小为P的二进制描述符。描述符2:(N,P)数组关于第二图像中的N个关键点的大小为P的二进制描述符。metric:{'euclidean','cityblock','minkowski','hamming',...}计算两个描述符之间距离的度量。有关所有可能的类型,请参阅scipy.spatial.distance.cdist。汉明距离应该用于二进制描述符。默认情况下,L2范数用于dtype float或double的所有描述符,汉明距离自动用于二进制描述符。p:int适用于metric ='minkowski'的p范数。max_distance:float单独图像中两个关键点的描述符之间的最大允许距离被视为匹配。cross_check:bool如果为True,

返回:

匹配:(Q,2)array在第一和第二组描述符中的相应匹配的索引,其中匹配:,0表示第一组中的索引并且匹配:1,第二组描述符中的索引。

match_template

skimage.feature.match_template(image, template, pad_input=False, mode='constant', constant_values=0)[source]

使用归一化相关将模板匹配到2-D或3-D图像。

输出是一个数值介于-1.0和1.0之间的数组。给定位置处的值对应于图像和模板之间的相关系数。

对于pad_input=True匹配对应于中心,否则对应于模板的左上角。要找到最佳匹配,您必须在响应(输出)图像中搜索峰值。

参数:

图像:(M,N,D)阵列二维或三维输入图像。模板:(m,n,d)数组要定位的模板。它必须是(m <= M,n <= N,d <= D)。pad_input:bool如果为True,则填充图像以便输出与图像大小相同,并且输出值对应于模板中心。否则,对于(M,N)图像和(m,n)模板,输出是具有形状(M-m + 1,N-n + 1)的数组,并且匹配对应于原点(左上角)的模板。模式:参见numpy.pad,可选填充模式。constant_values:参见numpy.pad,可选常数值与mode ='constant'结合使用。

返回:

输出:具有相关系数的数组响应图像。

注意

有关互相关的细节在[R200]中介绍。该实现使用图像和模板的FFT卷积。参考文献[R201]提出了类似的推导,但本文中提供的近似值并未用于我们的实现。

参考

R200

(1, 2) J. P. Lewis, “Fast Normalized Cross-Correlation”, Industrial Light and Magic.

R201

(1, 2) Briechle and Hanebeck, “Template Matching using Fast Normalized Cross Correlation”, Proceedings of the SPIE (2001). DOI:10.1117/12.421129

例子

>>> template = np.zeros((3, 3))
>>> template[1, 1] = 1
>>> template
array([[ 0.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  0.]])
>>> image = np.zeros((6, 6))
>>> image[1, 1] = 1
>>> image[4, 4] = -1
>>> image
array([[ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0., -1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.]])
>>> result = match_template(image, template)
>>> np.round(result, 3)
array([[ 1.   , -0.125,  0.   ,  0.   ],
       [-0.125, -0.125,  0.   ,  0.   ],
       [ 0.   ,  0.   ,  0.125,  0.125],
       [ 0.   ,  0.   ,  0.125, -1.   ]])
>>> result = match_template(image, template, pad_input=True)
>>> np.round(result, 3)
array([[-0.125, -0.125, -0.125,  0.   ,  0.   ,  0.   ],
       [-0.125,  1.   , -0.125,  0.   ,  0.   ,  0.   ],
       [-0.125, -0.125, -0.125,  0.   ,  0.   ,  0.   ],
       [ 0.   ,  0.   ,  0.   ,  0.125,  0.125,  0.125],
       [ 0.   ,  0.   ,  0.   ,  0.125, -1.   ,  0.125],
       [ 0.   ,  0.   ,  0.   ,  0.125,  0.125,  0.125]])

multiblock_lbp

skimage.feature.multiblock_lbp(int_image, r, c, width, height)[source]

多块本地二进制模式(MB-LBP)。

这些特征的计算方式与局部二进制模式(LBPs)类似(local_binary_pattern()除了使用求和块代替单个像素值外)。

MB-LBP是LBP的一个扩展,可以使用积分图像在多个比例尺的恒定时间内进行计算。使用九个相同大小的矩形来计算特征。对于每个矩形,计算像素强度的总和。这些总和与中央矩形的总和的比较决定了该特征,类似于LBP。

参数:

int_image:(N,M)数组积分图像。r:int包含要素的矩形的左上角的行坐标。c:int包含要素的矩形的左上角的列坐标。width:int将用于计算要素的9个相等矩形之一的宽度。height:int将用于计算要素的9个相等矩形之一的高度。

返回:

输出:int 8位MB-LBP特征描述符。

参考

R202

Face Detection Based on Multi-Block LBP Representation. Lun Zhang, Rufeng Chu, Shiming Xiang, Shengcai Liao, Stan Z. Li http://www.cbsr.ia.ac.cn/users/scliao/papers/Zhang-ICB07-MBLBP.pdf

peak_local_max

skimage.feature.peak_local_max(image, min_distance=1, threshold_abs=None, threshold_rel=None, exclude_border=True, indices=True, num_peaks=inf, footprint=None, labels=None, num_peaks_per_label=inf)[source]

在图像中查找峰值作为坐标列表或布尔掩模。

峰值是一个区域内的局部最大值2 * min_distance + 1(即峰值至少分开min_distance)。

如果峰值是平坦的(即多个相邻像素具有相同的强度),则返回所有这些像素的坐标。

如果同时threshold_absthreshold_rel提供,最高的两个选择为峰的最小强度阈值。

参数:

图像:ndarray输入图像。min_distance:int,可选在2 * min_distance + 1范围内分隔峰的最小像素数(即峰间隔至少为min_distance)。要找到最大数量的峰值,请使用min_distance = 1。threshold_abs:float,可选最小峰值强度。默认情况下,绝对阈值是图像的最小强度。threshold_rel:float,可选最小峰值强度,以max(image)* threshold_rel计算。exclude_border:int,可选如果非零,exclude_border会从图像边界的exclude_border-pixels内排除峰值。indices:bool,可选如果为True,则输出将是代表峰值坐标的数组。如果为False,那么输出将是一个布尔型数组,形状为具有出现在True元素上的峰值的image.shape。num_peaks:int,可选最大数量的峰值。当峰值数量超过num_peaks时,根据最高峰值强度返回num_peaks峰值。footprint:bools的ndarray,可选如果提供,footprint == 1代表图像中每个点搜索峰的局部区域。覆盖min_distance(也适用于exclude_border)。标签:ints的ndarray,可选如果提供,每个唯一区域标签==值表示搜索峰的唯一区域。零被保留用于背景。num_peaks_per_label:int,可选每个标签的最大峰值数量。覆盖min_distance(也适用于exclude_border)。标签:ints的ndarray,可选如果提供,每个唯一区域标签==值表示搜索峰的唯一区域。零被保留用于背景。num_peaks_per_label:int,可选每个标签的最大峰值数量。覆盖min_distance(也适用于exclude_border)。标签:ints的ndarray,可选如果提供,每个唯一区域标签==值表示搜索峰的唯一区域。零被保留用于背景。num_peaks_per_label:int,可选每个标签的最大峰值数量。

返回:

输出:bools的ndarray或ndarray如果indices = True:(行,列,...)坐标。如果indices = False:布尔数组形如图像,峰值由True值表示。

  • 如果indices = True:(row, column, …)坐标的峰值。
  • 如果indices = False:布尔数组形状类似image,峰值由True值表示。

注意

峰值局部最大值函数返回图像中局部峰值(最大值)的坐标。最大过滤器用于查找局部最大值。该操作会扩大原始图像。比较扩张后的图像和原始图像后,该函数返回扩张图像等于原始图像的峰值的坐标或蒙版。

例子

>>> img1 = np.zeros((7, 7))
>>> img1[3, 4] = 1
>>> img1[3, 2] = 1.5
>>> img1
array([[ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  1.5,  0. ,  1. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ]])
>>> peak_local_max(img1, min_distance=1)
array([[3, 4],
       [3, 2]])
>>> peak_local_max(img1, min_distance=2)
array([[3, 2]])
>>> img2 = np.zeros((20, 20, 20))
>>> img2[10, 10, 10] = 1
>>> peak_local_max(img2, exclude_border=0)
array([[10, 10, 10]])

plot_matches

skimage.feature.plot_matches(ax, image1, image2, keypoints1, keypoints2, matches, keypoints_color='k', matches_color=None, only_matches=False)[source]

绘制匹配的功能。

参数:

斧:matplotlib.axes.Axes匹配和图像绘制在这个斧头。image1:(N,M,3)数组第一个灰度或彩色图像。image2:(N,M,3)数组第二灰度或彩色图像。关键点1:(K1,2)数组第一个关键点坐标为(row,col)。keypoints2:(K2,2)数组第二个关键点坐标为(row,col)。匹配:(Q,2)array在第一和第二组描述符中的相应匹配的索引,其中匹配:,0表示第一组中的索引并且匹配:1,第二组描述符中的索引。keypoints_color:matplotlib颜色,可选关键点位置的颜色。matches_color:matplotlib颜色,可选颜色,用于连接关键点匹配的线条。默认情况下,颜色是随机选择的。only_matches:bool,可选是否只绘制匹配而不绘制关键点位置。

register_translation

skimage.feature.register_translation(src_image, target_image, upsample_factor=1, space='real')[source]

通过互相关高效的子像素图像平移配准。

此代码在计算时间的一小部分中提供与FFT上采样互相关相同的精度,并且具有更低的存储器要求。它通过FFT获得互相关峰值的初始估计值,然后通过利用矩阵乘法DFT仅在该估计值的小邻域中对DFT进行上采样来提高移位估计。

参数:

src_image:ndarray参考图像。target_image:ndarray要注册的映像。必须与src_image具有相同的维度。upsample_factor:int,可选的上采样因子。图像将被注册到像素的1 / upsample_factor内。例如upsample_factor == 20意味着图像将被记录在一个像素的1/20之内。默认值为1(无上采样)空格:字符串,“真实”或“傅立叶”之一,可选定义算法如何解释输入数据。“真实”意味着数据将被FFT'd来计算相关性,而“fourier”数据将绕过输入数据的FFT。不区分大小写。

返回:

移位:使用src_image注册target_image所需的移位向量(以像素为单位)。轴顺序与numpy(例如Z,Y,X)错误一致:float src_image和target_image之间的平移不变规范化RMS错误。phasediff:float两幅图像之间的全局相位差(如果图像非负,应该为零)。

参考

R203

Manuel Guizar-Sicairos, Samuel T. Thurman, and James R. Fienup, “Efficient subpixel image registration algorithms,” Optics Letters 33, 156-158 (2008). DOI:10.1364/OL.33.000156

R204

James R. Fienup, “Invariant error metrics for image reconstruction” Optics Letters 36, 8352-8357 (1997). DOI:10.1364/AO.36.008352

shape_index

skimage.feature.shape_index(image, sigma=1, mode='constant', cval=0)[source]

计算形状索引。

由Koenderink&van Doorn [R205]定义的形状指数是局部曲率的单值测量,假设图像是一个强度代表高度的3D平面。

它来源于Hessian的特征值,它的取值范围从-1到1(在平坦区域中是未定义的(= NaN)),下面的范围表示以下形状:

Interval (s in …)

Shape

[ -1, -7/8)

Spherical cup

[-7/8, -5/8)

Through

[-5/8, -3/8)

Rut

[-3/8, -1/8)

Saddle rut

[-1/8, +1/8)

Saddle

[+1/8, +3/8)

Saddle ridge

[+3/8, +5/8)

Ridge

[+5/8, +7/8)

Dome

+7/8, +1

Spherical cap

参数:

图像:ndarray输入图像。sigma:float,可选用于高斯核的标准偏差,用于在计算Hessian特征值之前平滑输入数据。模式:{'constant','reflect','wrap','nearest','mirror'},可选如何处理图像边界外的值cval:float,可选与模式'constant'一起使用,图像边界。

返回:

s:ndarray形状索引

参考

R205

(1, 2) Koenderink, J. J. & van Doorn, A. J., “Surface shape and curvature scales”, Image and Vision Computing, 1992, 10, 557-564. DOI:10.1016/0262-8856(92)90076-F

例子

>>> from skimage.feature import shape_index
>>> square = np.zeros((5, 5))
>>> square[2, 2] = 4
>>> s = shape_index(square, sigma=0.1)
>>> s
array([[ nan,  nan, -0.5,  nan,  nan],
       [ nan, -0. ,  nan, -0. ,  nan],
       [-0.5,  nan, -1. ,  nan, -0.5],
       [ nan, -0. ,  nan, -0. ,  nan],
       [ nan,  nan, -0.5,  nan,  nan]])

structure_tensor

skimage.feature.structure_tensor(image, sigma=1, mode='constant', cval=0)[source]

使用平方差和计算结构张量。

结构张量A定义为:

A = [Axx Axy]
    [Axy Ayy]

其通过图像中每个像素周围的局部窗口中的差的平方加权和来近似。

参数:

图像:ndarray输入图像。sigma:float,可选用于高斯核的标准偏差,用作局部平方和差分的加权函数。模式:{'constant','reflect','wrap','nearest','mirror'},可选如何处理图像边界外的值。cval:float,可选与模式“常​​量”一起使用,即图像边界外的值。

返回:

Axx:输入图像中每个像素的结构张量的ndarray元素。Axy:输入图像中每个像素的结构张量的ndarray元素。Ayy:输入图像中每个像素的结构张量的ndarray元素。

例子

>>> from skimage.feature import structure_tensor
>>> square = np.zeros((5, 5))
>>> square[2, 2] = 1
>>> Axx, Axy, Ayy = structure_tensor(square, sigma=0.1)
>>> Axx
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  1.,  0.],
       [ 0.,  4.,  0.,  4.,  0.],
       [ 0.,  1.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

structure_tensor_eigvals

skimage.feature.structure_tensor_eigvals(Axx, Axy, Ayy)[source]

计算结构张量的特征值。

参数:

Axx:输入图像中每个像素的结构张量的ndarray元素。Axy:输入图像中每个像素的结构张量的ndarray元素。Ayy:输入图像中每个像素的结构张量的ndarray元素。

返回:

l1:每个输入矩阵的较大特征值。l2:每个输入矩阵的较小特征值。

示例

>>> from skimage.feature import structure_tensor, structure_tensor_eigvals
>>> square = np.zeros((5, 5))
>>> square[2, 2] = 1
>>> Axx, Axy, Ayy = structure_tensor(square, sigma=0.1)
>>> structure_tensor_eigvals(Axx, Axy, Ayy)[0]
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  2.,  4.,  2.,  0.],
       [ 0.,  4.,  0.,  4.,  0.],
       [ 0.,  2.,  4.,  2.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

BRIEF

class skimage.feature.BRIEF(descriptor_size=256, patch_size=49, mode='normal', sigma=1, sample_seed=1)[source]

Bases: skimage.feature.util.DescriptorExtractor

简单二进制描述符提取器。

简述(二进制稳健独立基本特征)是一种高效的特征点描述符。即使使用相对较少的位,它也具有高度区分性,并且使用简单的强度差异测试进行计算。

对于每个关键点,对特定分布数量的N个像素对进行强度比较,得到长度为N的二进制描述符。对于二进制描述符,可以使用汉明距离进行特征匹配,这导致与L2规范。

参数:

descriptor_size:int,每个关键点可选的BRIEF描述符的大小。尺寸128,256和512由作者推荐。默认值为256. patch_size:int,可选关键点周围的二维方形贴片采样区域的长度。默认值是49. mode:{'normal','uniform'},可选概率分布,用于确定关键点周围像素对的位置。sample_seed:int,可选的Seed用于决定像素对的随机采样。从长度为patch_size的方形窗口中,使用模式参数对像素对进行采样,以使用强度比较来构建描述符。在构建描述符时,sample_seed的值必须与要匹配的图像相同。西格玛:浮动,

示例

>>> from skimage.feature import (corner_harris, corner_peaks, BRIEF,
...                              match_descriptors)
>>> import numpy as np
>>> square1 = np.zeros((8, 8), dtype=np.int32)
>>> square1[2:6, 2:6] = 1
>>> square1
array([[0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)
>>> square2 = np.zeros((9, 9), dtype=np.int32)
>>> square2[2:7, 2:7] = 1
>>> square2
array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)
>>> keypoints1 = corner_peaks(corner_harris(square1), min_distance=1)
>>> keypoints2 = corner_peaks(corner_harris(square2), min_distance=1)
>>> extractor = BRIEF(patch_size=5)
>>> extractor.extract(square1, keypoints1)
>>> descriptors1 = extractor.descriptors
>>> extractor.extract(square2, keypoints2)
>>> descriptors2 = extractor.descriptors
>>> matches = match_descriptors(descriptors1, descriptors2)
>>> matches
array([[0, 0],
       [1, 1],
       [2, 2],
       [3, 3]])
>>> keypoints1[matches[:, 0]]
array([[2, 2],
       [2, 5],
       [5, 2],
       [5, 5]])
>>> keypoints2[matches[:, 1]]
array([[2, 2],
       [2, 6],
       [6, 2],
       [6, 6]])

属性

描述

((Q,descriptor_size)D型细胞布尔阵列)大小descriptor_size对于Q关键点的二进制描述符的2D ndarray的索引(i,j)的在与值滤除边界关键点之后或者是真或假表示用于强度比较的结果第j个决策像素对上的第i个关键点。它是Q == np.sum(掩码)。

面具

((N,)dtype bool数组)掩码指示关键点是否被过滤掉(False)或描述符数组中描述(True)。

__init__(descriptor_size=256, patch_size=49, mode='normal', sigma=1, sample_seed=1)[source]extract(image, keypoints)[source]

为图像中的给定关键点提取简要二进制描述符。

参数:

image : 2D array Input image. keypoints : (N, 2) array Keypoint coordinates as (row, col).

CENSURE

class skimage.feature.CENSURE(min_scale=1, max_scale=7, mode='DoB', non_max_threshold=0.15, line_threshold=10)[source]

Bases: skimage.feature.util.FeatureDetector

CENSURE关键点检测器。

min_scale : int, optional从中提取关键点的最小比例。max_scale : int, optional从中提取关键点的最大比例。除了第一个和最后一个,即从范围min_scale + 1,max_scale - 1中的标度中,关键点将从所有标度中提取。不同标度的过滤器尺寸使得两个相邻标度包含一个八度。mode : {‘DoB’, ‘Octagon’, ‘STAR’}, optional用于获取输入图像比例的双层过滤器类型。可能的值是'DoB','Octagon'和'STAR'。这三种模式分别表示双层滤光片的形状,即盒子(方形),八边形和星形。例如,双层八角形滤波器由较小的内八边形和较大的外八边形组成,其中内部八边形的滤波器权重均匀为负,而在差异区域中均匀为正。使用STAR和Octagon以获得更好的功能,使用DoB以获得更好的性能。non_max_threshold : float, optional阈值用于抑制非最大抑制后获得的弱幅度响应的最大值和最小值。line_threshold : float, optional拒绝具有大于此值的主曲率比率的兴趣点的阈值。

参考

R206

Motilal Agrawal, Kurt Konolige and Morten Rufus Blas “CENSURE: Center Surround Extremas for Realtime Feature Detection and Matching”, http://link.springer.com/content/pdf/10.1007%2F978-3-540-88693-8_8.pdf

R207

Adam Schmidt, Marek Kraft, Michal Fularz and Zuzanna Domagala “Comparative Assessment of Point Feature Detectors and Descriptors in the Context of Robot Navigation” http://www.jamris.org/01_2013/saveas.php?QUEST=JAMRIS_No01_2013_P_11-20.pdf

例子

>>> from skimage.data import astronaut
>>> from skimage.color import rgb2gray
>>> from skimage.feature import CENSURE
>>> img = rgb2gray(astronaut()[100:300, 100:300])
>>> censure = CENSURE()
>>> censure.detect(img)
>>> censure.keypoints
array([[  4, 148],
       [ 12,  73],
       [ 21, 176],
       [ 91,  22],
       [ 93,  56],
       [ 94,  22],
       [ 95,  54],
       [100,  51],
       [103,  51],
       [106,  67],
       [108,  15],
       [117,  20],
       [122,  60],
       [125,  37],
       [129,  37],
       [133,  76],
       [145,  44],
       [146,  94],
       [150, 114],
       [153,  33],
       [154, 156],
       [155, 151],
       [184,  63]])
>>> censure.scales
array([2, 6, 6, 2, 4, 3, 2, 3, 2, 6, 3, 2, 2, 3, 2, 2, 2, 3, 2, 2, 4, 2, 2])

属性

关键点

((N,2)数组)关键点坐标为(row,col)。

((N,)数组)对应的尺度。

__init__(min_scale=1, max_scale=7, mode='DoB', non_max_threshold=0.15, line_threshold=10)[source]detect(image)[source]

检测CENSURE关键点以及相应的比例尺。

Parameters:

image : 2D ndarray Input image.

ORB

class skimage.feature.ORB(downscale=1.2, n_scales=8, n_keypoints=500, fast_n=9, fast_threshold=0.08, harris_k=0.04)[source]

Bases: skimage.feature.util.FeatureDetector, skimage.feature.util.DescriptorExtractor

面向快速和旋转的简要特征检测器和二进制描述符提取器。

参数:

n_keypoints:int,可选要返回的关键点数。如果检测到超过n个关键点,该函数将根据Harris角点响应返回最佳n_关键点。如果不是,则返回所有检测到的关键点。fast_n:int,可选在skimage.feature.corner_fast中的n参数。圆圈上的16个像素中连续像素的最小数量,应该都是较亮或较暗的测试像素。如果Ic <Ip - 阈值,则圆上的点c是较暗的测试像素p,如果Ic> Ip +阈值则亮。也代表FAST-n转角检测器中的n。fast_threshold:float,可选feature.corner_fast中的阈值参数。阈值用于决定圆圈上的像素是否比测试像素更亮,更暗或相似。当需要更多角落时降低阈值,反之亦然。harris_k:float,可选在skimage.feature.corner_harris中的k参数。从边缘分离拐角的灵敏度因子,通常范围为0,0.2。较小的k值会导致检测到尖角。缩小比例:浮动,图像金字塔的可选缩放因子。选择默认值1.2,以便存在更多的密度比例,从而为后续特征描述启用鲁棒的比例不变性。n_scales:int,可选图像金字塔底部的最大缩放数量,用于从中提取要素。浮动,图像金字塔的可选缩放因子。选择默认值1.2,以便存在更多的密度比例,从而为后续特征描述启用鲁棒的比例不变性。n_scales:int,可选图像金字塔底部的最大缩放数量,用于从中提取要素。浮动,图像金字塔的可选缩放因子。选择默认值1.2,以便存在更多的密度比例,从而为后续特征描述启用鲁棒的比例不变性。n_scales:int,可选图像金字塔底部的最大缩放数量,用于从中提取要素。

参考

R208

Ethan Rublee, Vincent Rabaud, Kurt Konolige and Gary Bradski “ORB: An efficient alternative to SIFT and SURF” http://www.vision.cs.chubu.ac.jp/CV-R/pdf/Rublee_iccv2011.pdf

例子

>>> from skimage.feature import ORB, match_descriptors
>>> img1 = np.zeros((100, 100))
>>> img2 = np.zeros_like(img1)
>>> np.random.seed(1)
>>> square = np.random.rand(20, 20)
>>> img1[40:60, 40:60] = square
>>> img2[53:73, 53:73] = square
>>> detector_extractor1 = ORB(n_keypoints=5)
>>> detector_extractor2 = ORB(n_keypoints=5)
>>> detector_extractor1.detect_and_extract(img1)
>>> detector_extractor2.detect_and_extract(img2)
>>> matches = match_descriptors(detector_extractor1.descriptors,
...                             detector_extractor2.descriptors)
>>> matches
array([[0, 0],
       [1, 1],
       [2, 2],
       [3, 3],
       [4, 4]])
>>> detector_extractor1.keypoints[matches[:, 0]]
array([[ 42.,  40.],
       [ 47.,  58.],
       [ 44.,  40.],
       [ 59.,  42.],
       [ 45.,  44.]])
>>> detector_extractor2.keypoints[matches[:, 1]]
array([[ 55.,  53.],
       [ 60.,  71.],
       [ 57.,  53.],
       [ 72.,  55.],
       [ 58.,  57.]])

属性

关键点

((N,2)数组)关键点坐标为(row,col)。

((N,)数组)对应的尺度。

方向

((N,)数组)相应的弧度方向。

回复

((N,)数组)对应的哈里斯角落响应。

描述

((Q,descriptor_size)dtype bool数组)二维二元描述符数组二维描述符的二维数组描述符,用于在过滤掉索引(i,j)处的值为边界关键点的Q个关键点的大小描述符大小为True或False,表示强度比较结果第j个决策像素对上的第i个关键点。它是Q == np.sum(掩码)。

__init__(downscale=1.2, n_scales=8, n_keypoints=500, fast_n=9, fast_threshold=0.08, harris_k=0.04)[source]detect(image)[source]

检测面向FAST的关键点以及相应的比例尺。

参数:

图像:二维数组输入图像。

detect_and_extract(image)[source]

检测面向FAST的关键点并提取rBRIEF描述符。

请注意,这是不是第一次调用更快detect,然后extract

参数:

图像:二维数组输入图像。

extract(image, keypoints, scales, orientations)[source]

为图像中给定的关键点提取rBRIEF二进制描述符。

需要注意的是关键点必须使用相同的提取downscalen_scales参数。另外,如果你想提取关键点和描述符,你应该使用更快的detect_and_extract

参数:

图像:二维数组输入图像。关键点:(N,2)数组关键点坐标为(行,列)。尺度:(N,)数组对应的尺度。方位:(N,)阵列弧度相应的方位。

特征 | feature相关

Scikit image

Scikit-image 是用于图像处理的 Python 包,使用原生的 NumPy 数组作为图像对象。

主页 http://scikit-image.org/
源码 https://github.com/scikit-image/scikit-image
发布版本 0.13.1