25

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

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

如何检测何时findHomography向我发送不良结果?

4

3 回答 3

37

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

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

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

于 2012-06-11T13:39:39.943 回答
4

理解退化单应性情况是关键。例如,如果您的点共线或接近共线,则无法获得良好的单应性。此外,巨大的灰色方块可能表示极端缩放。这两种情况都可能源于最终单应性计算中的内点很少或映射错误。

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

要找到不良的单应性,请将找到的 H 应用于您的原始点,并查看与您的预期点的分离,即|x2-H*x1| < TdistTdist您的距离误差阈值在哪里。如果只有少数点满足此阈值,则您的单应性可能很差,并且您可能违反了上述要求之一。

于 2014-02-23T07:37:14.563 回答
0

但这取决于您用来计算单应性的点对应...只要想一想您正在尝试找到将线映射到线(从一个平面到另一个平面)的转换,因此点对应的任何可能配置都不会给你一个创建漂亮图像的单应性。单应性甚至可能将一些点映射到无穷大。

于 2013-10-25T16:45:38.407 回答