首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用一个点在大距离(使用opencv)计算相机方向?

如何使用一个点在大距离(使用opencv)计算相机方向?
EN

Stack Overflow用户
提问于 2014-06-17 02:59:03
回答 1查看 1.1K关注 0票数 0

假设我有一个针孔相机,它具有像相机矩阵和失真系数这样的已知内在值。假设有一个离相机足够远的点,所以我们可以说它被放置在无穷远的地方。

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

如何使用opencv做到这一点?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-06-19 10:06:56

您需要指定一个附加约束-将摄影机从其当前姿势旋转到使光轴与任意光线对齐的姿势,从而使摄影机可以围绕光线本身自由旋转(即,保留未指定的“滚动”角度)。

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

然后按如下方式计算该解。让我们使用OpenCV相机框架: Z=0,0,1‘(其中“’”表示转置)是相机焦距轴,朝向镜头外,Y=0,1,0‘是垂直轴向下,X=Z x Y(其中'x’是叉积)是朝向图像右侧的水平相机轴。所以"pan“是绕Y旋转,"tilt”是绕X旋转。

设U= u1,u2,u3',|| u || =1是要旋转到的射线。您想要应用将Z带到由向量u和Y定义的平面Puy上的平移,然后应用将Z带到u上的倾斜。

第一次旋转的角度是(Z和Puy之间的角度)= 90度-(Z和Y x U之间的角度)。这是因为Y x U与Puy正交。在维基百科或其他在线网站上查找用于计算矢量之间角度的表达式。一旦有了角度(或其余弦和正弦),围绕Y的旋转就可以表示为标准旋转矩阵Ry。

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

最后的变换是Rx * Ry。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24250350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档