【问题标题】:Which inliers is the RANSAC Algorithm using in cv2.FindHomography to find the homography matrix?RANSAC 算法在 cv2.FindHomography 中使用哪些内点来查找单应矩阵?
【发布时间】:2020-06-01 11:54:10
【问题描述】:

1) OpenCV 中的 RANSAC 算法如何选择内点而不是异常点?我假设它会计算匹配的关键点之间的一些总最小二乘匹配。

2) 我完全清楚,除了 H 矩阵,cv2.FindHomography 还输出掩码。从这个掩码中,匹配的关键点 1 被认为是内点,而 0 被认为是异常点。但是 RANSAC 算法选择哪个内点来查找 cv2.FindHomography 输出的最终 H 单应性?是不是都考虑到H矩阵了?

documentation 没有正确解释这两个问题。

【问题讨论】:

  • 我很确定输出参数“mask”直接告诉你哪些点是内点,哪些点是异常点。

标签: python opencv image-processing homography ransac


【解决方案1】:

findHomography 文档中的 ransacReprojThreshold 参数描述了内部值与异常值:

对于 1),RANSAC 计算观察到的投影 dstPoint_i 与使用候选单应性 H 计算的 srcPoint_i 的投影之间的误差(向量范数)。然后它只是做一个简单的阈值检查。用户可以将 ransacReprojThreshold 设置为您认为最适合您的数据的任何值。如果您在像素坐标中,您只需将像素距离的最大误差设置为被视为内点的点。任何具有较大误差的都被视为异常值。

对于 2),RANSAC 算法将根据您设置的阈值简单地选择使内点数最大化的 H 矩阵。所以它返回给你的掩码是具有最大内点数的集合。

这有意义吗?它看起来并没有在随机样本大小、迭代次数等方面为您提供大量选择。Here's the source,如果您有兴趣的话。

【讨论】:

  • 感谢您的回复@doggie_breath 我无法理解的是 h 的部分。 H 不应该是从内部人员本身建立的吗?在给定的等式中,H 矩阵的初始值是多少?
  • @CharlesB,当然。对于 RANSAC,您从 src/dest 点中选择一个随机子集,并直接从该样本中计算 H - 从 this method 开始。 H 用于计算集合中所有点的投影误差,并且使用上面的等式确定内点。然后,您只需迭代该样本/检查并获取具有最大内点数的 H。那有意义吗?这个video 可能会有所帮助。
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2020-11-12
  • 2021-12-11
相关资源
最近更新 更多