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

mil*_*ili 3 computer-vision homography emgucv

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

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

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

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

在此先感谢您的帮助.

jle*_*s42 7

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

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


Vla*_*lad 6

要找出所需的相机运动(精确旋转和平移到比例因子)

  • 例如,使用八点算法计算基本矩阵F.
  • 计算基本矩阵E = A'FA,其中A是内在相机矩阵
  • 根据定义将Ex分解为Ex,通过SVD分解为E = ULV'
  • 创建一个特殊的3x3矩阵

        0 -1  0   
    W = 1  0  0      
        0  0  1  
    
    Run Code Online (Sandbox Code Playgroud)

这有助于运行分解:

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

      0  -tx  ty
Tx =  tz  0   -tx
     -ty  tx   0 
Run Code Online (Sandbox Code Playgroud)
  • 由于E可以有任意符号而W可以被Winv取代,我们有4个不同的解决方案,必须选择在相机前面产生大多数点的那个.