0

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

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

使用opencv如何做到这一点?

非常感谢!

4

1 回答 1

1

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

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

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

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

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

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

最终的转换是 Rx * Ry。

于 2014-06-19T02:06:55.943 回答