RANSAC算法的findHomography函数异常排除错误。

4
我正在使用features2d(ORB、SIFT等)进行一些物体检测。
我进一步研究了RANSAC中的单应性变换问题,发现很多好的点被错误地标记为离群值。
在物体(书)内部有许多不应该是离群值的离群值。
我已经尝试将阈值提高到10,但结果几乎没有改善。我能做些什么来改善这种情况吗?
RANSAC是否有问题?

我使用OpenCV中的RANSAC算法,没有任何问题。你的图像可能存在噪声吗?你是否使用校准过的相机? - Jav_Rock
3个回答

6
在这里,“离群值”指的是那些不符合模型的点,但它们不一定要落在您的对象之外。
RANSAC找到最适合模型的点集,其余点被认为是离群值,但是离群值可以完全是您正在跟踪的对象中受噪声影响的点,并且其检测位置与RANSAC的重投影偏差足够大以被视为离群值。
不用担心,它能正常工作,您的对象已被检测,如您的图像所示。

我认为离群值并不是错的。可能发生的情况是你的内点不够好。对于一个良好的单应性,你需要至少4个点,如果有太多噪声,RANSAC会失败,因为它是一种线性方法。 - Jav_Rock
1
是的,这就是RANSAC所考虑的内点,但这并不意味着这些点会生成一个好的单应性矩阵。你的图像可能存在模糊,而且点的位置也不够精确。有时当我快速移动相机时,我也会遇到类似的问题,跟踪会丢失。 - Jav_Rock
这对我来说是个真正的问题 =/ 是的,也许画面有些模糊,但我相信不会太多(而且我在那一帧没有移动相机) - dynamic

3

尝试使用其他特征检测器寻找更多功能(最少100个),或调整检测器阈值以增加数量。在对象上均匀分布点也是合适的。 您可以尝试使用OpenCV中的goodFeaturesToTrack。


+1 是的,找到超过100个点会增加“好”的内点的可能性。我认为SIFT还不错,结合FLANN匹配使用。 - Jav_Rock

0

异常值在这种情况下是指不符合模型的点。Opencv中的RANSAC可以在匹配点对之间找到平面单应性。在您的案例中,书是一个平面,内点应该在书内。如果它们被视为异常值,则可能的原因是:

  1. 匹配错误
  2. 图像特征冗余(例如易于检查的棋盘格)

在特征点为3D对象的情况下,无法保证内点位于对象内部。如果将匹配点以图像坐标的形式作为输入,Opencv的findHomography会估计平面单应性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接