如何从单应性计算旋转和平移矩阵?

时间:2012-02-14 03:05:21

标签: computer-vision emgucv homography

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

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

我读了一个名为'Homograhy分解'的东西。是这样吗?

是否有人熟悉单应性分解,是否有任何算法实现?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:7)

Homography仅适用于平面场景(即:所有点都是共面的)。如果是这种情况,则单应性是一种投影变换,它可以分解为其组成部分。

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

答案 1 :(得分:6)

要确定相机运动(精确旋转和平移到比例因子),您需要

  • 例如,使用八点计算基本矩阵F. 算法
  • 计算基本矩阵E = A'FA,其中A是内在相机矩阵
  • 根据定义将Ex分解为Sx * R,通过SVD进入E = ULV'
  • 创建一个特殊的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个不同的解决方案,必须选择在相机前面产生最多点的那个。

答案 2 :(得分:3)

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

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

另外,Peter Corke的Vision Toolbox包含了执行此操作的工具。但是,他没有解释分解的大量数学