尽管场景中不存在对象,但为什么我会得到匹配

时间:2015-06-28 10:55:57

标签: java opencv image-processing feature-detection

我试图使用SIFT算法进行功能匹配。如下图1所示,对象/查询和场景/火车之间有匹配的特征,我收到的好匹配数等于8

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

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

我怎样才能实现这一目标?

更新

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

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

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

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;