我有一个相机安装在一个职位上,这是看着一个特定的领域。我知道确切的真实的世界的位置相机C
和我知道的确切大小和现实世界的位置领域P1, P2, P3, P4, W, H
。
问题是摄像机可能会旋转,我想获得精确的旋转值(偏航、俯仰、滚动)。
我可以很容易地找到所有的角,我使用cv2.getPerspectiveTransform
得到透视矩阵H
,但我不知道如何从中提取旋转值/矩阵。
我有一个解决方案,得到一些近似值,但它是非常“启发式”,似乎太复杂了。我也可以使用cv2.solvePnP
,但它“试图”估计已知的位置,所以它看起来也不是最优的。
我的常识告诉我,我应该只分解矩阵H
,但我只是不确定如何分解。我的意思是,它是一个3x 3矩阵,我应该使用4x 4。我可以添加一些1或0,但我真的很想了解我在做什么,而不是“只是有一个工作解决方案”。
我真的很高兴如果有人能帮助我这一点,并给予一个简单的解释。我附上三维投影更好地理解。
编辑:我也做了校准,并有内在的params/矩阵,但现在我想解决它的“虚拟”相机。
提前感谢!
第一次
1条答案
按热度按时间f87krz0w1#
好的,我设法找到了解决方案-我使用Grunert's Method作为参考。
TLDR:由于我有平移向量和3个相应的3D-2D点,因此我可以跳过p3 p问题的第一部分(查找从摄像机到3个点的距离),而只关注第二部分,即刚体变换,并从以下等式中获得
R
矩阵:使用SVD分解很容易,我使用this作为参考。
@Micka再次感谢你的提示!