2013-01-20 66 views
5

我目前正在完成我的兴趣点检测器的评估工具。在最后的步骤中,我发现了一个令人困惑的错误。OpenCV CV findHomography assertion error - counter => 4

Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray()) 

srcPointsdstPointsvector<Points2f>存储该匹配的关键点的对应点。到目前为止,没有什么特别的 - 就像在教程中。

但是当我使用RANSAC并在范围[0,...,4]中有一个vector<Points2f>时,我得到的断言错误比计数器应该大于或等于4。

问题1:该算法是否至少需要4个点才能描述属于当前模型的内容,并创建共识?

问题2:有没有关于此的文档? (我看了一下doctutorials。)

Please note that I already have seen this question。但是RANSAC的行为没有令人满意的答案。或者我是否应该接受这种方法至少需要四分才能找到单应性?

感谢您的帮助。

回答

8

无法用少于4对点计算单应性。那是因为只有3分是透视含糊。画面A三角形

a 


b  c 
在图像1

在图像2中的点已被转化以看起来像这样

a 


b c 

b和c之间的距离的一半已被切断。不幸的是,你不知道这是否是因为c点离你更近或更远。随着第四点的差异变得清晰。

a  d 


b  c 

这里是图像方1

 d 


a   


b c  

这里d和c的旋转向你

a  

    d 
b c 

在这里,他们旋转远离你。

我在openCV文档中没有看到这个要求,但是如果您在单应计算中发现任何资源,在找到这个要求之前,您不必读得很远,并且有足够的4点的更严格证明。

4

RANSAC用于在一个或多个较大集合中选择4对匹配点(即,当srcPoints.size() >= 4)。这就是为什么你会得到一个错误,如果srcPoints.size() <=4

因为单反矩阵H有8个自由度,所以需要至少4个对应关系,因此需要8个线性方程来找到解。由于每对点生成两个线性方程(使用x和y坐标),因此总共需要至少4个对应关系。

+0

你能给我一个提示,我可以读这个方程吗?我只在文中发现了一些短语,告诉我“你至少需要4分”,但没有任何解释。 –

+0

看看这个:http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf – memecs