在Matlab中是否有可能绘制不匹配的SURFPoints?

时间:2014-07-03 12:29:15

标签: matlab computer-vision matlab-cvst

我试图使用Matlab找到两个图像之间的差异。 Matlab为此提供的经典内置功能是因为两个图像没有相同的尺寸(图像中的对象是相同的,但在第二个图像中引入了其他对象)。

我认为我可以使用SURF功能来实现这一目标。 这是代码:

source = imread('source.png');
target = imread('target.png');
source = rgb2gray(source);
target = rgb2gray(target);

sourcePoints=detectSURFFeatures(source,'MetricThreshold',100.0,'NumOctaves',1,'NumScaleLevels',6);
targetPoints=detectSURFFeatures(target,'MetricThreshold',100.0,'NumOctaves',1,'NumScaleLevels',6);

%figure; imshow(source);
%hold on;
%plot(sourcePoints.selectStrongest(10000));


[sourceFeatures, sourcePoints]=extractFeatures(source,sourcePoints,'SURFSize',64);
[targetFeatures,targetPoints]=extractFeatures(target,targetPoints,'SURFSize',64);

boxPairs = matchFeatures(sourceFeatures, targetFeatures);

matchedSourcePoints = sourcePoints(boxPairs(:, 1), :);
matchedTargetPoints = targetPoints(boxPairs(:, 2), :);

figure;
showMatchedFeatures(source, target, matchedSourcePoints, matchedTargetPoints, 'montage');

display(matchedSourcePoints);
display(matchedTargetPoints);

问题在于,据我所知,你只有显示匹配的SURF点的功能,我需要在目标图像上仅绘制与源图像中的点不匹配的点。 / p>

得到的" matchedTargetPoints"和#34; targetPoints"变量是SURFPoints对象的数组,因此find函数不起作用,减去或对它们进行数组运算不起作用。 我也试图遍历" targetPoints"如果该点存在,则检查每一个,但脚本需要永远,所以这也不起作用。

有谁知道如何实现这一目标? 任何回应都表示赞赏。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Location对象的SURFPoints属性获取存储在M-by-2矩阵中的点的(x,y)位置。然后,您可以使用逻辑索引获取不匹配的点:

targetPointsLoc = targetPoints.Location;
unmatchedIdx = true(size(targetPoitnsLoc, 1), 1);
unmatchedIdx(boxPairs(:, 2)) = false;
unmatchedTargetPoints = targetPointsLoc(unmatchedIdx, :);

现在您可以使用plot来显示不匹配的点。

出于好奇,你为什么关心无与伦比的分数?