我正在使用SIFT特征检测器和描述符。我匹配两个图像之间的点。我正在使用OpenCv的findHomography()
函数和RANSAC方法。
当我读到RANSAC算法时,据说调整RANSAC的阈值参数可以改善结果。但我不想对任何参数进行硬编码。
我知道RANSAC正在删除匹配中的异常值。任何人都可以告诉我,如果在应用单应性之前用基本方法去除异常值(不是全部)可以改善单应性的结果吗?
如果是这样,如何在Ransac之前应用一个操作来删除异常值?
答案 0 :(得分:4)
您对良好结果的定义是什么? RANSAC在点数和精度之间进行权衡,因此没有统一的商品定义:如果准确度更差,你会有更多的内点,反之亦然。
您正在谈论的参数可能是异常值阈值,可能只是调整得很差,因此您有太多的近似内点或太少的超精确内点。现在,如果你预先过滤你的异常值,你只会加速你的RANSAC,但不太可能改善解决方案。最终RANSAC与Homography的速度归结为选择4个内点的概率,当它们的比例越高时,收敛就越快。
在应用RANSAC之前解决异常值的其他方法是查看更简单的约束,例如点的排序,直线仍然是直线,cross-ratio和其他Homography变换的不变量。最后,您可能希望使用更高级别的功能(如线条)来计算单应性。注意,在均匀坐标中,当点被转换为p2 = H * p1时,线被转换为l2 = H -t * l1。这实际上可以提高准确度(因为线条是宏观特征并且比感兴趣点的噪声更小),而直线可以通过霍夫变换来检测。
答案 1 :(得分:1)