使用SURF算法来匹配MATLAB上的对象

目的是查看两幅图像是否匹配,每幅图像中都捕获一个对象。

我已存储的对象或图像。 这将被用作基准:

  • item1(这是在代码中匹配)
  • 需要与之匹配的对象/图像 - 存储:

  • 输入(需要查看这是否与存储的内容匹配
  • 我的方法:

  • 将图像隐藏到灰度。
  • 提取SURF兴趣点。
  • 获取功能。
  • 匹配功能。
  • 获得50个最强大的功能。
  • 每个图像匹配最强特征的数量。
  • 取匹配的特征数量/最强特征数量(即50)的比率。
  • 如果我有两个相同物体的图像(两个图像分别在相机上拍摄),理想情况下比例应该接近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

    上一篇: Using SURF algorithm to match objects on MATLAB

    下一篇: How to detect architecture and sculpture in opencv?