首页 > 解决方案 > 使用单应性估计摄像机角度

问题描述

我一直在尝试从两帧之间的单应性估计无人机的欧拉角 (Rotz(yaw)*Roty(pitch)*Rotx(roll))。这意味着我从每一帧到前一帧的旋转必须乘以前一帧才能获得相对于初始轴的总旋转。所以: R_accumulated=R01*R12*... 这些 R 是从 openCV 中的 decomposeHomography() 获得的。根据 REP 和 OpenCV 单应性页面,相机参考是 Z 向前,X rigth 和 Y 向下,但我的 UAV 参考系统是 ENU。问题是如何从 R_accumulated dron 方向中获得。

单应性的 R_accumulated 告诉您如何将一个平面转换为另一个平面。所以如果我想要相机方向,相机必须做相反的运动才能得到相同的结果(inv(R_accumulated))?那么应该将相机方向矩阵转换为 ENU 坐标吗?我已经尝试过几次旋转,但我没有得到好的结果。

我所拥有的最好的方法是直接从 R_accumulated 获取角度并交换俯仰和滚动。这是一个很好的估计,但我仍然需要知道从相机框架到无人机框架的某种旋转矩阵。

我不知道你是否理解我。

标签: opencvrotationorientationhomographypose-estimation

解决方案


最后,我有解决我的问题的方法:

如果 UAV 轴与相机的轴不同,我们必须找到一个矩阵 R1,将 UAV 轴转换为相机轴,另一个执行相同任务的矩阵,从相机轴到 UAV 轴,R2。

单应性返回应该应用于第一个 PICTURE 以获得第二个 PICTURE 的平移和旋转的值。但我们想要的是相机姿势,而不是照片。因此,例如,如果 z 轴指向具有向上箭头的对象,则 IMAGE 围绕该前向轴旋转 90º 将使箭头指向正确。但这不是相机必须做的旋转才能使箭头指向正确。如果您希望箭头指向右侧,则必须将相机沿同一轴旋转 -90º。总之,相机运动是图像的倒数,因此相机旋转将是单应性旋转的倒数,并且平移将为 -1*(homography_traslation) * scale_factor。

假设我们在初始图像和最终图像之间有一个旋转 R。如果我们想得到无人机的欧拉角(最好叫Tait-Brian)为Rotz * Roty * Rotx,我们必须计算R1 * inv(R) * R2的EulerAngles。R 是帧之间所有中间旋转的乘积,因此 R = Rinit * ... * Rend


推荐阅读