i'm trying to evaluate SIFT and SURF Detectors by Repeatability criteria.
i find out that below method can find Repeatability ,Correspondence of SIFT and SURF
cv::evaluateFeatureDetector(img_1c, img_2c, h12, &key_points_1, &key_points_2, repeatability, corrCounter);
some of the result are listed below:
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
for first row repeatibility can compute as --> (correnspond)/min(keypoint1st,keypoint2th) = (140/180) = 0.7777778 but for other rows it's value is different from what i compute with above formula.
can somebody tell why is that happening?
Regards.
I think I may have found the problem here.
The repeatability rate is the number of repeated points between two images considering the total number of keypoints extracted. For measuring the number of repeated points it has to be taken into account that the observed scenes differ from each other due to their changed imaging condition (viewpoint, rotation + scale, blur, etc in the case of Mikolajczyk dataset).
Keypoints which are not detected in both images can corrupt the repeatability measure so, only points which lie in the common scene parts affect the repeatability.
What is happening is that you're considering all the keypoints detected in the second image for the calculation of repeatability and actually only the keypoints within the homography should be used.
Hope this helps.
In fact, OpenCV 2.49 uses this line of code in evaluation.cpp
:
repeatability = minCount ? (float)correspondencesCount / minCount : -1;
which is the number of correspondences divided by the smaller number of Keypoint 1st
or Keypoint 2th
so I guess your error might be somewhere else.
Can you post your complete code where you set img_1c, etc and call the function and display the results?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With