我正在尝试通过重复性标准来评估SIFT和SURF检测器。
我发现以下方法可以找到SIFT和SURF的重复性,对应性
cv::evaluateFeatureDetector(img_1c, img_2c, h12, &key_points_1, &key_points_2, repeatability, corrCounter);
下面列出了一些结果:
Number Repeatibility Correspond Keypoint 1st Keypoint 2th
1to2 0.7777778 140 224 180
1to3 0.7125 114 224 161
1to4 0.704918 86 224 123
1to5 0.6853933 61 224 89
1to6 0.6521739 45 224 69
第一行可重复性的可以计算为 - > (correnspond)/ min(keypoint1st,keypoint2th)=(140/180)= 0.7777778 但对于其他行,它的值与我用上述公式计算的值不同。
有人能说出为什么会这样吗?
问候。
答案 0 :(得分:4)
我想我可能在这里找到了问题。
重复率是考虑到提取的关键点总数,两个图像之间的重复点数。 为了测量重复点的数量,必须考虑观察到的场景由于其成像条件的改变而相互不同(在Mikolajczyk数据集的情况下,视点,旋转+比例,模糊等)。
在两个图像中都未检测到的关键点可能会破坏 重复性测量因此,只有在共同场景中的点 零件影响重复性。
正在发生的是您正在考虑在第二张图片中检测到的所有关键点以计算重复性,实际上仅应使用单应性中的关键点
希望这有帮助。
答案 1 :(得分:1)
事实上,OpenCV 2.49在evaluation.cpp
:
repeatability = minCount ? (float)correspondencesCount / minCount : -1;
这是对应的数量除以Keypoint 1st
或Keypoint 2th
的较小数量,所以我猜你的错误可能在其他地方。
您可以在设置img_1c等的地方发布完整的代码并调用该函数并显示结果吗?