可以改进RANSAC以消除异常值吗?

时间:2015-02-02 11:12:10

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

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

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

我知道RANSAC正在删除匹配中的异常值。任何人都可以告诉我,如果在应用单应性之前用基本方法去除异常值(不是全部)可以改善单应性的结果吗?

如果是这样,如何在Ransac之前应用一个操作来删除异常值?

2 个答案:

答案 0 :(得分:4)

您对良好结果的定义是什么? RANSAC在点数和精度之间进行权衡,因此没有统一的商品定义:如果准确度更差,你会有更多的内点,反之亦然。

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

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

答案 1 :(得分:1)

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

但是,可以通过避免定义某种任意阈值的方式来优化算法。

一个很好的起点是Torr的旧MLESAC paper