Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB上使用SURF算法进行对象匹配_Matlab_Computer Vision_Feature Detection_Surf_Matlab Cvst - Fatal编程技术网

在MATLAB上使用SURF算法进行对象匹配

在MATLAB上使用SURF算法进行对象匹配,matlab,computer-vision,feature-detection,surf,matlab-cvst,Matlab,Computer Vision,Feature Detection,Surf,Matlab Cvst,目标是查看两个图像是否匹配,每个图像中捕获一个对象 我存储的对象或图像。这将用作基线: 项目1(代码中正在匹配) 存储需要与此匹配的对象/图像: 输入(需要查看它是否与存储的内容匹配 我的方法: 将图像转换为灰度 提取冲浪兴趣点 获取特征 匹配特征 获得50个最强大的功能 为每个图像匹配最强特征的数量 取-匹配特征数/最强特征数的比率 功能(50) 如果我有两张相同对象的图像(两张分别在相机上拍摄的图像),理想情况下,比率应该接近1或接近100%。 然而事实并非如此,我得到的最佳比率接近

目标是查看两个图像是否匹配,每个图像中捕获一个对象

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

  • 项目1(代码中正在匹配)
存储需要与此匹配的对象/图像:

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

  • 将图像转换为灰度
  • 提取冲浪兴趣点
  • 获取特征
  • 匹配特征
  • 获得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
    
    基线图像

    输入图像

    我会尝试不执行
    选择最强的
    ,也不设置
    最大比率
    。只需使用默认选项调用
    匹配功能
    ,然后比较结果匹配的数量

    matchFeatures
    的默认行为是使用比率测试来排除不明确的匹配。因此,它返回的匹配数可以很好地指示场景中是否存在对象


    如果你想尝试更复杂的东西,请看看这个。

    你能发布一些示例图像吗?我用tinypic上传了这些图像。用同一台相机拍摄了两次照片。使用我的比率设置,他们应该返回至少90%。谢谢rayryeng编辑的照片。更干净。我相信这个问题据我所知,使用
    matchFeatures
    是最好的选择,还是应该使用不同的算法。我曾考虑使用BRISK,但在我的2013a版本的MATLAB中,
    detectBRISKFeatures
    未被视为函数。可能使用其他功能,如FAST,应该与冲浪点一起使用?可能是有用。有一些关于SURF的答案。“matchFeatures”将返回两组特征之间对应的大量对。为了查看匹配对的数量是否足够多,我将与基线图像的对数量进行比较。我取其比率,得到的比率大约为d 0.4和0.5。就使用特征进行对象匹配而言,这足够好吗?我不知道。您必须测试整个系统,并调整阈值。调整灰度图像的阈值或点和特征函数的阈值?我只尝试匹配最强的特征(甚至尝试了15个),但我能得到的最佳比率是0.5。我的意思是,你需要检查大于0.4的比率是否足以决定两幅图像是否匹配。SURF算法似乎意味着识别一个对象只需要一幅基线图像。真的是这样吗,因为一个对象只有一幅图像..s这还不够吗?