从视频中的单应性中提取面部旋转

时间:2013-06-21 16:03:20

标签: opencv computer-vision surf homography qr-decomposition

我正在尝试确定视频中脸部的方向。

视频以脸部的正面图像开始,因此没有旋转。在下面的帧中,头部旋转,我正在尝试确定旋转,这将导致我根据摄像机位置确定面部方向。

我正在使用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分解,单应性矩阵等的所有内容,但我无法解决这个问题。因此,任何帮助都会非常感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

单应矩阵的左上2×2是2D旋转矩阵。如果你通过矩阵与一个点的乘法(即取R * p),你会发现它相当于:

newX = oldVector dot firstRow
newY = oldVector dot secondRow

换句话说,矩阵的第一行是单位向量,它是新头的x轴。 (如果帧之间存在比例差异,它将不是单位矢量,但此方法仍然有效。)所以你应该能够计算

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