【问题标题】:Why I am getting matches despite the object does not exist in the scene为什么尽管场景中不存在对象,但我还是得到了匹配
【发布时间】:2015-09-14 22:21:12
【问题描述】:

我尝试使用 SIFT 算法进行特征匹配。如下图1所示,object/query和scene/train之间有匹配的特征,我收到的good match的数量等于8

我重复相同的匹配过程以将相同的对象/查询匹配到完全不同的场景,该场景根本不包含对象/查询图像,如图 2 所示。该过程的良好匹配是 10 个良好匹配。我想知道,因为我正在寻找的对象在场景中根本不存在,为什么我会得到很好的匹配结果?!

我想要得到的结果是,如果场景中的场景中不存在对象,则零匹配

我怎样才能做到这一点?

更新

您认为使用 knnMatch 可以解决这个问题吗?

【问题讨论】:

  • 除非您的代码中有错误(除非您发布,否则我无法确定),我会说这只是当今模式识别算法的限制。
  • @RedRoboHood 是否有任何标准来指示我正在寻找的对象是否在场景中找到?因为如您所见,两张图片都包含匹配项
  • 我不确定我是否理解。如果您已经知道在场景中找不到您要寻找的对象,那为什么还需要运行模式识别算法呢?您是否将其用作学习算法?
  • 您应该检查是否存在验证您的良好匹配的单应性。
  • 您可能应该将您的 cmets 指向 @Micka 而不是我。

标签: java opencv image-processing feature-detection


【解决方案1】:

您有匹配项,因为有些描述符足够相似。为了对目标检测更稳健,您必须添加一个几何一致性检查步骤。给定定义的点集,例如

cv::Mat query_pts(nbMatches, 1, CV_32FC2)
cv::Mat train_pts(nbMatches, 1, CV_32FC2);

例如,您可以尝试使用 RANSAC 估计单应性:

H12 = cv::findHomography( query_pts, train_pts, CV_RANSAC, thresh);

然后你检查单应性是否已经被估计了

if(H12.empty()) cout << "-- Cannot estimate homography" << endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2011-12-03
    相关资源
    最近更新 更多