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

MB.*_*MB. 21 opencv computer-vision homography

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

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

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

Fra*_*ari 31

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

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

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

  • 任何人都能解释2.条件进一步?我如何计算SVD并验证OpenCV的第一个到最后一个奇异值的比率是否合理? (2认同)
  • http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#SVD传递NO_UV,因为您只对奇异值感兴趣.然后计算第一个到最后一个奇异值的比率(条件数).也见条件数的解释:http://books.google.com/books?id=1aAOdzK3FegC&pg=PA69&lpg=PA69&dq=numerical+recipes+condition+number&source=bl&ots=3iSoC8Hoqi&sig=Aq1Yc2MHTpXPI4t8wIhU7h388jg&hl=en&sa=X&ei=hUmKUaqeMemx0QXr -ICAAg&VED = 0CDMQ6AEwAA#v = onepage&q =数值%20recipes%20condition%20number&F =假 (2认同)
  • @Franco谢谢你的回答.我在书中有一个最后的问题,它说"如果条件数是无限的,矩阵是奇异的,如果条件数太大,则是条件差." 因此,当你说"检查条件数是否合理"时,你的意思是它不是无限的或不是太大.我的困惑从这里开始,太大了,有固定数字还是有计算?我试图谷歌它,有人问同样的问题,但还没有得到任何有用的答案. (2认同)
  • 您能再解释一下您的第一点吗?为什么接近 0 的行列式值意味着单应性不好?我使用 hg_acc= float(np.sum(status)) / len(status) 计算单应性准确性,其中 H, status = cv2.findHomography(p1, p2, HMETHOD, 10)`。我发现 `hg_acc` 可能在 85-90% 之间,但行列式值会在 0.07 到 ~5000 之间变化。 (2认同)
  • 一个完全奇异的矩阵意味着一个 2D 图像中的点被映射到另一个图像中小于 2D 的子空间(一条线,一个点),即估计的单应性会将图像扭曲成零。几乎奇异的矩阵表示相当极端的扭曲。鉴于您(通常)以有限的精度进行算术运算,估计映射的准确性可能非常差。 (2认同)