我试图使用SIFT算法进行功能匹配。如下图1所示,对象/查询和场景/火车之间有匹配的特征,我收到的好匹配数等于8
我重复相同的匹配程序,将相同的对象/查询匹配到完全不同的场景,完全不包含对象/查询图像,如图2所示。来自该过程的好匹配是10个好的匹配。我想知道,因为我正在寻找的对象在场景中根本不存在,为什么我得到了很好的比赛结果?!
我想得到的结果是,如果场景中的场景中不存在该对象,则为零匹配
我怎样才能实现这一目标?
更新:
你认为使用knnMatch可以解决这个问题吗?
答案 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;