我尝试使用 SIFT 算法进行特征匹配。如下图1所示,对象/查询和场景/火车之间存在匹配的特征,并且我收到的良好匹配数等于8
我重复了相同的匹配过程,将相同的对象/查询匹配到完全不同的场景,该场景根本不包含对象/查询图像,如图 2 所示。该过程中的良好匹配是 10 个良好匹配。我想知道,既然我正在寻找的对象在场景中根本不存在,为什么我会得到良好的匹配结果?!
我想要得到的结果是,如果场景中的场景中不存在该对象,则零匹配
我怎样才能做到这一点?
更新:
您认为使用 knnMatch 可以解决这个问题吗?
最佳答案
您有匹配项,因为有一些描述符足够相似。例如,为了使对象检测更加稳健,您必须添加几何一致性检查步骤。给定点集,例如定义为
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;
关于java - 尽管场景中不存在该对象,为什么我仍能获得匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098993/