目前,我正在使用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 ) );
selectStrongest
然后你可以通过在每个单元格上运行来选择最强点cellsurf
。
F = cellfun( @(S) S.selectStrongest( n ), cellsurf, 'UniformOutput', false);
该变量F
将包含一组不变的特征。您可以n
相应地更改以更改您想要的最强功能的数量。要匹配两组特征,您可以使用内置的matchFeatures 函数。
笔记
- 如果需要更多功能,可以在调用
detectSURFFeatures
函数时指定不同的“MetricThreshold”参数。
- 您可以通过使用以下函数来使用其他特征算法而不是 SURF:
detectBRISKFeatures
, detectFASTFeatures
, detectHarrisFeatures
, detectMinEigenFeatures
,detectMSERFeatures