【问题标题】:Can RANSAC be improved to remove outliers?可以改进 RANSAC 以消除异常值吗?
【发布时间】:2015-04-01 07:44:58
【问题描述】:

我正在使用 SIFT 特征检测器和描述符。我正在匹配两个图像之间的点。我正在使用带有 RANSAC 方法的 OpenCV 的 findHomography() 函数。

当我阅读 RANSAC 算法时,据说调整 RANSAC 的阈值参数可以改善结果。但我不想硬编码任何参数。

我知道 RANSAC 正在删除比赛中的异常值。谁能告诉我在应用单应性之前用基本方法去除异常值(不是全部)是否可以改善单应性的结果?

如果是这样,我们如何在 RANSAC 之前应用一个操作来去除异常值?

【问题讨论】:

  • RANSAC 方法通过丢弃异常值来估计您想要的单应性。该方法基于这样的假设运行,即您的大多数样本都与潜在的单应性一致。如果模型不是 100% 准确,则消除了数据中的噪声,并且该参数可以为您提供灵活性。因此,如果模型不准确(例如,因为您有严重的失真),预过滤将无济于事,只有调整阈值才会有帮助。
  • 我必须提醒你,如果你使用findHomography(),你已经假设世界坐标中的所有3D点都在一个平面上。

标签: opencv image-processing computer-vision feature-detection ransac


【解决方案1】:

您对好的结果的定义是什么? RANSAC 是关于点数和精度之间的权衡,因此没有统一的好定义:如果它们的精度更差,你就会有更多的内点,反之亦然。

您正在谈论的参数可能是异常值阈值,并且可能只是调整不当,因此您的近似内点太多或超精确内点太少。现在,如果您预先过滤异常值,您只会加快您的 RANSAC,但不太可能改进解决方案。最终RANSAC with Homography的速度归结为选择4个inliers的概率,当它们的比例越高,收敛越快。

在应用 RANSAC 之前对异常值进行排序的其他方法是查看更简单的约束,例如点的排序、直线仍然是直线、cross-ratio 和 Homography 变换的其他不变量。最后,您可能希望使用更高级别的特征(例如线)来计算单应性。请注意,在齐次坐标中,当点转换为 p2=H*p1 时,线将转换为 l2 = H-t * l1。这实际上可以提高准确度(因为线是宏观特征并且比兴趣点噪声小),而直线可以通过霍夫变换检测。

【讨论】:

  • 我忘了提一件事——RANSAC 作为一种迭代方法必须多次找到单应性,因此运行一种廉价的算法(例如 DLT)。要找到真正的单应性,您必须将 RANSAC 的输出视为非线性算法(例如 LM)的初始化点。廉价算法和非线性算法之间的区别在于优化指标。非线性优化了正确的度量(点距离的平方和),但为此付出了代价(它很慢)。便宜的算法速度很快,但会优化错误的指标(参数错误)。
【解决方案2】:

不,RANSAC 和相关算法的重点是去除异常值。

但是,可以通过避免定义有些随意的阈值的方式来改进算法。

一个很好的起点是托尔的旧MLESAC paper

【讨论】:

  • 感谢您的更新。您能否将其添加到已接受的答案中,以供未来读者参考,这也是一个很好的答案。
猜你喜欢
  • 1970-01-01
  • 2012-08-16
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 2012-02-09
  • 1970-01-01
  • 2015-10-06
相关资源
最近更新 更多