MATLAB 中多图像的 SURF 描述符与匹配
SURF Descriptor and Matching for Multiple Image in Matlab
我正在使用 matlab 进行基于内容的图像检索项目
当我应用函数 point=detectSURFFeatures(image)
我得到 83*1
个具有以下信息的冲浪点:
`Scale: [83x1 single]
SignOfLaplacian: [83x1 int8]
Orientation: [83x1 single]
Location: [83x2 single]
Metric: [83x1 single]
Count: 83`
我需要知道如何提取一个(独特且固定的)特征向量来表示包含数千张图像的数据库中的每个图像,请帮忙?
这里是samples of the database。 (王数据库)
目前我正在使用imread
读图如下。 Matlab 的 detectSURFFeatures
函数仅适用于灰度图像。
I = rgb2gray( imread( '434.jpg' ) );
您可以运行这一行来获取 SURF 功能。
points = detectSURFFeatures( I );
您可以使用以下方法绘制冲浪特征。
imshow( I );
hold on;
plot( point.selectStrongest(10) );
hold off;
这是我使用的图像的可视化。
打印points
对象,可以得到如下属性显示41个特征。
Scale: [41x1 single]
SignOfLaplacian: [41x1 int8]
Orientation: [41x1 single]
Location: [41x2 single]
Metric: [41x1 single]
Count: 41
如果您将所有灰度图像都存储在一个名为 cellimg
的单元格对象中(每个图像一个单元格元素),您可以对每个图像进行 运行 detectSURFFeatures
,如下所示。
cellsurf = cellfun( @(I) detectSURFFeatures( I ), cellimg, 'UniformOutput', false );
cellsurf
的每个元素都将包含 SURF 点。由于您需要一组独特且固定的特征来识别每张图像,因此您可以 select 在 cellsurf
中每张图像上的最强点。您可以使用前 n
个功能或设置 n = min( points )
。使用以下代码计算最小特征数。
n = min( cellfun( @(S) S.Count, cellsurf ) );
然后你可以select通过运行宁selectStrongest
在cellsurf
.
中的每个单元格上的最强点
F = cellfun( @(S) S.selectStrongest( n ), cellsurf, 'UniformOutput', false);
变量 F
将包含一组常量特征。您可以相应地更改 n
以更改您想要的最强功能的数量。要匹配两组特征,您可以使用内置 matchFeatures function.
备注
- 如果您需要更多功能,可以在调用
detectSURFFeatures
函数时指定不同的 'MetricThreshold' 参数。
- 您可以通过以下函数使用其他特征算法代替 SURF:
detectBRISKFeatures
、detectFASTFeatures
、detectHarrisFeatures
、detectMinEigenFeatures
、detectMSERFeatures
首先,detectSURFFeatures
只给出了兴趣点的位置、比例和方向。您还必须调用 extractFeatures
,这将为您提供 SURF 描述符,这些描述符是描述每个兴趣点周围图像块的向量。
现在,您正在尝试将表示图像的一组补丁描述符转换为单个向量,有多种方法可以做到这一点。一种流行的方法称为 bag of features,又名视觉词袋。
我正在使用 matlab 进行基于内容的图像检索项目
当我应用函数 point=detectSURFFeatures(image)
我得到 83*1
个具有以下信息的冲浪点:
`Scale: [83x1 single]
SignOfLaplacian: [83x1 int8]
Orientation: [83x1 single]
Location: [83x2 single]
Metric: [83x1 single]
Count: 83`
我需要知道如何提取一个(独特且固定的)特征向量来表示包含数千张图像的数据库中的每个图像,请帮忙?
这里是samples of the database。 (王数据库)
目前我正在使用imread
读图如下。 Matlab 的 detectSURFFeatures
函数仅适用于灰度图像。
I = rgb2gray( imread( '434.jpg' ) );
您可以运行这一行来获取 SURF 功能。
points = detectSURFFeatures( I );
您可以使用以下方法绘制冲浪特征。
imshow( I );
hold on;
plot( point.selectStrongest(10) );
hold off;
这是我使用的图像的可视化。
打印points
对象,可以得到如下属性显示41个特征。
Scale: [41x1 single]
SignOfLaplacian: [41x1 int8]
Orientation: [41x1 single]
Location: [41x2 single]
Metric: [41x1 single]
Count: 41
如果您将所有灰度图像都存储在一个名为 cellimg
的单元格对象中(每个图像一个单元格元素),您可以对每个图像进行 运行 detectSURFFeatures
,如下所示。
cellsurf = cellfun( @(I) detectSURFFeatures( I ), cellimg, 'UniformOutput', false );
cellsurf
的每个元素都将包含 SURF 点。由于您需要一组独特且固定的特征来识别每张图像,因此您可以 select 在 cellsurf
中每张图像上的最强点。您可以使用前 n
个功能或设置 n = min( points )
。使用以下代码计算最小特征数。
n = min( cellfun( @(S) S.Count, cellsurf ) );
然后你可以select通过运行宁selectStrongest
在cellsurf
.
F = cellfun( @(S) S.selectStrongest( n ), cellsurf, 'UniformOutput', false);
变量 F
将包含一组常量特征。您可以相应地更改 n
以更改您想要的最强功能的数量。要匹配两组特征,您可以使用内置 matchFeatures function.
备注
- 如果您需要更多功能,可以在调用
detectSURFFeatures
函数时指定不同的 'MetricThreshold' 参数。 - 您可以通过以下函数使用其他特征算法代替 SURF:
detectBRISKFeatures
、detectFASTFeatures
、detectHarrisFeatures
、detectMinEigenFeatures
、detectMSERFeatures
首先,detectSURFFeatures
只给出了兴趣点的位置、比例和方向。您还必须调用 extractFeatures
,这将为您提供 SURF 描述符,这些描述符是描述每个兴趣点周围图像块的向量。
现在,您正在尝试将表示图像的一组补丁描述符转换为单个向量,有多种方法可以做到这一点。一种流行的方法称为 bag of features,又名视觉词袋。