java - 尽管场景中不存在该对象,为什么我仍能获得匹配项

标签 java opencv image-processing feature-detection

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

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

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

我怎样才能做到这一点?

更新:

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

enter image description here enter image description here

最佳答案

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

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/

相关文章:

OpenCV 找不到视频设备

linux - "In-source builds are not allowed"在 cmake

opencv - 构造 cv::Mat 的不同方法是什么?

r - 将矩阵转换为 R 中的灰度图像

java - 测试线程安全单例的代码中的奇怪行为

java - java集合框架中的比较器

java - JFrame 不会显示在 netbeans 平台中

java - 我的 Java Hibernate 应用程序使用准备语句池吗?

python - 在 Python 中查找图像像素和调色板颜色之间差异的最快方法

opencv - 识别图像中的长不规则图案