【问题标题】:Find Homography matrix from Fundamental matrix从基本矩阵中找到单应矩阵
【发布时间】:2014-05-11 21:15:28
【问题描述】:

给定一组对应关系和基本矩阵F,我正在尝试计算单应矩阵H

根据对极几何原理,我知道这可以通过epiline 和F 的叉积来完成,来自Epipole Geometry

[e_ij] x F_ij = H_ij

我正在使用 OpenCV 从使用 cv::findFundamentalMat() 的两个视图之间的匹配集中查找基本矩阵 F

我的问题是如何找到e_ij 以及如何使用它来计算H。在OpenCV 中有一个函数cv::computeCorrespondEpilines() 可以找到对应于每个给定点的epilines。

值得一提的是,我对直接从匹配集计算 H 不感兴趣,而只对计算的基本矩阵感兴趣。

谢谢

【问题讨论】:

  • 其实这是一道数学题;)
  • 理论上,基本矩阵应该是 2 阶的,它的内核(左右)只是极点。因此,如果您的H 公式正确,则问题归结为找到F 的内核。当然,由于矩阵可能是从一些实际测量中计算出来的,所以秩总是 3,所以你应该使用类似 SVD 分解来找到对应于最小特征值的特征向量 (最接近于零),您就可以开始了。
  • 您的核线符号令人困惑,因为e 通常表示核线。您应该使用l 作为外线。
  • @AldurDisciple 我也不确定e。这就是为什么我提供了我使用的参考资料的链接。如果那是极点,我应该如何计算和使用它。

标签: opencv geometry computer-vision homography


【解决方案1】:

首先,请注意您在链接中提到的方程 (C29) 使用与 eij 坐标相同的直线 l,即图像 j 中的极点。因此, l=eij 不是外延线,因为 dot( eij , eij ) == norm(eij )² == 1 != 0.

如果我坚持你的链接中给出的符号,你可以计算极点 eij 作为 Fij 的左空向量。您可以通过在F_ij 的转置上调用cv::SVD::solveZ 来获得它。然后,正如您的链接中提到的,单应性 Hij (将点从图像 i 映射到图像 j)可以计算为 Hij = [e ij]x Fij,其中符号 [eij]x 指的是 3x3斜对称算子。这个符号的定义可以在Wikipedia article on cross-product中找到。

但是,请注意,这种单应性 Hij 定义了从图像 i 到图像 j 的映射,该映射通过使用与 eijij 坐标相同的线从图像 j 反向投影的平面子>。一般来说,这将给出与cv::findHomography 返回的结果非常不同的结果,其中得到的单应性是通过观察场景中的主平面从图像 i 到图像 j 的映射。因此,您将能够使用cv::findHomography 返回的单应性来近似配准这两个图像,但对于使用上述方法获得的单应性,通常情况并非如此。

【讨论】:

  • 感谢您的回复。符号现在对我来说很清楚了。问题是这种方法对于查找H 是否明智?使用F而不是直接计算H的原因是我想在一定程度上放松非平面性。我知道可以从F 检索H,但到目前为止我找不到实现。
  • @HamidBazargani 不幸的是,当从一个图像映射到另一个图像时,您不能放松单应性的非平面性(除非它们是从同一个光学中心获取的)。你可以推导出你喜欢的任何平面的单应性,但总是有一个,即使不容易看出是哪一个。如果您想更准确地配准两个图像,您应该看看光流和/或密集立体匹配技术。
猜你喜欢
  • 2019-11-06
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多