能否改进 RANSAC 以去除异常值?
Can RANSAC be improved to remove outliers?
我正在使用 SIFT 特征检测器和描述符。我正在匹配两个图像之间的点。我正在使用 OpenCV 的 findHomography()
函数和 RANSAC 方法。
看RANSAC算法的时候,据说调整一个RANSAC的阈值参数可以改善结果。但我不想硬编码任何参数。
我知道 RANSAC 正在删除匹配中的异常值。谁能告诉我在应用单应性之前用基本方法去除异常值(不是全部)是否会改善单应性的结果?
如果是这样,我们如何在 RANSAC 之前应用操作来删除异常值?
不,RANSAC 和相关算法的全部意义在于去除异常值。
但是,可以通过避免定义有点武断的阈值的方式来改进算法。
一个很好的起点是 Torr 的旧 MLESAC paper
你对好结果的定义是什么? RANSAC 是关于点的数量和它们的精度之间的权衡,所以没有统一的好定义:如果它们的精度更差,你有更多的内点,反之亦然。
您所说的参数可能是一个离群值阈值,它可能只是调整不当,所以您的近似离群值太多或超精确离群值太少。现在,如果您预先过滤异常值,您只会加快 RANSAC,但不太可能改进解决方案。最终 RANSAC with Homography 的速度归结为选择 4 个内点的概率,当它们的比例越高,收敛速度越快。
在应用 RANSAC 之前筛选异常值的其他方法是查看更简单的约束,例如点的排序、直线仍然是直线、cross-ratio 和单应变换的其他不变量。最后,您可能希望使用更高级别的功能(例如线条)来计算单应性。请注意,在齐次坐标中,当点变换为 p2=H*p1 时,线变换为 l2 = H-t * l1。这实际上可以提高准确性(因为线是宏观特征,比兴趣点噪声小),而直线可以通过霍夫变换检测。
我正在使用 SIFT 特征检测器和描述符。我正在匹配两个图像之间的点。我正在使用 OpenCV 的 findHomography()
函数和 RANSAC 方法。
看RANSAC算法的时候,据说调整一个RANSAC的阈值参数可以改善结果。但我不想硬编码任何参数。
我知道 RANSAC 正在删除匹配中的异常值。谁能告诉我在应用单应性之前用基本方法去除异常值(不是全部)是否会改善单应性的结果?
如果是这样,我们如何在 RANSAC 之前应用操作来删除异常值?
不,RANSAC 和相关算法的全部意义在于去除异常值。
但是,可以通过避免定义有点武断的阈值的方式来改进算法。
一个很好的起点是 Torr 的旧 MLESAC paper
你对好结果的定义是什么? RANSAC 是关于点的数量和它们的精度之间的权衡,所以没有统一的好定义:如果它们的精度更差,你有更多的内点,反之亦然。
您所说的参数可能是一个离群值阈值,它可能只是调整不当,所以您的近似离群值太多或超精确离群值太少。现在,如果您预先过滤异常值,您只会加快 RANSAC,但不太可能改进解决方案。最终 RANSAC with Homography 的速度归结为选择 4 个内点的概率,当它们的比例越高,收敛速度越快。
在应用 RANSAC 之前筛选异常值的其他方法是查看更简单的约束,例如点的排序、直线仍然是直线、cross-ratio 和单应变换的其他不变量。最后,您可能希望使用更高级别的功能(例如线条)来计算单应性。请注意,在齐次坐标中,当点变换为 p2=H*p1 时,线变换为 l2 = H-t * l1。这实际上可以提高准确性(因为线是宏观特征,比兴趣点噪声小),而直线可以通过霍夫变换检测。