3

我已经使用emgucv (C#)中的SURF对同一场景的 2 张图像进行了比较,这些图像由一台具有不同视角(比如左右)的相机拍摄。它给了我一个用于 2D 转换的 3x3 单应矩阵。但现在我想在 3D 环境中制作这两个图像(使用 DirectX)。为此,我需要以 3D 形式计算第二张图像(右)与第一张图像(左)的相对位置和方向。如何计算第二张图像的旋转和平移矩阵?

我还需要第二张图像的 z 值。

我读了一些叫做“同质分解”的东西。是这样吗?

有没有人熟悉单应性分解并且有没有它实现的算法?

提前感谢您的帮助。

4

3 回答 3

7

单应性仅适用于平面场景(即:您的所有点都是共面的)。如果是这样的话,那么单应性就是一个射影变换,它可以分解成它的分量。

但是,如果您的场景不是共面的(我认为您的描述就是这种情况),那么它将需要更多的工作。您需要计算基本矩阵emgucv将为您做的),而不是单应性。基本矩阵是相机固有矩阵 (K)、两个视图之间的相对旋转 (R) 和平移 (t) 的组合。如果您知道 K,则恢复旋转和平移非常简单。看起来 emgucv 具有相机校准方法。我不熟悉他们的特定方法,但这些通常涉及拍摄具有已知几何形状的场景的几张图像。

于 2012-02-16T00:06:19.457 回答
6

要弄清楚相机运动(精确旋转和平移到缩放因子),您需要

  • 计算基本矩阵 F,例如,使用八点算法
  • 计算基本矩阵 E = A'FA,其中 A 是本征相机矩阵
  • 通过 SVD 将定义为 Tx * R 的 E 分解为 E=ULV'</li>
  • 创建一个特殊的 3x3 矩阵

        0 -1  0   
    W = 1  0  0      
        0  0  1  
    

这有助于运行分解:

R = UW -1 V T , Tx = ULWU T , 其中

      0  -tx  ty
Tx =  tz  0   -tx
     -ty  tx   0 
  • 由于 E 可以有任意符号,而 W 可以被 Winv 替换,我们有 4 个不同的解决方案,并且必须选择在相机前面产生最多点的那个。
于 2014-02-20T08:09:30.587 回答
3

你问这个问题已经有一段时间了。到目前为止,关于这个问题有一些很好的参考资料。

其中之一是 Ma 的“3D 图像邀请”,第 5 章在此处免费提供http://vision.ucla.edu//MASKS/chapters.html

此外,Peter Corke 的 Vision Toolbox 包括执行此操作的工具。然而,他并没有解释太多的分解数学

于 2014-04-16T06:55:00.870 回答