主要内容

本页采用了机器翻译。点击此处可查看英文原文。

extractFeatures

提取兴趣点描述符

说明

[features,validPoints] = extractFeatures(I,points) 从二值图像或灰度图像中提取特征向量(也称为特征描述符)及其对应的位置。

该函数从兴趣点周围的像素中提取描述子。这些像素代表并匹配由单点位置指定的特征。每个点都指定了一个邻域的中心位置。所采用的描述符提取方法取决于输入 points 的类别。

示例

[features,validPoints] = extractFeatures(I,points,Name=Value) 支持上述语法中的任何参量组合,且可使用一个或多个名称-值参量指定选项。例如,extractFeatures(I,points,Method="Block") 将用于提取描述符的方法设置为 Block

示例

示例

全部折叠

读取图像。

I = imread("cameraman.tif");

从图像中查找并提取角点特征。

corners = detectHarrisFeatures(I);
[features,valid_corners] = extractFeatures(I,corners);

显示图像。

figure;
imshow(I); 
hold on

绘制有效角点。

plot(valid_corners);

Figure contains an axes object. The hidden axes object contains 2 objects of type image, line. One or more of the lines displays its values using only markers

读取图像。

I = imread("cameraman.tif");

从输入图像中查找并提取特征。

points = detectSURFFeatures(I);
[features,valid_points] = extractFeatures(I,points);

显示并绘制十个最强的 SURF 特征。

figure;
imshow(I);
hold on;
plot(valid_points.selectStrongest(10),showOrientation=true);

Figure contains an axes object. The hidden axes object contains 3 objects of type image, line. One or more of the lines displays its values using only markers

读取图像。

I = imread("cameraman.tif");

使用 MSER 特征检测算法在图像中查找特征。

regions = detectMSERFeatures(I);
[features,valid_points] = extractFeatures(I,regions,Upright=true);

显示与 MSER 椭圆中心相对应的特征。

figure;
imshow(I);
hold on;
plot(valid_points,showOrientation=true);

Figure contains an axes object. The hidden axes object contains 3 objects of type image, line. One or more of the lines displays its values using only markers

输入参数

全部折叠

输入图像,指定为二值图像或二维灰度图像。

数据类型: logical | single | double | int16 | uint8 | uint16

正方形邻域的中心位置点,以一个 M 行 2 列的矩阵形式指定,该矩阵包含 M 个 [x y] 坐标,或者以 Point Feature Types 中描述的点要素对象之一的形式指定。下表列出了可用于提取的点可能的输入类别。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: extractFeatures(I,points,Method="Block") 将用于提取描述符的方法设置为 Block

特征描述符提取方法,指定为Point Feature Types"Auto" 中描述的点特征对象之一。

下表描述了该函数如何实现描述符提取方法:

方法特征向量(描述符)
SIFT

尺度不变特征变换 (SIFT)。

该函数将 validPoints 输出对象的 Orientation 属性设置为提取特征的朝向,单位为弧度。

BRISK

二进制稳健不变可扩展关键点 (BRISK)。

该函数将 validPoints 输出对象的 Orientation 属性设置为提取特征的朝向,单位为弧度。

FREAK

快速视网膜关键点 (FREAK)。

该函数将 validPoints 输出对象的 Orientation 属性设置为提取特征的朝向,单位为弧度。

SURF

加速稳健特征 (SURF)。

该函数将 validPoints 输出对象的 Orientation 属性设置为提取特征的朝向,单位为弧度。

当您对 MSERRegions 对象调用 SURF 方法时,该对象的 Centroid 属性会提取 SURF 描述符。该对象的 Axes 属性用于选择 SURF 描述子的尺度,使得代表该特征的圆的面积与 MSER 椭圆的面积成正比。该刻度按 1/4*sqrt((majorAxes/2).*(minorAxes/2)) 进行计算,并根据 SURFPoints 对象的要求饱和至 1.6

ORB

定向 FAST 和旋转 BRIEF (ORB) 特征。

validPoints 输出对象的 Orientation 属性会自动设置为输入对象 ORBPointspoints 属性的 Orientation 属性。

KAZE

基于非线性金字塔的特征。

该函数将 validPoints 输出对象的 Orientation 属性设置为提取特征的朝向,单位为弧度。

当您对 MSERRegions 对象调用 KAZE 方法时,将使用该对象的 Location 属性来提取 KAZE 描述符。

该对象的 Axes 属性用于选择 KAZE 描述子的缩放比例,使得代表该特征的圆的面积与 MSER 椭圆的面积成比例。

Block

简单的正方形邻域。

Block 方法仅提取完全位于图像边界之内的邻域。因此,输出 validPoints 所包含的点数可能少于输入 POINTS

Auto

该函数根据输入点的类别选择 Method,并实现以下功能:

针对 cornerPoints 输入对象的 FREAK 方法。
针对 SURFPointsMSERRegions 输入对象的 SURF 方法。
针对 BRISKPoints 输入对象的 BRISK 方法。
针对 ORBPoints 输入对象的 ORB 方法。

对于一个由 [x y] 个坐标组成的 M×2 输入矩阵,该函数实现了 Block 方法。

注意

如果输入 points 是一个 ORBPoints 对象,则描述符提取方法必须是 ORB。此外,除了 ORBPoints 之外,ORB 描述符提取方法不支持任何其他类别的点。

块大小,指定为奇数整数标量。该值定义了以每个兴趣点为中心、由 BlockSizeBlockSize 构成的局部正方形邻域。此选项仅在该函数实现了 Block 方法时才适用。

旋转不变性标志,指定为一个逻辑标量。将此属性设置为 true 时,系统不会估计特征向量的方向,并将特征方向设置为 π/2。当不需要图像描述符捕获旋转信息时,请将此参数设置为 true。将此属性设置为 false 时,系统会估算要素的方向,随后这些要素将对旋转保持不变。

注意

如果输入 points 是一个 ORBPoints 对象,则不支持旋转不变性标志 "Upright"

特征向量(特征描述符)的长度,指定为 64128。此选项仅在该函数实现了 SURFKAZE 方法时才适用。128 更大的特征尺寸虽然能提高精度,但会降低特征匹配速度。

输出参量

全部折叠

特征向量,以 binaryFeatures 对象或 M 行 × N 列的 M 特征向量矩阵的形式返回,也称为特征描述符。每个描述符的长度为 N

features 中与每个输出特征向量(特征描述符)关联的有效点,以与输入相同的格式返回。有效点可以是坐标为 [x,y] 的 M×2 矩阵,也可以是 Point Feature Types 中描述的点特征对象之一。

该函数从每个兴趣点周围的区域中提取描述子。如果该区域位于图像之外,或者兴趣点距离图像边缘过近,则该函数无法计算特征描述符。在这种情况下,该函数会忽略该点。该分数未包含在有效分数的输出中。

对于 SIFT 特征,可以在同一位置提取多个特征描述符,但这些特征描述符的方向各不相同。因此,validPoints 返回的点数可以大于或等于 extractFeatures 的输入点数。对于除 SIFT 特征以外的输入点特征,validPoints 的值可以小于或等于输入点的数量。

参考

[1] G. Bradski and A. Kaehler, Learning OpenCV : Computer Vision with the OpenCV Library, O'Reilly, Sebastopol, CA, 2008.

[2] Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008

[3] Bay, Herbert, Andreas Ess, Tinne Tuytelaars, and Luc Van Gool, "SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008.

[4] Alahi, Alexandre, Ortiz, Raphael, and Pierre Vandergheynst, "FREAK: Fast Retina Keypoint", IEEE Conference on Computer Vision and Pattern Recognition, 2012.

[5] Alcantarilla, P.F., A. Bartoli, and A.J. Davison. "KAZE Features", ECCV 2012, Part VI, LNCS 7577 pp. 214, 2012

扩展功能

全部展开

版本历史记录

在 R2011a 中推出