2013-06-21 36 views
2

我試圖確定視頻中臉部的方向。從視頻中的單應性提取臉部旋轉

視頻從臉部的正面圖像開始,因此它沒有旋轉。在下面的框架中,頭部旋轉,我試圖確定旋轉,這將導致我根據相機位置確定臉部方向。

我正在使用OpenCV和C++作業。 我正在使用SURF描述符來查找我用來計算兩幅圖像之間的單應性的臉上的點。作爲兩個非常接近的框架,頭部旋轉在該間隔內將是最小的,並且我的單應性矩陣將接近單位矩陣。

這是我的同形矩陣:

H = findHomography(k1,k2,RANSAC,8); 

其中K1和K2與SURF提取的關鍵點。

我使用decomposeProjectionMatrix來提取旋轉矩陣,但現在我不知道如何解釋rotMatrix。這個也基本上是(1 0 0; 0 1 0; 0 0 1)(其中0是從e-10到e-16範圍內的數字)。

理論上,試圖做的是找到每個幀的旋轉角度並將其存儲在某個地方,這樣,如果我在每幀中獲得1°的變化,在10幀後我知道我的頭部已經改變了方向10°。

我花了一些時間閱讀有關QR分解,單應性矩陣等的所有內容,但是我一直無法解決這個問題。因此,任何幫助將非常感激。

謝謝!

回答

0

單應性矩陣的左上角2x2是2D旋轉矩陣。如果您通過矩陣的一個點乘法工作(即取R * P),你會看到它的等價於:

newX = oldVector dot firstRow 
newY = oldVector dot secondRow 

換句話說,矩陣的第一行是一個單位向量,其是新頭的x軸。 (如果幀之間存在比例差異,它將不是一個單位矢量,但這種方法仍然有效。)因此,您應該能夠計算出

rotation = atan2(second entry of first row, first entry of first row)