【问题标题】:How to calculate the fundamental matrix for stereo vision如何计算立体视觉的基本矩阵
【发布时间】:2011-07-28 21:04:33
【问题描述】:

我正在尝试编写一些代码来计算基本矩阵以确定立体图像之间的关系。我从大多数人推荐的 Hartley 和 Zisserman 书开始,但它没有任何实际示例,而且它的示例代码在我没有的 MATLAB 中。然后我切换到An introduction to 3D Computer Vision Techniques and Algorithms,它更实用,并且有实际示例。我使用 Python 和 numpy 实现了推荐的 8 点算法,但我无法验证它的有效性。

我正在使用该书第 48 页上列出的数据集(使用上面的链接查看 Google 图书节选)。当我将这些点标准化时,我得到的结果与那本书相同。但是,当我使用 numpy 的 SVD 函数计算基本矩阵时,我得到以下 F 值:

[[-0.01851684 -0.21631176 -0.67036356]
 [ 0.2605251  -0.01023853  0.14234079]
 [ 0.63748775 -0.09404508 -0.00220713]]

这个矩阵满足方程 p_R^ * F * p_L = 0 所以看起来是正确的。但是,它与书中计算的矩阵有很大的不同。我尝试使用 OpenCV 的 cv.FindFundamentalMat() 仔细检查答案,我得到了第三个答案:

[[  22.98129082  271.46453857  853.74273682]
 [-334.1673584    -4.84123087 -175.99523926]
 [-809.88891602  125.99833679    1.        ]]

我不是其他两个矩阵是如何计算的,但是我在网上找不到任何基本矩阵计算的例子来验证我的 8 点算法的实现。我的实现返回一个满足等式的值这一事实给了我信心,但我担心我做了一些愚蠢的事情,这就是为什么我无法匹配书中或 OpenCV 中的结果。

【问题讨论】:

  • 您是从数据集中的归一化点开始还是从原始点开始获得上述两个基本矩阵?

标签: opencv computer-vision stereo-3d


【解决方案1】:

请注意,基本矩阵被定义为一个常数因子(您可以通过检查对极约束很容易地验证这一点)。尝试将 OpenCV 矩阵与 -8.0574e-04 相乘,你会发现这两个矩阵最后非常相似 :-)

因此,您的结果可能很好。结果之间的细微差别可能是由于 OpenCV 采用了与 8 点算法不同(可能更稳健)的方法。

【讨论】:

  • 我知道这将是我错过的一些愚蠢的事情。感谢您的帮助。
猜你喜欢
  • 2014-01-17
  • 2019-02-19
  • 2021-05-29
  • 2013-05-23
  • 1970-01-01
  • 2019-11-06
  • 2022-12-10
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多