我已经使用emgucv(C#)中的 SURF 对两个相同场景的图像进行了比较,这两个图像由具有不同视角(例如左和右)的一个摄像机拍摄。它给了我一个3x3单应矩阵用于2D变换。但现在我想在3D环境中制作这两个图像(使用DirectX)。为此,我需要以3D形式计算第二张图像(右)与第一张图像(左)的相对位置和方向。如何为第二张图像计算旋转和平移矩阵?
我还需要第二张图像的z值。
我读了一个名为'Homograhy分解'的东西。是这样吗?
是否有人熟悉单应性分解,是否有任何算法实现?
提前感谢您的帮助。
答案 0 :(得分:7)
Homography仅适用于平面场景(即:所有点都是共面的)。如果是这种情况,则单应性是一种投影变换,它可以分解为其组成部分。
但是如果你的场景不是共面的(我认为你的描述就是这种情况),那么它将需要更多的工作。您需要计算fundamental matrix(emgucv将为您执行的操作),而不是单应性。基本矩阵是相机固有矩阵(K),两个视图之间的相对旋转(R)和平移(t)的组合。如果你知道K,那么恢复轮换和翻译是非常简单的。看起来emgucv有camera calibration的方法。我不熟悉他们的特定方法,但这些通常涉及拍摄具有已知几何的场景的几个图像。
答案 1 :(得分:6)
要确定相机运动(精确旋转和平移到比例因子),您需要
创建一个特殊的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
答案 2 :(得分:3)
你问这个问题已经有一段时间了。到目前为止,对这个问题有一些很好的参考。
其中一个是Ma的“3D图像邀请”,其中第5章是免费的http://vision.ucla.edu//MASKS/chapters.html
另外,Peter Corke的Vision Toolbox包含了执行此操作的工具。但是,他没有解释分解的大量数学