旋转矩阵openCV

6
我想知道如何为一个框架中的一组特征找到旋转矩阵。更具体地说,我有两个框架和20个特征,假设是框架1和框架2。我可以估计出两个框架中特征的位置。例如,假设某个框架1中的特征在位置(x,y),我知道它确切的位置,所以假设为(x',y')。
我的问题是这些特征会移动和旋转,因此我想知道如何计算旋转矩阵。我知道2D旋转矩阵的公式:
[ cos(θ) -sin(θ) ] [ sin(θ) cos(θ) ]
但我不知道如何计算角度。我尝试过OpenCV中的函数cv2DRotationMatrix(),但我的问题是我不知道如何计算旋转矩阵的角度,而且这个函数会返回一个2*3的矩阵,所以这个结果对我没有用。如果我把这个20*2的矩阵(20是特征数,2是(x,y)坐标)乘以一个2*3的矩阵,也就是该函数返回的结果,那么我得到的将是一个20*3的矩阵,这看起来不现实,因为我是在处理2D的问题。那么我该怎么办?请具体说明如何计算角度以便用于旋转矩阵的计算。
2个回答

6

我不确定我是否理解了你的问题,但如果你想找出任意变换所导致的旋转角度...

一个简单的技巧是对点[0 0]和[1 0]进行变换,并获取从第一个变换点到第二个变换点的射线的角度。

o = M • [0 0]
x = M • [1 0]
d = x - o
θ = atan2(d.y, d.x)

这并没有考虑倾斜和其他非正交变换,对于这些情况,“角度”的概念是模糊的。


1
非常感谢您的回答,我尝试了这样做: angle1 = atan2( (double) p.y - q.y, (double) p.x - q.x ); 但我不确定是否正确。非常感谢,现在我可以继续进行了。 - Mario

3

看看这个函数:

cvGetAffineTransform

你在第一帧中给它三个点,在第二帧中给它三个点。然后它会计算仿射变换矩阵(平移+旋转)。

如果你想的话,也可以尝试

cvGetPerspectiveTransform

用它,你可以得到平移+旋转+倾斜+许多其他效果。


谢谢您的评论,我已经采用了atna2,并且结果非常惊人。 - Mario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接