首页 文章

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

提问于
浏览
0

假设我的针孔相机具有已知的内在值,如相机矩阵和失真系数 . 假设距离相机有足够远的距离,所以我们可以说它放在无穷远处 .

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

如何使用opencv完成?

非常感谢!

1 回答

  • 1

    您需要指定一个额外的约束 - 将相机从其当前姿势旋转到使光轴与任意光线对齐的相位,使相机自由地围绕光线本身旋转(即,它未指定“滚动”角度) .

    让我们假设您希望滚动为零,即您希望运动是纯粹的平移 . 只要您要对齐的光线与垂直图像轴不平行(在这种情况下摇摄和滚动是相同的运动),这就有一个独特的解决方案 .

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

    设U = [u1,u2,u3]',||你|| = 1是要旋转的光线 . 你想要应用一个平移器,它将Z带到由向量u和Y定义的Puy平面上,然后应用一个将Z带到u上的倾斜 .

    第一次旋转的角度是(Z和Puy之间的角度)= [90度 - (Z和Y×U之间的角度)] . 这是因为Y x U与Puy正交 . 在维基百科或其他地方在线查找用于计算向量之间角度的表达式 . 一旦获得角度(或其余弦和正弦),围绕Y的旋转可以表示为标准旋转矩阵Ry .

    第二次旋转的角度,一旦Z到Puy后大约为X,是将Ry应用于Z后的矢量Z和U之间的角度,或者等效地,在Z和inv(Ry)* U之间的角度 . 计算矢量之间的角度,并用于构建关于X,Rx的标准旋转矩阵

    最后的转变是Rx * Ry .

相关问题