使用SURF算法来匹配MATLAB上的对象
目的是查看两幅图像是否匹配,每幅图像中都捕获一个对象。
我已存储的对象或图像。 这将被用作基准:
需要与之匹配的对象/图像 - 存储:
我的方法:
如果我有两个相同物体的图像(两个图像分别在相机上拍摄),理想情况下比例应该接近1或接近100%。 然而情况并非如此,我得到的最佳比例接近0.5甚至更糟,0.3。
我知道SURF探测器和特征可以用于神经网络,或者使用基于统计的方法。 我相信我已经在一定程度上通过使用50个最强大的特征来接近基于统计的方法。
有什么我失踪? 我该怎么补充或如何改进? 请给我一点从头开始。
%Clearing the workspace and all variables
clc;
clear;
%ITEM 1
item1 = imread('Loreal.jpg');%Retrieve order 1 and digitize it.
item1Grey = rgb2gray(item1);%convert to grayscale, 2 dimensional matrix
item1KP = detectSURFFeatures(item1Grey,'MetricThreshold',600);%get SURF dectectors or interest points
strong1 = item1KP.selectStrongest(50);
[item1Features, item1Points] = extractFeatures(item1Grey, strong1,'SURFSize',128); % using SURFSize of 128
%INPUT : Aquire Image
input= imread('MakeUp1.jpg');%Retrieve input and digitize it.
inputGrey = rgb2gray(input);%convert to grayscale, 2 dimensional matrix
inputKP = detectSURFFeatures(inputGrey,'MetricThreshold',600);%get SURF dectectors or interest
strongInput = inputKP.selectStrongest(50);
[inputFeatures, inputPoints] = extractFeatures(inputGrey, strongInput,'SURFSize',128); % using SURFSize of 128
pairs = matchFeatures(item1Features, inputFeatures, 'MaxRatio',1); %matching SURF Features
totalFeatures = length(item1Features); %baseline number of features
numPairs = length(pairs); %the number of pairs
percentage = numPairs/50;
if percentage >= 0.49
disp('We have this');
else
disp('We do not have this');
disp(percentage);
end
基线图像
http://i61.tinypic.com/2vsjekp.jpg
输入图像
http://i61.tinypic.com/2lwazo8.jpg
我会尽量不要做selectStrongest
,不要设置MaxRatio
。 只需使用默认选项调用matchFeatures
并比较结果匹配的数量即可。
matchFeatures
的默认行为是使用比率测试来排除不明确的匹配。 所以它返回的匹配数量可能是场景中物体存在与否的一个很好的指标。
如果你想尝试更复杂的东西,看看这个例子。
链接地址: http://www.djcxy.com/p/79585.html