Keypoint Descriptor Matching: How to calculate a goodness-of-fit per template?

梦想的初衷 提交于 2019-12-01 11:43:35

问题


I am not sure whether this belongs on stackoverflow or another stackexchange site - input very welcome here.

I have used python OpenCV to match a target image's BRISK keypoint descriptors to - in turn - three different templates.

What is a practical, robust, statistically-sound way to decide which template is the best-fitting one?

Right now I calculate the number of cv2.RANSAC inliers returned by cv2.findHomography (which incidentally doesn't return a goodness-of-fit statistic) and take the template that has the highest number.

I have looked at histograms of descriptor distances, which always seem to be gaussians centred (weirdly) at about 105 (units?).

https://en.wikipedia.org/wiki/Random_sample_consensus seems quite useful.

Guidance much appreciated - thanks!


回答1:


This started as a comment but was getting a bit too long.

Indeed OpenCV computes the reprojection error internally and does not return it. But you could do the same by yourself once you obtain the homography, no? As a matter of fact the algorithm minimizes the sum of the reprojection error over all the points. A quite complete description of the process is in the OpenCV docs

Since you have the matches (hence the image coordinates of both source and template points). You can compute the average reprojection error, possibly only using points that are treated as inliers, for each of the templates and choose the lowest one.

From a similar answer on another site:

computed_pt = H * source_pt
error_pt = sqrt( (computed_pt.x - dst_pt.x)*(computed_pt.x - dst_pt.x) + (computed_pt.y - dst_pt.y)*(computed_pt.y - dst_pt.y) )

to compute the euclidean distance between the two points.



来源:https://stackoverflow.com/questions/51721466/keypoint-descriptor-matching-how-to-calculate-a-goodness-of-fit-per-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!