gpt4 book ai didi

opencv - 如何使用远距离的一个点(使用opencv)来计算相机方向?

转载 作者:行者123 更新时间:2023-12-02 17:50:08 24 4
gpt4 key购买 nike

假设我有一台针孔相机,它具有已知的intristic值,例如相机矩阵和失真系数。假设有一个点距离相机足够远,所以可以说它位于无限远处。

给定该点的图像坐标(以像素为单位),我想计算相对于连接该点和该点的轴的相机旋转(因此,如果将相机对准此点并且在图像的光学中心,则旋转为0,0 )。

如何使用opencv完成?

非常感谢!

最佳答案

您需要指定其他约束条件-将摄影机从其当前姿势旋转到使光轴与任意光线对齐的位置,使摄影机可以围绕光线本身自由旋转(即,未指定“横滚” Angular )。

假设您希望滚动为零,即您希望运动为纯水平倾斜。只要您要对齐的光线不平行于垂直图像轴(在这种情况下摇摄和摇晃都是相同的运动),这就有一个独特的解决方案。

然后,解的计算如下。让我们使用OpenCV相机框架:Z = [0,0,1]'(其中“'”表示转置)是相机聚焦轴,朝向镜头外,Y = [0,1,0]'垂直轴朝下,X = Z x Y(其中“x”是叉积),水平相机轴朝图像右侧。因此“平移”是围绕Y的旋转,“倾斜”是关于X的旋转。

令U = [u1,u2,u3]',其中||你|| = 1是要旋转到的光线。您想要应用一个将Z带到 vector u和Y定义的平面Puy上的平移,然后应用一个将Z带到u上的倾斜。

第一次旋转的 Angular 是(Z和Puy之间的 Angular )= [90度-(Z和Y之间的 Angular x U)。这是因为Y x U与Puy正交。查找表达式,以计算Wikipedia或在线其他位置上的 vector 之间的 Angular 。一旦有了 Angular (或其余弦和正弦),围绕Y的旋转就可以表示为标准旋转矩阵Ry。

第二次旋转的 Angular ,即Z到达Puy之后大约为X的 Angular ,是将Ry应用于Z之后 vector Z与U之间的 Angular ,或者等效地为Z与inv(Ry)* U之间的 Angular 。计算 vector 之间的 Angular ,并用于建立有关X,Rx的标准旋转矩阵

最终的变换为Rx * Ry。

关于opencv - 如何使用远距离的一个点(使用opencv)来计算相机方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24250350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com