【问题标题】:How can you tell if a homography matrix is acceptable or not?如何判断单应矩阵是否可以接受?
【发布时间】:2012-06-18 16:00:13
【问题描述】:

当使用 OpenCV 的 findHomography 函数来估计来自不同图像的两组点之间的单应性时,即使您使用 RANSAC 或 LMEDS,有时也会由于输入点内的异常值而得到错误的单应性。

// opencv java example:
Mat H = Calib3d.findHomography( src_points, dst_points, Calib3d.RANSAC, 10 );

如何判断生成的 3x3 单应矩阵是否可接受?

我已在 Stackoverflow 和 Google 中寻找此问题的答案,但无法找到。

我找到了这篇文章,但对我来说有点神秘:

"The geometric error for homographies"

【问题讨论】:

  • 如果您的相机移动受限,您可以尝试分解您的单应性并测试比例、旋转和/或平移参数以获得剧烈的值。其他方法:如果您知道(或接受约束)图像的大部分应该重叠,您可以在变形后计算重叠并确定它是否可能是明显错误的单应性。其他方法:如果您使用 RANSAC,您可以根据内点数(和/或内点/总比)决定是否应拒绝单应性)
  • @Micka 感谢您的帮助,我已经在使用 RANSAC,相机移动不受限制,我一直在寻找丢弃单应性(主要是数学)的方法,然后再进行更重的计算,例如应用单应性和检查重叠。
  • 如果您使用内置的 openCV RANSAC,您甚至不会明确获得内嵌的数量,是吗?检查重叠是相当便宜的,因为您只需要转换图像的角落。 Francesco Callari 的帖子中显示的计算行列式也是常见的操作。
  • 是的 OpenCV findHomography with RANSAC 为您提供了一个包含内点的数组。你是对的,将 H 应用到角落可能会很好。

标签: opencv geometry computer-vision homography


【解决方案1】:

判断单应性是否可接受的最好方法是。

1- 获取一张图像的点并使用计算的单应性重新投影它们。

//for one 3D point, this would be the projection
px' = H * px;
py' = H * py;
pz' = H * pz;

2- 计算重投影点与图像中真实点之间的euclidean distance

Reprojection error 一分。 p是投影点,q是实点。

3- 建立一个阈值来决定重投影误差是否可以接受。

例如,对于许多跟踪应用程序来说,大于一像素的误差是不可接受的。

【讨论】:

  • 当您知道两个图像很可能在相似位置共享一个补丁时,您的建议对跟踪有效。当您计算两个不同图像之间的单应性以检查一个图像是否包含另一个图像时,重投影误差根本没有用。例如,在我的情况下,我经常将一张图像中的很多(约 30)点映射到第二张图像中的同一点(或少数接近点)。您对这个案例有什么建议吗?
  • 您仍然可以将其用作图片之间的“距离”测量值。因此,您的声明“用于检查一个图像是否包含另一个图像,重投影错误根本没有用。”是错的。如果您需要在图片之间创建距离,这很有用。
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2018-09-23
相关资源
最近更新 更多