我目前正在完成兴趣点检测器的评估工具。在最后的步骤中我发现了一个令人困惑的错误。
Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() )
srcPoints
和dstPoints
为vector<Points2f>
, CC_3存储匹配的关键点对应的点。到目前为止没有什么特别的-就像在教程中一样。
但是当我使用RANSAC并在范围[0,…], 4],我得到一个断言错误,计数器应该大于或等于4。
问题1:算法是否需要至少四个点来描述什么属于当前模型并创建共识?
问题2:有关于这个的文档吗?(我看了一下文档和教程。)
请注意,我已经看到了这个问题。但是对于RANSAC的行为并没有令人满意的答案。或者我应该接受这个方法至少需要四个点才能找到同形词?
谢谢你的帮助。
单应性不能小于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点是足够的之前,你不必读得很远。
RANSAC用于在一个较大的集合或对应(即srcPoints.size() >= 4
)中选择4对匹配点。这就是为什么你得到一个错误,如果srcPoints.size() <=4
.
你至少需要4个对应,因为一个单应矩阵H
有8个自由度,因此需要8个线性方程才能找到一个解。由于每对点生成两个线性方程(使用x和y坐标),您将总共需要至少4个对应。