我在试着确定视频中一张脸的方向。
视频从面部的正面图像开始,因此它没有旋转。在下面的帧中,头部旋转,我正在尝试确定旋转,这将导致我根据相机位置确定面部方向。
我使用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分解、单应矩阵等的所有内容,但我一直无法绕过这个问题。因此,任何帮助都是非常感谢的。
谢谢!
发布于 2014-09-03 10:27:11
单应矩阵的左上角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)https://stackoverflow.com/questions/17239627
复制相似问题