2014-09-04 255 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的位置。