【问题标题】:Keypoint Descriptor Matching: How to calculate a goodness-of-fit per template?关键点描述符匹配:如何计算每个模板的拟合优度?
【发布时间】:2019-01-14 05:31:24
【问题描述】:

我不确定这属于 stackoverflow 还是其他 stackexchange 站点 - 非常欢迎在这里输入。

我使用 python OpenCV 将目标图像的 BRISK 关键点描述符与三个不同的模板进行匹配。

什么是确定哪个模板最合适的实用、稳健、统计合理的方法?

现在我计算 cv2.findHomography 返回的 cv2.RANSAC 内点数(顺便说一下,它不会返回拟合优度统计数据)并采用具有最高数字的模板。

我查看了描述符距离的直方图,它们似乎总是以高斯为中心(奇怪地)在大约 105(单位?)。

https://en.wikipedia.org/wiki/Random_sample_consensus 似乎很有用。

非常感谢您的指导 - 谢谢!

【问题讨论】:

  • 您能否再解释一下为什么您不乐意选择具有最高内点百分比的模板?
  • @Demplo 感谢您的提问。我来自贝叶斯背景,所以对我来说似乎有点特别。理想情况下,我希望能够进行模型选择,即根据赔率量化拟合优度的差异,而内部百分比并没有给出这一点。我想知道重投影错误、H 矩阵的条件等。-findHomography 必须在内部计算似然性但不返回它。

标签: python opencv keypoint ransac goodness-of-fit


【解决方案1】:

这开始是一条评论,但有点太长了。

确实,OpenCV 会在内部计算重投影误差并且不返回它。但是一旦你获得了单应性,你可以自己做同样的事情,不是吗? 事实上,该算法最小化了所有点的重投影误差之和。一个相当完整的过程描述在OpenCV docs

由于您有匹配项(因此源点和模板点的图像坐标)。您可以计算每个模板的平均重投影误差,可能只使用被视为内点的点,然后选择最低的一个。

来自另一个网站上的a similar answer

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) )

计算两点之间的欧式距离。

【讨论】:

  • 非常感谢您的清晰解释。几个问题:(i)是例如cv2.warpPerspective(或其他?)相当于第一行(不是说你的行不够简单)?并且 (ii) 由于您已经计算了残差平方和,我可以将其与 chisq 相关联,从而计算用于模型选择的 Delta chisq,对吗? (但是噪声 sigma 用什么?)如果findHomography 确实在每次迭代中输出可能性,我会喜欢它,因为至少我可以探索表面的形状......但在这里可能有点矫枉过正。再次感谢
  • (cv2.perspectiveTransform() 而是)
  • (i) 看起来cv2.perspectiveTransform 完全符合您的预期。 (ii) 不幸的是,我不是 chisq 分布的专家,所以我无法提供帮助。我可以补充的是,也许(?) sigma 应该是用于特征提取的标准开发,虽然取决于提取器本身,但根据经验,您可以假设 ~0.5 像素,但不确定这是否有帮助......
  • 完全没有问题 - 非常感谢您的回答和信息 - 我将测试代码,然后希望能够接受答案:)
猜你喜欢
  • 2012-10-06
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多