从OpenCV中的findHomography中检测垃圾单应性?
computer-vision
opencv
4
0

我在点列表上使用findHomography并将结果发送到warpPerspective

问题在于,有时结果是完全的垃圾,结果图像由怪异的灰色矩形表示。

我如何检测findHomography给我发送了不好的结果?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

了解退化的单应性情况是关键。例如,如果您的点是共线的或接近共线的,则您将无法获得良好的单应性。同样,巨大的灰色方块可能表示极端缩放。两种情况都可能源于最终单应性计算中的极小值或映射错误的事实。

为确保这永远不会发生:
1.确保点在两个图像中都均匀分布。
2.确保至少有10-30个对应(如果噪音很小,则4个就足够了)。
3.确保点正确匹配,并且变换是单应性。

要查找错误的单应性,请将找到的H应用于原始点,并查看与期望点的距离|x2-H*x1| < Tdist ,其中Tdist是距离误差的阈值。如果只有几个点满足此阈值,则您的单应性可能不好,并且您可能违反了上述要求之一。

收藏
评论

您可以对输出执行几个健全性测试。在我头顶上:

  1. 计算单应性的行列式,并观察它是否太接近零而无法舒适。
  2. 更好的是,计算其SVD,并验证第一个到最后一个奇异值的比率是合理的(不太高)。两种结果都会告诉您矩阵是否接近奇异。
  3. 计算图像角及其中心的图像(即,将单应性应用到这些角和中心时获得的点),并验证它们是否有意义,即它们是否在图像画布中(如果您希望它们位于图像画布中) )?他们彼此分开得好吗?
  4. 使用单应图,将适合单应性的输出(数据)点与输入值的计算值一起在matlab /八度图中进行绘制,并验证它们是否接近(即误差很小)。

导致垃圾结果的常见错误是输入和输出点列表的顺序不正确,这导致拟合例程使用错误的对应关系进行工作。检查索引是否正确。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号