首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV怪胎返回太多的离群值

OpenCV怪胎返回太多的离群值
EN

Stack Overflow用户
提问于 2012-12-12 08:03:12
回答 2查看 2.6K关注 0票数 7

我正在尝试freak_demo.cpp example之后最新版本的OpenCV中相当新的描述符怪胎。我用的不是冲浪,而是快。我的基本代码如下:

代码语言:javascript
复制
std::vector<KeyPoint> keypointsA, keypointsB;
Mat descriptorsA, descriptorsB;
std::vector<DMatch> matches;

FREAK extractor;
BruteForceMatcher<Hamming> matcher;

FAST(imgA,keypointsA,100);
FAST(imgB,keypointsB,20);

extractor.compute( imgA, keypointsA, descriptorsA );
extractor.compute( imgB, keypointsB, descriptorsB );

matcher.match(descriptorsA, descriptorsB, matches);
  • 该算法发现了大量的匹配,但存在大量的离群点。我做得对吗?有没有调整算法的方法?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 08:14:49

在执行匹配时,总是有一些细化步骤来摆脱异常值。

我通常所做的是丢弃那些距离超过阈值的匹配,例如:

代码语言:javascript
复制
for (int i = 0; i < matches.size(); i++ )
{
    if(matches[i].distance > 200)
    {
        matches.erase(matches.begin()+i-1);
    }
}

然后,我使用RANSAC来查看哪些匹配符合单调性模型。OpenCV有这样一个函数:

代码语言:javascript
复制
for( int i = 0; i < matches.size(); i++ )
    {            
        trainMatches.push_back( cv::Point2f(keypointsB[ matches[i].trainIdx ].pt.x/500.0f, keypointsB[ matches[i].trainIdx ].pt.y/500.0f) );
        queryMatches.push_back( cv::Point2f(keypointsA[ matches[i].queryIdx ].pt.x/500.0f, keypointsA[ matches[i].queryIdx ].pt.y/500.0f) );
    }

Mat h = cv::findHomography(trainMatches,queryMatches,CV_RANSAC,0.005, status);

我只是画了一些不正确的东西:

代码语言:javascript
复制
for(size_t i = 0; i < queryMatches.size(); i++) 
{
    if(status.at<char>(i) != 0) 
    {
        inliers.push_back(matches[i]);
    }
}

Mat imgMatch;
drawMatches(imgA, keypointsA, imgB, keypointsB, inliers, imgMatch);

只需尝试不同的阈值和距离,直到得到所需的结果。

票数 16
EN

Stack Overflow用户

发布于 2012-12-12 09:27:44

您还可以通过给出自己选择的对来训练描述符。并调优构造函数中的参数。

代码语言:javascript
复制
explicit FREAK( bool orientationNormalized = true
       , bool scaleNormalized = true
       , float patternScale = 22.0f
       , int nbOctave = 4
       , const vector<int>& selectedPairs = vector<int>()
     );

顺便说一句,一个更有效的怪物版本即将到来:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13835309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档