Matlab中多幅图像的SURF描述符与匹配
Posted
技术标签:
【中文标题】Matlab中多幅图像的SURF描述符与匹配【英文标题】:SURF Descriptor and Matching for Multiple Image in Matlab 【发布时间】:2015-06-29 07:16:05 【问题描述】:我正在使用 matlab 进行基于内容的图像检索项目
当我应用函数point=detectSURFFeatures(image)
我得到83*1
surf point,它包含以下信息:
`Scale: [83x1 single]
SignOfLaplacian: [83x1 int8]
Orientation: [83x1 single]
Location: [83x2 single]
Metric: [83x1 single]
Count: 83`
我需要知道如何提取一个(独特的和固定的)特征向量来表示包含数千张图像的数据库中的每个图像,请帮助? 这是samples of the database。 (王库)
【问题讨论】:
83 SURF 点有什么问题?将 SURF 应用于 1000 张图像并获得不同的点有什么问题? 但是我如何将查询图像与其他图像的其他特征进行比较,我想使用欧几里德距离或 DTW 等距离来测量查询图像与其他图像之间的距离 如何使用 83 个 SURF 点来比较图像?有许多向量 Scale , Orientation , location ...等,它为每个图像提供不同数量的特征(值) 数据库中是否有重复的图像?你想从数据库中匹配什么样的图像?您可以在问题中发布一些示例吗? 【参考方案1】:目前,我正在使用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 点。由于您需要一组独特且固定的特征来识别每张图像,因此您可以在cellsurf
中选择每张图像上的最强点。您可以使用顶部的n
数量的功能或设置n = min( points )
。使用以下代码计算最小特征数。
n = min( cellfun( @(S) S.Count, cellsurf ) );
然后您可以通过在cellsurf
中的每个单元格上运行selectStrongest
来选择最强点。
F = cellfun( @(S) S.selectStrongest( n ), cellsurf, 'UniformOutput', false);
变量F
将包含一组不变的特征。您可以相应地更改n
以更改您想要的最强功能的数量。要匹配两组特征,可以使用内置的matchFeatures function。
注意事项
如果您需要更多功能,可以在调用detectSURFFeatures
函数时指定不同的“MetricThreshold”参数。
您可以使用其他特征算法代替SURF,方法是使用以下函数:detectBRISKFeatures
、detectFASTFeatures
、detectHarrisFeatures
、detectMinEigenFeatures
、detectMSERFeatures
【讨论】:
现在我有 1*2 单元格的单元格,每个单元格都包含来自数据库的灰度图像,当我申请时:cellsurf = cellfun( @(I) detectSURFFeatures( I ), cellimg );
其中我是一个灰度图像矩阵,我得到Error using cellfun SURFPoints output type is not currently implemented.
跨度>
@AhmedTarawneh 您使用的是什么版本的 Matlab?你能更新到最新版本吗?
是的,我现在以Scale: [10x1 single] SignOfLaplacian: [10x1 int8] Orientation: [10x1 single] Location: [10x2 single] Metric: [10x1 single] Count: 10
获得冲浪点,现在我如何使用这些点来计算距离,例如欧几里得距离......等等,换句话说**我如何检索相似的图像** 我正在使用 matlab 2014
@AhmedTarawneh SURFPoints output type is not supported. Set 'UniformOutput' to false.
我假设您收到此错误消息。虽然我很抱歉给你的代码不起作用,但问题很清楚。无论如何,我更新了代码以将“UniformOutput”包含为 false。
我的意思是这个冲浪点对象包含多个向量、比例向量、方向向量..我可以使用这些向量中的哪一个来表示图像(进行比较)?【参考方案2】:
首先,detectSURFFeatures
只为您提供兴趣点位置、比例和方向。您还必须调用 extractFeatures
,它会为您提供 SURF 描述符,它们是描述每个兴趣点周围图像块的向量。
现在,您正在尝试将一组表示图像的补丁描述符转换为单个向量,并且有多种方法可以做到这一点。一种流行的方法称为bag of features,也就是视觉词袋。
【讨论】:
以上是关于Matlab中多幅图像的SURF描述符与匹配的主要内容,如果未能解决你的问题,请参考以下文章
使用 OpenCV 描述符与 findFundamentalMat 匹配
OpenCV - 使用 SURF 描述符和 BruteForceMatcher 进行对象匹配
SURF+GTM基于SURF特征提取,GTM去除错误配准点的图像匹配算法的MATLAB仿真
opencv中SURF特征提取的最佳hessian阈值+最小描述符匹配