OpenCV CV findHomography断言错误 - counter => 4

时间:2013-01-20 22:44:52

标签: opencv homography ransac

我目前正在完成针对兴趣点探测器的评估工具。在最后的步骤中,我发现了一个令人困惑的错误。

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

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

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

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

不能用少于4对点来计算单应性。那是因为只有3分,存在视角模糊。画一个三角形

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点是足够的。

答案 1 :(得分:4)

RANSAC用于在更大的集合或对应中选择4对匹配点(即srcPoints.size() >= 4时)。这就是srcPoints.size() <=4

出现错误的原因

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