假设我有一个针孔相机,它具有像相机矩阵和失真系数这样的已知内在值。假设有一个离相机足够远的点,所以我们可以说它被放置在无穷远的地方。
给定该点的图像坐标(以像素为单位),我想计算相机相对于连接相机和该点的轴的旋转(因此,如果相机指向该点且位于图像的光学中心,则旋转为0,0 )。
如何使用opencv做到这一点?
非常感谢!
发布于 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。
https://stackoverflow.com/questions/24250350
复制相似问题