从OpenCV中的findHomography检测垃圾单应性?

问题描述 投票:21回答:3

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

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

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

opencv computer-vision homography
3个回答
30
投票

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

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

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


3
投票

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

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

为了找到不良的单应性,将H发现到原始点并看到与预期点的分离,即|x2-H*x1| < Tdist,其中Tdist是距离误差的阈值。如果只有少数点满足此阈值,则单应性可能很差,并且您可能违反了上述要求之一。


0
投票

但这取决于你用来计算单应性的点对应...只是认为你正在试图找到一个将线映射到线(从一个平面到另一个平面)的变换,所以没有任何可能的点对应配置将给你一个创造出漂亮图像的单应性。单应性甚至可能将一些点映射到无穷大。

© www.soinside.com 2019 - 2024. All rights reserved.