2014-09-04 687 views
8

我试图计算视频的两个连续帧之间的缩放,旋转和平移。所以基本上我匹配了关键点,然后使用opencv函数findHomography()来计算单应性矩阵。
homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypoints从Homography矩阵计算比例,旋转和平移

我的问题是:如何使用这个矩阵来计算比例,旋转和平移?
任何人都可以提供我的代码或解释如何做到这一点?

+1

该关键字是“单应性分解”。 Afair你可以提取旋转QR分解,但你应该更好地谷歌... – Micka 2014-09-04 07:31:36

+1

也许这一个(或其链接)将帮助:http://stackoverflow.com/questions/15420693/how-to-get-旋转平移剪切从一个3x3单应矩阵在c - 尖锐 – Micka 2014-09-04 07:36:03

+1

和这一个=)http://hal.archives-ouvertes.fr/docs/00/17/47/39/PDF /RR-6303.pdf – Micka 2014-09-04 07:38:14

回答

0

用于估计树维变换,并通过单应性引起的旋转,存在多种方法。 One of them提供了分解单应性的封闭公式,但它们非常复杂。而且,解决方案从来都不是唯一的。

幸运的是,OpenCV的3已经实现了这个分解(decomposeHomographyMat)。鉴于单应矩阵和正确缩放的内在矩阵,该函数提供了一组四种可能的旋转和平移。

1

让我们假设第三行的第一和第二小区都为0

分别

矩阵的第三列包含在X翻译,翻译在Y和1,。

至于单应性矩阵的剩余左上的2×2部分(其包含剪切,缩放和旋转),它可以被分解下列不同的方法。这里解释一个简单而快速的例子(这种方法假设可逆矩阵):https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix

+0

3D中的翻译无法完全恢复。 – Vlad 2015-10-15 04:10:50

0

正确的答案是使用Homography,因为它定义为dst = H。 src并探索它对特定点周围的小部分所起的作用。 对于翻译只是选择一个点: 翻译= DST-H的.src 对于旋转探索两点P1和P2。 p1'= H。 p1,p2'= H。 P2。现在只需计算矢量p1 p2和p1'p2'之间的角度。 对于规模你可以使用相同的技巧,但现在只需比较长度 | p1 p2 |和| p1'p2'|。要使用与第一个正交的另一个分段并且平均结果。你会看到没有恒定的比例因子或翻译。他们将取决于src的位置。